summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Dethrow <log@lindenlab.com>2011-09-09 14:20:19 -0400
committerLogan Dethrow <log@lindenlab.com>2011-09-09 14:20:19 -0400
commit8a952e42e97cfb286192aba0fbfc43986912cd29 (patch)
tree6aa00aad42189239aa81972328e057afc215bf7d
parentc47b398b75fcdbb479ad9ad2765014c5fa338df7 (diff)
parent89b9800579a37fbbdfca7789716a2d012d96cfa5 (diff)
Removed some spurious newlines that I introduced into CMakeLists.txt.
-rw-r--r--.hgignore1
-rw-r--r--.hgtags58
-rwxr-xr-x[-rw-r--r--]BuildParams43
-rw-r--r--autobuild.xml77
-rwxr-xr-xbuild.sh4
-rw-r--r--doc/contributions.txt307
-rw-r--r--doc/translations.txt29
-rw-r--r--indra/CMakeLists.txt2
-rw-r--r--indra/cmake/00-Common.cmake5
-rw-r--r--indra/cmake/Copy3rdPartyLibs.cmake18
-rw-r--r--indra/cmake/FMOD.cmake14
-rw-r--r--indra/cmake/FindAutobuild.cmake10
-rw-r--r--indra/cmake/FindJsonCpp.cmake4
-rw-r--r--indra/cmake/FindLLQtWebkit.cmake2
-rw-r--r--indra/cmake/FindZLIB.cmake6
-rw-r--r--indra/cmake/GoogleMock.cmake2
-rw-r--r--indra/cmake/GooglePerfTools.cmake2
-rw-r--r--indra/cmake/LLPlugin.cmake4
-rw-r--r--indra/cmake/LLPrimitive.cmake2
-rw-r--r--indra/cmake/LScript.cmake2
-rw-r--r--indra/cmake/NDOF.cmake20
-rw-r--r--indra/cmake/WebKitLibPlugin.cmake22
-rw-r--r--indra/fix-incredibuild.py23
-rw-r--r--indra/integration_tests/llimage_libtest/CMakeLists.txt6
-rw-r--r--indra/integration_tests/llimage_libtest/llimage_libtest.cpp4
-rw-r--r--indra/integration_tests/llui_libtest/llwidgetreg.cpp2
-rw-r--r--indra/lib/python/indra/base/cllsd_test.py22
-rw-r--r--indra/lib/python/indra/base/lluuid.py6
-rw-r--r--indra/lib/python/indra/ipc/httputil.py21
-rw-r--r--indra/lib/python/indra/ipc/russ.py2
-rw-r--r--indra/lib/python/indra/ipc/siesta_test.py21
-rw-r--r--indra/lib/python/uuid.py21
-rw-r--r--indra/linux_crash_logger/linux_crash_logger.cpp14
-rw-r--r--indra/linux_crash_logger/llcrashloggerlinux.cpp2
-rw-r--r--indra/llaudio/llaudioengine_fmod.cpp2
-rw-r--r--indra/llaudio/llvorbisencode.cpp9
-rw-r--r--indra/llcharacter/CMakeLists.txt12
-rw-r--r--indra/llcharacter/llbvhloader.cpp3
-rw-r--r--indra/llcharacter/llcharacter.cpp25
-rw-r--r--indra/llcharacter/llcharacter.h1
-rw-r--r--indra/llcharacter/llkeyframemotion.cpp73
-rw-r--r--indra/llcharacter/llkeyframemotion.h2
-rw-r--r--indra/llcharacter/llkeyframemotionparam.cpp3
-rw-r--r--indra/llcharacter/llstatemachine.cpp3
-rw-r--r--indra/llcommon/CMakeLists.txt6
-rw-r--r--indra/llcommon/indra_constants.h2
-rw-r--r--indra/llcommon/llapp.cpp4
-rw-r--r--indra/llcommon/llapr.cpp445
-rw-r--r--indra/llcommon/llapr.h107
-rw-r--r--indra/llcommon/llaprpool.cpp202
-rw-r--r--indra/llcommon/llaprpool.h256
-rw-r--r--indra/llcommon/llcommon.cpp13
-rw-r--r--indra/llcommon/llcommon.h2
-rw-r--r--indra/llcommon/llerror.cpp5
-rw-r--r--indra/llcommon/llerror.h15
-rw-r--r--indra/llcommon/lleventtimer.cpp20
-rw-r--r--indra/llcommon/llfasttimer_class.cpp37
-rw-r--r--indra/llcommon/llfixedbuffer.cpp3
-rw-r--r--indra/llcommon/llfoldertype.cpp2
-rw-r--r--indra/llcommon/llfoldertype.h5
-rw-r--r--indra/llcommon/llinstancetracker.cpp19
-rw-r--r--indra/llcommon/llinstancetracker.h252
-rw-r--r--indra/llcommon/llmemory.cpp1825
-rw-r--r--indra/llcommon/llmemory.h341
-rw-r--r--indra/llcommon/llscopedvolatileaprpool.h52
-rw-r--r--indra/llcommon/llsdserialize_xml.cpp35
-rw-r--r--indra/llcommon/llsingleton.h20
-rw-r--r--indra/llcommon/llstring.cpp13
-rw-r--r--indra/llcommon/llsys.cpp614
-rw-r--r--indra/llcommon/llsys.h22
-rw-r--r--indra/llcommon/llthread.cpp240
-rw-r--r--indra/llcommon/llthread.h133
-rw-r--r--indra/llcommon/llthreadsafequeue.cpp15
-rw-r--r--indra/llcommon/llthreadsafequeue.h16
-rwxr-xr-x[-rw-r--r--]indra/llcommon/llversionviewer.h6
-rw-r--r--indra/llcommon/llworkerthread.cpp8
-rw-r--r--indra/llcommon/llworkerthread.h3
-rw-r--r--indra/llcommon/tests/llinstancetracker_test.cpp87
-rw-r--r--indra/llcommon/tests/llsdserialize_test.cpp508
-rw-r--r--indra/llcommon/tests/llstring_test.cpp8
-rw-r--r--indra/llcommon/tests/setpython.py19
-rw-r--r--indra/llcrashlogger/llcrashlogger.cpp100
-rw-r--r--indra/llcrashlogger/llcrashlogger.h11
-rw-r--r--indra/llimage/llimage.cpp50
-rw-r--r--indra/llimage/llimage.h14
-rw-r--r--indra/llimage/llimagedimensionsinfo.cpp2
-rw-r--r--indra/llimage/llimagedxt.cpp2
-rw-r--r--indra/llimage/llimagej2c.cpp7
-rw-r--r--indra/llimage/llimageworker.cpp8
-rw-r--r--indra/llimage/llimageworker.h2
-rw-r--r--indra/llinventory/CMakeLists.txt18
-rw-r--r--indra/llinventory/llinventory.cpp3
-rw-r--r--indra/llinventory/llparcel.cpp27
-rw-r--r--indra/llinventory/llparcel.h21
-rw-r--r--indra/llinventory/llparcelflags.h2
-rw-r--r--indra/llkdu/CMakeLists.txt2
-rw-r--r--indra/llmath/CMakeLists.txt4
-rw-r--r--indra/llmath/llcalc.cpp162
-rw-r--r--indra/llmath/llcalc.h100
-rw-r--r--indra/llmath/llcalcparser.cpp63
-rw-r--r--indra/llmath/llcalcparser.h191
-rwxr-xr-x[-rw-r--r--]indra/llmath/llvolume.cpp202
-rw-r--r--indra/llmath/llvolumemgr.cpp4
-rw-r--r--indra/llmath/tests/v3math_test.cpp18
-rw-r--r--indra/llmessage/CMakeLists.txt2
-rw-r--r--indra/llmessage/llares.cpp17
-rw-r--r--indra/llmessage/llcurl.cpp266
-rw-r--r--indra/llmessage/llcurl.h132
-rw-r--r--indra/llmessage/llfiltersd2xmlrpc.cpp12
-rw-r--r--indra/llmessage/llhttpassetstorage.cpp5
-rw-r--r--indra/llmessage/llhttpclient.cpp5
-rw-r--r--indra/llmessage/lliohttpserver.cpp19
-rw-r--r--indra/llmessage/lliohttpserver.h2
-rw-r--r--indra/llmessage/lliosocket.cpp133
-rw-r--r--indra/llmessage/lliosocket.h52
-rw-r--r--indra/llmessage/llioutil.cpp5
-rw-r--r--indra/llmessage/llmail.cpp17
-rw-r--r--indra/llmessage/llmail.h4
-rw-r--r--indra/llmessage/llpacketring.cpp65
-rw-r--r--indra/llmessage/llpacketring.h12
-rw-r--r--indra/llmessage/llproxy.cpp550
-rw-r--r--indra/llmessage/llproxy.h339
-rw-r--r--indra/llmessage/llpumpio.cpp74
-rw-r--r--indra/llmessage/llpumpio.h31
-rw-r--r--indra/llmessage/llsdrpcclient.cpp6
-rw-r--r--indra/llmessage/llsdrpcserver.cpp3
-rw-r--r--indra/llmessage/lltemplatemessagereader.cpp2
-rw-r--r--indra/llmessage/llurlrequest.cpp62
-rw-r--r--indra/llmessage/message.cpp17
-rw-r--r--indra/llmessage/message_prehash.cpp3
-rw-r--r--indra/llmessage/message_prehash.h3
-rw-r--r--indra/llmessage/net.cpp39
-rw-r--r--indra/llmessage/net.h4
-rw-r--r--indra/llmessage/tests/networkio.h9
-rw-r--r--indra/llmessage/tests/test_llsdmessage_peer.py9
-rw-r--r--indra/llmessage/tests/testrunner.py100
-rw-r--r--indra/llplugin/CMakeLists.txt24
-rw-r--r--indra/llplugin/llpluginclassmedia.cpp2881
-rw-r--r--indra/llplugin/llpluginclassmedia.h19
-rw-r--r--indra/llplugin/llpluginclassmediaowner.h2
-rw-r--r--indra/llplugin/llplugininstance.cpp6
-rw-r--r--indra/llplugin/llplugininstance.h4
-rw-r--r--indra/llplugin/llpluginmessagepipe.cpp2
-rw-r--r--indra/llplugin/llpluginmessagepipe.h3
-rw-r--r--indra/llplugin/llpluginprocesschild.cpp4
-rw-r--r--indra/llplugin/llpluginprocessparent.cpp58
-rw-r--r--indra/llplugin/llpluginprocessparent.h4
-rw-r--r--indra/llplugin/llpluginsharedmemory.cpp9
-rw-r--r--indra/llplugin/llpluginsharedmemory.h3
-rw-r--r--indra/llplugin/slplugin/slplugin.cpp4
-rw-r--r--indra/llprimitive/CMakeLists.txt10
-rw-r--r--indra/llprimitive/llmodel.cpp504
-rw-r--r--indra/llprimitive/llmodel.h10
-rwxr-xr-x[-rw-r--r--]indra/llprimitive/llprimitive.h2
-rw-r--r--indra/llrender/llcubemap.cpp12
-rw-r--r--indra/llrender/llfontgl.cpp3
-rw-r--r--indra/llrender/llgl.cpp68
-rw-r--r--indra/llrender/llgl.h2
-rw-r--r--indra/llrender/llglheaders.h39
-rw-r--r--indra/llrender/llglslshader.cpp30
-rw-r--r--indra/llrender/llglslshader.h12
-rw-r--r--indra/llrender/llimagegl.cpp16
-rw-r--r--indra/llrender/llrender.cpp80
-rw-r--r--indra/llrender/llrender.h3
-rw-r--r--indra/llrender/llrendertarget.cpp47
-rw-r--r--indra/llrender/llrendertarget.h14
-rw-r--r--indra/llrender/llshadermgr.cpp148
-rw-r--r--indra/llrender/llvertexbuffer.cpp270
-rw-r--r--indra/llrender/llvertexbuffer.h17
-rw-r--r--indra/llui/CMakeLists.txt26
-rw-r--r--indra/llui/llaccordionctrltab.cpp2
-rw-r--r--indra/llui/llbadge.cpp294
-rw-r--r--indra/llui/llbadge.h167
-rw-r--r--indra/llui/llbadgeholder.cpp45
-rw-r--r--indra/llui/llbadgeholder.h (renamed from indra/newview/lldrawpoolclouds.h)44
-rw-r--r--indra/llui/llbadgeowner.cpp131
-rw-r--r--indra/llui/llbadgeowner.h61
-rw-r--r--indra/llui/llbutton.cpp71
-rw-r--r--indra/llui/llbutton.h16
-rw-r--r--indra/llui/llcombobox.cpp9
-rw-r--r--indra/llui/llconsole.cpp17
-rw-r--r--indra/llui/llfloater.cpp87
-rw-r--r--indra/llui/llfloater.h9
-rw-r--r--indra/llui/llfloaterreg.cpp33
-rw-r--r--indra/llui/llfloaterreg.h2
-rw-r--r--indra/llui/llfunctorregistry.h4
-rw-r--r--indra/llui/lllayoutstack.cpp143
-rw-r--r--indra/llui/lllayoutstack.h36
-rw-r--r--indra/llui/lllineeditor.cpp156
-rw-r--r--indra/llui/lllineeditor.h13
-rw-r--r--indra/llui/llloadingindicator.h2
-rw-r--r--indra/llui/llmenubutton.cpp11
-rw-r--r--indra/llui/llmenubutton.h21
-rw-r--r--indra/llui/llmultislider.cpp2
-rw-r--r--indra/llui/llpanel.cpp12
-rw-r--r--indra/llui/llpanel.h10
-rw-r--r--indra/llui/llsdparam.h9
-rw-r--r--indra/llui/llspinctrl.cpp23
-rw-r--r--indra/llui/lltextbase.cpp13
-rw-r--r--indra/llui/lltextvalidate.cpp33
-rw-r--r--indra/llui/lltextvalidate.h1
-rw-r--r--indra/llui/lltimectrl.cpp432
-rw-r--r--indra/llui/lltimectrl.h131
-rw-r--r--indra/llui/llui.cpp75
-rw-r--r--indra/llui/llui.h13
-rw-r--r--indra/llui/lluictrl.cpp36
-rw-r--r--indra/llui/lluictrl.h8
-rw-r--r--indra/llui/lluiimage.cpp6
-rw-r--r--indra/llui/lluiimage.h4
-rw-r--r--indra/llui/llurlentry.cpp2
-rw-r--r--indra/llui/llview.cpp33
-rw-r--r--indra/llui/tests/llurlentry_stub.cpp6
-rw-r--r--indra/llui/tests/llurlmatch_test.cpp8
-rw-r--r--indra/llvfs/CMakeLists.txt10
-rw-r--r--indra/llvfs/lldiriterator.cpp20
-rw-r--r--indra/llvfs/lllfsthread.cpp10
-rw-r--r--indra/llvfs/llvfs.cpp5
-rw-r--r--indra/llwindow/GL/glh_extensions.h4
-rw-r--r--indra/llwindow/GL/glh_genext.h3
-rw-r--r--indra/llwindow/llwindowwin32.cpp31
-rw-r--r--indra/llxml/CMakeLists.txt28
-rw-r--r--indra/llxml/llcontrol.h3
-rw-r--r--indra/llxuixml/llinitparam.cpp2
-rw-r--r--indra/llxuixml/llinitparam.h50
-rw-r--r--indra/lscript/lscript_compile/bison.bat22
-rw-r--r--indra/lscript/lscript_compile/indra.l2
-rw-r--r--indra/lscript/lscript_compile/windows/unistd.h48
-rw-r--r--indra/mac_crash_logger/CrashReporter.nib/objects.xib2
-rw-r--r--indra/mac_crash_logger/llcrashloggermac.cpp5
-rw-r--r--indra/mac_crash_logger/mac_crash_logger.cpp15
-rw-r--r--indra/media_plugins/example/CMakeLists.txt2
-rw-r--r--indra/media_plugins/gstreamer010/llmediaimplgstreamer.h1
-rw-r--r--indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp15
-rw-r--r--indra/media_plugins/webkit/linux_volume_catcher.cpp14
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp2833
-rw-r--r--indra/newview/CMakeLists.txt198
-rw-r--r--indra/newview/app_settings/CA.pem7626
-rw-r--r--indra/newview/app_settings/cmd_line.xml13
-rw-r--r--indra/newview/app_settings/keys.xml2
-rw-r--r--indra/newview/app_settings/keywords.ini1
-rw-r--r--indra/newview/app_settings/logcontrol.xml1
-rw-r--r--[-rwxr-xr-x]indra/newview/app_settings/settings.xml451
-rw-r--r--indra/newview/app_settings/settings_files.xml5
-rw-r--r--indra/newview/app_settings/settings_minimal.xml13
-rw-r--r--indra/newview/app_settings/settings_per_account.xml11
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl48
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl44
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/giF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/giV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl28
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl45
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl41
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl24
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/skyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/skyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl111
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl46
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/waterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/waterV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl33
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/highlightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/highlightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl29
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl30
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl33
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl32
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/uiF.glsl31
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/uiV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/bumpF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/bumpV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/impostorF.glsl44
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/impostorV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/transportF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl77
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl78
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/blurF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/blurV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/extractF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/simpleF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/terrainF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/terrainV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/waterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl48
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl51
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl49
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl45
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl49
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/shinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/simpleV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/skyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/skyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/transportF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl20
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl131
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/treeF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl18
-rw-r--r--indra/newview/app_settings/windlight/days/Colder%20Tones.xml28
-rw-r--r--indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml32
-rw-r--r--indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml44
-rw-r--r--indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml72
-rw-r--r--indra/newview/app_settings/windlight/days/Tropicalia.xml32
-rw-r--r--indra/newview/app_settings/windlight/days/Weird-O.xml56
-rw-r--r--indra/newview/app_settings/windlight/skies/Midday.xml141
-rw-r--r--indra/newview/app_settings/windlight/skies/Midnight.xml141
-rw-r--r--indra/newview/app_settings/windlight/skies/Sunrise.xml141
-rw-r--r--indra/newview/app_settings/windlight/skies/Sunset.xml142
-rw-r--r--indra/newview/featuretable.txt13
-rw-r--r--indra/newview/featuretable_linux.txt10
-rw-r--r--indra/newview/featuretable_mac.txt17
-rw-r--r--indra/newview/featuretable_xp.txt11
-rw-r--r--indra/newview/icons/beta/secondlife.icnsbin0 -> 242261 bytes
-rw-r--r--indra/newview/icons/beta/secondlife.icobin0 -> 78692 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_128.pngbin0 -> 18268 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_16.pngbin0 -> 3536 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_256.pngbin0 -> 49418 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_32.pngbin0 -> 4767 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_48.pngbin0 -> 6438 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_512.pngbin0 -> 151779 bytes
-rw-r--r--indra/newview/icons/development/secondlife.icnsbin0 -> 233026 bytes
-rw-r--r--indra/newview/icons/development/secondlife.icobin0 -> 77117 bytes
-rw-r--r--indra/newview/icons/development/secondlife_128.pngbin0 -> 17499 bytes
-rw-r--r--indra/newview/icons/development/secondlife_16.pngbin0 -> 3471 bytes
-rw-r--r--indra/newview/icons/development/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/development/secondlife_256.pngbin0 -> 47952 bytes
-rw-r--r--indra/newview/icons/development/secondlife_32.pngbin0 -> 4649 bytes
-rw-r--r--indra/newview/icons/development/secondlife_48.pngbin0 -> 6190 bytes
-rw-r--r--indra/newview/icons/development/secondlife_512.pngbin0 -> 147689 bytes
-rw-r--r--indra/newview/icons/project/secondlife.icnsbin0 -> 235133 bytes
-rw-r--r--indra/newview/icons/project/secondlife.icobin0 -> 77791 bytes
-rw-r--r--indra/newview/icons/project/secondlife_128.pngbin0 -> 17706 bytes
-rw-r--r--indra/newview/icons/project/secondlife_16.pngbin0 -> 3471 bytes
-rw-r--r--indra/newview/icons/project/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/project/secondlife_256.pngbin0 -> 48488 bytes
-rw-r--r--indra/newview/icons/project/secondlife_32.pngbin0 -> 4675 bytes
-rw-r--r--indra/newview/icons/project/secondlife_48.pngbin0 -> 6195 bytes
-rw-r--r--indra/newview/icons/project/secondlife_512.pngbin0 -> 149145 bytes
-rw-r--r--indra/newview/icons/release/secondlife.icnsbin0 -> 228390 bytes
-rw-r--r--indra/newview/icons/release/secondlife.icobin0 -> 77552 bytes
-rw-r--r--indra/newview/icons/release/secondlife_128.pngbin0 -> 17198 bytes
-rw-r--r--indra/newview/icons/release/secondlife_16.pngbin0 -> 3524 bytes
-rw-r--r--indra/newview/icons/release/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/release/secondlife_256.pngbin0 -> 47946 bytes
-rw-r--r--indra/newview/icons/release/secondlife_32.pngbin0 -> 4746 bytes
-rw-r--r--indra/newview/icons/release/secondlife_48.pngbin0 -> 6249 bytes
-rw-r--r--indra/newview/icons/release/secondlife_512.pngbin0 -> 147963 bytes
-rw-r--r--indra/newview/icons/test/secondlife.icnsbin0 -> 232905 bytes
-rw-r--r--indra/newview/icons/test/secondlife.icobin0 -> 76861 bytes
-rw-r--r--indra/newview/icons/test/secondlife_128.pngbin0 -> 17156 bytes
-rw-r--r--indra/newview/icons/test/secondlife_16.pngbin0 -> 3471 bytes
-rw-r--r--indra/newview/icons/test/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/test/secondlife_256.pngbin0 -> 47522 bytes
-rw-r--r--indra/newview/icons/test/secondlife_32.pngbin0 -> 4644 bytes
-rw-r--r--indra/newview/icons/test/secondlife_48.pngbin0 -> 6115 bytes
-rw-r--r--indra/newview/icons/test/secondlife_512.pngbin0 -> 146971 bytes
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r6996
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/_DS_Storebin12292 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icnsbin98049 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/background.jpgbin75112 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r6996
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/_DS_Storebin12292 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icnsbin98049 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/background.jpgbin75112 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r6996
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/_DS_Storebin12292 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icnsbin98049 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/background.jpgbin75112 -> 0 bytes
-rw-r--r--indra/newview/installers/windows/installer_template.nsi1720
-rwxr-xr-x[-rw-r--r--]indra/newview/llagent.cpp27
-rw-r--r--indra/newview/llagentcamera.cpp2
-rw-r--r--indra/newview/llagentwearables.cpp33
-rw-r--r--indra/newview/llagentwearables.h2
-rw-r--r--indra/newview/llappearancemgr.cpp4
-rw-r--r--indra/newview/llappviewer.cpp369
-rw-r--r--indra/newview/llappviewer.h12
-rw-r--r--indra/newview/llappviewerlinux.cpp64
-rw-r--r--indra/newview/llappviewerlinux_api_dbus.cpp14
-rw-r--r--indra/newview/llappviewermacosx.cpp1
-rw-r--r--indra/newview/llappviewerwin32.cpp6
-rwxr-xr-x[-rw-r--r--]indra/newview/llassetuploadresponders.cpp13
-rw-r--r--indra/newview/llassetuploadresponders.h1
-rwxr-xr-xindra/newview/llavataractions.cpp82
-rw-r--r--indra/newview/llavataractions.h3
-rw-r--r--indra/newview/llbottomtray.cpp3
-rw-r--r--indra/newview/llcloud.cpp538
-rw-r--r--indra/newview/llcloud.h199
-rw-r--r--indra/newview/lldateutil.cpp27
-rw-r--r--indra/newview/lldateutil.h14
-rw-r--r--indra/newview/lldaycyclemanager.cpp230
-rw-r--r--indra/newview/lldaycyclemanager.h84
-rw-r--r--indra/newview/lldebugview.cpp3
-rw-r--r--indra/newview/lldrawable.cpp5
-rw-r--r--indra/newview/lldrawpool.cpp6
-rw-r--r--indra/newview/lldrawpoolalpha.cpp84
-rw-r--r--indra/newview/lldrawpoolavatar.cpp28
-rw-r--r--indra/newview/lldrawpoolbump.cpp109
-rw-r--r--indra/newview/lldrawpoolclouds.cpp97
-rw-r--r--indra/newview/lldrawpoolsimple.cpp43
-rw-r--r--indra/newview/lldrawpoolsky.cpp5
-rw-r--r--indra/newview/lldrawpoolterrain.cpp6
-rw-r--r--indra/newview/lldrawpooltree.cpp38
-rw-r--r--indra/newview/lldrawpoolwater.cpp4
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp77
-rw-r--r--indra/newview/lldynamictexture.cpp3
-rw-r--r--indra/newview/llenvmanager.cpp678
-rw-r--r--indra/newview/llenvmanager.h277
-rw-r--r--indra/newview/llestateinfomodel.cpp230
-rw-r--r--indra/newview/llestateinfomodel.h103
-rw-r--r--indra/newview/llexpandabletextbox.cpp9
-rw-r--r--indra/newview/llexpandabletextbox.h4
-rw-r--r--indra/newview/llface.cpp90
-rw-r--r--indra/newview/llfasttimerview.cpp10
-rw-r--r--indra/newview/llfeaturemanager.cpp8
-rw-r--r--indra/newview/llfilteredwearablelist.cpp1
-rw-r--r--indra/newview/llfloaterabout.cpp67
-rw-r--r--indra/newview/llfloateranimpreview.cpp3
-rw-r--r--indra/newview/llfloaterauction.cpp18
-rw-r--r--indra/newview/llfloaterbuildoptions.cpp68
-rw-r--r--indra/newview/llfloaterbuildoptions.h23
-rw-r--r--indra/newview/llfloaterbuyland.cpp10
-rw-r--r--indra/newview/llfloaterdaycycle.cpp531
-rw-r--r--indra/newview/llfloaterdaycycle.h120
-rw-r--r--indra/newview/llfloaterdeleteenvpreset.cpp285
-rw-r--r--indra/newview/llfloaterdeleteenvpreset.h62
-rw-r--r--indra/newview/llfloatereditdaycycle.cpp825
-rw-r--r--indra/newview/llfloatereditdaycycle.h137
-rw-r--r--indra/newview/llfloatereditsky.cpp923
-rw-r--r--indra/newview/llfloatereditsky.h113
-rw-r--r--indra/newview/llfloatereditwater.cpp772
-rw-r--r--indra/newview/llfloatereditwater.h (renamed from indra/newview/llfloaterwater.h)112
-rw-r--r--indra/newview/llfloaterenvironmentsettings.cpp282
-rw-r--r--indra/newview/llfloaterenvironmentsettings.h71
-rw-r--r--indra/newview/llfloaterenvsettings.cpp268
-rw-r--r--indra/newview/llfloaterenvsettings.h83
-rw-r--r--indra/newview/llfloatergesture.cpp2
-rw-r--r--indra/newview/llfloaterhelpbrowser.cpp9
-rw-r--r--indra/newview/llfloaterhelpbrowser.h1
-rw-r--r--indra/newview/llfloaterland.cpp30
-rw-r--r--indra/newview/llfloaterland.h1
-rw-r--r--indra/newview/llfloatermemleak.cpp5
-rwxr-xr-x[-rw-r--r--]indra/newview/llfloatermodelpreview.cpp553
-rw-r--r--indra/newview/llfloatermodelpreview.h44
-rw-r--r--indra/newview/llfloatermodeluploadbase.cpp58
-rw-r--r--indra/newview/llfloatermodeluploadbase.h61
-rw-r--r--indra/newview/llfloatermodelwizard.cpp303
-rw-r--r--indra/newview/llfloatermodelwizard.h37
-rw-r--r--indra/newview/llfloaterpostcard.cpp4
-rwxr-xr-xindra/newview/llfloaterpreference.cpp272
-rw-r--r--indra/newview/llfloaterpreference.h30
-rw-r--r--indra/newview/llfloaterproperties.cpp20
-rw-r--r--indra/newview/llfloaterregioninfo.cpp1356
-rw-r--r--indra/newview/llfloaterregioninfo.h133
-rw-r--r--indra/newview/llfloatersearch.cpp132
-rw-r--r--indra/newview/llfloatersearch.h28
-rw-r--r--indra/newview/llfloatersellland.cpp3
-rw-r--r--indra/newview/llfloatertools.cpp149
-rw-r--r--indra/newview/llfloatertools.h4
-rw-r--r--indra/newview/llfloatervoiceeffect.cpp2
-rw-r--r--indra/newview/llfloaterwater.cpp625
-rw-r--r--indra/newview/llfloaterwebcontent.cpp188
-rw-r--r--indra/newview/llfloaterwebcontent.h31
-rw-r--r--indra/newview/llfloaterwindlight.cpp875
-rw-r--r--indra/newview/llfloaterwindlight.h112
-rwxr-xr-xindra/newview/llfloaterworldmap.cpp77
-rw-r--r--indra/newview/llfloaterworldmap.h5
-rw-r--r--indra/newview/llfolderview.cpp133
-rw-r--r--indra/newview/llfolderview.h28
-rw-r--r--indra/newview/llfolderviewitem.cpp204
-rw-r--r--indra/newview/llfolderviewitem.h42
-rw-r--r--indra/newview/llglsandbox.cpp2
-rw-r--r--indra/newview/llgroupmgr.cpp81
-rw-r--r--indra/newview/llhudnametag.cpp2
-rw-r--r--indra/newview/llinventorybridge.cpp98
-rw-r--r--indra/newview/llinventorybridge.h4
-rw-r--r--indra/newview/llinventoryfilter.cpp123
-rw-r--r--indra/newview/llinventoryfilter.h6
-rw-r--r--indra/newview/llinventoryfunctions.h24
-rw-r--r--indra/newview/llinventorymodel.cpp90
-rw-r--r--indra/newview/llinventorymodel.h3
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.cpp8
-rw-r--r--indra/newview/llinventoryobserver.cpp28
-rw-r--r--indra/newview/llinventoryobserver.h22
-rw-r--r--indra/newview/llinventorypanel.cpp487
-rw-r--r--indra/newview/llinventorypanel.h53
-rw-r--r--indra/newview/lllocationinputctrl.cpp13
-rw-r--r--indra/newview/lllocationinputctrl.h16
-rw-r--r--indra/newview/llloginhandler.cpp6
-rw-r--r--indra/newview/lllogininstance.cpp1
-rw-r--r--indra/newview/llmainlooprepeater.cpp2
-rw-r--r--indra/newview/llmediactrl.cpp48
-rw-r--r--indra/newview/llmediactrl.h9
-rwxr-xr-xindra/newview/llmeshrepository.cpp1101
-rwxr-xr-x[-rw-r--r--]indra/newview/llmeshrepository.h60
-rw-r--r--indra/newview/llnavigationbar.cpp2
-rw-r--r--indra/newview/llnearbychathandler.cpp37
-rw-r--r--indra/newview/lloutfitslist.cpp2
-rw-r--r--indra/newview/llpanelappearancetab.cpp1
-rw-r--r--indra/newview/llpanelcontents.cpp2
-rw-r--r--indra/newview/llpanelface.cpp21
-rw-r--r--indra/newview/llpanelgrouplandmoney.cpp39
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp95
-rw-r--r--indra/newview/llpanelimcontrolpanel.h8
-rw-r--r--indra/newview/llpanellandaudio.cpp22
-rw-r--r--indra/newview/llpanellandaudio.h2
-rw-r--r--indra/newview/llpanellandmarks.cpp7
-rw-r--r--indra/newview/llpanellogin.cpp2
-rw-r--r--indra/newview/llpanellogin.h8
-rw-r--r--indra/newview/llpanelmaininventory.cpp20
-rw-r--r--indra/newview/llpanelmaininventory.h4
-rw-r--r--indra/newview/llpanelmarketplaceinbox.cpp236
-rw-r--r--indra/newview/llpanelmarketplaceinbox.h78
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.cpp208
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.h92
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.cpp194
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.h82
-rw-r--r--indra/newview/llpanelobject.cpp51
-rw-r--r--indra/newview/llpanelobjectinventory.cpp118
-rw-r--r--indra/newview/llpaneloutfitedit.cpp2
-rw-r--r--indra/newview/llpanelplaceprofile.cpp50
-rw-r--r--indra/newview/llpanelplaceprofile.h2
-rw-r--r--indra/newview/llpaneltopinfobar.cpp8
-rw-r--r--indra/newview/llpaneltopinfobar.h13
-rw-r--r--indra/newview/llpanelvoicedevicesettings.cpp64
-rw-r--r--indra/newview/llpanelvoicedevicesettings.h3
-rw-r--r--indra/newview/llpanelwearing.cpp26
-rw-r--r--indra/newview/llpanelwearing.h2
-rw-r--r--indra/newview/llparticipantlist.cpp14
-rw-r--r--indra/newview/llplacesinventorypanel.cpp85
-rw-r--r--indra/newview/llplacesinventorypanel.h2
-rw-r--r--indra/newview/llpreview.cpp19
-rw-r--r--indra/newview/llpreviewgesture.cpp1
-rw-r--r--indra/newview/llprogressview.cpp163
-rw-r--r--indra/newview/llprogressview.h25
-rw-r--r--indra/newview/llregioninfomodel.cpp217
-rw-r--r--indra/newview/llregioninfomodel.h99
-rw-r--r--indra/newview/llsceneview.cpp15
-rw-r--r--indra/newview/llsecapi.h6
-rw-r--r--indra/newview/llsechandler_basic.cpp8
-rw-r--r--indra/newview/llselectmgr.cpp2
-rw-r--r--indra/newview/llsidepanelappearance.cpp1
-rw-r--r--indra/newview/llsidepanelinventory.cpp504
-rw-r--r--indra/newview/llsidepanelinventory.h36
-rw-r--r--indra/newview/llsidepanelinventorysubpanel.cpp4
-rw-r--r--indra/newview/llsidepanelinventorysubpanel.h2
-rw-r--r--indra/newview/llsidepaneliteminfo.cpp7
-rw-r--r--indra/newview/llsidepaneliteminfo.h2
-rw-r--r--indra/newview/llsidetray.cpp190
-rw-r--r--indra/newview/llsidetray.h13
-rw-r--r--indra/newview/llslurl.cpp6
-rw-r--r--indra/newview/llspatialpartition.cpp16
-rw-r--r--indra/newview/llspatialpartition.h9
-rw-r--r--indra/newview/llstartup.cpp295
-rw-r--r--indra/newview/llstartup.h2
-rw-r--r--indra/newview/llstatusbar.cpp33
-rw-r--r--indra/newview/llstatusbar.h2
-rw-r--r--indra/newview/llsurface.cpp11
-rw-r--r--indra/newview/llsurface.h3
-rw-r--r--indra/newview/lltexlayer.cpp94
-rw-r--r--indra/newview/lltexlayer.h6
-rw-r--r--indra/newview/lltexturecache.cpp91
-rw-r--r--indra/newview/lltexturecache.h3
-rw-r--r--indra/newview/lltexturectrl.cpp5
-rw-r--r--indra/newview/lltexturefetch.cpp17
-rw-r--r--indra/newview/lltoastnotifypanel.cpp25
-rw-r--r--indra/newview/lltooldraganddrop.cpp1
-rw-r--r--indra/newview/lltoolpie.cpp1
-rw-r--r--indra/newview/lluploadfloaterobservers.cpp56
-rw-r--r--indra/newview/lluploadfloaterobservers.h97
-rw-r--r--indra/newview/llvieweraudio.cpp16
-rw-r--r--indra/newview/llviewercontrol.cpp4
-rw-r--r--indra/newview/llviewerdisplay.cpp38
-rw-r--r--indra/newview/llviewerfloaterreg.cpp39
-rw-r--r--indra/newview/llviewerfoldertype.cpp4
-rw-r--r--indra/newview/llviewerhelp.cpp16
-rw-r--r--indra/newview/llviewerinventory.cpp35
-rw-r--r--indra/newview/llviewermedia.cpp92
-rw-r--r--indra/newview/llviewermedia.h2
-rw-r--r--indra/newview/llviewermenu.cpp331
-rw-r--r--indra/newview/llviewermenufile.cpp5
-rw-r--r--indra/newview/llviewermessage.cpp238
-rw-r--r--indra/newview/llviewermessage.h3
-rw-r--r--indra/newview/llviewernetwork.cpp2
-rw-r--r--indra/newview/llviewerobject.cpp109
-rw-r--r--indra/newview/llviewerobject.h13
-rw-r--r--indra/newview/llviewerobjectlist.cpp49
-rw-r--r--indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--indra/newview/llviewerparceloverlay.cpp27
-rw-r--r--indra/newview/llviewerparceloverlay.h1
-rw-r--r--indra/newview/llviewerprecompiledheaders.h2
-rw-r--r--indra/newview/llviewerregion.cpp252
-rw-r--r--indra/newview/llviewerregion.h19
-rw-r--r--indra/newview/llviewershadermgr.cpp343
-rw-r--r--indra/newview/llviewershadermgr.h35
-rw-r--r--indra/newview/llviewertexture.cpp36
-rw-r--r--indra/newview/llviewertexture.h3
-rw-r--r--indra/newview/llviewertexturelist.cpp21
-rw-r--r--indra/newview/llviewertexturelist.h7
-rw-r--r--indra/newview/llviewerwindow.cpp123
-rw-r--r--indra/newview/llviewerwindow.h2
-rw-r--r--indra/newview/llvlmanager.cpp2
-rw-r--r--indra/newview/llvoavatar.cpp37
-rw-r--r--indra/newview/llvocache.cpp35
-rw-r--r--indra/newview/llvocache.h1
-rw-r--r--indra/newview/llvoclouds.cpp297
-rw-r--r--indra/newview/llvoclouds.h79
-rw-r--r--indra/newview/llvoicevivox.cpp308
-rw-r--r--indra/newview/llvoicevivox.h15
-rw-r--r--indra/newview/llvosky.cpp47
-rw-r--r--indra/newview/llvotree.cpp1
-rwxr-xr-x[-rw-r--r--]indra/newview/llvovolume.cpp80
-rw-r--r--indra/newview/llvovolume.h2
-rw-r--r--indra/newview/llvowater.cpp6
-rw-r--r--indra/newview/llvowlsky.cpp4
-rw-r--r--indra/newview/llwatchdog.cpp6
-rw-r--r--indra/newview/llwaterparammanager.cpp332
-rw-r--r--indra/newview/llwaterparammanager.h76
-rw-r--r--indra/newview/llwaterparamset.cpp44
-rw-r--r--indra/newview/llwaterparamset.h1
-rw-r--r--indra/newview/llweb.cpp31
-rw-r--r--indra/newview/llwlanimator.cpp202
-rw-r--r--indra/newview/llwlanimator.h86
-rw-r--r--indra/newview/llwldaycycle.cpp240
-rw-r--r--indra/newview/llwldaycycle.h54
-rw-r--r--indra/newview/llwlhandlers.cpp197
-rw-r--r--indra/newview/llwlhandlers.h100
-rw-r--r--indra/newview/llwlparammanager.cpp574
-rw-r--r--indra/newview/llwlparammanager.h210
-rw-r--r--indra/newview/llwlparamset.cpp60
-rw-r--r--indra/newview/llwlparamset.h3
-rw-r--r--indra/newview/llworld.cpp100
-rw-r--r--indra/newview/llworldmapview.cpp4
-rw-r--r--indra/newview/llxmlrpctransaction.cpp23
-rw-r--r--indra/newview/pipeline.cpp412
-rw-r--r--indra/newview/pipeline.h7
-rw-r--r--indra/newview/res-sdl/ll_icon.BMPbin262198 -> 0 bytes
-rw-r--r--indra/newview/res/ll_icon.BMPbin262198 -> 0 bytes
-rw-r--r--indra/newview/res/ll_icon.icobin367958 -> 0 bytes
-rw-r--r--indra/newview/res/ll_icon.pngbin29561 -> 0 bytes
-rw-r--r--indra/newview/res/viewerRes.rc6
-rw-r--r--indra/newview/skins/default/colors.xml21
-rw-r--r--indra/newview/skins/default/textures/icons/Inv_Gift.pngbin0 -> 1335 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Disabled.pngbin0 -> 1848 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Off.pngbin0 -> 1835 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_On.pngbin0 -> 1851 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_On_Over.pngbin0 -> 1863 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.pngbin0 -> 1912 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Over.pngbin0 -> 1826 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Press.pngbin0 -> 1891 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.pngbin0 -> 1848 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.pngbin0 -> 1807 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.pngbin0 -> 1819 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.pngbin0 -> 1894 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.pngbin0 -> 1921 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.pngbin0 -> 1853 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected.pngbin0 -> 1894 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.pngbin0 -> 1840 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.pngbin0 -> 1870 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.pngbin0 -> 1912 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.pngbin0 -> 3194 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.pngbin0 -> 3189 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.pngbin0 -> 3011 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.pngbin0 -> 3011 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Disabled.pngbin0 -> 1187 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Enabled.pngbin0 -> 1168 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_1.pngbin0 -> 1149 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_2.pngbin0 -> 1147 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_3.pngbin0 -> 1211 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_4.pngbin0 -> 1205 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_5.pngbin0 -> 1137 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_6.pngbin0 -> 1164 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml41
-rw-r--r--indra/newview/skins/default/textures/widgets/Badge_Background.pngbin0 -> 1352 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Badge_Background_New.pngbin0 -> 1369 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Badge_Border.pngbin0 -> 1565 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.pngbin0 -> 1067 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.pngbin0 -> 1086 bytes
-rw-r--r--indra/newview/skins/default/xui/da/floater_day_cycle_options.xml96
-rw-r--r--indra/newview/skins/default/xui/da/floater_env_settings.xml31
-rw-r--r--indra/newview/skins/default/xui/da/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_water.xml103
-rw-r--r--indra/newview/skins/default/xui/da/floater_windlight_options.xml228
-rw-r--r--indra/newview/skins/default/xui/da/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/da/notifications.xml3
-rw-r--r--indra/newview/skins/default/xui/da/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/da/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/da/strings.xml9
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/de/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/de/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/de/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/de/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/de/floater_env_settings.xml26
-rw-r--r--indra/newview/skins/default/xui/de/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_wizard.xml260
-rw-r--r--indra/newview/skins/default/xui/de/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/de/floater_water.xml72
-rw-r--r--indra/newview/skins/default/xui/de/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/de/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/de/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_outfit_edit.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_people.xml12
-rw-r--r--indra/newview/skins/default/xui/de/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_terrain.xml74
-rw-r--r--indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml126
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml78
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml96
-rw-r--r--indra/newview/skins/default/xui/en/floater_build_options.xml73
-rw-r--r--indra/newview/skins/default/xui/en/floater_buy_land.xml16
-rw-r--r--indra/newview/skins/default/xui/en/floater_day_cycle_options.xml558
-rw-r--r--indra/newview/skins/default/xui/en/floater_delete_env_preset.xml59
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml485
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml953
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_water_preset.xml448
-rw-r--r--indra/newview/skins/default/xui/en/floater_env_settings.xml164
-rw-r--r--indra/newview/skins/default/xui/en/floater_environment_settings.xml162
-rw-r--r--indra/newview/skins/default/xui/en/floater_help_browser.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_media_browser.xml2
-rwxr-xr-x[-rw-r--r--]indra/newview/skins/default/xui/en/floater_model_preview.xml140
-rw-r--r--indra/newview/skins/default/xui/en/floater_model_wizard.xml821
-rw-r--r--indra/newview/skins/default/xui/en/floater_openobject.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_postcard.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences_proxy.xml273
-rw-r--r--indra/newview/skins/default/xui/en/floater_region_info.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_search.xml75
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml217
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_effect.xml40
-rw-r--r--indra/newview/skins/default/xui/en/floater_water.xml503
-rw-r--r--indra/newview/skins/default/xui/en/floater_web_content.xml16
-rw-r--r--indra/newview/skins/default/xui/en/floater_windlight_options.xml1288
-rw-r--r--indra/newview/skins/default/xui/en/inspect_avatar.xml3
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml15
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_add.xml16
-rw-r--r--indra/newview/skins/default/xui/en/menu_media_ctrl.xml12
-rw-r--r--indra/newview/skins/default/xui/en/menu_mode_change.xml24
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml181
-rw-r--r--indra/newview/skins/default/xui/en/menu_wearing_gear.xml7
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/xui/en/notifications.xml304
-rw-r--r--indra/newview/skins/default/xui/en/panel_activeim_row.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_cof_wearables.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_inbox_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_instant_message.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml36
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_outbox_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_list.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml15
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml35
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_setup.xml87
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_progress.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_environment.xml149
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_estate.xml324
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_terrain.xml349
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_texture.xml327
-rw-r--r--indra/newview/skins/default/xui/en/panel_side_tray.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_sound_devices.xml178
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml30
-rw-r--r--indra/newview/skins/default/xui/en/panel_topinfo_bar.xml10
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml230
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml56
-rw-r--r--indra/newview/skins/default/xui/en/widgets/badge.xml20
-rw-r--r--indra/newview/skins/default/xui/en/widgets/button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/combo_box.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml19
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inventory_panel.xml10
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml8
-rw-r--r--indra/newview/skins/default/xui/en/widgets/panel.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/time.xml16
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/es/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/es/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/es/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/es/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/es/floater_env_settings.xml28
-rw-r--r--indra/newview/skins/default/xui/es/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_wizard.xml272
-rw-r--r--indra/newview/skins/default/xui/es/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_tools.xml52
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/es/floater_water.xml88
-rw-r--r--indra/newview/skins/default/xui/es/floater_windlight_options.xml190
-rw-r--r--indra/newview/skins/default/xui/es/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/es/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/es/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_colors.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_sound.xml28
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_terrain.xml67
-rw-r--r--indra/newview/skins/default/xui/es/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml124
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/floater_build_options.xml25
-rw-r--r--indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/fr/floater_env_settings.xml29
-rw-r--r--indra/newview/skins/default/xui/fr/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_wizard.xml262
-rw-r--r--indra/newview/skins/default/xui/fr/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/fr/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/fr/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/fr/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/fr/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_people.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_terrain.xml63
-rw-r--r--indra/newview/skins/default/xui/fr/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml124
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/it/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/it/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/it/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/it/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/it/floater_env_settings.xml29
-rw-r--r--indra/newview/skins/default/xui/it/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_wizard.xml262
-rw-r--r--indra/newview/skins/default/xui/it/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/it/floater_water.xml95
-rw-r--r--indra/newview/skins/default/xui/it/floater_windlight_options.xml190
-rw-r--r--indra/newview/skins/default/xui/it/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/it/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_terrain.xml65
-rw-r--r--indra/newview/skins/default/xui/it/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml126
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/ja/floater_env_settings.xml25
-rw-r--r--indra/newview/skins/default/xui/ja/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_wizard.xml262
-rw-r--r--indra/newview/skins/default/xui/ja/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml84
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/ja/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/ja/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/ja/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/ja/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_terrain.xml74
-rw-r--r--indra/newview/skins/default/xui/ja/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml122
-rw-r--r--indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/nl/floater_env_settings.xml24
-rw-r--r--indra/newview/skins/default/xui/nl/floater_water.xml89
-rw-r--r--indra/newview/skins/default/xui/nl/floater_windlight_options.xml190
-rw-r--r--indra/newview/skins/default/xui/nl/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/nl/strings.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml96
-rw-r--r--indra/newview/skins/default/xui/pl/floater_env_settings.xml28
-rw-r--r--indra/newview/skins/default/xui/pl/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_water.xml103
-rw-r--r--indra/newview/skins/default/xui/pl/floater_windlight_options.xml228
-rw-r--r--indra/newview/skins/default/xui/pl/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/pl/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/strings.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml67
-rw-r--r--indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/pt/floater_env_settings.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_wizard.xml270
-rw-r--r--indra/newview/skins/default/xui/pt/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/pt/floater_water.xml86
-rw-r--r--indra/newview/skins/default/xui/pt/floater_windlight_options.xml187
-rw-r--r--indra/newview/skins/default/xui/pt/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/pt/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml76
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_terrain.xml65
-rw-r--r--indra/newview/skins/default/xui/pt/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml126
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about_land.xml46
-rw-r--r--indra/newview/skins/default/xui/zh/floater_animation_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_auction.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_avatar_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_avatar_textures.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/floater_bulk_perms.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/floater_bumps.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_currency.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_land.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_object.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_camera.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/floater_choose_group.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_display_name.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_env_settings.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_god_tools.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_land_holdings.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_moveview.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/floater_mute_object.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_pay.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_perm_prefs.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_notecard.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_publish_classified.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_region_debug_console.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_queue.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_tools.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_top_objects.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_web_content.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_windlight_options.xml60
-rw-r--r--indra/newview/skins/default/xui/zh/floater_world_map.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_group.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_remote_object.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_other.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_self.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_other.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_self.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_gesture_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_group_plus.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory_add.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_outfit_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_participant_list.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_place_add_button.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_url_group.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_viewer.xml69
-rw-r--r--indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types.xml34
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types_linux.xml28
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types_mac.xml40
-rw-r--r--indra/newview/skins/default/xui/zh/notifications.xml230
-rw-r--r--indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_classified_info.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_alpha.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_classified.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_physics.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_shoes.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_wearable.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_control_panel.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_general.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_invite.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_land_money.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_notices.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_notify.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_roles.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_landmarks.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_general.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_security.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_navigation_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_nearby_media.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_people.xml42
-rw-r--r--indra/newview/skins/default/xui/zh/panel_picks.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_place_profile.xml32
-rw-r--r--indra/newview/skins/default/xui/zh/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_chat.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_general.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml74
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_move.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_sound.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_covenant.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_debug.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_general.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/panel_script_ed.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_side_tray.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_world_map.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/role_actions.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_item_info.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_task_info.xml22
-rw-r--r--indra/newview/skins/default/xui/zh/strings.xml440
-rw-r--r--indra/newview/skins/default/xui/zh/teleport_strings.xml18
-rw-r--r--indra/newview/skins/minimal/xui/da/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/da/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/de/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/minimal/xui/de/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/en/floater_help_browser.xml11
-rw-r--r--indra/newview/skins/minimal/xui/en/floater_web_content.xml11
-rw-r--r--indra/newview/skins/minimal/xui/en/main_view.xml4
-rw-r--r--indra/newview/skins/minimal/xui/en/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml242
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_login.xml30
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_people.xml6
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_status_bar.xml25
-rw-r--r--indra/newview/skins/minimal/xui/en/widgets/location_input.xml8
-rw-r--r--indra/newview/skins/minimal/xui/es/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml16
-rw-r--r--indra/newview/skins/minimal/xui/es/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/fr/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/minimal/xui/fr/panel_people.xml10
-rw-r--r--indra/newview/skins/minimal/xui/it/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml16
-rw-r--r--indra/newview/skins/minimal/xui/it/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/ja/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/minimal/xui/ja/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/pl/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/pl/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/pt/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml16
-rw-r--r--indra/newview/skins/minimal/xui/pt/panel_people.xml6
-rw-r--r--indra/newview/tests/lldir_stub.cpp62
-rw-r--r--indra/newview/tests/llglslshader_stub.cpp39
-rw-r--r--indra/newview/tests/llpipeline_stub.cpp32
-rw-r--r--indra/newview/tests/llsechandler_basic_test.cpp3
-rw-r--r--indra/newview/tests/llsky_stub.cpp37
-rw-r--r--indra/newview/tests/llviewernetwork_test.cpp12
-rw-r--r--indra/newview/tests/llviewershadermgr_stub.cpp50
-rw-r--r--indra/newview/tests/llwlanimator_stub.cpp29
-rw-r--r--indra/newview/tests/llwldaycycle_stub.cpp52
-rw-r--r--indra/newview/tests/llwlparammanager_test.cpp271
-rw-r--r--indra/newview/tests/llwlparamset_stub.cpp41
-rw-r--r--indra/newview/tests/llworldmap_test.cpp1
-rw-r--r--indra/newview/viewer_manifest.py89
-rw-r--r--indra/test/io.cpp32
-rw-r--r--indra/test/lliohttpserver_tut.cpp6
-rw-r--r--indra/test/lltemplatemessagebuilder_tut.cpp2
-rw-r--r--indra/test/message_tut.cpp2
-rw-r--r--indra/test/test.cpp17
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.cpp4
-rw-r--r--indra/viewer_components/updater/CMakeLists.txt6
-rw-r--r--indra/viewer_components/updater/llupdateinstaller.cpp4
-rw-r--r--indra/win_crash_logger/CMakeLists.txt2
-rw-r--r--indra/win_crash_logger/llcrashloggerwindows.cpp7
-rw-r--r--indra/win_crash_logger/llcrashloggerwindows.h1
-rw-r--r--indra/win_crash_logger/win_crash_logger.cpp35
-rw-r--r--[-rwxr-xr-x]scripts/gpu_table_tester0
-rw-r--r--viewer-hg-convert.shamap14803
1351 files changed, 56147 insertions, 64615 deletions
diff --git a/.hgignore b/.hgignore
index bd4f19a91e..e3ad4fe7b2 100644
--- a/.hgignore
+++ b/.hgignore
@@ -33,6 +33,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/server-linux-*
diff --git a/.hgtags b/.hgtags
index 4a743342a8..216066ea00 100644
--- a/.hgtags
+++ b/.hgtags
@@ -122,24 +122,68 @@ dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release
+77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release
8835e0e3c0d3a48244c287bc05811dfc2fba43ec 2.7.0-start
43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1
43c7ee846b7eed80786acbbf35d03bd016a3e85d 2.7.0-beta1
-77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release
54fd44ac92e4c61435ea33effe093a3527e18d98 2.7.1-start
0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1
0c4d0c24278074f219e5a32e72b449e78301d11b 2.7.1-beta1
-8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
-8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
-77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release
+a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
+a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1
6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start
-77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release
+be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
+be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
+057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
+057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
+be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
+be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
-e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
-e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1
19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start
+09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
+09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1
+e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start
+502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start
+6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
+6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
+e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
+e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1
+493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
+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
+29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
+29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release
+ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start
+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
+6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1
+586907287be581817b2422b5137971b22d54ea48 3.0.4-start
+6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1
diff --git a/BuildParams b/BuildParams
index 88d2c02780..b62d7b7af1 100644..100755
--- a/BuildParams
+++ b/BuildParams
@@ -14,8 +14,8 @@ public_build = true
# skip windows debug build until we can get a fix in.
build_CYGWIN_Debug = false
-# Update Public Inworld Build Status Indicators
-email_status_this_is_os = false
+# Update Public Inworld Build Status Indicators (setting should mirror "public_build")
+email_status_this_is_os = true
# Limit extent of codeticket updates to revisions after...
codeticket_since = 2.2.0-release
@@ -42,6 +42,12 @@ 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-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"
# ========================================
# Viewer Beta
@@ -83,6 +89,26 @@ mesh-development.build_CYGWIN_Debug = false
mesh-development.build_viewer_update_version_manager = false
# ========================================
+# mesh-development-release-1-candidate
+# ========================================
+mesh-development-release-1-candidate.viewer_channel = "Project Viewer - Mesh"
+mesh-development-release-1-candidate.login_channel = "Project Viewer - Mesh"
+mesh-development-release-1-candidate.viewer_grid = agni
+mesh-development-release-1-candidate.build_debug_release_separately = true
+mesh-development-release-1-candidate.build_CYGWIN_Debug = false
+mesh-development-release-1-candidate.build_viewer_update_version_manager = false
+
+# ========================================
+# mesh-development-rc
+# ========================================
+mesh-development-rc.viewer_channel = "Project Viewer - Mesh"
+mesh-development-rc.login_channel = "Project Viewer - Mesh"
+mesh-development-rc.viewer_grid = agni
+mesh-development-rc.build_debug_release_separately = true
+mesh-development-rc.build_CYGWIN_Debug = false
+mesh-development-rc.build_viewer_update_version_manager = false
+
+# ========================================
# mesh-asset-deprecation
# ========================================
mesh-asset-deprecation.viewer_channel = "Project Viewer - Mesh Asset Deprecation"
@@ -122,6 +148,7 @@ cg_viewer-development_lenny.email = cg@lindenlab.com
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
@@ -134,9 +161,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
@@ -155,4 +181,11 @@ viewer-asset-delivery-metrics.email = monty@lindenlab.com
viewer-asset-delivery-metrics.build_server = false
viewer-asset-delivery-metrics.build_server_tests = false
+# ========================================
+# Simon says
+# ========================================
+simon_viewer-dev-private.public_build = false
+simon_viewer-dev-private.email_status_this_is_os = false
+
+
# eof
diff --git a/autobuild.xml b/autobuild.xml
index 63701dae79..347ef419ed 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -246,9 +246,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>d05be8fc196e9ce7b6636b931cf13dff</string>
+ <string>be7321370b69b6d66938b82a9230a067</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226716/arch/Linux/installer/colladadom-2.2-linux-20110415.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/233450/arch/Linux/installer/colladadom-2.2-linux-20110621.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1110,9 +1110,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6e45ad68506cd1ba49fd35a3201f0478</string>
+ <string>362654a472ef7368d4c803ae3fb89d95</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110504.tar.bz2</string>
+ <string>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</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1122,9 +1122,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>00ff5144612c2e261a0811a4503ce3ba</string>
+ <string>c7801d899daec5338fbe95053255b7e7</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110504.tar.bz2</string>
+ <string>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</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1134,9 +1134,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a4635dcbbe0915ce023dd41d3b848d4c</string>
+ <string>6ecf2f85f03c5ae87fe45769566a5660</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/228821/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110504.tar.bz2</string>
+ <string>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</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1148,7 +1148,7 @@
<key>license</key>
<string>lgpl</string>
<key>license_file</key>
- <string>LICENSES/lgpl.txt</string>
+ <string>LICENSES/LLConvexDecompositionStubLicense.txt</string>
<key>name</key>
<string>llconvexdecompositionstub</string>
<key>platforms</key>
@@ -1158,9 +1158,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>bc1388fc28dbb3bba1fe7cb8d09f49b4</string>
+ <string>a5f53e09f67271fd50f1131ffdda9d27</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110421.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110819.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1170,9 +1170,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>3295bd4a0514b7c15dda9044f40c175e</string>
+ <string>0006a964f1497f55a5f181b7042d2d22</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110422.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110819.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1182,9 +1182,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>92f1dff3249024c1534b55343ed79ea3</string>
+ <string>b859e7e3bb03ebb467f0309f46422995</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/227399/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110421.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110819.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1206,9 +1206,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>82798d0da3ac3d97c91517a575d9ea1c</string>
+ <string>9cd66e879908f047d9af665b92946ecc</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/231093/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110526.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/239803/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110830.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1230,9 +1230,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>f0708d18943a05013493f69ab7dc6429</string>
+ <string>ab9393795515cbbe9526bde33b41bf2a</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/231093/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110526.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/239670/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110829.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1570,9 +1570,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>e19576af3c0affc71293d8f0bcce2606</string>
+ <string>24e735ae005f3ce7a21a09cc02cece17</string>
<key>url</key>
- <string> http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20110120.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/Darwin/installer/slvoice-3.2.0002.10426-darwin-20110601.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1582,9 +1582,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>53fefed8120d7c6a0eb6778edae6fa32</string>
+ <string>8a0bc982367d6fdc20a28b391cd40566</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20110120.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/Linux/installer/slvoice-3.2.0002.10426-linux-20110601.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1594,9 +1594,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>44f84b3b45f7067a104a7c34d50d62f0</string>
+ <string>1e821cc7d25eabad013b7f3db260dd6b</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20110120.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/CYGWIN/installer/slvoice-3.2.0002.10426-windows-20110601.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1907,15 +1907,12 @@
<map>
<key>build</key>
<map>
- <key>arguments</key>
+ <key>command</key>
+ <string>xcodebuild</string>
+ <key>filters</key>
<array>
- <string>|</string>
- <string>grep</string>
- <string>-v</string>
<string>setenv</string>
</array>
- <key>command</key>
- <string>xcodebuild</string>
<key>options</key>
<array>
<string>-configuration Debug</string>
@@ -1964,15 +1961,12 @@
<map>
<key>build</key>
<map>
- <key>arguments</key>
+ <key>command</key>
+ <string>xcodebuild</string>
+ <key>filters</key>
<array>
- <string>|</string>
- <string>grep</string>
- <string>-v</string>
<string>setenv</string>
</array>
- <key>command</key>
- <string>xcodebuild</string>
<key>options</key>
<array>
<string>-configuration RelWithDebInfo</string>
@@ -2023,15 +2017,12 @@
<map>
<key>build</key>
<map>
- <key>arguments</key>
+ <key>command</key>
+ <string>xcodebuild</string>
+ <key>filters</key>
<array>
- <string>|</string>
- <string>grep</string>
- <string>-v</string>
<string>setenv</string>
</array>
- <key>command</key>
- <string>xcodebuild</string>
<key>options</key>
<array>
<string>-configuration Release</string>
diff --git a/build.sh b/build.sh
index 4268c76e78..c7c89fe3c2 100755
--- a/build.sh
+++ b/build.sh
@@ -209,7 +209,7 @@ do
end_section BuildParallel
else
begin_section "Build$variant"
- build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | grep --line-buffered "^##teamcity"
+ build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | sed -n 's/^ *\(##teamcity.*\)/\1/p'
if `cat "$build_dir/build_ok"`
then
echo so far so good.
@@ -238,7 +238,7 @@ then
begin_section "Build$variant"
build_dir=`build_dir_$arch $variant`
build_dir_stubs="$build_dir/win_setup/$variant"
- tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity"
+ tee -a $build_log < "$build_dir/build.log" | sed -n 's/^ *\(##teamcity.*\)/\1/p'
if `cat "$build_dir/build_ok"`
then
echo so far so good.
diff --git a/doc/contributions.txt b/doc/contributions.txt
index b744f4db3e..5930bab04f 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -1,8 +1,8 @@
-Linden Lab would like to acknowledge source code contributions from the
+Linden Lab would like to acknowledge contributions from the
following residents. The Second Life resident name is given below,
-along with the issue identifier corresponding to the patches we've
-received from them.
+along with the issue identifiers to which they have contributed.
+45ms Zhong
Able Whitman
VWR-650
VWR-1460
@@ -11,15 +11,20 @@ Able Whitman
VWR-1813
Adam Marker
VWR-2755
+Adeon Writer
+Aeonix Aeon
Agathos Frascati
CT-246
CT-317
CT-352
+Ai Austin
+Aiko Ying
Aimee Trescothick
SNOW-227
SNOW-570
SNOW-572
SNOW-575
+ STORM-1315
VWR-3321
VWR-3336
VWR-3903
@@ -60,11 +65,15 @@ Aimee Trescothick
Alejandro Rosenthal
VWR-1184
Aleric Inglewood
+ SNOW-84
SNOW-240
+ SNOW-477
SNOW-522
SNOW-626
+ SNOW-744
SNOW-756
SNOW-764
+ SNOW-766
SNOW-800
VWR-10001
VWR-10579
@@ -90,11 +99,8 @@ Aleric Inglewood
VWR-24366
VWR-24519
VWR-24520
- SNOW-84
- SNOW-477
- SNOW-744
- SNOW-766
STORM-163
+ STORM-864
STORM-955
STORM-960
Ales Beaumont
@@ -103,6 +109,7 @@ Ales Beaumont
Alexandrea Fride
STORM-255
STORM-960
+ STORM-1459
Alissa Sabre
VWR-81
VWR-83
@@ -152,12 +159,18 @@ Alissa Sabre
VWR-12620
VWR-12789
SNOW-322
+Alliez Mysterio
Angus Boyd
VWR-592
Ann Congrejo
CT-193
+Annie Milestone
+Annika Genezzia
Ansariel Hiller
STORM-1101
+ VWR-25480
+ VWR-26150
+Aralara Rajal
Ardy Lay
STORM-859
VWR-19499
@@ -166,16 +179,30 @@ Argent Stonecutter
VWR-68
Armin Weatherwax
VWR-8436
+ArminasX Saiman
+Arya Braveheart
+Asaeda Meltingdots
+Asturkon Jua
Asuka Neely
VWR-3434
VWR-8179
+Aura Dirval
+Avallyn Oakleaf
+Avatar Quinzet
+BabyA Littlething
+Bacchus Ireto
Balp Allen
VWR-4157
+Bazaar
Be Holder
SNOW-322
SNOW-397
+Beansy Twine
Benja Kepler
VWR-746
+Benjamin Bigdipper
+Beth Walcher
+Bezilon Kasei
Biancaluce Robbiani
CT-225
CT-226
@@ -186,6 +213,7 @@ Biancaluce Robbiani
CT-231
CT-321
CT-352
+Bill Walach
Blakar Ogre
VWR-418
VWR-881
@@ -195,10 +223,13 @@ Blakar Ogre
VWR-2164
blino Nakamura
VWR-17
+Blitzckreed Levenque
+Borg Capalini
Boroondas Gupte
OPEN-29
OPEN-39
OPEN-39
+ OPEN-99
SNOW-278
SNOW-503
SNOW-510
@@ -214,7 +245,11 @@ Boroondas Gupte
VWR-20891
VWR-23455
VWR-24487
+ VWR-26066
+ VWR-26458
WEB-262
+Bryn Oh
+Buckaroo Mu
Bulli Schumann
CT-218
CT-219
@@ -229,6 +264,9 @@ Bulli Schumann
bushing Spatula
VWR-119
VWR-424
+blakopal Galicia
+Callipygian Christensen
+Cap Carver
Carjay McGinnis
VWR-3737
VWR-4070
@@ -236,37 +274,64 @@ Carjay McGinnis
VWR-6154
VWR-9400
VWR-9620
+Carla Broek
+Carr Arbenlow
Catherine Pfeffer
VWR-1282
VWR-8624
VWR-10854
+Cayu Cluny
Celierra Darling
VWR-1274
VWR-6975
+Chantal Harvey
+Charles Courtois
+Charlie Sazaland
+Cherry Cheevers
+ChickyBabes Zuzu
+Christopher Organiser
+Ciaran Laval
+Clara Young
Coaldust Numbers
VWR-1095
+Colpo Wexler
+Corinne Helendale
+Corro Moseley
+Coughdrop Littlething
Cron Stardust
VWR-10579
VWR-25120
STORM-1075
Cypren Christenson
STORM-417
+Dante Tucker
Dale Glass
VWR-120
VWR-560
VWR-2502
VWR-1358
VWR-2041
+Darien Caldwell
+Dartagan Shepherd
+Debs Regent
+Decro Schmooz
+Denim Kamachi
+DiJodi Dubratt
+Dil Spitz
+Dimitrio Lewis
+Dirk
Draconis Neurocam
STORM-1259
Drew Dri
VWR-19683
+Drew Dwi
Drewan Keats
VWR-28
VWR-248
VWR-412
VWR-638
VWR-660
+Dusan Writer
Dylan Haskell
VWR-72
Dzonatas Sol
@@ -289,28 +354,51 @@ Eddy Stryker
VWR-23
VWR-1468
VWR-1475
+Edgware Marker
+Egehan Dryke
+Ellla McMahon
+Elric Anatine
+Emma Portilo
+Emmie Fairymeadow
EponymousDylan Ra
VWR-1289
VWR-1465
Eva Nowicka
CT-324
CT-352
+Eva Rau
+Evangelista Emerald
+Faelon Swordthain
Farallon Greyskin
VWR-2036
Feep Larsson
VWR-447
VWR-1314
VWR-4444
+Fiachra Lach
Flemming Congrejo
CT-193
CT-318
+Flower Ducatillon
Fluf Fredriksson
VWR-3450
Fremont Cunningham
VWR-1147
+FreeSL Aeon
+Frenchimmo Sabra
+Frontera Thor
+Fury Rosewood
+Gaberoonie Zanzibar
+Ganymedes Costagravas
+Gene Frostbite
+GeneJ Composer
Geneko Nemeth
CT-117
VWR-11069
+Gentle Heron
+Gentle Welinder
+gwampa Lomu
+Giggles Littlebird
Gigs Taggart
SVC-493
VWR-6
@@ -336,20 +424,31 @@ Gigs Taggart
VWR-8783
Ginko Bayliss
VWR-4
+Grady Echegaray
Grazer Kline
VWR-1092
VWR-2113
Gudmund Shepherd
VWR-1594
VWR-1873
+Guni Greenstein
+Gwyneth Llewelyn
+Gypsy Tripsa
+Hackshaven Harford
+Ham Rambler
Hamncheese Omlet
VWR-333
+Han Shuffle
+Hanglow Short
HappySmurf Papp
CT-193
+Harleen Gretzky
+Hatzfeld Runo
Henri Beauchamp
VWR-1320
VWR-1406
VWR-4157
+herina Bode
Hikkoshi Sakai
VWR-429
Hiro Sommambulist
@@ -362,23 +461,34 @@ Hiro Sommambulist
VWR-132
VWR-136
VWR-143
+Holger Gilruth
+Horatio Freund
Hoze Menges
VWR-255
+Hydra Shaftoe
+Hypatia Callisto
+Hypatia Pickens
Ian Kas
VWR-8780 (Russian localization)
[NO JIRA] (Ukranian localization)
CT-322
CT-325
+Identity Euler
Ima Mechanique
OPEN-50
OPEN-61
+ OPEN-76
STORM-1175
+Imnotgoing Sideways
+Inma Rau
+Innula Zenovka
Irene Muni
CT-324
CT-352
Iskar Ariantho
VWR-1223
VWR-11759
+Iyoba Tarantal
Jacek Antonelli
SNOW-388
VWR-165
@@ -392,9 +502,18 @@ Jacek Antonelli
VWR-2948
VWR-3605
VWR-8617
+Jack Abraham
+Jagga Meredith
JB Kraft
VWR-5283
VWR-7802
+Jennifer Boyle
+Jeremy Marquez
+Jessica Qin
+Jinx Nordberg
+Jo Bernandes
+Jocial Sonnenkern
+Joel Savard
Joghert LeSabre
VWR-64
Jonathan Yap
@@ -446,17 +565,40 @@ Jonathan Yap
STORM-1313
STORM-899
STORM-1273
+ STORM-1276
+ STORM-1462
+ STORM-1459
+ STORM-1522
+ STORM-1567
+ STORM-1572
+ STORM-1574
+Kadah Coba
+ STORM-1060
+Jondan Lundquist
+Josef Munster
+Josette Windlow
+Juilan Tripsa
+Juro Kothari
+Justin RiversRunRed
Kage Pixel
VWR-11
+Kagehi Kohn
+Kaimen Takahe
+Keklily Longfall
+Ken Lavender
Ken March
CT-245
+Kestral Karas
Kerutsen Sellery
VWR-1350
+Khisme Nitely
Khyota Wulluf
VWR-2085
VWR-8885
VWR-9256
VWR-9966
+Kimar Coba
+Kithrak Kirkorian
Kitty Barnett
VWR-19699
STORM-288
@@ -465,6 +607,9 @@ Kitty Barnett
STORM-1001
STORM-1175
VWR-24217
+Kolor Fall
+Komiko Okamoto
+Korvel Noh
Kunnis Basiat
VWR-82
VWR-102
@@ -474,6 +619,7 @@ Latif Khalifa
VWR-5370
leliel Mirihi
STORM-1100
+len Starship
Lisa Lowe
CT-218
CT-219
@@ -485,16 +631,40 @@ Lisa Lowe
CT-319
Lockhart Cordoso
VWR-108
+LSL Scientist
+Lamorna Proctor
+Lares Carter
+Larry Pixel
+Laurent Bechir
+Leal Choche
+Lenae Munz
+Lexi Frua
+Lillie Cordeaux
+Lilly Zenovka
+Lizzy Macarthur
+Luban Yiyuan
+Luc Starsider
+Lunita Savira
+Maccus McCullough
maciek marksman
CT-86
+Madison Blanc
+Maggie Darwin
Magnus Balczo
CT-138
+Malarthi Behemoth
+Mallory Destiny
Malwina Dollinger
CT-138
+Manx Wharton
march Korda
SVC-1020
+Marc Claridge
+Marc2 Sands
+Marianne McCann
Marine Kelley
STORM-281
+Matthew Anthony
Matthew Dowd
VWR-1344
VWR-1651
@@ -502,6 +672,8 @@ Matthew Dowd
VWR-1737
VWR-1761
VWR-2681
+Matto Destiny
+Maxim RiversRunRed
McCabe Maxsted
SNOW-387
VWR-1318
@@ -515,6 +687,10 @@ McCabe Maxsted
VWR-8454
VWR-8689
VWR-9007
+Medhue Simoni
+Mel Vanbeeck
+Melinda Latynina
+Mencius Watts
Michelle2 Zenovka
STORM-477
VWR-2652
@@ -532,6 +708,13 @@ Michelle2 Zenovka
VWR-8889
VWR-8310
VWR-9499
+ STORM-1060
+Michi Lumin
+Midian Farspire
+Miles Glaz
+Mindy Mathy
+Minerva Memel
+Mitch Wagner
Mm Alder
SNOW-376
VWR-197
@@ -539,8 +722,20 @@ Mm Alder
VWR-4232
VWR-4794
VWR-13578
+Mo Hax
+Mourna Biziou
Mr Greggan
VWR-445
+Nao Noe
+naofan Teardrop
+Naomah Beaumont
+Nathiel Siamendes
+Nber Medici
+Neko Link
+Netpat Igaly
+Neutron Chesnokov
+Newfie Pendragon
+Nicholai Laviscu
Nicholaz Beresford
VWR-132
VWR-176
@@ -611,12 +806,19 @@ Nicholaz Beresford
VWR-2412
VWR-2682
VWR-2684
+Nick Rhodes
Nicky Perian
OPEN-1
STORM-1087
STORM-1090
+Nicoladie Gymnast
Nounouch Hapmouche
VWR-238
+Ollie Kubrick
+Orenj Marat
+Orion Delphis
+Oryx Tempel
+Parvati Silverweb
Patric Mills
VWR-2645
Paul Churchill
@@ -639,6 +841,9 @@ Peekay Semyorka
VWR-79
Peter Lameth
VWR-7331
+PeterPunk Mooney
+Pixel Gausman
+Pixel Scientist
Pf Shan
CT-225
CT-226
@@ -649,15 +854,29 @@ Pf Shan
CT-231
CT-321
SNOW-422
+Polo Gufler
+Pounce Teazle
princess niven
VWR-5733
CT-85
CT-320
CT-352
+Professor Noarlunga
+Psi Merlin
+Quantum Destiny
+Questar Utu
+Quicksilver Hermes
+RAT Quan
+Radio Signals
+Ralf Setsuko
+RedMokum Bravin
Renault Clio
VWR-1976
resu Ampan
SNOW-93
+Revolution Perenti
+Rezit Sideways
+Rich Grainger
Ringo Tuxing
CT-225
CT-226
@@ -667,6 +886,7 @@ Ringo Tuxing
CT-230
CT-231
CT-321
+Riva
Robin Cornelius
SNOW-108
SNOW-204
@@ -687,6 +907,7 @@ Robin Cornelius
STORM-1019
STORM-1095
STORM-1128
+ STORM-1459
VWR-2488
VWR-9557
VWR-10579
@@ -697,9 +918,17 @@ Robin Cornelius
VWR-12763
VWR-12995
VWR-20911
+Rosco Teardrop
+Rose Evans
+Rudee Voom
+RufusTT Horsefly
Ryozu Kojima
VWR-53
VWR-287
+Sachi Vixen
+Sahkolihaa Contepomi
+Saii Hallard
+SaintLEOlions Zimer
Salahzar Stenvaag
CT-225
CT-226
@@ -709,11 +938,16 @@ Salahzar Stenvaag
CT-230
CT-231
CT-321
+Samm Larkham
Sammy Frederix
VWR-6186
+Sasy Scarborough
+Satanello Miami
Satomi Ahn
STORM-501
STORM-229
+ VWR-24502
+Scrim Pinion
Scrippy Scofield
VWR-3748
Seg Baphomet
@@ -733,11 +967,16 @@ Sergen Davies
CT-230
CT-231
CT-321
+SexySteven Morrisey
Shawn Kaufmat
SNOW-240
+Sheet Spotter
+Shnurui Troughton
Siana Gearz
STORM-960
STORM-1088
+sicarius Thorne
+Sicarius Toxx
SignpostMarv Martin
VWR-153
VWR-154
@@ -747,6 +986,10 @@ SignpostMarv Martin
VWR-8357
Simon Nolan
VWR-409
+Sini Nubalo
+Sitearm Madonna
+SLB Wirefly
+snowy Sidran
SpacedOut Frye
VWR-34
VWR-45
@@ -759,8 +1002,13 @@ SpacedOut Frye
VWR-1823
Sporked Friis
VWR-4903
+Soupa Segura
+Squirrel Wood
+ST Mensing
+Starshine Halasy
Stevex Janus
VWR-1182
+Stickman Ingmann
Still Defiant
VWR-207
VWR-227
@@ -776,8 +1024,13 @@ Strife Onizuka
VWR-2265
VWR-4111
SNOW-691
+Sudane Erato
+Synystyr Texan
+Takeda Terrawyng
TankMaster Finesmith
STORM-1100
+Talamasca
+Tali Rosca
Tayra Dagostino
SNOW-517
SNOW-543
@@ -808,8 +1061,10 @@ Techwolf Lupindo
SNOW-746
VWR-12385
VWR-20893
+Templar Merlin
tenebrous pau
VWR-247
+Tezcatlipoca Bisiani
Tharax Ferraris
VWR-605
Thickbrick Sleaford
@@ -828,19 +1083,27 @@ Thickbrick Sleaford
VWR-24420
STORM-956
STORM-1147
+ STORM-1325
Thraxis Epsilon
SVC-371
VWR-383
+Tiel Stonecutter
tiamat bingyi
CT-246
Tofu Buzzard
CTS-411
STORM-546
VWR-24509
+Tony Kembia
+Torben Trautman
+TouchaHoney Perhaps
TraductoresAnonimos Alter
CT-324
+Trey Reanimator
TriloByte Zanzibar
STORM-1100
+Trinity Dechou
+Trinity Dejavu
Tue Torok
CT-68
CT-69
@@ -856,13 +1119,26 @@ Twisted Laws
STORM-643
STORM-954
STORM-1103
+Unlikely Quintessa
+UsikuFarasi Kanarik
Vadim Bigbear
VWR-2681
Vector Hastings
VWR-8726
+Veritas Raymaker
+Vex Streeter
+Viaticus Speculaas
+Vick Forcella
+Villain Baroque
Vixen Heron
VWR-2710
CT-88
+Vixie Durant
+Void Singer
+Watty Berkson
+Westley Schridde
+Westley Streeter
+Whimsy Winx
Whoops Babii
VWR-631
VWR-1640
@@ -888,6 +1164,7 @@ Whoops Babii
VWR-8296
VWR-8297
VWR-8298
+Winter Ventura
Wilton Lundquist
VWR-7682
WolfPup Lowenhar
@@ -912,18 +1189,34 @@ WolfPup Lowenhar
STORM-1098
VWR-20741
VWR-20933
+Wundur Primbee
+Xiki Luik
+xstorm Radek
+YongYong Francois
+Zak Westminster
Zai Lynch
VWR-19505
+Zana Kohime
+Zaren Alexander
Zarkonnen Decosta
VWR-253
+Zeja Pyle
+ZenMondo Wormser
Zi Ree
+ SH-489
VWR-423
VWR-671
VWR-682
VWR-684
VWR-9127
VWR-1140
+ VWR-24017
+ VWR-25588
Zipherius Turas
VWR-76
VWR-77
+Zoex Flanagan
+
+
+
diff --git a/doc/translations.txt b/doc/translations.txt
new file mode 100644
index 0000000000..9b7f2d6292
--- /dev/null
+++ b/doc/translations.txt
@@ -0,0 +1,29 @@
+#List of translators who contribute to SL Viewer 2.0+ by language
+
+ Danish
+Flemming Congrejo
+ German
+Torben Trautman
+ French
+Valerie Linden
+ Polish
+Identity Euler
+ Portuguese
+Zaza Linden
+ Spanish
+Aralara Rajal
+Aura Dirval
+Cayu Cluny
+Eva Rau
+FreeSL Aeon
+Frontera Thor
+Inma Rau
+Irene Muni
+Lunita Savira
+Minerva Memel
+Polo Gufler
+Xiki Luik
+Shinya Tandino
+Catwise Yoshikawa
+ Traditional Chinese
+gefeit Dufaux
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index f96fe59326..39e33831d2 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -1,4 +1,3 @@
-
# -*- cmake -*-
# cmake_minimum_required should appear before any
@@ -62,7 +61,6 @@ if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
-
add_custom_target(viewer)
if (VIEWER)
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 2c974fb4ff..0266239454 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -171,7 +171,10 @@ if (LINUX)
add_definitions(-fvisibility=hidden)
# don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh! The viewer doesn't need to catch SIGCHLD anyway.
add_definitions(-DLL_IGNORE_SIGCHLD)
- add_definitions(-march=pentium4 -mfpmath=sse)
+ if (WORD_SIZE EQUAL 32)
+ add_definitions(-march=pentium4)
+ endif (WORD_SIZE EQUAL 32)
+ add_definitions(-mfpmath=sse)
#add_definitions(-ftree-vectorize) # THIS CRASHES GCC 3.1-3.2
if (NOT STANDALONE)
# this stops us requiring a really recent glibc at runtime
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index d9efc8f40d..394db362b1 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -40,7 +40,7 @@ if(WINDOWS)
ssleay32.dll
libeay32.dll
libcollada14dom22-d.dll
- glod.dll
+ glod.dll
)
set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
@@ -71,7 +71,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
@@ -96,7 +96,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
@@ -212,11 +212,11 @@ elseif(DARWIN)
libexpat.1.5.2.dylib
libexpat.dylib
libGLOD.dylib
- libllqtwebkit.dylib
- libminizip.a
+ libllqtwebkit.dylib
+ libminizip.a
libndofdev.dylib
libexception_handler.dylib
- libcollada14dom.dylib
+ libcollada14dom.dylib
)
# fmod is statically linked on darwin
@@ -252,19 +252,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/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/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/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/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 b96b00dc85..98f16e9d97 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/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
index 976aae08bb..48e876429d 100644
--- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
+++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
@@ -38,6 +38,7 @@
#include "llimagetga.h"
#include "llimagej2c.h"
#include "lldir.h"
+#include "lldiriterator.h"
// system libraries
#include <iostream>
@@ -201,7 +202,8 @@ void store_input_file(std::list<std::string> &input_filenames, const std::string
{
// If file name is a pattern, iterate to get each file name and store
std::string next_name;
- while (gDirUtilp->getNextFileInDir(dir,name,next_name))
+ LLDirIterator iter(dir, name);
+ while (iter.next(next_name))
{
std::string file_name = dir + gDirUtilp->getDirDelimiter() + next_name;
input_filenames.push_back(file_name);
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
index 0d0d9fbff6..cbf6021119 100644
--- a/indra/integration_tests/llui_libtest/llwidgetreg.cpp
+++ b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
@@ -49,6 +49,7 @@
#include "lltabcontainer.h"
#include "lltextbox.h"
#include "lltexteditor.h"
+#include "lltimectrl.h"
#include "llflyoutbutton.h"
#include "llfiltereditor.h"
#include "lllayoutstack.h"
@@ -92,6 +93,7 @@ void LLWidgetReg::initClass(bool register_widgets)
//LLDefaultChildRegistry::Register<LLPlaceHolderPanel> placeholder("placeholder");
LLDefaultChildRegistry::Register<LLTabContainer> tab_container("tab_container");
LLDefaultChildRegistry::Register<LLTextBox> text("text");
+ LLDefaultChildRegistry::Register<LLTimeCtrl> time("time");
LLDefaultChildRegistry::Register<LLTextEditor> simple_text_editor("simple_text_editor");
LLDefaultChildRegistry::Register<LLUICtrl> ui_ctrl("ui_ctrl");
LLDefaultChildRegistry::Register<LLStatView> stat_view("stat_view");
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/linux_crash_logger.cpp b/indra/linux_crash_logger/linux_crash_logger.cpp
index 8beae555fb..99d0ad7e14 100644
--- a/indra/linux_crash_logger/linux_crash_logger.cpp
+++ b/indra/linux_crash_logger/linux_crash_logger.cpp
@@ -24,16 +24,24 @@
* $/LicenseInfo$
*/
+#include "linden_common.h"
#include "llcrashloggerlinux.h"
int main(int argc, char **argv)
{
+ llinfos << "Starting crash reporter." << llendl;
+
LLCrashLoggerLinux app;
app.parseCommandOptions(argc, argv);
- app.init();
+
+ if (! app.init())
+ {
+ llwarns << "Unable to initialize application." << llendl;
+ return 1;
+ }
+
app.mainLoop();
app.cleanup();
+ llinfos << "Crash reporter finished normally." << llendl;
return 0;
}
-
-
diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp
index 7449c6426f..7316717193 100644
--- a/indra/linux_crash_logger/llcrashloggerlinux.cpp
+++ b/indra/linux_crash_logger/llcrashloggerlinux.cpp
@@ -30,8 +30,6 @@
#include "linden_common.h"
-#include "boost/tokenizer.hpp"
-
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
#include "llerror.h"
#include "llfile.h"
diff --git a/indra/llaudio/llaudioengine_fmod.cpp b/indra/llaudio/llaudioengine_fmod.cpp
index a40de9fa68..88dfdb9c24 100644
--- a/indra/llaudio/llaudioengine_fmod.cpp
+++ b/indra/llaudio/llaudioengine_fmod.cpp
@@ -673,7 +673,7 @@ bool LLAudioBufferFMOD::loadWAV(const std::string& filename)
return false;
}
- if (!LLAPRFile::isExist(filename, NULL, LL_APR_RPB))
+ if (!LLAPRFile::isExist(filename, LL_APR_RPB))
{
// File not found, abort.
return false;
diff --git a/indra/llaudio/llvorbisencode.cpp b/indra/llaudio/llvorbisencode.cpp
index 0e0c80a456..44eeea0ca4 100644
--- a/indra/llaudio/llvorbisencode.cpp
+++ b/indra/llaudio/llvorbisencode.cpp
@@ -82,8 +82,7 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
error_msg.clear();
//********************************
- LLAPRFile infile ;
- infile.open(in_fname,LL_APR_RB);
+ LLAPRFile infile(in_fname, LL_APR_RB);
//********************************
if (!infile.getFileHandle())
{
@@ -233,8 +232,7 @@ S32 encode_vorbis_file(const std::string& in_fname, const std::string& out_fname
S32 data_left = 0;
- LLAPRFile infile ;
- infile.open(in_fname,LL_APR_RB);
+ LLAPRFile infile(in_fname,LL_APR_RB);
if (!infile.getFileHandle())
{
llwarns << "Couldn't open temporary ogg file for writing: " << in_fname
@@ -242,8 +240,7 @@ S32 encode_vorbis_file(const std::string& in_fname, const std::string& out_fname
return(LLVORBISENC_SOURCE_OPEN_ERR);
}
- LLAPRFile outfile ;
- outfile.open(out_fname,LL_APR_WPB);
+ LLAPRFile outfile(out_fname, LL_APR_WPB);
if (!outfile.getFileHandle())
{
llwarns << "Couldn't open upload sound file for reading: " << in_fname
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/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp
index f3cf950afa..c3c7f03247 100644
--- a/indra/llcharacter/llbvhloader.cpp
+++ b/indra/llcharacter/llbvhloader.cpp
@@ -219,8 +219,7 @@ ELoadStatus LLBVHLoader::loadTranslationTable(const char *fileName)
//--------------------------------------------------------------------
std::string path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName);
- LLAPRFile infile ;
- infile.open(path, LL_APR_R);
+ LLAPRFile infile(path, LL_APR_R);
apr_file_t *fp = infile.getFileHandle();
if (!fp)
return E_ST_NO_XLT_FILE;
diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp
index 5f84be2c5d..c9fb8534f1 100644
--- a/indra/llcharacter/llcharacter.cpp
+++ b/indra/llcharacter/llcharacter.cpp
@@ -38,7 +38,7 @@
LLStringTable LLCharacter::sVisualParamNames(1024);
std::vector< LLCharacter* > LLCharacter::sInstances;
-
+BOOL LLCharacter::sAllowInstancesChange = TRUE ;
//-----------------------------------------------------------------------------
// LLCharacter()
@@ -51,8 +51,10 @@ LLCharacter::LLCharacter()
mAppearanceSerialNum( 0 ),
mSkeletonSerialNum( 0 )
{
- mMotionController.setCharacter( this );
+ llassert_always(sAllowInstancesChange) ;
sInstances.push_back(this);
+
+ mMotionController.setCharacter( this );
mPauseRequest = new LLPauseRequestHandle();
}
@@ -62,18 +64,29 @@ LLCharacter::LLCharacter()
// Class Destructor
//-----------------------------------------------------------------------------
LLCharacter::~LLCharacter()
-{
+{
for (LLVisualParam *param = getFirstVisualParam();
param;
param = getNextVisualParam())
{
delete param;
}
- std::vector<LLCharacter*>::iterator iter = std::find(sInstances.begin(), sInstances.end(), this);
- if (iter != sInstances.end())
+
+ U32 i ;
+ U32 size = sInstances.size() ;
+ for(i = 0 ; i < size ; i++)
{
- sInstances.erase(iter);
+ if(sInstances[i] == this)
+ {
+ break ;
+ }
}
+
+ llassert_always(i < size) ;
+
+ llassert_always(sAllowInstancesChange) ;
+ sInstances[i] = sInstances[size - 1] ;
+ sInstances.pop_back() ;
}
diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
index a6347fcc3c..e81a27c2bc 100644
--- a/indra/llcharacter/llcharacter.h
+++ b/indra/llcharacter/llcharacter.h
@@ -266,6 +266,7 @@ public:
void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; }
static std::vector< LLCharacter* > sInstances;
+ static BOOL sAllowInstancesChange ; //debug use
protected:
LLMotionController mMotionController;
diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp
index 9df033a4ca..c6f45bffa2 100644
--- a/indra/llcharacter/llkeyframemotion.cpp
+++ b/indra/llcharacter/llkeyframemotion.cpp
@@ -467,13 +467,15 @@ LLPointer<LLJointState>& LLKeyframeMotion::getJointState(U32 index)
}
//-----------------------------------------------------------------------------
-// getJoin()
+// getJoint()
//-----------------------------------------------------------------------------
LLJoint* LLKeyframeMotion::getJoint(U32 index)
{
llassert_always (index < mJointStates.size());
LLJoint* joint = mJointStates[index]->getJoint();
- llassert_always (joint);
+
+ //Commented out 06-28-11 by Aura.
+ //llassert_always (joint);
return joint;
}
@@ -821,7 +823,11 @@ void LLKeyframeMotion::initializeConstraint(JointConstraint* constraint)
S32 joint_num;
LLVector3 source_pos = mCharacter->getVolumePos(shared_data->mSourceConstraintVolume, shared_data->mSourceConstraintOffset);
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[0]);
-
+ if ( !cur_joint )
+ {
+ return;
+ }
+
F32 source_pos_offset = dist_vec(source_pos, cur_joint->getWorldPosition());
constraint->mTotalLength = constraint->mJointLengths[0] = dist_vec(cur_joint->getParent()->getWorldPosition(), source_pos);
@@ -872,6 +878,10 @@ void LLKeyframeMotion::activateConstraint(JointConstraint* constraint)
for (joint_num = 1; joint_num < shared_data->mChainLength; joint_num++)
{
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+ if ( !cur_joint )
+ {
+ return;
+ }
constraint->mPositions[joint_num] = (cur_joint->getWorldPosition() - mPelvisp->getWorldPosition()) * ~mPelvisp->getWorldRotation();
}
@@ -932,6 +942,11 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
}
LLJoint* root_joint = getJoint(shared_data->mJointStateIndices[shared_data->mChainLength]);
+ if (! root_joint)
+ {
+ return;
+ }
+
LLVector3 root_pos = root_joint->getWorldPosition();
// LLQuaternion root_rot =
root_joint->getParent()->getWorldRotation();
@@ -943,6 +958,11 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
for (joint_num = 0; joint_num <= shared_data->mChainLength; joint_num++)
{
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+ if (!cur_joint)
+ {
+ return;
+ }
+
if (joint_mask[cur_joint->getJointNum()] >= (0xff >> (7 - getPriority())))
{
// skip constraint
@@ -1033,7 +1053,14 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
if (shared_data->mChainLength)
{
- LLQuaternion end_rot = getJoint(shared_data->mJointStateIndices[0])->getWorldRotation();
+ LLJoint* end_joint = getJoint(shared_data->mJointStateIndices[0]);
+
+ if (!end_joint)
+ {
+ return;
+ }
+
+ LLQuaternion end_rot = end_joint->getWorldRotation();
// slam start and end of chain to the proper positions (rest of chain stays put)
positions[0] = lerp(keyframe_source_pos, target_pos, weight);
@@ -1042,7 +1069,14 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
// grab keyframe-specified positions of joints
for (joint_num = 1; joint_num < shared_data->mChainLength; joint_num++)
{
- LLVector3 kinematic_position = getJoint(shared_data->mJointStateIndices[joint_num])->getWorldPosition() +
+ LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+
+ if (!cur_joint)
+ {
+ return;
+ }
+
+ LLVector3 kinematic_position = cur_joint->getWorldPosition() +
(source_to_target * constraint->mJointLengthFractions[joint_num]);
// convert intermediate joint positions to world coordinates
@@ -1088,7 +1122,17 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
for (joint_num = shared_data->mChainLength; joint_num > 0; joint_num--)
{
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+
+ if (!cur_joint)
+ {
+ return;
+ }
LLJoint* child_joint = getJoint(shared_data->mJointStateIndices[joint_num - 1]);
+ if (!child_joint)
+ {
+ return;
+ }
+
LLQuaternion parent_rot = cur_joint->getParent()->getWorldRotation();
LLQuaternion cur_rot = cur_joint->getWorldRotation();
@@ -1122,7 +1166,6 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
cur_joint->setRotation(target_rot);
}
- LLJoint* end_joint = getJoint(shared_data->mJointStateIndices[0]);
LLQuaternion end_local_rot = end_rot * ~end_joint->getParent()->getWorldRotation();
if (weight == 1.f)
@@ -1150,7 +1193,13 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
//reset old joint rots
for (joint_num = 0; joint_num <= shared_data->mChainLength; joint_num++)
{
- getJoint(shared_data->mJointStateIndices[joint_num])->setRotation(old_rots[joint_num]);
+ LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+ if (!cur_joint)
+ {
+ return;
+ }
+
+ cur_joint->setRotation(old_rots[joint_num]);
}
}
// simple positional constraint (pelvis only)
@@ -1775,7 +1824,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
constraintp->mJointStateIndices[i] = -1;
for (U32 j = 0; j < mJointMotionList->getNumJointMotions(); j++)
{
- if(getJoint(j) == joint)
+ LLJoint* constraint_joint = getJoint(j);
+
+ if ( !constraint_joint )
+ {
+ llwarns << "Invalid joint " << j << llendl;
+ return FALSE;
+ }
+
+ if(constraint_joint == joint)
{
constraintp->mJointStateIndices[i] = (S32)j;
break;
diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h
index 1fe9af40b3..b1422b2b90 100644
--- a/indra/llcharacter/llkeyframemotion.h
+++ b/indra/llcharacter/llkeyframemotion.h
@@ -70,7 +70,7 @@ public:
private:
// private helper functions to wrap some asserts
LLPointer<LLJointState>& getJointState(U32 index);
- LLJoint* getJoint(U32 index);
+ LLJoint* getJoint(U32 index );
public:
//-------------------------------------------------------------------------
diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp
index 82fe8971f5..c3d5dec875 100644
--- a/indra/llcharacter/llkeyframemotionparam.cpp
+++ b/indra/llcharacter/llkeyframemotionparam.cpp
@@ -351,8 +351,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
// open the file
//-------------------------------------------------------------------------
S32 fileSize = 0;
- LLAPRFile infile ;
- infile.open(path, LL_APR_R, NULL, &fileSize);
+ LLAPRFile infile(path, LL_APR_R, &fileSize);
apr_file_t* fp = infile.getFileHandle() ;
if (!fp || fileSize == 0)
{
diff --git a/indra/llcharacter/llstatemachine.cpp b/indra/llcharacter/llstatemachine.cpp
index e0454131a5..dcc4ff5f0e 100644
--- a/indra/llcharacter/llstatemachine.cpp
+++ b/indra/llcharacter/llstatemachine.cpp
@@ -204,8 +204,7 @@ LLFSMState* LLStateDiagram::getState(U32 state_id)
BOOL LLStateDiagram::saveDotFile(const std::string& filename)
{
- LLAPRFile outfile ;
- outfile.open(filename, LL_APR_W);
+ LLAPRFile outfile(filename, LL_APR_W);
apr_file_t* dot_file = outfile.getFileHandle() ;
if (!dot_file)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 9910281b64..cc6bddc4da 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -31,6 +31,7 @@ set(llcommon_SOURCE_FILES
llallocator_heap_profile.cpp
llapp.cpp
llapr.cpp
+ llaprpool.cpp
llassettype.cpp
llavatarname.cpp
llbase32.cpp
@@ -80,6 +81,7 @@ set(llcommon_SOURCE_FILES
llrand.cpp
llrefcount.cpp
llrun.cpp
+ llscopedvolatileaprpool.h
llsd.cpp
llsdserialize.cpp
llsdserialize_xml.cpp
@@ -122,6 +124,7 @@ set(llcommon_HEADER_FILES
llavatarname.h
llapp.h
llapr.h
+ llaprpool.h
llassettype.h
llassoclist.h
llavatarconstants.h
@@ -317,7 +320,8 @@ if (LL_TESTS)
LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}")
- LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}"
+ "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/setpython.py")
LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}")
diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h
index d0f287657e..0745696ef3 100644
--- a/indra/llcommon/indra_constants.h
+++ b/indra/llcommon/indra_constants.h
@@ -387,8 +387,6 @@ const S32 MAP_SIM_RETURN_NULL_SIMS = 0x00010000;
const S32 MAP_SIM_PRELUDE = 0x00020000;
// Crash reporter behavior
-const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
-const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
const S32 CRASH_BEHAVIOR_ASK = 0;
const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
const S32 CRASH_BEHAVIOR_NEVER_SEND = 2;
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index ed192a9975..a8b7106078 100644
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -137,10 +137,6 @@ void LLApp::commonCtor()
mOptions.append(sd);
}
- // Make sure we clean up APR when we exit
- // Don't need to do this if we're cleaning up APR in the destructor
- //atexit(ll_cleanup_apr);
-
// Set the application to this instance.
sApplication = this;
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
index d1c44c9403..1e4a51102e 100644
--- a/indra/llcommon/llapr.cpp
+++ b/indra/llcommon/llapr.cpp
@@ -29,212 +29,8 @@
#include "linden_common.h"
#include "llapr.h"
#include "apr_dso.h"
+#include "llscopedvolatileaprpool.h"
-apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool
-LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool.
-apr_thread_mutex_t *gLogMutexp = NULL;
-apr_thread_mutex_t *gCallStacksLogMutexp = NULL;
-
-const S32 FULL_VOLATILE_APR_POOL = 1024 ; //number of references to LLVolatileAPRPool
-
-void ll_init_apr()
-{
- if (!gAPRPoolp)
- {
- // Initialize APR and create the global pool
- apr_initialize();
- apr_pool_create(&gAPRPoolp, NULL);
-
- // Initialize the logging mutex
- apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp);
- apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp);
- }
-
- if(!LLAPRFile::sAPRFilePoolp)
- {
- LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ;
- }
-}
-
-
-void ll_cleanup_apr()
-{
- LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL;
-
- if (gLogMutexp)
- {
- // Clean up the logging mutex
-
- // All other threads NEED to be done before we clean up APR, so this is okay.
- apr_thread_mutex_destroy(gLogMutexp);
- gLogMutexp = NULL;
- }
- if (gCallStacksLogMutexp)
- {
- // Clean up the logging mutex
-
- // All other threads NEED to be done before we clean up APR, so this is okay.
- apr_thread_mutex_destroy(gCallStacksLogMutexp);
- gCallStacksLogMutexp = NULL;
- }
- if (gAPRPoolp)
- {
- apr_pool_destroy(gAPRPoolp);
- gAPRPoolp = NULL;
- }
- if (LLAPRFile::sAPRFilePoolp)
- {
- delete LLAPRFile::sAPRFilePoolp ;
- LLAPRFile::sAPRFilePoolp = NULL ;
- }
- apr_terminate();
-}
-
-//
-//
-//LLAPRPool
-//
-LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag)
- : mParent(parent),
- mReleasePoolFlag(releasePoolFlag),
- mMaxSize(size),
- mPool(NULL)
-{
- createAPRPool() ;
-}
-
-LLAPRPool::~LLAPRPool()
-{
- releaseAPRPool() ;
-}
-
-void LLAPRPool::createAPRPool()
-{
- if(mPool)
- {
- return ;
- }
-
- mStatus = apr_pool_create(&mPool, mParent);
- ll_apr_warn_status(mStatus) ;
-
- if(mMaxSize > 0) //size is the number of blocks (which is usually 4K), NOT bytes.
- {
- apr_allocator_t *allocator = apr_pool_allocator_get(mPool);
- if (allocator)
- {
- apr_allocator_max_free_set(allocator, mMaxSize) ;
- }
- }
-}
-
-void LLAPRPool::releaseAPRPool()
-{
- if(!mPool)
- {
- return ;
- }
-
- if(!mParent || mReleasePoolFlag)
- {
- apr_pool_destroy(mPool) ;
- mPool = NULL ;
- }
-}
-
-//virtual
-apr_pool_t* LLAPRPool::getAPRPool()
-{
- return mPool ;
-}
-
-LLVolatileAPRPool::LLVolatileAPRPool(BOOL is_local, apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag)
- : LLAPRPool(parent, size, releasePoolFlag),
- mNumActiveRef(0),
- mNumTotalRef(0),
- mMutexPool(NULL),
- mMutexp(NULL)
-{
- //create mutex
- if(!is_local) //not a local apr_pool, that is: shared by multiple threads.
- {
- apr_pool_create(&mMutexPool, NULL); // Create a pool for mutex
- apr_thread_mutex_create(&mMutexp, APR_THREAD_MUTEX_UNNESTED, mMutexPool);
- }
-}
-
-LLVolatileAPRPool::~LLVolatileAPRPool()
-{
- //delete mutex
- if(mMutexp)
- {
- apr_thread_mutex_destroy(mMutexp);
- apr_pool_destroy(mMutexPool);
- }
-}
-
-//
-//define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
-//
-//virtual
-apr_pool_t* LLVolatileAPRPool::getAPRPool()
-{
- return LLVolatileAPRPool::getVolatileAPRPool() ;
-}
-
-apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool()
-{
- LLScopedLock lock(mMutexp) ;
-
- mNumTotalRef++ ;
- mNumActiveRef++ ;
-
- if(!mPool)
- {
- createAPRPool() ;
- }
-
- return mPool ;
-}
-
-void LLVolatileAPRPool::clearVolatileAPRPool()
-{
- LLScopedLock lock(mMutexp) ;
-
- if(mNumActiveRef > 0)
- {
- mNumActiveRef--;
- if(mNumActiveRef < 1)
- {
- if(isFull())
- {
- mNumTotalRef = 0 ;
-
- //destroy the apr_pool.
- releaseAPRPool() ;
- }
- else
- {
- //This does not actually free the memory,
- //it just allows the pool to re-use this memory for the next allocation.
- apr_pool_clear(mPool) ;
- }
- }
- }
- else
- {
- llassert_always(mNumActiveRef > 0) ;
- }
-
- //paranoia check if the pool is jammed.
- //will remove the check before going to release.
- llassert_always(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;
-}
-
-BOOL LLVolatileAPRPool::isFull()
-{
- return mNumTotalRef > FULL_VOLATILE_APR_POOL ;
-}
//---------------------------------------------------------------------
//
// LLScopedLock
@@ -313,15 +109,17 @@ void ll_apr_assert_status(apr_status_t status, apr_dso_handle_t *handle)
//
LLAPRFile::LLAPRFile()
: mFile(NULL),
- mCurrentFilePoolp(NULL)
+ mVolatileFilePoolp(NULL),
+ mRegularFilePoolp(NULL)
{
}
-LLAPRFile::LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool)
+LLAPRFile::LLAPRFile(std::string const& filename, apr_int32_t flags, S32* sizep, access_t access_type)
: mFile(NULL),
- mCurrentFilePoolp(NULL)
+ mVolatileFilePoolp(NULL),
+ mRegularFilePoolp(NULL)
{
- open(filename, flags, pool);
+ open(filename, flags, access_type, sizep);
}
LLAPRFile::~LLAPRFile()
@@ -338,36 +136,58 @@ apr_status_t LLAPRFile::close()
mFile = NULL ;
}
- if(mCurrentFilePoolp)
+ if (mVolatileFilePoolp)
{
- mCurrentFilePoolp->clearVolatileAPRPool() ;
- mCurrentFilePoolp = NULL ;
+ mVolatileFilePoolp->clearVolatileAPRPool() ;
+ mVolatileFilePoolp = NULL ;
+ }
+
+ if (mRegularFilePoolp)
+ {
+ delete mRegularFilePoolp;
+ mRegularFilePoolp = NULL;
}
return ret ;
}
-apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool, S32* sizep)
+apr_status_t LLAPRFile::open(std::string const& filename, apr_int32_t flags, access_t access_type, S32* sizep)
{
- apr_status_t s ;
-
- //check if already open some file
- llassert_always(!mFile) ;
- llassert_always(!mCurrentFilePoolp) ;
-
- apr_pool_t* apr_pool = pool ? pool->getVolatileAPRPool() : NULL ;
- s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool));
+ llassert_always(!mFile);
+ llassert_always(!mVolatileFilePoolp && !mRegularFilePoolp);
- if (s != APR_SUCCESS || !mFile)
+ apr_status_t status;
+ {
+ apr_pool_t* apr_file_open_pool; // The use of apr_pool_t is OK here.
+ // This is a temporary variable for a pool that is passed directly to apr_file_open below.
+ if (access_type == short_lived)
+ {
+ // Use a "volatile" thread-local pool.
+ mVolatileFilePoolp = &LLThreadLocalData::tldata().mVolatileAPRPool;
+ // Access the pool and increment its reference count.
+ // The reference count of LLVolatileAPRPool objects will be decremented
+ // again in LLAPRFile::close by calling mVolatileFilePoolp->clearVolatileAPRPool().
+ apr_file_open_pool = mVolatileFilePoolp->getVolatileAPRPool();
+ }
+ else
+ {
+ mRegularFilePoolp = new LLAPRPool(LLThreadLocalData::tldata().mRootPool);
+ apr_file_open_pool = (*mRegularFilePoolp)();
+ }
+ status = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, apr_file_open_pool);
+ }
+ if (status != APR_SUCCESS || !mFile)
{
mFile = NULL ;
-
+ close() ;
if (sizep)
{
*sizep = 0;
}
+ return status;
}
- else if (sizep)
+
+ if (sizep)
{
S32 file_size = 0;
apr_off_t offset = 0;
@@ -381,49 +201,7 @@ apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLV
*sizep = file_size;
}
- if(!mCurrentFilePoolp)
- {
- mCurrentFilePoolp = pool ;
-
- if(!mFile)
- {
- close() ;
- }
- }
-
- return s ;
-}
-
-//use gAPRPoolp.
-apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool)
-{
- apr_status_t s;
-
- //check if already open some file
- llassert_always(!mFile) ;
- llassert_always(!mCurrentFilePoolp) ;
- llassert_always(use_global_pool) ; //be aware of using gAPRPoolp.
-
- s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, gAPRPoolp);
- if (s != APR_SUCCESS || !mFile)
- {
- mFile = NULL ;
- close() ;
- return s;
- }
-
- return s;
-}
-
-apr_pool_t* LLAPRFile::getAPRFilePool(apr_pool_t* pool)
-{
- if(!pool)
- {
- mCurrentFilePoolp = sAPRFilePoolp ;
- return mCurrentFilePoolp->getVolatileAPRPool() ;
- }
-
- return pool ;
+ return status;
}
// File I/O
@@ -482,45 +260,6 @@ S32 LLAPRFile::seek(apr_seek_where_t where, S32 offset)
//
//static
-apr_status_t LLAPRFile::close(apr_file_t* file_handle, LLVolatileAPRPool* pool)
-{
- apr_status_t ret = APR_SUCCESS ;
- if(file_handle)
- {
- ret = apr_file_close(file_handle);
- file_handle = NULL ;
- }
-
- if(pool)
- {
- pool->clearVolatileAPRPool() ;
- }
-
- return ret ;
-}
-
-//static
-apr_file_t* LLAPRFile::open(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags)
-{
- apr_status_t s;
- apr_file_t* file_handle ;
-
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
-
- s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool());
- if (s != APR_SUCCESS || !file_handle)
- {
- ll_apr_warn_status(s);
- LL_WARNS("APR") << " Attempting to open filename: " << filename << LL_ENDL;
- file_handle = NULL ;
- close(file_handle, pool) ;
- return NULL;
- }
-
- return file_handle ;
-}
-
-//static
S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset)
{
if(!file_handle)
@@ -553,13 +292,15 @@ S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset)
}
//static
-S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool)
+S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes)
{
- //*****************************************
- apr_file_t* file_handle = open(filename, pool, APR_READ|APR_BINARY);
- //*****************************************
- if (!file_handle)
+ apr_file_t* file_handle;
+ LLScopedVolatileAPRPool pool;
+ apr_status_t s = apr_file_open(&file_handle, filename.c_str(), APR_READ|APR_BINARY, APR_OS_DEFAULT, pool);
+ if (s != APR_SUCCESS || !file_handle)
{
+ ll_apr_warn_status(s);
+ LL_WARNS("APR") << " while attempting to open file \"" << filename << '"' << LL_ENDL;
return 0;
}
@@ -589,14 +330,13 @@ S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nb
}
}
- //*****************************************
- close(file_handle, pool) ;
- //*****************************************
+ apr_file_close(file_handle);
+
return (S32)bytes_read;
}
//static
-S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool)
+S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes)
{
apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY;
if (offset < 0)
@@ -605,11 +345,13 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n
offset = 0;
}
- //*****************************************
- apr_file_t* file_handle = open(filename, pool, flags);
- //*****************************************
- if (!file_handle)
+ apr_file_t* file_handle;
+ LLScopedVolatileAPRPool pool;
+ apr_status_t s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool);
+ if (s != APR_SUCCESS || !file_handle)
{
+ ll_apr_warn_status(s);
+ LL_WARNS("APR") << " while attempting to open file \"" << filename << '"' << LL_ENDL;
return 0;
}
@@ -639,21 +381,18 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n
}
}
- //*****************************************
- LLAPRFile::close(file_handle, pool);
- //*****************************************
+ apr_file_close(file_handle);
return (S32)bytes_written;
}
//static
-bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool)
+bool LLAPRFile::remove(const std::string& filename)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_remove(filename.c_str(), pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_remove(filename.c_str(), pool);
if (s != APR_SUCCESS)
{
@@ -665,13 +404,12 @@ bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool)
}
//static
-bool LLAPRFile::rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool)
+bool LLAPRFile::rename(const std::string& filename, const std::string& newname)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_rename(filename.c_str(), newname.c_str(), pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_rename(filename.c_str(), newname.c_str(), pool);
if (s != APR_SUCCESS)
{
@@ -683,49 +421,44 @@ bool LLAPRFile::rename(const std::string& filename, const std::string& newname,
}
//static
-bool LLAPRFile::isExist(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags)
+bool LLAPRFile::isExist(const std::string& filename, apr_int32_t flags)
{
- apr_file_t* apr_file;
+ apr_file_t* file_handle;
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_open(&apr_file, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool());
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool);
- if (s != APR_SUCCESS || !apr_file)
+ if (s != APR_SUCCESS || !file_handle)
{
- pool->clearVolatileAPRPool() ;
return false;
}
else
{
- apr_file_close(apr_file) ;
- pool->clearVolatileAPRPool() ;
+ apr_file_close(file_handle);
return true;
}
}
//static
-S32 LLAPRFile::size(const std::string& filename, LLVolatileAPRPool* pool)
+S32 LLAPRFile::size(const std::string& filename)
{
- apr_file_t* apr_file;
+ apr_file_t* file_handle;
apr_finfo_t info;
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_open(&apr_file, filename.c_str(), APR_READ, APR_OS_DEFAULT, pool->getVolatileAPRPool());
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_open(&file_handle, filename.c_str(), APR_READ, APR_OS_DEFAULT, pool);
- if (s != APR_SUCCESS || !apr_file)
+ if (s != APR_SUCCESS || !file_handle)
{
- pool->clearVolatileAPRPool() ;
-
return 0;
}
else
{
- apr_status_t s = apr_file_info_get(&info, APR_FINFO_SIZE, apr_file);
+ apr_status_t s = apr_file_info_get(&info, APR_FINFO_SIZE, file_handle);
- apr_file_close(apr_file) ;
- pool->clearVolatileAPRPool() ;
+ apr_file_close(file_handle) ;
if (s == APR_SUCCESS)
{
@@ -739,31 +472,29 @@ S32 LLAPRFile::size(const std::string& filename, LLVolatileAPRPool* pool)
}
//static
-bool LLAPRFile::makeDir(const std::string& dirname, LLVolatileAPRPool* pool)
+bool LLAPRFile::makeDir(const std::string& dirname)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool);
if (s != APR_SUCCESS)
{
ll_apr_warn_status(s);
- LL_WARNS("APR") << " Attempting to make directory: " << dirname << LL_ENDL;
+ LL_WARNS("APR") << " while attempting to make directory: " << dirname << LL_ENDL;
return false;
}
return true;
}
//static
-bool LLAPRFile::removeDir(const std::string& dirname, LLVolatileAPRPool* pool)
+bool LLAPRFile::removeDir(const std::string& dirname)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_remove(dirname.c_str(), pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_remove(dirname.c_str(), pool);
if (s != APR_SUCCESS)
{
diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index af33ce666f..3f846f1314 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -50,71 +50,9 @@
#include "apr_atomic.h"
#include "llstring.h"
-extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp;
-extern apr_thread_mutex_t* gCallStacksLogMutexp;
-
struct apr_dso_handle_t;
-
-/**
- * @brief initialize the common apr constructs -- apr itself, the
- * global pool, and a mutex.
- */
-void LL_COMMON_API ll_init_apr();
-
-/**
- * @brief Cleanup those common apr constructs.
- */
-void LL_COMMON_API ll_cleanup_apr();
-
-//
-//LL apr_pool
-//manage apr_pool_t, destroy allocated apr_pool in the destruction function.
-//
-class LL_COMMON_API LLAPRPool
-{
-public:
- LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE) ;
- virtual ~LLAPRPool() ;
-
- virtual apr_pool_t* getAPRPool() ;
- apr_status_t getStatus() {return mStatus ; }
-
-protected:
- void releaseAPRPool() ;
- void createAPRPool() ;
-
-protected:
- apr_pool_t* mPool ; //pointing to an apr_pool
- apr_pool_t* mParent ; //parent pool
- apr_size_t mMaxSize ; //max size of mPool, mPool should return memory to system if allocated memory beyond this limit. However it seems not to work.
- apr_status_t mStatus ; //status when creating the pool
- BOOL mReleasePoolFlag ; //if set, mPool is destroyed when LLAPRPool is deleted. default value is true.
-};
-
-//
-//volatile LL apr_pool
-//which clears memory automatically.
-//so it can not hold static data or data after memory is cleared
-//
-class LL_COMMON_API LLVolatileAPRPool : public LLAPRPool
-{
-public:
- LLVolatileAPRPool(BOOL is_local = TRUE, apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE);
- virtual ~LLVolatileAPRPool();
-
- /*virtual*/ apr_pool_t* getAPRPool() ; //define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
- apr_pool_t* getVolatileAPRPool() ;
- void clearVolatileAPRPool() ;
-
- BOOL isFull() ;
-
-private:
- S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool.
- S32 mNumTotalRef ; //number of total pointers pointing to the apr_pool since last creating.
-
- apr_thread_mutex_t *mMutexp;
- apr_pool_t *mMutexPool;
-} ;
+class LLAPRPool;
+class LLVolatileAPRPool;
/**
* @class LLScopedLock
@@ -205,15 +143,20 @@ class LL_COMMON_API LLAPRFile : boost::noncopyable
// make this non copyable since a copy closes the file
private:
apr_file_t* mFile ;
- LLVolatileAPRPool *mCurrentFilePoolp ; //currently in use apr_pool, could be one of them: sAPRFilePoolp, or a temp pool.
+ LLVolatileAPRPool* mVolatileFilePoolp; // (Thread local) APR pool currently in use.
+ LLAPRPool* mRegularFilePoolp; // ...or a regular pool.
public:
+ enum access_t {
+ long_lived, // Use a global pool for long-lived file accesses.
+ short_lived // Use a volatile pool for short-lived file accesses.
+ };
+
LLAPRFile() ;
- LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL);
+ LLAPRFile(std::string const& filename, apr_int32_t flags, S32* sizep = NULL, access_t access_type = short_lived);
~LLAPRFile() ;
-
- apr_status_t open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL, S32* sizep = NULL);
- apr_status_t open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool); //use gAPRPoolp.
+
+ apr_status_t open(const std::string& filename, apr_int32_t flags, access_t access_type, S32* sizep = NULL);
apr_status_t close() ;
// Returns actual offset, -1 if seek fails
@@ -226,32 +169,24 @@ public:
apr_file_t* getFileHandle() {return mFile;}
-private:
- apr_pool_t* getAPRFilePool(apr_pool_t* pool) ;
-
//
//*******************************************************************************************************************************
//static components
//
-public:
- static LLVolatileAPRPool *sAPRFilePoolp ; //a global apr_pool for APRFile, which is used only when local pool does not exist.
-
private:
- static apr_file_t* open(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags);
- static apr_status_t close(apr_file_t* file, LLVolatileAPRPool* pool) ;
static S32 seek(apr_file_t* file, apr_seek_where_t where, S32 offset);
public:
// returns false if failure:
- static bool remove(const std::string& filename, LLVolatileAPRPool* pool = NULL);
- static bool rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool = NULL);
- static bool isExist(const std::string& filename, LLVolatileAPRPool* pool = NULL, apr_int32_t flags = APR_READ);
- static S32 size(const std::string& filename, LLVolatileAPRPool* pool = NULL);
- static bool makeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
- static bool removeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
+ static bool remove(const std::string& filename);
+ static bool rename(const std::string& filename, const std::string& newname);
+ static bool isExist(const std::string& filename, apr_int32_t flags = APR_READ);
+ static S32 size(const std::string& filename);
+ static bool makeDir(const std::string& dirname);
+ static bool removeDir(const std::string& dirname);
// Returns bytes read/written, 0 if read/write fails:
- static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);
- static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); // offset<0 means append
+ static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes);
+ static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes); // offset<0 means append
//*******************************************************************************************************************************
};
@@ -267,6 +202,4 @@ bool LL_COMMON_API ll_apr_warn_status(apr_status_t status, apr_dso_handle_t* han
void LL_COMMON_API ll_apr_assert_status(apr_status_t status);
void LL_COMMON_API ll_apr_assert_status(apr_status_t status, apr_dso_handle_t* handle);
-extern "C" LL_COMMON_API apr_pool_t* gAPRPoolp; // Global APR memory pool
-
#endif // LL_LLAPR_H
diff --git a/indra/llcommon/llaprpool.cpp b/indra/llcommon/llaprpool.cpp
new file mode 100644
index 0000000000..6f21b61b65
--- /dev/null
+++ b/indra/llcommon/llaprpool.cpp
@@ -0,0 +1,202 @@
+/**
+ * @file llaprpool.cpp
+ *
+ * $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$
+ *
+ * CHANGELOG
+ * and additional copyright holders.
+ *
+ * 04/04/2010
+ * - Initial version, written by Aleric Inglewood @ SL
+ *
+ * 10/11/2010
+ * - Added APR_HAS_THREADS #if's to allow creation and destruction
+ * of subpools by threads other than the parent pool owner.
+ */
+
+#include "linden_common.h"
+
+#include "llerror.h"
+#include "llaprpool.h"
+#include "llthread.h"
+
+// Create a subpool from parent.
+void LLAPRPool::create(LLAPRPool& parent)
+{
+ llassert(!mPool); // Must be non-initialized.
+ mParent = &parent;
+ if (!mParent) // Using the default parameter?
+ {
+ // By default use the root pool of the current thread.
+ mParent = &LLThreadLocalData::tldata().mRootPool;
+ }
+ llassert(mParent->mPool); // Parent must be initialized.
+#if APR_HAS_THREADS
+ // As per the documentation of APR (ie http://apr.apache.org/docs/apr/1.4/apr__pools_8h.html):
+ //
+ // Note that most operations on pools are not thread-safe: a single pool should only be
+ // accessed by a single thread at any given time. The one exception to this rule is creating
+ // a subpool of a given pool: one or more threads can safely create subpools at the same
+ // time that another thread accesses the parent pool.
+ //
+ // In other words, it's safe for any thread to create a (sub)pool, independent of who
+ // owns the parent pool.
+ mOwner = apr_os_thread_current();
+#else
+ mOwner = mParent->mOwner;
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+#endif
+ apr_status_t const apr_pool_create_status = apr_pool_create(&mPool, mParent->mPool);
+ llassert_always(apr_pool_create_status == APR_SUCCESS);
+ llassert(mPool); // Initialized.
+ apr_pool_cleanup_register(mPool, this, &s_plain_cleanup, &apr_pool_cleanup_null);
+}
+
+// Destroy the (sub)pool, if any.
+void LLAPRPool::destroy(void)
+{
+ // Only do anything if we are not already (being) destroyed.
+ if (mPool)
+ {
+#if !APR_HAS_THREADS
+ // If we are a root pool, then every thread may destruct us: in that case
+ // we have to assume that no other thread will use this pool concurrently,
+ // of course. Otherwise, if we are a subpool, only the thread that owns
+ // the parent may destruct us, since that is the pool that is still alive,
+ // possibly being used by others and being altered here.
+ llassert(!mParent || apr_os_thread_equal(mParent->mOwner, apr_os_thread_current()));
+#endif
+ apr_pool_t* pool = mPool; // The use of apr_pool_t is OK here.
+ // Temporary store before destroying the pool.
+ mPool = NULL; // Mark that we are BEING destructed.
+ apr_pool_cleanup_kill(pool, this, &s_plain_cleanup);
+ apr_pool_destroy(pool);
+ }
+}
+
+bool LLAPRPool::parent_is_being_destructed(void)
+{
+ return mParent && (!mParent->mPool || mParent->parent_is_being_destructed());
+}
+
+LLAPRInitialization::LLAPRInitialization(void)
+{
+ static bool apr_initialized = false;
+
+ if (!apr_initialized)
+ {
+ apr_initialize();
+ }
+
+ apr_initialized = true;
+}
+
+bool LLAPRRootPool::sCountInitialized = false;
+apr_uint32_t volatile LLAPRRootPool::sCount;
+
+apr_thread_mutex_t* gLogMutexp;
+apr_thread_mutex_t* gCallStacksLogMutexp;
+
+LLAPRRootPool::LLAPRRootPool(void) : LLAPRInitialization(), LLAPRPool(0)
+{
+ // sCountInitialized don't need locking because when we get here there is still only a single thread.
+ if (!sCountInitialized)
+ {
+ // Initialize the logging mutex
+ apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, mPool);
+ apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, mPool);
+
+ apr_status_t status = apr_atomic_init(mPool);
+ llassert_always(status == APR_SUCCESS);
+ apr_atomic_set32(&sCount, 1); // Set to 1 to account for the global root pool.
+ sCountInitialized = true;
+
+ // Initialize thread-local APR pool support.
+ // Because this recursively calls LLAPRRootPool::LLAPRRootPool(void)
+ // it must be done last, so that sCount is already initialized.
+ LLThreadLocalData::init();
+ }
+ apr_atomic_inc32(&sCount);
+}
+
+LLAPRRootPool::~LLAPRRootPool()
+{
+ if (!apr_atomic_dec32(&sCount))
+ {
+ // The last pool was destructed. Cleanup remainder of APR.
+ LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL;
+
+ if (gLogMutexp)
+ {
+ // Clean up the logging mutex
+
+ // All other threads NEED to be done before we clean up APR, so this is okay.
+ apr_thread_mutex_destroy(gLogMutexp);
+ gLogMutexp = NULL;
+ }
+ if (gCallStacksLogMutexp)
+ {
+ // Clean up the logging mutex
+
+ // All other threads NEED to be done before we clean up APR, so this is okay.
+ apr_thread_mutex_destroy(gCallStacksLogMutexp);
+ gCallStacksLogMutexp = NULL;
+ }
+
+ // Must destroy ALL, and therefore this last LLAPRRootPool, before terminating APR.
+ static_cast<LLAPRRootPool*>(this)->destroy();
+
+ apr_terminate();
+ }
+}
+
+//static
+// Return a global root pool that is independent of LLThreadLocalData.
+// Normally you should NOT use this. Only use for early initialization
+// (before main) and deinitialization (after main).
+LLAPRRootPool& LLAPRRootPool::get(void)
+{
+ static LLAPRRootPool global_APRpool(0);
+ return global_APRpool;
+}
+
+void LLVolatileAPRPool::clearVolatileAPRPool()
+{
+ llassert_always(mNumActiveRef > 0);
+ if (--mNumActiveRef == 0)
+ {
+ if (isOld())
+ {
+ destroy();
+ mNumTotalRef = 0 ;
+ }
+ else
+ {
+ // This does not actually free the memory,
+ // it just allows the pool to re-use this memory for the next allocation.
+ clear();
+ }
+ }
+
+ // Paranoia check if the pool is jammed.
+ llassert(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;
+}
diff --git a/indra/llcommon/llaprpool.h b/indra/llcommon/llaprpool.h
new file mode 100644
index 0000000000..bf4102c584
--- /dev/null
+++ b/indra/llcommon/llaprpool.h
@@ -0,0 +1,256 @@
+/**
+ * @file llaprpool.h
+ * @brief Implementation of LLAPRPool
+ *
+ * $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$
+ *
+ * CHANGELOG
+ * and additional copyright holders.
+ *
+ * 04/04/2010
+ * - Initial version, written by Aleric Inglewood @ SL
+ *
+ * 10/11/2010
+ * - Added APR_HAS_THREADS #if's to allow creation and destruction
+ * of subpools by threads other than the parent pool owner.
+ *
+ * 05/02/2011
+ * - Fixed compilation on windows: Suppress compile warning 4996
+ * and include <winsock2.h> before including <ws2tcpip.h>,
+ * by Merov Linden @ SL.
+ */
+
+#ifndef LL_LLAPRPOOL_H
+#define LL_LLAPRPOOL_H
+
+#ifdef LL_WINDOWS
+#pragma warning(push)
+#pragma warning(disable:4996)
+#include <winsock2.h>
+#include <ws2tcpip.h> // Needed before including apr_portable.h
+#pragma warning(pop)
+#endif
+
+#include "apr_portable.h"
+#include "apr_pools.h"
+#include "llerror.h"
+
+extern void ll_init_apr();
+
+/**
+ * @brief A wrapper around the APR memory pool API.
+ *
+ * Usage of this class should be restricted to passing it to libapr-1 function calls that need it.
+ *
+ */
+class LL_COMMON_API LLAPRPool
+{
+protected:
+ //! Pointer to the underlaying pool. NULL if not initialized.
+ apr_pool_t* mPool; // The use of apr_pool_t is OK here.
+ // This is the wrapped pointer that it is all about!
+ //! Pointer to the parent pool, if any. Only valid when mPool is non-zero.
+ LLAPRPool* mParent;
+ //! The thread that owns this memory pool. Only valid when mPool is non-zero.
+ apr_os_thread_t mOwner;
+
+public:
+ /// Construct an uninitialized (destructed) pool.
+ LLAPRPool(void) : mPool(NULL) { }
+
+ /// Construct a subpool from an existing pool.
+ /// This is not a copy-constructor, this class doesn't have one!
+ LLAPRPool(LLAPRPool& parent) : mPool(NULL) { create(parent); }
+
+ /// Destruct the memory pool (free all of its subpools and allocated memory).
+ ~LLAPRPool() { destroy(); }
+
+protected:
+ /// Create a pool that is allocated from the Operating System. Only used by LLAPRRootPool.
+ LLAPRPool(int) : mPool(NULL), mParent(NULL), mOwner(apr_os_thread_current())
+ {
+ apr_status_t const apr_pool_create_status = apr_pool_create(&mPool, NULL);
+ llassert_always(apr_pool_create_status == APR_SUCCESS);
+ llassert(mPool);
+ apr_pool_cleanup_register(mPool, this, &s_plain_cleanup, &apr_pool_cleanup_null);
+ }
+
+public:
+ /// Create a subpool from parent. May only be called for an uninitialized/destroyed pool.
+ /// The default parameter causes the root pool of the current thread to be used.
+ void create(LLAPRPool& parent = *static_cast<LLAPRPool*>(NULL));
+
+ /// Destroy the (sub)pool, if any.
+ void destroy(void);
+
+ // Use some safebool idiom (http://www.artima.com/cppsource/safebool.html) rather than operator bool.
+ typedef LLAPRPool* const LLAPRPool::* const bool_type;
+ /// Return true if the pool is initialized.
+ operator bool_type() const { return mPool ? &LLAPRPool::mParent : 0; }
+
+ /// Painful, but we have to either provide access to this, or wrap
+ /// every APR function call that needs an apr pool as argument.
+ /// NEVER destroy a pool that is returned by this function!
+ apr_pool_t* operator()(void) const // The use of apr_pool_t is OK here.
+ // This is the accessor for passing the pool to libapr-1 functions.
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ return mPool;
+ }
+
+ /// Free all memory without destructing the pool.
+ void clear(void)
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ apr_pool_clear(mPool);
+ }
+
+// These methods would make this class 'complete' (as wrapper around the libapr
+// pool functions), but we don't use memory pools in the viewer (only when
+// we are forced to pass one to a libapr call), so don't define them in order
+// not to encourage people to use them.
+#if 0
+ void* palloc(size_t size)
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ return apr_palloc(mPool, size);
+ }
+ void* pcalloc(size_t size)
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ return apr_pcalloc(mPool, size);
+ }
+#endif
+
+private:
+ bool parent_is_being_destructed(void);
+ static apr_status_t s_plain_cleanup(void* userdata) { return static_cast<LLAPRPool*>(userdata)->plain_cleanup(); }
+
+ apr_status_t plain_cleanup(void)
+ {
+ if (mPool && // We are not being destructed,
+ parent_is_being_destructed()) // but our parent is.
+ // This means the pool is being destructed recursively by libapr
+ // because one of its parents is being destructed.
+ {
+ mPool = NULL; // Stop destroy() from destructing the pool again.
+ }
+ return APR_SUCCESS;
+ }
+};
+
+class LLAPRInitialization
+{
+public:
+ LLAPRInitialization(void);
+};
+
+/**
+ * @brief Root memory pool (allocates memory from the operating system).
+ *
+ * This class should only be used by LLThreadLocalData
+ * (and LLMutexRootPool when APR_HAS_THREADS isn't defined).
+ */
+class LL_COMMON_API LLAPRRootPool : public LLAPRInitialization, public LLAPRPool
+{
+private:
+ /// Construct a root memory pool. Should only be used by LLThreadLocalData and LLMutexRootPool.
+ friend class LLThreadLocalData;
+#if !APR_HAS_THREADS
+ friend class LLMutexRootPool;
+#endif
+ /// Construct a root memory pool.
+ /// Should only be used by LLThreadLocalData.
+ LLAPRRootPool(void);
+ ~LLAPRRootPool();
+
+private:
+ // Keep track of how many root pools exist and when the last one is destructed.
+ static bool sCountInitialized;
+ static apr_uint32_t volatile sCount;
+
+public:
+ // Return a global root pool that is independent of LLThreadLocalData.
+ // Normally you should not use this. Only use for early initialization
+ // (before main) and deinitialization (after main).
+ static LLAPRRootPool& get(void);
+
+#if APR_POOL_DEBUG
+ void grab_ownership(void)
+ {
+ // You need a patched libapr to use this.
+ // See http://web.archiveorange.com/archive/v/5XO9y2zoxUOMt6Gmi1OI
+ apr_pool_owner_set(mPool);
+ }
+#endif
+
+private:
+ // Used for constructing the Special Global Root Pool (returned by LLAPRRootPool::get).
+ // It is the same as the default constructor but omits to increment sCount. As a result,
+ // we must be sure that at least one other LLAPRRootPool is created before termination
+ // of the application (which is the case: we create one LLAPRRootPool per thread).
+ LLAPRRootPool(int) : LLAPRInitialization(), LLAPRPool(0) { }
+};
+
+/** Volatile memory pool
+ *
+ * 'Volatile' APR memory pool which normally only clears memory,
+ * and does not destroy the pool (the same pool is reused) for
+ * greater efficiency. However, as a safe guard the apr pool
+ * is destructed every FULL_VOLATILE_APR_POOL uses to allow
+ * the system memory to be allocated more efficiently and not
+ * get scattered through RAM.
+ */
+class LL_COMMON_API LLVolatileAPRPool : protected LLAPRPool
+{
+public:
+ LLVolatileAPRPool(void) : mNumActiveRef(0), mNumTotalRef(0) { }
+
+ void clearVolatileAPRPool(void);
+
+ bool isOld(void) const { return mNumTotalRef > FULL_VOLATILE_APR_POOL; }
+ bool isUnused() const { return mNumActiveRef == 0; }
+
+private:
+ friend class LLScopedVolatileAPRPool;
+ friend class LLAPRFile;
+ apr_pool_t* getVolatileAPRPool(void) // The use of apr_pool_t is OK here.
+ {
+ if (!mPool) create();
+ ++mNumActiveRef;
+ ++mNumTotalRef;
+ return LLAPRPool::operator()();
+ }
+
+private:
+ S32 mNumActiveRef; // Number of active uses of the pool.
+ S32 mNumTotalRef; // Number of total uses of the pool since last creation.
+
+ // Maximum number of references to LLVolatileAPRPool until the pool is recreated.
+ static S32 const FULL_VOLATILE_APR_POOL = 1024;
+};
+
+#endif // LL_LLAPRPOOL_H
diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp
index 8be9e4f4de..b8a7394852 100644
--- a/indra/llcommon/llcommon.cpp
+++ b/indra/llcommon/llcommon.cpp
@@ -31,17 +31,9 @@
#include "llthread.h"
//static
-BOOL LLCommon::sAprInitialized = FALSE;
-
-//static
void LLCommon::initClass()
{
LLMemory::initClass();
- if (!sAprInitialized)
- {
- ll_init_apr();
- sAprInitialized = TRUE;
- }
LLTimer::initClass();
LLThreadSafeRefCount::initThreadSafeRefCount();
// LLWorkerThread::initClass();
@@ -55,10 +47,5 @@ void LLCommon::cleanupClass()
// LLWorkerThread::cleanupClass();
LLThreadSafeRefCount::cleanupThreadSafeRefCount();
LLTimer::cleanupClass();
- if (sAprInitialized)
- {
- ll_cleanup_apr();
- sAprInitialized = FALSE;
- }
LLMemory::cleanupClass();
}
diff --git a/indra/llcommon/llcommon.h b/indra/llcommon/llcommon.h
index ca9cad5d05..171590f3d8 100644
--- a/indra/llcommon/llcommon.h
+++ b/indra/llcommon/llcommon.h
@@ -35,8 +35,6 @@ class LL_COMMON_API LLCommon
public:
static void initClass();
static void cleanupClass();
-private:
- static BOOL sAprInitialized;
};
#endif
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index bb64152407..bda9d7c177 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -379,7 +379,7 @@ namespace
{
/* This pattern, of returning a reference to a static function
variable, is to ensure that this global is constructed before
- it is used, no matter what the global initializeation sequence
+ it is used, no matter what the global initialization sequence
is.
See C++ FAQ Lite, sections 10.12 through 10.14
*/
@@ -866,6 +866,9 @@ You get:
*/
+extern apr_thread_mutex_t* gLogMutexp;
+extern apr_thread_mutex_t* gCallStacksLogMutexp;
+
namespace {
bool checkLevelMap(const LevelMap& map, const std::string& key,
LLError::ELevel& level)
diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h
index 4a42241c4f..369f2a7a97 100644
--- a/indra/llcommon/llerror.h
+++ b/indra/llcommon/llerror.h
@@ -39,7 +39,7 @@
Information for most users:
- Code can log messages with constuctions like this:
+ Code can log messages with constructions like this:
LL_INFOS("StringTag") << "request to fizzbip agent " << agent_id
<< " denied due to timeout" << LL_ENDL;
@@ -47,9 +47,9 @@
Messages can be logged to one of four increasing levels of concern,
using one of four "streams":
- LL_DEBUGS("StringTag") - debug messages that are normally supressed
- LL_INFOS("StringTag") - informational messages that are normall shown
- LL_WARNS("StringTag") - warning messages that singal a problem
+ LL_DEBUGS("StringTag") - debug messages that are normally suppressed
+ LL_INFOS("StringTag") - informational messages that are normal shown
+ LL_WARNS("StringTag") - warning messages that signal a problem
LL_ERRS("StringTag") - error messages that are major, unrecoverable failures
The later (LL_ERRS("StringTag")) automatically crashes the process after the message
@@ -90,7 +90,7 @@
WARN: LLFoo::doSomething: called with a big value for i: 283
- Which messages are logged and which are supressed can be controled at run
+ Which messages are logged and which are suppressed can be controlled at run
time from the live file logcontrol.xml based on function, class and/or
source file. See etc/logcontrol-dev.xml for details.
@@ -106,7 +106,7 @@ namespace LLError
enum ELevel
{
LEVEL_ALL = 0,
- // used to indicate that all messagess should be logged
+ // used to indicate that all messages should be logged
LEVEL_DEBUG = 0,
LEVEL_INFO = 1,
@@ -220,7 +220,7 @@ namespace LLError
// See top of file for example of how to use this
typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
- // Outside a class declartion, or in class without LOG_CLASS(), this
+ // Outside a class declaration, or in class without LOG_CLASS(), this
// typedef causes the messages to not be associated with any class.
@@ -296,5 +296,4 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
Such computation is done iff the message will be logged.
*/
-
#endif // LL_LLERROR_H
diff --git a/indra/llcommon/lleventtimer.cpp b/indra/llcommon/lleventtimer.cpp
index 7743826c60..0d96e03da4 100644
--- a/indra/llcommon/lleventtimer.cpp
+++ b/indra/llcommon/lleventtimer.cpp
@@ -58,19 +58,15 @@ LLEventTimer::~LLEventTimer()
void LLEventTimer::updateClass()
{
std::list<LLEventTimer*> completed_timers;
-
+ for (instance_iter iter = beginInstances(); iter != endInstances(); )
{
- LLInstanceTrackerScopedGuard guard;
- for (instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); )
- {
- LLEventTimer& timer = *iter++;
- F32 et = timer.mEventTimer.getElapsedTimeF32();
- if (timer.mEventTimer.getStarted() && et > timer.mPeriod) {
- timer.mEventTimer.reset();
- if ( timer.tick() )
- {
- completed_timers.push_back( &timer );
- }
+ LLEventTimer& timer = *iter++;
+ F32 et = timer.mEventTimer.getElapsedTimeF32();
+ if (timer.mEventTimer.getStarted() && et > timer.mPeriod) {
+ timer.mEventTimer.reset();
+ if ( timer.tick() )
+ {
+ completed_timers.push_back( &timer );
}
}
}
diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp
index bd594b06cf..ebb5961c91 100644
--- a/indra/llcommon/llfasttimer_class.cpp
+++ b/indra/llcommon/llfasttimer_class.cpp
@@ -219,15 +219,20 @@ LLFastTimer::DeclareTimer::DeclareTimer(const std::string& name)
// static
void LLFastTimer::DeclareTimer::updateCachedPointers()
{
- DeclareTimer::LLInstanceTrackerScopedGuard guard;
// propagate frame state pointers to timer declarations
- for (DeclareTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
// update cached pointer
it->mFrameState = &it->mTimer.getFrameState();
}
+
+ // also update frame states of timers on stack
+ LLFastTimer* cur_timerp = LLFastTimer::sCurTimerData.mCurTimer;
+ while(cur_timerp->mLastTimerData.mCurTimer != cur_timerp)
+ {
+ cur_timerp->mFrameState = &cur_timerp->mFrameState->mTimer->getFrameState();
+ cur_timerp = cur_timerp->mLastTimerData.mCurTimer;
+ }
}
//static
@@ -388,10 +393,7 @@ void LLFastTimer::NamedTimer::buildHierarchy()
// set up initial tree
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
if (&timer == NamedTimerFactory::instance().getRootTimer()) continue;
@@ -519,10 +521,7 @@ void LLFastTimer::NamedTimer::resetFrame()
LLSD sd;
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (NamedTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
FrameState& info = timer.getFrameState();
@@ -559,7 +558,7 @@ void LLFastTimer::NamedTimer::resetFrame()
llassert_always(timerp->mFrameStateIndex < (S32)getFrameStateList().size());
}
- // sort timers by dfs traversal order to improve cache coherency
+ // sort timers by DFS traversal order to improve cache coherency
std::sort(getFrameStateList().begin(), getFrameStateList().end(), SortTimersDFS());
// update pointers into framestatelist now that we've sorted it
@@ -567,10 +566,7 @@ void LLFastTimer::NamedTimer::resetFrame()
// reset for next frame
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (NamedTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
@@ -614,10 +610,7 @@ void LLFastTimer::NamedTimer::reset()
// reset all history
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (NamedTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
if (&timer != NamedTimerFactory::instance().getRootTimer())
@@ -865,7 +858,7 @@ std::string LLFastTimer::sClockType = "rdtsc";
#else
//LL_COMMON_API U64 get_clock_count(); // in lltimer.cpp
-// These use QueryPerformanceCounter, which is arguably fine and also works on amd architectures.
+// These use QueryPerformanceCounter, which is arguably fine and also works on AMD architectures.
U32 LLFastTimer::getCPUClockCount32()
{
return (U32)(get_clock_count()>>8);
diff --git a/indra/llcommon/llfixedbuffer.cpp b/indra/llcommon/llfixedbuffer.cpp
index d394f179fb..4b5cdbe288 100644
--- a/indra/llcommon/llfixedbuffer.cpp
+++ b/indra/llcommon/llfixedbuffer.cpp
@@ -30,8 +30,7 @@
LLFixedBuffer::LLFixedBuffer(const U32 max_lines)
: LLLineBuffer(),
- mMaxLines(max_lines),
- mMutex(NULL)
+ mMaxLines(max_lines)
{
mTimer.reset();
}
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
index c2cfb7286e..f6d0f5bce8 100644
--- a/indra/llcommon/llfoldertype.cpp
+++ b/indra/llcommon/llfoldertype.cpp
@@ -93,6 +93,8 @@ LLFolderDictionary::LLFolderDictionary()
addEntry(LLFolderType::FT_MESH, new FolderEntry("mesh", TRUE));
addEntry(LLFolderType::FT_INBOX, new FolderEntry("inbox", TRUE));
+ addEntry(LLFolderType::FT_OUTBOX, new FolderEntry("outbox", TRUE));
+ addEntry(LLFolderType::FT_BASIC_ROOT, new FolderEntry("basic_rt", TRUE));
addEntry(LLFolderType::FT_NONE, new FolderEntry("-1", FALSE));
};
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h
index cb32cb075b..a0c847914f 100644
--- a/indra/llcommon/llfoldertype.h
+++ b/indra/llcommon/llfoldertype.h
@@ -83,8 +83,11 @@ public:
FT_MESH = 49,
FT_INBOX = 50,
+ FT_OUTBOX = 51,
- FT_COUNT = 51,
+ FT_BASIC_ROOT = 52,
+
+ FT_COUNT,
FT_NONE = -1
};
diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp
index f576204511..5dc3ea5d7b 100644
--- a/indra/llcommon/llinstancetracker.cpp
+++ b/indra/llcommon/llinstancetracker.cpp
@@ -35,14 +35,15 @@
//static
void * & LLInstanceTrackerBase::getInstances(std::type_info const & info)
{
- static std::map<std::string, void *> instances;
+ typedef std::map<std::string, void *> InstancesMap;
+ static InstancesMap instances;
- std::string k = info.name();
- if(instances.find(k) == instances.end())
- {
- instances[k] = NULL;
- }
-
- return instances[k];
+ // 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 b971b2f914..5a3990a8df 100644
--- a/indra/llcommon/llinstancetracker.h
+++ b/indra/llcommon/llinstancetracker.h
@@ -29,6 +29,7 @@
#define LL_LLINSTANCETRACKER_H
#include <map>
+#include <typeinfo>
#include "string_table.h"
#include <boost/utility.hpp>
@@ -37,10 +38,40 @@
#include <boost/iterator/transform_iterator.hpp>
#include <boost/iterator/indirect_iterator.hpp>
+/**
+ * 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<typename STATICDATA, class TRACKED>
+ static STATICDATA& getStatic()
+ {
+ void *& instances = getInstances(typeid(TRACKED));
+ if (! instances)
+ {
+ instances = new STATICDATA;
+ }
+ return *static_cast<STATICDATA*>(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,15 +81,89 @@ class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable
template<typename T, typename KEY = T*>
class LLInstanceTracker : public LLInstanceTrackerBase
{
- typedef typename std::map<KEY, T*> InstanceMap;
typedef LLInstanceTracker<T, KEY> MyT;
- typedef boost::function<const KEY&(typename InstanceMap::value_type&)> KeyGetter;
- typedef boost::function<T*(typename InstanceMap::value_type&)> InstancePtrGetter;
+ typedef typename std::map<KEY, T*> InstanceMap;
+ struct StaticData: public StaticBase
+ {
+ InstanceMap sMap;
+ };
+ static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT>(); }
+ static InstanceMap& getMap_() { return getStatic().sMap; }
+
public:
- /// Dereferencing key_iter gives you a const KEY&
- typedef boost::transform_iterator<KeyGetter, typename InstanceMap::iterator> key_iter;
- /// Dereferencing instance_iter gives you a T&
- typedef boost::indirect_iterator< boost::transform_iterator<InstancePtrGetter, typename InstanceMap::iterator> > instance_iter;
+ class instance_iter : public boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag>
+ {
+ public:
+ typedef boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag> super_t;
+
+ instance_iter(const typename InstanceMap::iterator& it)
+ : mIterator(it)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ ~instance_iter()
+ {
+ --getStatic().sIterationNestDepth;
+ }
+
+
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment() { mIterator++; }
+ bool equal(instance_iter const& other) const
+ {
+ return mIterator == other.mIterator;
+ }
+
+ T& dereference() const
+ {
+ return *(mIterator->second);
+ }
+
+ typename InstanceMap::iterator mIterator;
+ };
+
+ class key_iter : public boost::iterator_facade<key_iter, KEY, boost::forward_traversal_tag>
+ {
+ public:
+ typedef boost::iterator_facade<key_iter, KEY, boost::forward_traversal_tag> super_t;
+
+ key_iter(typename InstanceMap::iterator it)
+ : mIterator(it)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ key_iter(const key_iter& other)
+ : mIterator(other.mIterator)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ ~key_iter()
+ {
+ --getStatic().sIterationNestDepth;
+ }
+
+
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment() { mIterator++; }
+ bool equal(key_iter const& other) const
+ {
+ return mIterator == other.mIterator;
+ }
+
+ KEY& dereference() const
+ {
+ return const_cast<KEY&>(mIterator->first);
+ }
+
+ typename InstanceMap::iterator mIterator;
+ };
static T* getInstance(const KEY& k)
{
@@ -66,57 +171,51 @@ public:
return (found == getMap_().end()) ? NULL : found->second;
}
- static key_iter beginKeys()
- {
- return boost::make_transform_iterator(getMap_().begin(),
- boost::bind(&InstanceMap::value_type::first, _1));
+ static instance_iter beginInstances()
+ {
+ return instance_iter(getMap_().begin());
}
- static key_iter endKeys()
+
+ static instance_iter endInstances()
{
- return boost::make_transform_iterator(getMap_().end(),
- boost::bind(&InstanceMap::value_type::first, _1));
+ return instance_iter(getMap_().end());
}
- static instance_iter beginInstances()
+
+ static S32 instanceCount() { return getMap_().size(); }
+
+ static key_iter beginKeys()
{
- return instance_iter(boost::make_transform_iterator(getMap_().begin(),
- boost::bind(&InstanceMap::value_type::second, _1)));
+ return key_iter(getMap_().begin());
}
- static instance_iter endInstances()
+ static key_iter endKeys()
{
- return instance_iter(boost::make_transform_iterator(getMap_().end(),
- boost::bind(&InstanceMap::value_type::second, _1)));
+ return key_iter(getMap_().end());
}
- static S32 instanceCount() { return getMap_().size(); }
+
protected:
LLInstanceTracker(KEY key) { add_(key); }
- virtual ~LLInstanceTracker() { remove_(); }
+ virtual ~LLInstanceTracker()
+ {
+ // it's unsafe to delete instances of this type while all instances are being iterated over.
+ llassert_always(getStatic().sIterationNestDepth == 0);
+ remove_();
+ }
virtual void setKey(KEY key) { remove_(); add_(key); }
- virtual const KEY& getKey() const { return mKey; }
+ virtual const KEY& getKey() const { return mInstanceKey; }
private:
void add_(KEY key)
{
- mKey = key;
+ mInstanceKey = key;
getMap_()[key] = static_cast<T*>(this);
}
void remove_()
{
- getMap_().erase(mKey);
+ getMap_().erase(mInstanceKey);
}
- static InstanceMap& getMap_()
- {
- void * & instances = getInstances(typeid(MyT));
- if (! instances)
- {
- instances = new InstanceMap;
- }
- return * static_cast<InstanceMap*>(instances);
- }
-
private:
-
- KEY mKey;
+ KEY mInstanceKey;
};
/// explicit specialization for default case where KEY is T*
@@ -124,73 +223,78 @@ private:
template<typename T>
class LLInstanceTracker<T, T*> : public LLInstanceTrackerBase
{
- typedef typename std::set<T*> InstanceSet;
typedef LLInstanceTracker<T, T*> MyT;
+ typedef typename std::set<T*> InstanceSet;
+ struct StaticData: public StaticBase
+ {
+ InstanceSet sSet;
+ };
+ static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT>(); }
+ static InstanceSet& getSet_() { return getStatic().sSet; }
+
public:
- /// Dereferencing key_iter gives you a T* (since T* is the key)
- typedef typename InstanceSet::iterator key_iter;
- /// Dereferencing instance_iter gives you a T&
- typedef boost::indirect_iterator<key_iter> instance_iter;
/// for completeness of analogy with the generic implementation
static T* getInstance(T* k) { return k; }
static S32 instanceCount() { return getSet_().size(); }
- // Instantiate this to get access to iterators for this type. It's a 'guard' in the sense
- // that it treats deletes of this type as errors as long as there is an instance of
- // this class alive in scope somewhere (i.e. deleting while iterating is bad).
- class LLInstanceTrackerScopedGuard
+ class instance_iter : public boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag>
{
public:
- LLInstanceTrackerScopedGuard()
+ instance_iter(const typename InstanceSet::iterator& it)
+ : mIterator(it)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ instance_iter(const instance_iter& other)
+ : mIterator(other.mIterator)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ ~instance_iter()
{
- ++sIterationNestDepth;
+ --getStatic().sIterationNestDepth;
}
- ~LLInstanceTrackerScopedGuard()
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment() { mIterator++; }
+ bool equal(instance_iter const& other) const
{
- --sIterationNestDepth;
+ return mIterator == other.mIterator;
}
- static instance_iter beginInstances() { return instance_iter(getSet_().begin()); }
- static instance_iter endInstances() { return instance_iter(getSet_().end()); }
- static key_iter beginKeys() { return getSet_().begin(); }
- static key_iter endKeys() { return getSet_().end(); }
+ T& dereference() const
+ {
+ return **mIterator;
+ }
+
+ typename InstanceSet::iterator mIterator;
};
+ static instance_iter beginInstances() { return instance_iter(getSet_().begin()); }
+ static instance_iter endInstances() { return instance_iter(getSet_().end()); }
+
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.
- //llassert(sIterationNestDepth == 0);
+ // 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<T*>(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<T*>(this));
}
LLInstanceTracker(const LLInstanceTracker& other)
{
- //llassert(sIterationNestDepth == 0);
getSet_().insert(static_cast<T*>(this));
}
-
- static InstanceSet& getSet_()
- {
- void * & instances = getInstances(typeid(MyT));
- if (! instances)
- {
- instances = new InstanceSet;
- }
- return * static_cast<InstanceSet *>(instances);
- }
-
- static S32 sIterationNestDepth;
};
-template <typename T> S32 LLInstanceTracker<T, T*>::sIterationNestDepth = 0;
-
#endif
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index 21d1c84d69..8c02ad8290 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 <windows.h>
+//# include <windows.h>
# include <psapi.h>
#elif defined(LL_DARWIN)
# include <sys/types.h>
@@ -43,10 +42,24 @@
# include <unistd.h>
#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,148 @@ 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 ;
+}
+
+//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
+S32 LLMemory::isMemoryPoolLow()
+{
+ static const U32 LOW_MEMEOY_POOL_THRESHOLD_KB = 64 * 1024 ; //64 MB for emergency use
+
+ if(!sEnableMemoryFailurePrevention)
+ {
+ return 0 ; //no memory failure prevention.
+ }
+
+ if(sAvailPhysicalMemInKB < (LOW_MEMEOY_POOL_THRESHOLD_KB >> 2)) //out of physical memory
+ {
+ return -1 ;
+ }
+
+ if(sAllocatedPageSizeInKB + (LOW_MEMEOY_POOL_THRESHOLD_KB >> 2) > sMaxHeapSizeInKB) //out of virtual address space.
+ {
+ return -1 ;
+ }
+
+ return (S32)(sAvailPhysicalMemInKB < LOW_MEMEOY_POOL_THRESHOLD_KB ||
+ sAllocatedPageSizeInKB + LOW_MEMEOY_POOL_THRESHOLD_KB > sMaxHeapSizeInKB) ;
+}
+
+//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 +392,7 @@ U64 LLMemory::getCurrentRSS()
U32 LLMemory::getWorkingSetSize()
{
- return 0 ;
+ return 0;
}
#endif
@@ -258,7 +413,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 +531,1661 @@ 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) :
+ mMutexp(NULL),
+ mReservedPoolSize(0),
+ mHashFactor(1),
+ mType(type)
+{
+ const U32 MAX_POOL_SIZE = 256 * 1024 * 1024 ; //256 MB
+
+ mMaxPoolSize = MAX_POOL_SIZE ;
+ if(type == STATIC_THREADED || type == VOLATILE_THREADED)
+ {
+ mMutexp = new LLMutex ;
+ }
+
+ 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 ;
+ }
+ }
+
+ chunk = addChunk(chunk_idx) ;
+ if(chunk)
+ {
+ p = chunk->allocate(size) ;
+ }
+ }
+
+ unlock() ;
+
+ 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() ;
+}
+
+void 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 ;
+ }
+}
+
+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]) ;
+ }
+
+ checkSize(preferred_size + overhead) ;
+ 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, 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 ;
+
+LLPrivateMemoryPoolManager::LLPrivateMemoryPoolManager(BOOL enabled)
+{
+ mPoolList.resize(LLPrivateMemoryPool::MAX_TYPES) ;
+
+ for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++)
+ {
+ mPoolList[i] = NULL ;
+ }
+
+ mPrivatePoolEnabled = enabled ;
+}
+
+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: " <<llendl ;
+
+ S32 k = 0 ;
+ for(mem_allocation_info_t::iterator iter = sMemAllocationTracker.begin() ; iter != sMemAllocationTracker.end() ; ++iter)
+ {
+ llinfos << k++ << ", " << 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])
+ {
+ delete mPoolList[i] ;
+ mPoolList[i] = NULL ;
+ }
+ }
+ mPoolList.clear() ;
+#endif
+}
+
+//static
+void LLPrivateMemoryPoolManager::initClass(BOOL enabled)
+{
+ llassert_always(!sInstance) ;
+
+ sInstance = new LLPrivateMemoryPoolManager(enabled) ;
+}
+
+//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) ;
+ }
+
+ 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
+ {
+ 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..db753f0d8b 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 S32 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,326 @@ 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) ;
+ ~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) ;
+ void 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<LLChunkHashElement> mChunkHashList ;
+};
+
+class LL_COMMON_API LLPrivateMemoryPoolManager
+{
+private:
+ LLPrivateMemoryPoolManager(BOOL enabled) ;
+ ~LLPrivateMemoryPoolManager() ;
+
+public:
+ static LLPrivateMemoryPoolManager* getInstance() ;
+ static void initClass(BOOL enabled) ;
+ static void destroyClass() ;
+
+ LLPrivateMemoryPool* newPool(S32 type) ;
+ void deletePool(LLPrivateMemoryPool* pool) ;
+
+private:
+ static LLPrivateMemoryPoolManager* sInstance ;
+ std::vector<LLPrivateMemoryPool*> mPoolList ;
+ BOOL mPrivatePoolEnabled;
+
+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<char*, std::string> 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/llscopedvolatileaprpool.h b/indra/llcommon/llscopedvolatileaprpool.h
new file mode 100644
index 0000000000..dbaf4edcad
--- /dev/null
+++ b/indra/llcommon/llscopedvolatileaprpool.h
@@ -0,0 +1,52 @@
+/**
+ * @file llscopedvolatileaprpool.h
+ * @brief Implementation of LLScopedVolatileAPRPool
+ *
+ * $LicenseInfo:firstyear=2010&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_LLSCOPEDVOLATILEAPRPOOL_H
+#define LL_LLSCOPEDVOLATILEAPRPOOL_H
+
+#include "llthread.h"
+
+/** Scoped volatile memory pool.
+ *
+ * As the LLVolatileAPRPool should never keep allocations very
+ * long, its most common use is for allocations with a lifetime
+ * equal to it's scope.
+ *
+ * This is a convenience class that makes just a little easier to type.
+ */
+class LL_COMMON_API LLScopedVolatileAPRPool
+{
+private:
+ LLVolatileAPRPool& mPool;
+ apr_pool_t* mScopedAPRpool; // The use of apr_pool_t is OK here.
+public:
+ LLScopedVolatileAPRPool() : mPool(LLThreadLocalData::tldata().mVolatileAPRPool), mScopedAPRpool(mPool.getVolatileAPRPool()) { }
+ ~LLScopedVolatileAPRPool() { mPool.clearVolatileAPRPool(); }
+ //! @attention Only use this to pass the underlaying pointer to a libapr-1 function that requires it.
+ operator apr_pool_t*() const { return mScopedAPRpool; } // The use of apr_pool_t is OK here.
+};
+
+#endif
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
index c5a7c6fc15..bf216d41bf 100644
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -354,6 +354,7 @@ static unsigned get_till_eol(std::istream& input, char *buf, unsigned bufsize)
return count;
}
+LLFastTimer::DeclareTimer FTM_SD_PARSE_READ_STREAM("LLSD Read Stream");
S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
{
XML_Status status;
@@ -373,10 +374,13 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
{
break;
}
- count = get_till_eol(input, (char *)buffer, BUFFER_SIZE);
- if (!count)
- {
- break;
+ { LLFastTimer _(FTM_SD_PARSE_READ_STREAM);
+
+ count = get_till_eol(input, (char *)buffer, BUFFER_SIZE);
+ if (!count)
+ {
+ break;
+ }
}
status = XML_ParseBuffer(mParser, count, false);
@@ -716,6 +720,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;
@@ -729,15 +734,19 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name)
case ELEMENT_REAL:
{
- 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/llsingleton.h b/indra/llcommon/llsingleton.h
index 7aee1bb85f..00757be277 100644
--- a/indra/llcommon/llsingleton.h
+++ b/indra/llcommon/llsingleton.h
@@ -100,12 +100,6 @@ private:
DELETED
} EInitState;
- static void deleteSingleton()
- {
- delete getData().mSingletonInstance;
- getData().mSingletonInstance = NULL;
- }
-
// stores pointer to singleton instance
// and tracks initialization state of singleton
struct SingletonInstanceData
@@ -120,7 +114,11 @@ private:
~SingletonInstanceData()
{
- deleteSingleton();
+ SingletonInstanceData& data = getData();
+ if (data.mInitState != DELETED)
+ {
+ deleteSingleton();
+ }
}
};
@@ -132,6 +130,14 @@ public:
data.mInitState = DELETED;
}
+ // Can be used to control when the singleton is deleted. Not normally needed.
+ static void deleteSingleton()
+ {
+ delete getData().mSingletonInstance;
+ getData().mSingletonInstance = NULL;
+ getData().mInitState = DELETED;
+ }
+
static SingletonInstanceData& getData()
{
// this is static to cache the lookup results
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 e8616a9be6..d781687175 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -1,6 +1,6 @@
/**
* @file llsys.cpp
- * @brief Impelementation of the basic system query functions.
+ * @brief Implementation of the basic system query functions.
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -24,6 +24,10 @@
* $/LicenseInfo$
*/
+#if LL_WINDOWS
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
+
#include "linden_common.h"
#include "llsys.h"
@@ -36,22 +40,45 @@
#endif
#include "llprocessor.h"
+#include "llerrorcontrol.h"
+#include "llevents.h"
+#include "lltimer.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+#include <boost/bind.hpp>
+#include <boost/circular_buffer.hpp>
+#include <boost/regex.hpp>
+#include <boost/foreach.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/range.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_float.hpp>
+
+using namespace llsd;
#if LL_WINDOWS
# define WIN32_LEAN_AND_MEAN
# include <winsock2.h>
# include <windows.h>
+# include <psapi.h> // GetPerformanceInfo() et al.
#elif LL_DARWIN
# include <errno.h>
# include <sys/sysctl.h>
# include <sys/utsname.h>
# include <stdint.h>
# include <Carbon/Carbon.h>
+# include <stdexcept>
+# include <mach/host_info.h>
+# include <mach/mach_host.h>
+# include <mach/task.h>
+# include <mach/task_info.h>
#elif LL_LINUX
# include <errno.h>
# include <sys/utsname.h>
# include <unistd.h>
# include <sys/sysinfo.h>
+# include <stdexcept>
const char MEMINFO_FILE[] = "/proc/meminfo";
#elif LL_SOLARIS
# include <stdio.h>
@@ -70,6 +97,15 @@ extern int errno;
static const S32 CPUINFO_BUFFER_SIZE = 16383;
LLCPUInfo gSysCPU;
+// Don't log memory info any more often than this. It also serves as our
+// framerate sample size.
+static const F32 MEM_INFO_THROTTLE = 20;
+// Sliding window of samples. We intentionally limit the length of time we
+// remember "the slowest" framerate because framerate is very slow at login.
+// If we only triggered FrameWatcher logging when the session framerate
+// dropped below the login framerate, we'd have very little additional data.
+static const F32 MEM_INFO_WINDOW = 10*60;
+
#if LL_WINDOWS
#ifndef DLLVERSIONINFO
typedef struct _DllVersionInfo
@@ -613,8 +649,78 @@ void LLCPUInfo::stream(std::ostream& s) const
s << "->mCPUString: " << mCPUString << std::endl;
}
+// Helper class for LLMemoryInfo: accumulate stats in the form we store for
+// LLMemoryInfo::getStatsMap().
+class Stats
+{
+public:
+ Stats():
+ mStats(LLSD::emptyMap())
+ {}
+
+ // Store every integer type as LLSD::Integer.
+ template <class T>
+ void add(const LLSD::String& name, const T& value,
+ typename boost::enable_if<boost::is_integral<T> >::type* = 0)
+ {
+ mStats[name] = LLSD::Integer(value);
+ }
+
+ // Store every floating-point type as LLSD::Real.
+ template <class T>
+ void add(const LLSD::String& name, const T& value,
+ typename boost::enable_if<boost::is_float<T> >::type* = 0)
+ {
+ mStats[name] = LLSD::Real(value);
+ }
+
+ // Hope that LLSD::Date values are sufficiently unambiguous.
+ void add(const LLSD::String& name, const LLSD::Date& value)
+ {
+ mStats[name] = value;
+ }
+
+ LLSD get() const { return mStats; }
+
+private:
+ LLSD mStats;
+};
+
+// Wrap boost::regex_match() with a function that doesn't throw.
+template <typename S, typename M, typename R>
+static bool regex_match_no_exc(const S& string, M& match, const R& regex)
+{
+ try
+ {
+ return boost::regex_match(string, match, regex);
+ }
+ catch (const std::runtime_error& e)
+ {
+ LL_WARNS("LLMemoryInfo") << "error matching with '" << regex.str() << "': "
+ << e.what() << ":\n'" << string << "'" << LL_ENDL;
+ return false;
+ }
+}
+
+// Wrap boost::regex_search() with a function that doesn't throw.
+template <typename S, typename M, typename R>
+static bool regex_search_no_exc(const S& string, M& match, const R& regex)
+{
+ try
+ {
+ return boost::regex_search(string, match, regex);
+ }
+ catch (const std::runtime_error& e)
+ {
+ LL_WARNS("LLMemoryInfo") << "error searching with '" << regex.str() << "': "
+ << e.what() << ":\n'" << string << "'" << LL_ENDL;
+ return false;
+ }
+}
+
LLMemoryInfo::LLMemoryInfo()
{
+ refresh();
}
#if LL_WINDOWS
@@ -638,11 +744,7 @@ static U32 LLMemoryAdjustKBResult(U32 inKB)
U32 LLMemoryInfo::getPhysicalMemoryKB() const
{
#if LL_WINDOWS
- MEMORYSTATUSEX state;
- state.dwLength = sizeof(state);
- GlobalMemoryStatusEx(&state);
-
- return LLMemoryAdjustKBResult((U32)(state.ullTotalPhys >> 10));
+ return LLMemoryAdjustKBResult(mStatsMap["Total Physical KB"].asInteger());
#elif LL_DARWIN
// This might work on Linux as well. Someone check...
@@ -690,12 +792,82 @@ U32 LLMemoryInfo::getPhysicalMemoryClamped() const
void LLMemoryInfo::getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_virtual_mem_kb)
{
#if LL_WINDOWS
- MEMORYSTATUSEX state;
- state.dwLength = sizeof(state);
- GlobalMemoryStatusEx(&state);
+ // Sigh, this shouldn't be a static method, then we wouldn't have to
+ // reload this data separately from refresh()
+ LLSD statsMap(loadStatsMap());
+
+ avail_physical_mem_kb = statsMap["Avail Physical KB"].asInteger();
+ avail_virtual_mem_kb = statsMap["Avail Virtual KB"].asInteger();
- avail_physical_mem_kb = (U32)(state.ullAvailPhys/1024) ;
- avail_virtual_mem_kb = (U32)(state.ullAvailVirtual/1024) ;
+#elif LL_DARWIN
+ // mStatsMap is derived from vm_stat, look for (e.g.) "kb free":
+ // $ vm_stat
+ // Mach Virtual Memory Statistics: (page size of 4096 bytes)
+ // Pages free: 462078.
+ // Pages active: 142010.
+ // Pages inactive: 220007.
+ // Pages wired down: 159552.
+ // "Translation faults": 220825184.
+ // Pages copy-on-write: 2104153.
+ // Pages zero filled: 167034876.
+ // Pages reactivated: 65153.
+ // Pageins: 2097212.
+ // Pageouts: 41759.
+ // Object cache: 841598 hits of 7629869 lookups (11% hit rate)
+ avail_physical_mem_kb = -1 ;
+ avail_virtual_mem_kb = -1 ;
+
+#elif LL_LINUX
+ // mStatsMap is derived from MEMINFO_FILE:
+ // $ cat /proc/meminfo
+ // MemTotal: 4108424 kB
+ // MemFree: 1244064 kB
+ // Buffers: 85164 kB
+ // Cached: 1990264 kB
+ // SwapCached: 0 kB
+ // Active: 1176648 kB
+ // Inactive: 1427532 kB
+ // Active(anon): 529152 kB
+ // Inactive(anon): 15924 kB
+ // Active(file): 647496 kB
+ // Inactive(file): 1411608 kB
+ // Unevictable: 16 kB
+ // Mlocked: 16 kB
+ // HighTotal: 3266316 kB
+ // HighFree: 721308 kB
+ // LowTotal: 842108 kB
+ // LowFree: 522756 kB
+ // SwapTotal: 6384632 kB
+ // SwapFree: 6384632 kB
+ // Dirty: 28 kB
+ // Writeback: 0 kB
+ // AnonPages: 528820 kB
+ // Mapped: 89472 kB
+ // Shmem: 16324 kB
+ // Slab: 159624 kB
+ // SReclaimable: 145168 kB
+ // SUnreclaim: 14456 kB
+ // KernelStack: 2560 kB
+ // PageTables: 5560 kB
+ // NFS_Unstable: 0 kB
+ // Bounce: 0 kB
+ // WritebackTmp: 0 kB
+ // CommitLimit: 8438844 kB
+ // Committed_AS: 1271596 kB
+ // VmallocTotal: 122880 kB
+ // VmallocUsed: 65252 kB
+ // VmallocChunk: 52356 kB
+ // HardwareCorrupted: 0 kB
+ // HugePages_Total: 0
+ // HugePages_Free: 0
+ // HugePages_Rsvd: 0
+ // HugePages_Surp: 0
+ // Hugepagesize: 2048 kB
+ // DirectMap4k: 434168 kB
+ // DirectMap2M: 477184 kB
+ // (could also run 'free', but easier to read a file than run a program)
+ avail_physical_mem_kb = -1 ;
+ avail_virtual_mem_kb = -1 ;
#else
//do not know how to collect available memory info for other systems.
@@ -708,56 +880,283 @@ void LLMemoryInfo::getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_v
void LLMemoryInfo::stream(std::ostream& s) const
{
+ // We want these memory stats to be easy to grep from the log, along with
+ // the timestamp. So preface each line with the timestamp and a
+ // distinctive marker. Without that, we'd have to search the log for the
+ // introducer line, then read subsequent lines, etc...
+ std::string pfx(LLError::utcTime() + " <mem> ");
+
+ // Max key length
+ size_t key_width(0);
+ BOOST_FOREACH(const MapEntry& pair, inMap(mStatsMap))
+ {
+ size_t len(pair.first.length());
+ if (len > key_width)
+ {
+ key_width = len;
+ }
+ }
+
+ // Now stream stats
+ BOOST_FOREACH(const MapEntry& pair, inMap(mStatsMap))
+ {
+ s << pfx << std::setw(key_width+1) << (pair.first + ':') << ' ';
+ LLSD value(pair.second);
+ if (value.isInteger())
+ s << std::setw(12) << value.asInteger();
+ else if (value.isReal())
+ s << std::fixed << std::setprecision(1) << value.asReal();
+ else if (value.isDate())
+ value.asDate().toStream(s);
+ else
+ s << value; // just use default LLSD formatting
+ s << std::endl;
+ }
+}
+
+LLSD LLMemoryInfo::getStatsMap() const
+{
+ return mStatsMap;
+}
+
+LLMemoryInfo& LLMemoryInfo::refresh()
+{
+ mStatsMap = loadStatsMap();
+
+ LL_DEBUGS("LLMemoryInfo") << "Populated mStatsMap:\n";
+ LLSDSerialize::toPrettyXML(mStatsMap, LL_CONT);
+ LL_ENDL;
+
+ return *this;
+}
+
+LLSD LLMemoryInfo::loadStatsMap()
+{
+ // This implementation is derived from stream() code (as of 2011-06-29).
+ Stats stats;
+
+ // associate timestamp for analysis over time
+ stats.add("timestamp", LLDate::now());
+
#if LL_WINDOWS
MEMORYSTATUSEX state;
state.dwLength = sizeof(state);
GlobalMemoryStatusEx(&state);
- s << "Percent Memory use: " << (U32)state.dwMemoryLoad << '%' << std::endl;
- s << "Total Physical KB: " << (U32)(state.ullTotalPhys/1024) << std::endl;
- s << "Avail Physical KB: " << (U32)(state.ullAvailPhys/1024) << std::endl;
- s << "Total page KB: " << (U32)(state.ullTotalPageFile/1024) << std::endl;
- s << "Avail page KB: " << (U32)(state.ullAvailPageFile/1024) << std::endl;
- s << "Total Virtual KB: " << (U32)(state.ullTotalVirtual/1024) << std::endl;
- s << "Avail Virtual KB: " << (U32)(state.ullAvailVirtual/1024) << std::endl;
+ stats.add("Percent Memory use", state.dwMemoryLoad);
+ stats.add("Total Physical KB", state.ullTotalPhys/1024);
+ stats.add("Avail Physical KB", state.ullAvailPhys/1024);
+ stats.add("Total page KB", state.ullTotalPageFile/1024);
+ stats.add("Avail page KB", state.ullAvailPageFile/1024);
+ stats.add("Total Virtual KB", state.ullTotalVirtual/1024);
+ stats.add("Avail Virtual KB", state.ullAvailVirtual/1024);
+
+ PERFORMANCE_INFORMATION perf;
+ perf.cb = sizeof(perf);
+ GetPerformanceInfo(&perf, sizeof(perf));
+
+ SIZE_T pagekb(perf.PageSize/1024);
+ stats.add("CommitTotal KB", perf.CommitTotal * pagekb);
+ stats.add("CommitLimit KB", perf.CommitLimit * pagekb);
+ stats.add("CommitPeak KB", perf.CommitPeak * pagekb);
+ stats.add("PhysicalTotal KB", perf.PhysicalTotal * pagekb);
+ stats.add("PhysicalAvail KB", perf.PhysicalAvailable * pagekb);
+ stats.add("SystemCache KB", perf.SystemCache * pagekb);
+ stats.add("KernelTotal KB", perf.KernelTotal * pagekb);
+ stats.add("KernelPaged KB", perf.KernelPaged * pagekb);
+ stats.add("KernelNonpaged KB", perf.KernelNonpaged * pagekb);
+ stats.add("PageSize KB", pagekb);
+ stats.add("HandleCount", perf.HandleCount);
+ stats.add("ProcessCount", perf.ProcessCount);
+ stats.add("ThreadCount", perf.ThreadCount);
+
+ PROCESS_MEMORY_COUNTERS_EX pmem;
+ pmem.cb = sizeof(pmem);
+ // GetProcessMemoryInfo() is documented to accept either
+ // PROCESS_MEMORY_COUNTERS* or PROCESS_MEMORY_COUNTERS_EX*, presumably
+ // using the redundant size info to distinguish. But its prototype
+ // specifically accepts PROCESS_MEMORY_COUNTERS*, and since this is a
+ // classic-C API, PROCESS_MEMORY_COUNTERS_EX isn't a subclass. Cast the
+ // pointer.
+ GetProcessMemoryInfo(GetCurrentProcess(), PPROCESS_MEMORY_COUNTERS(&pmem), sizeof(pmem));
+
+ stats.add("Page Fault Count", pmem.PageFaultCount);
+ stats.add("PeakWorkingSetSize KB", pmem.PeakWorkingSetSize/1024);
+ stats.add("WorkingSetSize KB", pmem.WorkingSetSize/1024);
+ stats.add("QutaPeakPagedPoolUsage KB", pmem.QuotaPeakPagedPoolUsage/1024);
+ stats.add("QuotaPagedPoolUsage KB", pmem.QuotaPagedPoolUsage/1024);
+ stats.add("QuotaPeakNonPagedPoolUsage KB", pmem.QuotaPeakNonPagedPoolUsage/1024);
+ stats.add("QuotaNonPagedPoolUsage KB", pmem.QuotaNonPagedPoolUsage/1024);
+ stats.add("PagefileUsage KB", pmem.PagefileUsage/1024);
+ stats.add("PeakPagefileUsage KB", pmem.PeakPagefileUsage/1024);
+ stats.add("PrivateUsage KB", pmem.PrivateUsage/1024);
+
#elif LL_DARWIN
- uint64_t phys = 0;
- size_t len = sizeof(phys);
+ const vm_size_t pagekb(vm_page_size / 1024);
+
+ //
+ // Collect the vm_stat's
+ //
- if(sysctlbyname("hw.memsize", &phys, &len, NULL, 0) == 0)
{
- s << "Total Physical KB: " << phys/1024 << std::endl;
- }
- else
+ 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)
{
- s << "Unable to collect memory information";
+ 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
+ //
+
+ {
+ 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);
+ }
+ }
+
#elif LL_SOLARIS
- U64 phys = 0;
+ U64 phys = 0;
- phys = (U64)(sysconf(_SC_PHYS_PAGES)) * (U64)(sysconf(_SC_PAGESIZE)/1024);
+ phys = (U64)(sysconf(_SC_PHYS_PAGES)) * (U64)(sysconf(_SC_PAGESIZE)/1024);
- s << "Total Physical KB: " << phys << std::endl;
-#else
- // *NOTE: This works on linux. What will it do on other systems?
- LLFILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb");
- if(meminfo)
+ stats.add("Total Physical KB", phys);
+
+#elif LL_LINUX
+ std::ifstream meminfo(MEMINFO_FILE);
+ if (meminfo.is_open())
{
- char line[MAX_STRING]; /* Flawfinder: ignore */
- memset(line, 0, MAX_STRING);
- while(fgets(line, MAX_STRING, meminfo))
+ // MemTotal: 4108424 kB
+ // MemFree: 1244064 kB
+ // Buffers: 85164 kB
+ // Cached: 1990264 kB
+ // SwapCached: 0 kB
+ // Active: 1176648 kB
+ // Inactive: 1427532 kB
+ // ...
+ // VmallocTotal: 122880 kB
+ // VmallocUsed: 65252 kB
+ // VmallocChunk: 52356 kB
+ // HardwareCorrupted: 0 kB
+ // HugePages_Total: 0
+ // HugePages_Free: 0
+ // HugePages_Rsvd: 0
+ // HugePages_Surp: 0
+ // Hugepagesize: 2048 kB
+ // DirectMap4k: 434168 kB
+ // DirectMap2M: 477184 kB
+
+ // Intentionally don't pass the boost::no_except flag. This
+ // boost::regex object is constructed with a string literal, so it
+ // should be valid every time. If it becomes invalid, we WANT an
+ // exception, hopefully even before the dev checks in.
+ boost::regex stat_rx("(.+): +([0-9]+)( kB)?");
+ boost::smatch matched;
+
+ std::string line;
+ while (std::getline(meminfo, line))
{
- line[strlen(line)-1] = ' '; /*Flawfinder: ignore*/
- s << line;
+ LL_DEBUGS("LLMemoryInfo") << line << LL_ENDL;
+ if (regex_match_no_exc(line, matched, stat_rx))
+ {
+ // e.g. "MemTotal: 4108424 kB"
+ LLSD::String key(matched[1].first, matched[1].second);
+ LLSD::String value_str(matched[2].first, matched[2].second);
+ LLSD::Integer value(0);
+ try
+ {
+ value = boost::lexical_cast<LLSD::Integer>(value_str);
+ }
+ catch (const boost::bad_lexical_cast&)
+ {
+ LL_WARNS("LLMemoryInfo") << "couldn't parse '" << value_str
+ << "' in " << MEMINFO_FILE << " line: "
+ << line << LL_ENDL;
+ continue;
+ }
+ // Store this statistic.
+ stats.add(key, value);
+ }
+ else
+ {
+ LL_WARNS("LLMemoryInfo") << "unrecognized " << MEMINFO_FILE << " line: "
+ << line << LL_ENDL;
+ }
}
- fclose(meminfo);
}
else
{
- s << "Unable to collect memory information";
+ LL_WARNS("LLMemoryInfo") << "Unable to collect memory information" << LL_ENDL;
}
+
+#else
+ LL_WARNS("LLMemoryInfo") << "Unknown system; unable to collect memory information" << LL_ENDL;
+
#endif
+
+ return stats.get();
}
std::ostream& operator<<(std::ostream& s, const LLOSInfo& info)
@@ -778,6 +1177,143 @@ std::ostream& operator<<(std::ostream& s, const LLMemoryInfo& info)
return s;
}
+class FrameWatcher
+{
+public:
+ FrameWatcher():
+ // Hooking onto the "mainloop" event pump gets us one call per frame.
+ mConnection(LLEventPumps::instance()
+ .obtain("mainloop")
+ .listen("FrameWatcher", boost::bind(&FrameWatcher::tick, this, _1))),
+ // Initializing mSampleStart to an invalid timestamp alerts us to skip
+ // trying to compute framerate on the first call.
+ mSampleStart(-1),
+ // Initializing mSampleEnd to 0 ensures that we treat the first call
+ // as the completion of a sample window.
+ mSampleEnd(0),
+ mFrames(0),
+ // Both MEM_INFO_WINDOW and MEM_INFO_THROTTLE are in seconds. We need
+ // the number of integer MEM_INFO_THROTTLE sample slots that will fit
+ // in MEM_INFO_WINDOW. Round up.
+ mSamples(int((MEM_INFO_WINDOW / MEM_INFO_THROTTLE) + 0.7)),
+ // Initializing to F32_MAX means that the first real frame will become
+ // the slowest ever, which sounds like a good idea.
+ mSlowest(F32_MAX)
+ {}
+
+ bool tick(const LLSD&)
+ {
+ F32 timestamp(mTimer.getElapsedTimeF32());
+
+ // Count this frame in the interval just completed.
+ ++mFrames;
+
+ // Have we finished a sample window yet?
+ if (timestamp < mSampleEnd)
+ {
+ // no, just keep waiting
+ return false;
+ }
+
+ // Set up for next sample window. Capture values for previous frame in
+ // local variables and reset data members.
+ U32 frames(mFrames);
+ F32 sampleStart(mSampleStart);
+ // No frames yet in next window
+ mFrames = 0;
+ // which starts right now
+ mSampleStart = timestamp;
+ // and ends MEM_INFO_THROTTLE seconds in the future
+ mSampleEnd = mSampleStart + MEM_INFO_THROTTLE;
+
+ // On the very first call, that's all we can do, no framerate
+ // computation is possible.
+ if (sampleStart < 0)
+ {
+ return false;
+ }
+
+ // How long did this actually take? As framerate slows, the duration
+ // of the frame we just finished could push us WELL beyond our desired
+ // sample window size.
+ F32 elapsed(timestamp - sampleStart);
+ F32 framerate(frames/elapsed);
+
+ // Remember previous slowest framerate because we're just about to
+ // update it.
+ F32 slowest(mSlowest);
+ // Remember previous number of samples.
+ boost::circular_buffer<F32>::size_type prevSize(mSamples.size());
+
+ // Capture new framerate in our samples buffer. Once the buffer is
+ // full (after MEM_INFO_WINDOW seconds), this will displace the oldest
+ // sample. ("So they all rolled over, and one fell out...")
+ mSamples.push_back(framerate);
+
+ // Calculate the new minimum framerate. I know of no way to update a
+ // rolling minimum without ever rescanning the buffer. But since there
+ // are only a few tens of items in this buffer, rescanning it is
+ // probably cheaper (and certainly easier to reason about) than
+ // attempting to optimize away some of the scans.
+ mSlowest = framerate; // pick an arbitrary entry to start
+ for (boost::circular_buffer<F32>::const_iterator si(mSamples.begin()), send(mSamples.end());
+ si != send; ++si)
+ {
+ if (*si < mSlowest)
+ {
+ mSlowest = *si;
+ }
+ }
+
+ // We're especially interested in memory as framerate drops. Only log
+ // when framerate drops below the slowest framerate we remember.
+ // (Should always be true for the end of the very first sample
+ // window.)
+ if (framerate >= slowest)
+ {
+ return false;
+ }
+ // Congratulations, we've hit a new low. :-P
+
+ LL_INFOS("FrameWatcher") << ' ';
+ if (! prevSize)
+ {
+ LL_CONT << "initial framerate ";
+ }
+ else
+ {
+ LL_CONT << "slowest framerate for last " << int(prevSize * MEM_INFO_THROTTLE)
+ << " seconds ";
+ }
+ LL_CONT << std::fixed << std::setprecision(1) << framerate << '\n'
+ << LLMemoryInfo() << LL_ENDL;
+
+ return false;
+ }
+
+private:
+ // Storing the connection in an LLTempBoundListener ensures it will be
+ // disconnected when we're destroyed.
+ LLTempBoundListener mConnection;
+ // Track elapsed time
+ LLTimer mTimer;
+ // Some of what you see here is in fact redundant with functionality you
+ // can get from LLTimer. Unfortunately the LLTimer API is missing the
+ // feature we need: has at least the stated interval elapsed, and if so,
+ // exactly how long has passed? So we have to do it by hand, sigh.
+ // Time at start, end of sample window
+ F32 mSampleStart, mSampleEnd;
+ // Frames this sample window
+ U32 mFrames;
+ // Sliding window of framerate samples
+ boost::circular_buffer<F32> mSamples;
+ // Slowest framerate in mSamples
+ F32 mSlowest;
+};
+
+// Need an instance of FrameWatcher before it does any good
+static FrameWatcher sFrameWatcher;
+
BOOL gunzip_file(const std::string& srcfile, const std::string& dstfile)
{
std::string tmpfile;
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
index 41a4f25000..739e795d3a 100644
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -36,6 +36,7 @@
// llinfos << info << llendl;
//
+#include "llsd.h"
#include <iosfwd>
#include <string>
@@ -117,6 +118,27 @@ public:
//get the available memory infomation in KiloBytes.
static void getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_virtual_mem_kb);
+
+ // Retrieve a map of memory statistics. The keys of the map are platform-
+ // dependent. The values are in kilobytes to try to avoid integer overflow.
+ LLSD getStatsMap() const;
+
+ // Re-fetch memory data (as reported by stream() and getStatsMap()) from the
+ // system. Normally this is fetched at construction time. Return (*this)
+ // to permit usage of the form:
+ // @code
+ // LLMemoryInfo info;
+ // ...
+ // info.refresh().getStatsMap();
+ // @endcode
+ LLMemoryInfo& refresh();
+
+private:
+ // set mStatsMap
+ static LLSD loadStatsMap();
+
+ // Memory stats for getStatsMap().
+ LLSD mStatsMap;
};
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index d9400fb5b3..bdde1b5c48 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -36,6 +36,12 @@
#include <sched.h>
#endif
+#if !LL_DARWIN
+U32 ll_thread_local local_thread_ID = 0;
+#endif
+
+U32 LLThread::sIDIter = 0;
+
//----------------------------------------------------------------------------
// Usage:
// void run_func(LLThread* thread)
@@ -56,12 +62,6 @@
//
//----------------------------------------------------------------------------
-#if !LL_DARWIN
-U32 ll_thread_local sThreadID = 0;
-#endif
-
-U32 LLThread::sIDIter = 0;
-
LL_COMMON_API void assert_main_thread()
{
static U32 s_thread_id = LLThread::currentID();
@@ -79,9 +79,12 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
LLThread *threadp = (LLThread *)datap;
#if !LL_DARWIN
- sThreadID = threadp->mID;
+ local_thread_ID = threadp->mID;
#endif
+ // Create a thread local data.
+ LLThreadLocalData::create(threadp);
+
// Run the user supplied function
threadp->run();
@@ -94,40 +97,22 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
}
-LLThread::LLThread(const std::string& name, apr_pool_t *poolp) :
- mPaused(FALSE),
+LLThread::LLThread(std::string const& name) :
+ mPaused(false),
mName(name),
mAPRThreadp(NULL),
- mStatus(STOPPED)
+ mStatus(STOPPED),
+ mThreadLocalData(NULL)
{
- mID = ++sIDIter;
+ mID = ++sIDIter; //flaw: assume this is called only in the main thread!
- // Thread creation probably CAN be paranoid about APR being initialized, if necessary
- if (poolp)
- {
- mIsLocalPool = FALSE;
- mAPRPoolp = poolp;
- }
- else
- {
- mIsLocalPool = TRUE;
- apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
- }
- mRunCondition = new LLCondition(mAPRPoolp);
-
- mLocalAPRFilePoolp = NULL ;
+ mRunCondition = new LLCondition;
}
LLThread::~LLThread()
{
shutdown();
-
- if(mLocalAPRFilePoolp)
- {
- delete mLocalAPRFilePoolp ;
- mLocalAPRFilePoolp = NULL ;
- }
}
void LLThread::shutdown()
@@ -164,7 +149,7 @@ void LLThread::shutdown()
if (!isStopped())
{
// This thread just wouldn't stop, even though we gave it time
- //llwarns << "LLThread::~LLThread() exiting thread before clean exit!" << llendl;
+ //llwarns << "LLThread::shutdown() exiting thread before clean exit!" << llendl;
// Put a stake in its heart.
apr_thread_exit(mAPRThreadp, -1);
return;
@@ -174,15 +159,8 @@ void LLThread::shutdown()
delete mRunCondition;
mRunCondition = 0;
-
- if (mIsLocalPool && mAPRPoolp)
- {
- apr_pool_destroy(mAPRPoolp);
- mAPRPoolp = 0;
- }
}
-
void LLThread::start()
{
llassert(isStopped());
@@ -191,7 +169,7 @@ void LLThread::start()
mStatus = RUNNING;
apr_status_t status =
- apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp);
+ apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, tldata().mRootPool());
if(status == APR_SUCCESS)
{
@@ -216,7 +194,7 @@ void LLThread::pause()
if (!mPaused)
{
// this will cause the thread to stop execution as soon as checkPause() is called
- mPaused = 1; // Does not need to be atomic since this is only set/unset from the main thread
+ mPaused = true; // Does not need to be atomic since this is only set/unset from the main thread
}
}
@@ -224,7 +202,7 @@ void LLThread::unpause()
{
if (mPaused)
{
- mPaused = 0;
+ mPaused = false;
}
wake(); // wake up the thread if necessary
@@ -301,115 +279,76 @@ void LLThread::wakeLocked()
}
}
-//============================================================================
-
-LLMutex::LLMutex(apr_pool_t *poolp) :
- mAPRMutexp(NULL), mCount(0), mLockingThread(NO_THREAD)
-{
- //if (poolp)
- //{
- // mIsLocalPool = FALSE;
- // mAPRPoolp = poolp;
- //}
- //else
- {
- mIsLocalPool = TRUE;
- apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
- }
- apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mAPRPoolp);
-}
+#ifdef SHOW_ASSERT
+// This allows the use of llassert(is_main_thread()) to assure the current thread is the main thread.
+static apr_os_thread_t main_thread_id;
+LL_COMMON_API bool is_main_thread(void) { return apr_os_thread_equal(main_thread_id, apr_os_thread_current()); }
+#endif
+// The thread private handle to access the LLThreadLocalData instance.
+apr_threadkey_t* LLThreadLocalData::sThreadLocalDataKey;
-LLMutex::~LLMutex()
+//static
+void LLThreadLocalData::init(void)
{
-#if MUTEX_DEBUG
- llassert_always(!isLocked()); // better not be locked!
-#endif
- apr_thread_mutex_destroy(mAPRMutexp);
- mAPRMutexp = NULL;
- if (mIsLocalPool)
+ // Only do this once.
+ if (sThreadLocalDataKey)
{
- apr_pool_destroy(mAPRPoolp);
+ return;
}
-}
+ apr_status_t status = apr_threadkey_private_create(&sThreadLocalDataKey, &LLThreadLocalData::destroy, LLAPRRootPool::get()());
+ ll_apr_assert_status(status); // Or out of memory, or system-imposed limit on the
+ // total number of keys per process {PTHREAD_KEYS_MAX}
+ // has been exceeded.
-void LLMutex::lock()
-{
-#if LL_DARWIN
- if (mLockingThread == LLThread::currentID())
-#else
- if (mLockingThread == sThreadID)
-#endif
- { //redundant lock
- mCount++;
- return;
- }
-
- apr_thread_mutex_lock(mAPRMutexp);
-
-#if MUTEX_DEBUG
- // Have to have the lock before we can access the debug info
- U32 id = LLThread::currentID();
- if (mIsLocked[id] != FALSE)
- llerrs << "Already locked in Thread: " << id << llendl;
- mIsLocked[id] = TRUE;
-#endif
+ // Create the thread-local data for the main thread (this function is called by the main thread).
+ LLThreadLocalData::create(NULL);
-#if LL_DARWIN
- mLockingThread = LLThread::currentID();
-#else
- mLockingThread = sThreadID;
+#ifdef SHOW_ASSERT
+ // This function is called by the main thread.
+ main_thread_id = apr_os_thread_current();
#endif
}
-void LLMutex::unlock()
+// This is called once for every thread when the thread is destructed.
+//static
+void LLThreadLocalData::destroy(void* thread_local_data)
{
- if (mCount > 0)
- { //not the root unlock
- mCount--;
- return;
- }
-
-#if MUTEX_DEBUG
- // Access the debug info while we have the lock
- U32 id = LLThread::currentID();
- if (mIsLocked[id] != TRUE)
- llerrs << "Not locked in Thread: " << id << llendl;
- mIsLocked[id] = FALSE;
-#endif
-
- mLockingThread = NO_THREAD;
- apr_thread_mutex_unlock(mAPRMutexp);
+ delete static_cast<LLThreadLocalData*>(thread_local_data);
}
-bool LLMutex::isLocked()
+//static
+void LLThreadLocalData::create(LLThread* threadp)
{
- apr_status_t status = apr_thread_mutex_trylock(mAPRMutexp);
- if (APR_STATUS_IS_EBUSY(status))
+ LLThreadLocalData* new_tld = new LLThreadLocalData;
+ if (threadp)
{
- return true;
- }
- else
- {
- apr_thread_mutex_unlock(mAPRMutexp);
- return false;
+ threadp->mThreadLocalData = new_tld;
}
+ apr_status_t status = apr_threadkey_private_set(new_tld, sThreadLocalDataKey);
+ llassert_always(status == APR_SUCCESS);
}
-U32 LLMutex::lockingThread() const
+//static
+LLThreadLocalData& LLThreadLocalData::tldata(void)
{
- return mLockingThread;
+ if (!sThreadLocalDataKey)
+ {
+ LLThreadLocalData::init();
+ }
+
+ void* data;
+ apr_status_t status = apr_threadkey_private_get(&data, sThreadLocalDataKey);
+ llassert_always(status == APR_SUCCESS);
+ return *static_cast<LLThreadLocalData*>(data);
}
//============================================================================
-LLCondition::LLCondition(apr_pool_t *poolp) :
- LLMutex(poolp)
+LLCondition::LLCondition(LLAPRPool& parent) : LLMutex(parent)
{
- // base class (LLMutex) has already ensured that mAPRPoolp is set up.
-
- apr_thread_cond_create(&mAPRCondp, mAPRPoolp);
+ apr_thread_cond_create(&mAPRCondp, mPool());
}
@@ -422,15 +361,6 @@ LLCondition::~LLCondition()
void LLCondition::wait()
{
- if (!isLocked())
- { //mAPRMutexp MUST be locked before calling apr_thread_cond_wait
- apr_thread_mutex_lock(mAPRMutexp);
-#if MUTEX_DEBUG
- // avoid asserts on destruction in non-release builds
- U32 id = LLThread::currentID();
- mIsLocked[id] = TRUE;
-#endif
- }
apr_thread_cond_wait(mAPRCondp, mAPRMutexp);
}
@@ -445,6 +375,44 @@ void LLCondition::broadcast()
}
//============================================================================
+LLMutexBase::LLMutexBase() :
+ mLockingThread(NO_THREAD),
+ mCount(0)
+{
+}
+
+void LLMutexBase::lock()
+{
+#if LL_DARWIN
+ if (mLockingThread == LLThread::currentID())
+#else
+ if (mLockingThread == local_thread_ID)
+#endif
+ { //redundant lock
+ mCount++;
+ return;
+ }
+
+ apr_thread_mutex_lock(mAPRMutexp);
+
+#if LL_DARWIN
+ mLockingThread = LLThread::currentID();
+#else
+ mLockingThread = local_thread_ID;
+#endif
+}
+
+void LLMutexBase::unlock()
+{
+ if (mCount > 0)
+ { //not the root unlock
+ mCount--;
+ return;
+ }
+ mLockingThread = NO_THREAD;
+
+ apr_thread_mutex_unlock(mAPRMutexp);
+}
//----------------------------------------------------------------------------
@@ -456,7 +424,7 @@ void LLThreadSafeRefCount::initThreadSafeRefCount()
{
if (!sMutex)
{
- sMutex = new LLMutex(0);
+ sMutex = new LLMutex;
}
}
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 40291a2569..c732e3bc77 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -29,7 +29,13 @@
#include "llapp.h"
#include "llapr.h"
+#include "llmemory.h"
#include "apr_thread_cond.h"
+#include "llaprpool.h"
+
+#ifdef SHOW_ASSERT
+extern LL_COMMON_API bool is_main_thread(void);
+#endif
class LLThread;
class LLMutex;
@@ -41,6 +47,22 @@ class LLCondition;
#define ll_thread_local __thread
#endif
+class LL_COMMON_API LLThreadLocalData
+{
+private:
+ static apr_threadkey_t* sThreadLocalDataKey;
+
+public:
+ // Thread-local memory pools.
+ LLAPRRootPool mRootPool;
+ LLVolatileAPRPool mVolatileAPRPool;
+
+ static void init(void);
+ static void destroy(void* thread_local_data);
+ static void create(LLThread* pthread);
+ static LLThreadLocalData& tldata(void);
+};
+
class LL_COMMON_API LLThread
{
private:
@@ -54,7 +76,7 @@ public:
QUITTING= 2 // Someone wants this thread to quit
} EThreadStatus;
- LLThread(const std::string& name, apr_pool_t *poolp = NULL);
+ LLThread(std::string const& name);
virtual ~LLThread(); // Warning! You almost NEVER want to destroy a thread unless it's in the STOPPED state.
virtual void shutdown(); // stops the thread
@@ -69,7 +91,7 @@ public:
// Called from MAIN THREAD.
void pause();
void unpause();
- bool isPaused() { return isStopped() || mPaused == TRUE; }
+ bool isPaused() { return isStopped() || mPaused; }
// Cause the thread to wake up and check its condition
void wake();
@@ -83,13 +105,11 @@ public:
// this kicks off the apr thread
void start(void);
- apr_pool_t *getAPRPool() { return mAPRPoolp; }
- LLVolatileAPRPool* getLocalAPRFilePool() { return mLocalAPRFilePoolp ; }
-
- U32 getID() const { return mID; }
+ // Return thread-local data for the current thread.
+ static LLThreadLocalData& tldata(void) { return LLThreadLocalData::tldata(); }
private:
- BOOL mPaused;
+ bool mPaused;
// static function passed to APR thread creation routine
static void *APR_THREAD_FUNC staticRun(apr_thread_t *apr_threadp, void *datap);
@@ -99,15 +119,11 @@ protected:
LLCondition* mRunCondition;
apr_thread_t *mAPRThreadp;
- apr_pool_t *mAPRPoolp;
- BOOL mIsLocalPool;
EThreadStatus mStatus;
U32 mID;
-
- //a local apr_pool for APRFile operations in this thread. If it exists, LLAPRFile::sAPRFilePoolp should not be used.
- //Note: this pool is used by APRFile ONLY, do NOT use it for any other purposes.
- // otherwise it will cause severe memory leaking!!! --bao
- LLVolatileAPRPool *mLocalAPRFilePoolp ;
+
+ friend void LLThreadLocalData::create(LLThread* threadp);
+ LLThreadLocalData* mThreadLocalData;
void setQuitting();
@@ -137,7 +153,15 @@ protected:
#define MUTEX_DEBUG (LL_DEBUG || LL_RELEASE_WITH_DEBUG_INFO)
-class LL_COMMON_API LLMutex
+#ifdef MUTEX_DEBUG
+// We really shouldn't be using recursive locks. Make sure of that in debug mode.
+#define MUTEX_FLAG APR_THREAD_MUTEX_UNNESTED
+#else
+// Use the fastest platform-optimal lock behavior (can be recursive or non-recursive).
+#define MUTEX_FLAG APR_THREAD_MUTEX_DEFAULT
+#endif
+
+class LL_COMMON_API LLMutexBase
{
public:
typedef enum
@@ -145,32 +169,73 @@ public:
NO_THREAD = 0xFFFFFFFF
} e_locking_thread;
- LLMutex(apr_pool_t *apr_poolp); // NULL pool constructs a new pool for the mutex
- virtual ~LLMutex();
-
- void lock(); // blocks
- void unlock();
- bool isLocked(); // non-blocking, but does do a lock/unlock so not free
- U32 lockingThread() const; //get ID of locking thread
-
+ LLMutexBase() ;
+
+ void lock() ;
+ void unlock() ;
+ // Returns true if lock was obtained successfully.
+ bool trylock() { return !APR_STATUS_IS_EBUSY(apr_thread_mutex_trylock(mAPRMutexp)); }
+
+ // non-blocking, but does do a lock/unlock so not free
+ bool isLocked() { bool is_not_locked = trylock(); if (is_not_locked) unlock(); return !is_not_locked; }
+
protected:
- apr_thread_mutex_t *mAPRMutexp;
+ // mAPRMutexp is initialized and uninitialized in the derived class.
+ apr_thread_mutex_t* mAPRMutexp;
mutable U32 mCount;
mutable U32 mLockingThread;
-
- apr_pool_t *mAPRPoolp;
- BOOL mIsLocalPool;
-
-#if MUTEX_DEBUG
- std::map<U32, BOOL> mIsLocked;
+};
+
+class LL_COMMON_API LLMutex : public LLMutexBase
+{
+public:
+ LLMutex(LLAPRPool& parent = LLThread::tldata().mRootPool) : mPool(parent)
+ {
+ apr_thread_mutex_create(&mAPRMutexp, MUTEX_FLAG, mPool());
+ }
+ ~LLMutex()
+ {
+ llassert(!isLocked()); // better not be locked!
+ apr_thread_mutex_destroy(mAPRMutexp);
+ mAPRMutexp = NULL;
+ }
+
+protected:
+ LLAPRPool mPool;
+};
+
+#if APR_HAS_THREADS
+// No need to use a root pool in this case.
+typedef LLMutex LLMutexRootPool;
+#else // APR_HAS_THREADS
+class LL_COMMON_API LLMutexRootPool : public LLMutexBase
+{
+public:
+ LLMutexRootPool(void)
+ {
+ apr_thread_mutex_create(&mAPRMutexp, MUTEX_FLAG, mRootPool());
+ }
+ ~LLMutexRootPool()
+ {
+#if APR_POOL_DEBUG
+ // It is allowed to destruct root pools from a different thread.
+ mRootPool.grab_ownership();
#endif
+ llassert(!isLocked());
+ apr_thread_mutex_destroy(mAPRMutexp);
+ mAPRMutexp = NULL;
+ }
+
+protected:
+ LLAPRRootPool mRootPool;
};
+#endif // APR_HAS_THREADS
// Actually a condition/mutex pair (since each condition needs to be associated with a mutex).
class LL_COMMON_API LLCondition : public LLMutex
{
public:
- LLCondition(apr_pool_t *apr_poolp); // Defaults to global pool, could use the thread pool as well.
+ LLCondition(LLAPRPool& parent = LLThread::tldata().mRootPool);
~LLCondition();
void wait(); // blocks
@@ -181,10 +246,10 @@ protected:
apr_thread_cond_t *mAPRCondp;
};
-class LLMutexLock
+class LL_COMMON_API LLMutexLock
{
public:
- LLMutexLock(LLMutex* mutex)
+ LLMutexLock(LLMutexBase* mutex)
{
mMutex = mutex;
mMutex->lock();
@@ -194,7 +259,7 @@ public:
mMutex->unlock();
}
private:
- LLMutex* mMutex;
+ LLMutexBase* mMutex;
};
//============================================================================
diff --git a/indra/llcommon/llthreadsafequeue.cpp b/indra/llcommon/llthreadsafequeue.cpp
index 8a73e632a9..05d24944f3 100644
--- a/indra/llcommon/llthreadsafequeue.cpp
+++ b/indra/llcommon/llthreadsafequeue.cpp
@@ -34,19 +34,11 @@
//-----------------------------------------------------------------------------
-LLThreadSafeQueueImplementation::LLThreadSafeQueueImplementation(apr_pool_t * pool, unsigned int capacity):
- mOwnsPool(pool == 0),
- mPool(pool),
+LLThreadSafeQueueImplementation::LLThreadSafeQueueImplementation(unsigned int capacity):
mQueue(0)
{
- if(mOwnsPool) {
- apr_status_t status = apr_pool_create(&mPool, 0);
- if(status != APR_SUCCESS) throw LLThreadSafeQueueError("failed to allocate pool");
- } else {
- ; // No op.
- }
-
- apr_status_t status = apr_queue_create(&mQueue, capacity, mPool);
+ mPool.create();
+ apr_status_t status = apr_queue_create(&mQueue, capacity, mPool());
if(status != APR_SUCCESS) throw LLThreadSafeQueueError("failed to allocate queue");
}
@@ -59,7 +51,6 @@ LLThreadSafeQueueImplementation::~LLThreadSafeQueueImplementation()
" elements;" << "memory will be leaked" << LL_ENDL;
apr_queue_term(mQueue);
}
- if(mOwnsPool && (mPool != 0)) apr_pool_destroy(mPool);
}
diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h
index 58cac38769..43d0b396f2 100644
--- a/indra/llcommon/llthreadsafequeue.h
+++ b/indra/llcommon/llthreadsafequeue.h
@@ -30,9 +30,9 @@
#include <string>
#include <stdexcept>
+#include "llaprpool.h"
-struct apr_pool_t; // From apr_pools.h
class LLThreadSafeQueueImplementation; // See below.
@@ -75,7 +75,7 @@ struct apr_queue_t; // From apr_queue.h
class LL_COMMON_API LLThreadSafeQueueImplementation
{
public:
- LLThreadSafeQueueImplementation(apr_pool_t * pool, unsigned int capacity);
+ LLThreadSafeQueueImplementation(unsigned int capacity);
~LLThreadSafeQueueImplementation();
void pushFront(void * element);
bool tryPushFront(void * element);
@@ -84,8 +84,7 @@ public:
size_t size();
private:
- bool mOwnsPool;
- apr_pool_t * mPool;
+ LLAPRPool mPool; // The pool used for mQueue.
apr_queue_t * mQueue;
};
@@ -99,9 +98,8 @@ class LLThreadSafeQueue
public:
typedef ElementT value_type;
- // If the pool is set to NULL one will be allocated and managed by this
- // queue.
- LLThreadSafeQueue(apr_pool_t * pool = 0, unsigned int capacity = 1024);
+ // Constructor.
+ LLThreadSafeQueue(unsigned int capacity = 1024);
// Add an element to the front of queue (will block if the queue has
// reached capacity).
@@ -139,8 +137,8 @@ private:
template<typename ElementT>
-LLThreadSafeQueue<ElementT>::LLThreadSafeQueue(apr_pool_t * pool, unsigned int capacity):
- mImplementation(pool, capacity)
+LLThreadSafeQueue<ElementT>::LLThreadSafeQueue(unsigned int capacity) :
+ mImplementation(capacity)
{
; // No op.
}
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 69720bb903..ef55cfec89 100644..100755
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -27,9 +27,9 @@
#ifndef LL_LLVERSIONVIEWER_H
#define LL_LLVERSIONVIEWER_H
-const S32 LL_VERSION_MAJOR = 2;
-const S32 LL_VERSION_MINOR = 7;
-const S32 LL_VERSION_PATCH = 6;
+const S32 LL_VERSION_MAJOR = 3;
+const S32 LL_VERSION_MINOR = 0;
+const S32 LL_VERSION_PATCH = 5;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 3ac50832fd..6b308bb917 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -37,12 +37,7 @@
LLWorkerThread::LLWorkerThread(const std::string& name, bool threaded) :
LLQueuedThread(name, threaded)
{
- mDeleteMutex = new LLMutex(NULL);
-
- if(!mLocalAPRFilePoolp)
- {
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
- }
+ mDeleteMutex = new LLMutex;
}
LLWorkerThread::~LLWorkerThread()
@@ -204,7 +199,6 @@ LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& na
mWorkerClassName(name),
mRequestHandle(LLWorkerThread::nullHandle()),
mRequestPriority(LLWorkerThread::PRIORITY_NORMAL),
- mMutex(NULL),
mWorkFlags(0)
{
if (!mWorkerThread)
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index 9bff18303e..bef5ef53fe 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -94,7 +94,6 @@ public:
private:
void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
-
};
//============================================================================
@@ -194,7 +193,7 @@ protected:
U32 mRequestPriority; // last priority set
private:
- LLMutex mMutex;
+ LLMutexRootPool mMutex; // Use LLMutexRootPool since this object is created and destructed by multiple threads.
LLAtomicU32 mWorkFlags;
};
diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp
index c7cb488ca1..b34d1c5fd3 100644
--- a/indra/llcommon/tests/llinstancetracker_test.cpp
+++ b/indra/llcommon/tests/llinstancetracker_test.cpp
@@ -40,6 +40,7 @@
#include <boost/scoped_ptr.hpp>
// other Linden headers
#include "../test/lltut.h"
+#include "wrapllerrs.h"
struct Keyed: public LLInstanceTracker<Keyed, std::string>
{
@@ -151,33 +152,81 @@ namespace tut
{
Unkeyed one, two, three;
typedef std::set<Unkeyed*> KeySet;
- KeySet keys;
- keys.insert(&one);
- keys.insert(&two);
- keys.insert(&three);
- {
- Unkeyed::LLInstanceTrackerScopedGuard guard;
- for (Unkeyed::key_iter ki(guard.beginKeys()), kend(guard.endKeys());
- ki != kend; ++ki)
- {
- ensure_equals("spurious key", keys.erase(*ki), 1);
- }
- }
- ensure_equals("unreported key", keys.size(), 0);
-
+
KeySet instances;
instances.insert(&one);
instances.insert(&two);
instances.insert(&three);
- {
- Unkeyed::LLInstanceTrackerScopedGuard guard;
- for (Unkeyed::instance_iter ii(guard.beginInstances()), iend(guard.endInstances());
- ii != iend; ++ii)
+
+ 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/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp
index 7b4c7d6a48..72322c3b72 100644
--- a/indra/llcommon/tests/llsdserialize_test.cpp
+++ b/indra/llcommon/tests/llsdserialize_test.cpp
@@ -25,35 +25,293 @@
* $/LicenseInfo$
*/
-#if !LL_WINDOWS
+
+#include "linden_common.h"
+
+#if LL_WINDOWS
+#include <winsock2.h>
+typedef U32 uint32_t;
+#include <process.h>
+#include <io.h>
+#else
+#include <unistd.h>
#include <netinet/in.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include "llprocesslauncher.h"
#endif
-#include "linden_common.h"
+#include <sstream>
+
+/*==========================================================================*|
+// Whoops, seems Linden's Boost package and the viewer are built with
+// different settings of VC's /Zc:wchar_t switch! Using Boost.Filesystem
+// pathname operations produces Windows link errors:
+// unresolved external symbol "private: static class std::codecvt<unsigned short,
+// char,int> const * & __cdecl boost::filesystem3::path::wchar_t_codecvt_facet()"
+// unresolved external symbol "void __cdecl boost::filesystem3::path_traits::convert()"
+// See:
+// http://boost.2283326.n4.nabble.com/filesystem-v3-unicode-and-std-codecvt-linker-error-td3455549.html
+// which points to:
+// http://msdn.microsoft.com/en-us/library/dh8che7s%28v=VS.100%29.aspx
+
+// As we're not trying to preserve compatibility with old Boost.Filesystem
+// code, but rather writing brand-new code, use the newest available
+// Filesystem API.
+#define BOOST_FILESYSTEM_VERSION 3
+#include "boost/filesystem.hpp"
+#include "boost/filesystem/v3/fstream.hpp"
+|*==========================================================================*/
+#include "boost/range.hpp"
+#include "boost/foreach.hpp"
+#include "boost/function.hpp"
+#include "boost/lambda/lambda.hpp"
+#include "boost/lambda/bind.hpp"
+namespace lambda = boost::lambda;
+/*==========================================================================*|
+// Aaaarrgh, Linden's Boost package doesn't even include Boost.Iostreams!
+#include "boost/iostreams/stream.hpp"
+#include "boost/iostreams/device/file_descriptor.hpp"
+|*==========================================================================*/
+
#include "../llsd.h"
#include "../llsdserialize.h"
+#include "llsdutil.h"
#include "../llformat.h"
#include "../test/lltut.h"
+#include "stringize.h"
+std::vector<U8> string_to_vector(const std::string& str)
+{
+ return std::vector<U8>(str.begin(), str.end());
+}
-#if LL_WINDOWS
-#include <winsock2.h>
-typedef U32 uint32_t;
-#endif
+#if ! LL_WINDOWS
+// We want to call strerror_r(), but alarmingly, there are two different
+// variants. The one that returns int always populates the passed buffer
+// (except in case of error), whereas the other one always returns a valid
+// char* but might or might not populate the passed buffer. How do we know
+// which one we're getting? Define adapters for each and let the compiler
+// select the applicable adapter.
-std::vector<U8> string_to_vector(std::string str)
+// strerror_r() returns char*
+std::string message_from(int /*orig_errno*/, const char* /*buffer*/, const char* strerror_ret)
{
- // bc LLSD can't...
- size_t len = (size_t)str.length();
- std::vector<U8> v(len);
- for (size_t i = 0; i < len ; i++)
- {
- v[i] = str[i];
- }
- return v;
+ return strerror_ret;
}
+// strerror_r() returns int
+std::string message_from(int orig_errno, const char* buffer, int strerror_ret)
+{
+ if (strerror_ret == 0)
+ {
+ return buffer;
+ }
+ // Here strerror_r() has set errno. Since strerror_r() has already failed,
+ // seems like a poor bet to call it again to diagnose its own error...
+ int stre_errno = errno;
+ if (stre_errno == ERANGE)
+ {
+ return STRINGIZE("strerror_r() can't explain errno " << orig_errno
+ << " (buffer too small)");
+ }
+ if (stre_errno == EINVAL)
+ {
+ return STRINGIZE("unknown errno " << orig_errno);
+ }
+ // Here we don't even understand the errno from strerror_r()!
+ return STRINGIZE("strerror_r() can't explain errno " << orig_errno
+ << " (error " << stre_errno << ')');
+}
+#endif // ! LL_WINDOWS
+
+// boost::filesystem::temp_directory_path() isn't yet in Boost 1.45! :-(
+std::string temp_directory_path()
+{
+#if LL_WINDOWS
+ char buffer[4096];
+ GetTempPathA(sizeof(buffer), buffer);
+ return buffer;
+
+#else // LL_DARWIN, LL_LINUX
+ static const char* vars[] = { "TMPDIR", "TMP", "TEMP", "TEMPDIR" };
+ BOOST_FOREACH(const char* var, vars)
+ {
+ const char* found = getenv(var);
+ if (found)
+ return found;
+ }
+ return "/tmp";
+#endif // LL_DARWIN, LL_LINUX
+}
+
+// Windows presents a kinda sorta compatibility layer. Code to the yucky
+// Windows names because they're less likely than the Posix names to collide
+// with any other names in this source.
+#if LL_WINDOWS
+#define _remove DeleteFileA
+#else // ! LL_WINDOWS
+#define _open open
+#define _write write
+#define _close close
+#define _remove remove
+#endif // ! LL_WINDOWS
+
+// Create a text file with specified content "somewhere in the
+// filesystem," cleaning up when it goes out of scope.
+class NamedTempFile
+{
+public:
+ // Function that accepts an ostream ref and (presumably) writes stuff to
+ // it, e.g.:
+ // (lambda::_1 << "the value is " << 17 << '\n')
+ typedef boost::function<void(std::ostream&)> Streamer;
+
+ NamedTempFile(const std::string& ext, const std::string& content):
+ mPath(temp_directory_path())
+ {
+ createFile(ext, lambda::_1 << content);
+ }
+
+ // Disambiguate when passing string literal
+ NamedTempFile(const std::string& ext, const char* content):
+ mPath(temp_directory_path())
+ {
+ createFile(ext, lambda::_1 << content);
+ }
+
+ NamedTempFile(const std::string& ext, const Streamer& func):
+ mPath(temp_directory_path())
+ {
+ createFile(ext, func);
+ }
+
+ ~NamedTempFile()
+ {
+ _remove(mPath.c_str());
+ }
+
+ std::string getName() const { return mPath; }
+
+private:
+ void createFile(const std::string& ext, const Streamer& func)
+ {
+ // Silly maybe, but use 'ext' as the name prefix. Strip off a leading
+ // '.' if present.
+ int pfx_offset = ((! ext.empty()) && ext[0] == '.')? 1 : 0;
+
+#if ! LL_WINDOWS
+ // Make sure mPath ends with a directory separator, if it doesn't already.
+ if (mPath.empty() ||
+ ! (mPath[mPath.length() - 1] == '\\' || mPath[mPath.length() - 1] == '/'))
+ {
+ mPath.append("/");
+ }
+
+ // mkstemp() accepts and modifies a char* template string. Generate
+ // the template string, then copy to modifiable storage.
+ // mkstemp() requires its template string to end in six X's.
+ mPath += ext.substr(pfx_offset) + "XXXXXX";
+ // Copy to vector<char>
+ std::vector<char> pathtemplate(mPath.begin(), mPath.end());
+ // append a nul byte for classic-C semantics
+ pathtemplate.push_back('\0');
+ // std::vector promises that a pointer to the 0th element is the same
+ // as a pointer to a contiguous classic-C array
+ int fd(mkstemp(&pathtemplate[0]));
+ if (fd == -1)
+ {
+ // The documented errno values (http://linux.die.net/man/3/mkstemp)
+ // are used in a somewhat unusual way, so provide context-specific
+ // errors.
+ if (errno == EEXIST)
+ {
+ LL_ERRS("NamedTempFile") << "mkstemp(\"" << mPath
+ << "\") could not create unique file " << LL_ENDL;
+ }
+ if (errno == EINVAL)
+ {
+ LL_ERRS("NamedTempFile") << "bad mkstemp() file path template '"
+ << mPath << "'" << LL_ENDL;
+ }
+ // Shrug, something else
+ int mkst_errno = errno;
+ char buffer[256];
+ LL_ERRS("NamedTempFile") << "mkstemp(\"" << mPath << "\") failed: "
+ << message_from(mkst_errno, buffer,
+ strerror_r(mkst_errno, buffer, sizeof(buffer)))
+ << LL_ENDL;
+ }
+ // mkstemp() seems to have worked! Capture the modified filename.
+ // Avoid the nul byte we appended.
+ mPath.assign(pathtemplate.begin(), (pathtemplate.end()-1));
+
+/*==========================================================================*|
+ // Define an ostream on the open fd. Tell it to close fd on destruction.
+ boost::iostreams::stream<boost::iostreams::file_descriptor_sink>
+ out(fd, boost::iostreams::close_handle);
+|*==========================================================================*/
+
+ // Write desired content.
+ std::ostringstream out;
+ // Stream stuff to it.
+ func(out);
+
+ std::string data(out.str());
+ int written(_write(fd, data.c_str(), data.length()));
+ int closed(_close(fd));
+ llassert_always(written == data.length() && closed == 0);
+
+#else // LL_WINDOWS
+ // GetTempFileName() is documented to require a MAX_PATH buffer.
+ char tempname[MAX_PATH];
+ // Use 'ext' as filename prefix, but skip leading '.' if any.
+ // The 0 param is very important: requests iterating until we get a
+ // unique name.
+ if (0 == GetTempFileNameA(mPath.c_str(), ext.c_str() + pfx_offset, 0, tempname))
+ {
+ // I always have to look up this call... :-P
+ LPSTR msgptr;
+ FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ LPSTR(&msgptr), // have to cast (char**) to (char*)
+ 0, NULL );
+ LL_ERRS("NamedTempFile") << "GetTempFileName(\"" << mPath << "\", \""
+ << (ext.c_str() + pfx_offset) << "\") failed: "
+ << msgptr << LL_ENDL;
+ LocalFree(msgptr);
+ }
+ // GetTempFileName() appears to have worked! Capture the actual
+ // filename.
+ mPath = tempname;
+ // Open the file and stream content to it. Destructor will close.
+ std::ofstream out(tempname);
+ func(out);
+
+#endif // LL_WINDOWS
+ }
+
+ void peep()
+ {
+ std::cout << "File '" << mPath << "' contains:\n";
+ std::ifstream reader(mPath.c_str());
+ std::string line;
+ while (std::getline(reader, line))
+ std::cout << line << '\n';
+ std::cout << "---\n";
+ }
+
+ std::string mPath;
+};
+
namespace tut
{
struct sd_xml_data
@@ -1494,5 +1752,223 @@ namespace tut
ensureBinaryAndNotation("map", test);
ensureBinaryAndXML("map", test);
}
-}
+ struct TestPythonCompatible
+ {
+ TestPythonCompatible():
+ // Note the peculiar insertion of __FILE__ into this string. Since
+ // this script is being written into a platform-dependent temp
+ // directory, we can't locate indra/lib/python relative to
+ // Python's __file__. Use __FILE__ instead, navigating relative
+ // to this C++ source file. Use Python raw-string syntax so
+ // Windows pathname backslashes won't mislead Python's string
+ // scanner.
+ import_llsd("import os.path\n"
+ "import sys\n"
+ "sys.path.insert(0,\n"
+ " os.path.join(os.path.dirname(r'" __FILE__ "'),\n"
+ " os.pardir, os.pardir, 'lib', 'python'))\n"
+ "try:\n"
+ " from llbase import llsd\n"
+ "except ImportError:\n"
+ " from indra.base import llsd\n")
+ {}
+ ~TestPythonCompatible() {}
+
+ std::string import_llsd;
+
+ template <typename CONTENT>
+ void python(const std::string& desc, const CONTENT& script, int expect=0)
+ {
+ const char* PYTHON(getenv("PYTHON"));
+ ensure("Set $PYTHON to the Python interpreter", PYTHON);
+
+ NamedTempFile scriptfile(".py", script);
+
+#if LL_WINDOWS
+ std::string q("\"");
+ std::string qPYTHON(q + PYTHON + q);
+ std::string qscript(q + scriptfile.getName() + q);
+ int rc = _spawnl(_P_WAIT, PYTHON, qPYTHON.c_str(), qscript.c_str(), NULL);
+ if (rc == -1)
+ {
+ char buffer[256];
+ strerror_s(buffer, errno); // C++ can infer the buffer size! :-O
+ ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false);
+ }
+ else
+ {
+ ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect);
+ }
+
+#else // LL_DARWIN, LL_LINUX
+ LLProcessLauncher py;
+ py.setExecutable(PYTHON);
+ py.addArgument(scriptfile.getName());
+ ensure_equals(STRINGIZE("Couldn't launch " << desc << " script"), py.launch(), 0);
+ // Implementing timeout would mean messing with alarm() and
+ // catching SIGALRM... later maybe...
+ int status(0);
+ if (waitpid(py.getProcessID(), &status, 0) == -1)
+ {
+ int waitpid_errno(errno);
+ ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: "
+ "waitpid() errno " << waitpid_errno),
+ waitpid_errno, ECHILD);
+ }
+ else
+ {
+ if (WIFEXITED(status))
+ {
+ int rc(WEXITSTATUS(status));
+ ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc),
+ rc, expect);
+ }
+ else if (WIFSIGNALED(status))
+ {
+ ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)),
+ false);
+ }
+ else
+ {
+ ensure(STRINGIZE(desc << " script produced impossible status " << status),
+ false);
+ }
+ }
+#endif
+ }
+ };
+
+ typedef tut::test_group<TestPythonCompatible> TestPythonCompatibleGroup;
+ typedef TestPythonCompatibleGroup::object TestPythonCompatibleObject;
+ TestPythonCompatibleGroup pycompat("LLSD serialize Python compatibility");
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<1>()
+ {
+ set_test_name("verify python()");
+ python("hello",
+ "import sys\n"
+ "sys.exit(17)\n",
+ 17); // expect nonzero rc
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<2>()
+ {
+ set_test_name("verify NamedTempFile");
+ python("platform",
+ "import sys\n"
+ "print 'Running on', sys.platform\n");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<3>()
+ {
+ set_test_name("verify sequence to Python");
+
+ LLSD cdata(LLSDArray(17)(3.14)
+ ("This string\n"
+ "has several\n"
+ "lines."));
+
+ const char pydata[] =
+ "def verify(iterable):\n"
+ " it = iter(iterable)\n"
+ " assert it.next() == 17\n"
+ " assert abs(it.next() - 3.14) < 0.01\n"
+ " assert it.next() == '''\\\n"
+ "This string\n"
+ "has several\n"
+ "lines.'''\n"
+ " try:\n"
+ " it.next()\n"
+ " except StopIteration:\n"
+ " pass\n"
+ " else:\n"
+ " assert False, 'Too many data items'\n";
+
+ // Create a something.llsd file containing 'data' serialized to
+ // notation. It's important to separate with newlines because Python's
+ // llsd module doesn't support parsing from a file stream, only from a
+ // string, so we have to know how much of the file to read into a
+ // string.
+ NamedTempFile file(".llsd",
+ // NamedTempFile's boost::function constructor
+ // takes a callable. To this callable it passes the
+ // std::ostream with which it's writing the
+ // NamedTempFile. This lambda-based expression
+ // first calls LLSD::Serialize() with that ostream,
+ // then streams a newline to it, etc.
+ (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1),
+ lambda::_1 << '\n',
+ lambda::bind(LLSDSerialize::toNotation, cdata[1], lambda::_1),
+ lambda::_1 << '\n',
+ lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1),
+ lambda::_1 << '\n'));
+
+ python("read C++ notation",
+ lambda::_1 <<
+ import_llsd <<
+ "def parse_each(iterable):\n"
+ " for item in iterable:\n"
+ " yield llsd.parse(item)\n" <<
+ pydata <<
+ // Don't forget raw-string syntax for Windows pathnames.
+ "verify(parse_each(open(r'" << file.getName() << "')))\n");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<4>()
+ {
+ set_test_name("verify sequence from Python");
+
+ // Create an empty data file. This is just a placeholder for our
+ // script to write into. Create it to establish a unique name that
+ // we know.
+ NamedTempFile file(".llsd", "");
+
+ python("write Python notation",
+ lambda::_1 <<
+ "from __future__ import with_statement\n" <<
+ import_llsd <<
+ "DATA = [\n"
+ " 17,\n"
+ " 3.14,\n"
+ " '''\\\n"
+ "This string\n"
+ "has several\n"
+ "lines.''',\n"
+ "]\n"
+ // Don't forget raw-string syntax for Windows pathnames.
+ // N.B. Using 'print' implicitly adds newlines.
+ "with open(r'" << file.getName() << "', 'w') as f:\n"
+ " for item in DATA:\n"
+ " print >>f, llsd.format_notation(item)\n");
+
+ std::ifstream inf(file.getName().c_str());
+ LLSD item;
+ // Notice that we're not doing anything special to parse out the
+ // newlines: LLSDSerialize::fromNotation ignores them. While it would
+ // seem they're not strictly necessary, going in this direction, we
+ // want to ensure that notation-separated-by-newlines works in both
+ // directions -- since in practice, a given file might be read by
+ // either language.
+ ensure_equals("Failed to read LLSD::Integer from Python",
+ LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
+ 1);
+ ensure_equals(item.asInteger(), 17);
+ ensure_equals("Failed to read LLSD::Real from Python",
+ LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
+ 1);
+ ensure_approximately_equals("Bad LLSD::Real value from Python",
+ item.asReal(), 3.14, 7); // 7 bits ~= 0.01
+ ensure_equals("Failed to read LLSD::String from Python",
+ LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
+ 1);
+ ensure_equals(item.asString(),
+ "This string\n"
+ "has several\n"
+ "lines.");
+ }
+}
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/llcommon/tests/setpython.py b/indra/llcommon/tests/setpython.py
new file mode 100644
index 0000000000..df7b90428e
--- /dev/null
+++ b/indra/llcommon/tests/setpython.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+"""\
+@file setpython.py
+@author Nat Goodspeed
+@date 2011-07-13
+@brief Set PYTHON environment variable for tests that care.
+
+$LicenseInfo:firstyear=2011&license=viewerlgpl$
+Copyright (c) 2011, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import os
+import sys
+import subprocess
+
+if __name__ == "__main__":
+ os.environ["PYTHON"] = sys.executable
+ sys.exit(subprocess.call(sys.argv[1:]))
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 68e45f36e4..514ef6011f 100644
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -31,10 +31,12 @@
#include "llcrashlogger.h"
#include "linden_common.h"
#include "llstring.h"
-#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
+#include "indra_constants.h" // CRASH_BEHAVIOR_...
#include "llerror.h"
+#include "llerrorcontrol.h"
#include "lltimer.h"
#include "lldir.h"
+#include "llfile.h"
#include "llsdserialize.h"
#include "lliopipe.h"
#include "llpumpio.h"
@@ -54,7 +56,7 @@ public:
virtual void error(U32 status, const std::string& reason)
{
- gBreak = true;
+ gBreak = true;
}
virtual void result(const LLSD& content)
@@ -64,21 +66,8 @@ public:
}
};
-bool LLCrashLoggerText::mainLoop()
-{
- std::cout << "Entering main loop" << std::endl;
- sendCrashLogs();
- return true;
-}
-
-void LLCrashLoggerText::updateApplication(const std::string& message)
-{
- LLCrashLogger::updateApplication(message);
- std::cout << message << std::endl;
-}
-
LLCrashLogger::LLCrashLogger() :
- mCrashBehavior(CRASH_BEHAVIOR_ASK),
+ mCrashBehavior(CRASH_BEHAVIOR_ALWAYS_SEND),
mCrashInPreviousExec(false),
mCrashSettings("CrashSettings"),
mSentCrashLogs(false),
@@ -281,26 +270,48 @@ LLSD LLCrashLogger::constructPostData()
return mCrashInfo;
}
+const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
+
S32 LLCrashLogger::loadCrashBehaviorSetting()
{
+ // First check user_settings (in the user's home dir)
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
+ if (! mCrashSettings.loadFromFile(filename))
+ {
+ // Next check app_settings (in the SL program dir)
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, CRASH_SETTINGS_FILE);
+ mCrashSettings.loadFromFile(filename);
+ }
- mCrashSettings.loadFromFile(filename);
-
- S32 value = mCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
-
- if (value < CRASH_BEHAVIOR_ASK || CRASH_BEHAVIOR_NEVER_SEND < value) return CRASH_BEHAVIOR_ASK;
+ // If we didn't load any files above, this will return the default
+ S32 value = mCrashSettings.getS32("CrashSubmitBehavior");
- return value;
+ // Whatever value we got, make sure it's valid
+ switch (value)
+ {
+ case CRASH_BEHAVIOR_NEVER_SEND:
+ return CRASH_BEHAVIOR_NEVER_SEND;
+ case CRASH_BEHAVIOR_ALWAYS_SEND:
+ return CRASH_BEHAVIOR_ALWAYS_SEND;
+ }
+
+ return CRASH_BEHAVIOR_ASK;
}
bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
{
- if (crash_behavior != CRASH_BEHAVIOR_ASK && crash_behavior != CRASH_BEHAVIOR_ALWAYS_SEND) return false;
+ switch (crash_behavior)
+ {
+ case CRASH_BEHAVIOR_ASK:
+ case CRASH_BEHAVIOR_NEVER_SEND:
+ case CRASH_BEHAVIOR_ALWAYS_SEND:
+ break;
+ default:
+ return false;
+ }
- mCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior);
+ mCrashSettings.setS32("CrashSubmitBehavior", crash_behavior);
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
-
mCrashSettings.saveToFile(filename, FALSE);
return true;
@@ -309,14 +320,13 @@ bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg, int retries, int timeout)
{
gBreak = false;
- std::string status_message;
for(int i = 0; i < retries; ++i)
{
- status_message = llformat("%s, try %d...", msg.c_str(), i+1);
+ updateApplication(llformat("%s, try %d...", msg.c_str(), i+1));
LLHTTPClient::post(host, data, new LLCrashLoggerResponder(), timeout);
while(!gBreak)
{
- updateApplication(status_message);
+ updateApplication(); // No new message, just pump the IO
}
if(gSent)
{
@@ -336,7 +346,7 @@ bool LLCrashLogger::sendCrashLogs()
updateApplication("Sending reports...");
std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
- "SecondLifeCrashReport");
+ "SecondLifeCrashReport");
std::string report_file = dump_path + ".log";
std::ofstream out_file(report_file.c_str());
@@ -365,23 +375,37 @@ void LLCrashLogger::updateApplication(const std::string& message)
{
gServicePump->pump();
gServicePump->callback();
+ if (!message.empty()) llinfos << message << llendl;
}
bool LLCrashLogger::init()
{
- LLCurl::initClass();
+ LLCurl::initClass(false);
// We assume that all the logs we're looking for reside on the current drive
gDirUtilp->initAppDirs("SecondLife");
+ LLError::initForApplication(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
+
// Default to the product name "Second Life" (this is overridden by the -name argument)
mProductName = "Second Life";
+
+ // Rename current log file to ".old"
+ std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "crashreport.log.old");
+ std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "crashreport.log");
+ LLFile::rename(log_file.c_str(), old_log_file.c_str());
+
+ // Set the log file to crashreport.log
+ LLError::logToFile(log_file);
- mCrashSettings.declareS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ASK, "Controls behavior when viewer crashes "
- "(0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)");
+ mCrashSettings.declareS32("CrashSubmitBehavior", CRASH_BEHAVIOR_ALWAYS_SEND,
+ "Controls behavior when viewer crashes "
+ "(0 = ask before sending crash report, "
+ "1 = always send crash report, "
+ "2 = never send crash report)");
- llinfos << "Loading crash behavior setting" << llendl;
- mCrashBehavior = loadCrashBehaviorSetting();
+ // llinfos << "Loading crash behavior setting" << llendl;
+ // mCrashBehavior = loadCrashBehaviorSetting();
// If user doesn't want to send, bail out
if (mCrashBehavior == CRASH_BEHAVIOR_NEVER_SEND)
@@ -390,14 +414,14 @@ bool LLCrashLogger::init()
return false;
}
- gServicePump = new LLPumpIO(gAPRPoolp);
- gServicePump->prime(gAPRPoolp);
+ gServicePump = new LLPumpIO;
LLHTTPClient::setPump(*gServicePump);
- //If we've opened the crash logger, assume we can delete the marker file if it exists
+ //If we've opened the crash logger, assume we can delete the marker file if it exists
if( gDirUtilp )
{
- std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.exec_marker");
+ std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
+ "SecondLife.exec_marker");
LLAPRFile::remove( marker_file );
}
diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h
index a5daa74247..5d0cb5931c 100644
--- a/indra/llcrashlogger/llcrashlogger.h
+++ b/indra/llcrashlogger/llcrashlogger.h
@@ -66,15 +66,4 @@ protected:
bool mSentCrashLogs;
};
-class LLCrashLoggerText : public LLCrashLogger
-{
-public:
- LLCrashLoggerText(void) {}
- ~LLCrashLoggerText(void) {}
-
- virtual bool mainLoop();
- virtual void updateApplication(const std::string& message = LLStringUtil::null);
-};
-
-
#endif //LLCRASHLOGGER_H
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index f0d15d9607..23adbf68c8 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);
+ sMutex = new LLMutex;
+
+ 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);
}
}
}
@@ -1536,8 +1566,7 @@ BOOL LLImageFormatted::load(const std::string &filename)
resetLastError();
S32 file_size = 0;
- LLAPRFile infile ;
- infile.open(filename, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(filename, LL_APR_RB, &file_size);
apr_file_t* apr_file = infile.getFileHandle();
if (!apr_file)
{
@@ -1572,8 +1601,7 @@ BOOL LLImageFormatted::save(const std::string &filename)
{
resetLastError();
- LLAPRFile outfile ;
- outfile.open(filename, LL_APR_WB);
+ LLAPRFile outfile(filename, LL_APR_WB);
if (!outfile.getFileHandle())
{
setLastError("Unable to open file for writing", filename);
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/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp
index c6bfa50b40..926c749145 100644
--- a/indra/llimage/llimagedimensionsinfo.cpp
+++ b/indra/llimage/llimagedimensionsinfo.cpp
@@ -40,7 +40,7 @@ bool LLImageDimensionsInfo::load(const std::string& src_filename,U32 codec)
mSrcFilename = src_filename;
S32 file_size = 0;
- apr_status_t s = mInfile.open(src_filename, LL_APR_RB, NULL, &file_size);
+ apr_status_t s = mInfile.open(src_filename, LL_APR_RB, LLAPRFile::long_lived, &file_size);
if (s != APR_SUCCESS)
{
diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp
index 4bd3efddaa..2867f5e6f0 100644
--- a/indra/llimage/llimagedxt.cpp
+++ b/indra/llimage/llimagedxt.cpp
@@ -429,7 +429,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 44e6b89dd3..8c5dc63e9d 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -370,8 +370,7 @@ BOOL LLImageJ2C::loadAndValidate(const std::string &filename)
resetLastError();
S32 file_size = 0;
- LLAPRFile infile ;
- infile.open(filename, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(filename, LL_APR_RB, &file_size);
apr_file_t* apr_file = infile.getFileHandle() ;
if (!apr_file)
{
@@ -385,14 +384,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/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 28dc3bd313..2c6d6f31ea 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -35,20 +35,18 @@
LLImageDecodeThread::LLImageDecodeThread(bool threaded)
: LLQueuedThread("imagedecode", threaded)
{
- mCreationMutex = new LLMutex(getAPRPool());
}
//virtual
LLImageDecodeThread::~LLImageDecodeThread()
{
- delete mCreationMutex ;
}
// MAIN THREAD
// virtual
S32 LLImageDecodeThread::update(U32 max_time_ms)
{
- LLMutexLock lock(mCreationMutex);
+ LLMutexLock lock(&mCreationMutex);
for (creation_list_t::iterator iter = mCreationList.begin();
iter != mCreationList.end(); ++iter)
{
@@ -71,7 +69,7 @@ S32 LLImageDecodeThread::update(U32 max_time_ms)
LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted* image,
U32 priority, S32 discard, BOOL needs_aux, Responder* responder)
{
- LLMutexLock lock(mCreationMutex);
+ LLMutexLock lock(&mCreationMutex);
handle_t handle = generateHandle();
mCreationList.push_back(creation_info(handle, image, priority, discard, needs_aux, responder));
return handle;
@@ -81,7 +79,7 @@ LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted*
// Returns the size of the mutex guarded list as an indication of sanity
S32 LLImageDecodeThread::tut_size()
{
- LLMutexLock lock(mCreationMutex);
+ LLMutexLock lock(&mCreationMutex);
S32 res = mCreationList.size();
return res;
}
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index c684222fa5..6a24b7522a 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -98,7 +98,7 @@ private:
};
typedef std::list<creation_info> creation_list_t;
creation_list_t mCreationList;
- LLMutex* mCreationMutex;
+ LLMutex mCreationMutex;
};
#endif
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 a3caf79519..76760aa414 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -1034,8 +1034,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 e8cd871157..c95f922301 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -226,6 +226,11 @@ void LLParcel::init(const LLUUID &owner_id,
setPreviousOwnerID(LLUUID::null);
setPreviouslyGroupOwned(FALSE);
+
+ setSeeAVs(TRUE);
+ setAllowGroupAVSounds(TRUE);
+ setAllowAnyAVSounds(TRUE);
+ setHaveNewParcelLimitData(FALSE);
}
void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned)
@@ -702,7 +707,9 @@ void LLParcel::packMessage(LLSD& msg)
msg["user_location"] = ll_sd_from_vector3(mUserLocation);
msg["user_look_at"] = ll_sd_from_vector3(mUserLookAt);
msg["landing_type"] = (U8)mLandingType;
-
+ msg["see_avs"] = (LLSD::Boolean) getSeeAVs();
+ msg["group_av_sounds"] = (LLSD::Boolean) getAllowGroupAVSounds();
+ msg["any_av_sounds"] = (LLSD::Boolean) getAllowAnyAVSounds();
}
@@ -721,6 +728,24 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
msg->getStringFast( _PREHASH_ParcelData,_PREHASH_MediaURL, buffer );
setMediaURL(buffer);
+ BOOL see_avs = TRUE; // All default to true for legacy server behavior
+ BOOL any_av_sounds = TRUE;
+ BOOL group_av_sounds = TRUE;
+ bool have_new_parcel_limit_data = (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_SeeAVs) > 0); // New version of server should send all 3 of these values
+ have_new_parcel_limit_data &= (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_AnyAVSounds) > 0);
+ have_new_parcel_limit_data &= (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_GroupAVSounds) > 0);
+ if (have_new_parcel_limit_data)
+ {
+ msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_SeeAVs, see_avs);
+ msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_AnyAVSounds, any_av_sounds);
+ msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_GroupAVSounds, group_av_sounds);
+ }
+ setSeeAVs((bool) see_avs);
+ setAllowAnyAVSounds((bool) any_av_sounds);
+ setAllowGroupAVSounds((bool) group_av_sounds);
+
+ setHaveNewParcelLimitData(have_new_parcel_limit_data);
+
// non-optimized version
msg->getU8 ( "ParcelData", "MediaAutoScale", mMediaAutoScale );
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index 4893337967..ff35caab4c 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -75,7 +75,7 @@ const U8 PARCEL_AUCTION = 0x05;
// unused 0x06
// unused 0x07
// flag, unused 0x08
-// flag, unused 0x10
+const U8 PARCEL_HIDDENAVS = 0x10; // avatars not visible outside of parcel. Used for 'see avs' feature, but must be off for compatibility
const U8 PARCEL_SOUND_LOCAL = 0x20;
const U8 PARCEL_WEST_LINE = 0x40; // flag, property line on west edge
const U8 PARCEL_SOUTH_LINE = 0x80; // flag, property line on south edge
@@ -130,6 +130,12 @@ class LLSD;
class LLAccessEntry
{
public:
+ LLAccessEntry()
+ : mID(),
+ mTime(0),
+ mFlags(0)
+ {}
+
LLUUID mID; // Agent ID
S32 mTime; // Time (unix seconds) when entry expires
U32 mFlags; // Not used - currently should always be zero
@@ -265,6 +271,8 @@ public:
void setUserLocation(const LLVector3& pos) { mUserLocation = pos; }
void setUserLookAt(const LLVector3& rot) { mUserLookAt = rot; }
void setLandingType(const ELandingType type) { mLandingType = type; }
+ void setSeeAVs(BOOL see_avs) { mSeeAVs = see_avs; }
+ void setHaveNewParcelLimitData(bool have_new_parcel_data) { mHaveNewParcelLimitData = have_new_parcel_data; } // Remove this once hidden AV feature is fully available grid-wide
void setAuctionID(U32 auction_id) { mAuctionID = auction_id;}
@@ -291,6 +299,8 @@ public:
void setDenyAnonymous(BOOL b) { setParcelFlag(PF_DENY_ANONYMOUS, b); }
void setDenyAgeUnverified(BOOL b) { setParcelFlag(PF_DENY_AGEUNVERIFIED, b); }
void setRestrictPushObject(BOOL b) { setParcelFlag(PF_RESTRICT_PUSHOBJECT, b); }
+ void setAllowGroupAVSounds(BOOL b) { mAllowGroupAVSounds = b; }
+ void setAllowAnyAVSounds(BOOL b) { mAllowAnyAVSounds = b; }
void setDrawDistance(F32 dist) { mDrawDistance = dist; }
void setSalePrice(S32 price) { mSalePrice = price; }
@@ -367,6 +377,8 @@ public:
const LLVector3& getUserLocation() const { return mUserLocation; }
const LLVector3& getUserLookAt() const { return mUserLookAt; }
ELandingType getLandingType() const { return mLandingType; }
+ BOOL getSeeAVs() const { return mSeeAVs; }
+ BOOL getHaveNewParcelLimitData() const { return mHaveNewParcelLimitData; }
// User-specified snapshot
const LLUUID& getSnapshotID() const { return mSnapshotID; }
@@ -496,6 +508,9 @@ public:
BOOL getRegionDenyAgeUnverifiedOverride() const
{ return mRegionDenyAgeUnverifiedOverride; }
+ BOOL getAllowGroupAVSounds() const { return mAllowGroupAVSounds; }
+ BOOL getAllowAnyAVSounds() const { return mAllowAnyAVSounds; }
+
F32 getDrawDistance() const { return mDrawDistance; }
S32 getSalePrice() const { return mSalePrice; }
time_t getClaimDate() const { return mClaimDate; }
@@ -606,6 +621,8 @@ protected:
LLVector3 mUserLocation;
LLVector3 mUserLookAt;
ELandingType mLandingType;
+ BOOL mSeeAVs; // Avatars on this parcel are visible from outside it
+ BOOL mHaveNewParcelLimitData; // Remove once hidden AV feature is grid-wide
LLTimer mSaleTimerExpires;
LLTimer mMediaResetTimer;
@@ -661,6 +678,8 @@ protected:
BOOL mRegionPushOverride;
BOOL mRegionDenyAnonymousOverride;
BOOL mRegionDenyAgeUnverifiedOverride;
+ BOOL mAllowGroupAVSounds;
+ BOOL mAllowAnyAVSounds;
ParcelQuota mQuota;
diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h
index a61130132a..b1a917df73 100644
--- a/indra/llinventory/llparcelflags.h
+++ b/indra/llinventory/llparcelflags.h
@@ -126,5 +126,7 @@ const S32 PARCEL_DETAILS_DESC = 1;
const S32 PARCEL_DETAILS_OWNER = 2;
const S32 PARCEL_DETAILS_GROUP = 3;
const S32 PARCEL_DETAILS_AREA = 4;
+const S32 PARCEL_DETAILS_ID = 5;
+const S32 PARCEL_DETAILS_SEE_AVATARS = 6;
#endif
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/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index 9dadad7dd3..cd100cdf9f 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -12,6 +12,8 @@ include_directories(
set(llmath_SOURCE_FILES
llbbox.cpp
llbboxlocal.cpp
+ llcalc.cpp
+ llcalcparser.cpp
llcamera.cpp
llcoordframe.cpp
llline.cpp
@@ -46,6 +48,8 @@ set(llmath_HEADER_FILES
coordframe.h
llbbox.h
llbboxlocal.h
+ llcalc.h
+ llcalcparser.h
llcamera.h
llcoord.h
llcoordframe.h
diff --git a/indra/llmath/llcalc.cpp b/indra/llmath/llcalc.cpp
new file mode 100644
index 0000000000..1b2d609b67
--- /dev/null
+++ b/indra/llmath/llcalc.cpp
@@ -0,0 +1,162 @@
+/*
+ * LLCalc.cpp
+ * 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$
+ *
+ */
+
+#include "linden_common.h"
+
+#include "llcalc.h"
+
+#include "llcalcparser.h"
+#include "llmath.h"
+
+
+// Variable names for use in the build floater
+const char* LLCalc::X_POS = "PX";
+const char* LLCalc::Y_POS = "PY";
+const char* LLCalc::Z_POS = "PZ";
+const char* LLCalc::X_SCALE = "SX";
+const char* LLCalc::Y_SCALE = "SY";
+const char* LLCalc::Z_SCALE = "SZ";
+const char* LLCalc::X_ROT = "RX";
+const char* LLCalc::Y_ROT = "RY";
+const char* LLCalc::Z_ROT = "RZ";
+const char* LLCalc::HOLLOW = "HLW";
+const char* LLCalc::CUT_BEGIN = "CB";
+const char* LLCalc::CUT_END = "CE";
+const char* LLCalc::PATH_BEGIN = "PB";
+const char* LLCalc::PATH_END = "PE";
+const char* LLCalc::TWIST_BEGIN = "TB";
+const char* LLCalc::TWIST_END = "TE";
+const char* LLCalc::X_SHEAR = "SHX";
+const char* LLCalc::Y_SHEAR = "SHY";
+const char* LLCalc::X_TAPER = "TPX";
+const char* LLCalc::Y_TAPER = "TPY";
+const char* LLCalc::RADIUS_OFFSET = "ROF";
+const char* LLCalc::REVOLUTIONS = "REV";
+const char* LLCalc::SKEW = "SKW";
+const char* LLCalc::X_HOLE = "HLX";
+const char* LLCalc::Y_HOLE = "HLY";
+const char* LLCalc::TEX_U_SCALE = "TSU";
+const char* LLCalc::TEX_V_SCALE = "TSV";
+const char* LLCalc::TEX_U_OFFSET = "TOU";
+const char* LLCalc::TEX_V_OFFSET = "TOV";
+const char* LLCalc::TEX_ROTATION = "TROT";
+const char* LLCalc::TEX_TRANSPARENCY = "TRNS";
+const char* LLCalc::TEX_GLOW = "GLOW";
+
+
+LLCalc* LLCalc::sInstance = NULL;
+
+LLCalc::LLCalc() : mLastErrorPos(0)
+{
+ // Init table of constants
+ mConstants["PI"] = F_PI;
+ mConstants["TWO_PI"] = F_TWO_PI;
+ mConstants["PI_BY_TWO"] = F_PI_BY_TWO;
+ mConstants["SQRT_TWO_PI"] = F_SQRT_TWO_PI;
+ mConstants["SQRT2"] = F_SQRT2;
+ mConstants["SQRT3"] = F_SQRT3;
+ mConstants["DEG_TO_RAD"] = DEG_TO_RAD;
+ mConstants["RAD_TO_DEG"] = RAD_TO_DEG;
+ mConstants["GRAVITY"] = GRAVITY;
+}
+
+LLCalc::~LLCalc()
+{
+}
+
+//static
+void LLCalc::cleanUp()
+{
+ delete sInstance;
+ sInstance = NULL;
+}
+
+//static
+LLCalc* LLCalc::getInstance()
+{
+ if (!sInstance) sInstance = new LLCalc();
+ return sInstance;
+}
+
+void LLCalc::setVar(const std::string& name, const F32& value)
+{
+ mVariables[name] = value;
+}
+
+void LLCalc::clearVar(const std::string& name)
+{
+ mVariables.erase(name);
+}
+
+void LLCalc::clearAllVariables()
+{
+ mVariables.clear();
+}
+
+/*
+void LLCalc::updateVariables(LLSD& vars)
+{
+ LLSD::map_iterator cIt = vars.beginMap();
+ for(; cIt != vars.endMap(); cIt++)
+ {
+ setVar(cIt->first, (F32)(LLSD::Real)cIt->second);
+ }
+}
+*/
+
+bool LLCalc::evalString(const std::string& expression, F32& result)
+{
+ std::string expr_upper = expression;
+ LLStringUtil::toUpper(expr_upper);
+
+ LLCalcParser calc(result, &mConstants, &mVariables);
+
+ mLastErrorPos = 0;
+ std::string::iterator start = expr_upper.begin();
+ parse_info<std::string::iterator> info;
+
+ try
+ {
+ info = parse(start, expr_upper.end(), calc, space_p);
+ lldebugs << "Math expression: " << expression << " = " << result << llendl;
+ }
+ catch(parser_error<std::string, std::string::iterator> &e)
+ {
+ mLastErrorPos = e.where - expr_upper.begin();
+
+ llinfos << "Calc parser exception: " << e.descriptor << " at " << mLastErrorPos << " in expression: " << expression << llendl;
+ return false;
+ }
+
+ if (!info.full)
+ {
+ mLastErrorPos = info.stop - expr_upper.begin();
+ llinfos << "Unhandled syntax error at " << mLastErrorPos << " in expression: " << expression << llendl;
+ return false;
+ }
+
+ return true;
+}
diff --git a/indra/llmath/llcalc.h b/indra/llmath/llcalc.h
new file mode 100644
index 0000000000..ceb9dce585
--- /dev/null
+++ b/indra/llmath/llcalc.h
@@ -0,0 +1,100 @@
+/*
+ * LLCalc.h
+ * 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$
+ *
+ */
+
+#ifndef LL_CALC_H
+#define LL_CALC_H
+
+#include <map>
+#include <string>
+
+class LLCalc
+{
+public:
+ LLCalc();
+ ~LLCalc();
+
+ // Variable name constants
+ static const char* X_POS;
+ static const char* Y_POS;
+ static const char* Z_POS;
+ static const char* X_SCALE;
+ static const char* Y_SCALE;
+ static const char* Z_SCALE;
+ static const char* X_ROT;
+ static const char* Y_ROT;
+ static const char* Z_ROT;
+ static const char* HOLLOW;
+ static const char* CUT_BEGIN;
+ static const char* CUT_END;
+ static const char* PATH_BEGIN;
+ static const char* PATH_END;
+ static const char* TWIST_BEGIN;
+ static const char* TWIST_END;
+ static const char* X_SHEAR;
+ static const char* Y_SHEAR;
+ static const char* X_TAPER;
+ static const char* Y_TAPER;
+ static const char* RADIUS_OFFSET;
+ static const char* REVOLUTIONS;
+ static const char* SKEW;
+ static const char* X_HOLE;
+ static const char* Y_HOLE;
+ static const char* TEX_U_SCALE;
+ static const char* TEX_V_SCALE;
+ static const char* TEX_U_OFFSET;
+ static const char* TEX_V_OFFSET;
+ static const char* TEX_ROTATION;
+ static const char* TEX_TRANSPARENCY;
+ static const char* TEX_GLOW;
+
+ void setVar(const std::string& name, const F32& value);
+ void clearVar(const std::string& name);
+ void clearAllVariables();
+// void updateVariables(LLSD& vars);
+
+ bool evalString(const std::string& expression, F32& result);
+ std::string::size_type getLastErrorPos() { return mLastErrorPos; }
+
+ static LLCalc* getInstance();
+ static void cleanUp();
+
+ typedef std::map<std::string, F32> calc_map_t;
+
+private:
+ std::string::size_type mLastErrorPos;
+
+ calc_map_t mConstants;
+ calc_map_t mVariables;
+
+ // *TODO: Add support for storing user defined variables, and stored functions.
+ // Will need UI work, and a means to save them between sessions.
+// calc_map_t mUserVariables;
+
+ // "There shall be only one"
+ static LLCalc* sInstance;
+};
+
+#endif // LL_CALC_H
diff --git a/indra/llmath/llcalcparser.cpp b/indra/llmath/llcalcparser.cpp
new file mode 100644
index 0000000000..b4ca320659
--- /dev/null
+++ b/indra/llmath/llcalcparser.cpp
@@ -0,0 +1,63 @@
+/*
+ * LLCalcParser.cpp
+ * 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$
+ *
+ */
+
+#include "linden_common.h"
+
+#include "llcalcparser.h"
+using namespace boost::spirit::classic;
+
+F32 LLCalcParser::lookup(const std::string::iterator& start, const std::string::iterator& end) const
+{
+ LLCalc::calc_map_t::iterator iter;
+
+ std::string name(start, end);
+
+ if (mConstants)
+ {
+ iter = mConstants->find(name);
+ if (iter != mConstants->end())
+ {
+ return (*iter).second;
+ }
+ }
+ else
+ {
+ // This should never happen!
+ throw_(end, std::string("Missing constants table"));
+ }
+
+ if (mVariables)
+ {
+ iter = mVariables->find(name);
+ if (iter != mVariables->end())
+ {
+ return (*iter).second;
+ }
+ }
+
+ throw_(end, std::string("Unknown symbol " + name));
+ return 0.f;
+}
diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h
new file mode 100644
index 0000000000..bd9c8c2519
--- /dev/null
+++ b/indra/llmath/llcalcparser.h
@@ -0,0 +1,191 @@
+/*
+ * LLCalcParser.h
+ * 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$
+ *
+ */
+
+#ifndef LL_CALCPARSER_H
+#define LL_CALCPARSER_H
+
+#include <boost/spirit/include/classic_attribute.hpp>
+#include <boost/spirit/include/classic_core.hpp>
+#include <boost/spirit/include/classic_error_handling.hpp>
+#include <boost/spirit/include/classic_position_iterator.hpp>
+#include <boost/spirit/include/phoenix1_binders.hpp>
+#include <boost/spirit/include/classic_symbols.hpp>
+using namespace boost::spirit::classic;
+
+#include "llcalc.h"
+#include "llmath.h"
+
+struct LLCalcParser : grammar<LLCalcParser>
+{
+ LLCalcParser(F32& result, LLCalc::calc_map_t* constants, LLCalc::calc_map_t* vars) :
+ mResult(result), mConstants(constants), mVariables(vars) {};
+
+ struct value_closure : closure<value_closure, F32>
+ {
+ member1 value;
+ };
+
+ template <typename ScannerT>
+ struct definition
+ {
+ // Rule declarations
+ rule<ScannerT> statement, identifier;
+ rule<ScannerT, value_closure::context_t> expression, term,
+ power,
+ unary_expr,
+ factor,
+ unary_func,
+ binary_func,
+ group;
+
+ // start() should return the starting symbol
+ rule<ScannerT> const& start() const { return statement; }
+
+ definition(LLCalcParser const& self)
+ {
+ using namespace phoenix;
+
+ assertion<std::string> assert_domain("Domain error");
+// assertion<std::string> assert_symbol("Unknown symbol");
+ assertion<std::string> assert_syntax("Syntax error");
+
+ identifier =
+ lexeme_d[(alpha_p | '_') >> *(alnum_p | '_')]
+ ;
+
+ group =
+ '(' >> expression[group.value = arg1] >> assert_syntax(ch_p(')'))
+ ;
+
+ unary_func =
+ ((str_p("SIN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_sin)(self,arg1)]) |
+ (str_p("COS") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_cos)(self,arg1)]) |
+ (str_p("TAN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_tan)(self,arg1)]) |
+ (str_p("ASIN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_asin)(self,arg1)]) |
+ (str_p("ACOS") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_acos)(self,arg1)]) |
+ (str_p("ATAN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_atan)(self,arg1)]) |
+ (str_p("SQRT") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_sqrt)(self,arg1)]) |
+ (str_p("LOG") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_log)(self,arg1)]) |
+ (str_p("EXP") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_exp)(self,arg1)]) |
+ (str_p("ABS") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_fabs)(self,arg1)]) |
+ (str_p("FLR") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_floor)(self,arg1)]) |
+ (str_p("CEIL") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_ceil)(self,arg1)])
+ ) >> assert_syntax(ch_p(')'))
+ ;
+
+ binary_func =
+ ((str_p("ATAN2") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
+ expression[binary_func.value = bind(&LLCalcParser::_atan2)(self, binary_func.value, arg1)]) |
+ (str_p("MIN") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
+ expression[binary_func.value = bind(&LLCalcParser::_min)(self, binary_func.value, arg1)]) |
+ (str_p("MAX") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
+ expression[binary_func.value = bind(&LLCalcParser::_max)(self, binary_func.value, arg1)])
+ ) >> assert_syntax(ch_p(')'))
+ ;
+
+ // *TODO: Localisation of the decimal point?
+ // Problem, LLLineEditor::postvalidateFloat accepts a comma when appropriate
+ // for the current locale. However to do that here could clash with using
+ // the comma as a separator when passing arguments to functions.
+ factor =
+ (ureal_p[factor.value = arg1] |
+ group[factor.value = arg1] |
+ unary_func[factor.value = arg1] |
+ binary_func[factor.value = arg1] |
+ // Lookup throws an Unknown Symbol error if it is unknown, while this works fine,
+ // would be "neater" to handle symbol lookup from here with an assertive parser.
+// constants_p[factor.value = arg1]|
+ identifier[factor.value = bind(&LLCalcParser::lookup)(self, arg1, arg2)]
+ ) >>
+ // Detect and throw math errors.
+ assert_domain(eps_p(bind(&LLCalcParser::checkNaN)(self, factor.value)))
+ ;
+
+ unary_expr =
+ !ch_p('+') >> factor[unary_expr.value = arg1] |
+ '-' >> factor[unary_expr.value = -arg1]
+ ;
+
+ power =
+ unary_expr[power.value = arg1] >>
+ *('^' >> assert_syntax(unary_expr[power.value = bind(&powf)(power.value, arg1)]))
+ ;
+
+ term =
+ power[term.value = arg1] >>
+ *(('*' >> assert_syntax(power[term.value *= arg1])) |
+ ('/' >> assert_syntax(power[term.value /= arg1])) |
+ ('%' >> assert_syntax(power[term.value = bind(&fmodf)(term.value, arg1)]))
+ )
+ ;
+
+ expression =
+ assert_syntax(term[expression.value = arg1]) >>
+ *(('+' >> assert_syntax(term[expression.value += arg1])) |
+ ('-' >> assert_syntax(term[expression.value -= arg1]))
+ )
+ ;
+
+ statement =
+ !ch_p('=') >> ( expression )[var(self.mResult) = arg1] >> (end_p)
+ ;
+ }
+ };
+
+private:
+ // Member functions for semantic actions
+ F32 lookup(const std::string::iterator&, const std::string::iterator&) const;
+ F32 _min(const F32& a, const F32& b) const { return llmin(a, b); }
+ F32 _max(const F32& a, const F32& b) const { return llmax(a, b); }
+
+ bool checkNaN(const F32& a) const { return !llisnan(a); }
+
+ //FIX* non ambigious function fix making SIN() work for calc -Cryogenic Blitz
+ F32 _sin(const F32& a) const { return sin(DEG_TO_RAD * a); }
+ F32 _cos(const F32& a) const { return cos(DEG_TO_RAD * a); }
+ F32 _tan(const F32& a) const { return tan(DEG_TO_RAD * a); }
+ F32 _asin(const F32& a) const { return asin(a * RAD_TO_DEG); }
+ F32 _acos(const F32& a) const { return acos(a * RAD_TO_DEG); }
+ F32 _atan(const F32& a) const { return atan(a * RAD_TO_DEG); }
+ F32 _sqrt(const F32& a) const { return sqrt(a); }
+ F32 _log(const F32& a) const { return log(a); }
+ F32 _exp(const F32& a) const { return exp(a); }
+ F32 _fabs(const F32& a) const { return fabs(a); }
+ F32 _floor(const F32& a) const { return llfloor(a); }
+ F32 _ceil(const F32& a) const { return llceil(a); }
+
+ F32 _atan2(const F32& a,const F32& b) const { return atan2(a,b); }
+
+
+
+ LLCalc::calc_map_t* mConstants;
+ LLCalc::calc_map_t* mVariables;
+// LLCalc::calc_map_t* mUserVariables;
+
+ F32& mResult;
+};
+
+#endif // LL_CALCPARSER_H
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 8c81f27784..2893e746e9 100644..100755
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -32,6 +32,7 @@
#if !LL_WINDOWS
#include <stdint.h>
#endif
+#include <cmath>
#include "llerror.h"
#include "llmemtype.h"
@@ -2379,11 +2380,16 @@ bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)co
bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs, F32 angle_cutoff) const
{
bool retval = false;
- if (rhs.mData[POSITION].equals3(mData[POSITION]) && rhs.mTexCoord == mTexCoord)
+
+ const F32 epsilon = 0.00001f;
+
+ if (rhs.mData[POSITION].equals3(mData[POSITION], epsilon) &&
+ fabs(rhs.mTexCoord[0]-mTexCoord[0]) < epsilon &&
+ fabs(rhs.mTexCoord[1]-mTexCoord[1]) < epsilon)
{
if (angle_cutoff > 1.f)
{
- retval = (mData[NORMAL].equals3(rhs.mData[NORMAL]));
+ retval = (mData[NORMAL].equals3(rhs.mData[NORMAL], epsilon));
}
else
{
@@ -2499,38 +2505,52 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
}
{
- U16* n = (U16*) &(norm[0]);
- for (U32 j = 0; j < num_verts; ++j)
+ if (!norm.empty())
{
- norm_out->set((F32) n[0], (F32) n[1], (F32) n[2]);
- norm_out->div(65535.f);
- norm_out->mul(2.f);
- norm_out->sub(1.f);
- norm_out++;
- n += 3;
+ U16* n = (U16*) &(norm[0]);
+ for (U32 j = 0; j < num_verts; ++j)
+ {
+ norm_out->set((F32) n[0], (F32) n[1], (F32) n[2]);
+ norm_out->div(65535.f);
+ norm_out->mul(2.f);
+ norm_out->sub(1.f);
+ norm_out++;
+ n += 3;
+ }
+ }
+ else
+ {
+ memset(norm_out, 0, sizeof(LLVector4a)*num_verts);
}
}
{
- U16* t = (U16*) &(tc[0]);
- for (U32 j = 0; j < num_verts; j+=2)
+ if (!tc.empty())
{
- if (j < num_verts-1)
- {
- tc_out->set((F32) t[0], (F32) t[1], (F32) t[2], (F32) t[3]);
- }
- else
+ U16* t = (U16*) &(tc[0]);
+ for (U32 j = 0; j < num_verts; j+=2)
{
- tc_out->set((F32) t[0], (F32) t[1], 0.f, 0.f);
- }
+ if (j < num_verts-1)
+ {
+ tc_out->set((F32) t[0], (F32) t[1], (F32) t[2], (F32) t[3]);
+ }
+ else
+ {
+ tc_out->set((F32) t[0], (F32) t[1], 0.f, 0.f);
+ }
- t += 4;
+ t += 4;
- tc_out->div(65535.f);
- tc_out->mul(tc_range);
- tc_out->add(min_tc4);
+ tc_out->div(65535.f);
+ tc_out->mul(tc_range);
+ tc_out->add(min_tc4);
- tc_out++;
+ tc_out++;
+ }
+ }
+ else
+ {
+ memset(tc_out, 0, sizeof(LLVector2)*num_verts);
}
}
@@ -2656,6 +2676,25 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
min.setMin(min, face.mPositions[i]);
max.setMax(max, face.mPositions[i]);
}
+
+ if (face.mTexCoords)
+ {
+ LLVector2& min_tc = face.mTexCoordExtents[0];
+ LLVector2& max_tc = face.mTexCoordExtents[1];
+
+ min_tc = face.mTexCoords[0];
+ max_tc = face.mTexCoords[0];
+
+ for (U32 j = 1; j < face.mNumVertices; ++j)
+ {
+ update_min_max(min_tc, max_tc, face.mTexCoords[j]);
+ }
+ }
+ else
+ {
+ face.mTexCoordExtents[0].set(0,0);
+ face.mTexCoordExtents[1].set(1,1);
+ }
}
}
}
@@ -2735,11 +2774,13 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 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]);
@@ -2758,11 +2799,14 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 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]);
@@ -2780,10 +2824,13 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 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]);
@@ -2802,10 +2849,13 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 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++)
@@ -3253,7 +3303,7 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components,
{
F32 area = sculptGetSurfaceArea();
- const F32 SCULPT_MAX_AREA = 32.f;
+ const F32 SCULPT_MAX_AREA = 384.f;
if (area < SCULPT_MIN_AREA || area > SCULPT_MAX_AREA)
{
@@ -5574,7 +5624,16 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src)
LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size);
LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size);
- LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, tc_size);
+
+ if(src.mTexCoords)
+ {
+ LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, tc_size);
+ }
+ else
+ {
+ ll_aligned_free_16(mTexCoords) ;
+ mTexCoords = NULL ;
+ }
if (src.mBinormals)
@@ -5696,8 +5755,23 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv)
{
cv.setPosition(mPositions[index]);
- cv.setNormal(mNormals[index]);
- cv.mTexCoord = mTexCoords[index];
+ if (mNormals)
+ {
+ cv.setNormal(mNormals[index]);
+ }
+ else
+ {
+ cv.getNormal().clear();
+ }
+
+ if (mTexCoords)
+ {
+ cv.mTexCoord = mTexCoords[index];
+ }
+ else
+ {
+ cv.mTexCoord.clear();
+ }
}
bool LLVolumeFace::VertexMapData::operator==(const LLVolumeFace::VertexData& rhs) const
@@ -5727,7 +5801,10 @@ void LLVolumeFace::optimize(F32 angle_cutoff)
LLVolumeFace new_face;
//map of points to vector of vertices at that point
- VertexMapData::PointMap point_map;
+ std::map<U64, std::vector<VertexMapData> > point_map;
+
+ LLVector4a range;
+ range.setSub(mExtents[1],mExtents[0]);
//remove redundant vertices
for (U32 i = 0; i < mNumIndices; ++i)
@@ -5738,7 +5815,19 @@ void LLVolumeFace::optimize(F32 angle_cutoff)
getVertexData(index, cv);
BOOL found = FALSE;
- VertexMapData::PointMap::iterator point_iter = point_map.find(LLVector3(cv.getPosition().getF32ptr()));
+
+ LLVector4a pos;
+ pos.setSub(mPositions[index], mExtents[0]);
+ pos.div(range);
+
+ U64 pos64 = 0;
+
+ pos64 = (U16) (pos[0]*65535);
+ pos64 = pos64 | (((U64) (pos[1]*65535)) << 16);
+ pos64 = pos64 | (((U64) (pos[2]*65535)) << 32);
+
+ std::map<U64, std::vector<VertexMapData> >::iterator point_iter = point_map.find(pos64);
+
if (point_iter != point_map.end())
{ //duplicate point might exist
for (U32 j = 0; j < point_iter->second.size(); ++j)
@@ -5770,11 +5859,26 @@ void LLVolumeFace::optimize(F32 angle_cutoff)
}
else
{
- point_map[LLVector3(d.getPosition().getF32ptr())].push_back(d);
+ point_map[pos64].push_back(d);
}
}
}
+ llassert(new_face.mNumIndices == mNumIndices);
+ llassert(new_face.mNumVertices <= mNumVertices);
+
+ if (angle_cutoff > 1.f && !mNormals)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!mTexCoords)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
swapData(new_face);
}
diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp
index c60b750088..42180197fe 100644
--- a/indra/llmath/llvolumemgr.cpp
+++ b/indra/llmath/llvolumemgr.cpp
@@ -49,7 +49,7 @@ LLVolumeMgr::LLVolumeMgr()
{
// the LLMutex magic interferes with easy unit testing,
// so you now must manually call useMutex() to use it
- //mDataMutex = new LLMutex(gAPRPoolp);
+ //mDataMutex = new LLMutex;
}
LLVolumeMgr::~LLVolumeMgr()
@@ -216,7 +216,7 @@ void LLVolumeMgr::useMutex()
{
if (!mDataMutex)
{
- mDataMutex = new LLMutex(gAPRPoolp);
+ mDataMutex = new LLMutex;
}
}
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/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index c5f82cf052..0f40a670fa 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -65,6 +65,7 @@ set(llmessage_SOURCE_FILES
llpacketbuffer.cpp
llpacketring.cpp
llpartdata.cpp
+ llproxy.cpp
llpumpio.cpp
llregionpresenceverifier.cpp
llsdappservices.cpp
@@ -161,6 +162,7 @@ set(llmessage_HEADER_FILES
llpacketring.h
llpartdata.h
llpumpio.h
+ llproxy.h
llqueryflags.h
llregionflags.h
llregionhandle.h
diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp
index 5a67035ed1..fab9858b69 100644
--- a/indra/llmessage/llares.cpp
+++ b/indra/llmessage/llares.cpp
@@ -28,6 +28,7 @@
#include "linden_common.h"
#include "llares.h"
+#include "llscopedvolatileaprpool.h"
#include <ares_dns.h>
#include <ares_version.h>
@@ -464,11 +465,6 @@ void LLAres::search(const std::string &query, LLResType type,
bool LLAres::process(U64 timeout)
{
- if (!gAPRPoolp)
- {
- ll_init_apr();
- }
-
ares_socket_t socks[ARES_GETSOCK_MAXNUM];
apr_pollfd_t aprFds[ARES_GETSOCK_MAXNUM];
apr_int32_t nsds = 0;
@@ -482,10 +478,7 @@ bool LLAres::process(U64 timeout)
return nsds > 0;
}
- apr_status_t status;
- LLAPRPool pool;
- status = pool.getStatus() ;
- ll_apr_assert_status(status);
+ LLScopedVolatileAPRPool scoped_pool;
for (int i = 0; i < ARES_GETSOCK_MAXNUM; i++)
{
@@ -502,7 +495,7 @@ bool LLAres::process(U64 timeout)
apr_socket_t *aprSock = NULL;
- status = apr_os_sock_put(&aprSock, (apr_os_sock_t *) &socks[i], pool.getAPRPool());
+ apr_status_t status = apr_os_sock_put(&aprSock, (apr_os_sock_t *) &socks[i], scoped_pool);
if (status != APR_SUCCESS)
{
ll_apr_warn_status(status);
@@ -511,7 +504,7 @@ bool LLAres::process(U64 timeout)
aprFds[nactive].desc.s = aprSock;
aprFds[nactive].desc_type = APR_POLL_SOCKET;
- aprFds[nactive].p = pool.getAPRPool();
+ aprFds[nactive].p = scoped_pool;
aprFds[nactive].rtnevents = 0;
aprFds[nactive].client_data = &socks[i];
@@ -520,7 +513,7 @@ bool LLAres::process(U64 timeout)
if (nactive > 0)
{
- status = apr_poll(aprFds, nactive, &nsds, timeout);
+ apr_status_t status = apr_poll(aprFds, nactive, &nsds, timeout);
if (status != APR_SUCCESS && status != APR_TIMEUP)
{
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index 7c8b7e3584..a3de178d78 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -1,5 +1,5 @@
/**
- * @file llcurl.h
+ * @file llcurl.cpp
* @author Zero / Donovan
* @date 2006-10-15
* @brief Implementation of wrapper around libcurl.
@@ -46,8 +46,9 @@
#endif
#include "llbufferstream.h"
-#include "llstl.h"
+#include "llproxy.h"
#include "llsdserialize.h"
+#include "llstl.h"
#include "llthread.h"
#include "lltimer.h"
@@ -74,6 +75,7 @@ static const S32 MULTI_PERFORM_CALL_REPEAT = 5;
static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds
static const S32 MAX_ACTIVE_REQUEST_COUNT = 100;
+static
// DEBUG //
S32 gCurlEasyCount = 0;
S32 gCurlMultiCount = 0;
@@ -85,6 +87,9 @@ std::vector<LLMutex*> LLCurl::sSSLMutex;
std::string LLCurl::sCAPath;
std::string LLCurl::sCAFile;
+bool LLCurl::sMultiThreaded = false;
+static U32 sMainThreadID = 0;
+
void check_curl_code(CURLcode code)
{
if (code != CURLE_OK)
@@ -204,7 +209,7 @@ namespace boost
void intrusive_ptr_release(LLCurl::Responder* p)
{
- if(p && 0 == --p->mReferenceCount)
+ if (p && 0 == --p->mReferenceCount)
{
delete p;
}
@@ -214,73 +219,6 @@ namespace boost
//////////////////////////////////////////////////////////////////////////////
-
-class LLCurl::Easy
-{
- LOG_CLASS(Easy);
-
-private:
- Easy();
-
-public:
- static Easy* getEasy();
- ~Easy();
-
- CURL* getCurlHandle() const { return mCurlEasyHandle; }
-
- void setErrorBuffer();
- void setCA();
-
- void setopt(CURLoption option, S32 value);
- // These assume the setter does not free value!
- void setopt(CURLoption option, void* value);
- void setopt(CURLoption option, char* value);
- // Copies the string so that it is gauranteed to stick around
- void setoptString(CURLoption option, const std::string& value);
-
- void slist_append(const char* str);
- void setHeaders();
-
- U32 report(CURLcode);
- void getTransferInfo(LLCurl::TransferInfo* info);
-
- void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, bool post = false);
-
- const char* getErrorBuffer();
-
- std::stringstream& getInput() { return mInput; }
- std::stringstream& getHeaderOutput() { return mHeaderOutput; }
- LLIOPipe::buffer_ptr_t& getOutput() { return mOutput; }
- const LLChannelDescriptors& getChannels() { return mChannels; }
-
- void resetState();
-
- static CURL* allocEasyHandle();
- static void releaseEasyHandle(CURL* handle);
-
-private:
- friend class LLCurl;
-
- CURL* mCurlEasyHandle;
- struct curl_slist* mHeaders;
-
- std::stringstream mRequest;
- LLChannelDescriptors mChannels;
- LLIOPipe::buffer_ptr_t mOutput;
- std::stringstream mInput;
- std::stringstream mHeaderOutput;
- char mErrorBuffer[CURL_ERROR_SIZE];
-
- // Note: char*'s not strings since we pass pointers to curl
- std::vector<char*> mStrings;
-
- ResponderPtr mResponder;
-
- static std::set<CURL*> sFreeHandles;
- static std::set<CURL*> sActiveHandles;
- static LLMutex* sHandleMutex;
-};
-
std::set<CURL*> LLCurl::Easy::sFreeHandles;
std::set<CURL*> LLCurl::Easy::sActiveHandles;
LLMutex* LLCurl::Easy::sHandleMutex = NULL;
@@ -404,11 +342,11 @@ const char* LLCurl::Easy::getErrorBuffer()
void LLCurl::Easy::setCA()
{
- if(!sCAPath.empty())
+ if (!sCAPath.empty())
{
setoptString(CURLOPT_CAPATH, sCAPath);
}
- if(!sCAFile.empty())
+ if (!sCAFile.empty())
{
setoptString(CURLOPT_CAINFO, sCAFile);
}
@@ -525,15 +463,18 @@ size_t curlHeaderCallback(void* data, size_t size, size_t nmemb, void* user_data
void LLCurl::Easy::prepRequest(const std::string& url,
const std::vector<std::string>& headers,
- ResponderPtr responder, bool post)
+ ResponderPtr responder, S32 time_out, bool post)
{
resetState();
if (post) setoptString(CURLOPT_ENCODING, "");
- //setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
+ //setopt(CURLOPT_VERBOSE, 1); // useful for debugging
setopt(CURLOPT_NOSIGNAL, 1);
+ // Set the CURL options for either Socks or HTTP proxy
+ LLProxy::getInstance()->applyProxySettings(this);
+
mOutput.reset(new LLBufferArray);
setopt(CURLOPT_WRITEFUNCTION, (void*)&curlWriteCallback);
setopt(CURLOPT_WRITEDATA, (void*)this);
@@ -545,7 +486,7 @@ void LLCurl::Easy::prepRequest(const std::string& url,
setopt(CURLOPT_HEADERDATA, (void*)this);
// Allow up to five redirects
- if(responder && responder->followRedir())
+ if (responder && responder->followRedir())
{
setopt(CURLOPT_FOLLOWLOCATION, 1);
setopt(CURLOPT_MAXREDIRS, MAX_REDIRECTS);
@@ -579,44 +520,24 @@ void LLCurl::Easy::prepRequest(const std::string& url,
////////////////////////////////////////////////////////////////////////////
-class LLCurl::Multi
+LLCurl::Multi::Multi()
+ : LLThread("Curl Multi"),
+ mQueued(0),
+ mErrorCount(0),
+ mPerformState(PERFORM_STATE_READY)
{
- LOG_CLASS(Multi);
-public:
-
- Multi();
- ~Multi();
-
- Easy* allocEasy();
- bool addEasy(Easy* easy);
-
- void removeEasy(Easy* easy);
+ mQuitting = false;
- S32 process();
- S32 perform();
-
- CURLMsg* info_read(S32* msgs_in_queue);
-
- S32 mQueued;
- S32 mErrorCount;
-
-private:
- void easyFree(Easy*);
-
- CURLM* mCurlMultiHandle;
-
- typedef std::set<Easy*> easy_active_list_t;
- easy_active_list_t mEasyActiveList;
- typedef std::map<CURL*, Easy*> easy_active_map_t;
- easy_active_map_t mEasyActiveMap;
- typedef std::set<Easy*> easy_free_list_t;
- easy_free_list_t mEasyFreeList;
-};
+ mThreaded = LLCurl::sMultiThreaded && LLThread::currentID() == sMainThreadID;
+ if (mThreaded)
+ {
+ mSignal = new LLCondition();
+ }
+ else
+ {
+ mSignal = NULL;
+ }
-LLCurl::Multi::Multi()
- : mQueued(0),
- mErrorCount(0)
-{
mCurlMultiHandle = curl_multi_init();
if (!mCurlMultiHandle)
{
@@ -630,6 +551,11 @@ LLCurl::Multi::Multi()
LLCurl::Multi::~Multi()
{
+ llassert(isStopped());
+
+ delete mSignal;
+ mSignal = NULL;
+
// Clean up active
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
iter != mEasyActiveList.end(); ++iter)
@@ -655,13 +581,42 @@ CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue)
return curlmsg;
}
+void LLCurl::Multi::perform()
+{
+ if (mThreaded)
+ {
+ if (mPerformState == PERFORM_STATE_READY)
+ {
+ mSignal->signal();
+ }
+ }
+ else
+ {
+ doPerform();
+ }
+}
-S32 LLCurl::Multi::perform()
+void LLCurl::Multi::run()
+{
+ llassert(mThreaded);
+
+ while (!mQuitting)
+ {
+ mSignal->wait();
+ mPerformState = PERFORM_STATE_PERFORMING;
+ if (!mQuitting)
+ {
+ doPerform();
+ }
+ }
+}
+
+void LLCurl::Multi::doPerform()
{
S32 q = 0;
for (S32 call_count = 0;
- call_count < MULTI_PERFORM_CALL_REPEAT;
- call_count += 1)
+ call_count < MULTI_PERFORM_CALL_REPEAT;
+ call_count += 1)
{
CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q);
if (CURLM_CALL_MULTI_PERFORM != code || q == 0)
@@ -672,13 +627,18 @@ S32 LLCurl::Multi::perform()
}
mQueued = q;
- return q;
+ mPerformState = PERFORM_STATE_COMPLETED;
}
S32 LLCurl::Multi::process()
{
perform();
-
+
+ if (mPerformState != PERFORM_STATE_COMPLETED)
+ {
+ return 0;
+ }
+
CURLMsg* msg;
int msgs_in_queue;
@@ -709,6 +669,8 @@ S32 LLCurl::Multi::process()
}
}
}
+
+ mPerformState = PERFORM_STATE_READY;
return processed;
}
@@ -787,6 +749,21 @@ LLCurlRequest::LLCurlRequest() :
LLCurlRequest::~LLCurlRequest()
{
llassert_always(mThreadID == LLThread::currentID());
+
+ //stop all Multi handle background threads
+ for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ++iter)
+ {
+ LLCurl::Multi* multi = *iter;
+ multi->mQuitting = true;
+ if (multi->mThreaded)
+ {
+ while (!multi->isStopped())
+ {
+ multi->mSignal->signal();
+ apr_sleep(1000);
+ }
+ }
+ }
for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer());
}
@@ -794,6 +771,10 @@ void LLCurlRequest::addMulti()
{
llassert_always(mThreadID == LLThread::currentID());
LLCurl::Multi* multi = new LLCurl::Multi();
+ if (multi->mThreaded)
+ {
+ multi->start();
+ }
mMultiSet.insert(multi);
mActiveMulti = multi;
mActiveRequestCount = 0;
@@ -855,14 +836,14 @@ bool LLCurlRequest::getByteRange(const std::string& url,
bool LLCurlRequest::post(const std::string& url,
const headers_t& headers,
const LLSD& data,
- LLCurl::ResponderPtr responder)
+ LLCurl::ResponderPtr responder, S32 time_out)
{
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
return false;
}
- easy->prepRequest(url, headers, responder);
+ easy->prepRequest(url, headers, responder, time_out);
LLSDSerialize::toXML(data, easy->getInput());
S32 bytes = easy->getInput().str().length();
@@ -882,14 +863,14 @@ bool LLCurlRequest::post(const std::string& url,
bool LLCurlRequest::post(const std::string& url,
const headers_t& headers,
const std::string& data,
- LLCurl::ResponderPtr responder)
+ LLCurl::ResponderPtr responder, S32 time_out)
{
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
return false;
}
- easy->prepRequest(url, headers, responder);
+ easy->prepRequest(url, headers, responder, time_out);
easy->getInput().write(data.data(), data.size());
S32 bytes = easy->getInput().str().length();
@@ -923,6 +904,16 @@ S32 LLCurlRequest::process()
if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0)
{
mMultiSet.erase(curiter);
+ multi->mQuitting = true;
+ if (multi->mThreaded)
+ {
+ while (!multi->isStopped())
+ {
+ multi->mSignal->signal();
+ apr_sleep(1000);
+ }
+ }
+
delete multi;
}
}
@@ -940,6 +931,10 @@ S32 LLCurlRequest::getQueued()
curlmulti_set_t::iterator curiter = iter++;
LLCurl::Multi* multi = *curiter;
queued += multi->mQueued;
+ if (multi->mPerformState != LLCurl::Multi::PERFORM_STATE_READY)
+ {
+ ++queued;
+ }
}
return queued;
}
@@ -953,16 +948,31 @@ LLCurlEasyRequest::LLCurlEasyRequest()
mResultReturned(false)
{
mMulti = new LLCurl::Multi();
+ if (mMulti->mThreaded)
+ {
+ mMulti->start();
+ }
mEasy = mMulti->allocEasy();
if (mEasy)
{
mEasy->setErrorBuffer();
mEasy->setCA();
+ // Set proxy settings if configured to do so.
+ LLProxy::getInstance()->applyProxySettings(mEasy);
}
}
LLCurlEasyRequest::~LLCurlEasyRequest()
{
+ mMulti->mQuitting = true;
+ if (mMulti->mThreaded)
+ {
+ while (!mMulti->isStopped())
+ {
+ mMulti->mSignal->signal();
+ apr_sleep(1000);
+ }
+ }
delete mMulti;
}
@@ -1059,14 +1069,20 @@ void LLCurlEasyRequest::requestComplete()
}
}
-S32 LLCurlEasyRequest::perform()
+void LLCurlEasyRequest::perform()
{
- return mMulti->perform();
+ mMulti->perform();
}
// Usage: Call getRestult until it returns false (no more messages)
bool LLCurlEasyRequest::getResult(CURLcode* result, LLCurl::TransferInfo* info)
{
+ if (mMulti->mPerformState != LLCurl::Multi::PERFORM_STATE_COMPLETED)
+ { //we're busy, try again later
+ return false;
+ }
+ mMulti->mPerformState = LLCurl::Multi::PERFORM_STATE_READY;
+
if (!mEasy)
{
// Special case - we failed to initialize a curl_easy (can happen if too many open files)
@@ -1151,8 +1167,10 @@ unsigned long LLCurl::ssl_thread_id(void)
}
#endif
-void LLCurl::initClass()
+void LLCurl::initClass(bool multi_threaded)
{
+ sMainThreadID = LLThread::currentID();
+ sMultiThreaded = multi_threaded;
// Do not change this "unless you are familiar with and mean to control
// internal operations of libcurl"
// - http://curl.haxx.se/libcurl/c/curl_global_init.html
@@ -1160,13 +1178,13 @@ void LLCurl::initClass()
check_curl_code(code);
- Easy::sHandleMutex = new LLMutex(NULL);
+ Easy::sHandleMutex = new LLMutex();
#if SAFE_SSL
S32 mutex_count = CRYPTO_num_locks();
for (S32 i=0; i<mutex_count; i++)
{
- sSSLMutex.push_back(new LLMutex(NULL));
+ sSSLMutex.push_back(new LLMutex);
}
CRYPTO_set_id_callback(&LLCurl::ssl_thread_id);
CRYPTO_set_locking_callback(&LLCurl::ssl_locking_callback);
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index 4ce3fa1078..5ab4dc35b9 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -41,6 +41,7 @@
#include "llbuffer.h"
#include "lliopipe.h"
#include "llsd.h"
+#include "llthread.h"
class LLMutex;
@@ -55,6 +56,8 @@ public:
class Easy;
class Multi;
+ static bool sMultiThreaded;
+
struct TransferInfo
{
TransferInfo() : mSizeDownload(0.0), mTotalTime(0.0), mSpeedDownload(0.0) {}
@@ -159,7 +162,7 @@ public:
/**
* @ brief Initialize LLCurl class
*/
- static void initClass();
+ static void initClass(bool multi_threaded = false);
/**
* @ brief Cleanup LLCurl class
@@ -184,6 +187,122 @@ private:
static const unsigned int MAX_REDIRECTS;
};
+class LLCurl::Easy
+{
+ LOG_CLASS(Easy);
+
+private:
+ Easy();
+
+public:
+ static Easy* getEasy();
+ ~Easy();
+
+ CURL* getCurlHandle() const { return mCurlEasyHandle; }
+
+ void setErrorBuffer();
+ void setCA();
+
+ void setopt(CURLoption option, S32 value);
+ // These assume the setter does not free value!
+ void setopt(CURLoption option, void* value);
+ void setopt(CURLoption option, char* value);
+ // Copies the string so that it is guaranteed to stick around
+ void setoptString(CURLoption option, const std::string& value);
+
+ void slist_append(const char* str);
+ void setHeaders();
+
+ U32 report(CURLcode);
+ void getTransferInfo(LLCurl::TransferInfo* info);
+
+ void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, S32 time_out = 0, bool post = false);
+
+ const char* getErrorBuffer();
+
+ std::stringstream& getInput() { return mInput; }
+ std::stringstream& getHeaderOutput() { return mHeaderOutput; }
+ LLIOPipe::buffer_ptr_t& getOutput() { return mOutput; }
+ const LLChannelDescriptors& getChannels() { return mChannels; }
+
+ void resetState();
+
+ static CURL* allocEasyHandle();
+ static void releaseEasyHandle(CURL* handle);
+
+private:
+ friend class LLCurl;
+
+ CURL* mCurlEasyHandle;
+ struct curl_slist* mHeaders;
+
+ std::stringstream mRequest;
+ LLChannelDescriptors mChannels;
+ LLIOPipe::buffer_ptr_t mOutput;
+ std::stringstream mInput;
+ std::stringstream mHeaderOutput;
+ char mErrorBuffer[CURL_ERROR_SIZE];
+
+ // Note: char*'s not strings since we pass pointers to curl
+ std::vector<char*> mStrings;
+
+ ResponderPtr mResponder;
+
+ static std::set<CURL*> sFreeHandles;
+ static std::set<CURL*> sActiveHandles;
+ static LLMutex* sHandleMutex;
+};
+
+class LLCurl::Multi : public LLThread
+{
+ LOG_CLASS(Multi);
+public:
+
+ typedef enum
+ {
+ PERFORM_STATE_READY=0,
+ PERFORM_STATE_PERFORMING=1,
+ PERFORM_STATE_COMPLETED=2
+ } ePerformState;
+
+ Multi();
+ ~Multi();
+
+ Easy* allocEasy();
+ bool addEasy(Easy* easy);
+
+ void removeEasy(Easy* easy);
+
+ S32 process();
+ void perform();
+ void doPerform();
+
+ virtual void run();
+
+ CURLMsg* info_read(S32* msgs_in_queue);
+
+ S32 mQueued;
+ S32 mErrorCount;
+
+ S32 mPerformState;
+
+ LLCondition* mSignal;
+ bool mQuitting;
+ bool mThreaded;
+
+private:
+ void easyFree(Easy*);
+
+ CURLM* mCurlMultiHandle;
+
+ typedef std::set<Easy*> easy_active_list_t;
+ easy_active_list_t mEasyActiveList;
+ typedef std::map<CURL*, Easy*> easy_active_map_t;
+ easy_active_map_t mEasyActiveMap;
+ typedef std::set<Easy*> easy_free_list_t;
+ easy_free_list_t mEasyFreeList;
+};
+
namespace boost
{
void intrusive_ptr_add_ref(LLCurl::Responder* p);
@@ -201,8 +320,8 @@ public:
void get(const std::string& url, LLCurl::ResponderPtr responder);
bool getByteRange(const std::string& url, const headers_t& headers, S32 offset, S32 length, LLCurl::ResponderPtr responder);
- bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder);
- bool post(const std::string& url, const headers_t& headers, const std::string& data, LLCurl::ResponderPtr responder);
+ bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder, S32 time_out = 0);
+ bool post(const std::string& url, const headers_t& headers, const std::string& data, LLCurl::ResponderPtr responder, S32 time_out = 0);
S32 process();
S32 getQueued();
@@ -236,10 +355,12 @@ public:
void slist_append(const char* str);
void sendRequest(const std::string& url);
void requestComplete();
- S32 perform();
+ void perform();
bool getResult(CURLcode* result, LLCurl::TransferInfo* info = NULL);
std::string getErrorString();
+ LLCurl::Easy* getEasy() const { return mEasy; }
+
private:
CURLMsg* info_read(S32* queue, LLCurl::TransferInfo* info);
@@ -250,4 +371,7 @@ private:
bool mResultReturned;
};
+void check_curl_code(CURLcode code);
+void check_curl_multi_code(CURLMcode code);
+
#endif // LL_LLCURL_H
diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp
index 812ef7c151..e0ca056a5f 100644
--- a/indra/llmessage/llfiltersd2xmlrpc.cpp
+++ b/indra/llmessage/llfiltersd2xmlrpc.cpp
@@ -308,6 +308,7 @@ LLFilterSD2XMLRPCResponse::~LLFilterSD2XMLRPCResponse()
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SD2XMLRPC_RESPONSE("SD2XMLRPC Response");
// virtual
LLIOPipe::EStatus LLFilterSD2XMLRPCResponse::process_impl(
const LLChannelDescriptors& channels,
@@ -316,6 +317,8 @@ LLIOPipe::EStatus LLFilterSD2XMLRPCResponse::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SD2XMLRPC_RESPONSE);
+
PUMP_DEBUG;
// This pipe does not work if it does not have everyting. This
// could be addressed by making a stream parser for llsd which
@@ -382,6 +385,8 @@ LLFilterSD2XMLRPCRequest::~LLFilterSD2XMLRPCRequest()
{
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SD2XMLRPC_REQUEST("S22XMLRPC Request");
+
// virtual
LLIOPipe::EStatus LLFilterSD2XMLRPCRequest::process_impl(
const LLChannelDescriptors& channels,
@@ -390,6 +395,7 @@ LLIOPipe::EStatus LLFilterSD2XMLRPCRequest::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SD2XMLRPC_REQUEST);
// This pipe does not work if it does not have everyting. This
// could be addressed by making a stream parser for llsd which
// handled partial information.
@@ -586,6 +592,8 @@ LLFilterXMLRPCResponse2LLSD::~LLFilterXMLRPCResponse2LLSD()
{
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_XMLRPC2LLSD_RESPONSE("XMLRPC2LLSD Response");
+
LLIOPipe::EStatus LLFilterXMLRPCResponse2LLSD::process_impl(
const LLChannelDescriptors& channels,
buffer_ptr_t& buffer,
@@ -593,6 +601,8 @@ LLIOPipe::EStatus LLFilterXMLRPCResponse2LLSD::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_XMLRPC2LLSD_RESPONSE);
+
PUMP_DEBUG;
if(!eos) return STATUS_BREAK;
if(!buffer) return STATUS_ERROR;
@@ -668,6 +678,7 @@ LLFilterXMLRPCRequest2LLSD::~LLFilterXMLRPCRequest2LLSD()
{
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_XMLRPC2LLSD_REQUEST("XMLRPC2LLSD Request");
LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(
const LLChannelDescriptors& channels,
buffer_ptr_t& buffer,
@@ -675,6 +686,7 @@ LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_XMLRPC2LLSD_REQUEST);
PUMP_DEBUG;
if(!eos) return STATUS_BREAK;
if(!buffer) return STATUS_ERROR;
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index 5a38b7fd9f..2bca517e97 100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -33,6 +33,7 @@
#include "indra_constants.h"
#include "message.h"
+#include "llproxy.h"
#include "llvfile.h"
#include "llvfs.h"
@@ -232,6 +233,10 @@ void LLHTTPAssetRequest::setupCurlHandle()
{
// *NOTE: Similar code exists in mapserver/llcurlutil.cpp JC
mCurlHandle = curl_easy_init();
+
+ // Apply proxy settings if configured to do so
+ LLProxy::getInstance()->applyProxySettings(mCurlHandle);
+
curl_easy_setopt(mCurlHandle, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(mCurlHandle, CURLOPT_NOPROGRESS, 1);
curl_easy_setopt(mCurlHandle, CURLOPT_URL, mURLBuffer.c_str());
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 0e5206a520..dd4e3a6300 100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -428,6 +428,9 @@ static LLSD blocking_request(
std::string body_str;
// other request method checks root cert first, we skip?
+
+ // Apply configured proxy settings
+ LLProxy::getInstance()->applyProxySettings(curlp);
// * Set curl handle options
curl_easy_setopt(curlp, CURLOPT_NOSIGNAL, 1); // don't use SIGALRM for timeouts
@@ -436,7 +439,7 @@ static LLSD blocking_request(
curl_easy_setopt(curlp, CURLOPT_WRITEDATA, &http_buffer);
curl_easy_setopt(curlp, CURLOPT_URL, url.c_str());
curl_easy_setopt(curlp, CURLOPT_ERRORBUFFER, curl_error_buffer);
-
+
// * Setup headers (don't forget to free them after the call!)
curl_slist* headers_list = NULL;
if (headers.isMap())
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
index 3b18a9177c..920a57ab55 100644
--- a/indra/llmessage/lliohttpserver.cpp
+++ b/indra/llmessage/lliohttpserver.cpp
@@ -140,6 +140,7 @@ private:
LLSD mHeaders;
};
+static LLFastTimer::DeclareTimer FTM_PROCESS_HTTP_PIPE("HTTP Pipe");
LLIOPipe::EStatus LLHTTPPipe::process_impl(
const LLChannelDescriptors& channels,
buffer_ptr_t& buffer,
@@ -147,6 +148,7 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_HTTP_PIPE);
PUMP_DEBUG;
lldebugs << "LLSDHTTPServer::process_impl" << llendl;
@@ -428,6 +430,9 @@ protected:
/**
* LLHTTPResponseHeader
*/
+
+static LLFastTimer::DeclareTimer FTM_PROCESS_HTTP_HEADER("HTTP Header");
+
// virtual
LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(
const LLChannelDescriptors& channels,
@@ -436,6 +441,7 @@ LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_HTTP_HEADER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_HTTP_SERVER);
if(eos)
@@ -630,6 +636,8 @@ void LLHTTPResponder::markBad(
<< "</body>\n</html>\n";
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_HTTP_RESPONDER("HTTP Responder");
+
// virtual
LLIOPipe::EStatus LLHTTPResponder::process_impl(
const LLChannelDescriptors& channels,
@@ -638,6 +646,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_HTTP_RESPONDER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_HTTP_SERVER);
LLIOPipe::EStatus status = STATUS_OK;
@@ -954,13 +963,9 @@ private:
// static
-LLHTTPNode& LLIOHTTPServer::create(
- apr_pool_t* pool, LLPumpIO& pump, U16 port)
+LLHTTPNode& LLIOHTTPServer::create(LLPumpIO& pump, U16 port)
{
- LLSocket::ptr_t socket = LLSocket::create(
- pool,
- LLSocket::STREAM_TCP,
- port);
+ LLSocket::ptr_t socket = LLSocket::create(LLSocket::STREAM_TCP, port);
if(!socket)
{
llerrs << "Unable to initialize socket" << llendl;
@@ -969,7 +974,7 @@ LLHTTPNode& LLIOHTTPServer::create(
LLHTTPResponseFactory* factory = new LLHTTPResponseFactory;
boost::shared_ptr<LLChainIOFactory> factory_ptr(factory);
- LLIOServerSocket* server = new LLIOServerSocket(pool, socket, factory_ptr);
+ LLIOServerSocket* server = new LLIOServerSocket(socket, factory_ptr);
LLPumpIO::chain_t chain;
chain.push_back(LLIOPipe::ptr_t(server));
diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h
index 5c1b0531ff..2294e4b8ae 100644
--- a/indra/llmessage/lliohttpserver.h
+++ b/indra/llmessage/lliohttpserver.h
@@ -50,7 +50,7 @@ class LLIOHTTPServer
public:
typedef void (*timing_callback_t)(const char* hashed_name, F32 time, void* data);
- static LLHTTPNode& create(apr_pool_t* pool, LLPumpIO& pump, U16 port);
+ static LLHTTPNode& create(LLPumpIO& pump, U16 port);
/**< Creates an HTTP wire server on the pump for the given TCP port.
*
* Returns the root node of the new server. Add LLHTTPNode instances
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
index ca84fa8bb8..a885ba8ee1 100644
--- a/indra/llmessage/lliosocket.cpp
+++ b/indra/llmessage/lliosocket.cpp
@@ -35,6 +35,7 @@
#include "llhost.h"
#include "llmemtype.h"
#include "llpumpio.h"
+#include "llthread.h"
//
// constants
@@ -98,51 +99,31 @@ void ll_debug_socket(const char* msg, apr_socket_t* apr_sock)
///
// static
-LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
+LLSocket::ptr_t LLSocket::create(EType type, U16 port)
{
LLMemType m1(LLMemType::MTYPE_IO_TCP);
- LLSocket::ptr_t rv;
- apr_socket_t* socket = NULL;
- apr_pool_t* new_pool = NULL;
apr_status_t status = APR_EGENERAL;
-
- // create a pool for the socket
- status = apr_pool_create(&new_pool, pool);
- if(ll_apr_warn_status(status))
- {
- if(new_pool) apr_pool_destroy(new_pool);
- return rv;
- }
+ LLSocket::ptr_t rv(new LLSocket);
if(STREAM_TCP == type)
{
- status = apr_socket_create(
- &socket,
- APR_INET,
- SOCK_STREAM,
- APR_PROTO_TCP,
- new_pool);
+ status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_STREAM, APR_PROTO_TCP, rv->mPool());
}
else if(DATAGRAM_UDP == type)
{
- status = apr_socket_create(
- &socket,
- APR_INET,
- SOCK_DGRAM,
- APR_PROTO_UDP,
- new_pool);
+ status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, rv->mPool());
}
else
{
- if(new_pool) apr_pool_destroy(new_pool);
+ rv.reset();
return rv;
}
if(ll_apr_warn_status(status))
{
- if(new_pool) apr_pool_destroy(new_pool);
+ rv->mSocket = NULL;
+ rv.reset();
return rv;
}
- rv = ptr_t(new LLSocket(socket, new_pool));
if(port > 0)
{
apr_sockaddr_t* sa = NULL;
@@ -152,7 +133,7 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
APR_UNSPEC,
port,
0,
- new_pool);
+ rv->mPool());
if(ll_apr_warn_status(status))
{
rv.reset();
@@ -160,8 +141,8 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
}
// This allows us to reuse the address on quick down/up. This
// is unlikely to create problems.
- ll_apr_warn_status(apr_socket_opt_set(socket, APR_SO_REUSEADDR, 1));
- status = apr_socket_bind(socket, sa);
+ ll_apr_warn_status(apr_socket_opt_set(rv->mSocket, APR_SO_REUSEADDR, 1));
+ status = apr_socket_bind(rv->mSocket, sa);
if(ll_apr_warn_status(status))
{
rv.reset();
@@ -175,7 +156,7 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
// to keep a queue of incoming connections for ACCEPT.
lldebugs << "Setting listen state for socket." << llendl;
status = apr_socket_listen(
- socket,
+ rv->mSocket,
LL_DEFAULT_LISTEN_BACKLOG);
if(ll_apr_warn_status(status))
{
@@ -191,26 +172,33 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
port = PORT_EPHEMERAL;
}
rv->mPort = port;
- rv->setOptions();
+ rv->setNonBlocking();
return rv;
}
// static
-LLSocket::ptr_t LLSocket::create(apr_socket_t* socket, apr_pool_t* pool)
+LLSocket::ptr_t LLSocket::create(apr_status_t& status, LLSocket::ptr_t& listen_socket)
{
LLMemType m1(LLMemType::MTYPE_IO_TCP);
- LLSocket::ptr_t rv;
- if(!socket)
+ if (!listen_socket->getSocket())
{
+ status = APR_ENOSOCKET;
+ return LLSocket::ptr_t();
+ }
+ LLSocket::ptr_t rv(new LLSocket);
+ lldebugs << "accepting socket" << llendl;
+ status = apr_socket_accept(&rv->mSocket, listen_socket->getSocket(), rv->mPool());
+ if (status != APR_SUCCESS)
+ {
+ rv->mSocket = NULL;
+ rv.reset();
return rv;
}
- rv = ptr_t(new LLSocket(socket, pool));
rv->mPort = PORT_EPHEMERAL;
- rv->setOptions();
+ rv->setNonBlocking();
return rv;
}
-
bool LLSocket::blockingConnect(const LLHost& host)
{
if(!mSocket) return false;
@@ -223,24 +211,22 @@ bool LLSocket::blockingConnect(const LLHost& host)
APR_UNSPEC,
host.getPort(),
0,
- mPool)))
+ mPool())))
{
return false;
}
- apr_socket_timeout_set(mSocket, 1000);
+ setBlocking(1000);
ll_debug_socket("Blocking connect", mSocket);
if(ll_apr_warn_status(apr_socket_connect(mSocket, sa))) return false;
- setOptions();
+ setNonBlocking();
return true;
}
-LLSocket::LLSocket(apr_socket_t* socket, apr_pool_t* pool) :
- mSocket(socket),
- mPool(pool),
+LLSocket::LLSocket() :
+ mSocket(NULL),
+ mPool(LLThread::tldata().mRootPool),
mPort(PORT_INVALID)
{
- ll_debug_socket("Constructing wholely formed socket", mSocket);
- LLMemType m1(LLMemType::MTYPE_IO_TCP);
}
LLSocket::~LLSocket()
@@ -251,18 +237,31 @@ LLSocket::~LLSocket()
{
ll_debug_socket("Destroying socket", mSocket);
apr_socket_close(mSocket);
- }
- if(mPool)
- {
- apr_pool_destroy(mPool);
+ mSocket = NULL;
}
}
-void LLSocket::setOptions()
+// See http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial-13.html#ss13.4
+// for an explanation of how to get non-blocking sockets and timeouts with
+// consistent behavior across platforms.
+
+void LLSocket::setBlocking(S32 timeout)
+{
+ LLMemType m1(LLMemType::MTYPE_IO_TCP);
+ // set up the socket options
+ ll_apr_warn_status(apr_socket_timeout_set(mSocket, timeout));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_NONBLOCK, 0));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_SNDBUF, LL_SEND_BUFFER_SIZE));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_RCVBUF, LL_RECV_BUFFER_SIZE));
+
+}
+
+void LLSocket::setNonBlocking()
{
LLMemType m1(LLMemType::MTYPE_IO_TCP);
// set up the socket options
ll_apr_warn_status(apr_socket_timeout_set(mSocket, 0));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_NONBLOCK, 1));
ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_SNDBUF, LL_SEND_BUFFER_SIZE));
ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_RCVBUF, LL_RECV_BUFFER_SIZE));
@@ -285,6 +284,8 @@ LLIOSocketReader::~LLIOSocketReader()
//lldebugs << "Destroying LLIOSocketReader" << llendl;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SOCKET_READER("Socket Reader");
+
// virtual
LLIOPipe::EStatus LLIOSocketReader::process_impl(
const LLChannelDescriptors& channels,
@@ -293,6 +294,7 @@ LLIOPipe::EStatus LLIOSocketReader::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SOCKET_READER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_TCP);
if(!mSource) return STATUS_PRECONDITION_NOT_MET;
@@ -385,6 +387,7 @@ LLIOSocketWriter::~LLIOSocketWriter()
//lldebugs << "Destroying LLIOSocketWriter" << llendl;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SOCKET_WRITER("Socket Writer");
// virtual
LLIOPipe::EStatus LLIOSocketWriter::process_impl(
const LLChannelDescriptors& channels,
@@ -393,6 +396,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SOCKET_WRITER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_TCP);
if(!mDestination) return STATUS_PRECONDITION_NOT_MET;
@@ -516,10 +520,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
///
LLIOServerSocket::LLIOServerSocket(
- apr_pool_t* pool,
LLIOServerSocket::socket_t listener,
factory_t factory) :
- mPool(pool),
mListenSocket(listener),
mReactor(factory),
mInitialized(false),
@@ -539,6 +541,7 @@ void LLIOServerSocket::setResponseTimeout(F32 timeout_secs)
mResponseTimeout = timeout_secs;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SERVER_SOCKET("Server Socket");
// virtual
LLIOPipe::EStatus LLIOServerSocket::process_impl(
const LLChannelDescriptors& channels,
@@ -547,6 +550,7 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SERVER_SOCKET);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_TCP);
if(!pump)
@@ -579,21 +583,15 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
lldebugs << "accepting socket" << llendl;
PUMP_DEBUG;
- apr_pool_t* new_pool = NULL;
- apr_status_t status = apr_pool_create(&new_pool, mPool);
- apr_socket_t* socket = NULL;
- status = apr_socket_accept(
- &socket,
- mListenSocket->getSocket(),
- new_pool);
- LLSocket::ptr_t llsocket(LLSocket::create(socket, new_pool));
+ apr_status_t status;
+ LLSocket::ptr_t llsocket(LLSocket::create(status, mListenSocket));
//EStatus rv = STATUS_ERROR;
- if(llsocket)
+ if(llsocket && status == APR_SUCCESS)
{
PUMP_DEBUG;
apr_sockaddr_t* remote_addr;
- apr_socket_addr_get(&remote_addr, APR_REMOTE, socket);
+ apr_socket_addr_get(&remote_addr, APR_REMOTE, llsocket->getSocket());
char* remote_host_string;
apr_sockaddr_ip_get(&remote_host_string, remote_addr);
@@ -608,7 +606,6 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
{
chain.push_back(LLIOPipe::ptr_t(new LLIOSocketWriter(llsocket)));
pump->addChain(chain, mResponseTimeout);
- status = STATUS_OK;
}
else
{
@@ -617,7 +614,8 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
}
else
{
- llwarns << "Unable to create linden socket." << llendl;
+ char buf[256];
+ llwarns << "Unable to accept linden socket: " << apr_strerror(status, buf, sizeof(buf)) << llendl;
}
PUMP_DEBUG;
@@ -630,11 +628,10 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
#if 0
LLIODataSocket::LLIODataSocket(
U16 suggested_port,
- U16 start_discovery_port,
- apr_pool_t* pool) :
+ U16 start_discovery_port) :
mSocket(NULL)
{
- if(!pool || (PORT_INVALID == suggested_port)) return;
+ if(PORT_INVALID == suggested_port) return;
if(ll_apr_warn_status(apr_socket_create(&mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, pool))) return;
apr_sockaddr_t* sa = NULL;
if(ll_apr_warn_status(apr_sockaddr_info_get(&sa, APR_ANYADDR, APR_UNSPEC, suggested_port, 0, pool))) return;
diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h
index 6806e5084a..f0a6f25657 100644
--- a/indra/llmessage/lliosocket.h
+++ b/indra/llmessage/lliosocket.h
@@ -38,7 +38,6 @@
*/
#include "lliopipe.h"
-#include "apr_pools.h"
#include "apr_network_io.h"
#include "llchainio.h"
@@ -88,34 +87,22 @@ public:
* socket. If you intend the socket to be known to external
* clients without prior port notification, do not use
* PORT_EPHEMERAL.
- * @param pool The apr pool to use. A child pool will be created
- * and associated with the socket.
* @param type The type of socket to create
* @param port The port for the socket
* @return A valid socket shared pointer if the call worked.
*/
static ptr_t create(
- apr_pool_t* pool,
EType type,
U16 port = PORT_EPHEMERAL);
/**
- * @brief Create a LLSocket when you already have an apr socket.
+ * @brief Create a LLSocket by accepting a connection from a listen socket.
*
- * This method assumes an ephemeral port. This is typically used
- * by calls which spawn a socket such as a call to
- * <code>accept()</code> as in the server socket. This call should
- * not fail if you have a valid apr socket.
- * Because of the nature of how accept() works, you are expected
- * to create a new pool for the socket, use that pool for the
- * accept, and pass it in here where it will be bound with the
- * socket and destroyed at the same time.
- * @param socket The apr socket to use
- * @param pool The pool used to create the socket. *NOTE: The pool
- * passed in will be DESTROYED.
+ * @param status Output. Status of the accept if a valid listen socket was passed.
+ * @param listen_socket The listen socket to use.
* @return A valid socket shared pointer if the call worked.
*/
- static ptr_t create(apr_socket_t* socket, apr_pool_t* pool);
+ static ptr_t create(apr_status_t& status, ptr_t& listen_socket);
/**
* @brief Perform a blocking connect to a host. Do not use in production.
@@ -145,17 +132,30 @@ public:
*/
apr_socket_t* getSocket() const { return mSocket; }
-protected:
/**
* @brief Protected constructor since should only make sockets
* with one of the two <code>create()</code> calls.
*/
- LLSocket(apr_socket_t* socket, apr_pool_t* pool);
+ LLSocket(void);
/**
- * @brief Set default socket options.
+ * @brief Set default socket options, with SO_NONBLOCK = 0 and a timeout in us.
+ * @param timeout Number of microseconds to wait on this socket. Any
+ * negative number means block-forever. TIMEOUT OF 0 IS NON-PORTABLE.
+ */
+ void setBlocking(S32 timeout);
+
+ /**
+ * @brief Set default socket options, with SO_NONBLOCK = 1 and timeout = 0.
+ */
+ void setNonBlocking();
+
+protected:
+ /**
+ * @brief Protected constructor since should only make sockets
+ * with one of the two <code>create()</code> calls.
*/
- void setOptions();
+ LLSocket(apr_socket_t* socket, apr_pool_t* pool);
public:
/**
@@ -167,8 +167,8 @@ protected:
// The apr socket.
apr_socket_t* mSocket;
- // our memory pool
- apr_pool_t* mPool;
+ // Our memory pool.
+ LLAPRPool mPool;
// The port if we know it.
U16 mPort;
@@ -293,7 +293,7 @@ class LLIOServerSocket : public LLIOPipe
public:
typedef LLSocket::ptr_t socket_t;
typedef boost::shared_ptr<LLChainIOFactory> factory_t;
- LLIOServerSocket(apr_pool_t* pool, socket_t listener, factory_t reactor);
+ LLIOServerSocket(socket_t listener, factory_t reactor);
virtual ~LLIOServerSocket();
/**
@@ -325,7 +325,6 @@ protected:
//@}
protected:
- apr_pool_t* mPool;
socket_t mListenSocket;
factory_t mReactor;
bool mInitialized;
@@ -359,8 +358,7 @@ public:
*/
LLIODataSocket(
U16 suggested_port,
- U16 start_discovery_port,
- apr_pool_t* pool);
+ U16 start_discovery_port);
virtual ~LLIODataSocket();
protected:
diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp
index 2e6ee59ff2..8c50fd5069 100644
--- a/indra/llmessage/llioutil.cpp
+++ b/indra/llmessage/llioutil.cpp
@@ -43,6 +43,8 @@ LLIOPipe::EStatus LLIOFlush::process_impl(
return STATUS_OK;
}
+
+static LLFastTimer::DeclareTimer FTM_PROCESS_SLEEP("IO Sleep");
/**
* @class LLIOSleep
*/
@@ -53,6 +55,7 @@ LLIOPipe::EStatus LLIOSleep::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SLEEP);
if(mSeconds > 0.0)
{
if(pump) pump->sleepChain(mSeconds);
@@ -62,6 +65,7 @@ LLIOPipe::EStatus LLIOSleep::process_impl(
return STATUS_DONE;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_ADD_CHAIN("Add Chain");
/**
* @class LLIOAddChain
*/
@@ -72,6 +76,7 @@ LLIOPipe::EStatus LLIOAddChain::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_ADD_CHAIN);
pump->addChain(mChain, mTimeout);
return STATUS_DONE;
}
diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp
index 08b31e9c7a..8a898ab1b0 100644
--- a/indra/llmessage/llmail.cpp
+++ b/indra/llmessage/llmail.cpp
@@ -50,6 +50,7 @@
#include "llstring.h"
#include "lluuid.h"
#include "net.h"
+#include "llaprpool.h"
//
// constants
@@ -57,7 +58,7 @@
const size_t LL_MAX_KNOWN_GOOD_MAIL_SIZE = 4096;
static bool gMailEnabled = true;
-static apr_pool_t* gMailPool;
+static LLAPRPool gMailPool;
static apr_sockaddr_t* gSockAddr;
static apr_socket_t* gMailSocket;
@@ -82,7 +83,7 @@ bool connect_smtp()
gSockAddr->sa.sin.sin_family,
SOCK_STREAM,
APR_PROTO_TCP,
- gMailPool);
+ gMailPool());
if(ll_apr_warn_status(status)) return false;
status = apr_socket_connect(gMailSocket, gSockAddr);
if(ll_apr_warn_status(status))
@@ -139,19 +140,19 @@ BOOL LLMail::send(
}
// static
-void LLMail::init(const std::string& hostname, apr_pool_t* pool)
+void LLMail::init(const std::string& hostname)
{
gMailSocket = NULL;
- if(hostname.empty() || !pool)
+ if (hostname.empty())
{
- gMailPool = NULL;
gSockAddr = NULL;
+ gMailPool.destroy();
}
else
{
- gMailPool = pool;
+ gMailPool.create();
- // collect all the information into a socaddr sturcture. the
+ // Collect all the information into a sockaddr structure. the
// documentation is a bit unclear, but I either have to
// specify APR_UNSPEC or not specify any flags. I am not sure
// which option is better.
@@ -161,7 +162,7 @@ void LLMail::init(const std::string& hostname, apr_pool_t* pool)
APR_UNSPEC,
25,
APR_IPV4_ADDR_OK,
- gMailPool);
+ gMailPool());
ll_apr_warn_status(status);
}
}
diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h
index 3791714363..0a5c532088 100644
--- a/indra/llmessage/llmail.h
+++ b/indra/llmessage/llmail.h
@@ -27,15 +27,13 @@
#ifndef LL_LLMAIL_H
#define LL_LLMAIL_H
-typedef struct apr_pool_t apr_pool_t;
-
#include "llsd.h"
class LLMail
{
public:
// if hostname is NULL, then the host is resolved as 'mail'
- static void init(const std::string& hostname, apr_pool_t* pool);
+ static void init(const std::string& hostname);
// Allow all email transmission to be disabled/enabled.
static void enable(bool mail_enabled);
diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp
index 8999dec64a..7628984de4 100644
--- a/indra/llmessage/llpacketring.cpp
+++ b/indra/llmessage/llpacketring.cpp
@@ -28,11 +28,20 @@
#include "llpacketring.h"
+#if LL_WINDOWS
+ #include <winsock2.h>
+#else
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+#endif
+
// linden library includes
#include "llerror.h"
#include "lltimer.h"
-#include "timing.h"
+#include "llproxy.h"
#include "llrand.h"
+#include "message.h"
+#include "timing.h"
#include "u64.h"
///////////////////////////////////////////////////////////
@@ -216,8 +225,32 @@ S32 LLPacketRing::receivePacket (S32 socket, char *datap)
else
{
// no delay, pull straight from net
- packet_size = receive_packet(socket, datap);
- mLastSender = ::get_sender();
+ if (LLProxy::isSOCKSProxyEnabled())
+ {
+ U8 buffer[NET_BUFFER_SIZE + SOCKS_HEADER_SIZE];
+ packet_size = receive_packet(socket, reinterpret_cast<char *>(buffer));
+
+ if (packet_size > SOCKS_HEADER_SIZE)
+ {
+ // *FIX We are assuming ATYP is 0x01 (IPv4), not 0x03 (hostname) or 0x04 (IPv6)
+ memcpy(datap, buffer + SOCKS_HEADER_SIZE, packet_size - SOCKS_HEADER_SIZE);
+ proxywrap_t * header = reinterpret_cast<proxywrap_t *>(buffer);
+ mLastSender.setAddress(header->addr);
+ mLastSender.setPort(ntohs(header->port));
+
+ packet_size -= SOCKS_HEADER_SIZE; // The unwrapped packet size
+ }
+ else
+ {
+ packet_size = 0;
+ }
+ }
+ else
+ {
+ packet_size = receive_packet(socket, datap);
+ mLastSender = ::get_sender();
+ }
+
mLastReceivingIF = ::get_receiving_interface();
if (packet_size) // did we actually get a packet?
@@ -243,7 +276,7 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
BOOL status = TRUE;
if (!mUseOutThrottle)
{
- return send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort() );
+ return sendPacketImpl(h_socket, send_buffer, buf_size, host );
}
else
{
@@ -264,7 +297,7 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
mOutBufferLength -= packetp->getSize();
packet_size = packetp->getSize();
- status = send_packet(h_socket, packetp->getData(), packet_size, packetp->getHost().getAddress(), packetp->getHost().getPort());
+ status = sendPacketImpl(h_socket, packetp->getData(), packet_size, packetp->getHost());
delete packetp;
// Update the throttle
@@ -273,7 +306,7 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
else
{
// If the queue's empty, we can just send this packet right away.
- status = send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort() );
+ status = sendPacketImpl(h_socket, send_buffer, buf_size, host );
packet_size = buf_size;
// Update the throttle
@@ -311,3 +344,23 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
return status;
}
+
+BOOL LLPacketRing::sendPacketImpl(int h_socket, const char * send_buffer, S32 buf_size, LLHost host)
+{
+
+ if (!LLProxy::isSOCKSProxyEnabled())
+ {
+ return send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort());
+ }
+
+ proxywrap_t *socks_header = reinterpret_cast<proxywrap_t *>(&mProxyWrappedSendBuffer);
+ socks_header->rsv = 0;
+ socks_header->addr = host.getAddress();
+ socks_header->port = htons(host.getPort());
+ socks_header->atype = ADDRESS_IPV4;
+ socks_header->frag = 0;
+
+ memcpy(mProxyWrappedSendBuffer + SOCKS_HEADER_SIZE, send_buffer, buf_size);
+
+ return send_packet(h_socket, (const char*) mProxyWrappedSendBuffer, buf_size + 10, LLProxy::getInstance()->getUDPProxy().getAddress(), LLProxy::getInstance()->getUDPProxy().getPort());
+}
diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h
index e6409d2048..7edcc834db 100644
--- a/indra/llmessage/llpacketring.h
+++ b/indra/llmessage/llpacketring.h
@@ -30,11 +30,11 @@
#include <queue>
-#include "llpacketbuffer.h"
#include "llhost.h"
-#include "net.h"
+#include "llpacketbuffer.h"
+#include "llproxy.h"
#include "llthrottle.h"
-
+#include "net.h"
class LLPacketRing
{
@@ -82,6 +82,12 @@ protected:
LLHost mLastSender;
LLHost mLastReceivingIF;
+
+
+ U8 mProxyWrappedSendBuffer[NET_BUFFER_SIZE + SOCKS_HEADER_SIZE];
+
+private:
+ BOOL sendPacketImpl(int h_socket, const char * send_buffer, S32 buf_size, LLHost host);
};
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
new file mode 100644
index 0000000000..19f1fc6545
--- /dev/null
+++ b/indra/llmessage/llproxy.cpp
@@ -0,0 +1,550 @@
+/**
+ * @file llproxy.cpp
+ * @brief UDP and HTTP proxy communications
+ *
+ * $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 "linden_common.h"
+
+#include "llproxy.h"
+
+#include <string>
+#include <curl/curl.h>
+
+#include "llapr.h"
+#include "llcurl.h"
+#include "llhost.h"
+
+// Static class variable instances
+
+// We want this to be static to avoid excessive indirection on every
+// incoming packet just to do a simple bool test. The getter for this
+// member is also static
+bool LLProxy::sUDPProxyEnabled = false;
+
+// Some helpful TCP static functions.
+static S32 tcp_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(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(),
+ mUDPProxy(),
+ mTCPProxy(),
+ mHTTPProxy(),
+ mProxyType(LLPROXY_SOCKS),
+ mAuthMethodSelected(METHOD_NOAUTH),
+ mSocksUsername(),
+ mSocksPassword()
+{
+}
+
+LLProxy::~LLProxy()
+{
+ stopSOCKSProxy();
+ sUDPProxyEnabled = false;
+ mHTTPProxyEnabled = false;
+}
+
+/**
+ * @brief Open the SOCKS 5 TCP control channel.
+ *
+ * Perform a SOCKS 5 authentication and UDP association to the proxy server.
+ *
+ * @param proxy The SOCKS 5 server to connect to.
+ * @return SOCKS_OK if successful, otherwise a socks error code from llproxy.h.
+ */
+S32 LLProxy::proxyHandshake(LLHost proxy)
+{
+ S32 result;
+
+ /* SOCKS 5 Auth request */
+ socks_auth_request_t socks_auth_request;
+ socks_auth_response_t socks_auth_response;
+
+ socks_auth_request.version = SOCKS_VERSION; // SOCKS version 5
+ socks_auth_request.num_methods = 1; // Sending 1 method.
+ socks_auth_request.methods = getSelectedAuthMethod(); // Send only the selected method.
+
+ result = tcp_handshake(mProxyControlChannel, (char*)&socks_auth_request, sizeof(socks_auth_request), (char*)&socks_auth_response, sizeof(socks_auth_response));
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication request failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (socks_auth_response.method == AUTH_NOT_ACCEPTABLE)
+ {
+ LL_WARNS("Proxy") << "SOCKS 5 server refused all our authentication methods" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_NOT_ACCEPTABLE;
+ }
+
+ // SOCKS 5 USERNAME/PASSWORD authentication
+ if (socks_auth_response.method == METHOD_PASSWORD)
+ {
+ // The server has requested a username/password combination
+ std::string socks_username(getSocksUser());
+ std::string socks_password(getSocksPwd());
+ U32 request_size = socks_username.size() + socks_password.size() + 3;
+ char * password_auth = new char[request_size];
+ password_auth[0] = 0x01;
+ password_auth[1] = socks_username.size();
+ memcpy(&password_auth[2], socks_username.c_str(), socks_username.size());
+ password_auth[socks_username.size() + 2] = socks_password.size();
+ memcpy(&password_auth[socks_username.size()+3], socks_password.c_str(), socks_password.size());
+
+ authmethod_password_reply_t password_reply;
+
+ result = tcp_handshake(mProxyControlChannel, password_auth, request_size, (char*)&password_reply, sizeof(password_reply));
+ delete[] password_auth;
+
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (password_reply.status != AUTH_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication failed" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_AUTH_FAIL;
+ }
+ }
+
+ /* SOCKS5 connect request */
+
+ socks_command_request_t connect_request;
+ socks_command_response_t connect_reply;
+
+ connect_request.version = SOCKS_VERSION; // SOCKS V5
+ connect_request.command = COMMAND_UDP_ASSOCIATE; // Associate UDP
+ connect_request.reserved = FIELD_RESERVED;
+ connect_request.atype = ADDRESS_IPV4;
+ connect_request.address = htonl(0); // 0.0.0.0
+ connect_request.port = htons(0); // 0
+ // "If the client is not in possession of the information at the time of the UDP ASSOCIATE,
+ // the client MUST use a port number and address of all zeros. RFC 1928"
+
+ result = tcp_handshake(mProxyControlChannel, (char*)&connect_request, sizeof(connect_request), (char*)&connect_reply, sizeof(connect_reply));
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS connect request failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (connect_reply.reply != REPLY_REQUEST_GRANTED)
+ {
+ LL_WARNS("Proxy") << "Connection to SOCKS 5 server failed, UDP forward request not granted" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_UDP_FWD_NOT_GRANTED;
+ }
+
+ mUDPProxy.setPort(ntohs(connect_reply.port)); // reply port is in network byte order
+ 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;
+ return SOCKS_OK;
+}
+
+/**
+ * @brief Initiates a SOCKS 5 proxy session.
+ *
+ * Performs basic checks on host to verify that it is a valid address. Opens the control channel
+ * and then negotiates the proxy connection with the server.
+ *
+ *
+ * @param host Socks server to connect to.
+ * @return SOCKS_OK if successful, otherwise a SOCKS error code defined in llproxy.h.
+ */
+S32 LLProxy::startSOCKSProxy(LLHost host)
+{
+ S32 status = SOCKS_OK;
+
+ if (host.isOk())
+ {
+ mTCPProxy = host;
+ }
+ else
+ {
+ status = SOCKS_INVALID_HOST;
+ }
+
+ if (mProxyControlChannel && status == SOCKS_OK)
+ {
+ tcp_close_channel(&mProxyControlChannel);
+ }
+
+ if (status == SOCKS_OK)
+ {
+ mProxyControlChannel = tcp_open_channel(mTCPProxy);
+ if (!mProxyControlChannel)
+ {
+ status = SOCKS_HOST_CONNECT_FAILED;
+ }
+ }
+
+ if (status == SOCKS_OK)
+ {
+ status = proxyHandshake(mTCPProxy);
+ }
+ if (status == SOCKS_OK)
+ {
+ sUDPProxyEnabled = true;
+ }
+ else
+ {
+ stopSOCKSProxy();
+ }
+ return status;
+}
+
+/**
+ * @brief Stop using the SOCKS 5 proxy.
+ *
+ * This will stop sending UDP packets through the SOCKS 5 proxy
+ * and will also stop the HTTP proxy if it is configured to use SOCKS.
+ * The proxy control channel will also be disconnected.
+ */
+void LLProxy::stopSOCKSProxy()
+{
+ sUDPProxyEnabled = false;
+
+ // If the SOCKS proxy is requested to stop and we are using that for HTTP as well
+ // then we must shut down any HTTP proxy operations. But it is allowable if web
+ // proxy is being used to continue proxying HTTP.
+
+ if (LLPROXY_SOCKS == getHTTPProxyType())
+ {
+ void disableHTTPProxy();
+ }
+
+ if (mProxyControlChannel)
+ {
+ tcp_close_channel(&mProxyControlChannel);
+ }
+}
+
+/**
+ * @brief Set the proxy's SOCKS authentication method to none.
+ */
+void LLProxy::setAuthNone()
+{
+ LLMutexLock lock(&mProxyMutex);
+
+ mAuthMethodSelected = METHOD_NOAUTH;
+}
+
+/**
+ * @brief Set the proxy's SOCKS authentication method to password.
+ *
+ * Check whether the lengths of the supplied username
+ * and password conform to the lengths allowed by the
+ * SOCKS protocol.
+ *
+ * @param username The SOCKS username to send.
+ * @param password The SOCKS password to send.
+ * @return Return true if applying the settings was successful. No changes are made if false.
+ *
+ */
+bool LLProxy::setAuthPassword(const std::string &username, const std::string &password)
+{
+ if (username.length() > SOCKSMAXUSERNAMELEN || password.length() > SOCKSMAXPASSWORDLEN ||
+ username.length() < SOCKSMINUSERNAMELEN || password.length() < SOCKSMINPASSWORDLEN)
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 password or username length." << LL_ENDL;
+ return false;
+ }
+
+ LLMutexLock lock(&mProxyMutex);
+
+ mAuthMethodSelected = METHOD_PASSWORD;
+ mSocksUsername = username;
+ mSocksPassword = password;
+
+ return true;
+}
+
+/**
+ * @brief Enable the HTTP proxy for either SOCKS or HTTP.
+ *
+ * Check the supplied host to see if it is a valid IP and port.
+ *
+ * @param httpHost Proxy server to connect to.
+ * @param type Is the host a SOCKS or HTTP proxy.
+ * @return Return true if applying the setting was successful. No changes are made if false.
+ */
+bool LLProxy::enableHTTPProxy(LLHost httpHost, LLHttpProxyType type)
+{
+ if (!httpHost.isOk())
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 Server" << LL_ENDL;
+ return false;
+ }
+
+ LLMutexLock lock(&mProxyMutex);
+
+ mHTTPProxy = httpHost;
+ mProxyType = type;
+
+ mHTTPProxyEnabled = true;
+
+ return true;
+}
+
+/**
+ * @brief Enable the HTTP proxy without changing the proxy settings.
+ *
+ * This should not be called unless the proxy has already been set up.
+ *
+ * @return Return true only if the current settings are valid and the proxy was enabled.
+ */
+bool LLProxy::enableHTTPProxy()
+{
+ bool ok;
+
+ LLMutexLock lock(&mProxyMutex);
+
+ ok = (mHTTPProxy.isOk());
+ if (ok)
+ {
+ mHTTPProxyEnabled = true;
+ }
+
+ return ok;
+}
+
+/**
+ * @brief Disable the HTTP proxy.
+ */
+void LLProxy::disableHTTPProxy()
+{
+ LLMutexLock lock(&mProxyMutex);
+
+ mHTTPProxyEnabled = false;
+}
+
+/**
+ * @brief Get the HTTP proxy address and port
+ */
+//
+LLHost LLProxy::getHTTPProxy() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mHTTPProxy;
+}
+
+/**
+ * @brief Get the currently selected HTTP proxy type
+ */
+LLHttpProxyType LLProxy::getHTTPProxyType() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mProxyType;
+}
+
+/**
+ * @brief Get the SOCKS 5 password.
+ */
+std::string LLProxy::getSocksPwd() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mSocksPassword;
+}
+
+/**
+ * @brief Get the SOCKS 5 username.
+ */
+std::string LLProxy::getSocksUser() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mSocksUsername;
+}
+
+/**
+ * @brief Get the currently selected SOCKS 5 authentication method.
+ *
+ * @return Returns either none or password.
+ */
+LLSocks5AuthType LLProxy::getSelectedAuthMethod() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mAuthMethodSelected;
+}
+
+/**
+ * @brief Stop the LLProxy and make certain that any APR pools and classes are deleted before terminating APR.
+ *
+ * Deletes the LLProxy singleton, destroying the APR pool used by the control channel as well as .
+ */
+//static
+void LLProxy::cleanupClass()
+{
+ getInstance()->stopSOCKSProxy();
+ deleteSingleton();
+}
+
+void LLProxy::applyProxySettings(LLCurlEasyRequest* handle)
+{
+ applyProxySettings(handle->getEasy());
+}
+
+void LLProxy::applyProxySettings(LLCurl::Easy* handle)
+{
+ applyProxySettings(handle->getCurlHandle());
+}
+
+/**
+ * @brief Apply proxy settings to a CuRL request if an HTTP proxy is enabled.
+ *
+ * This method has been designed to be safe to call from
+ * any thread in the viewer. This allows requests in the
+ * texture fetch thread to be aware of the proxy settings.
+ * When the HTTP proxy is enabled, the proxy mutex will
+ * be locked every time this method is called.
+ *
+ * @param handle A pointer to a valid CURL request, before it has been performed.
+ */
+void LLProxy::applyProxySettings(CURL* handle)
+{
+ // Do a faster unlocked check to see if we are supposed to proxy.
+ if (mHTTPProxyEnabled)
+ {
+ // We think we should proxy, lock the proxy mutex.
+ LLMutexLock lock(&mProxyMutex);
+ // Now test again to verify that the proxy wasn't disabled between the first check and the lock.
+ if (mHTTPProxyEnabled)
+ {
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXY, mHTTPProxy.getIPString().c_str()));
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYPORT, mHTTPProxy.getPort()));
+
+ if (mProxyType == LLPROXY_SOCKS)
+ {
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5));
+ if (mAuthMethodSelected == METHOD_PASSWORD)
+ {
+ std::string auth_string = mSocksUsername + ":" + mSocksPassword;
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, auth_string.c_str()));
+ }
+ }
+ else
+ {
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP));
+ }
+ }
+ }
+}
+
+/**
+ * @brief Send one TCP packet and receive one in return.
+ *
+ * This operation is done synchronously with a 1000ms timeout. Therefore, it should not be used when a blocking
+ * operation would impact the operation of the viewer.
+ *
+ * @param handle_ptr Pointer to a connected LLSocket of type STREAM_TCP.
+ * @param dataout Data to send.
+ * @param outlen Length of dataout.
+ * @param datain Buffer for received data. Undefined if return value is not APR_SUCCESS.
+ * @param maxinlen Maximum possible length of received data. Short reads are allowed.
+ * @return Indicates APR status code of exchange. APR_SUCCESS if exchange was successful, -1 if invalid data length was received.
+ */
+static S32 tcp_handshake(LLSocket::ptr_t handle, char * dataout, apr_size_t outlen, char * datain, apr_size_t maxinlen)
+{
+ apr_socket_t* apr_socket = handle->getSocket();
+ apr_status_t rv = APR_SUCCESS;
+
+ apr_size_t expected_len = outlen;
+
+ handle->setBlocking(1000);
+
+ rv = apr_socket_send(apr_socket, dataout, &outlen);
+ if (APR_SUCCESS != rv)
+ {
+ LL_WARNS("Proxy") << "Error sending data to proxy control channel, status: " << rv << LL_ENDL;
+ ll_apr_warn_status(rv);
+ }
+ else if (expected_len != outlen)
+ {
+ LL_WARNS("Proxy") << "Incorrect data length sent. Expected: " << expected_len <<
+ " Sent: " << outlen << LL_ENDL;
+ rv = -1;
+ }
+
+ if (APR_SUCCESS == rv)
+ {
+ expected_len = maxinlen;
+ rv = apr_socket_recv(apr_socket, datain, &maxinlen);
+ if (rv != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "Error receiving data from proxy control channel, status: " << rv << LL_ENDL;
+ ll_apr_warn_status(rv);
+ }
+ else if (expected_len < maxinlen)
+ {
+ LL_WARNS("Proxy") << "Incorrect data length received. Expected: " << expected_len <<
+ " Received: " << maxinlen << LL_ENDL;
+ rv = -1;
+ }
+ }
+
+ handle->setNonBlocking();
+
+ return rv;
+}
+
+/**
+ * @brief Open a LLSocket and do a blocking connect to the chosen host.
+ *
+ * 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(LLHost host)
+{
+ LLSocket::ptr_t socket = LLSocket::create(LLSocket::STREAM_TCP);
+ bool connected = socket->blockingConnect(host);
+ if (!connected)
+ {
+ tcp_close_channel(&socket);
+ }
+
+ return socket;
+}
+
+/**
+ * @brief Close the socket.
+ *
+ * @param handle_ptr A pointer-to-pointer to avoid increasing the use count.
+ */
+static void tcp_close_channel(LLSocket::ptr_t* handle_ptr)
+{
+ LL_DEBUGS("Proxy") << "Resetting proxy LLSocket handle, use_count == " << handle_ptr->use_count() << LL_ENDL;
+ handle_ptr->reset();
+}
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
new file mode 100644
index 0000000000..621debb61d
--- /dev/null
+++ b/indra/llmessage/llproxy.h
@@ -0,0 +1,339 @@
+/**
+ * @file llproxy.h
+ * @brief UDP and HTTP proxy communications
+ *
+ * $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_PROXY_H
+#define LL_PROXY_H
+
+#include "llcurl.h"
+#include "llhost.h"
+#include "lliosocket.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+#include "llthread.h"
+#include <string>
+
+// SOCKS error codes returned from the StartProxy method
+
+#define SOCKS_OK 0
+#define SOCKS_CONNECT_ERROR (-1)
+#define SOCKS_NOT_PERMITTED (-2)
+#define SOCKS_NOT_ACCEPTABLE (-3)
+#define SOCKS_AUTH_FAIL (-4)
+#define SOCKS_UDP_FWD_NOT_GRANTED (-5)
+#define SOCKS_HOST_CONNECT_FAILED (-6)
+#define SOCKS_INVALID_HOST (-7)
+
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN (255 + 1) /* socks5: 255, +1 for len. */
+#endif
+
+#define SOCKSMAXUSERNAMELEN 255
+#define SOCKSMAXPASSWORDLEN 255
+
+#define SOCKSMINUSERNAMELEN 1
+#define SOCKSMINPASSWORDLEN 1
+
+#define SOCKS_VERSION 0x05 // we are using SOCKS 5
+
+#define SOCKS_HEADER_SIZE 10
+
+// SOCKS 5 address/hostname types
+#define ADDRESS_IPV4 0x01
+#define ADDRESS_HOSTNAME 0x03
+#define ADDRESS_IPV6 0x04
+
+// Lets just use our own ipv4 struct rather than dragging in system
+// specific headers
+union ipv4_address_t {
+ U8 octets[4];
+ U32 addr32;
+};
+
+// SOCKS 5 control channel commands
+#define COMMAND_TCP_STREAM 0x01
+#define COMMAND_TCP_BIND 0x02
+#define COMMAND_UDP_ASSOCIATE 0x03
+
+// SOCKS 5 command replies
+#define REPLY_REQUEST_GRANTED 0x00
+#define REPLY_GENERAL_FAIL 0x01
+#define REPLY_RULESET_FAIL 0x02
+#define REPLY_NETWORK_UNREACHABLE 0x03
+#define REPLY_HOST_UNREACHABLE 0x04
+#define REPLY_CONNECTION_REFUSED 0x05
+#define REPLY_TTL_EXPIRED 0x06
+#define REPLY_PROTOCOL_ERROR 0x07
+#define REPLY_TYPE_NOT_SUPPORTED 0x08
+
+#define FIELD_RESERVED 0x00
+
+// The standard SOCKS 5 request packet
+// Push current alignment to stack and set alignment to 1 byte boundary
+// This enabled us to use structs directly to set up and receive network packets
+// into the correct fields, without fear of boundary alignment causing issues
+#pragma pack(push,1)
+
+// SOCKS 5 command packet
+struct socks_command_request_t {
+ U8 version;
+ U8 command;
+ U8 reserved;
+ U8 atype;
+ U32 address;
+ U16 port;
+};
+
+// Standard SOCKS 5 reply packet
+struct socks_command_response_t {
+ U8 version;
+ U8 reply;
+ U8 reserved;
+ U8 atype;
+ U8 add_bytes[4];
+ U16 port;
+};
+
+#define AUTH_NOT_ACCEPTABLE 0xFF // reply if preferred methods are not available
+#define AUTH_SUCCESS 0x00 // reply if authentication successful
+
+// SOCKS 5 authentication request, stating which methods the client supports
+struct socks_auth_request_t {
+ U8 version;
+ U8 num_methods;
+ U8 methods; // We are only using a single method currently
+};
+
+// SOCKS 5 authentication response packet, stating server preferred method
+struct socks_auth_response_t {
+ U8 version;
+ U8 method;
+};
+
+// SOCKS 5 password reply packet
+struct authmethod_password_reply_t {
+ U8 version;
+ U8 status;
+};
+
+// SOCKS 5 UDP packet header
+struct proxywrap_t {
+ U16 rsv;
+ U8 frag;
+ U8 atype;
+ U32 addr;
+ U16 port;
+};
+
+#pragma pack(pop) /* restore original alignment from stack */
+
+
+// Currently selected HTTP proxy type
+enum LLHttpProxyType
+{
+ LLPROXY_SOCKS = 0,
+ LLPROXY_HTTP = 1
+};
+
+// Auth types
+enum LLSocks5AuthType
+{
+ METHOD_NOAUTH = 0x00, // Client supports no auth
+ METHOD_GSSAPI = 0x01, // Client supports GSSAPI (Not currently supported)
+ METHOD_PASSWORD = 0x02 // Client supports username/password
+};
+
+/**
+ * @brief Manage SOCKS 5 UDP proxy and HTTP proxy.
+ *
+ * This class is responsible for managing two interconnected tasks,
+ * connecting to a SOCKS 5 proxy for use by LLPacketRing to send UDP
+ * packets and managing proxy settings for HTTP requests.
+ *
+ * <h1>Threading:</h1>
+ * Because HTTP requests can be generated in threads outside the
+ * main thread, it is necessary for some of the information stored
+ * by this class to be available to other threads. The members that
+ * need to be read across threads are in a labeled section below.
+ * To protect those members, a mutex, mProxyMutex should be locked
+ * before reading or writing those members. Methods that can lock
+ * mProxyMutex are in a labeled section below. Those methods should
+ * not be called while the mutex is already locked.
+ *
+ * There is also a LLAtomic type flag (mHTTPProxyEnabled) that is used
+ * to track whether the HTTP proxy is currently enabled. This allows
+ * for faster unlocked checks to see if the proxy is enabled. This
+ * allows us to cut down on the performance hit when the proxy is
+ * disabled compared to before this class was introduced.
+ *
+ * <h1>UDP Proxying:</h1>
+ * UDP datagrams are proxied via a SOCKS 5 proxy with the UDP associate
+ * command. To initiate the proxy, a TCP socket connection is opened
+ * to the SOCKS 5 host, and after a handshake exchange, the server
+ * returns a port and address to send the UDP traffic that is to be
+ * proxied to. The LLProxy class tracks this address and port after the
+ * exchange and provides it to LLPacketRing when required to. All UDP
+ * proxy management occurs in the main thread.
+ *
+ * <h1>HTTP Proxying:</h1>
+ * This class allows all viewer HTTP packets to be sent through a proxy.
+ * The user can select whether to send HTTP packets through a standard
+ * "web" HTTP proxy, through a SOCKS 5 proxy, or to not proxy HTTP
+ * communication. This class does not manage the integrated web browser
+ * proxy, which is handled in llviewermedia.cpp.
+ *
+ * The implementation of HTTP proxying is handled by libcurl. LLProxy
+ * is responsible for managing the HTTP proxy options and provides a
+ * thread-safe method to apply those options to a curl request
+ * (LLProxy::applyProxySettings()). This method is overloaded
+ * to accommodate the various abstraction libcurl layers that exist
+ * throughout the viewer (LLCurlEasyRequest, LLCurl::Easy, and CURL).
+ *
+ * If you are working with LLCurl or LLCurlEasyRequest objects,
+ * the configured proxy settings will be applied in the constructors
+ * of those request handles. If you are working with CURL objects
+ * directly, you will need to pass the handle of the request to
+ * applyProxySettings() before issuing the request.
+ *
+ * To ensure thread safety, all LLProxy members that relate to the HTTP
+ * proxy require the LLProxyMutex to be locked before accessing.
+ */
+class LLProxy: public LLSingleton<LLProxy>
+{
+ LOG_CLASS(LLProxy);
+public:
+ // METHODS THAT DO NOT LOCK mProxyMutex!
+
+ LLProxy();
+
+ // static check for enabled status for UDP packets
+ static bool isSOCKSProxyEnabled() { return sUDPProxyEnabled; }
+
+ // check for enabled status for HTTP packets
+ // mHTTPProxyEnabled is atomic, so no locking is required for thread safety.
+ bool isHTTPProxyEnabled() const { return mHTTPProxyEnabled; }
+
+ // Get the UDP proxy address and port
+ LLHost getUDPProxy() const { return mUDPProxy; }
+
+ // Get the SOCKS 5 TCP control channel address and port
+ LLHost getTCPProxy() const { return mTCPProxy; }
+
+ // END OF NON-LOCKING METHODS
+
+ // METHODS THAT DO LOCK mProxyMutex! DO NOT CALL WHILE mProxyMutex IS LOCKED!
+
+ ~LLProxy();
+
+ // Start a connection to the SOCKS 5 proxy
+ S32 startSOCKSProxy(LLHost host);
+
+ // Disconnect and clean up any connection to the SOCKS 5 proxy
+ void stopSOCKSProxy();
+
+ // Delete LLProxy singleton, destroying the APR pool used by the control channel.
+ static void cleanupClass();
+
+ // Set up to use Password auth when connecting to the SOCKS proxy
+ bool setAuthPassword(const std::string &username, const std::string &password);
+
+ // Set up to use No Auth when connecting to the SOCKS proxy
+ void setAuthNone();
+
+ // Get the currently selected auth method.
+ LLSocks5AuthType getSelectedAuthMethod() const;
+
+ // Proxy HTTP packets via httpHost, which can be a SOCKS 5 or a HTTP proxy
+ // as specified in type
+ bool enableHTTPProxy(LLHost httpHost, LLHttpProxyType type);
+ bool enableHTTPProxy();
+
+ // Stop proxying HTTP packets
+ void disableHTTPProxy();
+
+ // Apply the current proxy settings to a curl request. Doesn't do anything if mHTTPProxyEnabled is false.
+ void applyProxySettings(CURL* handle);
+ void applyProxySettings(LLCurl::Easy* handle);
+ void applyProxySettings(LLCurlEasyRequest* handle);
+
+ // Get the HTTP proxy address and port
+ LLHost getHTTPProxy() const;
+
+ // Get the currently selected HTTP proxy type
+ LLHttpProxyType getHTTPProxyType() const;
+
+ std::string getSocksPwd() const;
+ std::string getSocksUser() const;
+
+ // END OF LOCKING METHODS
+private:
+ // Open a communication channel to the SOCKS 5 proxy proxy, at port messagePort
+ S32 proxyHandshake(LLHost proxy);
+
+private:
+ // Is the HTTP proxy enabled?
+ // Safe to read in any thread, do not write directly,
+ // use enableHTTPProxy() and disableHTTPProxy() instead.
+ mutable LLAtomic32<bool> mHTTPProxyEnabled;
+
+ // Mutex to protect shared members in non-main thread calls to applyProxySettings()
+ mutable LLMutex mProxyMutex;
+
+ // MEMBERS READ AND WRITTEN ONLY IN THE MAIN THREAD. DO NOT SHARE!
+
+ // Is the UDP proxy enabled?
+ static bool sUDPProxyEnabled;
+
+ // UDP proxy address and port
+ LLHost mUDPProxy;
+ // TCP proxy control channel address and port
+ LLHost mTCPProxy;
+
+ // socket handle to proxy TCP control channel
+ LLSocket::ptr_t mProxyControlChannel;
+
+ // END OF UNSHARED MEMBERS
+
+ // MEMBERS WRITTEN IN MAIN THREAD AND READ IN ANY THREAD. ONLY READ OR WRITE AFTER LOCKING mProxyMutex!
+
+ // HTTP proxy address and port
+ LLHost mHTTPProxy;
+
+ // Currently selected HTTP proxy type. Can be web or socks.
+ LLHttpProxyType mProxyType;
+
+ // SOCKS 5 auth method selected
+ LLSocks5AuthType mAuthMethodSelected;
+
+ // SOCKS 5 username
+ std::string mSocksUsername;
+ // SOCKS 5 password
+ std::string mSocksPassword;
+
+ // END OF SHARED MEMBERS
+};
+
+#endif
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index a8d2a0a224..89cfd66e1b 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -37,6 +37,7 @@
#include "llmemtype.h"
#include "llstl.h"
#include "llstat.h"
+#include "llthread.h"
// These should not be enabled in production, but they can be
// intensely useful during development for finding certain kinds of
@@ -162,14 +163,12 @@ struct ll_delete_apr_pollset_fd_client_data
/**
* LLPumpIO
*/
-LLPumpIO::LLPumpIO(apr_pool_t* pool) :
+LLPumpIO::LLPumpIO(void) :
mState(LLPumpIO::NORMAL),
mRebuildPollset(false),
mPollset(NULL),
mPollsetClientID(0),
mNextLock(0),
- mPool(NULL),
- mCurrentPool(NULL),
mCurrentPoolReallocCount(0),
mChainsMutex(NULL),
mCallbackMutex(NULL),
@@ -178,21 +177,24 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) :
mCurrentChain = mRunningChains.end();
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- initialize(pool);
+ initialize();
}
LLPumpIO::~LLPumpIO()
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- cleanup();
-}
-
-bool LLPumpIO::prime(apr_pool_t* pool)
-{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- cleanup();
- initialize(pool);
- return ((pool == NULL) ? false : true);
+#if LL_THREADS_APR
+ if (mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
+ if (mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
+#endif
+ mChainsMutex = NULL;
+ mCallbackMutex = NULL;
+ if(mPollset)
+ {
+// lldebugs << "cleaning up pollset" << llendl;
+ apr_pollset_destroy(mPollset);
+ mPollset = NULL;
+ }
}
bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
@@ -352,8 +354,7 @@ bool LLPumpIO::setConditional(LLIOPipe* pipe, const apr_pollfd_t* poll)
{
// each fd needs a pool to work with, so if one was
// not specified, use this pool.
- // *FIX: Should it always be this pool?
- value.second.p = mPool;
+ value.second.p = (*mCurrentChain).mDescriptorsPool->operator()();
}
value.second.client_data = new S32(++mPollsetClientID);
(*mCurrentChain).mDescriptors.push_back(value);
@@ -825,39 +826,15 @@ void LLPumpIO::control(LLPumpIO::EControl op)
}
}
-void LLPumpIO::initialize(apr_pool_t* pool)
+void LLPumpIO::initialize(void)
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- if(!pool) return;
+ mPool.create();
#if LL_THREADS_APR
// SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly.
- apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, pool);
- apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, pool);
-#endif
- mPool = pool;
-}
-
-void LLPumpIO::cleanup()
-{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
-#if LL_THREADS_APR
- if(mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
- if(mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
+ apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, mPool());
+ apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, mPool());
#endif
- mChainsMutex = NULL;
- mCallbackMutex = NULL;
- if(mPollset)
- {
-// lldebugs << "cleaning up pollset" << llendl;
- apr_pollset_destroy(mPollset);
- mPollset = NULL;
- }
- if(mCurrentPool)
- {
- apr_pool_destroy(mCurrentPool);
- mCurrentPool = NULL;
- }
- mPool = NULL;
}
void LLPumpIO::rebuildPollset()
@@ -885,21 +862,19 @@ void LLPumpIO::rebuildPollset()
if(mCurrentPool
&& (0 == (++mCurrentPoolReallocCount % POLLSET_POOL_RECYCLE_COUNT)))
{
- apr_pool_destroy(mCurrentPool);
- mCurrentPool = NULL;
+ mCurrentPool.destroy();
mCurrentPoolReallocCount = 0;
}
if(!mCurrentPool)
{
- apr_status_t status = apr_pool_create(&mCurrentPool, mPool);
- (void)ll_apr_warn_status(status);
+ mCurrentPool.create(mPool);
}
// add all of the file descriptors
run_it = mRunningChains.begin();
LLChainInfo::conditionals_t::iterator fd_it;
LLChainInfo::conditionals_t::iterator fd_end;
- apr_pollset_create(&mPollset, size, mCurrentPool, 0);
+ apr_pollset_create(&mPollset, size, mCurrentPool(), 0);
for(; run_it != run_end; ++run_it)
{
fd_it = (*run_it).mDescriptors.begin();
@@ -1157,7 +1132,8 @@ bool LLPumpIO::handleChainError(
LLPumpIO::LLChainInfo::LLChainInfo() :
mInit(false),
mLock(0),
- mEOS(false)
+ mEOS(false),
+ mDescriptorsPool(new LLAPRPool(LLThread::tldata().mRootPool))
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
mTimer.setTimerExpirySec(DEFAULT_CHAIN_EXPIRY_SECS);
diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h
index 9303c9d7fc..75c35ae7ab 100644
--- a/indra/llmessage/llpumpio.h
+++ b/indra/llmessage/llpumpio.h
@@ -30,11 +30,12 @@
#define LL_LLPUMPIO_H
#include <set>
+#include <boost/shared_ptr.hpp>
#if LL_LINUX // needed for PATH_MAX in APR.
#include <sys/param.h>
#endif
-#include "apr_pools.h"
+#include "llaprpool.h"
#include "llbuffer.h"
#include "llframetimer.h"
#include "lliopipe.h"
@@ -58,9 +59,8 @@ extern const F32 NEVER_CHAIN_EXPIRY_SECS;
* <code>pump()</code> on a thread used for IO and call
* <code>respond()</code> on a thread that is expected to do higher
* level processing. You can call almost any other method from any
- * thread - see notes for each method for details. In order for the
- * threading abstraction to work, you need to call <code>prime()</code>
- * with a valid apr pool.
+ * thread - see notes for each method for details.
+ *
* A pump instance manages much of the state for the pipe, including
* the list of pipes in the chain, the channel for each element in the
* chain, the buffer, and if any pipe has marked the stream or process
@@ -79,7 +79,7 @@ public:
/**
* @brief Constructor.
*/
- LLPumpIO(apr_pool_t* pool);
+ LLPumpIO(void);
/**
* @brief Destructor.
@@ -87,17 +87,6 @@ public:
~LLPumpIO();
/**
- * @brief Prepare this pump for usage.
- *
- * If you fail to call this method prior to use, the pump will
- * try to work, but will not come with any thread locking
- * mechanisms.
- * @param pool The apr pool to use.
- * @return Returns true if the pump is primed.
- */
- bool prime(apr_pool_t* pool);
-
- /**
* @brief Typedef for having a chain of pipes.
*/
typedef std::vector<LLIOPipe::ptr_t> chain_t;
@@ -368,6 +357,7 @@ protected:
typedef std::pair<LLIOPipe::ptr_t, apr_pollfd_t> pipe_conditional_t;
typedef std::vector<pipe_conditional_t> conditionals_t;
conditionals_t mDescriptors;
+ boost::shared_ptr<LLAPRPool> mDescriptorsPool;
};
// All the running chains & info
@@ -386,9 +376,9 @@ protected:
callbacks_t mPendingCallbacks;
callbacks_t mCallbacks;
- // memory allocator for pollsets & mutexes.
- apr_pool_t* mPool;
- apr_pool_t* mCurrentPool;
+ // Memory pool for pollsets & mutexes.
+ LLAPRPool mPool;
+ LLAPRPool mCurrentPool;
S32 mCurrentPoolReallocCount;
#if LL_THREADS_APR
@@ -400,8 +390,7 @@ protected:
#endif
protected:
- void initialize(apr_pool_t* pool);
- void cleanup();
+ void initialize();
/**
* @brief Given the internal state of the chains, rebuild the pollset
diff --git a/indra/llmessage/llsdrpcclient.cpp b/indra/llmessage/llsdrpcclient.cpp
index 86fe5c7912..91fd070f07 100644
--- a/indra/llmessage/llsdrpcclient.cpp
+++ b/indra/llmessage/llsdrpcclient.cpp
@@ -82,6 +82,8 @@ bool LLSDRPCResponse::extractResponse(const LLSD& sd)
return rv;
}
+static LLFastTimer::DeclareTimer FTM_SDRPC_RESPONSE("SDRPC Response");
+
// virtual
LLIOPipe::EStatus LLSDRPCResponse::process_impl(
const LLChannelDescriptors& channels,
@@ -90,6 +92,7 @@ LLIOPipe::EStatus LLSDRPCResponse::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_SDRPC_RESPONSE);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_SD_CLIENT);
if(mIsError)
@@ -178,6 +181,8 @@ bool LLSDRPCClient::call(
return true;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SDRPC_CLIENT("SDRPC Client");
+
// virtual
LLIOPipe::EStatus LLSDRPCClient::process_impl(
const LLChannelDescriptors& channels,
@@ -186,6 +191,7 @@ LLIOPipe::EStatus LLSDRPCClient::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SDRPC_CLIENT);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_SD_CLIENT);
if((STATE_NONE == mState) || (!pump))
diff --git a/indra/llmessage/llsdrpcserver.cpp b/indra/llmessage/llsdrpcserver.cpp
index f87c418fb1..9f776aca72 100644
--- a/indra/llmessage/llsdrpcserver.cpp
+++ b/indra/llmessage/llsdrpcserver.cpp
@@ -97,6 +97,8 @@ void LLSDRPCServer::clearLock()
}
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SDRPC_SERVER("SDRPC Server");
+
// virtual
LLIOPipe::EStatus LLSDRPCServer::process_impl(
const LLChannelDescriptors& channels,
@@ -105,6 +107,7 @@ LLIOPipe::EStatus LLSDRPCServer::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SDRPC_SERVER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_SD_SERVER);
// lldebugs << "LLSDRPCServer::process_impl" << llendl;
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index f470e1b2a5..ab91f74abe 100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
@@ -795,7 +795,7 @@ const char* LLTemplateMessageReader::getMessageName() const
{
if (!mCurrentRMessageTemplate)
{
- llwarns << "no mCurrentRMessageTemplate" << llendl;
+ // no message currently being read
return "";
}
return mCurrentRMessageTemplate->mName;
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index 28bd09fc4c..91a5a8ce2c 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -35,11 +35,13 @@
#include "llcurl.h"
#include "llioutil.h"
#include "llmemtype.h"
+#include "llproxy.h"
#include "llpumpio.h"
#include "llsd.h"
#include "llstring.h"
#include "apr_env.h"
#include "llapr.h"
+#include "llscopedvolatileaprpool.h"
static const U32 HTTP_STATUS_PIPE_ERROR = 499;
/**
@@ -210,27 +212,31 @@ void LLURLRequest::setCallback(LLURLRequestComplete* callback)
// is called with use_proxy = FALSE
void LLURLRequest::useProxy(bool use_proxy)
{
- static char *env_proxy;
+ static std::string env_proxy;
- if (use_proxy && (env_proxy == NULL))
+ if (use_proxy && env_proxy.empty())
{
- apr_status_t status;
- LLAPRPool pool;
- status = apr_env_get(&env_proxy, "ALL_PROXY", pool.getAPRPool());
+ char* env_proxy_str;
+ LLScopedVolatileAPRPool scoped_pool;
+ apr_status_t status = apr_env_get(&env_proxy_str, "ALL_PROXY", scoped_pool);
if (status != APR_SUCCESS)
{
- status = apr_env_get(&env_proxy, "http_proxy", pool.getAPRPool());
+ status = apr_env_get(&env_proxy_str, "http_proxy", scoped_pool);
}
if (status != APR_SUCCESS)
{
- use_proxy = FALSE;
+ use_proxy = false;
}
+ else
+ {
+ // env_proxy_str is stored in the scoped_pool, so we have to make a copy.
+ env_proxy = env_proxy_str;
+ }
}
+ LL_DEBUGS("Proxy") << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = " << (!env_proxy.empty() ? env_proxy : "(null)") << LL_ENDL;
- lldebugs << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = " << (env_proxy ? env_proxy : "(null)") << llendl;
-
- if (env_proxy && use_proxy)
+ if (use_proxy && !env_proxy.empty())
{
mDetail->mCurlRequest->setoptString(CURLOPT_PROXY, env_proxy);
}
@@ -270,6 +276,8 @@ LLIOPipe::EStatus LLURLRequest::handleError(
return status;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST("URL Request");
+
// virtual
LLIOPipe::EStatus LLURLRequest::process_impl(
const LLChannelDescriptors& channels,
@@ -278,6 +286,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_URL_REQUEST);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
//llinfos << "LLURLRequest::process_impl()" << llendl;
@@ -288,6 +297,8 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
const S32 MIN_ACCUMULATION = 100000;
if(pump && (mDetail->mByteAccumulator > MIN_ACCUMULATION))
{
+ static LLFastTimer::DeclareTimer FTM_URL_ADJUST_TIMEOUT("Adjust Timeout");
+ LLFastTimer t(FTM_URL_ADJUST_TIMEOUT);
// This is a pretty sloppy calculation, but this
// tries to make the gross assumption that if data
// is coming in at 56kb/s, then this transfer will
@@ -335,16 +346,30 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
{
PUMP_DEBUG;
LLIOPipe::EStatus status = STATUS_BREAK;
- mDetail->mCurlRequest->perform();
+ static LLFastTimer::DeclareTimer FTM_URL_PERFORM("Perform");
+ {
+ LLFastTimer t(FTM_URL_PERFORM);
+ mDetail->mCurlRequest->perform();
+ }
+
while(1)
{
CURLcode result;
- bool newmsg = mDetail->mCurlRequest->getResult(&result);
+
+ static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST_GET_RESULT("Get Result");
+
+ bool newmsg = false;
+ {
+ LLFastTimer t(FTM_PROCESS_URL_REQUEST_GET_RESULT);
+ newmsg = mDetail->mCurlRequest->getResult(&result);
+ }
+
if(!newmsg)
{
// keep processing
break;
}
+
mState = STATE_HAVE_RESPONSE;
context[CONTEXT_REQUEST][CONTEXT_TRANSFERED_BYTES] = mRequestTransferedBytes;
@@ -370,7 +395,11 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
link.mChannels = LLBufferArray::makeChannelConsumer(
channels);
chain.push_back(link);
- pump->respond(chain, buffer, context);
+ static LLFastTimer::DeclareTimer FTM_PROCESS_URL_PUMP_RESPOND("Pump Respond");
+ {
+ LLFastTimer t(FTM_PROCESS_URL_PUMP_RESPOND);
+ pump->respond(chain, buffer, context);
+ }
mCompletionCallback = NULL;
}
break;
@@ -422,8 +451,11 @@ void LLURLRequest::initialize()
mResponseTransferedBytes = 0;
}
+static LLFastTimer::DeclareTimer FTM_URL_REQUEST_CONFIGURE("URL Configure");
bool LLURLRequest::configure()
{
+ LLFastTimer t(FTM_URL_REQUEST_CONFIGURE);
+
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
bool rv = false;
S32 bytes = mDetail->mResponseBuffer->countAfter(
@@ -624,6 +656,7 @@ static size_t headerCallback(void* data, size_t size, size_t nmemb, void* user)
return header_len;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_URL_EXTRACTOR("URL Extractor");
/**
* LLContextURLExtractor
*/
@@ -635,6 +668,7 @@ LLIOPipe::EStatus LLContextURLExtractor::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_URL_EXTRACTOR);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
// The destination host is in the context.
@@ -713,6 +747,7 @@ void LLURLRequestComplete::responseStatus(LLIOPipe::EStatus status)
mRequestStatus = status;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_URL_COMPLETE("URL Complete");
// virtual
LLIOPipe::EStatus LLURLRequestComplete::process_impl(
const LLChannelDescriptors& channels,
@@ -721,6 +756,7 @@ LLIOPipe::EStatus LLURLRequestComplete::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_URL_COMPLETE);
PUMP_DEBUG;
complete(channels, buffer);
return STATUS_OK;
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index d0b0e178b8..7d21e35f96 100644
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
@@ -97,8 +97,10 @@ std::string get_shared_secret();
class LLMessagePollInfo
{
public:
+ LLMessagePollInfo(void) : mPool(LLThread::tldata().mRootPool) { }
apr_socket_t *mAPRSocketp;
apr_pollfd_t mPollFD;
+ LLAPRPool mPool;
};
namespace
@@ -287,20 +289,13 @@ LLMessageSystem::LLMessageSystem(const std::string& filename, U32 port,
}
// LL_DEBUGS("Messaging") << << "*** port: " << mPort << llendl;
- //
- // Create the data structure that we can poll on
- //
- if (!gAPRPoolp)
- {
- LL_ERRS("Messaging") << "No APR pool before message system initialization!" << llendl;
- ll_init_apr();
- }
+ mPollInfop = new LLMessagePollInfo;
+
apr_socket_t *aprSocketp = NULL;
- apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp);
+ apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, mPollInfop->mPool());
- mPollInfop = new LLMessagePollInfo;
mPollInfop->mAPRSocketp = aprSocketp;
- mPollInfop->mPollFD.p = gAPRPoolp;
+ mPollInfop->mPollFD.p = mPollInfop->mPool();
mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET;
mPollInfop->mPollFD.reqevents = APR_POLLIN;
mPollInfop->mPollFD.rtnevents = 0;
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 6133f50637..e71fb96540 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -1376,3 +1376,6 @@ char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getStri
char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");
char const* const _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData");
char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU");
+char const* const _PREHASH_SeeAVs = LLMessageStringTable::getInstance()->getString("SeeAVs");
+char const* const _PREHASH_AnyAVSounds = LLMessageStringTable::getInstance()->getString("AnyAVSounds");
+char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->getString("GroupAVSounds");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index f94ee1ed22..dd2c2dbd64 100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -1376,4 +1376,7 @@ extern char const* const _PREHASH_VCoord;
extern char const* const _PREHASH_FaceIndex;
extern char const* const _PREHASH_StatusData;
extern char const* const _PREHASH_ProductSKU;
+extern char const* const _PREHASH_SeeAVs;
+extern char const* const _PREHASH_AnyAVSounds;
+extern char const* const _PREHASH_GroupAVSounds;
#endif
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
index 97611c3b51..85aef5da00 100644
--- a/indra/llmessage/net.cpp
+++ b/indra/llmessage/net.cpp
@@ -50,7 +50,6 @@
#include "lltimer.h"
#include "indra_constants.h"
-
// Globals
#if LL_WINDOWS
@@ -174,7 +173,7 @@ U32 ip_string_to_u32(const char* ip_string)
// use wildcard addresses. -Ambroff
U32 ip = inet_addr(ip_string);
if (ip == INADDR_NONE
- && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0)
+ && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0)
{
llwarns << "ip_string_to_u32() failed, Error: Invalid IP string '" << ip_string << "'" << llendl;
return INVALID_HOST_IP_ADDRESS;
@@ -188,11 +187,11 @@ U32 ip_string_to_u32(const char* ip_string)
//////////////////////////////////////////////////////////////////////////////////////////
#if LL_WINDOWS
-
+
S32 start_net(S32& socket_out, int& nPort)
{
// Create socket, make non-blocking
- // Init WinSock
+ // Init WinSock
int nRet;
int hSocket;
@@ -201,7 +200,7 @@ S32 start_net(S32& socket_out, int& nPort)
int buff_size = 4;
// Initialize windows specific stuff
- if(WSAStartup(0x0202, &stWSAData))
+ if (WSAStartup(0x0202, &stWSAData))
{
S32 err = WSAGetLastError();
WSACleanup();
@@ -210,8 +209,8 @@ S32 start_net(S32& socket_out, int& nPort)
}
// Get a datagram socket
- hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0);
- if (hSocket == INVALID_SOCKET)
+ hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0);
+ if (hSocket == INVALID_SOCKET)
{
S32 err = WSAGetLastError();
WSACleanup();
@@ -304,7 +303,7 @@ S32 start_net(S32& socket_out, int& nPort)
// Setup a destination address
stDstAddr.sin_family = AF_INET;
stDstAddr.sin_addr.s_addr = INVALID_HOST_IP_ADDRESS;
- stDstAddr.sin_port = htons(nPort);
+ stDstAddr.sin_port = htons(nPort);
socket_out = hSocket;
return 0;
@@ -393,10 +392,10 @@ S32 start_net(S32& socket_out, int& nPort)
int rec_size = RECEIVE_BUFFER_SIZE;
socklen_t buff_size = 4;
-
+
// Create socket
- hSocket = socket(AF_INET, SOCK_DGRAM, 0);
- if (hSocket < 0)
+ hSocket = socket(AF_INET, SOCK_DGRAM, 0);
+ if (hSocket < 0)
{
llwarns << "socket() failed" << llendl;
return 1;
@@ -429,7 +428,7 @@ S32 start_net(S32& socket_out, int& nPort)
}
else
{
- // Name the socket (assign the local port number to receive on)
+ // Name the socket (assign the local port number to receive on)
stLclAddr.sin_family = AF_INET;
stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY);
stLclAddr.sin_port = htons(nPort);
@@ -474,7 +473,7 @@ S32 start_net(S32& socket_out, int& nPort)
nPort = attempt_port;
}
// Set socket to be non-blocking
- fcntl(hSocket, F_SETFL, O_NONBLOCK);
+ fcntl(hSocket, F_SETFL, O_NONBLOCK);
// set a large receive buffer
nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size);
if (nRet)
@@ -510,8 +509,8 @@ S32 start_net(S32& socket_out, int& nPort)
// Setup a destination address
char achMCAddr[MAXADDRSTR] = "127.0.0.1"; /* Flawfinder: ignore */
stDstAddr.sin_family = AF_INET;
- stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr);
- stDstAddr.sin_port = htons(nPort);
+ stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr);
+ stDstAddr.sin_port = htons(nPort);
socket_out = hSocket;
return 0;
@@ -537,7 +536,7 @@ static int recvfrom_destip( int socket, void *buf, int len, struct sockaddr *fro
iov[0].iov_base = buf;
iov[0].iov_len = len;
- memset( &msg, 0, sizeof msg );
+ memset(&msg, 0, sizeof msg);
msg.msg_name = from;
msg.msg_namelen = *fromlen;
msg.msg_iov = iov;
@@ -545,14 +544,14 @@ static int recvfrom_destip( int socket, void *buf, int len, struct sockaddr *fro
msg.msg_control = &cmsg;
msg.msg_controllen = sizeof(cmsg);
- size = recvmsg( socket, &msg, 0 );
+ size = recvmsg(socket, &msg, 0);
- if( size == -1 )
+ if (size == -1)
{
return -1;
}
- for( cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR( &msg, cmsgptr ) )
+ for (cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR( &msg, cmsgptr))
{
if( cmsgptr->cmsg_level == SOL_IP && cmsgptr->cmsg_type == IP_PKTINFO )
{
@@ -650,7 +649,7 @@ BOOL send_packet(int hSocket, const char * sendBuffer, int size, U32 recipient,
}
}
}
- while ( resend && send_attempts < 3);
+ while (resend && send_attempts < 3);
if (send_attempts >= 3)
{
diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h
index 9f4f5c5821..0f2437479d 100644
--- a/indra/llmessage/net.h
+++ b/indra/llmessage/net.h
@@ -46,10 +46,10 @@ S32 receive_packet(int hSocket, char * receiveBuffer);
BOOL send_packet(int hSocket, const char *sendBuffer, int size, U32 recipient, int nPort); // Returns TRUE on success.
//void get_sender(char * tmp);
-LLHost get_sender();
+LLHost get_sender();
U32 get_sender_port();
U32 get_sender_ip(void);
-LLHost get_receiving_interface();
+LLHost get_receiving_interface();
U32 get_receiving_interface_ip(void);
const char* u32_to_ip_string(U32 ip); // Returns pointer to internal string buffer, "(bad IP addr)" on failure, cannot nest calls
diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h
index 2aff90ca1e..23e1c791f4 100644
--- a/indra/llmessage/tests/networkio.h
+++ b/indra/llmessage/tests/networkio.h
@@ -30,7 +30,6 @@
#define LL_NETWORKIO_H
#include "llmemory.h" // LLSingleton
-#include "llapr.h"
#include "llares.h"
#include "llpumpio.h"
#include "llhttpclient.h"
@@ -48,14 +47,8 @@ public:
mServicePump(NULL),
mDone(false)
{
- ll_init_apr();
- if (! gAPRPoolp)
- {
- throw std::runtime_error("Can't initialize APR");
- }
-
// Create IO Pump to use for HTTP Requests.
- mServicePump = new LLPumpIO(gAPRPoolp);
+ mServicePump = new LLPumpIO;
LLHTTPClient::setPump(*mServicePump);
if (ll_init_ares() == NULL || !gAres->isInitialized())
{
diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py
index 9886d49ccc..22edd9dad8 100644
--- a/indra/llmessage/tests/test_llsdmessage_peer.py
+++ b/indra/llmessage/tests/test_llsdmessage_peer.py
@@ -124,14 +124,19 @@ class TestHTTPRequestHandler(BaseHTTPRequestHandler):
# Suppress error output as well
pass
+class Server(HTTPServer):
+ # This pernicious flag is on by default in HTTPServer. But proper
+ # operation of freeport() absolutely depends on it being off.
+ allow_reuse_address = False
+
if __name__ == "__main__":
- # Instantiate an HTTPServer(TestHTTPRequestHandler) on the first free port
+ # Instantiate a Server(TestHTTPRequestHandler) on the first free port
# in the specified port range. Doing this inline is better than in a
# daemon thread: if it blows up here, we'll get a traceback. If it blew up
# in some other thread, the traceback would get eaten and we'd run the
# subject test program anyway.
httpd, port = freeport(xrange(8000, 8020),
- lambda port: HTTPServer(('127.0.0.1', port), TestHTTPRequestHandler))
+ lambda port: Server(('127.0.0.1', port), TestHTTPRequestHandler))
# Pass the selected port number to the subject test program via the
# environment. We don't want to impose requirements on the test program's
# command-line parsing -- and anyway, for C++ integration tests, that's
diff --git a/indra/llmessage/tests/testrunner.py b/indra/llmessage/tests/testrunner.py
index f329ec2a0e..f2c841532a 100644
--- a/indra/llmessage/tests/testrunner.py
+++ b/indra/llmessage/tests/testrunner.py
@@ -27,6 +27,8 @@ Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
$/LicenseInfo$
"""
+from __future__ import with_statement
+
import os
import sys
import re
@@ -79,9 +81,14 @@ def freeport(portlist, expr):
Example:
+ class Server(HTTPServer):
+ # If you use BaseHTTPServer.HTTPServer, turning off this flag is
+ # essential for proper operation of freeport()!
+ allow_reuse_address = False
+ # ...
server, port = freeport(xrange(8000, 8010),
- lambda port: HTTPServer(("localhost", port),
- MyRequestHandler))
+ lambda port: Server(("localhost", port),
+ MyRequestHandler))
# pass 'port' to client code
# call server.serve_forever()
"""
@@ -164,3 +171,92 @@ def run(*args, **kwds):
rc = os.spawnv(os.P_WAIT, args[0], args)
debug("%s returned %s", args[0], rc)
return rc
+
+# ****************************************************************************
+# test code -- manual at this point, see SWAT-564
+# ****************************************************************************
+def test_freeport():
+ # ------------------------------- Helpers --------------------------------
+ from contextlib import contextmanager
+ # helper Context Manager for expecting an exception
+ # with exc(SomeError):
+ # raise SomeError()
+ # raises AssertionError otherwise.
+ @contextmanager
+ def exc(exception_class, *args):
+ try:
+ yield
+ except exception_class, err:
+ for i, expected_arg in enumerate(args):
+ assert expected_arg == err.args[i], \
+ "Raised %s, but args[%s] is %r instead of %r" % \
+ (err.__class__.__name__, i, err.args[i], expected_arg)
+ print "Caught expected exception %s(%s)" % \
+ (err.__class__.__name__, ', '.join(repr(arg) for arg in err.args))
+ else:
+ assert False, "Failed to raise " + exception_class.__class__.__name__
+
+ # helper to raise specified exception
+ def raiser(exception):
+ raise exception
+
+ # the usual
+ def assert_equals(a, b):
+ assert a == b, "%r != %r" % (a, b)
+
+ # ------------------------ Sanity check the above ------------------------
+ class SomeError(Exception): pass
+ # Without extra args, accept any err.args value
+ with exc(SomeError):
+ raiser(SomeError("abc"))
+ # With extra args, accept only the specified value
+ with exc(SomeError, "abc"):
+ raiser(SomeError("abc"))
+ with exc(AssertionError):
+ with exc(SomeError, "abc"):
+ raiser(SomeError("def"))
+ with exc(AssertionError):
+ with exc(socket.error, errno.EADDRINUSE):
+ raiser(socket.error(errno.ECONNREFUSED, 'Connection refused'))
+
+ # ----------- freeport() without engaging socket functionality -----------
+ # If portlist is empty, freeport() raises StopIteration.
+ with exc(StopIteration):
+ freeport([], None)
+
+ assert_equals(freeport([17], str), ("17", 17))
+
+ # This is the magic exception that should prompt us to retry
+ inuse = socket.error(errno.EADDRINUSE, 'Address already in use')
+ # Get the iterator to our ports list so we can check later if we've used all
+ ports = iter(xrange(5))
+ with exc(socket.error, errno.EADDRINUSE):
+ freeport(ports, lambda port: raiser(inuse))
+ # did we entirely exhaust 'ports'?
+ with exc(StopIteration):
+ ports.next()
+
+ ports = iter(xrange(2))
+ # Any exception but EADDRINUSE should quit immediately
+ with exc(SomeError):
+ freeport(ports, lambda port: raiser(SomeError()))
+ assert_equals(ports.next(), 1)
+
+ # ----------- freeport() with platform-dependent socket stuff ------------
+ # This is what we should've had unit tests to begin with (see CHOP-661).
+ def newbind(port):
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.bind(('127.0.0.1', port))
+ return sock
+
+ bound0, port0 = freeport(xrange(7777, 7780), newbind)
+ assert_equals(port0, 7777)
+ bound1, port1 = freeport(xrange(7777, 7780), newbind)
+ assert_equals(port1, 7778)
+ bound2, port2 = freeport(xrange(7777, 7780), newbind)
+ assert_equals(port2, 7779)
+ with exc(socket.error, errno.EADDRINUSE):
+ bound3, port3 = freeport(xrange(7777, 7780), newbind)
+
+if __name__ == "__main__":
+ test_freeport()
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 9f666369d4..9cd3216ab2 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -1,1436 +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::jsExposeObjectEvent( bool expose )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_expose_object");
- message.setValueBoolean( "expose", expose );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsValuesValidEvent( bool valid )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_values_valid");
- message.setValueBoolean( "valid", valid );
- 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::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
- {
- 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::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 fea836aa68..1f548f8cc0 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -41,16 +41,16 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
LOG_CLASS(LLPluginClassMedia);
public:
LLPluginClassMedia(LLPluginClassMediaOwner *owner);
- virtual ~LLPluginClassMedia();
+ ~LLPluginClassMedia();
// local initialization, called by the media manager when creating a source
- virtual 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);
// undoes everything init() didm called by the media manager when destroying a source
- virtual void reset();
+ void reset();
void idle(void);
@@ -118,9 +118,11 @@ public:
void scrollEvent(int x, int y, MASK modifiers);
+ // enable/disable media plugin debugging messages and info spam
+ void enableMediaPluginDebugging( bool enable );
+
// Javascript <-> viewer events
- void jsExposeObjectEvent( bool expose );
- void jsValuesValidEvent( bool valid );
+ void jsEnableObject( bool enable );
void jsAgentLocationEvent( double x, double y, double z );
void jsAgentGlobalLocationEvent( double x, double y, double z );
void jsAgentOrientationEvent( double angle );
@@ -210,6 +212,7 @@ public:
void browse_forward();
void browse_back();
void setBrowserUserAgent(const std::string& user_agent);
+ 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);
@@ -245,6 +248,10 @@ 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; };
+ std::string getDebugMessageLevel() const { return mDebugMessageLevel; };
+
// This is valid after MEDIA_EVENT_NAVIGATE_ERROR_PAGE
S32 getStatusCode() const { return mStatusCode; };
@@ -396,6 +403,8 @@ protected:
std::string mClickNavType;
std::string mClickTarget;
std::string mClickUUID;
+ std::string mDebugMessageText;
+ std::string mDebugMessageLevel;
S32 mGeometryX;
S32 mGeometryY;
S32 mGeometryWidth;
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 5a4fb1ce90..2f3edba7f3 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -64,6 +64,8 @@ public:
MEDIA_EVENT_AUTH_REQUEST, // The plugin wants to display an auth dialog
+ MEDIA_EVENT_DEBUG_MESSAGE, // plugin sending back debug information for host to process
+
MEDIA_EVENT_LINK_HOVERED // Got a "link hovered" event from the plugin
} EMediaEvent;
diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp
index 7cde82a20e..e8efb233ff 100644
--- a/indra/llplugin/llplugininstance.cpp
+++ b/indra/llplugin/llplugininstance.cpp
@@ -29,8 +29,7 @@
#include "linden_common.h"
#include "llplugininstance.h"
-
-#include "llapr.h"
+#include "llthread.h" // Needed for LLThread::tldata().mRootPool
#if LL_WINDOWS
#include "direct.h" // needed for _chdir()
@@ -52,6 +51,7 @@ const char *LLPluginInstance::PLUGIN_INIT_FUNCTION_NAME = "LLPluginInitEntryPoin
* @param[in] owner Plugin instance. TODO:DOC is this a good description of what "owner" is?
*/
LLPluginInstance::LLPluginInstance(LLPluginInstanceMessageListener *owner) :
+ mDSOHandlePool(LLThread::tldata().mRootPool),
mDSOHandle(NULL),
mPluginUserData(NULL),
mPluginSendMessageFunction(NULL)
@@ -97,7 +97,7 @@ int LLPluginInstance::load(const std::string& plugin_dir, std::string &plugin_fi
int result = apr_dso_load(&mDSOHandle,
plugin_file.c_str(),
- gAPRPoolp);
+ mDSOHandlePool());
if(result != APR_SUCCESS)
{
char buf[1024];
diff --git a/indra/llplugin/llplugininstance.h b/indra/llplugin/llplugininstance.h
index e6926c3e37..ee28f68e83 100644
--- a/indra/llplugin/llplugininstance.h
+++ b/indra/llplugin/llplugininstance.h
@@ -30,6 +30,7 @@
#include "llstring.h"
#include "llapr.h"
+#include "llaprpool.h"
#include "apr_dso.h"
@@ -39,7 +40,7 @@
class LLPluginInstanceMessageListener
{
public:
- virtual ~LLPluginInstanceMessageListener();
+ ~LLPluginInstanceMessageListener();
/** Plugin receives message from plugin loader shell. */
virtual void receivePluginMessage(const std::string &message) = 0;
};
@@ -88,6 +89,7 @@ private:
static void staticReceiveMessage(const char *message_string, void **user_data);
void receiveMessage(const char *message_string);
+ LLAPRPool mDSOHandlePool;
apr_dso_handle_t *mDSOHandle;
void *mPluginUserData;
diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp
index 8d13e38ad5..dd47300b9c 100644
--- a/indra/llplugin/llpluginmessagepipe.cpp
+++ b/indra/llplugin/llpluginmessagepipe.cpp
@@ -92,8 +92,6 @@ void LLPluginMessagePipeOwner::killMessagePipe(void)
}
LLPluginMessagePipe::LLPluginMessagePipe(LLPluginMessagePipeOwner *owner, LLSocket::ptr_t socket):
- mInputMutex(gAPRPoolp),
- mOutputMutex(gAPRPoolp),
mOwner(owner),
mSocket(socket)
{
diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h
index 627577beb1..beb942c0fe 100644
--- a/indra/llplugin/llpluginmessagepipe.h
+++ b/indra/llplugin/llpluginmessagepipe.h
@@ -40,7 +40,8 @@ class LLPluginMessagePipeOwner
LOG_CLASS(LLPluginMessagePipeOwner);
public:
LLPluginMessagePipeOwner();
- virtual ~LLPluginMessagePipeOwner();
+ ~LLPluginMessagePipeOwner();
+
// called with incoming messages
virtual void receiveMessageRaw(const std::string &message) = 0;
// called when the socket has an error
diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
index 0beb46d0e5..fd63fdde81 100644
--- a/indra/llplugin/llpluginprocesschild.cpp
+++ b/indra/llplugin/llpluginprocesschild.cpp
@@ -40,7 +40,7 @@ LLPluginProcessChild::LLPluginProcessChild()
{
mState = STATE_UNINITIALIZED;
mInstance = NULL;
- mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
+ mSocket = LLSocket::create(LLSocket::STREAM_TCP);
mSleepTime = PLUGIN_IDLE_SECONDS; // default: send idle messages at 100Hz
mCPUElapsed = 0.0f;
mBlockingRequest = false;
@@ -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..7aec72731e 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -33,6 +33,7 @@
#include "llpluginmessageclasses.h"
#include "llapr.h"
+#include "llscopedvolatileaprpool.h"
//virtual
LLPluginProcessParentOwner::~LLPluginProcessParentOwner()
@@ -42,6 +43,7 @@ LLPluginProcessParentOwner::~LLPluginProcessParentOwner()
bool LLPluginProcessParent::sUseReadThread = false;
apr_pollset_t *LLPluginProcessParent::sPollSet = NULL;
+LLAPRPool LLPluginProcessParent::sPollSetPool;
bool LLPluginProcessParent::sPollsetNeedsRebuild = false;
LLMutex *LLPluginProcessParent::sInstancesMutex;
std::list<LLPluginProcessParent*> LLPluginProcessParent::sInstances;
@@ -52,7 +54,7 @@ class LLPluginProcessParentPollThread: public LLThread
{
public:
LLPluginProcessParentPollThread() :
- LLThread("LLPluginProcessParentPollThread", gAPRPoolp)
+ LLThread("LLPluginProcessParentPollThread")
{
}
protected:
@@ -77,12 +79,11 @@ protected:
};
-LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner):
- mIncomingQueueMutex(gAPRPoolp)
+LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner* owner)
{
if(!sInstancesMutex)
{
- sInstancesMutex = new LLMutex(gAPRPoolp);
+ sInstancesMutex = new LLMutex;
}
mOwner = owner;
@@ -95,6 +96,7 @@ LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner):
mBlocked = false;
mPolledInput = false;
mPollFD.client_data = NULL;
+ mPollFDPool.create();
mPluginLaunchTimeout = 60.0f;
mPluginLockupTimeout = 15.0f;
@@ -171,44 +173,28 @@ void LLPluginProcessParent::init(const std::string &launcher_filename, const std
bool LLPluginProcessParent::accept()
{
bool result = false;
-
apr_status_t status = APR_EGENERAL;
- apr_socket_t *new_socket = NULL;
-
- status = apr_socket_accept(
- &new_socket,
- mListenSocket->getSocket(),
- gAPRPoolp);
+ mSocket = LLSocket::create(status, mListenSocket);
if(status == APR_SUCCESS)
{
// llinfos << "SUCCESS" << llendl;
// Success. Create a message pipe on the new socket
-
- // we MUST create a new pool for the LLSocket, since it will take ownership of it and delete it in its destructor!
- apr_pool_t* new_pool = NULL;
- status = apr_pool_create(&new_pool, gAPRPoolp);
-
- mSocket = LLSocket::create(new_socket, new_pool);
new LLPluginMessagePipe(this, mSocket);
result = true;
}
- else if(APR_STATUS_IS_EAGAIN(status))
- {
-// llinfos << "EAGAIN" << llendl;
-
- // No incoming connections. This is not an error.
- status = APR_SUCCESS;
- }
else
{
-// llinfos << "Error:" << llendl;
- ll_apr_warn_status(status);
-
- // Some other error.
- errorState();
+ mSocket.reset();
+ // EAGAIN means "No incoming connections". This is not an error.
+ if (!APR_STATUS_IS_EAGAIN(status))
+ {
+ // Some other error.
+ ll_apr_warn_status(status);
+ errorState();
+ }
}
return result;
@@ -274,10 +260,10 @@ void LLPluginProcessParent::idle(void)
case STATE_INITIALIZED:
{
-
apr_status_t status = APR_SUCCESS;
+ LLScopedVolatileAPRPool addr_pool;
apr_sockaddr_t* addr = NULL;
- mListenSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
+ mListenSocket = LLSocket::create(LLSocket::STREAM_TCP);
mBoundPort = 0;
// This code is based on parts of LLSocket::create() in lliosocket.cpp.
@@ -288,7 +274,7 @@ void LLPluginProcessParent::idle(void)
APR_INET,
0, // port 0 = ephemeral ("find me a port")
0,
- gAPRPoolp);
+ addr_pool);
if(ll_apr_warn_status(status))
{
@@ -601,7 +587,7 @@ void LLPluginProcessParent::setMessagePipe(LLPluginMessagePipe *message_pipe)
if(message_pipe != NULL)
{
// Set up the apr_pollfd_t
- mPollFD.p = gAPRPoolp;
+ mPollFD.p = mPollFDPool();
mPollFD.desc_type = APR_POLL_SOCKET;
mPollFD.reqevents = APR_POLLIN|APR_POLLERR|APR_POLLHUP;
mPollFD.rtnevents = 0;
@@ -648,6 +634,7 @@ void LLPluginProcessParent::updatePollset()
// delete the existing pollset.
apr_pollset_destroy(sPollSet);
sPollSet = NULL;
+ sPollSetPool.destroy();
}
std::list<LLPluginProcessParent*>::iterator iter;
@@ -670,12 +657,14 @@ void LLPluginProcessParent::updatePollset()
{
#ifdef APR_POLLSET_NOCOPY
// The pollset doesn't exist yet. Create it now.
- apr_status_t status = apr_pollset_create(&sPollSet, count, gAPRPoolp, APR_POLLSET_NOCOPY);
+ sPollSetPool.create();
+ apr_status_t status = apr_pollset_create(&sPollSet, count, sPollSetPool(), APR_POLLSET_NOCOPY);
if(status != APR_SUCCESS)
{
#endif // APR_POLLSET_NOCOPY
LL_WARNS("PluginPoll") << "Couldn't create pollset. Falling back to non-pollset mode." << LL_ENDL;
sPollSet = NULL;
+ sPollSetPool.destroy();
#ifdef APR_POLLSET_NOCOPY
}
else
@@ -927,6 +916,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/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h
index c66723f175..74b7e9f50c 100644
--- a/indra/llplugin/llpluginprocessparent.h
+++ b/indra/llplugin/llpluginprocessparent.h
@@ -41,7 +41,7 @@
class LLPluginProcessParentOwner
{
public:
- virtual ~LLPluginProcessParentOwner();
+ ~LLPluginProcessParentOwner();
virtual void receivePluginMessage(const LLPluginMessage &message) = 0;
virtual bool receivePluginMessageEarly(const LLPluginMessage &message) {return false;};
// This will only be called when the plugin has died unexpectedly
@@ -178,7 +178,9 @@ private:
static bool sUseReadThread;
apr_pollfd_t mPollFD;
+ LLAPRPool mPollFDPool;
static apr_pollset_t *sPollSet;
+ static LLAPRPool sPollSetPool;
static bool sPollsetNeedsRebuild;
static LLMutex *sInstancesMutex;
static std::list<LLPluginProcessParent*> sInstances;
diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp
index 63ff5085c6..e2ff645a9c 100644
--- a/indra/llplugin/llpluginsharedmemory.cpp
+++ b/indra/llplugin/llpluginsharedmemory.cpp
@@ -187,7 +187,8 @@ bool LLPluginSharedMemory::create(size_t size)
mName += createName();
mSize = size;
- apr_status_t status = apr_shm_create( &(mImpl->mAprSharedMemory), mSize, mName.c_str(), gAPRPoolp );
+ mPool.create();
+ apr_status_t status = apr_shm_create( &(mImpl->mAprSharedMemory), mSize, mName.c_str(), mPool());
if(ll_apr_warn_status(status))
{
@@ -210,7 +211,7 @@ bool LLPluginSharedMemory::destroy(void)
}
mImpl->mAprSharedMemory = NULL;
}
-
+ mPool.destroy();
return true;
}
@@ -219,7 +220,8 @@ bool LLPluginSharedMemory::attach(const std::string &name, size_t size)
mName = name;
mSize = size;
- apr_status_t status = apr_shm_attach( &(mImpl->mAprSharedMemory), mName.c_str(), gAPRPoolp );
+ mPool.create();
+ apr_status_t status = apr_shm_attach( &(mImpl->mAprSharedMemory), mName.c_str(), mPool() );
if(ll_apr_warn_status(status))
{
@@ -241,6 +243,7 @@ bool LLPluginSharedMemory::detach(void)
}
mImpl->mAprSharedMemory = NULL;
}
+ mPool.destroy();
return true;
}
diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h
index c6cd49cabb..84b7a58c32 100644
--- a/indra/llplugin/llpluginsharedmemory.h
+++ b/indra/llplugin/llpluginsharedmemory.h
@@ -28,6 +28,8 @@
#ifndef LL_LLPLUGINSHAREDMEMORY_H
#define LL_LLPLUGINSHAREDMEMORY_H
+#include "llaprpool.h"
+
class LLPluginSharedMemoryPlatformImpl;
/**
@@ -108,6 +110,7 @@ private:
bool close(void);
bool unlink(void);
+ LLAPRPool mPool;
std::string mName;
size_t mSize;
void *mMappedAddress;
diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp
index 516a58db88..ff86e4e135 100644
--- a/indra/llplugin/slplugin/slplugin.cpp
+++ b/indra/llplugin/slplugin/slplugin.cpp
@@ -176,8 +176,6 @@ int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL
int main(int argc, char **argv)
#endif
{
- ll_init_apr();
-
// Set up llerror logging
{
LLError::initForApplication(".");
@@ -393,8 +391,6 @@ int main(int argc, char **argv)
delete plugin;
- ll_cleanup_apr();
-
return 0;
}
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 0463d5364b..434fb7650b 100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -27,6 +27,7 @@
#include "linden_common.h"
#include "llmodel.h"
+#include "llmemory.h"
#include "llconvexdecomposition.h"
#include "llsdserialize.h"
#include "llvector4a.h"
@@ -71,88 +72,10 @@ LLModel::~LLModel()
}
}
-void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Array& inputs, U32 min_idx, U32 max_idx)
-{
- for (U32 j = 0; j < inputs.getCount(); ++j)
- {
- if (strcmp(COMMON_PROFILE_INPUT_VERTEX, inputs[j]->getSemantic()) == 0)
- { //found vertex array
- const domURIFragmentType& uri = inputs[j]->getSource();
- daeElementRef elem = uri.getElement();
- domVertices* vertices = (domVertices*) elem.cast();
-
- domInputLocal_Array& v_inp = vertices->getInput_array();
- if (inputs[j]->getOffset() != 0)
- {
- llerrs << "Vertex array offset MUST be zero." << llendl;
- }
-
- for (U32 k = 0; k < v_inp.getCount(); ++k)
- {
- if (strcmp(COMMON_PROFILE_INPUT_POSITION, v_inp[k]->getSemantic()) == 0)
- {
- const domURIFragmentType& uri = v_inp[k]->getSource();
-
- daeElementRef elem = uri.getElement();
- domSource* src = (domSource*) elem.cast();
-
- if (src->getTechnique_common()->getAccessor()->getStride() != 3)
- {
- llerrs << "Vertex array stride MUST be three." << llendl;
- }
-
- domListOfFloats& v = src->getFloat_array()->getValue();
-
- LLVector4a min;
- min.set(v[min_idx], v[min_idx+1], v[min_idx+2]);
- LLVector4a max = min;
-
- for (U32 j = min_idx; j <= max_idx; ++j)
- { //copy vertex array
- face.mPositions[j-min_idx].set(v[j*3+0], v[j*3+1], v[j*3+2]);
- update_min_max(min, max, face.mPositions[j-min_idx]);
- }
-
- face.mExtents[0] = min;
- face.mExtents[1] = max;
- }
- }
- }
-
- if (strcmp(COMMON_PROFILE_INPUT_NORMAL, inputs[j]->getSemantic()) == 0)
- {
- //found normal array for this triangle list
- const domURIFragmentType& uri = inputs[j]->getSource();
- daeElementRef elem = uri.getElement();
- domSource* src = (domSource*) elem.cast();
- domListOfFloats& n = src->getFloat_array()->getValue();
-
- for (U32 j = min_idx; j <= max_idx; ++j)
- {
- LLVector4a* norm = (LLVector4a*) face.mNormals + (j-min_idx);
- norm->set(n[j*3+0], n[j*3+1], n[j*3+2]);
- norm->normalize3();
- }
- }
- else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[j]->getSemantic()) == 0)
- { //found texCoords
- const domURIFragmentType& uri = inputs[j]->getSource();
- daeElementRef elem = uri.getElement();
- domSource* src = (domSource*) elem.cast();
- domListOfFloats& u = src->getFloat_array()->getValue();
-
- for (U32 j = min_idx; j <= max_idx; ++j)
- {
- face.mTexCoords[j-min_idx].setVec(u[j*2+0], u[j*2+1]);
- }
- }
- }
-}
bool get_dom_sources(const domInputLocalOffset_Array& inputs, S32& pos_offset, S32& tc_offset, S32& norm_offset, S32 &idx_stride,
domSource* &pos_source, domSource* &tc_source, domSource* &norm_source)
{
-
idx_stride = 0;
for (U32 j = 0; j < inputs.getCount(); ++j)
@@ -271,14 +194,13 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
cv.mTexCoord.setVec(tc[idx[i+tc_offset]*2+0],
tc[idx[i+tc_offset]*2+1]);
}
-
+
if (norm_source)
{
cv.setNormal(LLVector4a(n[idx[i+norm_offset]*3+0],
n[idx[i+norm_offset]*3+1],
n[idx[i+norm_offset]*3+2]));
}
-
BOOL found = FALSE;
@@ -329,10 +251,22 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
{
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
face = LLVolumeFace();
point_map.clear();
}
-
}
if (!verts.empty())
@@ -348,6 +282,18 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
}
return LLModel::NO_ERRORS ;
@@ -433,14 +379,14 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
cv.mTexCoord.setVec(tc[idx[cur_idx+tc_offset]*2+0],
tc[idx[cur_idx+tc_offset]*2+1]);
}
-
+
if (norm_source)
{
cv.getNormal().set(n[idx[cur_idx+norm_offset]*3+0],
n[idx[cur_idx+norm_offset]*3+1],
n[idx[cur_idx+norm_offset]*3+2]);
}
-
+
cur_idx += idx_stride;
BOOL found = FALSE;
@@ -524,6 +470,19 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
{
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
face = LLVolumeFace();
verts.clear();
indices.clear();
@@ -540,10 +499,23 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
{
material = std::string(poly->getMaterial());
}
-
+
materials.push_back(material);
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
}
return LLModel::NO_ERRORS ;
@@ -557,7 +529,6 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac
const domInputLocalOffset_Array& inputs = poly->getInput_array();
-
S32 v_offset = -1;
S32 n_offset = -1;
S32 t_offset = -1;
@@ -662,15 +633,14 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac
n->get(n_idx+1),
n->get(n_idx+2));
}
-
+
if (t)
{
U32 t_idx = idx[j*stride+t_offset]*2;
vert.mTexCoord.setVec(t->get(t_idx),
t->get(t_idx+1));
}
-
-
+
verts.push_back(vert);
}
}
@@ -733,6 +703,19 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac
materials.push_back(material);
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(new_verts, indices);
+
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!n)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!t)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
}
return LLModel::NO_ERRORS ;
@@ -817,9 +800,9 @@ BOOL LLModel::createVolumeFacesFromDomMesh(domMesh* mesh)
if (getNumVolumeFaces() > 0)
{
- optimizeVolumeFaces();
normalizeVolumeFaces();
-
+ optimizeVolumeFaces();
+
if (getNumVolumeFaces() > 0)
{
return TRUE;
@@ -853,81 +836,10 @@ void LLModel::offsetMesh( const LLVector3& pivotPoint )
void LLModel::optimizeVolumeFaces()
{
-#if 0 //VECTORIZE ?
- for (std::vector<LLVolumeFace>::iterator iter = mVolumeFaces.begin(); iter != mVolumeFaces.end(); )
- {
- std::vector<LLVolumeFace>::iterator cur_iter = iter++;
- LLVolumeFace& face = *cur_iter;
-
- for (S32 i = 0; i < (S32) face.mNumIndices; i += 3)
- { //remove zero area triangles
- U16 i0 = face.mIndices[i+0];
- U16 i1 = face.mIndices[i+1];
- U16 i2 = face.mIndices[i+2];
-
- if (i0 == i1 ||
- i1 == i2 ||
- i0 == i2)
- { //duplicate index in triangle, remove triangle
- face.mIndices.erase(face.mIndices.begin()+i, face.mIndices.begin()+i+3);
- i -= 3;
- }
- else
- {
- LLVolumeFace::VertexData& v0 = face.mVertices[i0];
- LLVolumeFace::VertexData& v1 = face.mVertices[i1];
- LLVolumeFace::VertexData& v2 = face.mVertices[i2];
-
- if (v0.mPosition == v1.mPosition ||
- v1.mPosition == v2.mPosition ||
- v2.mPosition == v0.mPosition)
- { //zero area triangle, delete
- face.mIndices.erase(face.mIndices.begin()+i, face.mIndices.begin()+i+3);
- i-=3;
- }
- }
- }
-
- //remove unreference vertices
- std::vector<bool> ref;
- ref.resize(face.mNumVertices);
-
- for (U32 i = 0; i < ref.size(); ++i)
- {
- ref[i] = false;
- }
-
- for (U32 i = 0; i < face.mNumIndices; ++i)
- {
- ref[face.mIndices[i]] = true;
- }
-
- U32 unref_count = 0;
- for (U32 i = 0; i < ref.size(); ++i)
- {
- if (!ref[i])
- {
- //vertex is unreferenced
- face.mVertices.erase(face.mVertices.begin()+(i-unref_count));
- U16 idx = (U16) (i-unref_count);
-
- for (U32 j = 0; j < face.mNumIndices; ++j)
- { //decrement every index array value greater than idx
- if (face.mIndices[j] > idx)
- {
- --face.mIndices[j];
- }
- }
- ++unref_count;
- }
- }
-
- if (face.mVertices.empty() || face.mIndices.empty())
- { //face is empty, remove it
- iter = mVolumeFaces.erase(cur_iter);
- }
+ for (U32 i = 0; i < getNumVolumeFaces(); ++i)
+ {
+ mVolumeFaces[i].optimize();
}
-#endif
}
// Shrink the model to fit
@@ -962,6 +874,25 @@ void LLModel::normalizeVolumeFaces()
update_min_max(min, max, face.mExtents[0]);
update_min_max(min, max, face.mExtents[1]);
+
+ if (face.mTexCoords)
+ {
+ LLVector2& min_tc = face.mTexCoordExtents[0];
+ LLVector2& max_tc = face.mTexCoordExtents[1];
+
+ min_tc = face.mTexCoords[0];
+ max_tc = face.mTexCoords[0];
+
+ for (U32 j = 1; j < face.mNumVertices; ++j)
+ {
+ update_min_max(min_tc, max_tc, face.mTexCoords[j]);
+ }
+ }
+ else
+ {
+ face.mTexCoordExtents[0].set(0,0);
+ face.mTexCoordExtents[1].set(1,1);
+ }
}
// Now that we have the extents of the model
@@ -1029,8 +960,11 @@ void LLModel::normalizeVolumeFaces()
{
pos[j].add(trans);
pos[j].mul(scale);
- norm[j].mul(inv_scale);
- norm[j].normalize3();
+ if (norm && !norm[j].equals3(LLVector4a::getZero()))
+ {
+ norm[j].mul(inv_scale);
+ norm[j].normalize3();
+ }
}
}
@@ -1073,8 +1007,26 @@ void LLModel::setVolumeFaceData(
face.resizeIndices(num_indices);
LLVector4a::memcpyNonAliased16((F32*) face.mPositions, (F32*) pos.get(), num_verts*4*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) face.mNormals, (F32*) norm.get(), num_verts*4*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), num_verts*2*sizeof(F32));
+ if (norm.get())
+ {
+ LLVector4a::memcpyNonAliased16((F32*) face.mNormals, (F32*) norm.get(), num_verts*4*sizeof(F32));
+ }
+ else
+ {
+ ll_aligned_free_16(face.mNormals);
+ face.mNormals = NULL;
+ }
+
+ if (tc.get())
+ {
+ LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), num_verts*2*sizeof(F32));
+ }
+ else
+ {
+ ll_aligned_free_16(face.mTexCoords);
+ face.mTexCoords = NULL;
+ }
+
U32 size = (num_indices*2+0xF)&~0xF;
LLVector4a::memcpyNonAliased16((F32*) face.mIndices, (F32*) ind.get(), size);
}
@@ -1257,10 +1209,23 @@ void LLModel::generateNormals(F32 angle_cutoff)
LLVolumeFace::VertexData v;
new_face.mPositions[i] = vol_face.mPositions[idx];
new_face.mNormals[i].clear();
- new_face.mTexCoords[i] = vol_face.mTexCoords[idx];
new_face.mIndices[i] = i;
}
+ if (vol_face.mTexCoords)
+ {
+ for (U32 i = 0; i < vol_face.mNumIndices; i++)
+ {
+ U32 idx = vol_face.mIndices[i];
+ new_face.mTexCoords[i] = vol_face.mTexCoords[idx];
+ }
+ }
+ else
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
//generate normals for new face
for (U32 i = 0; i < new_face.mNumIndices; i += 3)
{ //for each triangle
@@ -1395,7 +1360,8 @@ LLSD LLModel::writeModel(
const LLModel::Decomposition& decomp,
BOOL upload_skin,
BOOL upload_joints,
- BOOL nowrite)
+ BOOL nowrite,
+ BOOL as_slm)
{
LLSD mdl;
@@ -1419,12 +1385,20 @@ LLSD LLModel::writeModel(
!decomp.mHull.empty())
{
mdl["physics_convex"] = decomp.asLLSD();
- if (!decomp.mHull.empty())
- { //convex decomposition exists, physics mesh will not be used
+ if (!decomp.mHull.empty() && !as_slm)
+ { //convex decomposition exists, physics mesh will not be used (unless this is an slm file)
model[LLModel::LOD_PHYSICS] = NULL;
}
}
+ if (as_slm)
+ { //save material list names
+ for (U32 i = 0; i < high->mMaterialList.size(); ++i)
+ {
+ mdl["material_list"][i] = high->mMaterialList[i];
+ }
+ }
+
for (U32 idx = 0; idx < MODEL_NAMES_LENGTH; ++idx)
{
if (model[idx] && model[idx]->getNumVolumeFaces() > 0)
@@ -1462,13 +1436,19 @@ LLSD LLModel::writeModel(
U32 tc_idx = 0;
LLVector2* ftc = (LLVector2*) face.mTexCoords;
- LLVector2 min_tc = ftc[0];
- LLVector2 max_tc = min_tc;
-
- //get texture coordinate domain
- for (U32 j = 0; j < face.mNumVertices; ++j)
+ LLVector2 min_tc;
+ LLVector2 max_tc;
+
+ if (ftc)
{
- update_min_max(min_tc, max_tc, ftc[j]);
+ min_tc = ftc[0];
+ max_tc = min_tc;
+
+ //get texture coordinate domain
+ for (U32 j = 0; j < face.mNumVertices; ++j)
+ {
+ update_min_max(min_tc, max_tc, ftc[j]);
+ }
}
LLVector2 tc_range = max_tc - min_tc;
@@ -1477,9 +1457,8 @@ LLSD LLModel::writeModel(
{ //for each vert
F32* pos = face.mPositions[j].getF32ptr();
- F32* norm = face.mNormals[j].getF32ptr();
-
- //position + normal
+
+ //position
for (U32 k = 0; k < 3; ++k)
{ //for each component
//convert to 16-bit normalized across domain
@@ -1489,29 +1468,40 @@ LLSD LLModel::writeModel(
//write to binary buffer
verts[vert_idx++] = buff[0];
verts[vert_idx++] = buff[1];
-
- //convert to 16-bit normalized
- val = (U16) ((norm[k]+1.f)*0.5f*65535);
-
- //write to binary buffer
- normals[norm_idx++] = buff[0];
- normals[norm_idx++] = buff[1];
}
- F32* src_tc = (F32*) face.mTexCoords[j].mV;
+ if (face.mNormals)
+ { //normals
+ F32* norm = face.mNormals[j].getF32ptr();
- //texcoord
- for (U32 k = 0; k < 2; ++k)
- { //for each component
- //convert to 16-bit normalized
- U16 val = (U16) ((src_tc[k]-min_tc.mV[k])/tc_range.mV[k]*65535);
+ for (U32 k = 0; k < 3; ++k)
+ { //for each component
+ //convert to 16-bit normalized
+ U16 val = (U16) ((norm[k]+1.f)*0.5f*65535);
+ U8* buff = (U8*) &val;
- U8* buff = (U8*) &val;
- //write to binary buffer
- tc[tc_idx++] = buff[0];
- tc[tc_idx++] = buff[1];
+ //write to binary buffer
+ normals[norm_idx++] = buff[0];
+ normals[norm_idx++] = buff[1];
+ }
}
+ F32* src_tc = (F32*) face.mTexCoords[j].mV;
+
+ //texcoord
+ if (face.mTexCoords)
+ {
+ for (U32 k = 0; k < 2; ++k)
+ { //for each component
+ //convert to 16-bit normalized
+ U16 val = (U16) ((src_tc[k]-min_tc.mV[k])/tc_range.mV[k]*65535);
+
+ U8* buff = (U8*) &val;
+ //write to binary buffer
+ tc[tc_idx++] = buff[0];
+ tc[tc_idx++] = buff[1];
+ }
+ }
}
U32 idx_idx = 0;
@@ -1525,12 +1515,20 @@ LLSD LLModel::writeModel(
//write out face data
mdl[model_names[idx]][i]["PositionDomain"]["Min"] = min_pos.getValue();
mdl[model_names[idx]][i]["PositionDomain"]["Max"] = max_pos.getValue();
- mdl[model_names[idx]][i]["TexCoord0Domain"]["Min"] = min_tc.getValue();
- mdl[model_names[idx]][i]["TexCoord0Domain"]["Max"] = max_tc.getValue();
-
mdl[model_names[idx]][i]["Position"] = verts;
- mdl[model_names[idx]][i]["Normal"] = normals;
- mdl[model_names[idx]][i]["TexCoord0"] = tc;
+
+ if (face.mNormals)
+ {
+ mdl[model_names[idx]][i]["Normal"] = normals;
+ }
+
+ if (face.mTexCoords)
+ {
+ mdl[model_names[idx]][i]["TexCoord0Domain"]["Min"] = min_tc.getValue();
+ mdl[model_names[idx]][i]["TexCoord0Domain"]["Max"] = max_tc.getValue();
+ mdl[model_names[idx]][i]["TexCoord0"] = tc;
+ }
+
mdl[model_names[idx]][i]["TriangleList"] = indices;
if (skinning)
@@ -1588,10 +1586,10 @@ LLSD LLModel::writeModel(
}
}
- return writeModelToStream(ostr, mdl, nowrite);
+ return writeModelToStream(ostr, mdl, nowrite, as_slm);
}
-LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite)
+LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BOOL as_slm)
{
U32 bytes = 0;
@@ -1599,6 +1597,11 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite)
LLSD header;
+ if (as_slm && mdl.has("material_list"))
+ { //save material binding names to header
+ header["material_list"] = mdl["material_list"];
+ }
+
std::string skin;
if (mdl.has("skin"))
@@ -1792,6 +1795,15 @@ bool LLModel::loadModel(std::istream& is)
}
}
+ if (header.has("material_list"))
+ { //load material list names
+ mMaterialList.clear();
+ for (U32 i = 0; i < header["material_list"].size(); ++i)
+ {
+ mMaterialList.push_back(header["material_list"][i].asString());
+ }
+ }
+
std::string nm[] =
{
"lowest_lod",
@@ -1808,6 +1820,7 @@ bool LLModel::loadModel(std::istream& is)
if (header[nm[lod]]["offset"].asInteger() == -1 ||
header[nm[lod]]["size"].asInteger() == 0 )
{ //cannot load requested LOD
+ llwarns << "LoD data is invalid!" << llendl;
return false;
}
@@ -1821,7 +1834,7 @@ bool LLModel::loadModel(std::istream& is)
is.seekg(cur_pos);
}
- if (lod == LLModel::LOD_PHYSICS)
+ if (lod == LLModel::LOD_HIGH || lod == LLModel::LOD_PHYSICS)
{
std::ios::pos_type cur_pos = is.tellg();
loadDecomposition(header, is);
@@ -1868,11 +1881,66 @@ bool LLModel::loadModel(std::istream& is)
}
return true;
}
+ else
+ {
+ llwarns << "unpackVolumeFaces failed!" << llendl;
+ }
return false;
}
+void LLModel::matchMaterialOrder(LLModel* ref)
+{
+ llassert(ref->mMaterialList.size() == mMaterialList.size());
+
+ std::map<std::string, U32> index_map;
+
+ //build a map of material slot names to face indexes
+ bool reorder = false;
+ std::set<std::string> base_mat;
+ std::set<std::string> cur_mat;
+
+ for (U32 i = 0; i < mMaterialList.size(); i++)
+ {
+ index_map[ref->mMaterialList[i]] = i;
+ if (!reorder)
+ { //if any material name does not match reference, we need to reorder
+ reorder = ref->mMaterialList[i] != mMaterialList[i];
+ }
+ base_mat.insert(ref->mMaterialList[i]);
+ cur_mat.insert(mMaterialList[i]);
+ }
+
+
+ if (reorder &&
+ base_mat == cur_mat) //don't reorder if material name sets don't match
+ {
+ std::vector<LLVolumeFace> new_face_list;
+ new_face_list.resize(mVolumeFaces.size());
+
+ std::vector<std::string> new_material_list;
+ new_material_list.resize(mVolumeFaces.size());
+
+ //rebuild face list so materials have the same order
+ //as the reference model
+ for (U32 i = 0; i < mMaterialList.size(); ++i)
+ {
+ U32 ref_idx = index_map[mMaterialList[i]];
+ new_face_list[ref_idx] = mVolumeFaces[i];
+
+ new_material_list[ref_idx] = mMaterialList[i];
+ }
+
+ llassert(new_material_list == ref->mMaterialList);
+
+ mVolumeFaces = new_face_list;
+ }
+
+ //override material list with reference model ordering
+ mMaterialList = ref->mMaterialList;
+}
+
bool LLModel::loadSkinInfo(LLSD& header, std::istream &is)
{
@@ -2034,7 +2102,7 @@ LLModel::Decomposition::Decomposition(LLSD& data)
void LLModel::Decomposition::fromLLSD(LLSD& decomp)
{
- if (decomp.has("HullList"))
+ if (decomp.has("HullList") && decomp.has("Positions"))
{
// updated for const-correctness. gcc is picky about this type of thing - Nyx
const LLSD::Binary& hulls = decomp["HullList"].asBinary();
@@ -2190,6 +2258,8 @@ LLSD LLModel::Decomposition::asLLSD() const
ret["Min"] = min.getValue();
ret["Max"] = max.getValue();
+ LLVector3 range = max-min;
+
if (!hulls.empty())
{
ret["HullList"] = hulls;
@@ -2199,10 +2269,6 @@ LLSD LLModel::Decomposition::asLLSD() const
{
LLSD::Binary p(total*3*2);
- LLVector3 min(-0.5f, -0.5f, -0.5f);
- LLVector3 max(0.5f, 0.5f, 0.5f);
- LLVector3 range = max-min;
-
U32 vert_idx = 0;
for (U32 i = 0; i < mHull.size(); ++i)
@@ -2214,12 +2280,10 @@ LLSD LLModel::Decomposition::asLLSD() const
for (U32 j = 0; j < mHull[i].size(); ++j)
{
U64 test = 0;
+ const F32* src = mHull[i][j].mV;
+
for (U32 k = 0; k < 3; k++)
{
- F32* src = (F32*) (mHull[i][j].mV);
-
- llassert(src[k] <= 0.501f && src[k] >= -0.501f);
-
//convert to 16-bit normalized across domain
U16 val = (U16) (((src[k]-min.mV[k])/range.mV[k])*65535);
@@ -2258,19 +2322,17 @@ LLSD LLModel::Decomposition::asLLSD() const
{
LLSD::Binary p(mBaseHull.size()*3*2);
- LLVector3 min(-0.5f, -0.5f, -0.5f);
- LLVector3 max(0.5f, 0.5f, 0.5f);
- LLVector3 range = max-min;
-
U32 vert_idx = 0;
for (U32 j = 0; j < mBaseHull.size(); ++j)
{
+ const F32* v = mBaseHull[j].mV;
+
for (U32 k = 0; k < 3; k++)
{
- llassert(mBaseHull[j].mV[k] <= 0.51f && mBaseHull[j].mV[k] >= -0.51f);
+ llassert(v[k] <= 0.51f && v[k] >= -0.51f);
//convert to 16-bit normalized across domain
- U16 val = (U16) (((mBaseHull[j].mV[k]-min.mV[k])/range.mV[k])*65535);
+ U16 val = (U16) (((v[k]-min.mV[k])/range.mV[k])*65535);
U8* buff = (U8*) &val;
//write to binary buffer
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index cd9f76fcb7..3f58eba07d 100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -137,12 +137,13 @@ public:
const LLModel::Decomposition& decomp,
BOOL upload_skin,
BOOL upload_joints,
- BOOL nowrite = FALSE);
+ BOOL nowrite = FALSE,
+ BOOL as_slm = FALSE);
static LLSD writeModelToStream(
std::ostream& ostr,
LLSD& mdl,
- BOOL nowrite = FALSE);
+ BOOL nowrite = FALSE, BOOL as_slm = FALSE);
static LLModel* loadModelFromDomMesh(domMesh* mesh);
static std::string getElementLabel(daeElement* element);
@@ -171,6 +172,11 @@ public:
void optimizeVolumeFaces();
void offsetMesh( const LLVector3& pivotPoint );
void getNormalizedScaleTranslation(LLVector3& scale_out, LLVector3& translation_out);
+
+ //reorder face list based on mMaterialList in this and reference so
+ //order matches that of reference (material ordering touchup)
+ void matchMaterialOrder(LLModel* reference);
+
std::vector<std::string> mMaterialList;
//data used for skin weights
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index 76faa1b8c5..998016f8f6 100644..100755
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -103,6 +103,8 @@ public:
PARAMS_LIGHT = 0x20,
PARAMS_SCULPT = 0x30,
PARAMS_LIGHT_IMAGE = 0x40,
+ PARAMS_RESERVED = 0x50, // Used on server-side
+ PARAMS_MESH = 0x60,
};
public:
diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp
index fb22d7f1f5..1b10354c22 100644
--- a/indra/llrender/llcubemap.cpp
+++ b/indra/llrender/llcubemap.cpp
@@ -259,7 +259,7 @@ void LLCubeMap::setMatrix(S32 stage)
if (mMatrixStage < 0) return;
- if (stage > 0)
+ //if (stage > 0)
{
gGL.getTexUnit(stage)->activate();
}
@@ -278,17 +278,17 @@ void LLCubeMap::setMatrix(S32 stage)
glLoadMatrixf((F32 *)trans.mMatrix);
glMatrixMode(GL_MODELVIEW);
- if (stage > 0)
+ /*if (stage > 0)
{
gGL.getTexUnit(0)->activate();
- }
+ }*/
}
void LLCubeMap::restoreMatrix()
{
if (mMatrixStage < 0) return;
- if (mMatrixStage > 0)
+ //if (mMatrixStage > 0)
{
gGL.getTexUnit(mMatrixStage)->activate();
}
@@ -296,10 +296,10 @@ void LLCubeMap::restoreMatrix()
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
- if (mMatrixStage > 0)
+ /*if (mMatrixStage > 0)
{
gGL.getTexUnit(0)->activate();
- }
+ }*/
}
void LLCubeMap::setReflection (void)
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 180ae4dfa6..607473d416 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -189,6 +189,9 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
origin.mV[VX] -= llround((F32)sCurOrigin.mX) - (sCurOrigin.mX);
origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);
+ // Depth translation, so that floating text appears 'inworld'
+ // and is correclty occluded.
+ gGL.translatef(0.f,0.f,sCurOrigin.mZ);
S32 chars_drawn = 0;
S32 i;
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index a3aed4dd8a..4e3cfb9c8a 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -48,6 +48,7 @@
#include "llstacktrace.h"
#include "llglheaders.h"
+#include "llglslshader.h"
#ifdef _DEBUG
//#define GL_STATE_VERIFY
@@ -128,9 +129,21 @@ PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL;
PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB = NULL;
// GL_ARB_map_buffer_range
-PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
-PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
-
+PFNGLMAPBUFFERRANGEPROC glMapBufferRange = NULL;
+PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange = NULL;
+
+// GL_ARB_sync
+PFNGLFENCESYNCPROC glFenceSync = NULL;
+PFNGLISSYNCPROC glIsSync = NULL;
+PFNGLDELETESYNCPROC glDeleteSync = NULL;
+PFNGLCLIENTWAITSYNCPROC glClientWaitSync = NULL;
+PFNGLWAITSYNCPROC glWaitSync = NULL;
+PFNGLGETINTEGER64VPROC glGetInteger64v = NULL;
+PFNGLGETSYNCIVPROC glGetSynciv = NULL;
+
+// GL_APPLE_flush_buffer_range
+PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE = NULL;
+PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE = NULL;
// vertex object prototypes
PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI = NULL;
@@ -334,9 +347,10 @@ LLGLManager::LLGLManager() :
mHasFramebufferObject(FALSE),
mMaxSamples(0),
mHasBlendFuncSeparate(FALSE),
-
+ mHasSync(FALSE),
mHasVertexBufferObject(FALSE),
mHasMapBufferRange(FALSE),
+ mHasFlushBufferRange(FALSE),
mHasPBuffer(FALSE),
mHasShaderObjects(FALSE),
mHasVertexShader(FALSE),
@@ -568,6 +582,13 @@ bool LLGLManager::initGL()
glGetIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &mMaxSampleMaskWords);
}
+#if LL_WINDOWS
+ if (mIsATI)
+ { //using multisample textures on ATI results in black screen for some reason
+ mHasTextureMultisample = FALSE;
+ }
+#endif
+
if (mHasFramebufferObject)
{
glGetIntegerv(GL_MAX_SAMPLES, &mMaxSamples);
@@ -767,7 +788,9 @@ void LLGLManager::initExtensions()
mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts);
mHasOcclusionQuery2 = ExtensionExists("GL_ARB_occlusion_query2", gGLHExts.mSysExts);
mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);
+ mHasSync = ExtensionExists("GL_ARB_sync", gGLHExts.mSysExts);
mHasMapBufferRange = ExtensionExists("GL_ARB_map_buffer_range", gGLHExts.mSysExts);
+ mHasFlushBufferRange = ExtensionExists("GL_APPLE_flush_buffer_range", gGLHExts.mSysExts);
mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts);
// mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad
#ifdef GL_ARB_framebuffer_object
@@ -962,6 +985,16 @@ void LLGLManager::initExtensions()
mHasVertexBufferObject = FALSE;
}
}
+ if (mHasSync)
+ {
+ glFenceSync = (PFNGLFENCESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glFenceSync");
+ glIsSync = (PFNGLISSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glIsSync");
+ glDeleteSync = (PFNGLDELETESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteSync");
+ glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glClientWaitSync");
+ glWaitSync = (PFNGLWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glWaitSync");
+ glGetInteger64v = (PFNGLGETINTEGER64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetInteger64v");
+ glGetSynciv = (PFNGLGETSYNCIVPROC) GLH_EXT_GET_PROC_ADDRESS("glGetSynciv");
+ }
if (mHasMapBufferRange)
{
glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) GLH_EXT_GET_PROC_ADDRESS("glMapBufferRange");
@@ -1347,6 +1380,8 @@ void LLGLState::checkStates(const std::string& msg)
glGetIntegerv(GL_BLEND_SRC, &src);
glGetIntegerv(GL_BLEND_DST, &dst);
+ stop_glerror();
+
BOOL error = FALSE;
if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA)
@@ -1367,7 +1402,9 @@ void LLGLState::checkStates(const std::string& msg)
{
LLGLenum state = iter->first;
LLGLboolean cur_state = iter->second;
+ stop_glerror();
LLGLboolean gl_state = glIsEnabled(state);
+ stop_glerror();
if(cur_state != gl_state)
{
dumpStates();
@@ -1392,11 +1429,11 @@ void LLGLState::checkStates(const std::string& msg)
void LLGLState::checkTextureChannels(const std::string& msg)
{
+#if 0
if (!gDebugGL)
{
return;
}
-
stop_glerror();
GLint activeTexture;
@@ -1562,6 +1599,7 @@ void LLGLState::checkTextureChannels(const std::string& msg)
LL_GL_ERRS << "GL texture state corruption detected. " << msg << LL_ENDL;
}
}
+#endif
}
void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
@@ -1678,7 +1716,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
}
}
- if (glIsEnabled(GL_TEXTURE_2D))
+ /*if (glIsEnabled(GL_TEXTURE_2D))
{
if (!(data_mask & 0x0008))
{
@@ -1701,7 +1739,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
gFailLog << "GL does not have GL_TEXTURE_2D enabled on channel 1." << std::endl;
}
}
- }
+ }*/
glClientActiveTextureARB(GL_TEXTURE0_ARB);
gGL.getTexUnit(0)->activate();
@@ -1744,6 +1782,16 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
LLGLState::LLGLState(LLGLenum state, S32 enabled) :
mState(state), mWasEnabled(FALSE), mIsEnabled(FALSE)
{
+ if (LLGLSLShader::sNoFixedFunction)
+ { //always disable state that's deprecated post GL 3.0
+ switch (state)
+ {
+ case GL_ALPHA_TEST:
+ enabled = 0;
+ break;
+ }
+ }
+
stop_glerror();
if (state)
{
@@ -2103,8 +2151,7 @@ void LLGLNamePool::release(GLuint name)
void LLGLNamePool::upkeepPools()
{
LLMemType mt(LLMemType::MTYPE_UPKEEP_POOLS);
- tracker_t::LLInstanceTrackerScopedGuard guard;
- for (tracker_t::instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); ++iter)
+ for (tracker_t::instance_iter iter = beginInstances(); iter != endInstances(); ++iter)
{
LLGLNamePool & pool = *iter;
pool.upkeep();
@@ -2114,8 +2161,7 @@ void LLGLNamePool::upkeepPools()
//static
void LLGLNamePool::cleanupPools()
{
- tracker_t::LLInstanceTrackerScopedGuard guard;
- for (tracker_t::instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); ++iter)
+ for (tracker_t::instance_iter iter = beginInstances(); iter != endInstances(); ++iter)
{
LLGLNamePool & pool = *iter;
pool.cleanup();
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index d1bee00161..d736133f3f 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -88,7 +88,9 @@ public:
// ARB Extensions
BOOL mHasVertexBufferObject;
+ BOOL mHasSync;
BOOL mHasMapBufferRange;
+ BOOL mHasFlushBufferRange;
BOOL mHasPBuffer;
BOOL mHasShaderObjects;
BOOL mHasVertexShader;
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index f35f329f00..851a75629e 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -68,6 +68,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
+// GL_ARB_sync
+extern PFNGLFENCESYNCPROC glFenceSync;
+extern PFNGLISSYNCPROC glIsSync;
+extern PFNGLDELETESYNCPROC glDeleteSync;
+extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
+extern PFNGLWAITSYNCPROC glWaitSync;
+extern PFNGLGETINTEGER64VPROC glGetInteger64v;
+extern PFNGLGETSYNCIVPROC glGetSynciv;
+
+// GL_APPLE_flush_buffer_range
+extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE;
+extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE;
+
// GL_ARB_map_buffer_range
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
@@ -310,6 +323,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
+// GL_ARB_sync
+extern PFNGLFENCESYNCPROC glFenceSync;
+extern PFNGLISSYNCPROC glIsSync;
+extern PFNGLDELETESYNCPROC glDeleteSync;
+extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
+extern PFNGLWAITSYNCPROC glWaitSync;
+extern PFNGLGETINTEGER64VPROC glGetInteger64v;
+extern PFNGLGETSYNCIVPROC glGetSynciv;
+
+// GL_APPLE_flush_buffer_range
+extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE;
+extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE;
+
// GL_ARB_map_buffer_range
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
@@ -519,6 +545,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
+// GL_ARB_sync
+extern PFNGLFENCESYNCPROC glFenceSync;
+extern PFNGLISSYNCPROC glIsSync;
+extern PFNGLDELETESYNCPROC glDeleteSync;
+extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
+extern PFNGLWAITSYNCPROC glWaitSync;
+extern PFNGLGETINTEGER64VPROC glGetInteger64v;
+extern PFNGLGETSYNCIVPROC glGetSynciv;
+
+// GL_APPLE_flush_buffer_range
+extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE;
+extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE;
+
// GL_ARB_map_buffer_range
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 8e99f62de6..f51d83abe4 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -49,6 +49,12 @@ using std::make_pair;
using std::string;
GLhandleARB LLGLSLShader::sCurBoundShader = 0;
+LLGLSLShader* LLGLSLShader::sCurBoundShaderPtr = NULL;
+bool LLGLSLShader::sNoFixedFunction = false;
+
+//UI shader -- declared here so llui_libtest will link properly
+LLGLSLShader gUIProgram;
+LLGLSLShader gSolidColorProgram;
BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
{
@@ -58,7 +64,8 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
LLShaderFeatures::LLShaderFeatures()
: calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false),
hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false),
-hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false)
+hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false),
+hasAlphaMask(false)
{
}
@@ -109,6 +116,11 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
// Create program
mProgramObject = glCreateProgramObjectARB();
+ if (gGLManager.mGLVersion < 3.1f)
+ { //force indexed texture channels to 1 if GL version is old (performance improvement for drivers with poor branching shader model support)
+ mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1);
+ }
+
//compile new source
vector< pair<string,GLenum> >::iterator fileIter = mShaderFiles.begin();
for ( ; fileIter != mShaderFiles.end(); fileIter++ )
@@ -131,6 +143,11 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
return FALSE;
}
+ if (gGLManager.mGLVersion < 3.1f)
+ { //attachShaderFeatures may have set the number of indexed texture channels, so set to 1 again
+ mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1);
+ }
+
// Map attributes and uniforms
if (success)
{
@@ -366,10 +383,12 @@ BOOL LLGLSLShader::link(BOOL suppress_errors)
void LLGLSLShader::bind()
{
+ gGL.flush();
if (gGLManager.mHasShaderObjects)
{
glUseProgramObjectARB(mProgramObject);
sCurBoundShader = mProgramObject;
+ sCurBoundShaderPtr = this;
if (mUniformsDirty)
{
LLShaderMgr::instance()->updateShaderUniforms(this);
@@ -380,6 +399,7 @@ void LLGLSLShader::bind()
void LLGLSLShader::unbind()
{
+ gGL.flush();
if (gGLManager.mHasShaderObjects)
{
stop_glerror();
@@ -393,6 +413,7 @@ void LLGLSLShader::unbind()
}
glUseProgramObjectARB(0);
sCurBoundShader = 0;
+ sCurBoundShaderPtr = NULL;
stop_glerror();
}
}
@@ -401,6 +422,7 @@ void LLGLSLShader::bindNoShader(void)
{
glUseProgramObjectARB(0);
sCurBoundShader = 0;
+ sCurBoundShaderPtr = NULL;
}
S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode)
@@ -962,3 +984,9 @@ void LLGLSLShader::vertexAttrib4fv(U32 index, GLfloat* v)
glVertexAttrib4fvARB(mAttribute[index], v);
}
}
+
+void LLGLSLShader::setAlphaRange(F32 minimum, F32 maximum)
+{
+ uniform1f("minimum_alpha", minimum);
+ uniform1f("maximum_alpha", maximum);
+}
diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h
index 4922eb6d67..558ea66b50 100644
--- a/indra/llrender/llglslshader.h
+++ b/indra/llrender/llglslshader.h
@@ -47,6 +47,7 @@ public:
bool hasGamma;
S32 mIndexedTextureChannels;
bool disableTextureIndex;
+ bool hasAlphaMask;
// char numLights;
@@ -67,6 +68,9 @@ public:
LLGLSLShader();
static GLhandleARB sCurBoundShader;
+ static LLGLSLShader* sCurBoundShaderPtr;
+
+ static bool sNoFixedFunction;
void unload();
BOOL createShader(std::vector<std::string> * attributes,
@@ -104,6 +108,8 @@ public:
void uniformMatrix3fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v);
void uniformMatrix4fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v);
+ void setAlphaRange(F32 minimum, F32 maximum);
+
void vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void vertexAttrib4fv(U32 index, GLfloat* v);
@@ -141,4 +147,10 @@ public:
std::string mName;
};
+//UI shader (declared here so llui_libtest will link properly)
+extern LLGLSLShader gUIProgram;
+//output vec4(color.rgb,color.a*tex0[tc0].a)
+extern LLGLSLShader gSolidColorProgram;
+
+
#endif
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 60a5962234..7188b0fa44 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1414,6 +1414,8 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
void LLImageGL::deleteDeadTextures()
{
+ bool reset = false;
+
while (!sDeadTextureList.empty())
{
GLuint tex = sDeadTextureList.front();
@@ -1422,16 +1424,26 @@ void LLImageGL::deleteDeadTextures()
{
LLTexUnit* tex_unit = gGL.getTexUnit(i);
- if (tex_unit->getCurrTexture() == tex)
+ if (tex_unit && tex_unit->getCurrTexture() == tex)
{
tex_unit->unbind(tex_unit->getCurrType());
stop_glerror();
+
+ if (i > 0)
+ {
+ reset = true;
+ }
}
}
glDeleteTextures(1, &tex);
stop_glerror();
}
+
+ if (reset)
+ {
+ gGL.getTexUnit(0)->activate();
+ }
}
void LLImageGL::destroyGLTexture()
@@ -1875,6 +1887,7 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
void LLImageGL::setCategory(S32 category)
{
+#if 0 //turn this off temporarily because it is not in use now.
if(!gAuditTexture)
{
return ;
@@ -1895,6 +1908,7 @@ void LLImageGL::setCategory(S32 category)
mCategory = -1 ;
}
}
+#endif
}
//for debug use
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 6a3f186531..edcc47aa14 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -46,6 +46,7 @@ S32 gGLViewport[4];
U32 LLRender::sUICalls = 0;
U32 LLRender::sUIVerts = 0;
+U32 LLTexUnit::sWhiteTexture = 0;
static const U32 LL_NUM_TEXTURE_LAYERS = 32;
static const U32 LL_NUM_LIGHT_UNITS = 8;
@@ -126,7 +127,8 @@ void LLTexUnit::refreshState(void)
// Per apple spec, don't call glEnable/glDisable when index exceeds max texture units
// http://www.mailinglistarchive.com/html/mac-opengl@lists.apple.com/2008-07/msg00653.html
//
- bool enableDisable = (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE;
+ bool enableDisable = !LLGLSLShader::sNoFixedFunction &&
+ (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE;
if (mCurrTexType != TT_NONE)
{
@@ -184,7 +186,8 @@ void LLTexUnit::enable(eTextureType type)
mCurrTexType = type;
gGL.flush();
- if (type != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
+ if (!LLGLSLShader::sNoFixedFunction &&
+ type != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
mIndex < gGLManager.mNumTextureUnits)
{
glEnable(sGLTextureType[type]);
@@ -201,7 +204,8 @@ void LLTexUnit::disable(void)
activate();
unbind(mCurrTexType);
gGL.flush();
- if (mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
+ if (!LLGLSLShader::sNoFixedFunction &&
+ mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
mIndex < gGLManager.mNumTextureUnits)
{
glDisable(sGLTextureType[mCurrTexType]);
@@ -294,7 +298,7 @@ bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind)
glBindTexture(sGLTextureType[texture->getTarget()], mCurrTexture);
texture->updateBindStats(texture->mTextureMemory);
mHasMipMaps = texture->mHasMipMaps;
- if (mIndex == 0 && texture->mTexOptionsDirty)
+ if (texture->mTexOptionsDirty)
{
texture->mTexOptionsDirty = false;
setTextureAddressMode(texture->mAddressMode);
@@ -403,7 +407,14 @@ void LLTexUnit::unbind(eTextureType type)
activate();
mCurrTexture = 0;
- glBindTexture(sGLTextureType[type], 0);
+ if (LLGLSLShader::sNoFixedFunction && type == LLTexUnit::TT_TEXTURE)
+ {
+ glBindTexture(sGLTextureType[type], sWhiteTexture);
+ }
+ else
+ {
+ glBindTexture(sGLTextureType[type], 0);
+ }
stop_glerror();
}
}
@@ -474,6 +485,11 @@ void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions optio
void LLTexUnit::setTextureBlendType(eTextureBlendType type)
{
+ if (LLGLSLShader::sNoFixedFunction)
+ { //texture blend type means nothing when using shaders
+ return;
+ }
+
if (mIndex < 0) return;
// Do nothing if it's already correctly set.
@@ -594,6 +610,11 @@ GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha)
void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha)
{
+ if (LLGLSLShader::sNoFixedFunction)
+ { //register combiners do nothing when not using fixed function
+ return;
+ }
+
if (mIndex < 0) return;
activate();
@@ -906,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++)
{
@@ -943,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++)
@@ -958,6 +984,7 @@ void LLRender::shutdown()
delete mLightState[i];
}
mLightState.clear();
+ mBuffer = NULL ;
}
void LLRender::refreshState(void)
@@ -1147,6 +1174,11 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
{
flush();
+ if (LLGLSLShader::sNoFixedFunction)
+ { //glAlphaFunc is deprecated in OpenGL 3.3
+ return;
+ }
+
if (mCurrAlphaFunc != func ||
mCurrAlphaFuncVal != value)
{
@@ -1161,6 +1193,30 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
glAlphaFunc(sGLCompareFunc[func], value);
}
}
+
+ if (gDebugGL)
+ { //make sure cached state is correct
+ GLint cur_func = 0;
+ glGetIntegerv(GL_ALPHA_TEST_FUNC, &cur_func);
+
+ if (func == CF_DEFAULT)
+ {
+ func = CF_GREATER;
+ }
+
+ if (cur_func != sGLCompareFunc[func])
+ {
+ llerrs << "Alpha test function corrupted!" << llendl;
+ }
+
+ F32 ref = 0.f;
+ glGetFloatv(GL_ALPHA_TEST_REF, &ref);
+
+ if (ref != value)
+ {
+ llerrs << "Alpha test value corrupted!" << llendl;
+ }
+ }
}
void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 41e7b35341..8f7ee30d87 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -52,6 +52,8 @@ class LLTexUnit
{
friend class LLRender;
public:
+ static U32 sWhiteTexture;
+
typedef enum
{
TT_TEXTURE = 0, // Standard 2D Texture
@@ -308,6 +310,7 @@ public:
LLRender();
~LLRender();
+ void init() ;
void shutdown();
// Refreshes renderer state to the cached values
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index b6463309e1..8c0d3592df 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -72,11 +72,11 @@ LLRenderTarget::~LLRenderTarget()
release();
}
-void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)
+bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)
{
stop_glerror();
-
release();
+ stop_glerror();
mResX = resx;
mResY = resy;
@@ -103,9 +103,11 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo
{
if (depth)
{
- stop_glerror();
- allocateDepth();
- stop_glerror();
+ if (!allocateDepth())
+ {
+ llwarns << "Failed to allocate depth buffer for render target." << llendl;
+ return false;
+ }
}
glGenFramebuffers(1, (GLuint *) &mFBO);
@@ -131,14 +133,14 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo
stop_glerror();
}
- addColorAttachment(color_fmt);
+ return addColorAttachment(color_fmt);
}
-void LLRenderTarget::addColorAttachment(U32 color_fmt)
+bool LLRenderTarget::addColorAttachment(U32 color_fmt)
{
if (color_fmt == 0)
{
- return;
+ return true;
}
U32 offset = mTex.size();
@@ -158,14 +160,26 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt)
#ifdef GL_ARB_texture_multisample
if (mSamples > 1)
{
+ clear_glerror();
glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, color_fmt, mResX, mResY, GL_TRUE);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ llwarns << "Could not allocate multisample color buffer for render target." << llendl;
+ return false;
+ }
}
else
#else
llassert_always(mSamples <= 1);
#endif
{
+ clear_glerror();
LLImageGL::setManualImage(LLTexUnit::getInternalType(mUsage), 0, color_fmt, mResX, mResY, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ llwarns << "Could not allocate color buffer for render target." << llendl;
+ return false;
+ }
}
stop_glerror();
@@ -217,15 +231,18 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt)
flush();
}
+ return true;
}
-void LLRenderTarget::allocateDepth()
+bool LLRenderTarget::allocateDepth()
{
if (mStencil)
{
//use render buffers where stencil buffers are in play
glGenRenderbuffers(1, (GLuint *) &mDepth);
glBindRenderbuffer(GL_RENDERBUFFER, mDepth);
+ stop_glerror();
+ clear_glerror();
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, mResX, mResY);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
}
@@ -237,17 +254,29 @@ void LLRenderTarget::allocateDepth()
{
U32 internal_type = LLTexUnit::getInternalType(mUsage);
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
+ stop_glerror();
+ clear_glerror();
LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT32, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
}
#ifdef GL_ARB_texture_multisample
else
{
+ stop_glerror();
+ clear_glerror();
glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, GL_DEPTH_COMPONENT32, mResX, mResY, GL_TRUE);
}
#else
llassert_always(mSamples <= 1);
#endif
}
+
+ if (glGetError() != GL_NO_ERROR)
+ {
+ llwarns << "Unable to allocate depth buffer for render target." << llendl;
+ return false;
+ }
+
+ return true;
}
void LLRenderTarget::shareDepthBuffer(LLRenderTarget& target)
diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h
index 094b58b562..dea1de12d8 100644
--- a/indra/llrender/llrendertarget.h
+++ b/indra/llrender/llrendertarget.h
@@ -66,30 +66,30 @@ public:
static bool sUseFBO;
LLRenderTarget();
- virtual ~LLRenderTarget();
+ ~LLRenderTarget();
//allocate resources for rendering
//must be called before use
//multiple calls will release previously allocated resources
- void allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = false, S32 samples = 0);
+ bool allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = false, S32 samples = 0);
//add color buffer attachment
//limit of 4 color attachments per render target
- virtual void addColorAttachment(U32 color_fmt);
+ bool addColorAttachment(U32 color_fmt);
//allocate a depth texture
- virtual void allocateDepth();
+ bool allocateDepth();
//share depth buffer with provided render target
- virtual void shareDepthBuffer(LLRenderTarget& target);
+ void shareDepthBuffer(LLRenderTarget& target);
//free any allocated resources
//safe to call redundantly
- virtual void release();
+ void release();
//bind target for rendering
//applies appropriate viewport
- virtual void bindTarget();
+ void bindTarget();
//unbind target for rendering
static void unbindTarget();
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index bdc103b917..986c1f2774 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -206,21 +206,40 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
if (features->hasLighting)
{
-
if (features->hasWaterFog)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightWaterNonIndexedF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightWaterAlphaMaskNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightWaterNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
}
}
else
{
- if (!shader->attachObject("lighting/lightWaterF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightWaterAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightWaterF.glsl"))
+ {
+ return FALSE;
+ }
}
shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1;
}
@@ -230,16 +249,36 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightNonIndexedF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightAlphaMaskNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
}
}
else
{
- if (!shader->attachObject("lighting/lightF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightF.glsl"))
+ {
+ return FALSE;
+ }
}
shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1;
}
@@ -272,14 +311,28 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedF.glsl"))
+ if (features->hasAlphaMask)
+ {
+ if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedF.glsl"))
{
return FALSE;
}
}
else
{
- if (!shader->attachObject("lighting/lightFullbrightWaterF.glsl"))
+ if (features->hasAlphaMask)
+ {
+ if (!shader->attachObject("lighting/lightFullbrightWaterAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else if (!shader->attachObject("lighting/lightFullbrightWaterF.glsl"))
{
return FALSE;
}
@@ -310,16 +363,37 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightFullbrightNonIndexedF.glsl"))
+
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightFullbrightNonIndexedAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightFullbrightNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
}
}
else
{
- if (!shader->attachObject("lighting/lightFullbrightF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightFullbrightAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightFullbrightF.glsl"))
+ {
+ return FALSE;
+ }
}
shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1;
}
@@ -406,7 +480,7 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
LL_DEBUGS("ShaderLoading") << log << LL_ENDL;
}
}
-}
+ }
GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels)
{
@@ -462,7 +536,11 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
GLcharARB* text[1024];
GLuint count = 0;
- if (gGLManager.mGLVersion < 3.f)
+ if (gGLManager.mGLVersion < 2.1f)
+ {
+ text[count++] = strdup("#version 110\n");
+ }
+ else if (gGLManager.mGLVersion < 3.f)
{
//set version to 1.20
text[count++] = strdup("#version 120\n");
@@ -524,7 +602,12 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
text[count++] = strdup("{\n");
- if (gGLManager.mGLVersion >= 3.f)
+ if (texture_index_channels == 1)
+ { //don't use flow control, that's silly
+ text[count++] = strdup("return texture2D(tex0, texcoord);\n");
+ text[count++] = strdup("}\n");
+ }
+ else if (gGLManager.mGLVersion >= 3.f)
{
text[count++] = strdup("\tswitch (int(vary_texture_index+0.25))\n");
text[count++] = strdup("\t{\n");
@@ -537,6 +620,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
text[count++] = strdup("\t}\n");
+ text[count++] = strdup("\treturn vec4(0,0,0,0);\n");
+ text[count++] = strdup("}\n");
}
else
{
@@ -557,10 +642,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
std::string if_str = llformat("if (ti == %d) return texture2D(tex%d, texcoord);\n", i, i);
text[count++] = strdup(if_str.c_str());
}
- }
- text[count++] = strdup("\treturn vec4(0,0,0,0);\n");
- text[count++] = strdup("}\n");
+ text[count++] = strdup("\treturn vec4(0,0,0,0);\n");
+ text[count++] = strdup("}\n");
+ }
}
//copy file into memory
@@ -605,11 +690,6 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
}
- //free memory
- for (GLuint i = 0; i < count; i++)
- {
- free(text[i]);
- }
if (error == GL_NO_ERROR)
{
//check for errors
@@ -623,6 +703,16 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
//an error occured, print log
LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
dumpObjectLog(ret);
+
+ std::stringstream ostr;
+ //dump shader source for debugging
+ for (GLuint i = 0; i < count; i++)
+ {
+ ostr << i << ": " << text[i];
+ }
+
+ LL_WARNS("ShaderLoading") << "\n" << ostr.str() << llendl;
+
ret = 0;
}
}
@@ -633,6 +723,12 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
stop_glerror();
+ //free memory
+ for (GLuint i = 0; i < count; i++)
+ {
+ free(text[i]);
+ }
+
//successfully loaded, save results
if (ret)
{
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 4a0b964e61..8fd1193780 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -25,7 +25,6 @@
*/
#include "linden_common.h"
-#include "llmemory.h"
#include <boost/static_assert.hpp>
#include "llsys.h"
@@ -35,6 +34,9 @@
#include "llmemtype.h"
#include "llrender.h"
#include "llvector4a.h"
+#include "llglslshader.h"
+#include "llmemory.h"
+
//============================================================================
@@ -44,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;
@@ -65,6 +68,60 @@ S32 LLVertexBuffer::sWeight4Loc = -1;
std::vector<U32> LLVertexBuffer::sDeleteList;
+const U32 FENCE_WAIT_TIME_NANOSECONDS = 10000; //1 ms
+
+class LLGLSyncFence : public LLGLFence
+{
+public:
+#ifdef GL_ARB_sync
+ GLsync mSync;
+#endif
+
+ LLGLSyncFence()
+ {
+#ifdef GL_ARB_sync
+ mSync = 0;
+#endif
+ }
+
+ ~LLGLSyncFence()
+ {
+#ifdef GL_ARB_sync
+ if (mSync)
+ {
+ glDeleteSync(mSync);
+ }
+#endif
+ }
+
+ void placeFence()
+ {
+#ifdef GL_ARB_sync
+ if (mSync)
+ {
+ glDeleteSync(mSync);
+ }
+ mSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+#endif
+ }
+
+ void wait()
+ {
+#ifdef GL_ARB_sync
+ if (mSync)
+ {
+ while (glClientWaitSync(mSync, 0, FENCE_WAIT_TIME_NANOSECONDS) == GL_TIMEOUT_EXPIRED)
+ { //track the number of times we've waited here
+ static S32 waits = 0;
+ waits++;
+ }
+ }
+#endif
+ }
+
+
+};
+
S32 LLVertexBuffer::sTypeSize[LLVertexBuffer::TYPE_MAX] =
{
sizeof(LLVector4), // TYPE_VERTEX,
@@ -240,7 +297,8 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)
void LLVertexBuffer::drawArrays(U32 mode, const std::vector<LLVector3>& pos, const std::vector<LLVector3>& norm)
{
U32 count = pos.size();
- llassert(norm.size() >= pos.size());
+ llassert_always(norm.size() >= pos.size());
+ llassert_always(count > 0) ;
unbind();
@@ -309,6 +367,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi
glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT,
idx);
stop_glerror();
+ placeFence();
}
void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
@@ -340,6 +399,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
glDrawElements(sGLMode[mode], count, GL_UNSIGNED_SHORT,
((U16*) getIndicesPointer()) + indices_offset);
stop_glerror();
+ placeFence();
}
void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
@@ -365,6 +425,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
stop_glerror();
glDrawArrays(sGLMode[mode], first, count);
stop_glerror();
+ placeFence();
}
//static
@@ -383,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
@@ -412,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)
@@ -444,9 +514,11 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :
mFilthy(FALSE),
mEmpty(TRUE),
mResized(FALSE),
- mDynamicSize(FALSE)
+ mDynamicSize(FALSE),
+ mFence(NULL)
{
LLMemType mt2(LLMemType::MTYPE_VERTEX_CONSTRUCTOR);
+ mFence = NULL;
if (!sEnableVBOs)
{
mUsage = 0 ;
@@ -527,9 +599,40 @@ LLVertexBuffer::~LLVertexBuffer()
destroyGLIndices();
sCount--;
+ if (mFence)
+ {
+ delete mFence;
+ }
+
+ mFence = NULL;
+
llassert_always(!mMappedData && !mMappedIndexData) ;
};
+void LLVertexBuffer::placeFence() const
+{
+ /*if (!mFence && useVBOs())
+ {
+ if (gGLManager.mHasSync)
+ {
+ mFence = new LLGLSyncFence();
+ }
+ }
+
+ if (mFence)
+ {
+ mFence->placeFence();
+ }*/
+}
+
+void LLVertexBuffer::waitFence() const
+{
+ /*if (mFence)
+ {
+ mFence->wait();
+ }*/
+}
+
//----------------------------------------------------------------------------
void LLVertexBuffer::genBuffer()
@@ -629,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);
}
}
@@ -663,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;
}
@@ -686,7 +789,7 @@ void LLVertexBuffer::destroyGLBuffer()
}
else
{
- ll_aligned_free_16(mMappedData);
+ FREE_MEM(sPrivatePoolp, mMappedData) ;
mMappedData = NULL;
mEmpty = TRUE;
}
@@ -715,7 +818,7 @@ void LLVertexBuffer::destroyGLIndices()
}
else
{
- ll_aligned_free_16(mMappedIndexData);
+ FREE_MEM(sPrivatePoolp, mMappedIndexData) ;
mMappedIndexData = NULL;
mEmpty = TRUE;
}
@@ -848,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;
}
@@ -869,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;
}
@@ -892,17 +995,11 @@ BOOL LLVertexBuffer::useVBOs() const
{
//it's generally ineffective to use VBO for things that are streaming on apple
-#if LL_DARWIN
- if (!mUsage || mUsage == GL_STREAM_DRAW_ARB)
- {
- return FALSE;
- }
-#else
if (!mUsage)
{
return FALSE;
}
-#endif
+
return TRUE;
}
@@ -911,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 ;
}
@@ -922,7 +1019,7 @@ void LLVertexBuffer::allocateClientVertexBuffer()
{
if(!mMappedData)
{
- mMappedData = (U8*)ll_aligned_malloc_16(getSize());
+ mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, getSize());
}
}
@@ -930,7 +1027,7 @@ void LLVertexBuffer::allocateClientIndexBuffer()
{
if(!mMappedIndexData)
{
- mMappedIndexData = (U8*)ll_aligned_malloc_16(getIndicesSize());
+ mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, getIndicesSize());
}
}
@@ -967,8 +1064,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
if (useVBOs())
{
-
- if (sDisableVBOMapping || gGLManager.mHasMapBufferRange)
+ if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (count == -1)
{
@@ -1008,6 +1104,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES);
setBuffer(0, type);
mVertexLocked = TRUE;
+ sMappedCount++;
stop_glerror();
if(sDisableVBOMapping)
@@ -1018,29 +1115,50 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
else
{
U8* src = NULL;
-#ifdef GL_ARB_map_buffer_range
+ waitFence();
if (gGLManager.mHasMapBufferRange)
{
if (map_range)
{
+#ifdef GL_ARB_map_buffer_range
S32 offset = mOffsets[type] + sTypeSize[type]*index;
S32 length = (sTypeSize[type]*count+0xF) & ~0xF;
- src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
+ src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT |
+ GL_MAP_INVALIDATE_RANGE_BIT);
+#endif
}
else
{
- src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT);
+#ifdef GL_ARB_map_buffer_range
+ src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT);
+#endif
+ }
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+ if (map_range)
+ {
+ glBufferParameteriAPPLE(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_FALSE);
+ glBufferParameteriAPPLE(GL_ARRAY_BUFFER_ARB, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE);
+ src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
+ }
+ else
+ {
+ src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
}
else
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
{
map_range = false;
src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
+ llassert(src != NULL);
+
mMappedData = LL_NEXT_ALIGNED_ADDRESS<U8>(src);
mAlignedOffset = mMappedData - src;
@@ -1051,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)
{
//--------------------
@@ -1082,7 +1197,6 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
llerrs << "memory allocation for vertex data failed." << llendl ;
}
}
- sMappedCount++;
}
}
else
@@ -1090,7 +1204,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
map_range = false;
}
- if (map_range && !sDisableVBOMapping)
+ if (map_range && gGLManager.mHasMapBufferRange && !sDisableVBOMapping)
{
return mMappedData;
}
@@ -1114,7 +1228,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
if (useVBOs())
{
- if (sDisableVBOMapping || gGLManager.mHasMapBufferRange)
+ if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (count == -1)
{
@@ -1152,6 +1266,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
setBuffer(0, TYPE_INDEX);
mIndexLocked = TRUE;
+ sMappedCount++;
stop_glerror();
if(sDisableVBOMapping)
@@ -1162,29 +1277,51 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
else
{
U8* src = NULL;
-#ifdef GL_ARB_map_buffer_range
+ waitFence();
if (gGLManager.mHasMapBufferRange)
{
if (map_range)
{
+#ifdef GL_ARB_map_buffer_range
S32 offset = sizeof(U16)*index;
S32 length = sizeof(U16)*count;
- src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
+ src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT |
+ GL_MAP_INVALIDATE_RANGE_BIT);
+#endif
+ }
+ else
+ {
+#ifdef GL_ARB_map_buffer_range
+ src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT);
+#endif
+ }
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+ if (map_range)
+ {
+ glBufferParameteriAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_FALSE);
+ glBufferParameteriAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE);
+ src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
else
{
- src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT);
+ src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
}
else
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
{
map_range = false;
src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
+ llassert(src != NULL);
+
+
mMappedIndexData = src; //LL_NEXT_ALIGNED_ADDRESS<U8>(src);
mAlignedIndexOffset = mMappedIndexData - src;
stop_glerror();
@@ -1194,6 +1331,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
if (!mMappedIndexData)
{
log_glerror();
+ LLMemory::logMemoryInfo(TRUE) ;
if(!sDisableVBOMapping)
{
@@ -1211,15 +1349,13 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
llerrs << "memory allocation for Index data failed. " << llendl ;
}
}
-
- sMappedCount++;
}
else
{
map_range = false;
}
- if (map_range && !sDisableVBOMapping)
+ if (map_range && gGLManager.mHasMapBufferRange && !sDisableVBOMapping)
{
return mMappedIndexData;
}
@@ -1268,8 +1404,7 @@ void LLVertexBuffer::unmapBuffer(S32 type)
}
else
{
-#ifdef GL_ARB_map_buffer_range
- if (gGLManager.mHasMapBufferRange)
+ if (gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (!mMappedVertexRegions.empty())
{
@@ -1279,16 +1414,22 @@ void LLVertexBuffer::unmapBuffer(S32 type)
const MappedRegion& region = mMappedVertexRegions[i];
S32 offset = region.mIndex >= 0 ? mOffsets[region.mType]+sTypeSize[region.mType]*region.mIndex : 0;
S32 length = sTypeSize[region.mType]*region.mCount;
- glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length);
+ if (gGLManager.mHasMapBufferRange)
+ {
+#ifdef GL_ARB_map_buffer_range
+ glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length);
+#endif
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+ glFlushMappedBufferRangeAPPLE(GL_ARRAY_BUFFER_ARB, offset, length);
+ }
stop_glerror();
}
mMappedVertexRegions.clear();
}
}
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
stop_glerror();
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
stop_glerror();
@@ -1326,8 +1467,7 @@ void LLVertexBuffer::unmapBuffer(S32 type)
}
else
{
-#ifdef GL_ARB_map_buffer_range
- if (gGLManager.mHasMapBufferRange)
+ if (gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (!mMappedIndexRegions.empty())
{
@@ -1336,16 +1476,24 @@ void LLVertexBuffer::unmapBuffer(S32 type)
const MappedRegion& region = mMappedIndexRegions[i];
S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0;
S32 length = sizeof(U16)*region.mCount;
- glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);
+ if (gGLManager.mHasMapBufferRange)
+ {
+#ifdef GL_ARB_map_buffer_range
+ glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);
+#endif
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+#ifdef GL_APPLE_flush_buffer_range
+ glFlushMappedBufferRangeAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);
+#endif
+ }
stop_glerror();
}
mMappedIndexRegions.clear();
}
}
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
stop_glerror();
glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
stop_glerror();
diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h
index aa5df305a6..578cec3885 100644
--- a/indra/llrender/llvertexbuffer.h
+++ b/indra/llrender/llvertexbuffer.h
@@ -70,10 +70,16 @@ protected:
}
};
+class LLGLFence
+{
+public:
+ virtual void placeFence() = 0;
+ virtual void wait() = 0;
+};
//============================================================================
// base class
-
+class LLPrivateMemoryPool ;
class LLVertexBuffer : public LLRefCount
{
public:
@@ -270,6 +276,15 @@ protected:
std::vector<MappedRegion> mMappedVertexRegions;
std::vector<MappedRegion> mMappedIndexRegions;
+ mutable LLGLFence* mFence;
+
+ void placeFence() const;
+ 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 684e393cba..b3b2f4ae56 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -28,6 +28,9 @@ include_directories(
set(llui_SOURCE_FILES
llaccordionctrl.cpp
llaccordionctrltab.cpp
+ llbadge.cpp
+ llbadgeholder.cpp
+ llbadgeowner.cpp
llbutton.cpp
llcheckboxctrl.cpp
llclipboard.cpp
@@ -93,6 +96,7 @@ set(llui_SOURCE_FILES
lltextparser.cpp
lltextutil.cpp
lltextvalidate.cpp
+ lltimectrl.cpp
lltransutil.cpp
lltoggleablemenu.cpp
lltooltip.cpp
@@ -119,6 +123,9 @@ set(llui_HEADER_FILES
llaccordionctrl.h
llaccordionctrltab.h
+ llbadge.h
+ llbadgeholder.h
+ llbadgeowner.h
llbutton.h
llcallbackmap.h
llcheckboxctrl.h
@@ -160,7 +167,7 @@ set(llui_HEADER_FILES
llnotificationslistener.h
llnotificationsutil.h
llnotificationtemplate.h
- llnotificationvisibilityrule.h
+ llnotificationvisibilityrule.h
llpanel.h
llprogressbar.h
llradiogroup.h
@@ -191,6 +198,7 @@ set(llui_HEADER_FILES
lltextparser.h
lltextutil.h
lltextvalidate.h
+ lltimectrl.h
lltoggleablemenu.h
lltooltip.h
lltransutil.h
@@ -245,11 +253,11 @@ target_link_libraries(llui
)
# Add tests
-if (LL_TESTS)
- include(LLAddBuildTest)
- SET(llui_TEST_SOURCE_FILES
- llurlmatch.cpp
- llurlentry.cpp
- )
- LL_ADD_PROJECT_UNIT_TESTS(llui "${llui_TEST_SOURCE_FILES}")
-endif (LL_TESTS) \ No newline at end of file
+if(LL_TESTS)
+ include(LLAddBuildTest)
+ SET(llui_TEST_SOURCE_FILES
+ llurlmatch.cpp
+ llurlentry.cpp
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llui "${llui_TEST_SOURCE_FILES}")
+endif(LL_TESTS)
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index 9e4849c58b..6afe276379 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -1022,7 +1022,7 @@ void LLAccordionCtrlTab::updateLayout ( const LLRect& child_rect )
S32 panel_width = child_rect.getWidth();
static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
- if(mScrollbar->getVisible() != false)
+ if(mScrollbar && mScrollbar->getVisible() != false)
{
panel_top+=mScrollbar->getDocPos();
panel_width-=scrollbar_size;
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
new file mode 100644
index 0000000000..fde3c53a65
--- /dev/null
+++ b/indra/llui/llbadge.cpp
@@ -0,0 +1,294 @@
+/**
+ * @file llbadge.cpp
+ * @brief Implementation for badges
+ *
+ * $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$
+ */
+
+#define LLBADGE_CPP
+#include "llbadge.h"
+
+#include "lluictrlfactory.h"
+
+
+static LLDefaultChildRegistry::Register<LLBadge> r("badge");
+
+// Compiler optimization, generate extern template
+template class LLBadge* LLView::getChild<class LLBadge>(const std::string& name, BOOL recurse) const;
+
+
+LLBadge::Params::Params()
+ : image("image")
+ , border_image("border_image")
+ , border_color("border_color")
+ , image_color("image_color")
+ , label("label")
+ , label_color("label_color")
+ , label_offset_horiz("label_offset_horiz")
+ , label_offset_vert("label_offset_vert")
+ , location("location", LLRelPos::TOP_LEFT)
+ , 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
+{
+ bool comp = true;
+
+ // skip owner in comparison on purpose
+
+ comp &= (border_image() == a.border_image());
+ comp &= (border_color() == a.border_color());
+ comp &= (image() == a.image());
+ comp &= (image_color() == a.image_color());
+ comp &= (label() == a.label());
+ comp &= (label_color() == a.label_color());
+ comp &= (label_offset_horiz() == a.label_offset_horiz());
+ comp &= (label_offset_vert() == a.label_offset_vert());
+ comp &= (location() == a.location());
+ comp &= (location_percent_hcenter() == a.location_percent_hcenter());
+ comp &= (location_percent_vcenter() == a.location_percent_vcenter());
+ comp &= (padding_horiz() == a.padding_horiz());
+ comp &= (padding_vert() == a.padding_vert());
+
+ return comp;
+}
+
+LLBadge::LLBadge(const LLBadge::Params& p)
+ : LLUICtrl(p)
+ , mOwner(p.owner)
+ , mBorderImage(p.border_image)
+ , mBorderColor(p.border_color)
+ , mGLFont(p.font)
+ , mImage(p.image)
+ , mImageColor(p.image_color)
+ , mLabel(p.label)
+ , mLabelColor(p.label_color)
+ , mLabelOffsetHoriz(p.label_offset_horiz)
+ , mLabelOffsetVert(p.label_offset_vert)
+ , mLocation(p.location)
+ , mLocationPercentHCenter(0.5f)
+ , mLocationPercentVCenter(0.5f)
+ , mPaddingHoriz(p.padding_horiz)
+ , mPaddingVert(p.padding_vert)
+{
+ if (mImage.isNull())
+ {
+ llwarns << "Badge: " << getName() << " with no image!" << llendl;
+ }
+
+ //
+ // The following logic is to set the mLocationPercentHCenter and mLocationPercentVCenter
+ // based on the Location enum and our horizontal and vertical location percentages. The
+ // draw code then uses this on the owner rectangle to compute the screen location for
+ // the badge.
+ //
+
+ if (!LLRelPos::IsCenter(mLocation))
+ {
+ F32 h_center = p.location_percent_hcenter * 0.01f;
+ F32 v_center = p.location_percent_vcenter * 0.01f;
+
+ if (LLRelPos::IsRight(mLocation))
+ {
+ mLocationPercentHCenter = 0.5f * (1.0f + h_center);
+ }
+ else if (LLRelPos::IsLeft(mLocation))
+ {
+ mLocationPercentHCenter = 0.5f * (1.0f - h_center);
+ }
+
+ if (LLRelPos::IsTop(mLocation))
+ {
+ mLocationPercentVCenter = 0.5f * (1.0f + v_center);
+ }
+ else if (LLRelPos::IsBottom(mLocation))
+ {
+ mLocationPercentVCenter = 0.5f * (1.0f - v_center);
+ }
+ }
+}
+
+LLBadge::~LLBadge()
+{
+}
+
+bool LLBadge::addToView(LLView * view)
+{
+ bool child_added = view->addChild(this);
+
+ if (child_added)
+ {
+ setShape(view->getLocalRect());
+ }
+
+ return child_added;
+}
+
+void LLBadge::setLabel(const LLStringExplicit& label)
+{
+ mLabel = label;
+}
+
+//
+// This is a fallback function to render a rectangle for badges without a valid image
+//
+void renderBadgeBackground(F32 centerX, F32 centerY, F32 width, F32 height, const LLColor4U &color)
+{
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+
+ gGL.color4ubv(color.mV);
+ gGL.texCoord2i(0, 0);
+
+ F32 x = LLFontGL::sCurOrigin.mX + centerX - width * 0.5f;
+ F32 y = LLFontGL::sCurOrigin.mY + centerY - height * 0.5f;
+
+ LLRectf screen_rect(llround(x),
+ llround(y),
+ llround(x) + width,
+ llround(y) + height);
+
+ LLVector3 vertices[4];
+ vertices[0] = LLVector3(screen_rect.mRight, screen_rect.mTop, 1.0f);
+ vertices[1] = LLVector3(screen_rect.mLeft, screen_rect.mTop, 1.0f);
+ vertices[2] = LLVector3(screen_rect.mLeft, screen_rect.mBottom, 1.0f);
+ vertices[3] = LLVector3(screen_rect.mRight, screen_rect.mBottom, 1.0f);
+
+ gGL.begin(LLRender::QUADS);
+ {
+ gGL.vertexBatchPreTransformed(vertices, 4);
+ }
+ gGL.end();
+
+ gGL.popUIMatrix();
+}
+
+
+// virtual
+void LLBadge::draw()
+{
+ if (!mLabel.empty())
+ {
+ LLView* owner_view = mOwner.get();
+
+ 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;
+ F32 *right_position_out = NULL;
+ BOOL do_not_use_ellipses = false;
+
+ F32 badge_width = (2.0f * mPaddingHoriz) +
+ mGLFont->getWidthF32(badge_label_wstring.c_str(), badge_label_begin_offset, badge_char_length);
+
+ F32 badge_height = (2.0f * mPaddingVert) + mGLFont->getLineHeight();
+
+ //
+ // Draw button image, if available.
+ // Otherwise draw basic rectangular button.
+ //
+
+ F32 alpha = getDrawContext().mAlpha;
+
+ if (!mImage.isNull())
+ {
+ F32 badge_x = badge_center_x - badge_width * 0.5f;
+ F32 badge_y = badge_center_y - badge_height * 0.5f;
+
+ mImage->drawSolid((S32) badge_x, (S32) badge_y, (S32) badge_width, (S32) badge_height, mImageColor % alpha);
+
+ if (!mBorderImage.isNull())
+ {
+ mBorderImage->drawSolid((S32) badge_x, (S32) badge_y, (S32) badge_width, (S32) badge_height, mBorderColor % alpha);
+ }
+ }
+ else
+ {
+ lldebugs << "No image for badge " << getName() << " on owner " << owner_view->getName() << llendl;
+
+ renderBadgeBackground(badge_center_x, badge_center_y,
+ badge_width, badge_height,
+ mImageColor % alpha);
+ }
+
+ //
+ // Draw the label
+ //
+
+ mGLFont->render(badge_label_wstring,
+ badge_label_begin_offset,
+ badge_center_x + mLabelOffsetHoriz,
+ badge_center_y + mLabelOffsetVert,
+ mLabelColor % alpha,
+ LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position
+ LLFontGL::NORMAL, // normal text (not bold, italics, etc.)
+ LLFontGL::DROP_SHADOW_SOFT,
+ badge_char_length, badge_pixel_length,
+ right_position_out, do_not_use_ellipses);
+ }
+ }
+}
+
+
+namespace LLInitParam
+{
+ void TypeValues<LLRelPos::Location>::declareValues()
+ {
+ declare("bottom", LLRelPos::BOTTOM);
+ declare("bottom_left", LLRelPos::BOTTOM_LEFT);
+ declare("bottom_right", LLRelPos::BOTTOM_RIGHT);
+ declare("center", LLRelPos::CENTER);
+ declare("left", LLRelPos::LEFT);
+ declare("right", LLRelPos::RIGHT);
+ declare("top", LLRelPos::TOP);
+ declare("top_left", LLRelPos::TOP_LEFT);
+ declare("top_right", LLRelPos::TOP_RIGHT);
+ }
+}
+
+
+// eof
diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h
new file mode 100644
index 0000000000..f81ccdf0cd
--- /dev/null
+++ b/indra/llui/llbadge.h
@@ -0,0 +1,167 @@
+/**
+ * @file llbadge.h
+ * @brief Header for badges
+ *
+ * $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$
+ */
+
+#ifndef LL_LLBADGE_H
+#define LL_LLBADGE_H
+
+#include <string>
+
+#include "lluicolor.h"
+#include "lluictrl.h"
+#include "llstring.h"
+#include "lluiimage.h"
+#include "llview.h"
+
+//
+// Declarations
+//
+
+class LLUICtrlFactory;
+class LLFontGL;
+
+//
+// Relative Position Alignment
+//
+
+namespace LLRelPos
+{
+ enum Location
+ {
+ CENTER = 0,
+
+ LEFT = (1 << 0),
+ RIGHT = (1 << 1),
+
+ TOP = (1 << 2),
+ BOTTOM = (1 << 3),
+
+ BOTTOM_LEFT = (BOTTOM | LEFT),
+ BOTTOM_RIGHT = (BOTTOM | RIGHT),
+
+ TOP_LEFT = (TOP | LEFT),
+ TOP_RIGHT = (TOP | RIGHT),
+ };
+
+ inline bool IsBottom(Location relPos) { return (relPos & BOTTOM) == BOTTOM; }
+ inline bool IsCenter(Location relPos) { return (relPos == CENTER); }
+ inline bool IsLeft(Location relPos) { return (relPos & LEFT) == LEFT; }
+ inline bool IsRight(Location relPos) { return (relPos & RIGHT) == RIGHT; }
+ inline bool IsTop(Location relPos) { return (relPos & TOP) == TOP; }
+}
+
+// NOTE: This needs to occur before Optional<LLRelPos::Location> declaration for proper compilation.
+namespace LLInitParam
+{
+ template<>
+ struct TypeValues<LLRelPos::Location> : public TypeValuesHelper<LLRelPos::Location>
+ {
+ static void declareValues();
+ };
+}
+
+//
+// Classes
+//
+
+class LLBadge
+: public LLUICtrl
+{
+public:
+ struct Params
+ : public LLInitParam::Block<Params, LLUICtrl::Params>
+ {
+ Optional< LLHandle<LLView> > owner; // Mandatory in code but not in xml
+
+ Optional< LLUIImage* > border_image;
+ Optional< LLUIColor > border_color;
+
+ Optional< LLUIImage* > image;
+ Optional< LLUIColor > image_color;
+
+ Optional< std::string > label;
+ Optional< LLUIColor > label_color;
+
+ Optional< S32 > label_offset_horiz;
+ Optional< S32 > label_offset_vert;
+
+ Optional< LLRelPos::Location > location;
+ Optional< U32 > location_percent_hcenter;
+ Optional< U32 > location_percent_vcenter;
+
+ Optional< F32 > padding_horiz;
+ Optional< F32 > padding_vert;
+
+ Params();
+
+ bool equals(const Params&) const;
+ };
+
+protected:
+ friend class LLUICtrlFactory;
+ LLBadge(const Params& p);
+
+public:
+
+ ~LLBadge();
+
+ bool addToView(LLView * view);
+
+ virtual void draw();
+
+ const std::string getLabel() const { return wstring_to_utf8str(mLabel); }
+ void setLabel( const LLStringExplicit& label);
+
+private:
+ LLPointer< LLUIImage > mBorderImage;
+ LLUIColor mBorderColor;
+
+ const LLFontGL* mGLFont;
+
+ LLPointer< LLUIImage > mImage;
+ LLUIColor mImageColor;
+
+ LLUIString mLabel;
+ LLUIColor mLabelColor;
+
+ S32 mLabelOffsetHoriz;
+ S32 mLabelOffsetVert;
+
+ LLRelPos::Location mLocation;
+ F32 mLocationPercentHCenter;
+ F32 mLocationPercentVCenter;
+
+ LLHandle< LLView > mOwner;
+
+ F32 mPaddingHoriz;
+ F32 mPaddingVert;
+};
+
+// Build time optimization, generate once in .cpp file
+#ifndef LLBADGE_CPP
+extern template class LLBadge* LLView::getChild<class LLBadge>(const std::string& name, BOOL recurse) const;
+#endif
+
+#endif // LL_LLBADGE_H
diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp
new file mode 100644
index 0000000000..1f786f36ae
--- /dev/null
+++ b/indra/llui/llbadgeholder.cpp
@@ -0,0 +1,45 @@
+/**
+ * @file llbadgeholder.cpp
+ * @brief Source for badge holders
+ *
+ * $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 "llbadgeholder.h"
+
+#include "llbadge.h"
+#include "llview.h"
+
+
+bool LLBadgeHolder::addBadge(LLBadge * badge)
+{
+ bool badge_added = false;
+
+ LLView * this_view = dynamic_cast<LLView *>(this);
+
+ if (this_view && mAcceptsBadge)
+ {
+ badge_added = badge->addToView(this_view);
+ }
+
+ return badge_added;
+}
diff --git a/indra/newview/lldrawpoolclouds.h b/indra/llui/llbadgeholder.h
index 019f11a795..2538eaae91 100644
--- a/indra/newview/lldrawpoolclouds.h
+++ b/indra/llui/llbadgeholder.h
@@ -1,8 +1,8 @@
/**
- * @file lldrawpoolclouds.h
- * @brief LLDrawPoolClouds class definition
+ * @file llbadgeholder.h
+ * @brief Header for badge holders
*
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
@@ -24,31 +24,33 @@
* $/LicenseInfo$
*/
-#ifndef LL_LLDRAWPOOLCLOUDS_H
-#define LL_LLDRAWPOOLCLOUDS_H
+#ifndef LL_LLBADGEHOLDER_H
+#define LL_LLBADGEHOLDER_H
-#include "lldrawpool.h"
+//
+// Classes
+//
-class LLDrawPoolClouds : public LLDrawPool
+class LLBadge;
+
+class LLBadgeHolder
{
public:
- enum
+
+ LLBadgeHolder(bool acceptsBadge)
+ : mAcceptsBadge(acceptsBadge)
{
- VERTEX_DATA_MASK = LLVertexBuffer::MAP_VERTEX |
- LLVertexBuffer::MAP_NORMAL |
- LLVertexBuffer::MAP_TEXCOORD0
- };
+ }
+
+ void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; }
+ bool acceptsBadge() const { return mAcceptsBadge; }
+
+ virtual bool addBadge(LLBadge * badge);
- BOOL addFace(LLFace* face);
- virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+private:
- LLDrawPoolClouds();
+ bool mAcceptsBadge;
- /*virtual*/ void prerender();
- /*virtual*/ LLDrawPool *instancePool();
- /*virtual*/ void enqueue(LLFace *face);
- /*virtual*/ void beginRenderPass(S32 pass);
- /*virtual*/ void render(S32 pass = 0);
};
-#endif // LL_LLDRAWPOOLSKY_H
+#endif // LL_LLBADGEHOLDER_H
diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp
new file mode 100644
index 0000000000..1860a05edd
--- /dev/null
+++ b/indra/llui/llbadgeowner.cpp
@@ -0,0 +1,131 @@
+/**
+ * @file llbadgeowner.cpp
+ * @brief Class to manage badges attached to a UI control
+ *
+ * $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 "llbadgeholder.h"
+#include "llbadgeowner.h"
+#include "llpanel.h"
+
+//
+// Classes
+//
+
+LLBadgeOwner::LLBadgeOwner(LLHandle< LLView > viewHandle)
+ : mBadge(NULL)
+ , mBadgeOwnerView(viewHandle)
+{
+}
+
+void LLBadgeOwner::initBadgeParams(const LLBadge::Params& p)
+{
+ if (!p.equals(LLUICtrlFactory::getDefaultParams<LLBadge>()))
+ {
+ mBadge = createBadge(p);
+ }
+}
+
+void LLBadgeOwner::setBadgeLabel(const LLStringExplicit& label)
+{
+ if (mBadge == NULL)
+ {
+ mBadge = createBadge(LLUICtrlFactory::getDefaultParams<LLBadge>());
+
+ addBadgeToParentPanel();
+ }
+
+ if (mBadge)
+ {
+ mBadge->setLabel(label);
+
+ //
+ // Push the badge to the front so it renders on top
+ //
+
+ LLView * parent = mBadge->getParent();
+
+ if (parent)
+ {
+ parent->sendChildToFront(mBadge);
+ }
+ }
+}
+
+void LLBadgeOwner::setBadgeVisibility(bool visible)
+{
+ if (mBadge)
+ {
+ mBadge->setVisible(visible);
+ }
+}
+
+bool LLBadgeOwner::addBadgeToParentPanel()
+{
+ bool badge_added = false;
+
+ LLView * owner_view = mBadgeOwnerView.get();
+
+ if (mBadge && owner_view)
+ {
+ LLBadgeHolder * badge_holder = NULL;
+
+ // Find the appropriate holder for the badge
+ LLView * parent = owner_view->getParent();
+
+ while (parent)
+ {
+ LLBadgeHolder * badge_holder_panel = dynamic_cast<LLBadgeHolder *>(parent);
+
+ if (badge_holder_panel && badge_holder_panel->acceptsBadge())
+ {
+ badge_holder = badge_holder_panel;
+ break;
+ }
+
+ parent = parent->getParent();
+ }
+
+ if (badge_holder)
+ {
+ badge_added = badge_holder->addBadge(mBadge);
+ }
+ else
+ {
+ // Badge parent is fallback badge owner if no valid holder exists in the hierarchy
+ badge_added = mBadge->addToView(owner_view);
+ }
+ }
+
+ return badge_added;
+}
+
+LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p)
+{
+ LLBadge::Params badge_params(p);
+ badge_params.owner = mBadgeOwnerView;
+
+ return LLUICtrlFactory::create<LLBadge>(badge_params);
+}
diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h
new file mode 100644
index 0000000000..8d03e30645
--- /dev/null
+++ b/indra/llui/llbadgeowner.h
@@ -0,0 +1,61 @@
+/**
+ * @file llbadgeowner.h
+ * @brief Header for badge owners
+ *
+ * $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$
+ */
+
+#ifndef LL_LLBADGEOWNER_H
+#define LL_LLBADGEOWNER_H
+
+#include "llbadge.h"
+#include "llview.h"
+
+//
+// Classes
+//
+
+class LLBadgeOwner
+{
+public:
+
+ LLBadgeOwner(LLHandle< LLView > viewHandle);
+
+ void initBadgeParams(const LLBadge::Params& p);
+ bool addBadgeToParentPanel();
+
+ bool badgeHasParent() const { return (mBadge && mBadge->getParent()); }
+
+ void setBadgeLabel(const LLStringExplicit& label);
+ void setBadgeVisibility(bool visible);
+
+private:
+
+ LLBadge* createBadge(const LLBadge::Params& p);
+
+private:
+
+ LLBadge* mBadge;
+ LLHandle< LLView > mBadgeOwnerView;
+};
+
+#endif // LL_LLBADGEOWNER_H
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 45ceaff696..7b015bd576 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -99,7 +99,9 @@ LLButton::Params::Params()
scale_image("scale_image", true),
hover_glow_amount("hover_glow_amount"),
commit_on_return("commit_on_return", true),
- use_draw_context_alpha("use_draw_context_alpha", true)
+ use_draw_context_alpha("use_draw_context_alpha", true),
+ badge("badge"),
+ handle_right_mouse("handle_right_mouse")
{
addSynonym(is_toggle, "toggle");
held_down_delay.seconds = 0.5f;
@@ -109,6 +111,7 @@ LLButton::Params::Params()
LLButton::LLButton(const LLButton::Params& p)
: LLUICtrl(p),
+ LLBadgeOwner(LLView::getHandle()),
mMouseDownFrame(0),
mMouseHeldDownCount(0),
mBorderEnabled( FALSE ),
@@ -160,8 +163,8 @@ LLButton::LLButton(const LLButton::Params& p)
mMouseDownSignal(NULL),
mMouseUpSignal(NULL),
mHeldDownSignal(NULL),
- mUseDrawContextAlpha(p.use_draw_context_alpha)
-
+ mUseDrawContextAlpha(p.use_draw_context_alpha),
+ mHandleRightMouse(p.handle_right_mouse)
{
static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
@@ -244,6 +247,11 @@ LLButton::LLButton(const LLButton::Params& p)
{
setHeldDownCallback(initCommitCallback(p.mouse_held_callback));
}
+
+ if (p.badge.isProvided())
+ {
+ LLBadgeOwner::initBadgeParams(p.badge());
+ }
}
LLButton::~LLButton()
@@ -327,8 +335,12 @@ boost::signals2::connection LLButton::setHeldDownCallback( button_callback_t cb,
BOOL LLButton::postBuild()
{
autoResize();
- return TRUE;
+
+ addBadgeToParentPanel();
+
+ return LLUICtrl::postBuild();
}
+
BOOL LLButton::handleUnicodeCharHere(llwchar uni_char)
{
BOOL handled = FALSE;
@@ -447,7 +459,7 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL LLButton::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- if (!childrenHandleRightMouseDown(x, y, mask))
+ if (mHandleRightMouse && !childrenHandleRightMouseDown(x, y, mask))
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
gFocusMgr.setMouseCapture( this );
@@ -460,37 +472,42 @@ BOOL LLButton::handleRightMouseDown(S32 x, S32 y, MASK mask)
// if (pointInView(x, y))
// {
// }
+ // send the mouse down signal
+ LLUICtrl::handleRightMouseDown(x,y,mask);
+ // *TODO: Return result of LLUICtrl call above? Should defer to base class
+ // but this might change the mouse handling of existing buttons in a bad way
+ // if they are not mouse opaque.
}
- // send the mouse down signal
- LLUICtrl::handleRightMouseDown(x,y,mask);
- // *TODO: Return result of LLUICtrl call above? Should defer to base class
- // but this might change the mouse handling of existing buttons in a bad way
- // if they are not mouse opaque.
+
return TRUE;
}
BOOL LLButton::handleRightMouseUp(S32 x, S32 y, MASK mask)
{
- // We only handle the click if the click both started and ended within us
- if( hasMouseCapture() )
+ if (mHandleRightMouse)
{
- // Always release the mouse
- gFocusMgr.setMouseCapture( NULL );
+ // We only handle the click if the click both started and ended within us
+ if( hasMouseCapture() )
+ {
+ // Always release the mouse
+ gFocusMgr.setMouseCapture( NULL );
-// if (pointInView(x, y))
-// {
-// mRightMouseUpSignal(this, x,y,mask);
-// }
- }
- else
- {
- childrenHandleRightMouseUp(x, y, mask);
+ // if (pointInView(x, y))
+ // {
+ // mRightMouseUpSignal(this, x,y,mask);
+ // }
+ }
+ else
+ {
+ childrenHandleRightMouseUp(x, y, mask);
+ }
+
+ // send the mouse up signal
+ LLUICtrl::handleRightMouseUp(x,y,mask);
+ // *TODO: Return result of LLUICtrl call above? Should defer to base class
+ // but this might change the mouse handling of existing buttons in a bad way.
+ // if they are not mouse opaque.
}
- // send the mouse up signal
- LLUICtrl::handleRightMouseUp(x,y,mask);
- // *TODO: Return result of LLUICtrl call above? Should defer to base class
- // but this might change the mouse handling of existing buttons in a bad way.
- // if they are not mouse opaque.
return TRUE;
}
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 0cfc393e05..5968916006 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -27,6 +27,8 @@
#ifndef LL_LLBUTTON_H
#define LL_LLBUTTON_H
+#include "lluuid.h"
+#include "llbadgeowner.h"
#include "llcontrol.h"
#include "lluictrl.h"
#include "v4color.h"
@@ -52,15 +54,13 @@ S32 round_up(S32 grid, S32 value);
class LLUICtrlFactory;
-class LLUIImage;
-class LLUUID;
//
// Classes
//
class LLButton
-: public LLUICtrl
+: public LLUICtrl, public LLBadgeOwner
{
public:
struct Params
@@ -125,7 +125,11 @@ public:
Optional<F32> hover_glow_amount;
Optional<TimeIntervalParam> held_down_delay;
- Optional<bool> use_draw_context_alpha;
+ Optional<bool> use_draw_context_alpha;
+
+ Optional<LLBadge::Params> badge;
+
+ Optional<bool> handle_right_mouse;
Params();
};
@@ -249,7 +253,7 @@ public:
void setImageDisabledSelected(LLPointer<LLUIImage> image);
void setImageFlash(LLPointer<LLUIImage> image);
void setImagePressed(LLPointer<LLUIImage> image);
-
+
void setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
BOOL getCommitOnReturn() const { return mCommitOnReturn; }
@@ -357,6 +361,8 @@ private:
bool mForcePressedState;
LLFrameTimer mFlashingTimer;
+
+ bool mHandleRightMouse;
};
// Build time optimization, generate once in .cpp file
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index a4d1854bc8..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();
}
}
@@ -791,8 +788,10 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
return FALSE;
}
// if selection has changed, pop open list
- else if (mList->getLastSelectedItem() != last_selected_item ||
- (key == KEY_DOWN || key == KEY_UP) && !mList->isEmpty())
+ else if (mList->getLastSelectedItem() != last_selected_item
+ || ((key == KEY_DOWN || key == KEY_UP)
+ && mList->getCanSelect()
+ && !mList->isEmpty()))
{
showList();
}
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index 06bad1f371..161496b1f5 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -132,6 +132,9 @@ void LLConsole::setFontSize(S32 size_index)
void LLConsole::draw()
{
+ // Units in pixels
+ static const F32 padding_horizontal = 10;
+ static const F32 padding_vertical = 3;
LLGLSUIDefault gls_ui;
// skip lines added more than mLinePersistTime ago
@@ -176,11 +179,9 @@ void LLConsole::draw()
// draw remaining lines
F32 y_pos = 0.f;
- LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
+ LLUIImagePtr imagep = LLUI::getUIImage("transparent");
-// F32 console_opacity = llclamp(gSavedSettings.getF32("ConsoleBackgroundOpacity"), 0.f, 1.f);
F32 console_opacity = llclamp(LLUI::sSettingGroups["config"]->getF32("ConsoleBackgroundOpacity"), 0.f, 1.f);
-// LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground");
LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground");
color.mV[VALPHA] *= console_opacity;
@@ -188,8 +189,8 @@ void LLConsole::draw()
for(paragraph_it = mParagraphs.rbegin(); paragraph_it != mParagraphs.rend(); paragraph_it++)
{
- S32 target_height = llfloor( (*paragraph_it).mLines.size() * line_height + 8);
- S32 target_width = llfloor( (*paragraph_it).mMaxWidth +15);
+ S32 target_height = llfloor( (*paragraph_it).mLines.size() * line_height + padding_vertical);
+ S32 target_width = llfloor( (*paragraph_it).mMaxWidth + padding_horizontal);
y_pos += ((*paragraph_it).mLines.size()) * line_height;
imagep->drawSolid(-14, (S32)(y_pos + line_height - target_height), target_width, target_height, color);
@@ -234,7 +235,7 @@ void LLConsole::draw()
y_off += line_height;
}
}
- y_pos += 8;
+ y_pos += padding_vertical;
}
}
@@ -371,9 +372,7 @@ LLConsole::Paragraph::Paragraph (LLWString str, const LLColor4 &color, F32 add_t
// static
void LLConsole::updateClass()
{
- LLInstanceTrackerScopedGuard guard;
-
- for (instance_iter it = guard.beginInstances(); it != guard.endInstances(); ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
it->update();
}
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index d19e33ea55..8917d5490c 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -766,7 +766,6 @@ void LLFloater::closeFloater(bool app_quitting)
void LLFloater::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLPanel::reshape(width, height, called_from_parent);
- storeRectControl();
}
void LLFloater::releaseFocus()
@@ -968,6 +967,11 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user)
const LLRect old_rect = getRect();
LLView::handleReshape(new_rect, by_user);
+ if (by_user)
+ {
+ storeRectControl();
+ }
+
// if not minimized, adjust all snapped dependents to new shape
if (!isMinimized())
{
@@ -2048,7 +2052,6 @@ static LLDefaultChildRegistry::Register<LLFloaterView> r("floater_view");
LLFloaterView::LLFloaterView (const Params& p)
: LLUICtrl (p),
-
mFocusCycleMode(FALSE),
mMinimizePositionVOffset(0),
mSnapOffsetBottom(0),
@@ -2059,12 +2062,6 @@ LLFloaterView::LLFloaterView (const Params& p)
// By default, adjust vertical.
void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
{
- reshapeFloater(width, height, called_from_parent, ADJUST_VERTICAL_YES);
-}
-
-// When reshaping this view, make the floaters follow their closest edge.
-void LLFloaterView::reshapeFloater(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical)
-{
S32 old_width = getRect().getWidth();
S32 old_height = getRect().getHeight();
@@ -2109,11 +2106,7 @@ void LLFloaterView::reshapeFloater(S32 width, S32 height, BOOL called_from_paren
// "No vertical adjustment" usually means that the bottom of the view
// has been pushed up or down. Hence we want the floaters to follow
// the top.
- if (!adjust_vertical)
- {
- follow_flags |= FOLLOWS_TOP;
- }
- else if (top_offset < bottom_offset)
+ if (top_offset < bottom_offset)
{
follow_flags |= FOLLOWS_TOP;
}
@@ -2847,7 +2840,7 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
mAutoTile = p.auto_tile;
mOpenCentered = p.open_centered;
- if (p.save_rect)
+ if (p.save_rect && mRectControl.empty())
{
mRectControl = "t"; // flag to build mRectControl name once mInstanceName is set
}
@@ -2885,13 +2878,54 @@ boost::signals2::connection LLFloater::setCloseCallback( const commit_signal_t::
}
LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");
+static LLFastTimer::DeclareTimer FTM_EXTERNAL_FLOATER_LOAD("Load Extern Floater Reference");
bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)
{
- Params params(LLUICtrlFactory::getDefaultParams<LLFloater>());
+ Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());
+ Params params(default_params);
+
LLXUIParser parser;
parser.readXUI(node, params, filename); // *TODO: Error checking
+ std::string xml_filename = params.filename;
+
+ if (!xml_filename.empty())
+ {
+ LLXMLNodePtr referenced_xml;
+
+ if (output_node)
+ {
+ //if we are exporting, we want to export the current xml
+ //not the referenced xml
+ Params output_params;
+ parser.readXUI(node, output_params, LLUICtrlFactory::getInstance()->getCurFileName());
+ setupParamsForExport(output_params, parent);
+ output_node->setName(node->getName()->mString);
+ parser.writeXUI(output_node, output_params, &default_params);
+ return TRUE;
+ }
+
+ LLUICtrlFactory::instance().pushFileName(xml_filename);
+
+ LLFastTimer _(FTM_EXTERNAL_FLOATER_LOAD);
+ if (!LLUICtrlFactory::getLayeredXMLNode(xml_filename, referenced_xml))
+ {
+ llwarns << "Couldn't parse panel from: " << xml_filename << llendl;
+
+ return FALSE;
+ }
+
+ parser.readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
+
+ // add children using dimensions from referenced xml for consistent layout
+ setShape(params.rect);
+ LLUICtrlFactory::createChildren(this, referenced_xml, child_registry_t::instance());
+
+ LLUICtrlFactory::instance().popFileName();
+ }
+
+
if (output_node)
{
Params output_params(params);
@@ -2912,7 +2946,6 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
{
params.rect.left.set(0);
}
-
params.from_xui = true;
applyXUILayout(params, parent);
initFromParams(params);
@@ -3054,3 +3087,25 @@ bool LLFloater::buildFromFile(const std::string& filename, LLXMLNodePtr output_n
return res;
}
+
+void LLFloater::stackWith(LLFloater& other)
+{
+ static LLUICachedControl<S32> floater_offset ("UIFloaterOffset", 16);
+
+ LLRect next_rect;
+ if (other.getHost())
+ {
+ next_rect = other.getHost()->getRect();
+ }
+ else
+ {
+ next_rect = other.getRect();
+ }
+ next_rect.translate(floater_offset, -floater_offset);
+
+ next_rect.setLeftTopAndSize(next_rect.mLeft, next_rect.mTop, getRect().getWidth(), getRect().getHeight());
+
+ mRectControl.clear(); // don't save rect of stacked floaters
+ setShape(next_rect);
+}
+
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 5b7b020881..58c2d34253 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -253,7 +253,7 @@ public:
LLHandle<LLFloater> getHandle() const { return mHandle; }
const LLSD& getKey() { return mKey; }
- BOOL matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); }
+ virtual bool matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); }
const std::string& getInstanceName() { return mInstanceName; }
@@ -265,6 +265,8 @@ public:
virtual void setTornOff(bool torn_off) { mTornOff = torn_off; }
+ void stackWith(LLFloater& other);
+
// Return a closeable floater, if any, given the current focus.
static LLFloater* getClosableFloaterFromFocus();
@@ -289,9 +291,6 @@ public:
void updateTransparency(ETypeTransparency transparency_type);
protected:
-
- void setRectControl(const std::string& rectname) { mRectControl = rectname; };
-
virtual void applySavedVariables();
void applyRectControl();
@@ -455,8 +454,6 @@ protected:
public:
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
- void reshapeFloater(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical);
-
/*virtual*/ void draw();
/*virtual*/ LLRect getSnapRect() const;
/*virtual*/ void refresh();
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 4677d535db..fc7dcfcc4e 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -57,7 +57,7 @@ void LLFloaterReg::add(const std::string& name, const std::string& filename, con
}
//static
-LLRect LLFloaterReg::getFloaterRect(const std::string& name)
+LLFloater* LLFloaterReg::getLastFloaterInGroup(const std::string& name)
{
LLRect rect;
const std::string& groupname = sGroupMap[name];
@@ -66,20 +66,10 @@ LLRect LLFloaterReg::getFloaterRect(const std::string& name)
instance_list_t& list = sInstanceMap[groupname];
if (!list.empty())
{
- static LLUICachedControl<S32> floater_offset ("UIFloaterOffset", 16);
- LLFloater* last_floater = list.back();
- if (last_floater->getHost())
- {
- rect = last_floater->getHost()->getRect();
- }
- else
- {
- rect = last_floater->getRect();
- }
- rect.translate(floater_offset, -floater_offset);
+ return list.back();
}
}
- return rect;
+ return NULL;
}
//static
@@ -129,17 +119,20 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
}
// Note: key should eventually be a non optional LLFloater arg; for now, set mKey to be safe
- res->mKey = key;
+ if (res->mKey.isUndefined())
+ {
+ res->mKey = key;
+ }
res->setInstanceName(name);
res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
if (res->mAutoTile && !res->getHost() && index > 0)
{
- const LLRect& cur_rect = res->getRect();
- LLRect next_rect = getFloaterRect(groupname);
- next_rect.setLeftTopAndSize(next_rect.mLeft, next_rect.mTop, cur_rect.getWidth(), cur_rect.getHeight());
- res->setRect(next_rect);
- res->setRectControl(LLStringUtil::null); // don't save rect of tiled floaters
- gFloaterView->adjustToFitScreen(res, true);
+ LLFloater* last_floater = getLastFloaterInGroup(groupname);
+ if (last_floater)
+ {
+ res->stackWith(*last_floater);
+ gFloaterView->adjustToFitScreen(res, true);
+ }
}
else
{
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
index 8414b92113..a2027a77a0 100644
--- a/indra/llui/llfloaterreg.h
+++ b/indra/llui/llfloaterreg.h
@@ -86,7 +86,7 @@ public:
const std::string& groupname = LLStringUtil::null);
// Helpers
- static LLRect getFloaterRect(const std::string& name);
+ static LLFloater* getLastFloaterInGroup(const std::string& name);
// Find / get (create) / remove / destroy
static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD());
diff --git a/indra/llui/llfunctorregistry.h b/indra/llui/llfunctorregistry.h
index 752c7df7ee..899cc3a326 100644
--- a/indra/llui/llfunctorregistry.h
+++ b/indra/llui/llfunctorregistry.h
@@ -103,7 +103,7 @@ public:
}
else
{
- llwarns << "tried to find '" << name << "' in LLFunctorRegistry, but it wasn't there." << llendl;
+ lldebugs << "tried to find '" << name << "' in LLFunctorRegistry, but it wasn't there." << llendl;
return mMap[LOGFUNCTOR];
}
}
@@ -115,7 +115,7 @@ private:
static void log_functor(const LLSD& notification, const LLSD& payload)
{
- llwarns << "log_functor called with payload: " << payload << llendl;
+ lldebugs << "log_functor called with payload: " << payload << llendl;
}
static void do_nothing(const LLSD& notification, const LLSD& payload)
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 9b6830a816..a59247ba09 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -49,6 +49,8 @@ void LLLayoutStack::OrientationNames::declareValues()
//
LLLayoutPanel::LLLayoutPanel(const Params& p)
: LLPanel(p),
+ mExpandedMinDimSpecified(false),
+ mExpandedMinDim(p.min_dim),
mMinDim(p.min_dim),
mMaxDim(p.max_dim),
mAutoResize(p.auto_resize),
@@ -58,6 +60,13 @@ LLLayoutPanel::LLLayoutPanel(const Params& p)
mVisibleAmt(1.f), // default to fully visible
mResizeBar(NULL)
{
+ // Set the expanded min dim if it is provided, otherwise it gets the p.min_dim value
+ if (p.expanded_min_dim.isProvided())
+ {
+ mExpandedMinDimSpecified = true;
+ mExpandedMinDim = p.expanded_min_dim();
+ }
+
// panels initialized as hidden should not start out partially visible
if (!getVisible())
{
@@ -78,20 +87,20 @@ LLLayoutPanel::~LLLayoutPanel()
delete mResizeBar;
mResizeBar = NULL;
}
-
+
F32 LLLayoutPanel::getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation)
{
if (orientation == LLLayoutStack::HORIZONTAL)
{
F32 collapse_amt =
- clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinDim / (F32)llmax(1, getRect().getWidth()));
+ clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)getRelevantMinDim() / (F32)llmax(1, getRect().getWidth()));
return mVisibleAmt * collapse_amt;
}
else
{
- F32 collapse_amt =
- clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinDim / (F32)llmax(1, getRect().getHeight())));
- return mVisibleAmt * collapse_amt;
+ F32 collapse_amt =
+ clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)getRelevantMinDim() / (F32)llmax(1, getRect().getHeight())));
+ return mVisibleAmt * collapse_amt;
}
}
@@ -182,14 +191,14 @@ BOOL LLLayoutStack::postBuild()
}
bool LLLayoutStack::addChild(LLView* child, S32 tab_group)
- {
+{
LLLayoutPanel* panelp = dynamic_cast<LLLayoutPanel*>(child);
- if (panelp)
- {
+ if (panelp)
+ {
mPanels.push_back(panelp);
- }
+ }
return LLView::addChild(child, tab_group);
- }
+}
S32 LLLayoutStack::getDefaultHeight(S32 cur_height)
@@ -281,9 +290,9 @@ bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_dimp
{
LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
- if (panel)
+ if (panel && min_dimp)
{
- if (min_dimp) *min_dimp = panel->mMinDim;
+ *min_dimp = panel->getRelevantMinDim();
}
return NULL != panel;
@@ -316,23 +325,23 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
e_panel_list_t::iterator panel_it;
for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- LLPanel* panelp = (*panel_it);
+ LLLayoutPanel* panelp = (*panel_it);
if (panelp->getVisible())
{
if (mAnimate)
{
if (!mAnimatedThisFrame)
{
- (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(mOpenTimeConstant));
- if ((*panel_it)->mVisibleAmt > 0.99f)
+ panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(mOpenTimeConstant));
+ if (panelp->mVisibleAmt > 0.99f)
{
- (*panel_it)->mVisibleAmt = 1.f;
+ panelp->mVisibleAmt = 1.f;
}
}
}
else
{
- (*panel_it)->mVisibleAmt = 1.f;
+ panelp->mVisibleAmt = 1.f;
}
}
else // not visible
@@ -341,36 +350,36 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
if (!mAnimatedThisFrame)
{
- (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
- if ((*panel_it)->mVisibleAmt < 0.001f)
+ panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ if (panelp->mVisibleAmt < 0.001f)
{
- (*panel_it)->mVisibleAmt = 0.f;
+ panelp->mVisibleAmt = 0.f;
}
}
}
else
{
- (*panel_it)->mVisibleAmt = 0.f;
+ panelp->mVisibleAmt = 0.f;
}
}
- if ((*panel_it)->mCollapsed)
+ if (panelp->mCollapsed)
{
- (*panel_it)->mCollapseAmt = lerp((*panel_it)->mCollapseAmt, 1.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, 1.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
}
else
{
- (*panel_it)->mCollapseAmt = lerp((*panel_it)->mCollapseAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
}
if (mOrientation == HORIZONTAL)
{
// enforce minimize size constraint by default
- if (panelp->getRect().getWidth() < (*panel_it)->mMinDim)
+ if (panelp->getRect().getWidth() < panelp->getRelevantMinDim())
{
- panelp->reshape((*panel_it)->mMinDim, panelp->getRect().getHeight());
+ panelp->reshape(panelp->getRelevantMinDim(), panelp->getRect().getHeight());
}
- total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor(mOrientation));
+ total_width += llround(panelp->getRect().getWidth() * panelp->getCollapseFactor(mOrientation));
// want n-1 panel gaps for n panels
if (panel_it != mPanels.begin())
{
@@ -380,11 +389,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
else //VERTICAL
{
// enforce minimize size constraint by default
- if (panelp->getRect().getHeight() < (*panel_it)->mMinDim)
+ if (panelp->getRect().getHeight() < panelp->getRelevantMinDim())
{
- panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinDim);
+ panelp->reshape(panelp->getRect().getWidth(), panelp->getRelevantMinDim());
}
- total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor(mOrientation));
+ total_height += llround(panelp->getRect().getHeight() * panelp->getCollapseFactor(mOrientation));
if (panel_it != mPanels.begin())
{
total_height += mPanelSpacing;
@@ -403,34 +412,23 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
continue;
}
+ S32 relevant_dimension = (mOrientation == HORIZONTAL) ? (*panel_it)->getRect().getWidth() : (*panel_it)->getRect().getHeight();
+ S32 relevant_min = (*panel_it)->getRelevantMinDim();
+
// if currently resizing a panel or the panel is flagged as not automatically resizing
// only track total available headroom, but don't use it for automatic resize logic
if ((*panel_it)->mResizeBar->hasMouseCapture()
|| (!(*panel_it)->mAutoResize
&& !force_resize))
{
- if (mOrientation == HORIZONTAL)
- {
- shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
- }
- else //VERTICAL
- {
- shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
- }
+ shrink_headroom_total += relevant_dimension - relevant_min;
}
else
{
num_resizable_panels++;
- if (mOrientation == HORIZONTAL)
- {
- shrink_headroom_available += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
- shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
- }
- else //VERTICAL
- {
- shrink_headroom_available += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
- shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
- }
+
+ shrink_headroom_available += relevant_dimension - relevant_min;
+ shrink_headroom_total += relevant_dimension - relevant_min;
}
}
@@ -452,27 +450,28 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- LLPanel* panelp = (*panel_it);
+ LLLayoutPanel* panelp = (*panel_it);
S32 cur_width = panelp->getRect().getWidth();
S32 cur_height = panelp->getRect().getHeight();
S32 new_width = cur_width;
- S32 new_height = cur_height;
+ S32 new_height = cur_height;
+ S32 relevant_min = panelp->getRelevantMinDim();
if (mOrientation == HORIZONTAL)
{
- new_width = llmax((*panel_it)->mMinDim, new_width);
+ new_width = llmax(relevant_min, new_width);
}
else
{
- new_height = llmax((*panel_it)->mMinDim, new_height);
+ new_height = llmax(relevant_min, new_height);
}
S32 delta_size = 0;
// if panel can automatically resize (not animating, and resize flag set)...
- if ((*panel_it)->getCollapseFactor(mOrientation) == 1.f
- && (force_resize || (*panel_it)->mAutoResize)
- && !(*panel_it)->mResizeBar->hasMouseCapture())
+ if (panelp->getCollapseFactor(mOrientation) == 1.f
+ && (force_resize || panelp->mAutoResize)
+ && !panelp->mResizeBar->hasMouseCapture())
{
if (mOrientation == HORIZONTAL)
{
@@ -481,8 +480,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
// shrink proportionally to amount over minimum
// so we can do this in one pass
- delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
- shrink_headroom_available -= (cur_width - (*panel_it)->mMinDim);
+ delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - relevant_min) / (F32)shrink_headroom_available)) : 0;
+ shrink_headroom_available -= (cur_width - relevant_min);
}
else
{
@@ -491,7 +490,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
num_resizable_panels--;
}
pixels_to_distribute -= delta_size;
- new_width = llmax((*panel_it)->mMinDim, cur_width + delta_size);
+ new_width = llmax(relevant_min, cur_width + delta_size);
}
else
{
@@ -504,8 +503,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
// shrink proportionally to amount over minimum
// so we can do this in one pass
- delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
- shrink_headroom_available -= (cur_height - (*panel_it)->mMinDim);
+ delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - relevant_min) / (F32)shrink_headroom_available)) : 0;
+ shrink_headroom_available -= (cur_height - relevant_min);
}
else
{
@@ -513,7 +512,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
num_resizable_panels--;
}
pixels_to_distribute -= delta_size;
- new_height = llmax((*panel_it)->mMinDim, cur_height + delta_size);
+ new_height = llmax(relevant_min, cur_height + delta_size);
}
else
{
@@ -566,19 +565,20 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
LLLayoutPanel* last_resizeable_panel = NULL;
for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- LLPanel* panelp = (*panel_it);
+ LLLayoutPanel* panelp = (*panel_it);
+ S32 relevant_min = panelp->getRelevantMinDim();
if (mOrientation == HORIZONTAL)
{
(*panel_it)->mResizeBar->setResizeLimits(
- (*panel_it)->mMinDim,
- (*panel_it)->mMinDim + shrink_headroom_total);
+ relevant_min,
+ relevant_min + shrink_headroom_total);
}
else //VERTICAL
{
(*panel_it)->mResizeBar->setResizeLimits(
- (*panel_it)->mMinDim,
- (*panel_it)->mMinDim + shrink_headroom_total);
+ relevant_min,
+ relevant_min + shrink_headroom_total);
}
// toggle resize bars based on panel visibility, resizability, etc
@@ -658,7 +658,7 @@ void LLLayoutStack::calcMinExtents()
{
if (mOrientation == HORIZONTAL)
{
- mMinWidth += (*panel_it)->mMinDim;
+ mMinWidth += (*panel_it)->getRelevantMinDim();
if (panel_it != mPanels.begin())
{
mMinWidth += mPanelSpacing;
@@ -666,7 +666,7 @@ void LLLayoutStack::calcMinExtents()
}
else //VERTICAL
{
- mMinHeight += (*panel_it)->mMinDim;
+ mMinHeight += (*panel_it)->getRelevantMinDim();
if (panel_it != mPanels.begin())
{
mMinHeight += mPanelSpacing;
@@ -688,7 +688,7 @@ void LLLayoutStack::createResizeBars()
LLResizeBar::Params resize_params;
resize_params.name("resize");
resize_params.resizing_view(lp);
- resize_params.min_size(lp->mMinDim);
+ resize_params.min_size(lp->getRelevantMinDim());
resize_params.side(side);
resize_params.snapping_enabled(false);
LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
@@ -713,10 +713,7 @@ void LLLayoutStack::createResizeBars()
//static
void LLLayoutStack::updateClass()
{
- LLInstanceTrackerScopedGuard guard;
- for (LLLayoutStack::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
it->updateLayout();
}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 4ac8ef0ee9..d8ef0aeaca 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -30,10 +30,10 @@
#include "llpanel.h"
-class LLPanel;
class LLLayoutPanel;
+
class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
{
public:
@@ -149,6 +149,7 @@ private:
F32 mCloseTimeConstant;
}; // end class LLLayoutStack
+
class LLLayoutPanel : public LLPanel
{
friend class LLLayoutStack;
@@ -156,13 +157,15 @@ friend class LLUICtrlFactory;
public:
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
- Optional<S32> min_dim,
+ Optional<S32> expanded_min_dim,
+ min_dim,
max_dim;
Optional<bool> user_resize,
auto_resize;
Params()
- : min_dim("min_dim", 0),
+ : expanded_min_dim("expanded_min_dim", 0),
+ min_dim("min_dim", 0),
max_dim("max_dim", 0),
user_resize("user_resize", true),
auto_resize("auto_resize", true)
@@ -177,15 +180,36 @@ public:
~LLLayoutPanel();
void initFromParams(const Params& p);
- void setMinDim(S32 value) { mMinDim = value; }
+
+ S32 getMinDim() const { return mMinDim; }
+ void setMinDim(S32 value) { mMinDim = value; if (!mExpandedMinDimSpecified) mExpandedMinDim = value; }
+
+ S32 getMaxDim() const { return mMaxDim; }
void setMaxDim(S32 value) { mMaxDim = value; }
-protected:
- LLLayoutPanel(const Params& p) ;
+ S32 getExpandedMinDim() const { return mExpandedMinDim; }
+ void setExpandedMinDim(S32 value) { mExpandedMinDim = value; mExpandedMinDimSpecified = true; }
+
+ S32 getRelevantMinDim() const
+ {
+ S32 min_dim = mMinDim;
+
+ if (!mCollapsed)
+ {
+ min_dim = mExpandedMinDim;
+ }
+
+ return min_dim;
+ }
+protected:
+ LLLayoutPanel(const Params& p);
F32 getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation);
+ bool mExpandedMinDimSpecified;
+ S32 mExpandedMinDim;
+
S32 mMinDim;
S32 mMaxDim;
BOOL mAutoResize;
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 0196080d90..06fbc0f234 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -37,6 +37,7 @@
#include "llgl.h"
#include "lltimer.h"
+#include "llcalc.h"
//#include "llclipboard.h"
#include "llcontrol.h"
#include "llbutton.h"
@@ -81,6 +82,7 @@ LLLineEditor::Params::Params()
: max_length(""),
keystroke_callback("keystroke_callback"),
prevalidate_callback("prevalidate_callback"),
+ prevalidate_input_callback("prevalidate_input_callback"),
background_image("background_image"),
background_image_disabled("background_image_disabled"),
background_image_focused("background_image_focused"),
@@ -132,6 +134,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
mIgnoreTab( p.ignore_tab ),
mDrawAsterixes( p.is_password ),
mSelectAllonFocusReceived( p.select_on_focus ),
+ mSelectAllonCommit( TRUE ),
mPassDelete(FALSE),
mReadOnly(FALSE),
mBgImage( p.background_image ),
@@ -173,6 +176,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
updateTextPadding();
setCursor(mText.length());
+ setPrevalidateInput(p.prevalidate_input_callback());
setPrevalidate(p.prevalidate_callback());
LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>
@@ -228,7 +232,10 @@ void LLLineEditor::onCommit()
setControlValue(getValue());
LLUICtrl::onCommit();
- selectAll();
+
+ // Selection on commit needs to be turned off when evaluating maths
+ // expressions, to allow indication of the error position
+ if (mSelectAllonCommit) selectAll();
}
// Returns TRUE if user changed value at all
@@ -405,23 +412,15 @@ void LLLineEditor::setText(const LLStringExplicit &new_text)
// Picks a new cursor position based on the actual screen size of text being drawn.
void LLLineEditor::setCursorAtLocalPos( S32 local_mouse_x )
{
- const llwchar* wtext = mText.getWString().c_str();
- LLWString asterix_text;
- if (mDrawAsterixes)
- {
- for (S32 i = 0; i < mText.length(); i++)
- {
- asterix_text += utf8str_to_wstring(PASSWORD_ASTERISK);
- }
- wtext = asterix_text.c_str();
- }
+ S32 cursor_pos = calcCursorPos(local_mouse_x);
+
+ S32 left_pos = llmin( mSelectionStart, cursor_pos );
+ S32 length = llabs( mSelectionStart - cursor_pos );
+ const LLWString& substr = mText.getWString().substr(left_pos, length);
+
+ if (mIsSelecting && !prevalidateInput(substr))
+ return;
- S32 cursor_pos =
- mScrollHPos +
- mGLFont->charFromPixelOffset(
- wtext, mScrollHPos,
- (F32)(local_mouse_x - mTextLeftEdge),
- (F32)(mTextRightEdge - mTextLeftEdge + 1)); // min-max range is inclusive
setCursor(cursor_pos);
}
@@ -505,6 +504,11 @@ BOOL LLLineEditor::canSelectAll() const
void LLLineEditor::selectAll()
{
+ if (!prevalidateInput(mText.getWString()))
+ {
+ return;
+ }
+
mSelectionStart = mText.length();
mSelectionEnd = 0;
setCursor(mSelectionEnd);
@@ -590,6 +594,9 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
if (mask & MASK_SHIFT)
{
+ // assume we're starting a drag select
+ mIsSelecting = TRUE;
+
// Handle selection extension
S32 old_cursor_pos = getCursor();
setCursorAtLocalPos(x);
@@ -624,8 +631,6 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
mSelectionStart = old_cursor_pos;
mSelectionEnd = getCursor();
}
- // assume we're starting a drag select
- mIsSelecting = TRUE;
}
else
{
@@ -796,6 +801,9 @@ void LLLineEditor::removeChar()
{
if( getCursor() > 0 )
{
+ if (!prevalidateInput(mText.getWString().substr(getCursor()-1, 1)))
+ return;
+
mText.erase(getCursor() - 1, 1);
setCursor(getCursor() - 1);
@@ -816,6 +824,9 @@ void LLLineEditor::addChar(const llwchar uni_char)
}
else if (LL_KIM_OVERWRITE == gKeyboard->getInsertMode())
{
+ if (!prevalidateInput(mText.getWString().substr(getCursor(), 1)))
+ return;
+
mText.erase(getCursor(), 1);
}
@@ -864,6 +875,13 @@ void LLLineEditor::extendSelection( S32 new_cursor_pos )
startSelection();
}
+ S32 left_pos = llmin( mSelectionStart, new_cursor_pos );
+ S32 selection_length = llabs( mSelectionStart - new_cursor_pos );
+ const LLWString& selection = mText.getWString().substr(left_pos, selection_length);
+
+ if (!prevalidateInput(selection))
+ return;
+
setCursor(new_cursor_pos);
mSelectionEnd = getCursor();
}
@@ -994,8 +1012,12 @@ void LLLineEditor::deleteSelection()
{
if( !mReadOnly && hasSelection() )
{
- S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
- S32 selection_length = llabs( mSelectionStart - mSelectionEnd );
+ S32 left_pos, selection_length;
+ getSelectionRange(&left_pos, &selection_length);
+ const LLWString& selection = mText.getWString().substr(left_pos, selection_length);
+
+ if (!prevalidateInput(selection))
+ return;
mText.erase(left_pos, selection_length);
deselect();
@@ -1013,12 +1035,16 @@ void LLLineEditor::cut()
{
if( canCut() )
{
+ S32 left_pos, length;
+ getSelectionRange(&left_pos, &length);
+ const LLWString& selection = mText.getWString().substr(left_pos, length);
+
+ if (!prevalidateInput(selection))
+ return;
+
// Prepare for possible rollback
LLLineEditorRollback rollback( this );
-
- S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
- S32 length = llabs( mSelectionStart - mSelectionEnd );
gClipboard.copyFromSubstring( mText.getWString(), left_pos, length );
deleteSelection();
@@ -1098,6 +1124,9 @@ void LLLineEditor::pasteHelper(bool is_primary)
if (!paste.empty())
{
+ if (!prevalidateInput(paste))
+ return;
+
// Prepare for possible rollback
LLLineEditorRollback rollback(this);
@@ -1445,6 +1474,13 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char)
LLLineEditorRollback rollback( this );
+ {
+ LLWString u_char;
+ u_char.assign(1, uni_char);
+ if (!prevalidateInput(u_char))
+ return handled;
+ }
+
addChar(uni_char);
mKeystrokeTimer.reset();
@@ -1496,6 +1532,15 @@ void LLLineEditor::doDelete()
}
else if ( getCursor() < mText.length())
{
+ const LLWString& text_to_delete = mText.getWString().substr(getCursor(), 1);
+
+ if (!prevalidateInput(text_to_delete))
+ {
+ if( mKeystrokeCallback )
+ mKeystrokeCallback( this );
+
+ return;
+ }
setCursor(getCursor() + 1);
removeChar();
}
@@ -1843,6 +1888,27 @@ S32 LLLineEditor::findPixelNearestPos(const S32 cursor_offset) const
return result;
}
+S32 LLLineEditor::calcCursorPos(S32 mouse_x)
+{
+ const llwchar* wtext = mText.getWString().c_str();
+ LLWString asterix_text;
+ if (mDrawAsterixes)
+ {
+ for (S32 i = 0; i < mText.length(); i++)
+ {
+ asterix_text += utf8str_to_wstring(PASSWORD_ASTERISK);
+ }
+ wtext = asterix_text.c_str();
+ }
+
+ S32 cur_pos = mScrollHPos +
+ mGLFont->charFromPixelOffset(
+ wtext, mScrollHPos,
+ (F32)(mouse_x - mTextLeftEdge),
+ (F32)(mTextRightEdge - mTextLeftEdge + 1)); // min-max range is inclusive
+
+ return cur_pos;
+}
//virtual
void LLLineEditor::clear()
{
@@ -1936,6 +2002,22 @@ void LLLineEditor::setPrevalidate(LLTextValidate::validate_func_t func)
updateAllowingLanguageInput();
}
+void LLLineEditor::setPrevalidateInput(LLTextValidate::validate_func_t func)
+{
+ mPrevalidateInputFunc = func;
+ updateAllowingLanguageInput();
+}
+
+bool LLLineEditor::prevalidateInput(const LLWString& wstr)
+{
+ if (mPrevalidateInputFunc && !mPrevalidateInputFunc(wstr))
+ {
+ return false;
+ }
+
+ return true;
+}
+
// static
BOOL LLLineEditor::postvalidateFloat(const std::string &str)
{
@@ -1995,6 +2077,32 @@ BOOL LLLineEditor::postvalidateFloat(const std::string &str)
return success;
}
+BOOL LLLineEditor::evaluateFloat()
+{
+ bool success;
+ F32 result = 0.f;
+ std::string expr = getText();
+ LLStringUtil::toUpper(expr);
+
+ success = LLCalc::getInstance()->evalString(expr, result);
+
+ if (!success)
+ {
+ // Move the cursor to near the error on failure
+ setCursor(LLCalc::getInstance()->getLastErrorPos());
+ // *TODO: Translated error message indicating the type of error? Select error text?
+ }
+ else
+ {
+ // Replace the expression with the result
+ std::string result_str = llformat("%f",result);
+ setText(result_str);
+ selectAll();
+ }
+
+ return success;
+}
+
void LLLineEditor::onMouseCaptureLost()
{
endSelection();
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index fe191e5971..583bde360a 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -76,6 +76,7 @@ public:
Optional<keystroke_callback_t> keystroke_callback;
Optional<LLTextValidate::validate_func_t, LLTextValidate::ValidateTextNamedFuncs> prevalidate_callback;
+ Optional<LLTextValidate::validate_func_t, LLTextValidate::ValidateTextNamedFuncs> prevalidate_input_callback;
Optional<LLViewBorder::Params> border;
@@ -220,6 +221,7 @@ public:
void deleteSelection();
void setSelectAllonFocusReceived(BOOL b);
+ void setSelectAllonCommit(BOOL b) { mSelectAllonCommit = b; }
typedef boost::function<void (LLLineEditor* caller, void* user_data)> callback_t;
void setKeystrokeCallback(callback_t callback, void* user_data);
@@ -232,8 +234,16 @@ public:
// Prevalidation controls which keystrokes can affect the editor
void setPrevalidate( LLTextValidate::validate_func_t func );
+ // This method sets callback that prevents from:
+ // - deleting, selecting, typing, cutting, pasting characters that are not valid.
+ // Also callback that this method sets differs from setPrevalidate in a way that it validates just inputed
+ // symbols, before existing text is modified, but setPrevalidate validates line after it was modified.
+ void setPrevalidateInput(LLTextValidate::validate_func_t func);
static BOOL postvalidateFloat(const std::string &str);
+ bool prevalidateInput(const LLWString& wstr);
+ BOOL evaluateFloat();
+
// line history support:
void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off
void updateHistory(); // stores current line in history
@@ -251,6 +261,7 @@ private:
void addChar(const llwchar c);
void setCursorAtLocalPos(S32 local_mouse_x);
S32 findPixelNearestPos(S32 cursor_offset = 0) const;
+ S32 calcCursorPos(S32 mouse_x);
BOOL handleSpecialKey(KEY key, MASK mask);
BOOL handleSelectionKey(KEY key, MASK mask);
BOOL handleControlKey(KEY key, MASK mask);
@@ -312,6 +323,7 @@ protected:
S32 mLastSelectionEnd;
LLTextValidate::validate_func_t mPrevalidateFunc;
+ LLTextValidate::validate_func_t mPrevalidateInputFunc;
LLFrameTimer mKeystrokeTimer;
LLTimer mTripleClickTimer;
@@ -330,6 +342,7 @@ protected:
BOOL mDrawAsterixes;
BOOL mSelectAllonFocusReceived;
+ BOOL mSelectAllonCommit;
BOOL mPassDelete;
BOOL mReadOnly;
diff --git a/indra/llui/llloadingindicator.h b/indra/llui/llloadingindicator.h
index 4c47cc267c..7c44478848 100644
--- a/indra/llui/llloadingindicator.h
+++ b/indra/llui/llloadingindicator.h
@@ -86,6 +86,8 @@ public:
*/
void start();
+ void reset() { mCurImageIdx = 0; }
+
private:
LLLoadingIndicator(const Params&);
void initFromParams(const Params&);
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<LLMenuButton> 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:
+ typedef enum e_menu_position
+ {
+ MP_TOP_LEFT,
+ MP_TOP_RIGHT,
+ MP_BOTTOM_LEFT
+ } EMenuPosition;
+
+ struct MenuPositions
+ : public LLInitParam::TypeValuesHelper<EMenuPosition, MenuPositions>
+ {
+ static void declareValues();
+ };
+
struct Params
: public LLInitParam::Block<Params, LLButton::Params>
{
// filename for it's toggleable menu
Optional<std::string> menu_filename;
+ Optional<EMenuPosition> position;
Params();
};
- typedef enum e_menu_position
- {
- MP_TOP_LEFT,
- MP_TOP_RIGHT,
- MP_BOTTOM_LEFT
- } EMenuPosition;
+
boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb );
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index f744e9db41..9052bc7d1d 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -511,7 +511,7 @@ void LLMultiSlider::draw()
mIt->second.mTop + extra_triangle_height,
mIt->second.mLeft + mIt->second.getWidth() / 2,
mIt->second.mBottom - extra_triangle_height,
- mTriangleColor.get(), TRUE);
+ mTriangleColor.get() % opacity, TRUE);
}
}
else if (!thumb_imagep)
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index b2383106a8..e3193bc352 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -87,7 +87,8 @@ LLPanel::Params::Params()
filename("filename"),
class_name("class"),
help_topic("help_topic"),
- visible_callback("visible_callback")
+ visible_callback("visible_callback"),
+ accepts_badge("accepts_badge")
{
name = "panel";
addSynonym(background_visible, "bg_visible");
@@ -98,6 +99,7 @@ LLPanel::Params::Params()
LLPanel::LLPanel(const LLPanel::Params& p)
: LLUICtrl(p),
+ LLBadgeHolder(p.accepts_badge),
mBgVisible(p.background_visible),
mBgOpaque(p.background_opaque),
mBgOpaqueColor(p.bg_opaque_color()),
@@ -485,6 +487,8 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
mBgAlphaImage = p.bg_alpha_image();
mBgOpaqueImageOverlay = p.bg_opaque_image_overlay;
mBgAlphaImageOverlay = p.bg_alpha_image_overlay;
+
+ setAcceptsBadge(p.accepts_badge);
}
static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
@@ -511,9 +515,6 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
if (!xml_filename.empty())
{
- LLUICtrlFactory::instance().pushFileName(xml_filename);
-
- LLFastTimer timer(FTM_EXTERNAL_PANEL_LOAD);
if (output_node)
{
//if we are exporting, we want to export the current xml
@@ -526,6 +527,9 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
return TRUE;
}
+ LLUICtrlFactory::instance().pushFileName(xml_filename);
+
+ LLFastTimer timer(FTM_EXTERNAL_PANEL_LOAD);
if (!LLUICtrlFactory::getLayeredXMLNode(xml_filename, referenced_xml))
{
llwarns << "Couldn't parse panel from: " << xml_filename << llendl;
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 7bbbeaf709..790025cb2d 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -35,6 +35,7 @@
#include "lluiimage.h"
#include "lluistring.h"
#include "v4color.h"
+#include "llbadgeholder.h"
#include <list>
#include <queue>
@@ -51,7 +52,7 @@ class LLUIImage;
* With or without border,
* Can contain LLUICtrls.
*/
-class LLPanel : public LLUICtrl
+class LLPanel : public LLUICtrl, public LLBadgeHolder
{
public:
struct LocalizedString : public LLInitParam::Block<LocalizedString>
@@ -89,6 +90,8 @@ public:
Multiple<LocalizedString> strings;
Optional<CommitCallbackParam> visible_callback;
+
+ Optional<bool> accepts_badge;
Params();
};
@@ -262,6 +265,9 @@ protected:
std::string mHelpTopic; // the name of this panel's help topic to display in the Help Viewer
typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
static factory_stack_t sFactoryStack;
+
+ // for setting the xml filename when building panel in context dependent cases
+ std::string mXMLFilename;
private:
BOOL mBgVisible; // any background at all?
@@ -280,8 +286,6 @@ private:
typedef std::map<std::string, std::string> ui_string_map_t;
ui_string_map_t mUIStrings;
- // for setting the xml filename when building panel in context dependent cases
- std::string mXMLFilename;
}; // end class LLPanel
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index 69dab2b411..f776c781b3 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -93,8 +93,17 @@ class LLSDParamAdapter : public T
LLParamSDParser parser;
parser.readSD(sd, *this);
}
+
+ operator LLSD() const
+ {
+ LLParamSDParser parser;
+ LLSD sd;
+ parser.writeSD(sd, *this);
+ return sd;
+ }
LLSDParamAdapter(const T& val)
+ : T(val)
{
T::operator=(val);
}
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
index 15a7438ec9..934879cdfd 100644
--- a/indra/llui/llspinctrl.cpp
+++ b/indra/llui/llspinctrl.cpp
@@ -44,7 +44,7 @@
#include "llresmgr.h"
#include "lluictrlfactory.h"
-const U32 MAX_STRING_LENGTH = 32;
+const U32 MAX_STRING_LENGTH = 255;
static LLDefaultChildRegistry::Register<LLSpinCtrl> r2("spinner");
@@ -124,14 +124,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)
params.max_length.bytes(MAX_STRING_LENGTH);
params.commit_callback.function((boost::bind(&LLSpinCtrl::onEditorCommit, this, _2)));
- if( mPrecision>0 )//should accept float numbers
- {
- params.prevalidate_callback(&LLTextValidate::validateFloat);
- }
- else //should accept int numbers
- {
- params.prevalidate_callback(&LLTextValidate::validateInt);
- }
+ //*NOTE: allow entering of any chars for LLCalc, proper input will be evaluated on commit
params.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
mEditor = LLUICtrlFactory::create<LLLineEditor> (params);
@@ -140,6 +133,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)
// than when it doesn't. Instead, if you always have to double click to select all the text,
// it's easier to understand
//mEditor->setSelectAllonFocusReceived(TRUE);
+ mEditor->setSelectAllonCommit(FALSE);
addChild(mEditor);
updateEditor();
@@ -304,9 +298,10 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
{
BOOL success = FALSE;
- std::string text = mEditor->getText();
- if( LLLineEditor::postvalidateFloat( text ) )
+ if( mEditor->evaluateFloat() )
{
+ std::string text = mEditor->getText();
+
LLLocale locale(LLLocale::USER_LOCALE);
F32 val = (F32) atof(text.c_str());
@@ -327,7 +322,11 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
}
updateEditor();
- if( !success )
+ if( success )
+ {
+ updateEditor();
+ }
+ else
{
reportInvalidData();
}
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 349dbc3405..919364be63 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -2024,8 +2024,17 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,
}
else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd)
{
- // segment wraps to next line, so just set doc pos to the end of the line
- pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength());
+ if (getLineNumFromDocIndex(line_iter->mDocIndexEnd - 1) == line_iter->mLineNum)
+ {
+ // if segment wraps to the next line we should step one char back
+ // to compensate for the space char between words
+ // which is removed due to wrapping
+ pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength());
+ }
+ else
+ {
+ pos = llclamp(line_iter->mDocIndexEnd, 0, getLength());
+ }
break;
}
start_x += text_width;
diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp
index 4b9faa0560..234e600ccd 100644
--- a/indra/llui/lltextvalidate.cpp
+++ b/indra/llui/lltextvalidate.cpp
@@ -188,6 +188,39 @@ namespace LLTextValidate
return success;
}
+ bool validateNonNegativeS32NoSpace(const LLWString &str)
+ {
+ LLLocale locale(LLLocale::USER_LOCALE);
+
+ LLWString test_str = str;
+ S32 len = test_str.length();
+ bool success = TRUE;
+ if(0 < len)
+ {
+ if('-' == test_str[0])
+ {
+ success = FALSE;
+ }
+ S32 i = 0;
+ while(success && (i < len))
+ {
+ if(!LLStringOps::isDigit(test_str[i]) || LLStringOps::isSpace(test_str[i++]))
+ {
+ success = FALSE;
+ }
+ }
+ }
+ if (success)
+ {
+ S32 val = strtol(wstring_to_utf8str(test_str).c_str(), NULL, 10);
+ if (val < 0)
+ {
+ success = FALSE;
+ }
+ }
+ return success;
+ }
+
bool validateAlphaNum(const LLWString &str)
{
LLLocale locale(LLLocale::USER_LOCALE);
diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h
index 84644be30c..5c830d7db3 100644
--- a/indra/llui/lltextvalidate.h
+++ b/indra/llui/lltextvalidate.h
@@ -46,6 +46,7 @@ namespace LLTextValidate
bool validateInt(const LLWString &str );
bool validatePositiveS32(const LLWString &str);
bool validateNonNegativeS32(const LLWString &str);
+ bool validateNonNegativeS32NoSpace(const LLWString &str);
bool validateAlphaNum(const LLWString &str );
bool validateAlphaNumSpace(const LLWString &str );
bool validateASCIIPrintableNoPipe(const LLWString &str);
diff --git a/indra/llui/lltimectrl.cpp b/indra/llui/lltimectrl.cpp
new file mode 100644
index 0000000000..9ea1e8815e
--- /dev/null
+++ b/indra/llui/lltimectrl.cpp
@@ -0,0 +1,432 @@
+/**
+ * @file lltimectrl.cpp
+ * @brief LLTimeCtrl base class
+ *
+ * $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 "linden_common.h"
+
+#include "lltimectrl.h"
+
+#include "llui.h"
+#include "lluiconstants.h"
+
+#include "llbutton.h"
+#include "llfontgl.h"
+#include "lllineeditor.h"
+#include "llkeyboard.h"
+#include "llstring.h"
+#include "lltextbox.h"
+#include "lluictrlfactory.h"
+
+static LLDefaultChildRegistry::Register<LLTimeCtrl> time_r("time");
+
+const U32 AMPM_LEN = 3;
+const U32 MINUTES_MIN = 0;
+const U32 MINUTES_MAX = 59;
+const U32 HOURS_MIN = 1;
+const U32 HOURS_MAX = 12;
+const U32 MINUTES_PER_HOUR = 60;
+const U32 MINUTES_PER_DAY = 24 * MINUTES_PER_HOUR;
+
+
+LLTimeCtrl::Params::Params()
+: label_width("label_width"),
+ snap_to("snap_to"),
+ allow_text_entry("allow_text_entry", true),
+ text_enabled_color("text_enabled_color"),
+ text_disabled_color("text_disabled_color"),
+ up_button("up_button"),
+ down_button("down_button")
+{}
+
+LLTimeCtrl::LLTimeCtrl(const LLTimeCtrl::Params& p)
+: LLUICtrl(p),
+ mLabelBox(NULL),
+ mTextEnabledColor(p.text_enabled_color()),
+ mTextDisabledColor(p.text_disabled_color()),
+ mTime(0),
+ mSnapToMin(5)
+{
+ static LLUICachedControl<S32> spinctrl_spacing ("UISpinctrlSpacing", 0);
+ static LLUICachedControl<S32> spinctrl_btn_width ("UISpinctrlBtnWidth", 0);
+ static LLUICachedControl<S32> spinctrl_btn_height ("UISpinctrlBtnHeight", 0);
+ S32 centered_top = getRect().getHeight();
+ S32 centered_bottom = getRect().getHeight() - 2 * spinctrl_btn_height;
+ S32 label_width = llclamp(p.label_width(), 0, llmax(0, getRect().getWidth() - 40));
+ S32 editor_left = label_width + spinctrl_spacing;
+
+ //================= Label =================//
+ if( !p.label().empty() )
+ {
+ LLRect label_rect( 0, centered_top, label_width, centered_bottom );
+ LLTextBox::Params params;
+ params.name("TimeCtrl Label");
+ params.rect(label_rect);
+ params.initial_value(p.label());
+ if (p.font.isProvided())
+ {
+ params.font(p.font);
+ }
+ mLabelBox = LLUICtrlFactory::create<LLTextBox> (params);
+ addChild(mLabelBox);
+
+ editor_left = label_rect.mRight + spinctrl_spacing;
+ }
+
+ S32 editor_right = getRect().getWidth() - spinctrl_btn_width - spinctrl_spacing;
+
+ //================= Editor ================//
+ LLRect editor_rect( editor_left, centered_top, editor_right, centered_bottom );
+ LLLineEditor::Params params;
+ params.name("SpinCtrl Editor");
+ params.rect(editor_rect);
+ if (p.font.isProvided())
+ {
+ params.font(p.font);
+ }
+
+ params.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+ params.max_length.chars(8);
+ params.keystroke_callback(boost::bind(&LLTimeCtrl::onTextEntry, this, _1));
+ mEditor = LLUICtrlFactory::create<LLLineEditor> (params);
+ mEditor->setPrevalidateInput(LLTextValidate::validateNonNegativeS32NoSpace);
+ mEditor->setPrevalidate(boost::bind(&LLTimeCtrl::isTimeStringValid, this, _1));
+ mEditor->setText(LLStringExplicit("12:00 AM"));
+ addChild(mEditor);
+
+ //================= Spin Buttons ==========//
+ LLButton::Params up_button_params(p.up_button);
+ up_button_params.rect = LLRect(editor_right + 1, getRect().getHeight(), editor_right + spinctrl_btn_width, getRect().getHeight() - spinctrl_btn_height);
+
+ up_button_params.click_callback.function(boost::bind(&LLTimeCtrl::onUpBtn, this));
+ up_button_params.mouse_held_callback.function(boost::bind(&LLTimeCtrl::onUpBtn, this));
+ mUpBtn = LLUICtrlFactory::create<LLButton>(up_button_params);
+ addChild(mUpBtn);
+
+ LLButton::Params down_button_params(p.down_button);
+ down_button_params.rect = LLRect(editor_right + 1, getRect().getHeight() - spinctrl_btn_height, editor_right + spinctrl_btn_width, getRect().getHeight() - 2 * spinctrl_btn_height);
+ down_button_params.click_callback.function(boost::bind(&LLTimeCtrl::onDownBtn, this));
+ down_button_params.mouse_held_callback.function(boost::bind(&LLTimeCtrl::onDownBtn, this));
+ mDownBtn = LLUICtrlFactory::create<LLButton>(down_button_params);
+ addChild(mDownBtn);
+
+ setUseBoundingRect( TRUE );
+}
+
+F32 LLTimeCtrl::getTime24() const
+{
+ // 0.0 - 23.99;
+ return mTime / 60.0f;
+}
+
+U32 LLTimeCtrl::getHours24() const
+{
+ return (U32) getTime24();
+}
+
+U32 LLTimeCtrl::getMinutes() const
+{
+ return mTime % MINUTES_PER_HOUR;
+}
+
+void LLTimeCtrl::setTime24(F32 time)
+{
+ time = llclamp(time, 0.0f, 23.99f); // fix out of range values
+ mTime = llround(time * MINUTES_PER_HOUR); // fixes values like 4.99999
+
+ updateText();
+}
+
+BOOL LLTimeCtrl::handleKeyHere(KEY key, MASK mask)
+{
+ if (mEditor->hasFocus())
+ {
+ if(key == KEY_UP)
+ {
+ onUpBtn();
+ return TRUE;
+ }
+ if(key == KEY_DOWN)
+ {
+ onDownBtn();
+ return TRUE;
+ }
+ if (key == KEY_RETURN)
+ {
+ onCommit();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void LLTimeCtrl::onUpBtn()
+{
+ switch(getEditingPart())
+ {
+ case HOURS:
+ increaseHours();
+ break;
+ case MINUTES:
+ increaseMinutes();
+ break;
+ case DAYPART:
+ switchDayPeriod();
+ break;
+ default:
+ break;
+ }
+
+ updateText();
+ onCommit();
+}
+
+void LLTimeCtrl::onDownBtn()
+{
+ switch(getEditingPart())
+ {
+ case HOURS:
+ decreaseHours();
+ break;
+ case MINUTES:
+ decreaseMinutes();
+ break;
+ case DAYPART:
+ switchDayPeriod();
+ break;
+ default:
+ break;
+ }
+
+ updateText();
+ onCommit();
+}
+
+void LLTimeCtrl::onFocusLost()
+{
+ updateText();
+ onCommit();
+ LLUICtrl::onFocusLost();
+}
+
+void LLTimeCtrl::onTextEntry(LLLineEditor* line_editor)
+{
+ std::string time_str = line_editor->getText();
+ U32 h12 = parseHours(getHoursString(time_str));
+ U32 m = parseMinutes(getMinutesString(time_str));
+ bool pm = parseAMPM(getAMPMString(time_str));
+
+ if (h12 == 12)
+ {
+ h12 = 0;
+ }
+
+ U32 h24 = pm ? h12 + 12 : h12;
+
+ mTime = h24 * MINUTES_PER_HOUR + m;
+}
+
+bool LLTimeCtrl::isTimeStringValid(const LLWString &wstr)
+{
+ std::string str = wstring_to_utf8str(wstr);
+
+ return isHoursStringValid(getHoursString(str)) &&
+ isMinutesStringValid(getMinutesString(str)) &&
+ isPMAMStringValid(getAMPMString(str));
+}
+
+void LLTimeCtrl::increaseMinutes()
+{
+ mTime = (mTime + mSnapToMin) % MINUTES_PER_DAY - (mTime % mSnapToMin);
+}
+
+void LLTimeCtrl::increaseHours()
+{
+ mTime = (mTime + MINUTES_PER_HOUR) % MINUTES_PER_DAY;
+}
+
+void LLTimeCtrl::decreaseMinutes()
+{
+ if (mTime < mSnapToMin)
+ {
+ mTime = MINUTES_PER_DAY - mTime;
+ }
+
+ mTime -= (mTime % mSnapToMin) ? mTime % mSnapToMin : mSnapToMin;
+}
+
+void LLTimeCtrl::decreaseHours()
+{
+ if (mTime < MINUTES_PER_HOUR)
+ {
+ mTime = 23 * MINUTES_PER_HOUR + mTime;
+ }
+ else
+ {
+ mTime -= MINUTES_PER_HOUR;
+ }
+}
+
+bool LLTimeCtrl::isPM() const
+{
+ return mTime >= (MINUTES_PER_DAY / 2);
+}
+
+void LLTimeCtrl::switchDayPeriod()
+{
+ if (isPM())
+ {
+ mTime -= MINUTES_PER_DAY / 2;
+ }
+ else
+ {
+ mTime += MINUTES_PER_DAY / 2;
+ }
+}
+
+void LLTimeCtrl::updateText()
+{
+ U32 h24 = getHours24();
+ U32 m = getMinutes();
+ U32 h12 = h24 > 12 ? h24 - 12 : h24;
+
+ if (h12 == 0)
+ h12 = 12;
+
+ mEditor->setText(llformat("%d:%02d %s", h12, m, isPM() ? "PM":"AM"));
+}
+
+LLTimeCtrl::EEditingPart LLTimeCtrl::getEditingPart()
+{
+ S32 cur_pos = mEditor->getCursor();
+ std::string time_str = mEditor->getText();
+
+ S32 colon_index = time_str.find_first_of(':');
+
+ if (cur_pos <= colon_index)
+ {
+ return HOURS;
+ }
+ else if (cur_pos > colon_index && cur_pos <= (S32)(time_str.length() - AMPM_LEN))
+ {
+ return MINUTES;
+ }
+ else if (cur_pos > (S32)(time_str.length() - AMPM_LEN))
+ {
+ return DAYPART;
+ }
+
+ return NONE;
+}
+
+// static
+std::string LLTimeCtrl::getHoursString(const std::string& str)
+{
+ size_t colon_index = str.find_first_of(':');
+ std::string hours_str = str.substr(0, colon_index);
+
+ return hours_str;
+}
+
+// static
+std::string LLTimeCtrl::getMinutesString(const std::string& str)
+{
+ size_t colon_index = str.find_first_of(':');
+ ++colon_index;
+
+ int minutes_len = str.length() - colon_index - AMPM_LEN;
+ std::string minutes_str = str.substr(colon_index, minutes_len);
+
+ return minutes_str;
+}
+
+// static
+std::string LLTimeCtrl::getAMPMString(const std::string& str)
+{
+ return str.substr(str.size() - 2, 2); // returns last two characters
+}
+
+// static
+bool LLTimeCtrl::isHoursStringValid(const std::string& str)
+{
+ U32 hours;
+ if ((!LLStringUtil::convertToU32(str, hours) || (hours <= HOURS_MAX)) && str.length() < 3)
+ return true;
+
+ return false;
+}
+
+// static
+bool LLTimeCtrl::isMinutesStringValid(const std::string& str)
+{
+ U32 minutes;
+ if (!LLStringUtil::convertToU32(str, minutes) || (minutes <= MINUTES_MAX) && str.length() < 3)
+ return true;
+
+ return false;
+}
+
+// static
+bool LLTimeCtrl::isPMAMStringValid(const std::string& str)
+{
+ S32 len = str.length();
+
+ bool valid = (str[--len] == 'M') && (str[--len] == 'P' || str[len] == 'A');
+
+ return valid;
+}
+
+// static
+U32 LLTimeCtrl::parseHours(const std::string& str)
+{
+ U32 hours;
+ if (LLStringUtil::convertToU32(str, hours) && (hours >= HOURS_MIN) && (hours <= HOURS_MAX))
+ {
+ return hours;
+ }
+ else
+ {
+ return HOURS_MIN;
+ }
+}
+
+// static
+U32 LLTimeCtrl::parseMinutes(const std::string& str)
+{
+ U32 minutes;
+ if (LLStringUtil::convertToU32(str, minutes) && (minutes >= MINUTES_MIN) && (minutes <= MINUTES_MAX))
+ {
+ return minutes;
+ }
+ else
+ {
+ return MINUTES_MIN;
+ }
+}
+
+// static
+bool LLTimeCtrl::parseAMPM(const std::string& str)
+{
+ return str == "PM";
+}
diff --git a/indra/llui/lltimectrl.h b/indra/llui/lltimectrl.h
new file mode 100644
index 0000000000..b5f268c76a
--- /dev/null
+++ b/indra/llui/lltimectrl.h
@@ -0,0 +1,131 @@
+/**
+ * @file lltimectrl.h
+ * @brief Time control
+ *
+ * $LicenseInfo:firstyear=2002&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 LLTIMECTRL_H_
+#define LLTIMECTRL_H_
+
+#include "stdtypes.h"
+#include "llbutton.h"
+#include "v4color.h"
+#include "llrect.h"
+
+class LLLineEditor;
+
+class LLTimeCtrl
+: public LLUICtrl
+{
+ LOG_CLASS(LLTimeCtrl);
+public:
+ struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
+ {
+ Optional<S32> label_width;
+ Optional<S32> snap_to;
+ Optional<bool> allow_text_entry;
+
+ Optional<LLUIColor> text_enabled_color;
+ Optional<LLUIColor> text_disabled_color;
+
+ Optional<LLButton::Params> up_button;
+ Optional<LLButton::Params> down_button;
+
+ Params();
+ };
+
+ F32 getTime24() const; // 0.0 - 24.0
+ U32 getHours24() const; // 0 - 23
+ U32 getMinutes() const; // 0 - 59
+
+ void setTime24(F32 time); // 0.0 - 23.98(3)
+
+protected:
+ LLTimeCtrl(const Params&);
+ friend class LLUICtrlFactory;
+
+private:
+
+ enum EDayPeriod
+ {
+ AM,
+ PM
+ };
+
+ enum EEditingPart
+ {
+ HOURS,
+ MINUTES,
+ DAYPART,
+ NONE
+ };
+
+ virtual void onFocusLost();
+ virtual BOOL handleKeyHere(KEY key, MASK mask);
+
+ void onUpBtn();
+ void onDownBtn();
+ void onTextEntry(LLLineEditor* line_editor);
+
+ bool isTimeStringValid(const LLWString& wstr);
+
+ void increaseMinutes();
+ void increaseHours();
+
+ void decreaseMinutes();
+ void decreaseHours();
+
+ bool isPM() const;
+ void switchDayPeriod();
+
+ void updateText();
+
+ EEditingPart getEditingPart();
+
+ static std::string getHoursString(const std::string& str);
+ static std::string getMinutesString(const std::string& str);
+ static std::string getAMPMString(const std::string& str);
+
+ static bool isHoursStringValid(const std::string& str);
+ static bool isMinutesStringValid(const std::string& str);
+ static bool isPMAMStringValid(const std::string& str);
+
+ static U32 parseHours(const std::string& str);
+ static U32 parseMinutes(const std::string& str);
+ static bool parseAMPM(const std::string& str);
+
+ class LLTextBox* mLabelBox;
+
+ class LLLineEditor* mEditor;
+ LLUIColor mTextEnabledColor;
+ LLUIColor mTextDisabledColor;
+
+ class LLButton* mUpBtn;
+ class LLButton* mDownBtn;
+
+ U32 mTime; // minutes since midnight: 0 - 1439
+ U32 mSnapToMin; // interval in minutes to snap to
+
+ BOOL mAllowEdit;
+};
+#endif /* LLTIMECTRL_H_ */
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 8020ca802b..58ba9e05f5 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -95,7 +95,6 @@ static LLDefaultChildRegistry::Register<LLSearchEditor> register_search_editor("
// register other widgets which otherwise may not be linked in
static LLDefaultChildRegistry::Register<LLLoadingIndicator> register_loading_indicator("loading_indicator");
-
//
// Functions
//
@@ -524,8 +523,15 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
if (solid_color)
{
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
- gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gSolidColorProgram.bind();
+ }
+ else
+ {
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
+ }
}
gGL.getTexUnit(0)->bind(image);
@@ -699,7 +705,14 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
if (solid_color)
{
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+ else
+ {
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
}
@@ -2082,7 +2095,7 @@ namespace LLInitParam
alpha("alpha"),
control("")
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
@@ -2097,14 +2110,14 @@ namespace LLInitParam
}
}
- void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
+ void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue(bool make_block_authoritative)
{
LLColor4 color = getValue();
- red.set(color.mV[VRED], false);
- green.set(color.mV[VGREEN], false);
- blue.set(color.mV[VBLUE], false);
- alpha.set(color.mV[VALPHA], false);
- control.set("", false);
+ red.set(color.mV[VRED], make_block_authoritative);
+ green.set(color.mV[VGREEN], make_block_authoritative);
+ blue.set(color.mV[VBLUE], make_block_authoritative);
+ alpha.set(color.mV[VALPHA], make_block_authoritative);
+ control.set("", make_block_authoritative);
}
bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -2124,7 +2137,7 @@ namespace LLInitParam
updateValue(LLFontGL::getFontDefault());
}
addSynonym(name, "");
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
@@ -2150,13 +2163,13 @@ namespace LLInitParam
}
}
- void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
+ void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue(bool make_block_authoritative)
{
if (getValue())
{
- name.set(LLFontGL::nameFromFont(getValue()), false);
- size.set(LLFontGL::sizeFromFont(getValue()), false);
- style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), false);
+ name.set(LLFontGL::nameFromFont(getValue()), make_block_authoritative);
+ size.set(LLFontGL::sizeFromFont(getValue()), make_block_authoritative);
+ style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), make_block_authoritative);
}
}
@@ -2169,7 +2182,7 @@ namespace LLInitParam
width("width"),
height("height")
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<LLRect, TypeValues<LLRect> >::updateValueFromBlock()
@@ -2236,19 +2249,19 @@ namespace LLInitParam
updateValue(rect);
}
- void ParamValue<LLRect, TypeValues<LLRect> >::updateBlockFromValue()
+ void ParamValue<LLRect, TypeValues<LLRect> >::updateBlockFromValue(bool make_block_authoritative)
{
// because of the ambiguity in specifying a rect by position and/or dimensions
- // we clear the "provided" flag so that values from xui/etc have priority
- // over those calculated from the rect object
-
+ // we use the lowest priority pairing so that any valid pairing in xui
+ // will override those calculated from the rect object
+ // in this case, that is left+width and bottom+height
LLRect& value = getValue();
- left.set(value.mLeft, false);
- right.set(value.mRight, false);
- bottom.set(value.mBottom, false);
- top.set(value.mTop, false);
- width.set(value.getWidth(), false);
- height.set(value.getHeight(), false);
+
+ left.set(value.mLeft, make_block_authoritative);
+ width.set(value.getWidth(), make_block_authoritative);
+
+ bottom.set(value.mBottom, make_block_authoritative);
+ height.set(value.getHeight(), make_block_authoritative);
}
ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::ParamValue(const LLCoordGL& coord)
@@ -2256,7 +2269,7 @@ namespace LLInitParam
x("x"),
y("y")
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateValueFromBlock()
@@ -2264,10 +2277,10 @@ namespace LLInitParam
updateValue(LLCoordGL(x, y));
}
- void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateBlockFromValue()
+ void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateBlockFromValue(bool make_block_authoritative)
{
- x.set(getValue().mX, false);
- y.set(getValue().mY, false);
+ x.set(getValue().mX, make_block_authoritative);
+ y.set(getValue().mY, make_block_authoritative);
}
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index c583d58d5a..7801a01ace 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -33,6 +33,7 @@
#include "llrect.h"
#include "llcontrol.h"
#include "llcoord.h"
+#include "llglslshader.h"
#include "llinitparam.h"
#include "llregistry.h"
#include "lluicolor.h"
@@ -47,6 +48,7 @@
// for initparam specialization
#include "llfontgl.h"
+
class LLColor4;
class LLVector3;
class LLVector2;
@@ -408,7 +410,7 @@ namespace LLInitParam
ParamValue(const LLRect& value);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
template<>
@@ -426,7 +428,7 @@ namespace LLInitParam
ParamValue(const LLUIColor& color);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
template<>
@@ -441,7 +443,7 @@ namespace LLInitParam
ParamValue(const LLFontGL* value);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
template<>
@@ -480,8 +482,11 @@ namespace LLInitParam
ParamValue(const LLCoordGL& val);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
}
+extern LLGLSLShader gSolidColorProgram;
+extern LLGLSLShader gUIProgram;
+
#endif
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index 0a06b5e74f..d58df5801b 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -68,6 +68,7 @@ LLUICtrl::ControlVisibility::ControlVisibility()
LLUICtrl::Params::Params()
: tab_stop("tab_stop", true),
chrome("chrome", false),
+ requests_front("requests_front", false),
label("label"),
initial_value("value"),
init_callback("init_callback"),
@@ -96,9 +97,10 @@ const LLUICtrl::Params& LLUICtrl::getDefaultParams()
LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)
: LLView(p),
- mTentative(FALSE),
mIsChrome(FALSE),
+ mRequestsFront(p.requests_front),
mTabStop(FALSE),
+ mTentative(FALSE),
mViewModel(viewmodel),
mControlVariable(NULL),
mEnabledControlVariable(NULL),
@@ -123,6 +125,8 @@ void LLUICtrl::initFromParams(const Params& p)
{
LLView::initFromParams(p);
+ mRequestsFront = p.requests_front;
+
setIsChrome(p.chrome);
setControlName(p.control_name);
if(p.enabled_controls.isProvided())
@@ -403,6 +407,36 @@ LLViewModel* LLUICtrl::getViewModel() const
return mViewModel;
}
+//virtual
+BOOL LLUICtrl::postBuild()
+{
+ //
+ // Find all of the children that want to be in front and move them to the front
+ //
+
+ if (getChildCount() > 0)
+ {
+ std::vector<LLUICtrl*> childrenToMoveToFront;
+
+ for (LLView::child_list_const_iter_t child_it = beginChild(); child_it != endChild(); ++child_it)
+ {
+ LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(*child_it);
+
+ if (uictrl && uictrl->mRequestsFront)
+ {
+ childrenToMoveToFront.push_back(uictrl);
+ }
+ }
+
+ for (std::vector<LLUICtrl*>::iterator it = childrenToMoveToFront.begin(); it != childrenToMoveToFront.end(); ++it)
+ {
+ sendChildToFront(*it);
+ }
+ }
+
+ return LLView::postBuild();
+}
+
bool LLUICtrl::setControlValue(const LLSD& value)
{
if (mControlVariable)
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index b37e9f6b1b..09bed9b958 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -94,7 +94,8 @@ public:
{
Optional<std::string> label;
Optional<bool> tab_stop,
- chrome;
+ chrome,
+ requests_front;
Optional<LLSD> initial_value;
Optional<CommitCallbackParam> init_callback,
@@ -143,6 +144,8 @@ protected:
virtual LLViewModel* getViewModel() const;
// We shouldn't ever need to set this directly
//virtual void setViewModel(const LLViewModelPtr&);
+
+ virtual BOOL postBuild();
public:
// LLView interface
@@ -301,8 +304,9 @@ protected:
private:
- BOOL mTabStop;
BOOL mIsChrome;
+ BOOL mRequestsFront;
+ BOOL mTabStop;
BOOL mTentative;
LLRootHandle<LLUICtrl> mUICtrlHandle;
diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp
index f37947a50b..1d9ce29ba9 100644
--- a/indra/llui/lluiimage.cpp
+++ b/indra/llui/lluiimage.cpp
@@ -172,15 +172,15 @@ namespace LLInitParam
}
}
- void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
+ void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue(bool make_block_authoritative)
{
if (getValue() == NULL)
{
- name.set("none", false);
+ name.set("none", make_block_authoritative);
}
else
{
- name.set(getValue()->getName(), false);
+ name.set(getValue()->getName(), make_block_authoritative);
}
}
diff --git a/indra/llui/lluiimage.h b/indra/llui/lluiimage.h
index 139d88e0ac..f07e8fa746 100644
--- a/indra/llui/lluiimage.h
+++ b/indra/llui/lluiimage.h
@@ -103,12 +103,12 @@ namespace LLInitParam
ParamValue(LLUIImage* const& image)
: super_t(image)
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
addSynonym(name, "name");
}
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
// Need custom comparison function for our test app, which only loads
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 9db1feafd1..a9e8fbb4e4 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -1134,7 +1134,7 @@ std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
//
LLUrlEntryNoLink::LLUrlEntryNoLink()
{
- mPattern = boost::regex("<nolink>.*</nolink>",
+ mPattern = boost::regex("<nolink>.*?</nolink>",
boost::regex::perl|boost::regex::icase);
}
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 245126d178..659a54cc6e 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1299,15 +1299,7 @@ void LLView::drawChildren()
{
if (!mChildList.empty())
{
- static const LLRect* rootRect = NULL;
-
- if (!mParentView)
- {
- rootRect = &mRect;
- }
-
- LLRect screenRect;
-
+ LLView* rootp = LLUI::getRootView();
++sDepth;
for (child_list_reverse_iter_t child_iter = mChildList.rbegin(); child_iter != mChildList.rend();) // ++child_iter)
@@ -1317,9 +1309,8 @@ void LLView::drawChildren()
if (viewp->getVisible() && viewp->getRect().isValid())
{
- // Only draw views that are within the root view
- localRectToScreen(viewp->getRect(),&screenRect);
- if ( rootRect->overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect))
+ LLRect screen_rect = viewp->calcScreenRect();
+ if ( rootp->getLocalRect().overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect))
{
LLUI::pushMatrix();
{
@@ -1664,15 +1655,19 @@ BOOL LLView::hasAncestor(const LLView* parentp) const
BOOL LLView::childHasKeyboardFocus( const std::string& childname ) const
{
- LLView *child = findChildView(childname, TRUE);
- if (child)
- {
- return gFocusMgr.childHasKeyboardFocus(child);
- }
- else
+ LLView *focus = dynamic_cast<LLView *>(gFocusMgr.getKeyboardFocus());
+
+ while (focus != NULL)
{
- return FALSE;
+ if (focus->getName() == childname)
+ {
+ return TRUE;
+ }
+
+ focus = focus->getParent();
}
+
+ return FALSE;
}
//-----------------------------------------------------------------------------
diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp
index 26b3b17577..d522123260 100644
--- a/indra/llui/tests/llurlentry_stub.cpp
+++ b/indra/llui/tests/llurlentry_stub.cpp
@@ -137,7 +137,7 @@ namespace LLInitParam
void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
{}
- void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
+ void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue(bool)
{}
bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -152,7 +152,7 @@ namespace LLInitParam
void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
{}
- void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
+ void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue(bool)
{}
void TypeValues<LLFontGL::HAlign>::declareValues()
@@ -167,7 +167,7 @@ namespace LLInitParam
void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
{}
- void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
+ void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue(bool)
{}
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index e09ef33d49..fb6a2eabf1 100644
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -95,7 +95,7 @@ namespace LLInitParam
{
const U8* my_addr = reinterpret_cast<const U8*>(this);
const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
- mEnclosingBlockOffset = (U16)(my_addr - block_addr);
+ mEnclosingBlockOffset = 0x7FFFffff & ((U32)(my_addr - block_addr));
}
bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
@@ -111,7 +111,7 @@ namespace LLInitParam
void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
{}
- void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
+ void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue(bool)
{}
bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -127,7 +127,7 @@ namespace LLInitParam
void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
{}
- void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
+ void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue(bool)
{}
void TypeValues<LLFontGL::HAlign>::declareValues()
@@ -142,7 +142,7 @@ namespace LLInitParam
void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
{}
- void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
+ void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue(bool)
{}
bool ParamCompare<LLUIImage*, false>::equals(
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/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp
index 25550321f0..ff92cbb7fd 100644
--- a/indra/llvfs/lldiriterator.cpp
+++ b/indra/llvfs/lldiriterator.cpp
@@ -52,8 +52,20 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
{
fs::path dir_path(dirname);
- // Check if path exists.
- if (!fs::exists(dir_path))
+ bool is_dir = false;
+
+ // Check if path is a directory.
+ try
+ {
+ is_dir = fs::is_directory(dir_path);
+ }
+ catch (fs::basic_filesystem_error<fs::path>& e)
+ {
+ llwarns << e.what() << llendl;
+ return;
+ }
+
+ if (!is_dir)
{
llwarns << "Invalid path: \"" << dir_path.string() << "\"" << llendl;
return;
@@ -66,7 +78,7 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
}
catch (fs::basic_filesystem_error<fs::path>& e)
{
- llerrs << e.what() << llendl;
+ llwarns << e.what() << llendl;
return;
}
@@ -82,7 +94,7 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
}
catch (boost::regex_error& e)
{
- llerrs << "\"" << exp << "\" is not a valid regular expression: "
+ llwarns << "\"" << exp << "\" is not a valid regular expression: "
<< e.what() << llendl;
return;
}
diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp
index 3d3ed9f6d4..bf49b9668e 100644
--- a/indra/llvfs/lllfsthread.cpp
+++ b/indra/llvfs/lllfsthread.cpp
@@ -67,10 +67,6 @@ LLLFSThread::LLLFSThread(bool threaded) :
LLQueuedThread("LFS", threaded),
mPriorityCounter(PRIORITY_LOWBITS)
{
- if(!mLocalAPRFilePoolp)
- {
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
- }
}
LLLFSThread::~LLLFSThread()
@@ -182,8 +178,7 @@ bool LLLFSThread::Request::processRequest()
if (mOperation == FILE_READ)
{
llassert(mOffset >= 0);
- LLAPRFile infile ; // auto-closes
- infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool());
+ LLAPRFile infile(mFileName, LL_APR_RB);
if (!infile.getFileHandle())
{
llwarns << "LLLFS: Unable to read file: " << mFileName << llendl;
@@ -205,8 +200,7 @@ bool LLLFSThread::Request::processRequest()
apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY;
if (mOffset < 0)
flags |= APR_APPEND;
- LLAPRFile outfile ; // auto-closes
- outfile.open(mFileName, flags, mThread->getLocalAPRFilePool());
+ LLAPRFile outfile(mFileName, flags);
if (!outfile.getFileHandle())
{
llwarns << "LLLFS: Unable to write file: " << mFileName << llendl;
diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp
index 82c926620a..ade19f8103 100644
--- a/indra/llvfs/llvfs.cpp
+++ b/indra/llvfs/llvfs.cpp
@@ -234,7 +234,7 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename
mDataFP(NULL),
mIndexFP(NULL)
{
- mDataMutex = new LLMutex(0);
+ mDataMutex = new LLMutex;
S32 i;
for (i = 0; i < VFSLOCK_COUNT; i++)
@@ -2098,8 +2098,7 @@ void LLVFS::dumpFiles()
std::string filename = id.asString() + extension;
llinfos << " Writing " << filename << llendl;
- LLAPRFile outfile;
- outfile.open(filename, LL_APR_WB);
+ LLAPRFile outfile(filename, LL_APR_WB);
outfile.write(&buffer[0], size);
outfile.close();
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/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 551d487cc8..1239e2d40b 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1172,8 +1172,39 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
// First we try and get a 32 bit depth pixel format
BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
+
+ while(!result && mFSAASamples > 0)
+ {
+ llwarns << "FSAASamples: " << mFSAASamples << " not supported." << llendl ;
+
+ mFSAASamples /= 2 ; //try to decrease sample pixel number until to disable anti-aliasing
+ if(mFSAASamples < 2)
+ {
+ mFSAASamples = 0 ;
+ }
+
+ if (mFSAASamples > 0)
+ {
+ attrib_list[end_attrib + 3] = mFSAASamples;
+ }
+ else
+ {
+ cur_attrib = end_attrib ;
+ end_attrib = 0 ;
+ attrib_list[cur_attrib++] = 0 ; //end
+ }
+ result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
+
+ if(result)
+ {
+ llwarns << "Only support FSAASamples: " << mFSAASamples << llendl ;
+ }
+ }
+
if (!result)
{
+ llwarns << "mFSAASamples: " << mFSAASamples << llendl ;
+
close();
show_window_creation_error("Error after wglChoosePixelFormatARB 32-bit");
return FALSE;
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 e402061e1f..050d4b729f 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -385,7 +385,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.cpp b/indra/llxuixml/llinitparam.cpp
index b3312798dd..c024fd405e 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -40,7 +40,7 @@ namespace LLInitParam
{
const U8* my_addr = reinterpret_cast<const U8*>(this);
const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
- mEnclosingBlockOffset = (U16)(my_addr - block_addr);
+ mEnclosingBlockOffset = 0x7FFFffff & ((U32)(my_addr - block_addr));
}
//
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index a853999e94..194ef8af6a 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -34,6 +34,8 @@
#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>
+#include "llerror.h"
+
namespace LLInitParam
{
template<typename T> const T& defaultValue() { static T value; return value; }
@@ -302,8 +304,9 @@ namespace LLInitParam
private:
friend class BaseBlock;
- U16 mEnclosingBlockOffset;
- bool mIsProvided;
+ U32 mEnclosingBlockOffset:31;
+ U32 mIsProvided:1;
+
};
// various callbacks and constraints associated with an individual param
@@ -737,7 +740,6 @@ namespace LLInitParam
if (src_typed_param.isProvided()
&& (overwrite || !dst_typed_param.isProvided()))
{
- dst_typed_param.clearValueName();
dst_typed_param.set(src_typed_param.getValue());
return true;
}
@@ -1741,39 +1743,35 @@ namespace LLInitParam
: mValue(value),
mValueAge(VALUE_AUTHORITATIVE),
mKeyVersion(0),
- mValidatedVersion(-1)
+ mValidatedVersion(-1),
+ mValidated(false)
{}
bool deserializeBlock(Parser& parser, Parser::name_stack_range_t name_stack, S32 generation)
{
derived_t& typed_param = static_cast<derived_t&>(*this);
- // type to apply parse direct value T
+ // try to parse direct value T
if (name_stack.first == name_stack.second)
{
if(parser.readValue(typed_param.mValue))
{
- typed_param.clearValueName();
typed_param.mValueAge = VALUE_AUTHORITATIVE;
- typed_param.updateBlockFromValue();
+ typed_param.updateBlockFromValue(false);
+
+ typed_param.clearValueName();
return true;
}
}
// fall back on parsing block components for T
- // if we deserialized at least one component...
- if (typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation))
- {
- return true;
- }
-
- return false;
+ return typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation);
}
void serializeBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const
{
- const self_t& typed_param = static_cast<const self_t&>(*this);
- const self_t* diff_param = static_cast<const self_t*>(diff_block);
+ const derived_t& typed_param = static_cast<const derived_t&>(*this);
+ const derived_t* diff_param = static_cast<const derived_t*>(diff_block);
std::string key = typed_param.getValueName();
@@ -1798,7 +1796,20 @@ namespace LLInitParam
// be exported as <color green="1"/>, since it was probably the intent of the user to
// be specific about the RGB color values. This also fixes an issue where we distinguish
// between rect.left not being provided and rect.left being explicitly set to 0 (same as default)
- block_t::serializeBlock(parser, name_stack, NULL);
+
+ if (typed_param.mValueAge == VALUE_AUTHORITATIVE)
+ {
+ // if the value is authoritative but the parser doesn't accept the value type
+ // go ahead and make a copy, and splat the value out to its component params
+ // and serialize those params
+ derived_t copy(typed_param);
+ copy.updateBlockFromValue(true);
+ copy.block_t::serializeBlock(parser, name_stack, NULL);
+ }
+ else
+ {
+ block_t::serializeBlock(parser, name_stack, NULL);
+ }
}
}
}
@@ -1847,7 +1858,7 @@ namespace LLInitParam
{
BaseBlock::paramChanged(changed_param, user_provided);
if (user_provided)
- {
+ {
// a parameter changed, so our value is out of date
mValueAge = VALUE_NEEDS_UPDATE;
}
@@ -1860,7 +1871,7 @@ namespace LLInitParam
mValueAge = VALUE_AUTHORITATIVE;
mValue = val;
typed_param.clearValueName();
- static_cast<derived_t*>(const_cast<self_t*>(this))->updateBlockFromValue();
+ static_cast<derived_t*>(this)->updateBlockFromValue(false);
}
value_assignment_t getValue() const
@@ -1915,7 +1926,6 @@ namespace LLInitParam
mutable bool mValidated; // lazy validation flag
private:
-
mutable T mValue;
mutable EValueAge mValueAge;
};
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/indra.l b/indra/lscript/lscript_compile/indra.l
index 188c9e1950..4e103ae2ba 100644
--- a/indra/lscript/lscript_compile/indra.l
+++ b/indra/lscript/lscript_compile/indra.l
@@ -603,6 +603,8 @@ extern "C" { int yyerror(const char *fmt, ...); }
"PARCEL_DETAILS_OWNER" { count(); yylval.ival = PARCEL_DETAILS_OWNER; return(INTEGER_CONSTANT); }
"PARCEL_DETAILS_GROUP" { count(); yylval.ival = PARCEL_DETAILS_GROUP; return(INTEGER_CONSTANT); }
"PARCEL_DETAILS_AREA" { count(); yylval.ival = PARCEL_DETAILS_AREA; return(INTEGER_CONSTANT); }
+"PARCEL_DETAILS_ID" { count(); yylval.ival = PARCEL_DETAILS_ID; return(INTEGER_CONSTANT); }
+"PARCEL_DETAILS_SEE_AVATARS" { count(); yylval.ival = PARCEL_DETAILS_SEE_AVATARS; return(INTEGER_CONSTANT); }
"STRING_TRIM_HEAD" { count(); yylval.ival = STRING_TRIM_HEAD; return(INTEGER_CONSTANT); }
"STRING_TRIM_TAIL" { count(); yylval.ival = STRING_TRIM_TAIL; return(INTEGER_CONSTANT); }
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/mac_crash_logger/CrashReporter.nib/objects.xib b/indra/mac_crash_logger/CrashReporter.nib/objects.xib
index 634d1c5321..32647391b6 100644
--- a/indra/mac_crash_logger/CrashReporter.nib/objects.xib
+++ b/indra/mac_crash_logger/CrashReporter.nib/objects.xib
@@ -15,7 +15,7 @@
<string name="bounds">414 390 434 487 </string>
</object>
<object class="IBCarbonStaticText" id="181">
- <string name="title">Second Life appears to have crashed or frozen the last time it ran.&#10;&#10;This crash reporter collects information about your computer&apos;s hardware configuration, operating system, and some Second Life logs, all of which are used for debugging purposes only.&#10;&#10;In the space below, please briefly describe what you were doing or trying to do just prior to the crash. Thank you for your help!&#10;&#10;This report is NOT read by Customer Support. If you have billing or other questions, please go to: http://www.secondlife.com/support/&#10;&#10;If you don&apos;t wish to send Linden Lab a crash report, press Cancel.&#10;</string>
+ <string name="title">Second Life appears to have crashed or frozen the last time it ran.&#10;&#10;This crash reporter collects information about your computer&apos;s hardware configuration, operating system, and some Second Life logs, all of which are used for debugging purposes only.&#10;&#10;In the space below, please briefly describe what you were doing or trying to do just prior to the crash. Thank you for your help!&#10;&#10;This report is NOT read by Customer Support. If you have billing or other questions, please go to: http://www.secondlife.com/support/&#10;&#10;If you don&apos;t wish to send Linden Lab a crash report, press Don&apos;t Send.&#10;</string>
<string name="bounds">20 20 231 487 </string>
</object>
<object class="IBCarbonWindow" id="166">
diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp
index bec8cce04e..b555e92b96 100644
--- a/indra/mac_crash_logger/llcrashloggermac.cpp
+++ b/indra/mac_crash_logger/llcrashloggermac.cpp
@@ -29,9 +29,6 @@
#include <Carbon/Carbon.h>
#include <iostream>
-#include <sstream>
-
-#include "boost/tokenizer.hpp"
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
#include "llerror.h"
@@ -247,7 +244,7 @@ bool LLCrashLoggerMac::mainLoop()
void LLCrashLoggerMac::updateApplication(const std::string& message)
{
- LLCrashLogger::updateApplication();
+ LLCrashLogger::updateApplication(message);
}
bool LLCrashLoggerMac::cleanup()
diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp
index 20b491c401..6571b35241 100644
--- a/indra/mac_crash_logger/mac_crash_logger.cpp
+++ b/indra/mac_crash_logger/mac_crash_logger.cpp
@@ -25,22 +25,23 @@
*/
#include "linden_common.h"
-
#include "llcrashloggermac.h"
int main(int argc, char **argv)
{
- //time(&gLaunchTime);
-
- llinfos << "Starting Second Life Viewer Crash Reporter" << llendl;
+ llinfos << "Starting crash reporter." << llendl;
LLCrashLoggerMac app;
app.parseCommandOptions(argc, argv);
- if(!app.init())
+
+ if (! app.init())
{
- return 0;
+ llwarns << "Unable to initialize application." << llendl;
+ return 1;
}
+
app.mainLoop();
-
+ app.cleanup();
+ llinfos << "Crash reporter finished normally." << llendl;
return 0;
}
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/gstreamer010/llmediaimplgstreamer.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
index 6bc272c009..77d6d19663 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
@@ -37,7 +37,6 @@ extern "C" {
#include <stdio.h>
#include <gst/gst.h>
-#include "apr_pools.h"
#include "apr_dso.h"
}
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
index 2e4baaa9eb..93a10424dd 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
@@ -28,16 +28,18 @@
#if LL_GSTREAMER010_ENABLED
+#include "linden_common.h"
+
#include <string>
extern "C" {
#include <gst/gst.h>
-#include "apr_pools.h"
#include "apr_dso.h"
}
#include "llmediaimplgstreamertriviallogging.h"
+#include "llaprpool.h"
#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) RTN (*ll##GSTSYM)(__VA_ARGS__) = NULL
#include "llmediaimplgstreamer_syms_raw.inc"
@@ -56,7 +58,7 @@ void ll_gst_debug_register_funcptr(GstDebugFuncPtr func, gchar* ptrname)
}
static bool sSymsGrabbed = false;
-static apr_pool_t *sSymGSTDSOMemoryPool = NULL;
+static LLAPRPool sSymGSTDSOMemoryPool;
static apr_dso_handle_t *sSymGSTDSOHandleG = NULL;
static apr_dso_handle_t *sSymGSTDSOHandleV = NULL;
@@ -78,11 +80,11 @@ bool grab_gst_syms(std::string gst_dso_name,
#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##GSTSYM, sSymGSTDSOHandle, #GSTSYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #GSTSYM); if (REQ) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #GSTSYM, (void*)ll##GSTSYM);}while(0)
//attempt to load the shared libraries
- apr_pool_create(&sSymGSTDSOMemoryPool, NULL);
+ sSymGSTDSOMemoryPool.create();
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymGSTDSOHandle,
gst_dso_name.c_str(),
- sSymGSTDSOMemoryPool) ))
+ sSymGSTDSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", gst_dso_name.c_str());
#include "llmediaimplgstreamer_syms_raw.inc"
@@ -96,7 +98,7 @@ bool grab_gst_syms(std::string gst_dso_name,
if ( APR_SUCCESS ==
(rv = apr_dso_load(&sSymGSTDSOHandle,
gst_dso_name_vid.c_str(),
- sSymGSTDSOMemoryPool) ))
+ sSymGSTDSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", gst_dso_name_vid.c_str());
#include "llmediaimplgstreamer_syms_rawv.inc"
@@ -150,8 +152,7 @@ void ungrab_gst_syms()
if ( sSymGSTDSOMemoryPool )
{
- apr_pool_destroy(sSymGSTDSOMemoryPool);
- sSymGSTDSOMemoryPool = NULL;
+ sSymGSTDSOMemoryPool.destroy();
}
// NULL-out all of the symbols we'd grabbed
diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp
index 91be3a89e9..94dfd80700 100644
--- a/indra/media_plugins/webkit/linux_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp
@@ -65,7 +65,7 @@ extern "C" {
#undef LL_PA_SYM
static bool sSymsGrabbed = false;
-static apr_pool_t *sSymPADSOMemoryPool = NULL;
+static LLAPRPool sSymPADSOMemoryPool;
static apr_dso_handle_t *sSymPADSOHandleG = NULL;
bool grab_pa_syms(std::string pulse_dso_name)
@@ -84,11 +84,11 @@ bool grab_pa_syms(std::string pulse_dso_name)
#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##PASYM, sSymPADSOHandle, #PASYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #PASYM); if (REQUIRED) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #PASYM, (void*)ll##PASYM);}while(0)
//attempt to load the shared library
- apr_pool_create(&sSymPADSOMemoryPool, NULL);
+ sSymPADSOMemoryPool.create();
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymPADSOHandle,
pulse_dso_name.c_str(),
- sSymPADSOMemoryPool) ))
+ sSymPADSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", pulse_dso_name.c_str());
@@ -130,12 +130,8 @@ void ungrab_pa_syms()
apr_dso_unload(sSymPADSOHandleG);
sSymPADSOHandleG = NULL;
}
-
- if ( sSymPADSOMemoryPool )
- {
- apr_pool_destroy(sSymPADSOMemoryPool);
- sSymPADSOMemoryPool = NULL;
- }
+
+ sSymPADSOMemoryPool.destroy();
// NULL-out all of the symbols we'd grabbed
#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{ll##PASYM = NULL;}while(0)
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 27f3c7260e..430ae9d4dc 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -1,1386 +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 <glib.h>
-# include <glib-object.h>
-}
-#else
-# define LL_QTWEBKIT_USES_PIXMAPS 0
-#endif // LL_LINUX
-
-# include "volume_catcher.h"
-
-#if LL_WINDOWS
-# include <direct.h>
-#else
-# include <unistd.h>
-# include <stdlib.h>
-#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;
-
- 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 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<height; ++y)
- {
- memcpy( &mPixels[(height-y-1)*rowspan], &browser_pixels[y*rowspan], rowspan );
- }
-#else
- memcpy( mPixels, browser_pixels, buffer_size );
-#endif // LL_QTWEBKIT_USES_PIXMAPS
- }
-
- if ( mWidth > 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
-
- // 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;
-
- return true;
- };
-
- 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);
- }
-
- // 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 );
-
- // create single browser window
- mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
-
- // 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 );
-
-#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);
-
- 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);
- }
-
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // 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
- 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 == "js_expose_object")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- bool expose_object = message_in.getValueBoolean( "expose" );
- LLQtWebKit::getInstance()->setExposeObject( expose_object );
-#endif
- }
- else
- if(message_name == "js_values_valid")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- bool valid = message_in.getValueBoolean( "valid" );
- LLQtWebKit::getInstance()->setValuesValid( valid );
-#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 );
-#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 );
-#endif
- }
- else
- if(message_name == "js_agent_orientation")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- F32 angle = message_in.getValueReal("angle");
- LLQtWebKit::getInstance()->setAgentOrientation( angle );
-#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 );
-#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 );
-#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 == "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()->addCAFile( 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 <glib.h>
+# include <glib-object.h>
+}
+#else
+# define LL_QTWEBKIT_USES_PIXMAPS 0
+#endif // LL_LINUX
+
+# include "volume_catcher.h"
+
+#if LL_WINDOWS
+# include <direct.h>
+#else
+# include <unistd.h>
+# include <stdlib.h>
+#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<height; ++y)
+ {
+ memcpy( &mPixels[(height-y-1)*rowspan], &browser_pixels[y*rowspan], rowspan );
+ }
+#else
+ memcpy( mPixels, browser_pixels, buffer_size );
+#endif // LL_QTWEBKIT_USES_PIXMAPS
+ }
+
+ if ( mWidth > 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 523ea8a394..a117d9a593 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -120,7 +120,6 @@ set(viewer_SOURCE_FILES
llchiclet.cpp
llclassifiedinfo.cpp
llclassifiedstatsresponder.cpp
- llcloud.cpp
llcofwearables.cpp
llcolorswatch.cpp
llcommanddispatcherlistener.cpp
@@ -131,6 +130,7 @@ set(viewer_SOURCE_FILES
llcurrencyuimanager.cpp
llcylinder.cpp
lldateutil.cpp
+ lldaycyclemanager.cpp
lldebugmessagebox.cpp
lldebugview.cpp
lldelayedgestureerror.cpp
@@ -151,6 +151,8 @@ set(viewer_SOURCE_FILES
lldriverparam.cpp
lldynamictexture.cpp
llemote.cpp
+ llenvmanager.cpp
+ llestateinfomodel.cpp
lleventnotifier.cpp
lleventpoll.cpp
llexpandabletextbox.cpp
@@ -179,9 +181,12 @@ set(viewer_SOURCE_FILES
llfloaterbuyland.cpp
llfloatercamera.cpp
llfloatercolorpicker.cpp
- llfloaterdaycycle.cpp
+ llfloaterdeleteenvpreset.cpp
llfloaterdisplayname.cpp
- llfloaterenvsettings.cpp
+ llfloatereditdaycycle.cpp
+ llfloatereditsky.cpp
+ llfloatereditwater.cpp
+ llfloaterenvironmentsettings.cpp
llfloaterevent.cpp
llfloaterfonttest.cpp
llfloatergesture.cpp
@@ -204,6 +209,7 @@ set(viewer_SOURCE_FILES
llfloatermediasettings.cpp
llfloatermemleak.cpp
llfloatermodelpreview.cpp
+ llfloatermodeluploadbase.cpp
llfloatermodelwizard.cpp
llfloaternamedesc.cpp
llfloaternotificationsconsole.cpp
@@ -234,10 +240,8 @@ set(viewer_SOURCE_FILES
llfloateruipreview.cpp
llfloaterurlentry.cpp
llfloatervoiceeffect.cpp
- llfloaterwater.cpp
llfloaterwebcontent.cpp
llfloaterwhitelistentry.cpp
- llfloaterwindlight.cpp
llfloaterwindowsize.cpp
llfloaterworldmap.cpp
llfolderview.cpp
@@ -361,6 +365,9 @@ set(viewer_SOURCE_FILES
llpanellogin.cpp
llpanelloginlistener.cpp
llpanelmaininventory.cpp
+ llpanelmarketplaceinbox.cpp
+ llpanelmarketplaceinboxinventory.cpp
+ llpanelmarketplaceoutbox.cpp
llpanelmediasettingsgeneral.cpp
llpanelmediasettingspermissions.cpp
llpanelmediasettingssecurity.cpp
@@ -411,6 +418,7 @@ set(viewer_SOURCE_FILES
llproductinforequest.cpp
llprogressview.cpp
llrecentpeople.cpp
+ llregioninfomodel.cpp
llregionposition.cpp
llremoteparcelrequest.cpp
llsavedsettingsglue.cpp
@@ -496,6 +504,7 @@ set(viewer_SOURCE_FILES
lltranslate.cpp
lluilistener.cpp
lluploaddialog.cpp
+ lluploadfloaterobservers.cpp
llurl.cpp
llurldispatcher.cpp
llurldispatcherlistener.cpp
@@ -519,7 +528,7 @@ set(viewer_SOURCE_FILES
llviewerfloaterreg.cpp
llviewerfoldertype.cpp
llviewergenericmessage.cpp
- llviewergesture.cpp
+ llviewergesture.cpp
llviewerhelp.cpp
llviewerhelputil.cpp
llviewerhome.cpp
@@ -566,7 +575,6 @@ set(viewer_SOURCE_FILES
llvoavatardefines.cpp
llvoavatarself.cpp
llvocache.cpp
- llvoclouds.cpp
llvograss.cpp
llvoground.cpp
llvoicecallhandler.cpp
@@ -595,6 +603,7 @@ set(viewer_SOURCE_FILES
llwind.cpp
llwlanimator.cpp
llwldaycycle.cpp
+ llwlhandlers.cpp
llwlparammanager.cpp
llwlparamset.cpp
llworld.cpp
@@ -673,7 +682,6 @@ set(viewer_HEADER_FILES
llchiclet.h
llclassifiedinfo.h
llclassifiedstatsresponder.h
- llcloud.h
llcofwearables.h
llcolorswatch.h
llcommanddispatcherlistener.h
@@ -684,6 +692,7 @@ set(viewer_HEADER_FILES
llcurrencyuimanager.h
llcylinder.h
lldateutil.h
+ lldaycyclemanager.h
lldebugmessagebox.h
lldebugview.h
lldelayedgestureerror.h
@@ -694,7 +703,6 @@ set(viewer_HEADER_FILES
lldrawpoolalpha.h
lldrawpoolavatar.h
lldrawpoolbump.h
- lldrawpoolclouds.h
lldrawpoolground.h
lldrawpoolsimple.h
lldrawpoolsky.h
@@ -705,6 +713,8 @@ set(viewer_HEADER_FILES
lldriverparam.h
lldynamictexture.h
llemote.h
+ llenvmanager.h
+ llestateinfomodel.h
lleventnotifier.h
lleventpoll.h
llexpandabletextbox.h
@@ -733,9 +743,12 @@ set(viewer_HEADER_FILES
llfloaterbuyland.h
llfloatercamera.h
llfloatercolorpicker.h
- llfloaterdaycycle.h
+ llfloaterdeleteenvpreset.h
llfloaterdisplayname.h
- llfloaterenvsettings.h
+ llfloatereditdaycycle.h
+ llfloatereditsky.h
+ llfloatereditwater.h
+ llfloaterenvironmentsettings.h
llfloaterevent.h
llfloaterfonttest.h
llfloatergesture.h
@@ -758,6 +771,7 @@ set(viewer_HEADER_FILES
llfloatermediasettings.h
llfloatermemleak.h
llfloatermodelpreview.h
+ llfloatermodeluploadbase.h
llfloatermodelwizard.h
llfloaternamedesc.h
llfloaternotificationsconsole.h
@@ -788,10 +802,8 @@ set(viewer_HEADER_FILES
llfloateruipreview.h
llfloaterurlentry.h
llfloatervoiceeffect.h
- llfloaterwater.h
llfloaterwebcontent.h
llfloaterwhitelistentry.h
- llfloaterwindlight.h
llfloaterwindowsize.h
llfloaterworldmap.h
llfolderview.h
@@ -909,6 +921,9 @@ set(viewer_HEADER_FILES
llpanellogin.h
llpanelloginlistener.h
llpanelmaininventory.h
+ llpanelmarketplaceinbox.h
+ llpanelmarketplaceinboxinventory.h
+ llpanelmarketplaceoutbox.h
llpanelmediasettingsgeneral.h
llpanelmediasettingspermissions.h
llpanelmediasettingssecurity.h
@@ -959,6 +974,7 @@ set(viewer_HEADER_FILES
llproductinforequest.h
llprogressview.h
llrecentpeople.h
+ llregioninfomodel.h
llregionposition.h
llremoteparcelrequest.h
llresourcedata.h
@@ -998,7 +1014,7 @@ set(viewer_HEADER_FILES
llsurface.h
llsurfacepatch.h
llsyswellitem.h
- llsyswellwindow.h
+ llsyswellwindow.h
lltable.h
llteleporthistory.h
llteleporthistorystorage.h
@@ -1047,6 +1063,7 @@ set(viewer_HEADER_FILES
lluiconstants.h
lluilistener.h
lluploaddialog.h
+ lluploadfloaterobservers.h
llurl.h
llurldispatcher.h
llurldispatcherlistener.h
@@ -1070,7 +1087,7 @@ set(viewer_HEADER_FILES
llviewerfloaterreg.h
llviewerfoldertype.h
llviewergenericmessage.h
- llviewergesture.h
+ llviewergesture.h
llviewerhelp.h
llviewerhome.h
llviewerinventory.h
@@ -1114,7 +1131,6 @@ set(viewer_HEADER_FILES
llvoavatardefines.h
llvoavatarself.h
llvocache.h
- llvoclouds.h
llvograss.h
llvoground.h
llvoicechannel.h
@@ -1143,6 +1159,7 @@ set(viewer_HEADER_FILES
llwind.h
llwlanimator.h
llwldaycycle.h
+ llwlhandlers.h
llwlparammanager.h
llwlparamset.h
llworld.h
@@ -1225,7 +1242,7 @@ if (WINDOWS)
# precompiled header configuration
# llviewerprecompiledheaders.cpp generates
# the .pch file.
- # All sources added to viewer_SOURCE_FILES
+ # All sources added to viewer_SOURCE_FILES
# at this point use it.
if(USE_PRECOMPILED_HEADERS)
set_source_files_properties(llviewerprecompiledheaders.cpp
@@ -1234,7 +1251,37 @@ 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 "test")
+ string(TOLOWER ${VIEWER_CHANNEL} channel_lower)
+ if(channel_lower MATCHES "^second life release")
+ set(ICON_PATH "release")
+ elseif(channel_lower MATCHES "^second life beta viewer")
+ set(ICON_PATH "beta")
+ elseif(channel_lower MATCHES "^second life development")
+ set(ICON_PATH "development")
+ 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}/secondlife.ico"
+ "${CMAKE_CURRENT_SOURCE_DIR}/res/ll_icon.ico"
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/secondlife_256.BMP"
+ "${CMAKE_CURRENT_SOURCE_DIR}/res/ll_icon.BMP"
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/secondlife_256.BMP"
+ "${CMAKE_CURRENT_SOURCE_DIR}/res-sdl/ll_icon.BMP"
+ )
+
# Add resource files to the project.
# viewerRes.rc is the only buildable file, but
# the rest are all dependencies of it.
@@ -1264,6 +1311,7 @@ if (WINDOWS)
res/lltooltranslate.cur
res/lltoolzoomin.cur
res/lltoolzoomout.cur
+ res-sdl/ll_icon.BMP
res/ll_icon.BMP
res/ll_icon.ico
res/resource.h
@@ -1279,8 +1327,8 @@ if (WINDOWS)
set_source_files_properties(${viewer_RESOURCE_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
- set(viewer_RESOURCE_FILES
- res/viewerRes.rc
+ set(viewer_RESOURCE_FILES
+ res/viewerRes.rc
${viewer_RESOURCE_FILES}
)
@@ -1288,7 +1336,7 @@ if (WINDOWS)
if (NOT STANDALONE)
list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
- endif (NOT STANDALONE)
+ endif (NOT STANDALONE)
find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR})
find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR})
@@ -1465,7 +1513,7 @@ set(PACKAGE ON CACHE BOOL
"Add a package target that builds an installer package.")
if (WINDOWS)
- set_target_properties(${VIEWER_BINARY_NAME}
+ set_target_properties(${VIEWER_BINARY_NAME}
PROPERTIES
# *TODO -reenable this once we get server usage sorted out
#LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\""
@@ -1497,7 +1545,7 @@ if (WINDOWS)
${SHARED_LIB_STAGING_DIR}/Debug/libtcmalloc_minimal-debug.dll
)
endif(USE_GOOGLE_PERFTOOLS)
-
+
set(COPY_INPUT_DEPENDENCIES
# The following commented dependencies are determined at variably at build time. Can't do this here.
@@ -1595,24 +1643,24 @@ if (WINDOWS)
--grid=${GRID}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
- DEPENDS
+ DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
stage_third_party_libs
${COPY_INPUT_DEPENDENCIES}
COMMENT "Performing viewer_manifest copy"
)
-
- add_custom_target(copy_w_viewer_manifest ALL DEPENDS ${CMAKE_CFG_INTDIR}/copy_touched.bat)
+
+ add_custom_target(copy_w_viewer_manifest ALL DEPENDS ${CMAKE_CFG_INTDIR}/copy_touched.bat)
add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon copy_w_viewer_manifest)
-
+
if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
-
- add_dependencies(${VIEWER_BINARY_NAME}
- SLPlugin
- windows-updater
+
+ add_dependencies(${VIEWER_BINARY_NAME}
+ SLPlugin
+ windows-updater
windows-crash-logger
)
@@ -1622,7 +1670,7 @@ if (WINDOWS)
TARGET ${VIEWER_BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
ARGS
- --solution
+ --solution
${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
--workingdir
${VIEWER_BINARY_NAME}
@@ -1640,12 +1688,12 @@ if (WINDOWS)
${CMAKE_CURRENT_SOURCE_DIR}/..
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CFG_INTDIR}
- DEPENDS
- lleventhost
+ DEPENDS
+ lleventhost
${EVENT_HOST_SCRIPTS}
${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py
)
-
+
add_custom_command(
OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
COMMAND ${PYTHON_EXECUTABLE}
@@ -1661,15 +1709,15 @@ if (WINDOWS)
--login_channel=${VIEWER_LOGIN_CHANNEL}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
- DEPENDS
- ${VIEWER_BINARY_NAME}
+ DEPENDS
+ ${VIEWER_BINARY_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
${COPY_INPUT_DEPENDENCIES}
)
- add_custom_target(package ALL DEPENDS
+ add_custom_target(package ALL DEPENDS
${CMAKE_CFG_INTDIR}/touched.bat
- windows-setup-build-all
+ windows-setup-build-all
)
# temporarily disable packaging of event_host until hg subrepos get
# sorted out on the parabuild cluster...
@@ -1686,7 +1734,7 @@ endif (WINDOWS)
# that they depend upon. -brad
target_link_libraries(${VIEWER_BINARY_NAME}
${UPDATER_LIBRARIES}
- ${GOOGLE_PERFTOOLS_LIBRARIES}
+ ${GOOGLE_PERFTOOLS_LIBRARIES}
${LLAUDIO_LIBRARIES}
${LLCHARACTER_LIBRARIES}
${LLIMAGE_LIBRARIES}
@@ -1737,7 +1785,7 @@ else (USE_KDU)
${LLIMAGEJ2COJ_LIBRARIES}
)
endif (USE_KDU)
-
+
build_version(viewer)
set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
@@ -1749,14 +1797,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
@@ -1796,13 +1844,13 @@ if (LINUX)
--dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
--grid=${GRID}
--source=${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS
+ DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
${COPY_INPUT_DEPENDENCIES}
COMMENT "Performing viewer_manifest copy"
)
-
- add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)
+
+ add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)
if (PACKAGE)
add_custom_target(package ALL DEPENDS ${product}.tar.bz2)
@@ -1847,7 +1895,7 @@ if (DARWIN)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
if (PACKAGE)
- add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
+ add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
add_custom_command(
TARGET package POST_BUILD
@@ -1942,7 +1990,7 @@ if (LL_TESTS)
)
##################################################
- # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
+ # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
##################################################
# if(USE_PRECOMPILED_HEADERS)
# set_source_files_properties(
@@ -1956,33 +2004,33 @@ if (LL_TESTS)
#set(TEST_DEBUG on)
set(test_sources llcapabilitylistener.cpp)
##################################################
- # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
+ # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
##################################################
# if(USE_PRECOMPILED_HEADERS)
# set(test_sources "${test_sources}" llviewerprecompiledheaders.cpp)
# endif(USE_PRECOMPILED_HEADERS)
- set(test_libs
- ${LLMESSAGE_LIBRARIES}
- ${WINDOWS_LIBRARIES}
+ set(test_libs
+ ${LLMESSAGE_LIBRARIES}
+ ${WINDOWS_LIBRARIES}
${LLVFS_LIBRARIES}
${LLMATH_LIBRARIES}
- ${LLCOMMON_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
${GOOGLEMOCK_LIBRARIES}
)
- LL_ADD_INTEGRATION_TEST(llcapabilitylistener
- "${test_sources}"
+ LL_ADD_INTEGRATION_TEST(llcapabilitylistener
+ "${test_sources}"
"${test_libs}"
${PYTHON_EXECUTABLE}
"${CMAKE_SOURCE_DIR}/llmessage/tests/test_llsdmessage_peer.py"
)
- set(test_libs
- ${LLMESSAGE_LIBRARIES}
- ${WINDOWS_LIBRARIES}
+ set(test_libs
+ ${LLMESSAGE_LIBRARIES}
+ ${WINDOWS_LIBRARIES}
${LLVFS_LIBRARIES}
${LLMATH_LIBRARIES}
- ${LLCOMMON_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
${GOOGLEMOCK_LIBRARIES}
${OPENSSL_LIBRARIES}
${CRYPTO_LIBRARIES}
@@ -2015,12 +2063,12 @@ if (LL_TESTS)
)
LL_ADD_INTEGRATION_TEST(llsimplestat
- ""
+ ""
"${test_libs}"
)
LL_ADD_INTEGRATION_TEST(llviewerassetstats
- llviewerassetstats.cpp
+ llviewerassetstats.cpp
"${test_libs}"
)
@@ -2030,6 +2078,22 @@ if (LL_TESTS)
#ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer)
#ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer)
+include(LLAddBuildTest)
+SET(viewer_TEST_SOURCE_FILES
+ llagentaccess.cpp
+ llwlparammanager.cpp
+ # Not *actually* a unit test, it's an integration test.
+ # Because it won't work in the new unit test iface, i've commented out
+ # and notified Nat. Delete this when it's replaced!
+ # + poppy & brad 2009-06-05
+ # llcapabilitylistener.cpp
+ )
+set_source_files_properties(
+ ${viewer_TEST_SOURCE_FILES}
+ PROPERTIES
+ LL_TEST_ADDITIONAL_SOURCE_FILES llviewerprecompiledheaders.cpp
+ )
+
endif (LL_TESTS)
check_message_template(${VIEWER_BINARY_NAME})
diff --git a/indra/newview/app_settings/CA.pem b/indra/newview/app_settings/CA.pem
index 63bb036c92..a16b4225e5 100644
--- a/indra/newview/app_settings/CA.pem
+++ b/indra/newview/app_settings/CA.pem
@@ -1,362 +1,322 @@
-----BEGIN CERTIFICATE-----
-MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
-EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
-bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
-YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
-Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
-MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
-A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
-YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
-VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
-isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
-Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
-QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
-bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
-yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
-AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
-cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
-BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
-cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
-U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
-YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
-SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
-t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
-mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
-K+9A46sd33oqK8n8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
-BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
-cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
-4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
-Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
-0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
-FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
-bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
-SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
-6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
-m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
-eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
-kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
-6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
-CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
-aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
-gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
-aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
-tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
-nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
-77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
-Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
-ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
-zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
-rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
-YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
-oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
-FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
-0m6lG5kngOcLqagA
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
+WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
+AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
+OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
+T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
+JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
+Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
+PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
+aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
+TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
+LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
+BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
+dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
+AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
+NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
+b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
+MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
+Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
+MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
+U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
+cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
+pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
+OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
+Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
+Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
+HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
+Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
+Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
+26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
+AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
+F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
+ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
+ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
+aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
+YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
+c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
+d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
+CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
+wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
+Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
+0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
+pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
+CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
+P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
+1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
+KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
+JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
+8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
+fyWl8kgAwKQB2j8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
+MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
+vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
+CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
+WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
+oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
+h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
+f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
+B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
+vUxFnmG6v4SBkgPR0ml8xQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
+IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
+VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
+cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
+QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
+F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
+c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
+mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
+VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
+teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
+f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
+Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
+/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
+MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
+9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
+IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
+ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
+uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
+Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
+QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
+koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
+ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
+DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
+bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
+MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
+YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
+Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
+MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
+cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
+d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
+DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
+rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
+uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
+BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
+MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
+/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
+gQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
+b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
+MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
+ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
+IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
+AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
+unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
+BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
+7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
+0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
+roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
+A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
+aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
+26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
+BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
+EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
+BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
+AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
+p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
+1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
+XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
+eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
+tGWaIZDgqtCYvDi1czyL+Nw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
+MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
+QSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloXDTExMDkyMzExMTgxN1owdjELMAkG
+A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
+BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0MgU2ln
+bmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJY
+rISEtSsduHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ1
+2FJarD1X6mSQ4cfN/60vLfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjR
+AM0tdwXSnzuTEunfw0Oup559y3Iqxg1cExflB6cfAgMBAAGjggGXMIIBkzBBBgNV
+HR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0v
+Y3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
+AQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYB
+BQUHAgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVu
+dGVtICJQb2xpdHlrYSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5p
+ZSBjemFzZW0iLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVw
+b3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJfMS5wZGYwHwYDVR0jBBgwFoAU
+w4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavOYd9u9tej53vW
+XwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
++z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMb
+skF8I31JxIeBvueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR
++7KtwMg4sFDJZ8RNgOf7tbA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
-MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
-0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
-TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
-RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
-zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
-BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
-AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
-PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
-BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
-9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
-Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
-Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
-n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
-H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
+MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn
+MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy
+NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT
+D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS
+J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB
+MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy
+v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S
+dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh
+pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW
+m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU
+EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP
+lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC
+wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/
+M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr
+8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6
+7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe
+4r50ErAEQyo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTEwM1oXDTI1MTIyOTEx
+MTEwM1owggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA55+R7+voFuF0vIkTodduR8ZfPxKU5u/h
+M+GrgqufAwHmdG+KF5fPVy8Mdi7mbqfK2veLFBVADbNq2e2+s2q8Ai0chS3vl//P
+l9rrR10eU79dVN4ndGMZfpXUMZblz0/Kq3Uvk5AsWUwfv1YokIhi4RMeBtOCVv3j
+LSV1rDsiap8CAwEAAaOCBFIwggROMB0GA1UdDgQWBBRtW6MBjmE3nQR4tq+blh0C
+QeXbeTCCAUQGA1UdIwSCATswggE3gBRtW6MBjmE3nQR4tq+blh0CQeXbeaGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UxIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB
+AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W
+LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMEAG
+CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
+aW9uQ0xBU0UxLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu
+ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UxLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo
+dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDB1BgNV
+HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UxLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy
+L2lwczIwMDJDTEFTRTEuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT
+aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQBacEdMbCU0z2bO
+X+iyJafrUbjPE+5KzJz2jB1YXC2d7kMy2Hhbp8gVyfUFQpd+F2IgBBj9z3IRNkDN
+foHhdse5j2cUUH+fno9jj8EPE2GPhXVmCjIP6KuPp8yzz89gC+ry+bkfSFzjHUQt
+K15I/jRAHfyJywwUrwtmklZIX0E5Og==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIEO8rJUjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJE
+SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExFjAUBgNVBAMTDUtNRC1D
+QSBTZXJ2ZXIxIDAeBgoJkiaJk/IsZAEDFBBpbmZvY2FAa21kLWNhLmRrMB4XDTk4
+MTAxNjE5MTkyMVoXDTE4MTAxMjE5MTkyMVowZjELMAkGA1UEBhMCREsxDDAKBgNV
+BAoTA0tNRDEPMA0GA1UECxMGS01ELUNBMRYwFAYDVQQDEw1LTUQtQ0EgU2VydmVy
+MSAwHgYKCZImiZPyLGQBAxQQaW5mb2NhQGttZC1jYS5kazCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAJsLpbSgFxQ7IhFgf5f+RfBxnbCkx5C7yTjfCZvp
+/BP2LBD3OKjgLRwvASoCU3I5NMhccho6uhZVf1HC+Ac5HmXUUd+v92a7gDnohPPy
+Rgv8c6f/+R2fFen37SBemYFDtZveamVXZ2To7xAxNiMKgPTPs/Rl7F6LDsYgv1bD
+36FrjahNoSTmTbYRoK21eIOVwrZeNSzo9w3W8fj0n+V2IB1jsOh+AvjXkjbvAVky
+0/57GMlyBNKP7JIGP7LXqwWfrBXuAph1DUMz467KlHZOMkPwCjTZOab7CcLQXCCY
+12s5c5QAkwpf35hQRuOaNo6d/XFM6J9mofiWlGTT3Px1EX0CAwEAAaMQMA4wDAYD
+VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAPlA6VZ2C2cJbsI0SBIe9v+M9
+GxI45QI7P0D7QGyrqM7oNqGq7hJdN6NFb0LyPcF3/pVzmtYVJzaGKF6spaxOEveB
+9ki1xRoXUKpaCxSweBpTzEktWa43OytRy0sbryEmHJCQkz8MPufWssf2yXHzgFFo
+XMQpcMyT7JwxPlfYVvab9Kp+nW7fIyDOG0wdmBerZ+GEQJxJEkri1HskjigxhGze
+ziocJatBuOWgqw5KRylgGIQjUGRTCbODVta+Kmqb9d+cB7FStbYtt2HebOXzBIY3
+XUM5KtGC++We7DqgU5Firek7brw8i2XsHPLKJTceb6Xo6DsSxLfBAWV6+8DCkQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
-NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
-7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
-m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
-xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
-YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
-JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
-I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
-kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
-EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
-Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
-gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
-rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
-1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
-h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
-yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
-7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
-RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
-ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
-M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
-my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
-AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
-9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
-hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
-fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
+MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
+MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
+dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
+MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
+dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
+VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
+xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
+xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
+XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
+heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
+YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
+urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
+JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
+b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
+9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
+kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
+fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
+B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
+aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
+RGQDJereW26fyfJOrN3H
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
+ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
+MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
+LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
+RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
+WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
+Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
+eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
+zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
+/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
@@ -390,184 +350,85 @@ gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb
CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
-MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
-MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
-ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
-K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
-d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
-DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
-yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
-VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
-MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
-KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
-ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
-b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
-aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
-Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
-cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
-BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
-L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
-eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
-b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
-bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
-ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
-FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
-qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
-kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
-5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
-evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
-ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
-XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
-xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
-MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
-czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
-b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
-HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
-1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
-tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
-GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
-cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
-MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
-AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
-b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
-OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
-dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
-IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
-LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
-ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
-ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
-cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
-GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
-z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
-6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
-mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
-LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
-J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
-SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
+rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
+OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
+xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
+7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
+aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
+SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
+ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
+AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
+R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
+JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
+Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
+ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
+l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
+HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
+5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
+WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
+gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
+DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
+BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
+h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
+LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
+Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
+Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
+1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
+ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
+Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
+XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
+irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
+TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
+g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
+95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
+S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
@@ -589,141 +450,75 @@ xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
-MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
-Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
-iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
-5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
-BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
-MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
-ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
-dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
-MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
-fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
-AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
-hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
-GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
-zmVml64mXg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
-RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
-Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
-RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
-IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
-Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
-CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
-8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
-bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
-dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
-QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
-C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
-ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
-KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
-VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
-DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
-fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
-d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
-JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
-yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
+dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
+A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
+cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
+qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
+JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
+s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
+HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
+70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
+V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
+qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
+5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
+C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
+OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
+FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
+KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
+8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
+MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
+0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
+u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
+u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
+YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
+GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
+RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
+KeC2uAloGRwYQw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
-ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
-Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
-MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
-bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
-RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
-CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
-6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
-5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
-AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
-ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
-cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
-by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
-IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
-Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
-KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
-HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
-BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
-FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
-pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
-wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
-EkP/TOYGJqibGapEPHayXOw=
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
+MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
+eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
+/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
+wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
+AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
+PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
+AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
+MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
+HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
+Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
+f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
+rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
+6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
+7CAFYd4=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
+dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
+MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
+MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
+A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
+cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
+VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
+ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
+uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
+hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
+pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
@@ -745,75 +540,268 @@ A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
+MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
+IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
+bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
+RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
+zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
+bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
+MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
+VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
+OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
+tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
+q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
+EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
+VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEAq6HgBiMui0NiZdH3zNiWYwDQYJKoZIhvcNAQEFBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBAIDToA+IyeVoW4R7gB+nt+MjWBEc9RTwWBKMi99x2ZAk
+EXyge8N6GRm9cr0gvwA63/rVeszC42JFi8tJg5jBcGnQnl6CjDVHjk8btB9jAa3k
+ltax7nosZm4XNq8afjgGhixrTcsnkm54vwDVAcCxB8MJqmSFKPKdc57PYDoKHUpI
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
+MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
+EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
+DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
+DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
+c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
+TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
+OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
+2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
+RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
+AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
+ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
+YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
+b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
+ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
+IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
+b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
+ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
+YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
+a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
+SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
+aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
+YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
+Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
+ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
+pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
+Fp1hBWeAyNDYpQcCNJgEjTME1A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
+PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
+cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
+MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
+IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
+ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
+VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
+kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
+EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
+H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
+HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
+DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
+QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
+Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
+AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
+yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
+FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
+ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
+kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
+BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
+BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
+MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
+Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
+A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
+c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
+6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
+Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
+8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
+Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
+9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
+pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
+CayJSdM=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
+MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
+dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
+UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
+ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
+c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
+OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
+mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
+BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
+qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
+gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
+bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
+dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
+6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
+h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
+/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
+pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
+DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
+aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
+MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
+QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
+b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
+ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
+/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
+58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
+halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
+1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
+ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
+mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
+kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
+dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
+ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
+B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN
+MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g
+Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz
+MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV
+BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC
+cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8
+52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL
+yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2
+agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi
+MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA
+UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR
+/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE
+CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ
+S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC
+SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG
+A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj
+grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG
+SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg
+HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R
+8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M
+Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58
+IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih
+bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
+VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
+bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
+dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
+MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
+dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
+ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
+EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
+lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
+znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
+2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
+k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
+2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
+VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
+AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
+KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
+FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
+mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
+DNuxUCAKGkq6ahq97BvIxYSazQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
+NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
+AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
+E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
+/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
+DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
+GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
+tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
+AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
+WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
+9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
+gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
+2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
+4uJEvlz36hz1
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
+MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
+v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
+eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
+tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
+C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
+zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
+mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
+V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
+bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
+3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
+J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
+291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
+ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
+AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
+MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
+RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
+gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
+KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
+QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
+XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
+LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
+RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
+jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
+6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
+mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
+Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
+WD9f
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG
@@ -837,19 +825,305 @@ ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o
Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+MIIETTCCAzWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJDSDEO
+MAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZpY2VzMSIwIAYDVQQLExlDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0aWVzMRcwFQYDVQQDEw5BZG1pbkNBLUNELVQwMTAe
+Fw0wNjAxMjUxMzM2MTlaFw0xNjAxMjUxMjM2MTlaMG0xCzAJBgNVBAYTAkNIMQ4w
+DAYDVQQKEwVhZG1pbjERMA8GA1UECxMIU2VydmljZXMxIjAgBgNVBAsTGUNlcnRp
+ZmljYXRpb24gQXV0aG9yaXRpZXMxFzAVBgNVBAMTDkFkbWluQ0EtQ0QtVDAxMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jQlMZmpLDhV+GNR9TAoSNle
+JgQB4xAXJELQf5/ySMfoFA4MmjKqYXQkB6MGPuQKwR9XRRSPf61vqb8YPsdjRmgp
+byHBcUd5t0N8RX6wRZUnPMW+bCCo2VqAU4XFbnlc2gHKaam0wdTtbBTXEkv0ieIH
+fxCfFxXqSsSr60IkF/2/xbrAgV/QD5yHk6Ie8feAVWwi5UtaFqtu4LiFEh2QMyxs
+Oyz1OcvKzkM2g873tyiE7jzMgZP+Ww3tibk2F9+e6ZeiB37TLOmVtvgpmrws4fiI
+rFNXEYSWBVrUTbn81U47yWzOgf5fEHP07bRV5QOCzCm99qNimsbL6CG7nT78CQID
+AQABo4H3MIH0MBIGA1UdEwEB/wQIMAYBAf8CAQAwga4GA1UdIASBpjCBozCBoAYI
+YIV0AREDFQEwgZMwSAYIKwYBBQUHAgIwPBo6VGhpcyBpcyB0aGUgQWRtaW5DQS1D
+RC1UMDEgQ2VydGlmaWNhdGUgUHJhY3RpY2UgU3RhdGVtZW50LjBHBggrBgEFBQcC
+ARY7aHR0cDovL3d3dy5wa2kuYWRtaW4uY2gvcG9saWN5L0NQU18yXzE2Xzc1Nl8x
+XzE3XzNfMjFfMS5wZGYwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQqxGkKocZV
+xgNucM6GgbOkD6oZ2zANBgkqhkiG9w0BAQUFAAOCAQEAn356bbusjI5glGXRQ1DR
+v21qQf0S4s3GHyZm7cqdOkFleM70ArBT+kOP5Nm7rlSAFyVgEkmBdOg7s9tlXClU
+yeZFnp6UEYRUcijPN8D1VaNRK6PIUObpDBQT0C+kAfxG9z4v29T0SxT4sgAdC/xQ
+Fyv58Fp9bPn7owuKwKcyCH1XSyi/Bp4XFELlLOaigBZO/w+dPBz4FcJSdZjU+BaJ
+0E3nKAjHlShO5ouBSZnaJz3p+nkw2Wyo36s6GxCK0XbkSP45iniIG4FmwwZkonYF
+ypQntHbx2oL7tUQQY0PDo8bGBMcPy/G2j+dciqZRlsnfgMy10SCzQ9MUx92xUG2V
+eg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
+EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
+MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
+cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
+dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
+pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
+b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
+aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
+IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
+lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
+AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
+VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
+ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
+BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
+AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
+U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
+bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
+uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
+XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
+MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
+ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
+cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
+WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
+Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
+IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
+UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
+TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
+BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
+kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
+AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
+HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
+sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
+I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
+J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
+VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
+BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
+ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
+MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
+SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
+a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
+4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
+tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
+tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
+dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
+c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
+TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
++kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
+Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
+OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
+fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
+l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
+FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
+8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
+6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
+TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
+wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
+Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
+xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
+DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
+Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
+hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
+7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
+QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
+MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
+j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
+U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
+u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
+bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
+fF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGJDCCBY2gAwIBAgIEQoaroDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjA3
+MTQxNzEwMjhaFw0xNDA3MTQxNzQwMjhaMFwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
+EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xGzAZBgNV
+BAMTEkRpZ2lDZXJ0IEdsb2JhbCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMQ8vMy66mLmnkIjr7SyEa5ijdmh04/MFHIZ7Zn2/d5du1nAsMKvaplS
+lVcLNf/hhvqvosPBBWUnIHYvClQlfOor3ZVBV5sPO89H6AEGjMVESPwHLvNygzBR
+lJ5pOoOph5AU2V7EoniPwT7UGWEOGufcGpUgQb5vF9q4HEHumLD61x01PxanBCgT
+XT0FdZouhp4ssBeHIFhX7+HqVWC4LHAhrCljDBD8YLz51Rw3ZNW0+x6rJjlGiKTL
+zTBnwCZ55cpo+SLX5dKxu0hMmwuYW0KS5dLtDkcw+t0nVmNqpQHHjq/wTjsbVRVE
+1T5NVx7hkeq4oI/OOmNflom6CD7+RLsCAwEAAaOCAwUwggMBMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwggEyBgNVHSAEggEpMIIBJTCCASEGCSqGSIb2fQdLAjCCARIwJgYI
+KwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvY3BzMIHnBggrBgEFBQcC
+AjCB2hqB10ZvciB1c2Ugc29sZWx5IHdpdGggU1NMIGFuZCBTL01JTUUgY2VydGlm
+aWNhdGVzIGlzc3VlZCBieSBEaWdpY2VydCwgSW5jLiB0byBhdXRob3JpemVkIHN1
+YnNjcmliZXJzLg0KRE9FUyBOT1QgcmVwcmVzZW50IGFueSBlbmRvcnNlbWVudCBi
+eSBFbnRydXN0IEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMgYXMgdG8gdGhlIGlkZW50
+aXR5IG9mIGFueSBjZXJ0aWZpY2F0ZSBob2xkZXIuMDEGA1UdJQQqMCgGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMJMIIBGAYDVR0fBIIBDzCC
+AQswKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvc2VydmVyMS5jcmwwgd6g
+gduggdikgdUwgdIxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE7
+MDkGA1UECxMyd3d3LmVudHJ1c3QubmV0L0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
+bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0
+ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwCwYDVR0PBAQDAgEGMB8GA1Ud
+IwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMB0GA1UdDgQWBBSnxxOgegE8ne+C
+SIJI1XNRthJWKjAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIAgTANBgkqhkiG9w0B
+AQUFAAOBgQBK8bPOaGnjWKNh7bYWyJOxGDA+4HLfTz3iTeG4/D/ByeNFqV2pwdqj
+5TbXjtYPrTavbLxE5ppGlKYRoNBS59pVsPYchftjUnu2mY8f4stHZKLrCGXmUdsc
+S21/U58eDTGT1DBdHm4BBydgXbvT9ONsHSAPdSozEKe3idepFxQyAw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
+S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
+SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
+WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
+bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
+UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
+bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
+LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
+J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
+R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
+Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
+JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
+zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
+Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
+ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
+Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
+gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
+uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
+y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
+J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
+r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEwOTIzMTMxODE3WjB1MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQg
+LSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g
+5DY1Hw7hgCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZs
+jqBeynX8T90vFILqsY2K5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfH
+HB67Af+g7u0dEHdDW7lwy81MwFYxBTRy9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAEgfwwgfkwgfYGDSsGAQQB
+vj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3eXN0YXdp
+b255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2pp
+IGRsYSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENB
+IHcgaGllcmFyY2hpaSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3
+LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQw
+HwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQbsa8wHQYDVR0OBBYEFMODHtVZ
+d1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQBFIGh8Jpxt87A
+gSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
+f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIis
+TsytFzVP32/W+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB
+3vSaoYg+wdkcvb6souMJzuc2uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U
+1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uftXncwKJrMiE3lvgOOBITRzcahirL
+er4c
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
+FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
+Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
+A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
+b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
+jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
+PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
+ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
+nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
+q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
+MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
+mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
+7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
+oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
+EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
+fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
+AmvZWg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
+lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
+SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
+A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
+MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
+d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
+cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
+0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
+M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
+MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
+oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
+DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
+oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
+bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
+BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
+CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
+CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
+3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
+KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
+ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
+MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
+VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
+FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
+ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
+gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
+fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
+ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
+ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
+c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
+dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
+aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
+hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
+QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
+h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
+rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
+9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
@@ -897,69 +1171,46 @@ HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN
b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
-NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
-VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
-IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
-IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
-zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
-YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
-KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
-adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
-ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
-BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
-ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
-LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
-VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
-BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
-FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
-AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
-Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
-V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
-hjM+5i9Ibq9UkE6tsSU=
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
+MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
+cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
+CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
+dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
+cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
+2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
+lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
+ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
+299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
+vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
+dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
+AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
+zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
+LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
+7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
+++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
-MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTkzMVoXDTI1MTIyOTEx
+MTkzMVowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
-H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
-8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
-SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
-mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAve2QhYLxoN2P3DVo4Xw+6Gyb2vDjfzvB
+JRvH+WFIXO3KItC1dJk2W7iFnsZJnb65Q6NDKxhwfQ4XnLuBSPqMVJ6EHB++I1p2
+pg0j7YOtec++o3ysS6zf1r01HSh8i85+AcGcgLO4Z79w9jtEGlSdrFhCLUjJJSEs
+XdzSbkEFrkMCAwEAAaOCBFIwggROMB0GA1UdDgQWBBT7o4z3Z4tAqk02rzCA6po7
+4C9o6DCCAUQGA1UdIwSCATswggE3gBT7o4z3Z4tAqk02rzCA6po74C9o6KGCARqk
ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
@@ -970,86 +1221,653 @@ VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
-qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
-D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
-r33I6unUVtkOE7LFRVA=
+D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UzIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB
+AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W
+LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMEAG
+CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
+aW9uQ0xBU0UzLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu
+ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UzLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo
+dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDB1BgNV
+HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UzLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy
+L2lwczIwMDJDTEFTRTMuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT
+aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQAiu2FuR8MoQlYw
+3QtFc/BI7DgkUUeSIM49JoMU0H3a4Y+JbQxQ4q/n6yAbEuMETUyqob/HmS/NkLJq
+ur3RvGBseDXgxNyePGjFc97ITNWf5X1+4CXtBf+TTKNEMg1UpPbCz+9EkjzTcYj1
+5tjLbAp/mmLLZmCOV7cCGuXGSTBNzA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIG0zCCBbugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBzDELMAkGA1UEBhMCQVQx
+EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTE6MDgGA1UEChMxQVJH
+RSBEQVRFTiAtIEF1c3RyaWFuIFNvY2lldHkgZm9yIERhdGEgUHJvdGVjdGlvbjEl
+MCMGA1UECxMcQS1DRVJUIENlcnRpZmljYXRpb24gU2VydmljZTEYMBYGA1UEAxMP
+QS1DRVJUIEFEVkFOQ0VEMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGEtY2VydC5hdDAe
+Fw0wNDEwMjMxNDE0MTRaFw0xMTEwMjMxNDE0MTRaMIHMMQswCQYDVQQGEwJBVDEQ
+MA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQKEzFBUkdF
+IERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0aW9uMSUw
+IwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYDVQQDEw9B
+LUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0LmF0MIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3euXIy+mnf6BYKbK+QH5k679
+tUFqeT8jlZxMew8eNiHuw9KoxWBzL6KksK+5uK7Gatw+sbAYntEGE80P+Jg1hADM
+e+Fr5V0bc6QS3gkVtfUCW/RIvfMM39oxvmqJmOgPnJU7H6+nmLtsq61tv9kVJi/2
+4Y5wXW3odet72sF57EoG6s78w0BUVLNcMngS9bZZzmdG3/d6JbkGgoNF/8DcgCBJ
+W/t0JrcIzyppXIOVtUzzOrrU86zuUgT3Rtkl5kjG7DEHpFb9H0fTOY1v8+gRoaO6
+2gA0PCiysgVZjwgVeYe3KAg11nznyleDv198uK3Dc1oXIGYjJx2FpKWUvAuAEwID
+AQABo4ICvDCCArgwHQYDVR0OBBYEFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYMIH5BgNV
+HSMEgfEwge6AFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYoYHSpIHPMIHMMQswCQYDVQQG
+EwJBVDEQMA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQK
+EzFBUkdFIERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0
+aW9uMSUwIwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYD
+VQQDEw9BLUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0
+LmF0ggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMEcGA1UdJQRAMD4G
+CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD
+CAYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAP8wUQYDVR0gBEowSDBGBggq
+KAAYAQEBAzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtY2VydC5hdC9jZXJ0
+aWZpY2F0ZS1wb2xpY3kuaHRtbDA7BglghkgBhvhCAQgELhYsaHR0cDovL3d3dy5h
+LWNlcnQuYXQvY2VydGlmaWNhdGUtcG9saWN5Lmh0bWwwGQYDVR0RBBIwEIEOaW5m
+b0BhLWNlcnQuYXQwLwYDVR0SBCgwJoEOaW5mb0BhLWNlcnQuYXSGFGh0dHA6Ly93
+d3cuYS1jZXJ0LmF0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHBzOi8vc2VjdXJlLmEt
+Y2VydC5hdC9jZ2ktYmluL2EtY2VydC1hZHZhbmNlZC5jZ2kwDQYJKoZIhvcNAQEF
+BQADggEBACX1IvgfdG2rvfv35O48vSEvcVaEdlN8USFBHWz3JRAozgzvaBtwHkjK
+Zwt5l/BWOtjbvHfRjDt7ijlBEcxOOrNC1ffyMHwHrXpvff6YpQ5wnxmIYEQcURiG
+HMqruEX0WkuDNgSKwefsgXs27eeBauHgNGVcTYH1rmHu/ZyLpLxOyJQ2PCzA1DzW
+3rWkIX92ogJ7lTRdWrbxwUL1XGinxnnaQ74+/y0pI9JNEv7ic2tpkweRMpkedaLW
+msC1+orfKTebsg69aMaCx7o6jNONRmR/7TVaPf8/k6g52cHZ9YWjQvup22b5rWxG
+J5r5LZ4vCPmF4+T4lutjUYAa/lGuQTg=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
+jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
+ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
+ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
+Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
+AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
+HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
+uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
+TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
+xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
+CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
+O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
+6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
+MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
+TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
+dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
+KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
+N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
+dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
+MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
+b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
+zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
+3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
+WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
+Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
+NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
+ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
+QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
+YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
+aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
+ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
+ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
+amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
+IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
+Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
+ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
+YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
+dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
+b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
+CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
+xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
+0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
+QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
+f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
+8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
+VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
+Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
+h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
+uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
+DzFc6PLZ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
+LSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3
+LanJtdueNe6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP
+6KZTU0DixOrV+K7iWaqAiQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6H
+dbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPEOpO94mAKcBUhk6T/ki0evXX/ZvvktwmF
+3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Dbw34hA1A+ckTwhxzecrB8
+TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC3P8QqoK4
+ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHk
+MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
+Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
+aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
+cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
+OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
+cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
+HQ4EFgQUXvthcPHlH5BgGhlMErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIc
+e95Mvn710KCAISA0CuHD4aznTU6pLoCDShW47OR+GTpJUm1coTcUqlBHV9mra4VF
+rBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJGdsJF/XU/7smummgj
+MNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oFJTlp
+uxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1D
+OcePEhKz1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BX
+WCW+KxwiBrtQTXv4dTE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
+AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
+TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
+9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
+MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
+BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
+MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
+LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
+s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
+xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
+u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
+F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
+Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
+PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
+HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
+NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
+AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
+L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
+YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
+NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
+0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
-SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
-MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
-m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
-ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
-eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
-3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
-ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
-AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
-BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
-hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
-AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
-aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
-H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq
+SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD
+VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
+HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMzExMTE0NTRa
+Fw0yNTEyMjkxMTE0NTRaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
+bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg
+cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu
+ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD
+QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp
+bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP
+aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOZZJ
+iHAzKHzoV9xIki3eLXp56UjxFehnY+c+Dh1nUiVO0t//vmGMP6B2LTFfx9FBKRBi
+kYcW7raIcSDi62Or0sAG5UUgG4ruGLE7XtCnnx4xjgbFZ4tTjdgi5Wh9GVhfP7Oo
+9ahi8Eqao+alFbhvB6LD3xZZqM2j9cmD8GzYAQIDAQABo4IESzCCBEcwHQYDVR0O
+BBYEFAeUqHBsCqTumbhV3S5MRXf2Nq+5MIIBTgYDVR0jBIIBRTCCAUGAFAeUqHBs
+CqTumbhV3S5MRXf2Nq+5oYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
+CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ
+bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt
+YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD
+aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT
+IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
+BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
+CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB
+BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
+EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBD
+BglghkgBhvhCAQ0ENhY0Q2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
+aHR0cHM6Ly93d3cuaXBzLmVzLzAqBglghkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvMDgGCWCGSAGG+EIBBAQrFilodHRwczovL3d3dy5pcHMu
+ZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA9BglghkgBhvhCAQMEMBYuaHR0cHM6
+Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNBQy5odG1sPzA6BglghkgB
+hvhCAQcELRYraHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENBQy5o
+dG1sPzA4BglghkgBhvhCAQgEKxYpaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIv
+cG9saWN5Q0FDLmh0bWwwbwYDVR0fBGgwZjAvoC2gK4YpaHR0cHM6Ly93d3cuaXBz
+LmVzL2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwM6AxoC+GLWh0dHBzOi8vd3d3YmFj
+ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAvBggrBgEFBQcBAQQjMCEw
+HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
+gYEATiRvY2nro9B6QNgTOgojWSrXMKpXHa6hLRxL2GZPEFg059x2ERs3pw7RlJJZ
+ctupZam06zvBnGfQL4ZhevXl6ST6RAAmOikuj8kbiFSgujjCJY1wv5/7zzgBWzdL
+NzqKC18p1T2KZa8B2qKfQCqzV/J3fgI/725+9ekqKNLiE5Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
+MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
+IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
+IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
+RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
+U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
+IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
+ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
+QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
+rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
+NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
+QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
+txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
+BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
+AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
+tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
+IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
+6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
+MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
+czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
+b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
+YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
+HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
+1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
+tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
+GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
+cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
+MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
+AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
+b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
+OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
+dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
+IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
+LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
+ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
+ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
+cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
+GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
+z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
+6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
+mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
+LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
+J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
+SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEUzCCAzugAwIBAgIDAOJDMA0GCSqGSIb3DQEBBQUAMIHPMQswCQYDVQQGEwJB
+VDGBizCBiAYDVQQKHoGAAEEALQBUAHIAdQBzAHQAIABHAGUAcwAuACAAZgD8AHIA
+IABTAGkAYwBoAGUAcgBoAGUAaQB0AHMAcwB5AHMAdABlAG0AZQAgAGkAbQAgAGUA
+bABlAGsAdAByAC4AIABEAGEAdABlAG4AdgBlAHIAawBlAGgAcgAgAEcAbQBiAEgx
+GDAWBgNVBAsTD0EtVHJ1c3QtUXVhbC0wMTEYMBYGA1UEAxMPQS1UcnVzdC1RdWFs
+LTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEzMDIzMDAwMFowgc8xCzAJBgNVBAYT
+AkFUMYGLMIGIBgNVBAoegYAAQQAtAFQAcgB1AHMAdAAgAEcAZQBzAC4AIABmAPwA
+cgAgAFMAaQBjAGgAZQByAGgAZQBpAHQAcwBzAHkAcwB0AGUAbQBlACAAaQBtACAA
+ZQBsAGUAawB0AHIALgAgAEQAYQB0AGUAbgB2AGUAcgBrAGUAaAByACAARwBtAGIA
+SDEYMBYGA1UECxMPQS1UcnVzdC1RdWFsLTAxMRgwFgYDVQQDEw9BLVRydXN0LVF1
+YWwtMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmhgdxIbxTGEOH
+fXGiewI3NFldAWKFWfLofO+5I1UbvA5avt7IgsGXz/tI/f5HGUbascI0i7xG0tqV
+lA5ctQgLRqxgxHtgTkMcqsAEYdsz3LZsCdXO1QrvEBGLTSABdxiL/gSWJ6z77CSw
+x7Xg02HwxPV82cjGkSF3ENGJntuIAAnRDWn/ORHjFatNRymoMbHaOEZXSGhf7Y5F
+rrHEqGyi9E6sv784De/T1aTvskn8cWeUmDzv//omiG/a/V9KQex/61XN8OthUQVn
+X+u/liL2NKx74I2C/GgHX5B0WkPNqsSOgmlvJ/cKuT0PveUgVFDAA0oYBgcE1KDM
+lBbN0kmPAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECEs8jB2F
+6W+tMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAIUusmJzMJRiQ
+8TAHrJAOelfuWoTGcqdIv7Tys/fNl2yF2fjvHT8J01aKialFVpbVeQ2XKb1O2bHO
+QYAKgsdZ2jZ/sdL2UVFRTHmidLu6PdgWCBRhJYQELQophO9QVvfhAA0TwbESYqTz
++nlI5Gr7CZe8f6HEmhJmCtUQsdQCufGglRh4T+tIGiNGcnyVEHZ93mSVepFr1VA2
+9CTRPteuGjA81jeAz9peYiFE1CXvxK9cJiv0BcALFLWmADCoRLzIRZhA+sAwYUmw
+M1rqVCPA3kBQvIC95tyQvNy2dG0Vs+O6PwLaNX/suSlElQ06X2l1VwMaYb4vZKFq
+N0bOhBXEVg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
+cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
+BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
+VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
+0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
+ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
+A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
+aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
+flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
+biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
+MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
+d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
+76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
+6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
+emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
+MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
+MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
+MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
+FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
+aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
+gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
+qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
+lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
+8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
+45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
+UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
+O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
+bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
+GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
+77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
+hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
+92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
+Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
+ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
+Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
+DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
+dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
+YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
+OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
+zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
+VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
+hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
+ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
+awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
+OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
+coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
+okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
+t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
+1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
+SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDyzCCArOgAwIBAgIDAOJIMA0GCSqGSIb3DQEBBQUAMIGLMQswCQYDVQQGEwJB
+VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
+bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1
+YWwtMDIxGDAWBgNVBAMMD0EtVHJ1c3QtUXVhbC0wMjAeFw0wNDEyMDIyMzAwMDBa
+Fw0xNDEyMDIyMzAwMDBaMIGLMQswCQYDVQQGEwJBVDFIMEYGA1UECgw/QS1UcnVz
+dCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
+a2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1YWwtMDIxGDAWBgNVBAMMD0Et
+VHJ1c3QtUXVhbC0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJaR
+q9eOsFm4Ab20Hq2Z/aH86gyWa48uSUjY6eQkguHYuszr3gdcSMYZggFHQgnhfLmf
+ro/27l5rqKhWiDhWs+b+yZ1PNDhRPJy+86ycHMg9XJqErveULBSyZDdgjhSwOyrN
+ibUir/fkf+4sKzP5jjytTKJXD/uCxY4fAd9TjMEVpN3umpIS0ijpYhclYDHvzzGU
+833z5Dwhq5D8bc9jp8YSAHFJ1xzIoO1jmn3jjyjdYPnY5harJtHQL73nDQnfbtTs
+5ThT9GQLulrMgLU4WeyAWWWEMWpfVZFMJOUkmoOEer6A8e5fIAeqdxdsC+JVqpZ4
+CAKel/Arrlj1gFA//jsCAwEAAaM2MDQwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4E
+CgQIQj0rJKbBRc4wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBG
+yxFjUA2bPkXUSC2SfJ29tmrbiLKal+g6a9M8Xwd+Ejo+oYkNP6F4GfeDtAXpm7xb
+9Ly8lhdbHcpRhzCUQHJ1tBCiGdLgmhSx7TXjhhanKOdDgkdsC1T+++piuuYL72TD
+gUy2Sb1GHlJ1Nc6rvB4fpxSDAOHqGpUq9LWsc3tFkXqRqmQVtqtR77npKIFBioc6
+2jTBwDMPX3hDJDR1DSPc6BnZliaNw2IHdiMQ0mBoYeRnFdq+TyDKsjmJOOQPLzzL
+/saaw6F891+gBjLFEFquDyR73lAPJS279R3csi8WWk4ZYUC/1V8H3Ktip/J6ac8e
+qhLCbmJ81Lo92JGHz/ot
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXzCCA0egAwIBAgIBATANBgkqhkiG9w0BAQUFADCB0DELMAkGA1UEBhMCRVMx
+SDBGBgNVBAoTP0laRU5QRSBTLkEuIC0gQ0lGIEEtMDEzMzcyNjAtUk1lcmMuVml0
+b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFCMEAGA1UEBxM5QXZkYSBkZWwgTWVk
+aXRlcnJhbmVvIEV0b3JiaWRlYSAzIC0gMDEwMTAgVml0b3JpYS1HYXN0ZWl6MRMw
+EQYDVQQDEwpJemVucGUuY29tMR4wHAYJKoZIhvcNAQkBFg9JbmZvQGl6ZW5wZS5j
+b20wHhcNMDMwMTMwMjMwMDAwWhcNMTgwMTMwMjMwMDAwWjCB0DELMAkGA1UEBhMC
+RVMxSDBGBgNVBAoTP0laRU5QRSBTLkEuIC0gQ0lGIEEtMDEzMzcyNjAtUk1lcmMu
+Vml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFCMEAGA1UEBxM5QXZkYSBkZWwg
+TWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAzIC0gMDEwMTAgVml0b3JpYS1HYXN0ZWl6
+MRMwEQYDVQQDEwpJemVucGUuY29tMR4wHAYJKoZIhvcNAQkBFg9JbmZvQGl6ZW5w
+ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1btoCXXhp3xIW
+D+Bxl8nUCxkyiazWfpt0e68t+Qt9+lZjKZSdEw2Omj4qvr+ovRmDXO3iWpWVOWDl
+3JHJjAzFCe8ZEBNDH+QNYwZHmPBaMYFOYFdbAFVHWvys152C308hcFJ6xWWGmjvl
+2eMiEl9P2nR2LWue368DCu+ak7j3gjAXaCOdP1a7Bfr+RW3X2SC5R4Xyp8iHlL5J
+PHJD/WBkLrezwzQPdACw8m9EG7q9kUwlNpL32mROujS3ZkT6mQTzJieLiE3X04s0
+uIUqVkk5MhjcHFf7al0N5CzjtTcnXYJKN2Z9EDVskk4olAdGi46eSoZXbjUOP5gk
+Ej6wVZAXAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MB0GA1UdDgQWBBTqVk/sPIOhFIh4gbIrBSLAB0FbQjANBgkqhkiG9w0BAQUFAAOC
+AQEAYp7mEzzhw6o5Hf5+T5kcI+t4BJyiIWy7vHlLs/G8dLYXO81aN/Mzg928eMTR
+TxxYZL8dd9uwsJ50TVfX6L0R4Dyw6wikh3fHRrat9ufXi63j5K91Ysr7aXqnF38d
+iAgHYkrwC3kuxHBb9C0KBz6h8Q45/KCyN7d37wWAq38yyhPDlaOvyoE6bdUuK5hT
+m5EYA5JmPyrhQ1moDOyueWBAjxzMEMj+OAY1H90cLv6wszsqerxRrdTOHBdv7MjB
+EIpvEEQkXUxVXAzFuuT6m2t91Lfnwfl/IvljHaVC7DlyyhRYHD6D4Rx+4QKp4tWL
+vpw6LkI+gKNJ/YdMCsRZQzEEFA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
+MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
+YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
+MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
+ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
+MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
+ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
+PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
+wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
+EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
+avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
+sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
+/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
+IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
+OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
+TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
+dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
+ReYNnyicsbkqWletNw+vHX/bvZ8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
+EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
+OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
+dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
+SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
+gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
+iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
+Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
+BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
+SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
+b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
+bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
+Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
+aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
+IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
+c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
+biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
+ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
+UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
+YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
+dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
+bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
+sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
+n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
+NitjrFgBazMpUIaD8QFI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICZzCCAdCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY
+MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
+A1BLSTEcMBoGA1UEAxMTRG9EIENMQVNTIDMgUm9vdCBDQTAeFw0wMDA1MTkxMzEz
+MDBaFw0yMDA1MTQxMzEzMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu
+IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD
+ExNEb0QgQ0xBU1MgMyBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC1MP5kvurMbe2BLPd/6Rm6DmlqKOGpqcuVWB/x5pppU+CIP5HFUbljl6jmIYwT
+XjY8qFf6+HAsTGrLvzCnTBbkMlz4ErBR+BZXjS+0TfouqJToKmHUVw1Hzm4sL36Y
+Z8wACKu2lhY1woWR5VugCsdmUmLzYXWVF668KlYppeArUwIDAQABoy8wLTAdBgNV
+HQ4EFgQUbJyl8FyPbUGNxBc7kFfCD6PNbf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG
+9w0BAQUFAAOBgQCvcUT5lyPMaGmMQwdBuoggsyIAQciYoFUczT9usZNcrfoYmrsc
+c2/9JEKPh59Rz76Gn+nXikhPCNlplKw/5g8tlw8ok3ZPYt//oM1h+KaGDDE0INx/
+L6j7Ob6V7jhZAmLB3mwVT+DfnbvkeXMk/WNklfdKqJkfSGWVx3u/eDLneg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgIQNhIilsXjOKUgodJfTNcJVDANBgkqhkiG9w0BAQUFADCB
+zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
+CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh
+d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl
+cnZlckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIxMDEwMTIzNTk1OVow
+gc4xCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcT
+CUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNV
+BAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRo
+YXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1z
+ZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
+aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560
+ZXUCTe/LCaIhUdib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j
++ao6hnO2RlNYyIkFvYMRuHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/
+BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBlkKyID1bZ5jA01CbH0FDxkt5r1DmI
+CSLGpmODA/eZd9iy5Ri4XWPz1HP7bJyZePFLeH0ZJMMrAoT4vCLZiiLXoPxx7JGH
+IPG47LHlVYCsPVLIOQ7C8MAFT9aCdYy9X9LcdpoFEsmvcsPcJX6kTY4XpeCHf+Ga
+WuFg3GQjPEIuTQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
+MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
+isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
+78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
+zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
+BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
+Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
+T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
+mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
+MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
+R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
+VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
+JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
+fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
+jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
+wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
+fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
+VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
+CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
+7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
+8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
+ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
+ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
+2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
-MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMzU5WhcNMjUxMjI5
+MTEyMzU5WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
-G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
-VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
-6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
-2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFh+lWUEmnBK5F6da6IALvvPO6f
+MWYw9LFAmwJsjcdKTVElPugUKLwgPLHxjO19kdmXIqPVzGOxq9krIwvdppffBYRU
+Fro6y8xja40gpdaeBXFGdVj19mR7C2adPoeVPTy1OTdSVLsWF8W/rdiLMy/p+PrV
+gTP/t56Fpu9MOeDjAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQU/J6FGtwGJXEh8C+L
+ElXQxYDuBq4wggFGBgNVHSMEggE9MIIBOYAU/J6FGtwGJXEh8C+LElXQxYDuBq6h
ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
@@ -1060,21 +1878,456 @@ AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
-2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
-3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
-AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMyBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg
+hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG
++EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB
+My5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
+L3Jldm9jYXRpb25DTEFTRUEzLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMy5odG1sPzA8BglghkgB
+hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB
+My5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy
+MDAyL2lwczIwMDJDTEFTRUEzLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw
+cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUEzLmNybDAvBggrBgEFBQcBAQQjMCEw
+HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
+gYEAGG8JN0Ca0pQR0X/Lg33qtKfi2JPe2iRqdRswDoL3CTn+bRN20V/wbKDAwyxc
+7eJOroysytPkEF4wZhipaKCjaWJROZGCeU1jM7mZe9pQPzeofT//VLi8zKaUA4lZ
+BvYI44gntZQoaFxJna5NHHde+mbbPYlHb8c6g0mf9S3tODs=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDXTCCAkWgAwIBAgIDAOJCMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNVBAYTAkFU
+MRAwDgYDVQQKEwdBLVRydXN0MRkwFwYDVQQLExBBLVRydXN0LW5RdWFsLTAxMRkw
+FwYDVQQDExBBLVRydXN0LW5RdWFsLTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEz
+MDIzMDAwMFowVTELMAkGA1UEBhMCQVQxEDAOBgNVBAoTB0EtVHJ1c3QxGTAXBgNV
+BAsTEEEtVHJ1c3QtblF1YWwtMDExGTAXBgNVBAMTEEEtVHJ1c3QtblF1YWwtMDEw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD/9RyAEZ6eHmhYzNJ328f0
+jmdSUFi6EqRqOxb3jHNPTIpK82CR6z5lmSnZQNUuCPD+htbNZffd2DKVB06NOyZ1
+2zcOMCgj4GtkZoqE0zPpPT3bpoE55nkZZe/qWEX/64wz/L/4EdkvKDSKG/UsP75M
+tmCVY5m2Eg73RVFRz4ccBIMpHel4lzEqSkdDtZOY5fnkrE333hx67nxq21vY8Eyf
+8O4fPQ5RtN8eohQCcPQ1z6ypU1R7N9jPRpnI+yzMOiwd3+QcKhHi1miCzo0pkOaB
+1CwmfsTyNl8qU0NJUL9Ta6cea7WThwTiWol2yD88cd2cy388xpbNkfrCPmZNGLoV
+AgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECE5ZzscCMocwMA4G
+A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEA69I9R1hU9Gbl9vV7W7AH
+QpUJAlFAvv2It/eY8p2ouQUPVaSZikaKtAYrCD/arzfXB43Qet+dM6CpHsn8ikYR
+vQKePjXv3Evf+C1bxwJAimcnZV6W+bNOTpdo8lXljxkmfN+Z5S+XzvK2ttUtP4Et
+YOVaxHw2mPMNbvDeY+foJkiBn3KYjGabMaR8moZqof5ofj4iS/WyamTZti6v/fKx
+n1vII+/uWkcxV5DT5+r9HLon0NYF0Vg317Wh+gWDV59VZo+dcwJDb+keYqMFYoqp
+77SGkZGu41S8NGYkQY3X9rNHRkDbLfpKYDmy6NanpOE1EHW1/sNSFAs43qZZKJEQ
+xg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDMDCCApmgAwIBAgIQDY4VEuGsu3eNOOMk34ww8jANBgkqhkiG9w0BAQUFADCB
+yzELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3Rl
+IFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNp
+Y0B0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIxMDEwMTIzNTk1OVowgcsx
+CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNh
+cGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0Nl
+cnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQ
+ZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNA
+dGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C
+FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeV
+oQxN2jSQHReJl+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlW
+Cy4cgNrx454p7xS9CkT7G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB
+/zANBgkqhkiG9w0BAQUFAAOBgQCIO/64+XpCRhGgpKJkhc1IHJzVilHNL8F9sQfP
+1wHeMj+W5IT+0V6tDH4OY0lqDhDkl9A/xacp2aZTHkseP1T6wIQ1c+qRqdxdk1cF
+BgwHua8LRDmIIaDugnOpRi9pbCV0qc3fp9f9hTAElDVKpxszJCxEFu0KxN+AqmUa
+v3Em8A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
+ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
+MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
+aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
+Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
+nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
+HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
+Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
+dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
+HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
+CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
+sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
+4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
+8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
+mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
+MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
+Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
+iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
+5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
+BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
+MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
+ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
+dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
+MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
+MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
+fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
+AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
+hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
+GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
+zmVml64mXg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
+bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
+j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
+Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
+MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
+fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
++DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
+QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
+BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
+EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
+b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
+djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
+EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
+9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
+F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
+eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
+Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
+k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
+ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
+dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
+txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
+VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
+QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
+S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
+mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
+qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
+TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
+1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
+NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
+VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
+bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
+H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
+4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
+BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
+EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
+FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
+lA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
+b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
+iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
+r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
+04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
+GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
+3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
+lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
+MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
+dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
+WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
+VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
+9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
+DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
+Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
+QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
+xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
+A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
+kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
+Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
+Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
+JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
+RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID2TCCAsGgAwIBAgIDAjbQMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMTAwMjE5MjIzOTI2WhcNMjAwMjE4MjIzOTI2WjBAMQswCQYDVQQG
+EwJVUzEXMBUGA1UEChMOR2VvVHJ1c3QsIEluYy4xGDAWBgNVBAMTD0dlb1RydXN0
+IFNTTCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJCzgMHk5Uat
+cGA9uuUU3Z6KXot1WubKbUGlI+g5hSZ6p1V3mkihkn46HhrxJ6ujTDnMyz1Hr4Gu
+FmpcN+9FQf37mpc8oEOdxt8XIdGKolbCA0mEEoE+yQpUYGa5jFTk+eb5lPHgX3UR
+8im55IaisYmtph6DKWOy8FQchQt65+EuDa+kvc3nsVrXjAVaDktzKIt1XTTYdwvh
+dGLicTBi2LyKBeUxY0pUiWozeKdOVSQdl+8a5BLGDzAYtDRN4dgjOyFbLTAZJQ50
+96QhS6CkIMlszZhWwPKoXz4mdaAN+DaIiixafWcwqQ/RmXAueOFRJq9VeiS+jDkN
+d53eAsMMvR8CAwEAAaOB2TCB1jAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFEJ5
+VBthzVUrPmPVPEhX9Z/7Rc5KMB8GA1UdIwQYMBaAFMB6mGiNifurBWQMEX2qfWW4
+ysxOMBIGA1UdEwEB/wQIMAYBAf8CAQAwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDov
+L2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwNAYIKwYBBQUHAQEE
+KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5nZW90cnVzdC5jb20wDQYJKoZI
+hvcNAQEFBQADggEBANTvU4ToGr2hiwTAqfVfoRB4RV2yV2pOJMtlTjGXkZrUJPji
+J2ZwMZzBYlQG55cdOprApClICq8kx6jEmlTBfEx4TCtoLF0XplR4TEbigMMfOHES
+0tdT41SFULgCy+5jOvhWiU1Vuy7AyBh3hjELC3DwfjWDpCoTZFZnNF0WX3OsewYk
+2k9QbSqr0E1TQcKOu3EDSSmGGM8hQkx0YlEVxW+o78Qn5Rsz3VqI138S0adhJR/V
+4NwdzxoQ2KDLX4z6DOW/cf/lXUQdpj6HR/oaToODEj+IZpWYeZqF6wJHzSXj8gYE
+TpnKXKBuervdo5AaRTPvvz7SBMS24CqFZUE+ENQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdjCCAl6gAwIBAgIEOhsEBTANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJE
+SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExIzAhBgNVBAMTGktNRC1D
+QSBLdmFsaWZpY2VyZXQgUGVyc29uMB4XDTAwMTEyMTIzMjQ1OVoXDTE1MTEyMjIz
+MjQ1OVowUTELMAkGA1UEBhMCREsxDDAKBgNVBAoTA0tNRDEPMA0GA1UECxMGS01E
+LUNBMSMwIQYDVQQDExpLTUQtQ0EgS3ZhbGlmaWNlcmV0IFBlcnNvbjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBANriF4Xd6yD7ZlBE317UBDObn+vRMVc6
+p3wNQODdEDJe2z1ncCz9NJvhoLGdOJhyg7VVPh0P2c+KZ9WI9mWOKZI2bp2WkLju
+jCcxbhTrurY3Wfc6gwLBqqFV8wWgaZKmvVWizjw9Kyi25f3yX4fOho6Qq2lvVbub
+tvVFXAd51GJ+/2Yed+a4Or2bz2RcqHS81B3pywsD4mgJR5xREv5jqPfwNP+V7bkc
+X+pfO4kVhZ/V+8MSPdQHgcV/iB3wP2mwgWyIBNc1reBidGTiz8unnWu55hcNfsvt
+LJbTs9OHhsR7naRuy+S402nDnD5vnONOFEsiHn46w+T0rtu7h6j4OvkCAwEAAaNW
+MFQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUeWLqmhI42Jxj7DifDsW+
+DlQhKD0wHwYDVR0jBBgwFoAUeWLqmhI42Jxj7DifDsW+DlQhKD0wDQYJKoZIhvcN
+AQEFBQADggEBANML/P42OuJ9aUV/0fItuIyc1JhqWvSqn5bXj+9eyEegcp8bHLHY
+42D1O+z0lNipdjYPSdMJ0wZOEUhr+150SdDQ1P/zQL8AUaLEBkRt7ZdzXPVH3PER
+qnf9IrpYBknZKfCAoVchA6Rr9WU3Sd8bMoRfMLKg8c0M8G6EPwCTcOFriSkbtvNG
+zd8r8I+WfUYIN/p8DI9JT9qfjVODnYPRMUm6KPvq27TsrGruKrqyaV94kWc8co8A
+v3zFLeCtghvUiRBdx+8Q7m5t4CkuSr0WINrqjIPFW2QrM1r82y09Fd16RkqL4LOg
+Lh6vB5KnTApv62rWdw7zWwYnjY6/vXYY1Aw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
+BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
+cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
+4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
+Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
+0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
+FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
+bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
+SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
+6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
+m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
+eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
+kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
+6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
+CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
+aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
+gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
+aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
+tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
+nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
+77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
+Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
+ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
+zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
+rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
+YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
+oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
+FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
+0m6lG5kngOcLqagA
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF8DCCA9igAwIBAgIPBuhGJy8fCo/RhFzjafbVMA0GCSqGSIb3DQEBBQUAMDgx
+CzAJBgNVBAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXpl
+bnBlLmNvbTAeFw0wNzEyMTMxMzA4MjdaFw0zNzEyMTMwODI3MjVaMDgxCzAJBgNV
+BAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXplbnBlLmNv
+bTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMnTesoPHqynhugWZWqx
+whtFMnGV2f4QW8yv56V5AY+Jw8ryVXH3d753lPNypCxE2J6SmxQ6oeckkAoKVo7F
+2CaU4dlI4S0+2gpy3aOZFdqBoof0e24md4lYrdbrDLJBenNubdt6eEHpCIgSfocu
+ZhFjbFT7PJ1ywLwu/8K33Q124zrX97RovqL144FuwUZvXY3gTcZUVYkaMzEKsVe5
+o4qYw+w7NMWVQWl+dcI8IMVhulFHoCCQk6GQS/NOfIVFVJrRBSZBsLVNHTO+xAPI
+JXzBcNs79AktVCdIrC/hxKw+yMuSTFM5NyPs0wH54AlETU1kwOENWocivK0bo/4m
+tRXzp/yEGensoYi0RGmEg/OJ0XQGqcwL1sLeJ4VQJsoXuMl6h1YsGgEebL4TrRCs
+tST1OJGh1kva8bvS3ke18byB9llrzxlT6Y0Vy0rLqW9E5RtBz+GGp8rQap+8TI0G
+M1qiheWQNaBiXBZO8OOi+gMatCxxs1gs3nsL2xoP694hHwZ3BgOwye+Z/MC5TwuG
+KP7Suerj2qXDR2kS4Nvw9hmL7Xtw1wLW7YcYKCwEJEx35EiKGsY7mtQPyvp10gFA
+Wo15v4vPS8+qFsGV5K1Mij4XkdSxYuWC5YAEpAN+jb/af6IPl08M0w3719Hlcn4c
+yHf/W5oPt64FRuXxqBbsR6QXAgMBAAGjgfYwgfMwgbAGA1UdEQSBqDCBpYEPaW5m
+b0BpemVucGUuY29tpIGRMIGOMUcwRQYDVQQKDD5JWkVOUEUgUy5BLiAtIENJRiBB
+MDEzMzcyNjAtUk1lcmMuVml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFDMEEG
+A1UECQw6QXZkYSBkZWwgTWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAxNCAtIDAxMDEw
+IFZpdG9yaWEtR2FzdGVpejAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUHRxlDqjyJXu0kc/ksbHmvVV0bAUwDQYJKoZIhvcNAQEFBQAD
+ggIBAMeBRm8hGE+gBe/n1bqXUKJg7aWSFBpSm/nxiEqg3Hh10dUflU7F57dp5iL0
++CmoKom+z892j+Mxc50m0xwbRxYpB2iEitL7sRskPtKYGCwkjq/2e+pEFhsqxPqg
+l+nqbFik73WrAGLRne0TNtsiC7bw0fRue0aHwp28vb5CO7dz0JoqPLRbEhYArxk5
+ja2DUBzIgU+9Ag89njWW7u/kwgN8KRwCfr00J16vU9adF79XbOnQgxCvv11N75B7
+XSus7Op9ACYXzAJcY9cZGKfsK8eKPlgOiofmg59OsjQerFQJTx0CCzl+gQgVuaBp
+E8gyK+OtbBPWg50jLbJtooiGfqgNASYJQNntKE6MkyQP2/EeTXp6WuKlWPHcj1+Z
+ggwuz7LdmMySlD/5CbOlliVbN/UShUHiGUzGigjB3Bh6Dx4/glmimj4/+eAJn/3B
+kUtdyXvWton83x18hqrNA/ILUpLxYm9/h+qrdslsUMIZgq+qHfUgKGgu1fxkN0/P
+pUTEvnK0jHS0bKf68r10OEMr3q/53NjgnZ/cPcqlY0S/kqJPTIAcuxrDmkoEVU3K
+7iYLHL8CxWTTnn7S05EcS6L1HOUXHA0MUqORH5zwIe0ClG+poEnK6EOMxPQ02nwi
+o8ZmPrgbBYhdurz3vOXcFD2nhqi2WVIhA16L4wTtSyoeo09Q
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICsDCCAhmgAwIBAgIQZ8jh6OO+HL38kTuOpiOHSTANBgkqhkiG9w0BAQUFADCB
+izELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxML
+RHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENl
+cnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcN
+OTcwMTAxMDAwMDAwWhcNMjEwMTAxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTAT
+BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNV
+BAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNV
+BAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
+MIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u
+6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522
+FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
+MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS+mqF4EF+3kKMZ/F
+QfRWVKvpwuWXjhj+kckMPiZkyaFMJ2SnvQGTVXFuF0853BvcSTUQOSP/ypvIz2Y/
+3Ewa1IEGQlIf4SaxFhe65nByMUToTo1b5NP50OOPJWQx5yr4GIg2GlLFDUE1G2m3
+JvUXzMEZXkt8XOKDgJH6L/uatxY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtDCCApygAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJKUDEc
+MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEOMAwGA1UECxMFTVBIUFQxJjAk
+BgNVBAsTHU1QSFBUIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMDMxNDA3
+NTAyNloXDTEyMDMxMzE0NTk1OVowYzELMAkGA1UEBhMCSlAxHDAaBgNVBAoTE0ph
+cGFuZXNlIEdvdmVybm1lbnQxDjAMBgNVBAsTBU1QSFBUMSYwJAYDVQQLEx1NUEhQ
+VCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAI3GUWlK9G9FVm8DhpKu5t37oxZbj6lZcFvEZY07YrYojWO657ub
+z56WE7q/PI/6Sm7i7qYE+Vp80r6thJvfmn7SS3BENrRqiapSenhooYD12jIe3iZQ
+2SXqx7WgYwyBGdQwGaYTijzbRFpgc0K8o4a99fIoHhz9J8AKqXasddMCqfJRaH30
+YJ7HnOvRYGL6HBrGhJ7X4Rzijyk9a9+3VOBsYcnIlx9iODoiYhA6r0ojuIu8/JA1
+oTTZrS0MyU/SLdFdJze2O1wnqTULXQybzJz3ad6oC/F5a69c0m92akYd9nGBrPxj
+EhucaQynC/QoCLs3aciLgioAnEJqy7i3EgUCAwEAAaNzMHEwHwYDVR0jBBgwFoAU
+YML3pLoA0h93Yngl8Gb/UgAh73owHQYDVR0OBBYEFGDC96S6ANIfd2J4JfBm/1IA
+Ie96MAwGA1UdEwQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQE
+AwIABTANBgkqhkiG9w0BAQUFAAOCAQEANPR8DN66iWZBs/lSm1vOzhqRkXDLT6xL
+LvJtjPLqmE469szGyFSKzsof6y+/8YgZlOoeX1inF4ox/SH1ATnwdIIsPbXuRLjt
+axboXvBh5y2ffC3hmzJVvJ87tb6mVWQeL9VFUhNhAI0ib+9OIZVEYI/64MFkDk4e
+iWG5ts6oqIJH1V7dVZg6pQ1Tc0Ckhn6N1m1hD30S0/zoPn/20Wq6OCF3he8VJrRG
+dcW9BD/Bkesko1HKhMBDjHVrJ8cFwbnDSoo+Ki47eJWaz/cOzaSsaMVUsR5POava
+/abhhgHn/eOJdXiVslyK0DYscjsdB3aBUfwZlomxYOzG6CgjQPhJdw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
+QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG
+A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
+BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln
+bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo
+VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs
+Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI
+iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD
+VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0
+oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey
+LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF
+BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi
+UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg
+T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0
+b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS
+C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw
+CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt
+iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M
+eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71
+iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp
+ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
+hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
+MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
+cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
+Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
+0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
+wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
+7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
+8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
+BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
+JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
+6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
+3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
+D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
+CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
@@ -1123,112 +2376,169 @@ hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3
3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
+MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD
+b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv
+b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx
+MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl
+ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0
+aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
+eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e
+eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq
+wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV
+WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO
+2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+
+H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU
+yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
+MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH
+lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB
+MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj
+YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu
+Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl
+cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k
+IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp
+ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz
+aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu
+Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw
+bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG
+SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS
+9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y
+m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv
+Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961
+kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH
+CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
+MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
+ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
+BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
+5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
+DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
+zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
+yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
+dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
+MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
+Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
+4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
+dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
+aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
+DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
+CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
+LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
+MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
+UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v
+U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN
+AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw
+MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD
+VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM
+BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m
+cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws
+ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx
+8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/
+s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c
+9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V
+pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+
+pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC
+aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y
+CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ
+6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG
+A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0
+MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF
+AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob
+sRQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
-MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
-isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
-78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
-zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
-BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
-Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
-T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
-mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
+MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
+U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
+NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
+ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
+ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
+DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
+8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
+X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
+K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
+1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
+A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
+zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
+YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
+bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
+L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
+eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
+VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
+WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
+pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
+13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
+U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
+F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
+oJ2daZH9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
+BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
+DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
+BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
+QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
+gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
+zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
+130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
+JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
+ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
+AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
+AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
+9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
+bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
+fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
+HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
+t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
@@ -1250,70 +2560,635 @@ kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
+IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
+NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
+SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
+IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
+7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
+m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
+xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
+YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
+JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
+I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
+kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
+EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
+Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
+gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
+rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
+1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
+h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
+yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
+7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
+RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
+ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
+M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
+my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
+AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
+9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
+hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
+fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
+dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
+NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
+VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
+vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
+BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
+IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
+NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
+y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
+0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
+E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
+MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
+ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
+IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
+SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
+SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
+ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
+DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
+TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
+fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
+sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
+WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
+nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
+dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
+NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
+AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
+MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
+uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
+PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
+JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
+gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
+j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
+5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
+o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
+/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
+Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
+W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
+hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF3zCCA8egAwIBAgIOGTMAAQACKBqaBLzyVUUwDQYJKoZIhvcNAQEFBQAwejEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUGA1UEAxMeVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMB4XDTA2MDMyMjE1NTgzNFoXDTMwMTIz
+MTIyNTk1OVowejELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVy
+IEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUG
+A1UEAxMeVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAi9R3azRs5TbYalxeOO781R15Azt7g2JEgk6I
+7d6D/+7MUGIFBZWZdpj2ufJf2AaRksL2LWYXH/1TA+iojWOpbuHWG4y8mLOLO9Tk
+Lsp9hUkmW3m4GotAnn+7yT9jLM/RWny6KCJBElpN+Rd3/IX9wkngKhh/6aAsnPlE
+/AxoOUL1JwW+jhV6YJ3wO8c85j4WvK923mq3ouGrRkXrjGV90ZfzlxElq1nroCLZ
+gt2Y7X7i+qBhCkoy3iwX921E6oFHWZdXNwM53V6CItQzuPomCba8OYgvURVOm8M7
+3xOCiN1LNPIz1pDp81PcNXzAw9l8eLPNcD+NauCjgUjkKa1juPD8KGQ7mbN9/pqd
+iPaZIgiRRxaJNXhdd6HPv0nh/SSUK2k2e+gc5iqQilvVOzRZQtxtz7sPQRxVzfUN
+Wy4WIibvYR6X/OJTyM9bo8ep8boOhhLLE8oVx+zkNo3aXBM9ZdIOXXB03L+PemrB
+Lg/Txl4PK1lszGFs/sBhTtnmT0ayWuIZFHCE+CAA7QGnl37DvRJckiMXoKUdRRcV
+I5qSCLUiiI3cKyTr4LEXaNOvYb3ZhXj2jbp4yjeNY77nrB/fpUcJucglMVRGURFV
+DYlcjdrSGC1z8rjVJ/VIIjfRYvd7Dcg4i6FKsPzQ8eu3hmPn4A5zf/1yUbXpfeJV
+BWR4Z38CAwEAAaNjMGEwHwYDVR0jBBgwFoAUzdeQoW6jv9sw1toyJZAM5jkegGUw
+DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFM3XkKFu
+o7/bMNbaMiWQDOY5HoBlMA0GCSqGSIb3DQEBBQUAA4ICAQB+FojoEw42zG4qhQc4
+xlaJeuNHIWZMUAgxWlHQ/KZeFHXeTDvs8e3MfhEHSmHu6rOOOqQzxu2KQmZP8Tx7
+yaUFQZmx7Cxb7tyW0ohTS3g0uW7muw/FeqZ8Dhjfbw90TNGp8aHp2FRkzF6WeKJW
+GsFzshXGVwXf2vdIJIqOf2qp+U3pPmrOYCx9LZAI9mOPFdAtnIz/8f38DBZQVhT7
+upeG7rRJA1TuG1l/MDoCgoYhrv7wFfLfToPmmcW6NfcgkIw47XXP4S73BDD7Ua2O
+giRAyn0pXdXZ92Vk/KqfdLh9kl3ShCngE+qK99CrxK7vFcXCifJ7tjtJmGHzTnKR
+N4xJkunI7Cqg90lufA0kxmts8jgvynAF5X/fxisrgIDV2m/LQLvYG/AkyRDIRAJ+
+LtOYqqIN8SvQ2vqOHP9U6OFKbt2o1ni1N6WsZNUUI8cOpevhCTjXwHxgpV2Yj4wC
+1dxWqPNNWKkL1HxkdAEy8t8PSoqpAqKiHYR3wvHMl700GXRd4nQ+dSf3r7/ufA5t
+VIimVuImrTESPB5BeW0X6hNeH/Vcn0lZo7Ivo0LD+qh+v6WfSMlgYmIK371F3uNC
+tVGW/cT1Gpm4UqJEzS1hjBWPgdVdotSQPYxuQGHDWV3Y2eH2dEcieXR92sqjbzcV
+NvAsGnE8EXbfXRo+VGN4a2V+Hw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHqTCCBZGgAwIBAgIQYwaGp8U3ZaVDkKhqWMzUMjANBgkqhkiG9w0BAQUFADCB
+jzELMAkGA1UEBhMCTFYxNTAzBgNVBAoTLFZBUyBMYXR2aWphcyBQYXN0cyAtIFZp
+ZW4ucmVnLk5yLjQwMDAzMDUyNzkwMSMwIQYDVQQLExpTZXJ0aWZpa2FjaWphcyBw
+YWthbHBvanVtaTEkMCIGA1UEAxMbVkFTIExhdHZpamFzIFBhc3RzIFNTSShSQ0Ep
+MB4XDTA2MDkxMzA5MjIxMFoXDTI0MDkxMzA5Mjc1N1owgY8xCzAJBgNVBAYTAkxW
+MTUwMwYDVQQKEyxWQVMgTGF0dmlqYXMgUGFzdHMgLSBWaWVuLnJlZy5Oci40MDAw
+MzA1Mjc5MDEjMCEGA1UECxMaU2VydGlmaWthY2lqYXMgcGFrYWxwb2p1bWkxJDAi
+BgNVBAMTG1ZBUyBMYXR2aWphcyBQYXN0cyBTU0koUkNBKTCCAiIwDQYJKoZIhvcN
+AQEBBQADggIPADCCAgoCggIBAJu4+f1hVS9PpKUUtS6OuSSPrPuxVD9A/0/F5YZo
+e1OT+zWCNahQLpRSoNuDPnXaFXCsCc/ugkmtNkm5tHGLtAChQgbKCApjl7YI/O60
+3Jh4GYLJ+H9kPqrJ/rGN67Bk9bzzxD46kOpOjj8bGbxqg8ORPGxV+wpSwOjhXXeF
+M8VJ3+xqv79sN/6OSaIVGM6LjmseOKMwb4iBfnJWRBrEejkP9sSPltSy6wBOXN67
+5zu35iQFk2tN5pFEv+6YG8eFGxFBeyI2p74+6Ho33BjekJ2PzbLXmj/iF39bDOHv
+P2Y9biTksM7DDIhslNo4JXxSOeNzFLMARWOaDEJAXgTG93JkzsluM7Pk020klTeT
+fvIAXRmLH/NDc6ifRdIGqey0Qrv67gzHTz9RH9Gv0KwYf4eBIv6p3QeWbXz4TtlN
+OlBp1UF+xdp02I5z5X6D4cMZgbe9v0COvi6aogyqTgIuuyrhCF0xA8msJ7Cv3NXI
+FH1AnVWJIfmQzNTJYEFzq+jN2DpVOQqCmf6b9fU8HJHLwPpGVK4h/CqsXHveepdx
+/WxrzUiapNuBfBg3L5B9YZS9F8lctlQWd8oJSqrpvE+UdQFaVryS0o+515feVnQB
+9xZxSbH1GEaZQe5i4bMsZXVpKXJDA/ibH/o49J7sQBCOrJfVsDO+nxjcLfdBeFRK
+YkTnAgMBAAGjggH9MIIB+TAOBgNVHQ8BAf8EBAMCAQYwGAYIKwYBBQUHAQMEDDAK
+MAgGBgQAjkYBATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTMw/Vm/3OsOFqW
+GyGJuIFMH8teJTAQBgkrBgEEAYI3FQEEAwIBADCCAYkGA1UdIASCAYAwggF8MIIB
+eAYLKwYBBAGBxFkBAQIwggFnMIIBOAYIKwYBBQUHAgIwggEqHoIBJgBTAGkAcwAg
+AGkAcgAgAHMAZQByAHQAaQBmAGkAawBhAHQAcwAsACAAawBvACAAaQB6AGQAZQB2
+AGkAcwAgAFYAQQBTACAATABhAHQAdgBpAGoAYQBzACAAUABhAHMAdABzACwAIABu
+AG8AZAByAG8AcwBpAG4AbwB0ACAAYQB0AGIAaQBsAHMAdABpAGIAdQAgAEUAbABl
+AGsAdAByAG8AbgBpAHMAawBvACAAZABvAGsAdQBtAGUAbgB0AHUAIABsAGkAawB1
+AG0AYQBtACAAdQBuACAARQBpAHIAbwBwAGEAcwAgAFAAYQByAGwAYQBtAGUAbgB0
+AGEAIABkAGkAcgBlAGsAdABpAHYAYQBpACAAMQA5ADkAOQAvADkAMwAvAEUASzAp
+BggrBgEFBQcCARYdaHR0cDovL3d3dy5lLW1lLmx2L3JlcG9zaXRvcnkwDQYJKoZI
+hvcNAQEFBQADggIBAB8oSjWQIWNoCi94r6MegiaXoz8nGdJLo0J6BhNlW8EEy+t9
+fO+U8vGJ9bffUgIhadLqljTloM+XuJxVDhCFoxReLAX4tTp28/l6uN62DCdp8suU
+kQsdudWOb5kvzfIZVjk6SFbwAf+Cdbay/dHU9fJjV0xNoX7MELoEae/0FPyzlx9F
+7m9KKH/Rxie8x6Opa3vtghNvq94P+3HrXBEaqSzQMJ/8NjdW75XpurcTtq6fAmGt
+nuxrBG82nw+Z98LJyEwouSjUIdeeVNXAzvSO5FWUe48kxjj8q3qkVnc9qEXvZJKk
+0Ep+u3OL9A1Sc7g6SF5DgNOpcHdi/8coHHMeQ+YnJFtJueY2pI79xS0veqV5EnrX
+IbIlbcgPosNhS+VI4le6n/KKId3bZPDaGd/OwJuAOcJ3d2MVU3KE+qSPBzeGIX1Q
++j1qN9uRDjez/c4Lynth0Jx0nH04aG3pex3W8Sq07ztgUncF5gLCX4xbvPB9t3PH
+kWuyKrNjozTVq60lcUf/Gj56to2VdsPups0DCWzuRWeYz5lIdsHOinSaaFIBNCLI
+7eIUC4S9bhCMsXKbvugI11fVf+q0AT1O5OLoZ+eMfunnQhHvlUbIkda+JxeAGTSY
+58bfHvwhX56GPbx+8Jy9cp70R4JbcWfz+txUTKhc2FnH0AcOEzMnvPRp8Gsh
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIIBhDCeat3PfIwDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UE
+BhMCQ0gxEjAQBgNVBAoTCVN3aXNzU2lnbjEyMDAGA1UEAxMpU3dpc3NTaWduIENB
+IChSU0EgSUsgTWF5IDYgMTk5OSAxODowMDo1OCkxHzAdBgkqhkiG9w0BCQEWEGNh
+QFN3aXNzU2lnbi5jb20wHhcNMDAxMTI2MjMyNzQxWhcNMzExMTI2MjMyNzQxWjB2
+MQswCQYDVQQGEwJDSDESMBAGA1UEChMJU3dpc3NTaWduMTIwMAYDVQQDEylTd2lz
+c1NpZ24gQ0EgKFJTQSBJSyBNYXkgNiAxOTk5IDE4OjAwOjU4KTEfMB0GCSqGSIb3
+DQEJARYQY2FAU3dpc3NTaWduLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKw5fjnmNneLQlUCQG8jQLwwfbrOZoUwNX8cbNqhxK03/xUloFVgAt+S
+Te2RxNXaCAXLBPn5ZST35TLV57aLmbHCtifv3YZqaaQGvjedltIBMJihJhZ+h3LY
+SKsUb+xEJ3x5ZUf8jP+Q1g57y1s8SnBFWN/ni5NkF1Y1y31VwOi9wiOf/VISL+uu
+SC4i1CP1Kbz3BDs6Hht1GpRYCbJ/K0bc9oJSpWpT5PGONsGIawqMbJuyoDghsXQ1
+pbn2e8K64BSscGZVZTNooSGgNiHmACNJBYXiWVWrwXPF4l6SddmC3Rj0aKXjgECc
+FkHLDQcsM5JsK2ZLryTDUsQFbxVP2ikCAwEAAaNHMEUwCwYDVR0PBAQDAgEGMAwG
+A1UdEwQFMAMBAf8wHQYDVR0OBBYEFJbXcc05KtT8iLGKq1N4ae+PR34WMAkGA1Ud
+IwQCMAAwDQYJKoZIhvcNAQEFBQADggEBAKMy6W8HvZdS1fBpEUzl6Lvw50bgE1Xc
+HU1JypSBG9mhdcXZo5AlPB4sCvx9Dmfwhyrdsshc0TP2V3Vh6eQqnEF5qB4lVziT
+Bko9mW6Ot+pPnwsy4SHpx3rw6jCYnOqfUcZjWqqqRrq/3P1waz+Mn4cLMVEg3Xaz
+qYov/khvSqS0JniwjRlo2H6f/1oVUKZvP+dUhpQepfZrOqMAWZW4otp6FolyQyeU
+NN6UCRNiUKl5vTijbKwUUwfER/1Vci3M1/O1QCfttQ4vRN4Buc0xqYtGL3cd5WiO
+vWzyhlTzAI6VUdNkQhhHJSAyTpj6dmXDRzrryoFGa2PjgESxz7XBaSI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
+MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
+Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
+iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
+/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
+jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
+HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
+sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
+gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
+KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
+AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
+URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
+H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
+I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
+iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
+kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
+IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
+EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
+VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
+dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
+E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
+D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
+4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
+lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
+bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
+o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
+MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
+LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
+BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
+AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
+j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
+KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
+2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
+mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+cp . `md5 -q .`.pem
+cp ./.pem `md5 -q ./.pem`.pem
+cp ./cert000.pem `md5 -q ./cert000.pem`.pem
+cp ./cert001.pem `md5 -q ./cert001.pem`.pem
+cp ./cert002.pem `md5 -q ./cert002.pem`.pem
+cp ./cert003.pem `md5 -q ./cert003.pem`.pem
+cp ./cert004.pem `md5 -q ./cert004.pem`.pem
+cp ./cert005.pem `md5 -q ./cert005.pem`.pem
+cp ./cert006.pem `md5 -q ./cert006.pem`.pem
+cp ./cert007.pem `md5 -q ./cert007.pem`.pem
+cp ./cert008.pem `md5 -q ./cert008.pem`.pem
+cp ./cert009.pem `md5 -q ./cert009.pem`.pem
+cp ./cert010.pem `md5 -q ./cert010.pem`.pem
+cp ./cert011.pem `md5 -q ./cert011.pem`.pem
+cp ./cert012.pem `md5 -q ./cert012.pem`.pem
+cp ./cert013.pem `md5 -q ./cert013.pem`.pem
+cp ./cert014.pem `md5 -q ./cert014.pem`.pem
+cp ./cert015.pem `md5 -q ./cert015.pem`.pem
+cp ./cert016.pem `md5 -q ./cert016.pem`.pem
+cp ./cert017.pem `md5 -q ./cert017.pem`.pem
+cp ./cert018.pem `md5 -q ./cert018.pem`.pem
+cp ./cert019.pem `md5 -q ./cert019.pem`.pem
+cp ./cert020.pem `md5 -q ./cert020.pem`.pem
+cp ./cert021.pem `md5 -q ./cert021.pem`.pem
+cp ./cert022.pem `md5 -q ./cert022.pem`.pem
+cp ./cert023.pem `md5 -q ./cert023.pem`.pem
+cp ./cert024.pem `md5 -q ./cert024.pem`.pem
+cp ./cert025.pem `md5 -q ./cert025.pem`.pem
+cp ./cert026.pem `md5 -q ./cert026.pem`.pem
+cp ./cert027.pem `md5 -q ./cert027.pem`.pem
+cp ./cert028.pem `md5 -q ./cert028.pem`.pem
+cp ./cert029.pem `md5 -q ./cert029.pem`.pem
+cp ./cert030.pem `md5 -q ./cert030.pem`.pem
+cp ./cert031.pem `md5 -q ./cert031.pem`.pem
+cp ./cert032.pem `md5 -q ./cert032.pem`.pem
+cp ./cert033.pem `md5 -q ./cert033.pem`.pem
+cp ./cert034.pem `md5 -q ./cert034.pem`.pem
+cp ./cert035.pem `md5 -q ./cert035.pem`.pem
+cp ./cert036.pem `md5 -q ./cert036.pem`.pem
+cp ./cert037.pem `md5 -q ./cert037.pem`.pem
+cp ./cert038.pem `md5 -q ./cert038.pem`.pem
+cp ./cert039.pem `md5 -q ./cert039.pem`.pem
+cp ./cert040.pem `md5 -q ./cert040.pem`.pem
+cp ./cert041.pem `md5 -q ./cert041.pem`.pem
+cp ./cert042.pem `md5 -q ./cert042.pem`.pem
+cp ./cert043.pem `md5 -q ./cert043.pem`.pem
+cp ./cert044.pem `md5 -q ./cert044.pem`.pem
+cp ./cert045.pem `md5 -q ./cert045.pem`.pem
+cp ./cert046.pem `md5 -q ./cert046.pem`.pem
+cp ./cert047.pem `md5 -q ./cert047.pem`.pem
+cp ./cert048.pem `md5 -q ./cert048.pem`.pem
+cp ./cert049.pem `md5 -q ./cert049.pem`.pem
+cp ./cert050.pem `md5 -q ./cert050.pem`.pem
+cp ./cert051.pem `md5 -q ./cert051.pem`.pem
+cp ./cert052.pem `md5 -q ./cert052.pem`.pem
+cp ./cert053.pem `md5 -q ./cert053.pem`.pem
+cp ./cert054.pem `md5 -q ./cert054.pem`.pem
+cp ./cert055.pem `md5 -q ./cert055.pem`.pem
+cp ./cert056.pem `md5 -q ./cert056.pem`.pem
+cp ./cert057.pem `md5 -q ./cert057.pem`.pem
+cp ./cert058.pem `md5 -q ./cert058.pem`.pem
+cp ./cert059.pem `md5 -q ./cert059.pem`.pem
+cp ./cert060.pem `md5 -q ./cert060.pem`.pem
+cp ./cert061.pem `md5 -q ./cert061.pem`.pem
+cp ./cert062.pem `md5 -q ./cert062.pem`.pem
+cp ./cert063.pem `md5 -q ./cert063.pem`.pem
+cp ./cert064.pem `md5 -q ./cert064.pem`.pem
+cp ./cert065.pem `md5 -q ./cert065.pem`.pem
+cp ./cert066.pem `md5 -q ./cert066.pem`.pem
+cp ./cert067.pem `md5 -q ./cert067.pem`.pem
+cp ./cert068.pem `md5 -q ./cert068.pem`.pem
+cp ./cert069.pem `md5 -q ./cert069.pem`.pem
+cp ./cert070.pem `md5 -q ./cert070.pem`.pem
+cp ./cert071.pem `md5 -q ./cert071.pem`.pem
+cp ./cert072.pem `md5 -q ./cert072.pem`.pem
+cp ./cert073.pem `md5 -q ./cert073.pem`.pem
+cp ./cert074.pem `md5 -q ./cert074.pem`.pem
+cp ./cert075.pem `md5 -q ./cert075.pem`.pem
+cp ./cert076.pem `md5 -q ./cert076.pem`.pem
+cp ./cert077.pem `md5 -q ./cert077.pem`.pem
+cp ./cert078.pem `md5 -q ./cert078.pem`.pem
+cp ./cert079.pem `md5 -q ./cert079.pem`.pem
+cp ./cert080.pem `md5 -q ./cert080.pem`.pem
+cp ./cert081.pem `md5 -q ./cert081.pem`.pem
+cp ./cert082.pem `md5 -q ./cert082.pem`.pem
+cp ./cert083.pem `md5 -q ./cert083.pem`.pem
+cp ./cert084.pem `md5 -q ./cert084.pem`.pem
+cp ./cert085.pem `md5 -q ./cert085.pem`.pem
+cp ./cert086.pem `md5 -q ./cert086.pem`.pem
+cp ./cert087.pem `md5 -q ./cert087.pem`.pem
+cp ./cert088.pem `md5 -q ./cert088.pem`.pem
+cp ./cert089.pem `md5 -q ./cert089.pem`.pem
+cp ./cert090.pem `md5 -q ./cert090.pem`.pem
+cp ./cert091.pem `md5 -q ./cert091.pem`.pem
+cp ./cert092.pem `md5 -q ./cert092.pem`.pem
+cp ./cert093.pem `md5 -q ./cert093.pem`.pem
+cp ./cert094.pem `md5 -q ./cert094.pem`.pem
+cp ./cert095.pem `md5 -q ./cert095.pem`.pem
+cp ./cert096.pem `md5 -q ./cert096.pem`.pem
+cp ./cert097.pem `md5 -q ./cert097.pem`.pem
+cp ./cert098.pem `md5 -q ./cert098.pem`.pem
+cp ./cert099.pem `md5 -q ./cert099.pem`.pem
+cp ./cert100.pem `md5 -q ./cert100.pem`.pem
+cp ./cert101.pem `md5 -q ./cert101.pem`.pem
+cp ./cert102.pem `md5 -q ./cert102.pem`.pem
+cp ./cert103.pem `md5 -q ./cert103.pem`.pem
+cp ./cert104.pem `md5 -q ./cert104.pem`.pem
+cp ./cert105.pem `md5 -q ./cert105.pem`.pem
+cp ./cert106.pem `md5 -q ./cert106.pem`.pem
+cp ./cert107.pem `md5 -q ./cert107.pem`.pem
+cp ./cert108.pem `md5 -q ./cert108.pem`.pem
+cp ./cert109.pem `md5 -q ./cert109.pem`.pem
+cp ./cert110.pem `md5 -q ./cert110.pem`.pem
+cp ./cert111.pem `md5 -q ./cert111.pem`.pem
+cp ./cert112.pem `md5 -q ./cert112.pem`.pem
+cp ./cert113.pem `md5 -q ./cert113.pem`.pem
+cp ./cert114.pem `md5 -q ./cert114.pem`.pem
+cp ./cert115.pem `md5 -q ./cert115.pem`.pem
+cp ./cert116.pem `md5 -q ./cert116.pem`.pem
+cp ./cert117.pem `md5 -q ./cert117.pem`.pem
+cp ./cert118.pem `md5 -q ./cert118.pem`.pem
+cp ./cert119.pem `md5 -q ./cert119.pem`.pem
+cp ./cert120.pem `md5 -q ./cert120.pem`.pem
+cp ./cert121.pem `md5 -q ./cert121.pem`.pem
+cp ./cert122.pem `md5 -q ./cert122.pem`.pem
+cp ./cert123.pem `md5 -q ./cert123.pem`.pem
+cp ./cert124.pem `md5 -q ./cert124.pem`.pem
+cp ./cert125.pem `md5 -q ./cert125.pem`.pem
+cp ./cert126.pem `md5 -q ./cert126.pem`.pem
+cp ./cert127.pem `md5 -q ./cert127.pem`.pem
+cp ./cert128.pem `md5 -q ./cert128.pem`.pem
+cp ./cert129.pem `md5 -q ./cert129.pem`.pem
+cp ./cert130.pem `md5 -q ./cert130.pem`.pem
+cp ./cert131.pem `md5 -q ./cert131.pem`.pem
+cp ./cert132.pem `md5 -q ./cert132.pem`.pem
+cp ./cert133.pem `md5 -q ./cert133.pem`.pem
+cp ./cert134.pem `md5 -q ./cert134.pem`.pem
+cp ./cert135.pem `md5 -q ./cert135.pem`.pem
+cp ./cert136.pem `md5 -q ./cert136.pem`.pem
+cp ./cert137.pem `md5 -q ./cert137.pem`.pem
+cp ./cert138.pem `md5 -q ./cert138.pem`.pem
+cp ./cert139.pem `md5 -q ./cert139.pem`.pem
+cp ./cert140.pem `md5 -q ./cert140.pem`.pem
+cp ./cert141.pem `md5 -q ./cert141.pem`.pem
+cp ./cert142.pem `md5 -q ./cert142.pem`.pem
+cp ./cert143.pem `md5 -q ./cert143.pem`.pem
+cp ./cert144.pem `md5 -q ./cert144.pem`.pem
+cp ./cert145.pem `md5 -q ./cert145.pem`.pem
+cp ./cert146.pem `md5 -q ./cert146.pem`.pem
+cp ./cert147.pem `md5 -q ./cert147.pem`.pem
+cp ./cert148.pem `md5 -q ./cert148.pem`.pem
+cp ./cert149.pem `md5 -q ./cert149.pem`.pem
+cp ./cert150.pem `md5 -q ./cert150.pem`.pem
+cp ./cert151.pem `md5 -q ./cert151.pem`.pem
+cp ./cert152.pem `md5 -q ./cert152.pem`.pem
+cp ./cert153.pem `md5 -q ./cert153.pem`.pem
+cp ./cert154.pem `md5 -q ./cert154.pem`.pem
+cp ./cert155.pem `md5 -q ./cert155.pem`.pem
+cp ./cert156.pem `md5 -q ./cert156.pem`.pem
+cp ./cert157.pem `md5 -q ./cert157.pem`.pem
+cp ./cert158.pem `md5 -q ./cert158.pem`.pem
+cp ./cert159.pem `md5 -q ./cert159.pem`.pem
+cp ./cert160.pem `md5 -q ./cert160.pem`.pem
+cp ./cert161.pem `md5 -q ./cert161.pem`.pem
+cp ./cert162.pem `md5 -q ./cert162.pem`.pem
+cp ./cert163.pem `md5 -q ./cert163.pem`.pem
+cp ./cert164.pem `md5 -q ./cert164.pem`.pem
+cp ./cert165.pem `md5 -q ./cert165.pem`.pem
+cp ./cert166.pem `md5 -q ./cert166.pem`.pem
+cp ./cert167.pem `md5 -q ./cert167.pem`.pem
+cp ./cert168.pem `md5 -q ./cert168.pem`.pem
+cp ./cert169.pem `md5 -q ./cert169.pem`.pem
+cp ./cert170.pem `md5 -q ./cert170.pem`.pem
+cp ./cert171.pem `md5 -q ./cert171.pem`.pem
+cp ./cert172.pem `md5 -q ./cert172.pem`.pem
+cp ./cert173.pem `md5 -q ./cert173.pem`.pem
+cp ./cert174.pem `md5 -q ./cert174.pem`.pem
+cp ./cert175.pem `md5 -q ./cert175.pem`.pem
+cp ./cert176.pem `md5 -q ./cert176.pem`.pem
+cp ./cert177.pem `md5 -q ./cert177.pem`.pem
+cp ./cert178.pem `md5 -q ./cert178.pem`.pem
+cp ./foo.sh `md5 -q ./foo.sh`.pem
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
+V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
+4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
+H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
+8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
+vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
+mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
+btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
+T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
+WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
+c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
+4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
+VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
+CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
+aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
+czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
+A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
+Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
+7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
+d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
+4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
+t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
+DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
+k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
+zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
+Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
+mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
+4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+cp . `md5 -q .`.pem
+cp ./cert000 `md5 -q ./cert000`.pem
+cp ./cert001 `md5 -q ./cert001`.pem
+cp ./cert002 `md5 -q ./cert002`.pem
+cp ./cert003 `md5 -q ./cert003`.pem
+cp ./cert004 `md5 -q ./cert004`.pem
+cp ./cert005 `md5 -q ./cert005`.pem
+cp ./cert006 `md5 -q ./cert006`.pem
+cp ./cert007 `md5 -q ./cert007`.pem
+cp ./cert008 `md5 -q ./cert008`.pem
+cp ./cert009 `md5 -q ./cert009`.pem
+cp ./cert010 `md5 -q ./cert010`.pem
+cp ./cert011 `md5 -q ./cert011`.pem
+cp ./cert012 `md5 -q ./cert012`.pem
+cp ./cert013 `md5 -q ./cert013`.pem
+cp ./cert014 `md5 -q ./cert014`.pem
+cp ./cert015 `md5 -q ./cert015`.pem
+cp ./cert016 `md5 -q ./cert016`.pem
+cp ./cert017 `md5 -q ./cert017`.pem
+cp ./cert018 `md5 -q ./cert018`.pem
+cp ./cert019 `md5 -q ./cert019`.pem
+cp ./cert020 `md5 -q ./cert020`.pem
+cp ./cert021 `md5 -q ./cert021`.pem
+cp ./cert022 `md5 -q ./cert022`.pem
+cp ./cert023 `md5 -q ./cert023`.pem
+cp ./cert024 `md5 -q ./cert024`.pem
+cp ./cert025 `md5 -q ./cert025`.pem
+cp ./cert026 `md5 -q ./cert026`.pem
+cp ./cert027 `md5 -q ./cert027`.pem
+cp ./cert028 `md5 -q ./cert028`.pem
+cp ./cert029 `md5 -q ./cert029`.pem
+cp ./cert030 `md5 -q ./cert030`.pem
+cp ./cert031 `md5 -q ./cert031`.pem
+cp ./cert032 `md5 -q ./cert032`.pem
+cp ./cert033 `md5 -q ./cert033`.pem
+cp ./cert034 `md5 -q ./cert034`.pem
+cp ./cert035 `md5 -q ./cert035`.pem
+cp ./cert036 `md5 -q ./cert036`.pem
+cp ./cert037 `md5 -q ./cert037`.pem
+cp ./cert038 `md5 -q ./cert038`.pem
+cp ./cert039 `md5 -q ./cert039`.pem
+cp ./cert040 `md5 -q ./cert040`.pem
+cp ./cert041 `md5 -q ./cert041`.pem
+cp ./cert042 `md5 -q ./cert042`.pem
+cp ./cert043 `md5 -q ./cert043`.pem
+cp ./cert044 `md5 -q ./cert044`.pem
+cp ./cert045 `md5 -q ./cert045`.pem
+cp ./cert046 `md5 -q ./cert046`.pem
+cp ./cert047 `md5 -q ./cert047`.pem
+cp ./cert048 `md5 -q ./cert048`.pem
+cp ./cert049 `md5 -q ./cert049`.pem
+cp ./cert050 `md5 -q ./cert050`.pem
+cp ./cert051 `md5 -q ./cert051`.pem
+cp ./cert052 `md5 -q ./cert052`.pem
+cp ./cert053 `md5 -q ./cert053`.pem
+cp ./cert054 `md5 -q ./cert054`.pem
+cp ./cert055 `md5 -q ./cert055`.pem
+cp ./cert056 `md5 -q ./cert056`.pem
+cp ./cert057 `md5 -q ./cert057`.pem
+cp ./cert058 `md5 -q ./cert058`.pem
+cp ./cert059 `md5 -q ./cert059`.pem
+cp ./cert060 `md5 -q ./cert060`.pem
+cp ./cert061 `md5 -q ./cert061`.pem
+cp ./cert062 `md5 -q ./cert062`.pem
+cp ./cert063 `md5 -q ./cert063`.pem
+cp ./cert064 `md5 -q ./cert064`.pem
+cp ./cert065 `md5 -q ./cert065`.pem
+cp ./cert066 `md5 -q ./cert066`.pem
+cp ./cert067 `md5 -q ./cert067`.pem
+cp ./cert068 `md5 -q ./cert068`.pem
+cp ./cert069 `md5 -q ./cert069`.pem
+cp ./cert070 `md5 -q ./cert070`.pem
+cp ./cert071 `md5 -q ./cert071`.pem
+cp ./cert072 `md5 -q ./cert072`.pem
+cp ./cert073 `md5 -q ./cert073`.pem
+cp ./cert074 `md5 -q ./cert074`.pem
+cp ./cert075 `md5 -q ./cert075`.pem
+cp ./cert076 `md5 -q ./cert076`.pem
+cp ./cert077 `md5 -q ./cert077`.pem
+cp ./cert078 `md5 -q ./cert078`.pem
+cp ./cert079 `md5 -q ./cert079`.pem
+cp ./cert080 `md5 -q ./cert080`.pem
+cp ./cert081 `md5 -q ./cert081`.pem
+cp ./cert082 `md5 -q ./cert082`.pem
+cp ./cert083 `md5 -q ./cert083`.pem
+cp ./cert084 `md5 -q ./cert084`.pem
+cp ./cert085 `md5 -q ./cert085`.pem
+cp ./cert086 `md5 -q ./cert086`.pem
+cp ./cert087 `md5 -q ./cert087`.pem
+cp ./cert088 `md5 -q ./cert088`.pem
+cp ./cert089 `md5 -q ./cert089`.pem
+cp ./cert090 `md5 -q ./cert090`.pem
+cp ./cert091 `md5 -q ./cert091`.pem
+cp ./cert092 `md5 -q ./cert092`.pem
+cp ./cert093 `md5 -q ./cert093`.pem
+cp ./cert094 `md5 -q ./cert094`.pem
+cp ./cert095 `md5 -q ./cert095`.pem
+cp ./cert096 `md5 -q ./cert096`.pem
+cp ./cert097 `md5 -q ./cert097`.pem
+cp ./cert098 `md5 -q ./cert098`.pem
+cp ./cert099 `md5 -q ./cert099`.pem
+cp ./cert100 `md5 -q ./cert100`.pem
+cp ./cert101 `md5 -q ./cert101`.pem
+cp ./cert102 `md5 -q ./cert102`.pem
+cp ./cert103 `md5 -q ./cert103`.pem
+cp ./cert104 `md5 -q ./cert104`.pem
+cp ./cert105 `md5 -q ./cert105`.pem
+cp ./cert106 `md5 -q ./cert106`.pem
+cp ./cert107 `md5 -q ./cert107`.pem
+cp ./cert108 `md5 -q ./cert108`.pem
+cp ./cert109 `md5 -q ./cert109`.pem
+cp ./cert110 `md5 -q ./cert110`.pem
+cp ./cert111 `md5 -q ./cert111`.pem
+cp ./cert112 `md5 -q ./cert112`.pem
+cp ./cert113 `md5 -q ./cert113`.pem
+cp ./cert114 `md5 -q ./cert114`.pem
+cp ./cert115 `md5 -q ./cert115`.pem
+cp ./cert116 `md5 -q ./cert116`.pem
+cp ./cert117 `md5 -q ./cert117`.pem
+cp ./cert118 `md5 -q ./cert118`.pem
+cp ./cert119 `md5 -q ./cert119`.pem
+cp ./cert120 `md5 -q ./cert120`.pem
+cp ./cert121 `md5 -q ./cert121`.pem
+cp ./cert122 `md5 -q ./cert122`.pem
+cp ./cert123 `md5 -q ./cert123`.pem
+cp ./cert124 `md5 -q ./cert124`.pem
+cp ./cert125 `md5 -q ./cert125`.pem
+cp ./cert126 `md5 -q ./cert126`.pem
+cp ./cert127 `md5 -q ./cert127`.pem
+cp ./foo.sh `md5 -q ./foo.sh`.pem
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
+MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
+AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
+CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
+YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
+Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
+mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
+XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
+S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
+FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
+AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
+ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
+ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
+Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
+DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
+yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
+EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
+CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
+EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
+PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
+MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
+VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
+CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
+tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
+dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
+PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
+BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
+ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
+7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
+43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
+pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
+WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
@@ -1346,143 +3221,59 @@ YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
BKNDLdr8C2LqL19iUw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
-IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
-DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
-EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
-ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
-dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
-QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
-dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
-wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
-G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
-AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
-c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
-9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
-YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
-Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
-MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
-cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
-d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
-DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
-rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
-uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
-BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
-MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
-/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
-gQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
-dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
-bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
-QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
-BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
-IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
-bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
-Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
-Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
-Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
-ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
-b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
-KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
-BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
-BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
-MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
-Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
-A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
-c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
-6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
-Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
-8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
-Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
-9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
-pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
-CayJSdM=
+MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
+EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
+aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
+MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
+dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
+bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
+eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
+r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
+3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
+vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
+mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
+wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
+hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
+TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
+biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
+ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
+dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
+b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
+c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
+ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
+dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
+ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
+ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
+Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
+ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
+A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
+MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
+NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
+VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
+83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
+macqaJVmlaut74nLYKkGEsaUR+ko
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
+MIICmDCCAgGgAwIBAgIBDjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJVUzEY
+MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNFQ0ExFDASBgNVBAMT
+C0VDQSBSb290IENBMB4XDTA0MDYxNDEwMjAwOVoXDTQwMDYxNDEwMjAwOVowSzEL
+MAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEMMAoGA1UECxMD
+RUNBMRQwEgYDVQQDEwtFQ0EgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEArkr2eXIS6oAKIpDkOlcQZdMGdncoygCEIU+ktqY3of5SVVXU7/it7kJ1
+EUzR4ii2vthQtbww9aAnpQxcEmXZk8eEyiGEPy+cCQMllBY+efOtKgjbQNDZ3lB9
+19qzUJwBl2BMxslU1XsJQw9SK10lPbQm4asa8E8e5zTUknZBWnECAwEAAaOBizCB
+iDAfBgNVHSMEGDAWgBT2uAQnDlYW2blj2f2hVGVBoAhILzAdBgNVHQ4EFgQU9rgE
+Jw5WFtm5Y9n9oVRlQaAISC8wDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
+Af8wJQYDVR0gBB4wHDAMBgpghkgBZQMCAQwBMAwGCmCGSAFlAwIBDAIwDQYJKoZI
+hvcNAQEFBQADgYEAHh0EQY2cZ209aBb5q0wW1ER0dc4OGzsLyqjHfaQ4TEaMmUwL
+AJRta/c4KVWLiwbODsvgJk+CaWmSL03gRW/ciVb/qDV7qh9Pyd1cOlanZTAnPog2
+i82yL3i2fK9DCC84uoxEQbgqK2jx9bIjFTwlAqITk9fGAm5mdT84IEwq1Gw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
@@ -1512,56 +3303,234 @@ eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+MIIDIjCCAougAwIBAgIQNKT/9jCvTKU8MxdCoZRmdTANBgkqhkiG9w0BAQUFADCB
+xDELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
+CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhh
+d3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
+ZS5jb20wHhcNOTYwODAxMDAwMDAwWhcNMjEwMTAxMjM1OTU5WjCBxDELMAkGA1UE
+BhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
+MR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlm
+aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZl
+ciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8w
+DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
+/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF
+/rFrKbYvScg71CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982
+OsK1ZiIS1ocNAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF
+BQADgYEAvkBpQW/G28GnvwfAReTQtUMeTJUzNelewj4o9qgNUNX/4gwP/FACjq6R
+ua00io2fJ3GqGcxL6ATK1BdrEhrWxl/WzV7/iXa/2EjYWb0IiokdV81FHlK6EpqE
++hiJX+j5MDVqAWC5mYCDhQpu2vTJj15zLTFKY6B08h+LItIpPus=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
-ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
-TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
-NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
-VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
-Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
-N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
-iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
-YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
-axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
-yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
-ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
-VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
-BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
-QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
-ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
-YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
-QErNaLly7HF27FSOH4UMAWr6pjisH8SE
+MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
+IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
+DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
+EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
+ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
+dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
+QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
+dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
+wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
+G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
+AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
+c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
+9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
+gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
+MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
+UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
+NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
+dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
+dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
+38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
+KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
+DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
+qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
+JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
+PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
+BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
+jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
+eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
+vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
+IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
+i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
+O+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
+206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
+KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
+JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
+BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
+Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
+PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
+Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
+Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
+o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
+YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
+FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
+xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
+LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
+obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
+CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
+IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
+DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
+AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
+Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
+AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
+Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
+RY8mkaKO/qk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
+IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
+cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
+MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
+bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
+DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
+WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
+Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
+HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
+z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
+SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
+AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
+KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
+AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
+BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
+VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
+ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
+ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
+/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
+A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
+k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
+iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
+2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIQMDAwMDk3Mzc1NzM4NjAwMDANBgkqhkiG9w0BAQUFADBV
+MQswCQYDVQQGEwJGUjETMBEGA1UEChMKQ2VydGlOb21pczEcMBoGA1UECxMTQUMg
+UmFjaW5lIC0gUm9vdCBDQTETMBEGA1UEAxMKQ2VydGlOb21pczAeFw0wMDExMDkw
+MDAwMDBaFw0xMjExMDkwMDAwMDBaMFUxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpD
+ZXJ0aU5vbWlzMRwwGgYDVQQLExNBQyBSYWNpbmUgLSBSb290IENBMRMwEQYDVQQD
+EwpDZXJ0aU5vbWlzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SWb
+4mS5RXB3ENSIcfrEzCj/TRUQuT1tMCU0YUfXFSgcPdWglIzCv3kvh07QoB+8xMl+
+fQHvSSduAxnNewz0GBY9rApCPKlP6CcnJr74OSVZIiWt9wLfl4wwhNhZOiikIpZp
+EdOXWqRc84P5cUlN3Lwmr1sjCWmHfTSS4cAKxfDbFLfE61etosyoFZUTQbIhb1Bf
+JL5xRXAUZudQiU42n/yAoSUrN4FLUfPQNlOe1AB81pIgX8g2ojwxDjfgqSs1JmBF
+uLKJ45uVLEenQBPmQCGjL3maV86IRmR3a9UGlgvKAk0NBdh8mrQyQvcUlLBIQBCm
+l7wppt6maQHUNEPQSwIDAQABoz8wPTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQU+F4ho6ijFeb4tRG7/kIEXU2OgnowDQYJKoZIhvcNAQEF
+BQADggEBACe9FJayK6bXkJQrilBFMh75QPdFOks9PJuo86OMUlBDZGYFTCh9Arex
+N3KYCnAEzazYIALwr7eASJJDIQMu1Q+pkx/7ACde4kP47F27M2rm+v5HnGooCLz2
+s7Fe/WUycTQqgwF5lNp03m1ce/TvovgkEZeVN5wM/7+SsZLJGDigXGeq48j2g2hn
+8OckX9Ciyo0U3/1IVeigNBisiaOlsHSZOEPBZQRiZULob+NVbXVPo8nM1OyP3aHI
+LQex1yYcCr9m93nOiZyKkur3Uedf1yMTBe+fflnPFKGYnVqvTGXCKVdHzQBfpILA
+AuaC+5ykZhSiSMf8nmL2oPMcLO7YQw4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
+ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
+MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
+MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
+iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
+vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
+0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
+OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
+BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
+FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
+GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
+zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
+1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
+f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
+jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
+ZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
+YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
+MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
+MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
+ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
+K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
+d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
+DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
+yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
+VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
+MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
+KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
+ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
+b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
+aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
+Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
+cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
+BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
+L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
+eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
+b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
+bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
+ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
+FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
+qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
+kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
+5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
+evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
+ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
+XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
+xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET
+MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0
+MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBw
+bGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
+FjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg+
++FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1
+XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9w
+tj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IW
+q6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKM
+aLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3
+R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAE
+ggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93
+d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNl
+IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0
+YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBj
+b25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZp
+Y2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBc
+NplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQP
+y3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7
+R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4Fg
+xhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oP
+IQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AX
+UKqK1drk/NAJBzewdXUh
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB
@@ -1590,6 +3559,278 @@ mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU
Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
+MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
+G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
+VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
+6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
+2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
+SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
+AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
+cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
+b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
+BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
+MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
+MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
+2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
+3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
+AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
+GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
+Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
+WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
+rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
+ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
+Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
+PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
+/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
+oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
+yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
+EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
+A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
+MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
+BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
+g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
+fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
+WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
+B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
+hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
+TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
+mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
+ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
+4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
+8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAqWgAwIBAgIQEj3w59oqIkekOIngiu7JZzANBgkqhkiG9w0BAQUFADCB
+0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3Rl
+IFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1m
+cmVlbWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIxMDEwMTIzNTk1
+OVowgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNV
+BAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNV
+BAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1Ro
+YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29u
+YWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
+gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Z
+hx2G6qPduc6WZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56
+fAylS1V/Bhkpf56aJtVquzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYD
+VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAemGDU5fJUYLA9GoFkR/db
+o9lvwykLp9KpgUn2w22FFChFRAH0cVyVLhQPGivRqWvBX2c9FvFyIK++FsoOMF/J
+y6WTLMNnVB5yIoojdmyUHVFSbJ3E4EcC18y/8IB7GG4l3GJh1qb+wR1/2bP9jVxF
+EFrGZWSa6yz1A0/WSGL7Lg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
+YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
+kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
+QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
+6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
+yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
+QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
+tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
+QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
+Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
+olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
+x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
+MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
+MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
+dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
+cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
+DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
+gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
+yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
+L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
+EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
+7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
+QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
+qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEUDCCA7mgAwIBAgIJAN4ppNGwj6yIMA0GCSqGSIb3DQEBBAUAMIHMMQswCQYD
+VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j
+aXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5jLjEpMCcGA1UECxMgTGluZGVu
+IExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIExpbmRlbiBMYWIg
+Q2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZIhvcNAQkBFhBjYUBsaW5kZW5s
+YWIuY29tMB4XDTA1MDQyMTAyNDAzMVoXDTI1MDQxNjAyNDAzMVowgcwxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRkwFwYDVQQKExBMaW5kZW4gTGFiLCBJbmMuMSkwJwYDVQQLEyBMaW5kZW4g
+TGFiIENlcnRpZmljYXRlIEF1dGhvcml0eTEpMCcGA1UEAxMgTGluZGVuIExhYiBD
+ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgkqhkiG9w0BCQEWEGNhQGxpbmRlbmxh
+Yi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKXh1MThucdTbMg9bYBO
+rAm8yWns32YojB0PRfbq8rUjepEhTm3/13s0u399Uc202v4ejcGhkIDWJZd2NZMF
+oKrhmRfxGHSKPCuFaXC3jh0lRECj7k8FoPkcmaPjSyodrDFDUUuv+C06oYJoI+rk
+8REyal9NwgHvqCzOrZtiTXAdAgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUO1zK2e1f
+1wO1fHAjq6DTJobKDrcwggEBBgNVHSMEgfkwgfaAFDtcytntX9cDtXxwI6ug0yaG
+yg63oYHSpIHPMIHMMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEW
+MBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5j
+LjEpMCcGA1UECxMgTGluZGVuIExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAn
+BgNVBAMTIExpbmRlbiBMYWIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZI
+hvcNAQkBFhBjYUBsaW5kZW5sYWIuY29tggkA3imk0bCPrIgwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQQFAAOBgQA/ZkgfvwHYqk1UIAKZS3kMCxz0HvYuEQtviwnu
+xA39CIJ65Zozs28Eg1aV9/Y+Of7TnWhW+U3J3/wD/GghaAGiKK6vMn9gJBIdBX/9
+e6ef37VGyiOEFFjnUIbuk0RWty0orN76q/lI/xjCi15XSA/VSq2j4vmnwfZcPTDu
+glmQ1A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
+EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
+bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
+YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
+Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
+MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
+A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
+YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
+VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
+isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
+Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
+QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
+bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
+yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
+AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
+cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
+BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
+cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
+U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
+YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
+SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
+t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
+mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
+K+9A46sd33oqK8n8
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJKUDEO
+MAwGA1UEChMFTEdQS0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMB4XDTA2
+MDMzMTE1MDAwMFoXDTE2MDMzMTE0NTk1OVowOTELMAkGA1UEBhMCSlAxDjAMBgNV
+BAoTBUxHUEtJMRowGAYDVQQLExFBcHBsaWNhdGlvbiBDQSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBALk1xhD422jbB8RATLAdHjbcw0H2z1UVbQh/
+XMZoVeXnV/GWUebhTXgPbkAVcDtl/hHf59PWWDU74Z8C/JRSRi6znmCbAp7JgtL2
+464JT4REtmKbAFFouDqt7GTRMkvplESDtA7OIYlrsDbAmMZLnMI+W2AqCTErLatM
+3rGg/VhWwoMdILzEhAmHe6iVl8YljoPgPpMN0cd9c6mo/BkAQC4iuHozQfV4/Vpx
+54LZSIhc7KiFhy1tgIlnGmm+EMBaju2IfT5vLDhrN85H2KIxMN5+U2Vsi4ZTQSBs
+vUilfq8AWlYSWIHR3IlZ+bXu+E2a2EQpi3mn9yKq6nxctBaIIA0CAwEAAaOBsjCB
+rzAdBgNVHQ4EFgQUf7hdjsQYa8Z9zC7prs405xdd4KEwDgYDVR0PAQH/BAQDAgEG
+MEwGA1UdHwRFMEMwQaA/oD2kOzA5MQswCQYDVQQGEwJKUDEOMAwGA1UEChMFTEdQ
+S0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMA8GA1UdEwEB/wQFMAMBAf8w
+HwYDVR0jBBgwFoAUf7hdjsQYa8Z9zC7prs405xdd4KEwDQYJKoZIhvcNAQEFBQAD
+ggEBADzYczZABkhKVBn1J0g5JaVuQue2zRvLOTS3m+xPKr535MqE/B3rmyJA1fT7
+aIdy/Eddag5SSuO1XUjGIpbmM21tq/bN18skWoyoRZ4+YYJ9lNUF8Bo1X3EvLlS1
+QQXvhg1S75yYG/EsTDrR84bTjD56L4ZFjoMyJlu/U8oOUVbcmsJaMBkNp57Vqpsg
+OWl4IfSXbdEOEUwu0xtasPmXeFwqj1Jl7kxCJcI3MA5tKzWUgwbor0U7BGanMLv5
+4CE7Y259RF06alPvERck/VSyWmxzViHJbC2XpEKzJ2EFIWNt6ii8TxpvQtyYq1XT
+HhvAkj+bweY7F1bixJhDJe62ywA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
+CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
+ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
+QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
+NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
+ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
+QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
+qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
+fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
+Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
+Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
+54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
+MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
+ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
+YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
+A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
+rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
+pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
+lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
+YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
+7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
+YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
+xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
+unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
+Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
+ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
+gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
+jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
+W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
+RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
+MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
+BYn8eNZcLCZDqQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
@@ -1608,306 +3849,165 @@ I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
-NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
-VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
-bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
-H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
-4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
-BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
-EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
-FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
-lA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
-YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
-FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
-J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
-r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
+MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
+dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
+bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
+QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
+BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
+IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
+bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
+Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
+Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
+Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
+ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
+b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
+KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
+YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
+GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
+BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
+3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
+YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
+rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
+ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
+oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
+b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
+AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
+GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
+G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
+l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
+smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
-lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
-AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
-HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
-qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
-cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
-cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
-T8qAkbYp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
+zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
+TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
+NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
+Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
+TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
+MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
+Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
+IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
+dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
+V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
+GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
+v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
+AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
+Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
+76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
+OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
+ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
+yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
+buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
+2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
+Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
+ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
+MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
+yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
+VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
+nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
+XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
+vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
+Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
+N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
+nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
-DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
-aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
-MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
-QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
-b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
-ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
-/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
-58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
-halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
-1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
-ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
-mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
-kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
-dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
-ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
-B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
+MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
+b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
+AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
+aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
+j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
+f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
+IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
+FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
+QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
+/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
+k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
+MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
+seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
+hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
+DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
+B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
-b290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEwOTIzMTMxODE3WjB1MQswCQYDVQQG
-EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
-Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQg
-LSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g
-5DY1Hw7hgCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZs
-jqBeynX8T90vFILqsY2K5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfH
-HB67Af+g7u0dEHdDW7lwy81MwFYxBTRy9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAEgfwwgfkwgfYGDSsGAQQB
-vj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3eXN0YXdp
-b255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2pp
-IGRsYSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENB
-IHcgaGllcmFyY2hpaSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3
-LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQw
-HwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQbsa8wHQYDVR0OBBYEFMODHtVZ
-d1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQBFIGh8Jpxt87A
-gSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
-f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIis
-TsytFzVP32/W+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB
-3vSaoYg+wdkcvb6souMJzuc2uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U
-1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uftXncwKJrMiE3lvgOOBITRzcahirL
-er4c
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
+IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
+R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
+PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
+Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
+TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
+5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
+S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
+2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
+EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
+EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
+/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
+A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
+abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
+I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
+4iIprn2DQKi6bA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQ
@@ -1939,90 +4039,166 @@ aLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF6caa
wBFjzz5ePr3WHV1wA7EY6oT4zBx+2gT9XBTB
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
-QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG
-A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
-BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln
-bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo
-VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs
-Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI
-iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD
-VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0
-oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey
-LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF
-BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi
-UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg
-T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0
-b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS
-C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw
-CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt
-iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M
-eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71
-iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp
-ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
-hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
+MIIC+TCCAmKgAwIBAgIENvEbGTANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJF
+UzENMAsGA1UEChMERk5NVDEYMBYGA1UECxMPRk5NVCBDbGFzZSAyIENBMB4XDTk5
+MDMxODE0NTYxOVoXDTE5MDMxODE1MjYxOVowNjELMAkGA1UEBhMCRVMxDTALBgNV
+BAoTBEZOTVQxGDAWBgNVBAsTD0ZOTVQgQ2xhc2UgMiBDQTCBnTANBgkqhkiG9w0B
+AQEFAAOBiwAwgYcCgYEAmD+tGTaTPT7+dkIU/TVv8fqtInpY40bQXcZa+WItjzFe
+/rQw/lB0rNadHeBixkndFBJ9cQusBsE/1waH4JCJ1uXjA7LyJ7GfM8iqazZKo8Q/
+eUGdiUYvKz5j1DhWkaodsQ1CdU3zh07jD03MtGy/YhOH6tCbjrbi/xn0lAnVlmEC
+AQOjggEUMIIBEDARBglghkgBhvhCAQEEBAMCAAcwWAYDVR0fBFEwTzBNoEugSaRH
+MEUxCzAJBgNVBAYTAkVTMQ0wCwYDVQQKEwRGTk1UMRgwFgYDVQQLEw9GTk1UIENs
+YXNlIDIgQ0ExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5OTAzMTgxNDU2
+MTlagQ8yMDE5MDMxODE0NTYxOVowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFECa
+dkSXdAfErBTLHo1POkV8MNdhMB0GA1UdDgQWBBRAmnZEl3QHxKwUyx6NTzpFfDDX
+YTAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBAGFMoHxZY1tm+O5lE85DgEe5sjXJyITHa3NgReSdN531jiW5
++aqqyuP4Q5wvoIkFsUUylCoeA41dpt7PV5Xa3yZgX8vflR64zgjY+IrJT6lodZPj
+LwVMZGACokIeb4ZoZVUO2ENv8pExPqNHPCgFr0W2nSJMJntLfVsV+RlG3whd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
+DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
+ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
+b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
+qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
+uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
+Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
+pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
+5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
+UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
+GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
+5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
+6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
+eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
+B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
+BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
+L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
+SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
+CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
+5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
+IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
+gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
+vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
+bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
+N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
+Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
+ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDcDCCAligAwIBAgIBBTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJVUzEY
+MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
+A1BLSTEWMBQGA1UEAxMNRG9EIFJvb3QgQ0EgMjAeFw0wNDEyMTMxNTAwMTBaFw0y
+OTEyMDUxNTAwMTBaMFsxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVy
+bm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRYwFAYDVQQDEw1Eb0Qg
+Um9vdCBDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCzB9o07
+rP8/PNZxvrh0IgfscEEV/KtA4weqwcPYn/7aTDq/P8jYKHtLNgHArEUlw9IOCo+F
+GGQQPRoTcCpvjtfcjZOzQQ84Ic2tq8I9KgXTVxE3Dc2MUfmT48xGSSGOFLTNyxQ+
+OM1yMe6rEvJl6jQuVl3/7mN1y226kTT8nvP0LRy+UMRC31mI/2qz+qhsPctWcXEF
+lrufgOWARVlnQbDrw61gpIB1BhecDvRD4JkOG/t/9bPMsoGCsf0ywbi+QaRktWA6
+WlEwjM7eQSwZR1xJEGS5dKmHQa99brrBuKG/ZTE6BGf5tbuOkooAY7ix5ow4X4P/
+UNU7ol1rshDMYwIDAQABoz8wPTAdBgNVHQ4EFgQUSXS7DF66ev4CVO97oMaVxgmA
+cJYwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAJiRjT+JyLv1wGlzKTs1rLqzCHY9cAmS6YREIQF9FHYb7lFsHY0VNy17MWn0
+mkS4r0bMNPojywMnGdKDIXUr5+AbmSbchECV6KjSzPZYXGbvP0qXEIIdugqi3VsG
+K52nZE7rLgE1pLQ/E61V5NVzqGmbEfGY8jEeb0DU+HifjpGgb3AEkGaqBivO4XqS
+tX3h4NGW56E6LcyxnR8FRO2HmdNNGnA5wQQM5X7Z8a/XIA7xInolpHOZzD+kByeW
+qKKV7YK5FtOeC4fCwfKI9WLfaN/HvGlR7bFc3FRUKQ8JOZqsA8HbDE2ubwp6Fknx
+v5HSOJTT9pUst2zJQraNypCNhdk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBBDANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN
+MAsGA1UECgwES0lTQTEuMCwGA1UECwwlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkgQ2VudHJhbDEWMBQGA1UEAwwNS0lTQSBSb290Q0EgMTAeFw0wNTA4MjQw
+ODA1NDZaFw0yNTA4MjQwODA1NDZaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKDARL
+SVNBMS4wLAYDVQQLDCVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50
+cmFsMRYwFAYDVQQDDA1LSVNBIFJvb3RDQSAxMIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEAvATk+hM58DSWIGtsaLv623f/J/es7C/n/fB/bW+MKs0lCVsk
+9KFo/CjsySXirO3eyDOE9bClCTqnsUdIxcxPjHmc+QZXfd3uOPbPFLKc6tPAXXdi
+8EcNuRpAU1xkcK8IWsD3z3X5bI1kKB4g/rcbGdNaZoNy4rCbvdMlFQ0yb2Q3lIVG
+yHK+d9VuHygvx2nt54OJM1jT3qC/QOhDUO7cTWu8peqmyGGO9cNkrwYV3CmLP3WM
+vHFE2/yttRcdbYmDz8Yzvb9Fov4Kn6MRXw+5H5wawkbMnChmn3AmPC7fqoD+jMUE
+CSVPzZNHPDfqAmeS/vwiJFys0izgXAEzisEZ2wIBA6MyMDAwHQYDVR0OBBYEFL+2
+J9gDWnZlTGEBQVYx5Yt7OtnMMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF
+BQADggEBABOvUQveimpb5poKyLGQSk6hAp3MiNKrZr097LuxQpVqslxa/6FjZJap
+aBV/JV6K+KRzwYCKhQoOUugy50X4TmWAkZl0Q+VFnUkq8JSV3enhMNITbslOsXfl
+BM+tWh6UCVrXPAgcrnrpFDLBRa3SJkhyrKhB2vAhhzle3/xk/2F0KpzZm4tfwjeT
+2KM3LzuTa7IbB6d/CVDv0zq+IWuKkDsnSlFOa56ch534eJAx7REnxqhZvvwYC/uO
+fi5C4e3nCSG9uRPFVmf0JqZCQ5BEVLRxm3bkGhKsGigA35vB1fjbXKP4krG9tNT5
+UNkAAk/bg9ART6RCVmE6fhMy04Qfybo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
+ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
+ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
+dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
+OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
+8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
+Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
+hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
+6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
+DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
+AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
+bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
+ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
+qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
+0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
+sSi6
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
-b290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
-EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
-Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
-LSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7B
-rBlbN5maM5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRA
-spEXE4gvwb08ASY6w5s+HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8w
-nfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxWCeol9IekpBRVmuuSA6QG0Jkm+pGDJ05y
-j2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9JyN0ag1yII/LPx8HK5J4
-W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3xW20QjQcS
-ZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHk
-MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
-IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
-Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
-aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
-cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
-cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
-HQ4EFgQUwGxGyl2CfpYHRonE82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1
-TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkxUGY7U9kVrLI71xBgoNVyzXTiMNDB
-vjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsanot1Xt6j0ZDC+03Fj
-LHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G22Ohu
-+EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqW
-uHitKQDVtcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6
-NA9GRTCNxm/dXlcwnmY=
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
-b290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
-EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
-Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
-LSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3
-LanJtdueNe6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP
-6KZTU0DixOrV+K7iWaqAiQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6H
-dbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPEOpO94mAKcBUhk6T/ki0evXX/ZvvktwmF
-3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Dbw34hA1A+ckTwhxzecrB8
-TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC3P8QqoK4
-ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHk
-MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
-IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
-Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
-aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
-cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
-cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
-HQ4EFgQUXvthcPHlH5BgGhlMErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIc
-e95Mvn710KCAISA0CuHD4aznTU6pLoCDShW47OR+GTpJUm1coTcUqlBHV9mra4VF
-rBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJGdsJF/XU/7smummgj
-MNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oFJTlp
-uxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1D
-OcePEhKz1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BX
-WCW+KxwiBrtQTXv4dTE=
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
+ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
+aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
+ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
+NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
+A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
+VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
+SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
+VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
+w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
+mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
+4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
+4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
+EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
+SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
+ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
+vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
+Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
+/L7fCg0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
@@ -2053,75 +4229,266 @@ G7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmABKK6o
3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
-QSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloXDTExMDkyMzExMTgxN1owdjELMAkG
-A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
-BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0MgU2ln
-bmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJY
-rISEtSsduHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ1
-2FJarD1X6mSQ4cfN/60vLfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjR
-AM0tdwXSnzuTEunfw0Oup559y3Iqxg1cExflB6cfAgMBAAGjggGXMIIBkzBBBgNV
-HR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0v
-Y3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-AQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYB
-BQUHAgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVu
-dGVtICJQb2xpdHlrYSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5p
-ZSBjemFzZW0iLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVw
-b3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJfMS5wZGYwHwYDVR0jBBgwFoAU
-w4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavOYd9u9tej53vW
-XwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
-+z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMb
-skF8I31JxIeBvueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR
-+7KtwMg4sFDJZ8RNgOf7tbA=
+MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
+HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
+qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
+cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
+cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
+T8qAkbYp
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
-UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v
-U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN
-AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw
-MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD
-VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM
-BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m
-cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws
-ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx
-8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/
-s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c
-9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V
-pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+
-pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC
-aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y
-CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ
-6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG
-A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0
-MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF
-AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob
-sRQ=
+MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
+2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
+2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
+MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMTQxWhcNMjUxMjI5
+MTEyMTQxWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM8g89BgSKoCxBXZ5C+NnlURLSnM
+UWZoAGXaFFWf6q7f69uN1nXaUfTEzPstvTUfE7fpZmF8lEDz+2AvjBg086hVnra0
+b0APA0VnanJyW2ZIlkKFGMCB4WJqh7JB7i45jITVXthPV2vsjlKM97Pnnhimz8Fb
+r+RZcsz69vRptMqxAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQUL8zsbGe+T/iqPIiN
+EvvHnUxb9F4wggFGBgNVHSMEggE9MIIBOYAUL8zsbGe+T/iqPIiNEvvHnUxb9F6h
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMSBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg
+hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG
++EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB
+MS5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
+L3Jldm9jYXRpb25DTEFTRUExLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMS5odG1sPzA8BglghkgB
+hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB
+MS5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy
+MDAyL2lwczIwMDJDTEFTRUExLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw
+cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUExLmNybDAvBggrBgEFBQcBAQQjMCEw
+HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
+gYEAGY2khC4v4mlenqRcy8Mn8mcWca88t4CY9LCJMqlIt7i559BNkMMB66tXsNp9
+N2QhnTordKOjkdgZJmCb7DUdMJEQQT0Y5W7JA6WvHatAFu8feRJ4ImaTjI0Xz3Dd
+Jbz6O++igCw0l4EY5gayn2BFpAm+7ZpEcdpR/OCOH80lNDo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
+SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
+Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
+BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
+cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
+vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
+Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
+0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
+4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
+eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
+R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
+A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
+dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
+Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
+WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
+HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
+KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
+Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
+wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
+9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
+jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
+aQNiuJkFBT1reBK9sG9l
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
+MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
+EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
+BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
+xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
+87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
+2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
+WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
+0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
+A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
+pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
+ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
+aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
+hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
+hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
+P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
+iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
+xqE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
+ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
+MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
+dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
+c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
+UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
+58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
+o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
+MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
+aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
+A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
+Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
+8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
+MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
+YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
+dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
+BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
+papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
+DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
+KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
+XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFUjCCBDqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN
+MAsGA1UEChMES0lTQTEuMCwGA1UECxMlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkgQ2VudHJhbDEWMBQGA1UEAxMNS0lTQSBSb290Q0EgMzAeFw0wNDExMTkw
+NjM5NTFaFw0xNDExMTkwNjM5NTFaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKEwRL
+SVNBMS4wLAYDVQQLEyVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50
+cmFsMRYwFAYDVQQDEw1LSVNBIFJvb3RDQSAzMIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEA3rrtF2Wu0b1KPazbgHLMWOHn4ZPazDB6z+8Lri2nQ6u/p0LP
+CFYIpEcdffqG79gwlyY0YTyADvjU65/8IjAboW0+40zSVU4WQDfC9gdu2we1pYyW
+geKbXH6UYcjOhDyx+gDmctMJhXfp3F4hT7TkTvTiF6tQrxz/oTlYdVsSspa5jfBw
+YkhbVigqpYeRNrkeJPW5unu2UlFbF1pgBWycwubGjD756t08jP+J3kNwrB248XXN
+OMpTDUdoasY8GMq94bS+DvTQ49IT+rBRERHUQavo9DmO4TSETwuTqmo4/OXGeEeu
+dhf6oYA3BgAVCP1rI476cg2V1ktisWjC3TSbXQIBA6OCAg8wggILMB8GA1UdIwQY
+MBaAFI+B8NqmzXQ8vmb0FWtGpP4GKMyqMB0GA1UdDgQWBBSPgfDaps10PL5m9BVr
+RqT+BijMqjAOBgNVHQ8BAf8EBAMCAQYwggEuBgNVHSAEggElMIIBITCCAR0GBFUd
+IAAwggETMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LnJvb3RjYS5vci5rci9yY2Ev
+Y3BzLmh0bWwwgd4GCCsGAQUFBwICMIHRHoHOx3QAIMd4yZ3BHLKUACCs9cd4x3jJ
+ncEcx4WyyLLkACgAVABoAGkAcwAgAGMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGkA
+cwAgAGEAYwBjAHIAZQBkAGkAdABlAGQAIAB1AG4AZABlAHIAIABFAGwAZQBjAHQA
+cgBvAG4AaQBjACAAUwBpAGcAbgBhAHQAdQByAGUAIABBAGMAdAAgAG8AZgAgAHQA
+aABlACAAUgBlAHAAdQBiAGwAaQBjACAAbwBmACAASwBvAHIAZQBhACkwMwYDVR0R
+BCwwKqQoMCYxJDAiBgNVBAMMG+2VnOq1reygleuztOuztO2YuOynhO2dpeybkDAz
+BgNVHRIELDAqpCgwJjEkMCIGA1UEAwwb7ZWc6rWt7KCV67O067O07Zi47KeE7Z2l
+7JuQMA8GA1UdEwEB/wQFMAMBAf8wDAYDVR0kBAUwA4ABADANBgkqhkiG9w0BAQUF
+AAOCAQEAz9b3Dv2wjG4FFY6oXCuyWtEeV6ZeGKqCEQj8mbdbp+PI0qLT+SQ09+Pk
+rolUR9NpScmAwRHr4inH9gaLX7riXs+rw87P7pIl3J85Hg4D9N6QW6FwmVzHc07J
+pHVJeyWhn4KSjU3sYcUMMqfHODiAVToqgx2cZHm5Dac1Smjvj/8F2LpOVmHY+Epw
+mAiWk9hgxzrsX58dKzVPSBShmrtv7tIDhlPxEMcHVGJeNo7iHCsdF03m9VrvirqC
+6HfZKBF+N4dKlArJQOk1pTr7ZD7yXxZ683bXzu4/RB1Fql8RqlMcOh9SUWJUD6OQ
+Nc9Nb7rHviwJ8TX4Absk3TC8SA/u2Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgIQKTZHquOKrIZKI1byyrdhrzANBgkqhkiG9w0BAQUFADBO
+MQswCQYDVQQGEwJ1czEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQ0wCwYDVQQL
+EwRGQkNBMRYwFAYDVQQDEw1Db21tb24gUG9saWN5MB4XDTA3MTAxNTE1NTgwMFoX
+DTI3MTAxNTE2MDgwMFowTjELMAkGA1UEBhMCdXMxGDAWBgNVBAoTD1UuUy4gR292
+ZXJubWVudDENMAsGA1UECxMERkJDQTEWMBQGA1UEAxMNQ29tbW9uIFBvbGljeTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJeNvTMn5K1b+3i9L0dHbsd4
+6ZOcpN7JHP0vGzk4rEcXwH53KQA7Ax9oD81Npe53uCxiazH2+nIJfTApBnznfKM9
+hBiKHa4skqgf6F5PjY7rPxr4nApnnbBnTfAu0DDew5SwoM8uCjR/VAnTNr2kSVdS
+c+md/uRIeUYbW40y5KVIZPMiDZKdCBW/YDyD90ciJSKtKXG3d+8XyaK2lF7IMJCk
+FEhcVlcLQUwF1CpMP64Sm1kRdXAHImktLNMxzJJ+zM2kfpRHqpwJCPZLr1LoakCR
+xVW9QLHIbVeGlRfmH3O+Ry4+i0wXubklHKVSFzYIWcBCvgortFZRPBtVyYyQd+sC
+AwEAAaN7MHkwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFC9Yl9ipBZilVh/72at17wI8NjTHMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJ
+KwYBBAGCNxUCBBYEFHa3YJbdFFYprHWF03BjwbxHhhyLMA0GCSqGSIb3DQEBBQUA
+A4IBAQBgrvNIFkBypgiIybxHLCRLXaCRc+1leJDwZ5B6pb8KrbYq+Zln34PFdx80
+CTj5fp5B4Ehg/uKqXYeI6oj9XEWyyWrafaStsU+/HA2fHprA1RRzOCuKeEBuMPdi
+4c2Z/FFpZ2wR3bgQo2jeJqVW/TZsN5hs++58PGxrcD/3SDcJjwtCga1GRrgLgwb0
+Gzigf0/NC++DiYeXHIowZ9z9VKEDfgHLhUyxCynDvux84T8PCVI8L6eaSP436REG
+WOE2QYrEtr+O3c5Ks7wawM36GpnScZv6z7zyxFSjiDV2zBssRm8MtNHDYXaSdBHq
+S4CNHIkRi+xb/xfJSPzn4AYR4oRe
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS
+S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
+SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx
+OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry
+b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC
+VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE
+sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F
+ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY
+KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG
++7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG
+HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P
+IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M
+733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk
+Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW
+AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5
+mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa
+XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ
+qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
@@ -2149,319 +4516,163 @@ BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
ZQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
+MIIIQTCCB6qgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr
+SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG
+A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMjY0
+M1oXDTI1MTIyOTExMjY0M1owggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy
+Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l
+dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw
+cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh
+bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU
+aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B
+CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+0umTdn+FPP2gAb0RL0ZCDyt/BZvGa/VRcayaUh8flSfMkO+WP45RNv0WAM43pSGU
+Rmvt5P+hfuqf0aKbOPMTxLmYumVFQ/nXvRWdlC4AYN6YGrk8yfXh/NbEJN/n48iE
+GRK0HFyz9eIWYSdg8vAt5PDzrPigeYSdReL2AfBE5ZECAwEAAaOCBIkwggSFMB0G
+A1UdDgQWBBSR2UK8nKnK0Bw3E1JXFqANHikdPjCCAVAGA1UdIwSCAUcwggFDgBSR
+2UK8nKnK0Bw3E1JXFqANHikdPqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
+BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ
+UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp
+cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg
+Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD
+EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w
+HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
+BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
+BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
+FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD
+VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw
+cy5lczBIBglghkgBhvhCAQ0EOxY5VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
+IGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIBAgQdFhto
+dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wQQYJYIZIAYb4QgEEBDQWMmh0dHBz
+Oi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEYG
+CWCGSAGG+EIBAwQ5FjdodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
+aW9uVGltZXN0YW1waW5nLmh0bWw/MEMGCWCGSAGG+EIBBwQ2FjRodHRwczovL3d3
+dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsVGltZXN0YW1waW5nLmh0bWw/MEEGCWCG
+SAGG+EIBCAQ0FjJodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1l
+c3RhbXBpbmcuaHRtbDCBgQYDVR0fBHoweDA4oDagNIYyaHR0cHM6Ly93d3cuaXBz
+LmVzL2lwczIwMDIvaXBzMjAwMlRpbWVzdGFtcGluZy5jcmwwPKA6oDiGNmh0dHBz
+Oi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNy
+bDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
+cy8wDQYJKoZIhvcNAQEFBQADgYEAxKMCdGABCUwYXU900W1zDCfTSDC1TxFVGRnH
+I4soqfp4D34sJ/adkgD2GMgkAMVf+C1MY/yQFV4nmOal9K7SNrG1JR8OeDoRjpM4
+rtO9qYbuHD3TW47/y/aZSZxP4ccocGpPOkvqfrnndKRKY0WUk/7Qg5aqpIXni2Gg
+olkTZbQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
+Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g
+Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0
+aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa
+Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg
+SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo
+aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp
+ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z
+7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//
+DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx
+zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8
+hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs
+4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u
+gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY
+NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3
+j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG
+52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB
+echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI
+zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy
+wy39FCqQmbkHzJ8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
+TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
+MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
+ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
+ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
+9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
+hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
+tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
+BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
+SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
+OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
+cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
+7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
+/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
+eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
+u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
+7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
+hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
+1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
+OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
+2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
+O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
+AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
+Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
+LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
+oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
+MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
+NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
+cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
+2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
+JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
+Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
+n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
+PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
+MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
+ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
+TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
+NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
+IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
+VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
+Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
+N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
+iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
+YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
+axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
+yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
+AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
+ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
+VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
+BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
+IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
+QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
+ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
+YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
+QErNaLly7HF27FSOH4UMAWr6pjisH8SE
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
@@ -2495,327 +4706,37 @@ OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
+MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
+IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
+WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
+ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
+IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
+IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
+6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
+jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
+izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
+zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
+pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
+KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
+ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
+AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
+ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
+A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
+uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
+jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
+u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
+YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
+puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
+icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
+DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
+kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
+Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
@@ -2862,100 +4783,73 @@ um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
-DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
-Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
-OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
-bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
-dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
-18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
-yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
-LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
-A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
-zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
-BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
-GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
-cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
-HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
-CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
-BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
-cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
-YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
-YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
-ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
-00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
-cCOxgN8aIDjnfg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
+MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
+m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
+ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
+eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
+3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
+SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
+AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
+cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
+b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
+BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
+MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
+MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
+AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
+aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
+H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
+MIIEGjCCAwKgAwIBAgIDAYagMA0GCSqGSIb3DQEBBQUAMIGjMQswCQYDVQQGEwJG
+STEQMA4GA1UECBMHRmlubGFuZDEhMB8GA1UEChMYVmFlc3RvcmVraXN0ZXJpa2Vz
+a3VzIENBMSkwJwYDVQQLEyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBTZXJ2aWNl
+czEZMBcGA1UECxMQVmFybWVubmVwYWx2ZWx1dDEZMBcGA1UEAxMQVlJLIEdvdi4g
+Um9vdCBDQTAeFw0wMjEyMTgxMzUzMDBaFw0yMzEyMTgxMzUxMDhaMIGjMQswCQYD
+VQQGEwJGSTEQMA4GA1UECBMHRmlubGFuZDEhMB8GA1UEChMYVmFlc3RvcmVraXN0
+ZXJpa2Vza3VzIENBMSkwJwYDVQQLEyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBT
+ZXJ2aWNlczEZMBcGA1UECxMQVmFybWVubmVwYWx2ZWx1dDEZMBcGA1UEAxMQVlJL
+IEdvdi4gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALCF
+FdrIAzfQo0Y3bBseljDCWoUSZyPyu5/nioFgJ/gTqTy894aqqvTzJSm0/nWuHoGG
+igWyHWWyOOi0zCia+xc28ZPVec7Bg4shT8MNrUHfeJ1I4x9CRPw8bSEga60ihCRC
+jxdNwlAfZM0tOSJWiP2yY51U2kJpwMhP1xjiPshphJQ9LIDGfM6911Mf64i5psu7
+hVfvV3ZdDIvTXhJBnyHAOfQmbQj6OLOhd7HuFtjQaNq0mKWgZUZKa41+qk1guPjI
+DfxxPu45h4G02fhukO4/DmHXHSto5i7hQkQmeCxY8n0Wf2HASSQqiYe2XS8pGfim
+545SnkFLWg6quMJmQlMCAwEAAaNVMFMwDwYDVR0TAQH/BAUwAwEB/zARBglghkgB
+hvhCAQEEBAMCAAcwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBTb6eGb0tEkC/yr
+46Bn6q6cS3f0sDANBgkqhkiG9w0BAQUFAAOCAQEArX1ID1QRnljurw2bEi8hpM2b
+uoRH5sklVSPj3xhYKizbXvfNVPVRJHtiZ+GxH0mvNNDrsczZog1Sf0JLiGCXzyVy
+t08pLWKfT6HAVVdWDsRol5EfnGTCKTIB6dTI2riBmCguGMcs/OubUpbf9MiQGS0j
+8/G7cdqehSO9Gu8u5Hp5t8OdhkktY7ktdM9lDzJmid87Ie4pbzlj2RXBbvbfgD5Q
+eBmK3QOjFKU3p7UsfLYRh+cF8ry23tT/l4EohP7+bEaFEEGfTXWMB9SZZ291im/k
+UJL2mdUQuMSpe/cXjUu/15WfCdxEDx4yw8DP03kN5Mc7h/CQNIghYkmSBAQfvA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
@@ -3025,53 +4919,24 @@ zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
MBr1mmz0DlP5OlvRHA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
+MIIDQzCCAiugAwIBAgIQX/h7KCtU3I1CoxW1aMmt/zANBgkqhkiG9w0BAQUFADA1
+MRYwFAYDVQQKEw1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENB
+IDIwNDgwHhcNMDQwNTE0MjAxNzEyWhcNMjkwNTE0MjAyNTQyWjA1MRYwFAYDVQQK
+Ew1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENBIDIwNDgwggEg
+MA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCwmrmrp68Kd6ficba0ZmKUeIhH
+xmJVhEAyv8CrLqUccda8bnuoqrpu0hWISEWdovyD0My5jOAmaHBKeN8hF570YQXJ
+FcjPFto1YYmUQ6iEqDGYeJu5Tm8sUxJszR2tKyS7McQr/4NEb7Y9JHcJ6r8qqB9q
+VvYgDxFUl4F1pyXOWWqCZe+36ufijXWLbvLdT6ZeYpzPEApk0E5tzivMW/VgpSdH
+jWn0f84bcN5wGyDWbs2mAag8EtKpP6BrXruOIIt6keO1aO6g58QBdKhTCytKmg9l
+Eg6CTY5j/e/rmxrbU6YTYK/CfdfHbBcl1HP7R2RQgYCUTOG/rksc35LtLgXfAgED
+o1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJ/PI
+FR5umgIJFq0roIlgX9p7L6owEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEF
+BQADggEBAJ2dhISjQal8dwy3U8pORFBi71R803UXHOjgxkhLtv5MOhmBVrBW7hmW
+Yqpao2TB9k5UM8Z3/sUcuuVdJcr18JOagxEu5sv4dEX+5wW4q+ffy0vhN4TauYuX
+cB7w4ovXsNgOnbFp1iqRe6lJT37mjpXYgyc81WhJDtSd9i7rp77rMKSsH0T8lasz
+Bvt9YAretIpjsJyp8qS5UwGH0GikJ3+r/+n6yUA4iGe0OcaEb1fJU9u6ju7AQ7L4
+CYNu/2bPPu8Xs1gYJQk0XuPL1hS27PKSb3TkL4Eq1ZKR4OCXPDJoBYVL0fdX4lId
+kxpUnwVwwEpxYB5DC2Ae/qPOgRnhCzU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
@@ -3106,80 +4971,188 @@ LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
pYYsfPQS
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
+NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
+BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
+Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
+4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
+KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
+rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
+94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
+sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
+gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
+kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
+vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
+O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
+AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
+9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
+eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
+0vdXcDazv/wor3ElhVsT/h5/WrQ8
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
+MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
+IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
+dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
+li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
+rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
+WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
+F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
+xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
+Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
+dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
+ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
+IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
+c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
+ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
+KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
+KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
+y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
+dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
+VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
+MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
+fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
+7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
+cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
+mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
+xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
+SnQ2+Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
+Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
+rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
+hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
+BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
+iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
+AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
+bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
+MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
+VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
+u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
+hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
+ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
+QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
+quGnM/b9Sh/22WA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
+aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
+MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
+VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
+fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
+TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
+fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
+1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
+kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
+A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
+ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
+dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
+Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
+HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
+jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
+dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
+tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
+uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
+XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
+8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
+5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
+kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
+GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
+ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
+au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
+hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
+dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
@@ -3207,6 +5180,477 @@ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
jVaMaA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
+MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
+Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
+5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
+3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
+vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
+8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
+zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
+3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
+FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
+Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
+ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
+MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
+ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
+BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
+6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
+GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
+dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
+1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
+62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
+BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
+MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
+cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
+b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
+IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
+iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
+4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
+XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
+MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
+H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
+8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
+SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
+mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
+BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
+dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
+SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
+TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
+czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
+MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
+Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
+Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
+qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
+D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
+r33I6unUVtkOE7LFRVA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
+MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
+V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
+WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
+LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
+AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
+K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
+RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
+rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
+3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
+hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
+MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
+XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
+lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
+aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
+YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDODCCAqGgAwIBAgIQQAWyU6AaRkNQCYGPEhB27DANBgkqhkiG9w0BAQUFADCB
+zzELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3Rl
+IFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXBy
+ZW1pdW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMTAxMDEyMzU5NTla
+MIHPMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQH
+EwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQL
+Ex9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3
+dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwt
+cHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ
+Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O
+0DI3lIi1DbbZ8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8f
+AHB8Zs8QJQi6+u4A6UYDZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMB
+Af8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBALpkCujztDHJJ2+idqAtNnHHhsAI
+wk7t2pokGYf8WiOcck0I361cwzskgR1Xj7YSpSID7xK90S1elo8mJk9LG3w7oFIa
+pag3hsRHKsrdQfho9cITQSma8AyozaH8FSMC23or1GJRQkfEox/00sVNVBDr2vDM
+p083DL08yxDjGugV
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
+NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
+zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
+YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
+KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
+adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
+BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
+dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
+SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
+TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
+czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
+MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
+Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
+Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
+Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
+V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
+hjM+5i9Ibq9UkE6tsSU=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFVTCCBD2gAwIBAgIEO/OB0DANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJj
+aDEOMAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZpY2VzMSIwIAYDVQQLExlD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMRYwFAYDVQQDEw1BZG1pbi1Sb290LUNB
+MB4XDTAxMTExNTA4NTEwN1oXDTIxMTExMDA3NTEwN1owbDELMAkGA1UEBhMCY2gx
+DjAMBgNVBAoTBWFkbWluMREwDwYDVQQLEwhTZXJ2aWNlczEiMCAGA1UECxMZQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdGllczEWMBQGA1UEAxMNQWRtaW4tUm9vdC1DQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMvgr0QUIv5qF0nyXZ3PXAJi
+C4C5Wr+oVTN7oxIkXkxvO0GJToM9n7OVJjSmzBL0zJ2HXj0MDRcvhSY+KiZZc6Go
+vDvr5Ua481l7ILFeQAFtumeza+vvxeL5Nd0Maga2miiacLNAKXbAcUYRa0Ov5VZB
+++YcOYNNt/aisWbJqA2y8He+NsEgJzK5zNdayvYXQTZN+7tVgWOck16Da3+4FXdy
+fH1NCWtZlebtMKtERtkVAaVbiWW24CjZKAiVfggjsiLo3yVMPGj3budLx5D9hEEm
+vlyDOtcjebca+AcZglppWMX/iHIrx7740y0zd6cWEqiLIcZCrnpkr/KzwO135GkC
+AwEAAaOCAf0wggH5MA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIASBkTCBjjCBiwYI
+YIV0AREDAQAwfzArBggrBgEFBQcCAjAfGh1UaGlzIGlzIHRoZSBBZG1pbi1Sb290
+LUNBIENQUzBQBggrBgEFBQcCARZEaHR0cDovL3d3dy5pbmZvcm1hdGlrLmFkbWlu
+LmNoL1BLSS9saW5rcy9DUFNfMl8xNl83NTZfMV8xN18zXzFfMC5wZGYwfwYDVR0f
+BHgwdjB0oHKgcKRuMGwxFjAUBgNVBAMTDUFkbWluLVJvb3QtQ0ExIjAgBgNVBAsT
+GUNlcnRpZmljYXRpb24gQXV0aG9yaXRpZXMxETAPBgNVBAsTCFNlcnZpY2VzMQ4w
+DAYDVQQKEwVhZG1pbjELMAkGA1UEBhMCY2gwHQYDVR0OBBYEFIKf+iNzIPGXi7JM
+Tb5CxX9mzWToMIGZBgNVHSMEgZEwgY6AFIKf+iNzIPGXi7JMTb5CxX9mzWTooXCk
+bjBsMQswCQYDVQQGEwJjaDEOMAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZp
+Y2VzMSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMRYwFAYDVQQD
+Ew1BZG1pbi1Sb290LUNBggQ784HQMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0B
+AQUFAAOCAQEAeE96XCYRpy6umkPKXDWCRn7INo96ZrWpMggcDORuofHIwdTkgOeM
+vWOxDN/yuT7CC3FAaUajbPRbDw0hRMcqKz0aC8CgwcyIyhw/rFK29mfNTG3EviP9
+QSsEbnelFnjpm1wjz4EaBiFjatwpUbI6+Zv3XbEt9QQXBn+c6DeFLe4xvC4B+MTr
+a440xTk59pSYux8OHhEvqIwHCkiijGqZhTS3KmGFeBopaR+dJVBRBMoXwzk4B3Hn
+0Zib1dEYFZa84vPJZyvxCbLOnPRDJgH6V2uQqbG+6DXVaf/wORVOvF/wzzv0viM/
+RWbEtJZdvo8N3sdtCULzifnxP/V0T9+4ZQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa
+MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE
+AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8
+RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy
+cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE
+J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC
+YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0
+E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE
+G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45
+g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY
+AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV
+mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu
+8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/
+Vv4AEbT8dNfEeFxrkDbh
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
+YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
+aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
+Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
+IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
+KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
+HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
+DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
+AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
+nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
+rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
+jBJ7xUS0rg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
+LSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7B
+rBlbN5maM5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRA
+spEXE4gvwb08ASY6w5s+HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8w
+nfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxWCeol9IekpBRVmuuSA6QG0Jkm+pGDJ05y
+j2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9JyN0ag1yII/LPx8HK5J4
+W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3xW20QjQcS
+ZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHk
+MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
+Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
+aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
+cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
+OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
+cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
+HQ4EFgQUwGxGyl2CfpYHRonE82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1
+TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkxUGY7U9kVrLI71xBgoNVyzXTiMNDB
+vjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsanot1Xt6j0ZDC+03Fj
+LHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G22Ohu
++EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqW
+uHitKQDVtcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6
+NA9GRTCNxm/dXlcwnmY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
+RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
+Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
+RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
+IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
+Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
+CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
+8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
+bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
+dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
+QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
+C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
+IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
+ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
+KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
+VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
+DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
+fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
+d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
+JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
+yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
+YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
+MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
+NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
+A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
+A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
+Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
+QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
+eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
+B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
+z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
+AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
+ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
+TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
+MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
+VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
+VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
+AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
+bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
+ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
+VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
+ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
+AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
+ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
+Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
+MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
+bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
+RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
+CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
+6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
+5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
+AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
+ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
+cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
+by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
+IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
+Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
+KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
+HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
+BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
+FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
+pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
+wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
+EkP/TOYGJqibGapEPHayXOw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
+MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
+KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
+A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
+5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
+SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
+JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
+ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
+AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
+AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
+CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
+b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
+7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
+0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
+nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
+x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
+33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z
+jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j
+FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2
+W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC
+L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh
+d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G
+TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd
+xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue
+dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5
++F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL
+iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM
+ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
+isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
+NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
++MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
+hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
+Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
+EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
+mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
+e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
+dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
@@ -3253,85 +5697,189 @@ yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
o2A=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
+MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
+ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
+gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
+MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
+IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
+czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
+dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
+aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
+AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
+b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
+ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
+nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
+18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
+gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
+Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
+sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
+SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
+CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
+GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
+zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
+omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIGJDCCBY2gAwIBAgIEQoaroDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjA3
-MTQxNzEwMjhaFw0xNDA3MTQxNzQwMjhaMFwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
-EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xGzAZBgNV
-BAMTEkRpZ2lDZXJ0IEdsb2JhbCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMQ8vMy66mLmnkIjr7SyEa5ijdmh04/MFHIZ7Zn2/d5du1nAsMKvaplS
-lVcLNf/hhvqvosPBBWUnIHYvClQlfOor3ZVBV5sPO89H6AEGjMVESPwHLvNygzBR
-lJ5pOoOph5AU2V7EoniPwT7UGWEOGufcGpUgQb5vF9q4HEHumLD61x01PxanBCgT
-XT0FdZouhp4ssBeHIFhX7+HqVWC4LHAhrCljDBD8YLz51Rw3ZNW0+x6rJjlGiKTL
-zTBnwCZ55cpo+SLX5dKxu0hMmwuYW0KS5dLtDkcw+t0nVmNqpQHHjq/wTjsbVRVE
-1T5NVx7hkeq4oI/OOmNflom6CD7+RLsCAwEAAaOCAwUwggMBMBIGA1UdEwEB/wQI
-MAYBAf8CAQAwggEyBgNVHSAEggEpMIIBJTCCASEGCSqGSIb2fQdLAjCCARIwJgYI
-KwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvY3BzMIHnBggrBgEFBQcC
-AjCB2hqB10ZvciB1c2Ugc29sZWx5IHdpdGggU1NMIGFuZCBTL01JTUUgY2VydGlm
-aWNhdGVzIGlzc3VlZCBieSBEaWdpY2VydCwgSW5jLiB0byBhdXRob3JpemVkIHN1
-YnNjcmliZXJzLg0KRE9FUyBOT1QgcmVwcmVzZW50IGFueSBlbmRvcnNlbWVudCBi
-eSBFbnRydXN0IEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMgYXMgdG8gdGhlIGlkZW50
-aXR5IG9mIGFueSBjZXJ0aWZpY2F0ZSBob2xkZXIuMDEGA1UdJQQqMCgGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMJMIIBGAYDVR0fBIIBDzCC
-AQswKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvc2VydmVyMS5jcmwwgd6g
-gduggdikgdUwgdIxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE7
-MDkGA1UECxMyd3d3LmVudHJ1c3QubmV0L0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0
-ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwCwYDVR0PBAQDAgEGMB8GA1Ud
-IwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMB0GA1UdDgQWBBSnxxOgegE8ne+C
-SIJI1XNRthJWKjAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIAgTANBgkqhkiG9w0B
-AQUFAAOBgQBK8bPOaGnjWKNh7bYWyJOxGDA+4HLfTz3iTeG4/D/ByeNFqV2pwdqj
-5TbXjtYPrTavbLxE5ppGlKYRoNBS59pVsPYchftjUnu2mY8f4stHZKLrCGXmUdsc
-S21/U58eDTGT1DBdHm4BBydgXbvT9ONsHSAPdSozEKe3idepFxQyAw==
+MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
+IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
+MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
+SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
+IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
+0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
+TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
+RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
+zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
+BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
+AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
+PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
+BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
+9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
+Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
+Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
+n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
+H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEUDCCA7mgAwIBAgIJAN4ppNGwj6yIMA0GCSqGSIb3DQEBBAUAMIHMMQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j
-aXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5jLjEpMCcGA1UECxMgTGluZGVu
-IExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIExpbmRlbiBMYWIg
-Q2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZIhvcNAQkBFhBjYUBsaW5kZW5s
-YWIuY29tMB4XDTA1MDQyMTAyNDAzMVoXDTI1MDQxNjAyNDAzMVowgcwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
-c2NvMRkwFwYDVQQKExBMaW5kZW4gTGFiLCBJbmMuMSkwJwYDVQQLEyBMaW5kZW4g
-TGFiIENlcnRpZmljYXRlIEF1dGhvcml0eTEpMCcGA1UEAxMgTGluZGVuIExhYiBD
-ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgkqhkiG9w0BCQEWEGNhQGxpbmRlbmxh
-Yi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKXh1MThucdTbMg9bYBO
-rAm8yWns32YojB0PRfbq8rUjepEhTm3/13s0u399Uc202v4ejcGhkIDWJZd2NZMF
-oKrhmRfxGHSKPCuFaXC3jh0lRECj7k8FoPkcmaPjSyodrDFDUUuv+C06oYJoI+rk
-8REyal9NwgHvqCzOrZtiTXAdAgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUO1zK2e1f
-1wO1fHAjq6DTJobKDrcwggEBBgNVHSMEgfkwgfaAFDtcytntX9cDtXxwI6ug0yaG
-yg63oYHSpIHPMIHMMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEW
-MBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5j
-LjEpMCcGA1UECxMgTGluZGVuIExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAn
-BgNVBAMTIExpbmRlbiBMYWIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZI
-hvcNAQkBFhBjYUBsaW5kZW5sYWIuY29tggkA3imk0bCPrIgwDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQQFAAOBgQA/ZkgfvwHYqk1UIAKZS3kMCxz0HvYuEQtviwnu
-xA39CIJ65Zozs28Eg1aV9/Y+Of7TnWhW+U3J3/wD/GghaAGiKK6vMn9gJBIdBX/9
-e6ef37VGyiOEFFjnUIbuk0RWty0orN76q/lI/xjCi15XSA/VSq2j4vmnwfZcPTDu
-glmQ1A==
+MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
+WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
+AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
+OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
+T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
+JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
+Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
+PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
+aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
+TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
+LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
+BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
+dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
+AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
+NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
+b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
+ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
+fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
+BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
+cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
+HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
+CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
+3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
+6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
+HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
+Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
+Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
+DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
+5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
+gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
+aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
+izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
+DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
+Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
+cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
+YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
+OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
+bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
+dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
+18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
+yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
+LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
+A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
+zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
+BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
+GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
+cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
+HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
+CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
+BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
+cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
+YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
+YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
+ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
+00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
+cCOxgN8aIDjnfg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
+AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
+dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
+MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
+CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
+MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
+SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
+ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
+LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
+PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
+2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
+ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
+MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
+AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
+AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
+AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
+AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
+BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
+P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
+CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
+kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
+HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
+na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
+qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
+TbvGRNs2yyqcjg==
-----END CERTIFICATE-----
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 89e5949fbe..15434f2b8f 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -220,8 +220,7 @@
<map>
<key>desc</key>
<string>Set the detail level.
- 0 - low, 1 - medium, 2 - high, 3 - ultra
- </string>
+0 - low, 1 - medium, 2 - high, 3 - ultra</string>
<key>count</key>
<integer>1</integer>
</map>
@@ -229,10 +228,7 @@
<key>setdefault</key>
<map>
<key>desc</key>
- <string> specify the value of a particular
- configuration variable which can be
- overridden by settings.xml
- </string>
+ <string>specify the value of a particular configuration variable which can be overridden by settings.xml.</string>
<key>count</key>
<integer>2</integer>
<!-- Special case. Mapped to settings procedurally. -->
@@ -241,10 +237,7 @@
<key>set</key>
<map>
<key>desc</key>
- <string> specify the value of a particular
- configuration variable that
- overrides all other settings
- </string>
+ <string>specify the value of a particular configuration variable that overrides all other settings.</string>
<key>count</key>
<integer>2</integer>
<key>compose</key>
diff --git a/indra/newview/app_settings/keys.xml b/indra/newview/app_settings/keys.xml
index d085475c6c..6e3673e7d9 100644
--- a/indra/newview/app_settings/keys.xml
+++ b/indra/newview/app_settings/keys.xml
@@ -181,7 +181,7 @@
<binding key="PAD_DIVIDE" mask="CTL_ALT_SHIFT" command="start_gesture"/>
</third_person>
- # Basic editing camera control
+ <!-- Basic editing camera control -->
<edit>
<binding key="A" mask="NONE" command="spin_around_cw"/>
<binding key="D" mask="NONE" command="spin_around_ccw"/>
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 263b73ba23..9fa4046fdf 100644
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -498,6 +498,7 @@ PARCEL_DETAILS_OWNER Used with llGetParcelDetails to get the parcel owner id.
PARCEL_DETAILS_GROUP Used with llGetParcelDetails to get the parcel group id.
PARCEL_DETAILS_AREA Used with llGetParcelDetails to get the parcel area in square meters.
PARCEL_DETAILS_ID Used with llGetParcelDetails to get the parcel id.
+PARCEL_DETAILS_SEE_AVATARS Used with llGetParcelDetails to get the avatars visibility setting.
STRING_TRIM_HEAD Used with llStringTrim to trim leading spaces from a string.
STRING_TRIM_TAIL Used with llStringTrim to trim trailing spaces from a string.
diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml
index 9f4e89691f..ae72dee900 100644
--- a/indra/newview/app_settings/logcontrol.xml
+++ b/indra/newview/app_settings/logcontrol.xml
@@ -44,7 +44,6 @@
<array>
<!-- sample entry for debugging a specific item -->
<!-- <string>Voice</string> -->
- <string>Capabilities</string>
</array>
</map>
</array>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 76fecdf05e..6ebb0162a4 100755..100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16,14 +16,16 @@
<key>AFKTimeout</key>
<map>
<key>Comment</key>
- <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).
- Valid values are: 0, 120, 300, 600, 1800</string>
+ <string>
+ Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).
+ Valid values are: 0, 120, 300, 600, 1800
+</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <real>300</real>
+ <real>0</real>
</map>
<key>AdminMenu</key>
<map>
@@ -796,6 +798,61 @@
<key>Value</key>
<integer>5</integer>
</map>
+ <key>Socks5ProxyEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Use Socks5 Proxy</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>HttpProxyType</key>
+ <map>
+ <key>Comment</key>
+ <string>Proxy type to use for HTTP operations</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Socks</string>
+ </map>
+ <key>Socks5ProxyHost</key>
+ <map>
+ <key>Comment</key>
+ <string>Socks 5 Proxy Host</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string></string>
+ </map>
+ <key>Socks5ProxyPort</key>
+ <map>
+ <key>Comment</key>
+ <string>Socks 5 Proxy Port</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>1080</integer>
+ </map>
+ <key>Socks5AuthType</key>
+ <map>
+ <key>Comment</key>
+ <string>Selected Auth mechanism for Socks5</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>None</string>
+ </map>
<key>BuildAxisDeadZone0</key>
<map>
<key>Comment</key>
@@ -1627,17 +1684,6 @@
<string />
</array>
</map>
- <key>CompressSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>ConnectAsGod</key>
<map>
<key>Comment</key>
@@ -1803,6 +1849,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>CurlUseMultipleThreads</key>
+ <map>
+ <key>Comment</key>
+ <string>Use background threads for executing curl_multi_perform (requires restart)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>Cursor3D</key>
<map>
<key>Comment</key>
@@ -1924,6 +1981,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>DebugShowPrivateMem</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Private Mem Info</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugShowRenderInfo</key>
<map>
<key>Comment</key>
@@ -1935,17 +2003,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>DebugShowUploadCost</key>
- <map>
- <key>Comment</key>
- <string>Show what it would cost to upload assets in current scene</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>DebugShowRenderMatrices</key>
<map>
<key>Comment</key>
@@ -1979,6 +2036,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>DebugShowUploadCost</key>
+ <map>
+ <key>Comment</key>
+ <string>Show mesh upload cost</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DebugShowXUINames</key>
<map>
<key>Comment</key>
@@ -3848,7 +3916,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>https://www.xstreetsl.com/modules.php?name=Marketplace&amp;CategoryID=233</string>
+ <string>https://marketplace.secondlife.com/products/search?search[category_id]=200&amp;search[maturity][]=General&amp;search[page]=1&amp;search[per_page]=12</string>
</map>
<key>GridCrossSections</key>
<map>
@@ -3991,7 +4059,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://search-beta.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
+ <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]</string>
</map>
<key>WebProfileURL</key>
<map>
@@ -4180,6 +4248,28 @@
<key>Value</key>
<real>1.0</real>
</map>
+ <key>InventoryDisplayInbox</key>
+ <map>
+ <key>Comment</key>
+ <string>Override received items inventory inbox display</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>InventoryDisplayOutbox</key>
+ <map>
+ <key>Comment</key>
+ <string>Override merchant inventory outbox display</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>InventoryLinking</key>
<map>
<key>Comment</key>
@@ -4839,7 +4929,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string />
+ <string/>
</map>
<key>LosslessJ2CUpload</key>
<map>
@@ -4861,7 +4951,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>20.0</real>
+ <real>60.0</real>
</map>
<key>MapOverlayIndex</key>
<map>
@@ -5380,6 +5470,17 @@
<key>Value</key>
<real>48.0</real>
</map>
+ <key>MaxHeapSize</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum heap size (GB)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.6</real>
+ </map>
<key>MaxSelectDistance</key>
<map>
<key>Comment</key>
@@ -5402,6 +5503,17 @@
<key>Value</key>
<real>60.0</real>
</map>
+ <key>MediaPluginDebugging</key>
+ <map>
+ <key>Comment</key>
+ <string>Turn on debugging messages that may help diagnosing media issues (WARNING: May reduce performance).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MediaControlFadeTime</key>
<map>
<key>Comment</key>
@@ -5501,6 +5613,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>MemoryFailurePreventionEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>If set, the viewer will quit to avoid crash when memory failure happens</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MemoryLogFrequency</key>
<map>
<key>Comment</key>
@@ -5512,6 +5635,17 @@
<key>Value</key>
<real>600.0</real>
</map>
+ <key>MemoryPrivatePoolEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable the private memory pool management</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MemProfiling</key>
<map>
<key>Comment</key>
@@ -5587,7 +5721,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <real>0</real>
+ <real>1</real>
</map>
<key>MeshUploadLogXML</key>
<map>
@@ -5611,6 +5745,17 @@
<key>Value</key>
<real>0</real>
</map>
+ <key>MeshUploadTimeOut</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum time in seconds for llcurl to execute a mesh uoloading request</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <real>600</real>
+ </map>
<key>MigrateCacheDirectory</key>
<map>
<key>Comment</key>
@@ -6021,10 +6166,12 @@
<key>ToastButtonWidth</key>
<map>
<key>Comment</key>
- <string>Default width of buttons in the toast.
+ <string>
+ Default width of buttons in the toast.
Notes:
If required width will be less then this one, a button will be reshaped to default size , otherwise to required
- Change of this parameter will affect the layout of buttons in notification toast.</string>
+ Change of this parameter will affect the layout of buttons in notification toast.
+</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -6546,7 +6693,28 @@
<key>Value</key>
<integer>0</integer>
</map>
-
+ <key>PostFirstLoginIntroURL</key>
+ <map>
+ <key>Comment</key>
+ <string>URL of intro presenatation after first time users first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string></string>
+ </map>
+ <key>PostFirstLoginIntroViewed</key>
+ <map>
+ <key>Comment</key>
+ <string>Flag indicating if user has seen intro presenatation after first time users first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>PrecachingDelay</key>
<map>
<key>Comment</key>
@@ -7182,7 +7350,7 @@
</array>
</map>
- <key>RenderAnisotropic</key>
+ <key>RenderAnisotropic</key>
<map>
<key>Comment</key>
<string>Render textures using anisotropic filtering</string>
@@ -7295,8 +7463,10 @@
<key>RenderPerformanceTest</key>
<map>
<key>Comment</key>
- <string>Disable rendering of everything but in-world content for
- performance testing</string>
+ <string>
+ Disable rendering of everything but in-world content for
+ performance testing
+</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -9134,28 +9304,51 @@
<key>Value</key>
<real>1.0</real>
</map>
- <key>MeshStreamingCostScaler</key>
+ <key>MeshTriangleBudget</key>
<map>
<key>Comment</key>
- <string>DEBUG</string>
+ <string>Target visible triangle budget to use when estimating streaming cost.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>F32</string>
+ <string>U32</string>
<key>Value</key>
- <real>2.0</real>
+ <real>250000</real>
</map>
- <key>MeshThreadCount</key>
+ <key>MeshMetaDataDiscount</key>
<map>
<key>Comment</key>
- <string>Number of threads to use for loading meshes.</string>
+ <string>Number of bytes to deduct for metadata when determining streaming cost.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
- <integer>8</integer>
+ <real>384</real>
</map>
+ <key>MeshMinimumByteSize</key>
+ <map>
+ <key>Comment</key>
+ <string>Minimum number of bytes per LoD block when determining streaming cost.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <real>16</real>
+ </map>
+ <key>MeshBytesPerTriangle</key>
+ <map>
+ <key>Comment</key>
+ <string>Approximation of bytes per triangle to use for determining mesh streaming cost.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <real>16</real>
+ </map>
+
<key>MeshMaxConcurrentRequests</key>
<map>
<key>Comment</key>
@@ -9387,6 +9580,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>ShowAdvancedBuilderOptions</key>
+ <map>
+ <key>Comment</key>
+ <string>Shows physics and display weight</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowAdvancedGraphicsSettings</key>
<map>
<key>Comment</key>
@@ -9627,7 +9831,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>ShowSnapshotButton</key>
<map>
@@ -10237,17 +10441,6 @@
<key>Value</key>
<real>0.300000011921</real>
</map>
- <key>SkyEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the sky defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>SkyNightColorShift</key>
<map>
<key>Comment</key>
@@ -10289,17 +10482,6 @@
<real>0.1</real>
</array>
</map>
- <key>SkyUseClassicClouds</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the old Second Life particle clouds or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>SnapEnabled</key>
<map>
<key>Comment</key>
@@ -10914,7 +11096,7 @@
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <real>-2</real>
+ <real>-1</real>
</map>
<key>UIExtraTriangleWidth</key>
<map>
@@ -10925,7 +11107,7 @@
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <real>2</real>
+ <real>4</real>
</map>
<key>UIFloaterCloseBoxSize</key>
<map>
@@ -11917,6 +12099,61 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>UseEnvironmentFromRegion</key>
+ <map>
+ <key>Comment</key>
+ <string>Choose whether to use the region's environment settings, or override them with the local settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>UseDayCycle</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to use use a day cycle or a fixed sky.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>WaterPresetName</key>
+ <map>
+ <key>Comment</key>
+ <string>Water preset to use. May be superseded by region settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
+ <key>SkyPresetName</key>
+ <map>
+ <key>Comment</key>
+ <string>Sky preset to use. May be superseded by region settings or by a day cycle (see DayCycleName).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
+ <key>DayCycleName</key>
+ <map>
+ <key>Comment</key>
+ <string>Day cycle to use. May be superseded by region settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
<key>UseExternalBrowser</key>
<map>
<key>Comment</key>
@@ -12491,52 +12728,14 @@
<key>WatchdogEnabled</key>
<map>
<key>Comment</key>
- <string>Controls whether the thread watchdog timer is activated.</string>
+ <string>Controls whether the thread watchdog timer is activated. Value is boolean. Set to -1 to defer to built-in default.</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <integer>20</integer>
- </map>
- <key>WaterEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the water defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
<integer>0</integer>
</map>
- <key>WaterFogColor</key>
- <map>
- <key>Comment</key>
- <string>Water fog color</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.0863</real>
- <real>0.168</real>
- <real>0.212</real>
- <real>0</real>
- </array>
- </map>
- <key>WaterFogDensity</key>
- <map>
- <key>Comment</key>
- <string>Water fog density</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16.0</real>
- </map>
<key>WaterGLFogDensityScale</key>
<map>
<key>Comment</key>
@@ -13351,5 +13550,43 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>WebProfileRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Web profile dimensions</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>650</integer>
+ <integer>490</integer>
+ <integer>0</integer>
+ </array>
+ </map>
+ <key>HelpFloaterOpen</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Help Floater on login?</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>ShowHelpOnFirstLogin</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Help Floater on first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
</map>
</llsd>
diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml
index 079a54f957..bfc09286e3 100644
--- a/indra/newview/app_settings/settings_files.xml
+++ b/indra/newview/app_settings/settings_files.xml
@@ -20,7 +20,8 @@
file_name="settings.xml"
file_name_setting="ClientSettingsFile"/>
<file name="CrashSettings"
- file_name="settings_crash_behavior"/>
+ file_name="settings_crash_behavior.xml"
+ file_name_setting="CrashSettingsFile"/>
<file name="Warnings"
file_name="ignorable_dialogs.xml"
file_name_setting="WarningSettingsFile"/>
@@ -61,4 +62,4 @@
file_name="colors.xml"
file_name_setting="SkinningSettingsFile"/>
</group>
-</settings_files> \ No newline at end of file
+</settings_files>
diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml
index 70a75cb4ca..29e52ab054 100644
--- a/indra/newview/app_settings/settings_minimal.xml
+++ b/indra/newview/app_settings/settings_minimal.xml
@@ -459,5 +459,16 @@
<key>Value</key>
<integer>0</integer>
</map>
- </map>
+ <key>ShowHelpOnFirstLogin</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Help Floater on first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ </map>
</llsd>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index ff24efaf2c..1142f01232 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -33,6 +33,17 @@
<key>Value</key>
<string />
</map>
+ <key>LastInventoryInboxExpand</key>
+ <map>
+ <key>Comment</key>
+ <string>The last time the received items inbox was expanded.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>LastLogoff</key>
<map>
<key>Comment</key>
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
new file mode 100644
index 0000000000..933e50fed1
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -0,0 +1,48 @@
+/**
+ * @file diffuseF.glsl
+ *
+ * $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$
+ */
+
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+varying vec3 vary_normal;
+
+void main()
+{
+ vec4 col = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color;
+
+ if (col.a < minimum_alpha || col.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragData[0] = vec4(col.rgb, 0.0);
+ gl_FragData[1] = vec4(0,0,0,0); // spec
+ vec3 nvn = normalize(vary_normal);
+ gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
new file mode 100644
index 0000000000..f3ad6f92de
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -0,0 +1,44 @@
+/**
+ * @file diffuseAlphaMaskIndexedF.glsl
+ *
+ * $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$
+ */
+
+varying vec3 vary_normal;
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+void main()
+{
+ vec4 col = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (col.a < minimum_alpha || col.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragData[0] = vec4(col.rgb, 0.0);
+ gl_FragData[1] = vec4(0,0,0,0);
+ vec3 nvn = normalize(vary_normal);
+ gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+}
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 fa811f0d55..7152e13946 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -1,10 +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 sampler2D diffuseMap;
@@ -14,6 +34,12 @@ uniform sampler2D specularMap;
void main()
{
vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy);
+
+ 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);
gl_FragData[2] = vec4(texture2D(normalMap, gl_TexCoord[0].xy).xyz, 0.0);
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
new file mode 100644
index 0000000000..615317febf
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
@@ -0,0 +1,45 @@
+/**
+ * @file shadowAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+varying vec4 post_pos;
+
+void main()
+{
+ float alpha = texture2D(diffuseMap, gl_TexCoord[0].xy).a * gl_Color.a;
+
+ if (alpha < minimum_alpha || alpha > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragColor = vec4(1,1,1,1);
+
+ gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
new file mode 100644
index 0000000000..4be18a9c5e
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
@@ -0,0 +1,41 @@
+/**
+ * @file shadowAlphaMaskV.glsl
+ *
+ * $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$
+ */
+
+
+
+varying vec4 post_pos;
+
+void main()
+{
+ //transform vertex
+ vec4 pos = gl_ModelViewProjectionMatrix*gl_Vertex;
+
+ post_pos = pos;
+
+ gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
+
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+ gl_FrontColor = gl_Color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
index e0c5406483..541f08d5fe 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
@@ -1,19 +1,35 @@
/**
* @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$
*/
-uniform sampler2D diffuseMap;
-
varying vec4 post_pos;
void main()
{
- gl_FragColor = vec4(1,1,1,texture2D(diffuseMap, gl_TexCoord[0].xy).a * gl_Color.a);
+ gl_FragColor = vec4(1,1,1,1);
gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
index 9271a5115c..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$
*/
@@ -17,7 +35,4 @@ void main()
post_pos = pos;
gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
-
- gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
- gl_FrontColor = gl_Color;
}
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 60082f40d6..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$
*/
@@ -270,72 +288,41 @@ void main()
vec4 diffuse = texture2DRect(diffuseRect, tc);
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
- calcAtmospherics(pos.xyz, 1.0);
+ vec3 col;
+ float bloom = 0.0;
+ if (diffuse.a < 0.9)
+ {
+ calcAtmospherics(pos.xyz, 1.0);
+
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
+ col *= diffuse.rgb;
- col *= diffuse.rgb;
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
- if (spec.a > 0.0) // specular reflection
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col.rgb, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- /*
- // screen-space cheap fakey reflection map
- //
- vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
- depth -= 0.5; // unbias depth
- // first figure out where we'll make our 2D guess from
- vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
- // Offset the guess source a little according to a trivial
- // checkerboard dither function and spec.a.
- // This is meant to be similar to sampling a blurred version
- // of the diffuse map. LOD would be better in that regard.
- // The goal of the blur is to soften reflections in surfaces
- // with low shinyness, and also to disguise our lameness.
- float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
- float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
- ref2d += vec2(checkoffset, checkoffset);
- ref2d += tc.xy; // use as offset from destination
- // Get attributes from the 2D guess point.
- // We average two samples of diffuse (not of anything else) per
- // pixel to try to reduce aliasing some more.
- vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
- texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
- float refdepth = texture2DRect(depthMap, ref2d).a;
- vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
- vec3 refn = texture2DRect(normalMap, ref2d).rgb;
- refn = normalize(vec3((refn.xy-0.5)*2.0,refn.z)); // unpack norm
- // figure out how appropriate our guess actually was
- float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
- // darken reflections from points which face away from the reflected ray - our guess was a back-face
- //refapprop *= step(dot(refnorm, refn), 0.0);
- refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
- // get appropriate light strength for guess-point.
- // reflect light direction to increase the illusion that
- // these are reflections.
- vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
- float reflit = max(dot(refn, reflight.xyz), 0.0);
- // apply sun color to guess-point, dampen according to inappropriateness of guess
- float refmod = min(refapprop, reflit);
- vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
- vec3 ssshiny = (refprod * spec.a);
- ssshiny *= 0.3; // dampen it even more
- */
- vec3 ssshiny = vec3(0,0,0);
-
- // add the two types of shiny together
- col += (ssshiny + dumbshiny) * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
-
+
gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ gl_FragColor.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl
index 9dfacfb520..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$
*/
@@ -266,7 +284,7 @@ void main()
vec2 tc = vary_fragcoord.xy;
ivec2 itc = ivec2(tc);
- vec3 fcol = vec3(0,0,0);
+ vec4 fcol = vec4(0,0,0,0);
for (int i = 0; i < samples; ++i)
{
@@ -280,17 +298,16 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texelFetch(diffuseRect, itc, i);
- if (diffuse.a >= 1.0)
- {
- fcol += diffuse.rgb;
- }
- else
+ vec3 col;
+ float bloom = 0.0;
+
+ if (diffuse.a < 0.9)
{
vec4 spec = texelFetch(specularRect, itc, i);
calcAtmospherics(pos.xyz, 1.0);
- vec3 col = atmosAmbient(vec3(0));
+ col = atmosAmbient(vec3(0));
col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
col *= diffuse.rgb;
@@ -304,15 +321,22 @@ void main()
vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;
// add the two types of shiny together
- col += dumbshiny * spec.rgb;
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
}
col = atmosLighting(col);
col = scaleSoftClip(col);
- fcol += col;
+ col = mix(col, diffuse.rgb, diffuse.a);
}
+ else
+ {
+ col = diffuse.rgb;
+ }
+
+ fcol += vec4(col, bloom);
}
- gl_FragColor.rgb = fcol.rgb/samples;
- gl_FragColor.a = 0.0;
+ gl_FragColor = fcol/samples;
}
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
new file mode 100644
index 0000000000..27c63fdc8b
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
@@ -0,0 +1,35 @@
+/**
+ * @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$
+ */
+
+uniform sampler2D diffuseMap;
+
+uniform float custom_alpha;
+
+void main()
+{
+ vec4 color = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy);
+ color.a *= custom_alpha;
+ gl_FragColor = color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl
new file mode 100644
index 0000000000..c4c896c35c
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @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$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_FrontColor = gl_Color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
new file mode 100644
index 0000000000..b8963e1dec
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
@@ -0,0 +1,35 @@
+/**
+ * @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$
+ */
+
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2D glowMap;
+uniform sampler2DRect screenMap;
+
+void main()
+{
+ gl_FragColor = texture2D(glowMap, gl_TexCoord[0].xy) +
+ texture2DRect(screenMap, gl_TexCoord[1].xy);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl
new file mode 100644
index 0000000000..4c6360f71d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl
@@ -0,0 +1,33 @@
+/**
+ * @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$
+ */
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_TexCoord[1] = gl_MultiTexCoord1;
+}
+
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
new file mode 100644
index 0000000000..57248699cb
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
@@ -0,0 +1,29 @@
+/**
+ * @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$
+ */
+
+void main()
+{
+ gl_FragColor = vec4(1,1,1,1);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
new file mode 100644
index 0000000000..915e452e0f
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
@@ -0,0 +1,30 @@
+/**
+ * @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$
+ */
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
new file mode 100644
index 0000000000..b1d2b949ac
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
@@ -0,0 +1,33 @@
+/**
+ * @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$
+ */
+
+uniform sampler2D tex0;
+
+void main()
+{
+ float alpha = texture2D(tex0, gl_TexCoord[0].xy).a * gl_Color.a;
+
+ gl_FragColor = vec4(gl_Color.rgb, alpha);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
new file mode 100644
index 0000000000..fedf6ae546
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @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$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_FrontColor = gl_Color;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
new file mode 100644
index 0000000000..3408cc44f8
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
@@ -0,0 +1,32 @@
+/**
+ * @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$
+ */
+
+uniform sampler2D tex0;
+uniform sampler2D tex1;
+
+void main()
+{
+ gl_FragColor = texture2D(tex0, gl_TexCoord[0].xy)+texture2D(tex1, gl_TexCoord[1].xy);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl
new file mode 100644
index 0000000000..94aa964be6
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @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$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_TexCoord[1] = gl_MultiTexCoord1;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
new file mode 100644
index 0000000000..7694056b08
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
@@ -0,0 +1,31 @@
+/**
+ * @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$
+ */
+
+uniform sampler2D diffuseMap;
+
+void main()
+{
+ gl_FragColor = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
new file mode 100644
index 0000000000..b1b90d0b5e
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @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$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_FrontColor = gl_Color;
+}
+
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
new file mode 100644
index 0000000000..11031a8829
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
@@ -0,0 +1,35 @@
+/**
+ * @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$
+ */
+
+uniform sampler2D texture0;
+uniform sampler2D texture1;
+
+void main()
+{
+ float tex0 = texture2D(texture0, gl_TexCoord[0].xy).a;
+ float tex1 = texture2D(texture1, gl_TexCoord[1].xy).a;
+
+ gl_FragColor = vec4(tex0+(1.0-tex1)-0.5);
+}
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
new file mode 100644
index 0000000000..c50ed86315
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @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$
+ */
+
+
+void main()
+{
+ //transform vertex
+ gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+ gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1;
+ gl_FrontColor = gl_Color;
+}
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 f44a5ce32e..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$
*/
@@ -10,8 +27,6 @@
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
mat4 mat = getObjectSkinnedTransform();
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 e5dafa8c78..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$
*/
@@ -10,8 +27,6 @@
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
//transform vertex
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
new file mode 100644
index 0000000000..92c09ce937
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
@@ -0,0 +1,44 @@
+/**
+ * @file impostorF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+uniform sampler2D diffuseMap;
+
+void main()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragColor = color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
new file mode 100644
index 0000000000..eea51eba45
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file impostorV.glsl
+ *
+ * $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$
+ */
+
+
+void main()
+{
+ //transform vertex
+ gl_Position = ftransform();
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+
+ gl_FrontColor = gl_Color;
+}
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 cd655f3bb5..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$
*/
@@ -11,8 +28,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
mat4 mat = getObjectSkinnedTransform();
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 900448035c..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$
*/
@@ -11,8 +28,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
//transform vertex
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 66a1a8515f..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$
*/
@@ -267,34 +285,49 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texture2DRect(diffuseRect, tc);
- vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
-
- vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
- float scol = max(scol_ambocc.r, diffuse.a);
- float ambocc = scol_ambocc.g;
+
+ vec3 col;
+ float bloom = 0.0;
+
+ if (diffuse.a < 0.9)
+ {
+ vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
+
+ vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
+ float scol = max(scol_ambocc.r, diffuse.a);
+ float ambocc = scol_ambocc.g;
- calcAtmospherics(pos.xyz, ambocc);
+ calcAtmospherics(pos.xyz, ambocc);
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
- col *= diffuse.rgb;
+ col *= diffuse.rgb;
- if (spec.a > 0.0) // specular reflection
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
+
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- // add the two types of shiny together
- col += dumbshiny * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ gl_FragColor.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl
index 0bae10ca7d..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$
*/
@@ -255,7 +273,7 @@ void main()
vec2 tc = vary_fragcoord.xy;
ivec2 itc = ivec2(tc);
- vec3 fcol = vec3(0,0,0);
+ vec4 fcol = vec4(0,0,0,0);
vec2 scol_ambocc = texture2DRect(lightMap, tc).rg;
float ambocc = scol_ambocc.g;
@@ -270,38 +288,50 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texelFetch(diffuseRect, itc, i);
- vec4 spec = texelFetch(specularRect, itc, i);
+ vec3 col;
+ float bloom = 0.0;
+ if (diffuse.a < 0.9)
+ {
+ vec4 spec = texelFetch(specularRect, itc, i);
- float amb = 0;
+ float amb = 0;
- float scol = max(scol_ambocc.r, diffuse.a);
- amb += ambocc;
+ float scol = max(scol_ambocc.r, diffuse.a);
+ amb += ambocc;
- calcAtmospherics(pos.xyz, ambocc);
+ calcAtmospherics(pos.xyz, ambocc);
+
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+ col *= diffuse.rgb;
- col *= diffuse.rgb;
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
- if (spec.a > 0.0) // specular reflection
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- // add the two types of shiny together
- col += dumbshiny * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
- fcol += col;
+ fcol += vec4(col, bloom);
}
- gl_FragColor.rgb = fcol/samples;
- gl_FragColor.a = 0.0;
+ gl_FragColor = fcol/samples;
}
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
new file mode 100644
index 0000000000..4c05329065
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl
@@ -0,0 +1,48 @@
+/**
+ * @file lightAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 atmosLighting(vec3 light);
+vec3 scaleSoftClip(vec3 light);
+
+void default_lighting()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ color.rgb = scaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl
new file mode 100644
index 0000000000..0de909353e
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl
@@ -0,0 +1,51 @@
+/**
+ * @file lightAlphaMaskNonIndexedF.glsl
+ *
+ * $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$
+ */
+
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+
+uniform sampler2D diffuseMap;
+
+vec3 atmosLighting(vec3 light);
+vec3 scaleSoftClip(vec3 light);
+
+void default_lighting()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ color.rgb = scaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
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
new file mode 100644
index 0000000000..8c7713c08d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl
@@ -0,0 +1,47 @@
+/**
+ * @file lightFullbrightAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+void fullbright_lighting()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ color.rgb = fullbrightScaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
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
new file mode 100644
index 0000000000..89468b9665
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
@@ -0,0 +1,49 @@
+/**
+ * @file lightFullbrightNonIndexedAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+uniform sampler2D diffuseMap;
+
+void fullbright_lighting()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ color.rgb = fullbrightScaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
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
new file mode 100644
index 0000000000..e5998b77a9
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl
@@ -0,0 +1,47 @@
+/**
+ * @file lightFullbrightWaterAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec4 diffuseLookup(vec2 texcoord);
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void fullbright_lighting_water()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ gl_FragColor = applyWaterFog(color);
+}
+
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
new file mode 100644
index 0000000000..3fdd110f7d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
@@ -0,0 +1,47 @@
+/**
+ * @file lightFullbrightWaterNonIndexedAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void fullbright_lighting_water()
+{
+ vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ gl_FragColor = applyWaterFog(color);
+}
+
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
new file mode 100644
index 0000000000..072dcaa6b6
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl
@@ -0,0 +1,45 @@
+/**
+ * @file lightWaterAlphaMaskF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 atmosLighting(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void default_lighting_water()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ gl_FragColor = applyWaterFog(color);
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl
new file mode 100644
index 0000000000..2df34da4b4
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl
@@ -0,0 +1,49 @@
+/**
+ * @file lightWaterAlphaMaskNonIndexedF.glsl
+ *
+ * $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$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+vec3 atmosLighting(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void default_lighting_water()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ color = applyWaterFog(color);
+
+ gl_FragColor = color;
+}
+
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 d38d33cc21..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$
*/
@@ -268,91 +286,50 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texture2DRect(diffuseRect, tc);
- vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
+ vec3 col;
+ float bloom = 0.0;
+
+ if (diffuse.a < 0.9)
+ {
+ vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
- da = texture2D(lightFunc, vec2(da, 0.0)).a;
+ da = texture2D(lightFunc, vec2(da, 0.0)).a;
- vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
- float scol = max(scol_ambocc.r, diffuse.a);
- float ambocc = scol_ambocc.g;
+ vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
+ float scol = max(scol_ambocc.r, diffuse.a);
+ float ambocc = scol_ambocc.g;
- calcAtmospherics(pos.xyz, ambocc);
+ calcAtmospherics(pos.xyz, ambocc);
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
- col *= diffuse.rgb;
+ col *= diffuse.rgb;
- if (spec.a > 0.0) // specular reflection
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
+
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- /*
- // screen-space cheap fakey reflection map
- //
- vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
- depth -= 0.5; // unbias depth
- // first figure out where we'll make our 2D guess from
- vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
- // Offset the guess source a little according to a trivial
- // checkerboard dither function and spec.a.
- // This is meant to be similar to sampling a blurred version
- // of the diffuse map. LOD would be better in that regard.
- // The goal of the blur is to soften reflections in surfaces
- // with low shinyness, and also to disguise our lameness.
- float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
- float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
-
- ref2d += vec2(checkoffset, checkoffset);
- ref2d += tc.xy; // use as offset from destination
- // Get attributes from the 2D guess point.
- // We average two samples of diffuse (not of anything else) per
- // pixel to try to reduce aliasing some more.
- vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
- texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
- float refdepth = texture2DRect(depthMap, ref2d).a;
- vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
- float refshad = texture2DRect(lightMap, ref2d).r;
- vec3 refn = texture2DRect(normalMap, ref2d).rgb;
- refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm
- refn = normalize(refn);
- // figure out how appropriate our guess actually was
- float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
- // darken reflections from points which face away from the reflected ray - our guess was a back-face
- //refapprop *= step(dot(refnorm, refn), 0.0);
- refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
- // get appropriate light strength for guess-point.
- // reflect light direction to increase the illusion that
- // these are reflections.
- vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
- float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad);
- // apply sun color to guess-point, dampen according to inappropriateness of guess
- float refmod = min(refapprop, reflit);
- vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
- vec3 ssshiny = (refprod * spec.a);
- ssshiny *= 0.3; // dampen it even more
- */
- vec3 ssshiny = vec3(0,0,0);
-
- // add the two types of shiny together
- col += (ssshiny + dumbshiny) * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
gl_FragColor.rgb = col;
-
- //gl_FragColor.rgb = gi_col.rgb;
- gl_FragColor.a = 0.0;
-
- //gl_FragColor.rg = scol_ambocc.rg;
- //gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb;
- //gl_FragColor.rgb = norm.rgb*0.5+0.5;
- //gl_FragColor.rgb = vec3(ambocc);
- //gl_FragColor.rgb = vec3(scol);
+ gl_FragColor.a = bloom;
}
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/app_settings/windlight/days/Colder%20Tones.xml b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
new file mode 100644
index 0000000000..63d0b099e1
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
@@ -0,0 +1,28 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Midnight</string>
+ </array>
+ <array>
+ <real>0.24999989569187164</real>
+ <string>Purple</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Blue Midday</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Blizzard</string>
+ </array>
+ <array>
+ <real>0.87499958276748657</real>
+ <string>Ghost</string>
+ </array>
+ <array>
+ <real>0.99999958276748657</real>
+ <string>Midnight</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
new file mode 100644
index 0000000000..f75b52e6ed
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
@@ -0,0 +1,32 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Night</string>
+ </array>
+ <array>
+ <real>0.12499994784593582</real>
+ <string>Blizzard</string>
+ </array>
+ <array>
+ <real>0.24999989569187164</real>
+ <string>Sunrise</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Midday 3</string>
+ </array>
+ <array>
+ <real>0.68749970197677612</real>
+ <string>Pirate</string>
+ </array>
+ <array>
+ <real>0.81249970197677612</real>
+ <string>Coastal Sunset</string>
+ </array>
+ <array>
+ <real>0.99999958276748657</real>
+ <string>Midnight</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
new file mode 100644
index 0000000000..6dc1ba9f4d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
@@ -0,0 +1,44 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>A-12AM</string>
+ </array>
+ <array>
+ <real>0.12499994784593582</real>
+ <string>A-3AM</string>
+ </array>
+ <array>
+ <real>0.22222213447093964</real>
+ <string>Barcelona</string>
+ </array>
+ <array>
+ <real>0.30208322405815125</real>
+ <string>Sunrise</string>
+ </array>
+ <array>
+ <real>0.37499985098838806</real>
+ <string>Sailor&apos;s Delight</string>
+ </array>
+ <array>
+ <real>0.53819423913955688</real>
+ <string>Coastal Afternoon</string>
+ </array>
+ <array>
+ <real>0.63194417953491211</real>
+ <string>Pirate</string>
+ </array>
+ <array>
+ <real>0.7048608660697937</real>
+ <string>Desert Sunset</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Coastal Sunset</string>
+ </array>
+ <array>
+ <real>0.87499958276748657</real>
+ <string>Blizzard</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
new file mode 100644
index 0000000000..302af5a9ba
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
@@ -0,0 +1,72 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.062499973922967911</real>
+ <string>A-12AM</string>
+ </array>
+ <array>
+ <real>0.12499994784593582</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.18749992549419403</real>
+ <string>A-3AM</string>
+ </array>
+ <array>
+ <real>0.24999989569187164</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.31249985098838806</real>
+ <string>A-6AM</string>
+ </array>
+ <array>
+ <real>0.37499985098838806</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.43749979138374329</real>
+ <string>A-9AM</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.5624997615814209</real>
+ <string>A-12PM</string>
+ </array>
+ <array>
+ <real>0.62499970197677612</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.68749970197677612</real>
+ <string>A-3PM</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.81249970197677612</real>
+ <string>A-6PM</string>
+ </array>
+ <array>
+ <real>0.87499958276748657</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.93749958276748657</real>
+ <string>A-9PM</string>
+ </array>
+ <array>
+ <real>0.99999958276748657</real>
+ <string>Sheer Surreality</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Tropicalia.xml b/indra/newview/app_settings/windlight/days/Tropicalia.xml
new file mode 100644
index 0000000000..89a56d4a13
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Tropicalia.xml
@@ -0,0 +1,32 @@
+<llsd>
+ <array>
+ <array>
+ <real>0.062499973922967911</real>
+ <string>Purple</string>
+ </array>
+ <array>
+ <real>0.16666659712791443</real>
+ <string>Funky Funky</string>
+ </array>
+ <array>
+ <real>0.31249985098838806</real>
+ <string>Sunrise</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Fine Day</string>
+ </array>
+ <array>
+ <real>0.66666638851165771</real>
+ <string>Desert Sunset</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Sailor&apos;s Delight</string>
+ </array>
+ <array>
+ <real>0.95833295583724976</real>
+ <string>Midnight</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Weird-O.xml b/indra/newview/app_settings/windlight/days/Weird-O.xml
new file mode 100644
index 0000000000..1e312f2464
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Weird-O.xml
@@ -0,0 +1,56 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Funky Funky</string>
+ </array>
+ <array>
+ <real>0.13194438815116882</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ <array>
+ <real>0.26041656732559204</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.40624985098838806</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ <array>
+ <real>0.43749979138374329</real>
+ <string>Ghost</string>
+ </array>
+ <array>
+ <real>0.46874979138374329</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.5486108660697937</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.6076386570930481</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.68055528402328491</real>
+ <string>Ghost</string>
+ </array>
+ <array>
+ <real>0.75694411993026733</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.87847185134887695</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.91319411993026733</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ <array>
+ <real>0.96527737379074097</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Midday.xml b/indra/newview/app_settings/windlight/skies/Midday.xml
new file mode 100644
index 0000000000..119b3e1418
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midday.xml
@@ -0,0 +1,141 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>1.0499999523162842</real>
+ <real>1.0499999523162842</real>
+ <real>1.0499999523162842</real>
+ <real>0.34999999403953552</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.24475815892219543</real>
+ <real>0.44872328639030457</real>
+ <real>0.75999999046325684</real>
+ <real>0.37999999523162842</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.49548381567001343</real>
+ <real>0.49548381567001343</real>
+ <real>0.63999998569488525</real>
+ <real>0.31999999284744263</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.40999999642372131</real>
+ <real>0.40999999642372131</real>
+ <real>0.40999999642372131</real>
+ <real>0.40999999642372131</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>1</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.199999809265137</real>
+ <real>10.01099967956543</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00017999998817685992</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>0.80000001192092896</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5</real>
+ <real>0.0010000000474974513</real>
+ <real>-0.47999998927116394</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>0.69999998807907104</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0.18999999761581421</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>1</real>
+ <real>-4.3711388286737929e-008</real>
+ <real>0</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>1605</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>0</real>
+ <key>sun_angle</key>
+ <real>1.5707963705062866</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>0.7342105507850647</real>
+ <real>0.78157895803451538</real>
+ <real>0.89999997615814209</real>
+ <real>0.29999998211860657</real>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Midnight.xml b/indra/newview/app_settings/windlight/skies/Midnight.xml
new file mode 100644
index 0000000000..0aba31214a
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midnight.xml
@@ -0,0 +1,141 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>0.20405027270317078</real>
+ <real>0.24246673285961151</real>
+ <real>0.32999998331069946</real>
+ <real>0.10999999940395355</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.44999998807907104</real>
+ <real>0.44999998807907104</real>
+ <real>0.44999998807907104</real>
+ <real>1</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.23999999463558197</real>
+ <real>0.23999999463558197</real>
+ <real>0.23999999463558197</real>
+ <real>1</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.87999999523162842</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.49940013885498</real>
+ <real>10.01099967956543</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00030000001424923539</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>0</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5</real>
+ <real>0.0010000000474974513</real>
+ <real>-0.47999998927116394</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>4</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>1</real>
+ <real>-4.8876205482883961e-007</real>
+ <real>1</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>906.20001220703125</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>2</real>
+ <key>sun_angle</key>
+ <real>4.7123894691467285</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>0.34876692295074463</real>
+ <real>0.35574248433113098</real>
+ <real>0.65999996662139893</real>
+ <real>0.2199999988079071</real>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Sunrise.xml b/indra/newview/app_settings/windlight/skies/Sunrise.xml
new file mode 100644
index 0000000000..bbc7aeec59
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunrise.xml
@@ -0,0 +1,141 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>0.80999994277954102</real>
+ <real>0.46289783716201782</real>
+ <real>0.62999993562698364</real>
+ <real>0.26999998092651367</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.15793180465698242</real>
+ <real>0.43499568104743958</real>
+ <real>0.87000000476837158</real>
+ <real>0.87000000476837158</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.20673196017742157</real>
+ <real>0.40988314151763916</real>
+ <real>0.47999998927116394</real>
+ <real>0.47999998927116394</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.22616604226328718</real>
+ <real>0.22616604226328718</real>
+ <real>0.22616604226328718</real>
+ <real>0.99997219085526012</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.88000025272481253</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.49940013883861</real>
+ <real>10.010999679576344</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00062000000616535544</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>2.6999279499073054</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5.0009990693069994</real>
+ <real>0.0010000000474963411</real>
+ <real>-0.48000101923815919</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>0.53999996185302734</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0.15999999642372131</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>0.094108223915100098</real>
+ <real>0.99556195735931396</real>
+ <real>0</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>563</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>0</real>
+ <key>sun_angle</key>
+ <real>0.094247691333293915</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>2.369999885559082</real>
+ <real>2.369999885559082</real>
+ <real>2.369999885559082</real>
+ <real>0.78999996185302734</real>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Sunset.xml b/indra/newview/app_settings/windlight/skies/Sunset.xml
new file mode 100644
index 0000000000..ebf08e1a3f
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunset.xml
@@ -0,0 +1,142 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>1.0199999809265137</real>
+ <real>0.80999994277954102</real>
+ <real>0.80999994277954102</real>
+ <real>1.0199999809265137</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.14522500336170197</real>
+ <real>0.39999699592590332</real>
+ <real>0.80000197887420654</real>
+ <real>1</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.10767599940299988</real>
+ <real>0.21348699927330017</real>
+ <real>0.25</real>
+ <real>1</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.87999999523162842</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.49940013885498</real>
+ <real>10.01099967956543</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00046000001020729542</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5</real>
+ <real>0.0010000000474974513</real>
+ <real>-0.47999998927116394</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>0.69999998807907104</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0.15999999642372131</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>0.07532646507024765</real>
+ <real>-0.99715894460678101</real>
+ <real>0</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>562.5</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>0</real>
+ <key>sun_angle</key>
+ <real>3.0661947727203369</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>2.8385701179504395</real>
+ <real>2.8385701179504395</real>
+ <real>2.8385701179504395</real>
+ <real>1</real>
+ </array>
+ </map>
+</llsd>
+
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index 4da155efda..1f9dc6e4e5 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -1,6 +1,6 @@
-version 29
+version 32
-// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
+// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
//
@@ -60,7 +60,6 @@ Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
RenderShaderLightingMaxLevel 1 3
RenderDeferred 1 1
-SkyUseClassicClouds 1 1
RenderDeferredSSAO 1 1
RenderShadowDetail 1 2
WatchdogDisabled 1 1
@@ -93,7 +92,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -246,10 +244,10 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
+// GL_ARB_map_buffer_range exists
//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
+list MapBufferRange
+RenderVBOMappingDisable 1 1
//
@@ -297,6 +295,7 @@ RenderDeferred 0 0
list Intel
RenderAnisotropic 1 0
+RenderVBOEnable 1 0
list GeForce2
RenderAnisotropic 1 0
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index dab73dc3d1..6e962f3c56 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -1,4 +1,4 @@
-version 25
+version 27
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
@@ -58,7 +58,6 @@ WLSkyDetail 1 128
Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
-SkyUseClassicClouds 1 1
RenderShaderLightingMaxLevel 1 3
RenderDeferred 1 1
RenderDeferredSSAO 1 1
@@ -91,7 +90,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -244,10 +242,10 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
+// GL_ARB_map_buffer_range exists
//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
+list MapBufferRange
+RenderVBOMappingDisable 1 1
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index a1e25aae08..2690e8ec70 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -1,4 +1,4 @@
-version 26
+version 30
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
@@ -47,8 +47,8 @@ RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
-RenderVBOEnable 1 1
-RenderVBOMappingDisable 1 1
+RenderVBOEnable 1 0
+RenderVBOMappingDisable 1 0
RenderVolumeLODFactor 1 2.0
UseStartScreen 1 1
UseOcclusion 1 1
@@ -59,12 +59,11 @@ Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 0.5
RenderShaderLightingMaxLevel 1 3
-SkyUseClassicClouds 1 1
RenderDeferred 1 1
RenderDeferredSSAO 1 1
RenderShadowDetail 1 2
WatchdogDisabled 1 1
-RenderUseStreamVBO 1 1
+RenderUseStreamVBO 1 0
RenderFSAASamples 1 16
//
@@ -93,7 +92,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -246,13 +244,6 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
-//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
-
-
-//
// "Default" setups for safe, low, medium, high
//
list safe
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index abe4ec9928..a0245f5369 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -1,4 +1,4 @@
-version 29
+version 31
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
@@ -59,7 +59,6 @@ Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
RenderShaderLightingMaxLevel 1 3
-SkyUseClassicClouds 1 1
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -93,7 +92,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -246,10 +244,10 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
+// GL_ARB_map_buffer_range exists
//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
+list MapBufferRange
+RenderVBOMappingDisable 1 1
//
@@ -295,6 +293,7 @@ RenderDeferred 0 0
list Intel
RenderAnisotropic 1 0
+RenderVBOEnable 1 0
list GeForce2
RenderAnisotropic 1 0
diff --git a/indra/newview/icons/beta/secondlife.icns b/indra/newview/icons/beta/secondlife.icns
new file mode 100644
index 0000000000..1fa50547bb
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife.ico b/indra/newview/icons/beta/secondlife.ico
new file mode 100644
index 0000000000..9bdd21b904
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_128.png b/indra/newview/icons/beta/secondlife_128.png
new file mode 100644
index 0000000000..fa42aa764b
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_16.png b/indra/newview/icons/beta/secondlife_16.png
new file mode 100644
index 0000000000..ff648cf3fc
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_256.BMP b/indra/newview/icons/beta/secondlife_256.BMP
new file mode 100644
index 0000000000..97bd67d3d6
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_256.png b/indra/newview/icons/beta/secondlife_256.png
new file mode 100644
index 0000000000..245e2c3e9f
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_32.png b/indra/newview/icons/beta/secondlife_32.png
new file mode 100644
index 0000000000..fd7f46bf4d
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_48.png b/indra/newview/icons/beta/secondlife_48.png
new file mode 100644
index 0000000000..cc3a795e2b
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_512.png b/indra/newview/icons/beta/secondlife_512.png
new file mode 100644
index 0000000000..a959bd9a9e
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife.icns b/indra/newview/icons/development/secondlife.icns
new file mode 100644
index 0000000000..44f63d384c
--- /dev/null
+++ b/indra/newview/icons/development/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/development/secondlife.ico b/indra/newview/icons/development/secondlife.ico
new file mode 100644
index 0000000000..b53f23ae58
--- /dev/null
+++ b/indra/newview/icons/development/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_128.png b/indra/newview/icons/development/secondlife_128.png
new file mode 100644
index 0000000000..9b9fe656fc
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_16.png b/indra/newview/icons/development/secondlife_16.png
new file mode 100644
index 0000000000..91493a033c
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_256.BMP b/indra/newview/icons/development/secondlife_256.BMP
new file mode 100644
index 0000000000..174b22319a
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_256.png b/indra/newview/icons/development/secondlife_256.png
new file mode 100644
index 0000000000..29ed40abdc
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_32.png b/indra/newview/icons/development/secondlife_32.png
new file mode 100644
index 0000000000..3b84f5ec77
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_48.png b/indra/newview/icons/development/secondlife_48.png
new file mode 100644
index 0000000000..d2636d9d72
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_512.png b/indra/newview/icons/development/secondlife_512.png
new file mode 100644
index 0000000000..75f9b231f4
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife.icns b/indra/newview/icons/project/secondlife.icns
new file mode 100644
index 0000000000..d6e26a8ed9
--- /dev/null
+++ b/indra/newview/icons/project/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/project/secondlife.ico b/indra/newview/icons/project/secondlife.ico
new file mode 100644
index 0000000000..ebb27e5325
--- /dev/null
+++ b/indra/newview/icons/project/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_128.png b/indra/newview/icons/project/secondlife_128.png
new file mode 100644
index 0000000000..d67b8228f9
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_16.png b/indra/newview/icons/project/secondlife_16.png
new file mode 100644
index 0000000000..91493a033c
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_256.BMP b/indra/newview/icons/project/secondlife_256.BMP
new file mode 100644
index 0000000000..cd890725f8
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_256.png b/indra/newview/icons/project/secondlife_256.png
new file mode 100644
index 0000000000..cccfaf7cba
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_32.png b/indra/newview/icons/project/secondlife_32.png
new file mode 100644
index 0000000000..ad7b33f789
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_48.png b/indra/newview/icons/project/secondlife_48.png
new file mode 100644
index 0000000000..104a931fbc
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_512.png b/indra/newview/icons/project/secondlife_512.png
new file mode 100644
index 0000000000..74e2fa9bc6
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.icns b/indra/newview/icons/release/secondlife.icns
new file mode 100644
index 0000000000..e15e34140d
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.ico b/indra/newview/icons/release/secondlife.ico
new file mode 100644
index 0000000000..28bf1e7664
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_128.png b/indra/newview/icons/release/secondlife_128.png
new file mode 100644
index 0000000000..bcf94dcae8
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_16.png b/indra/newview/icons/release/secondlife_16.png
new file mode 100644
index 0000000000..90311ea8b0
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_256.BMP b/indra/newview/icons/release/secondlife_256.BMP
new file mode 100644
index 0000000000..74deedd7d3
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_256.png b/indra/newview/icons/release/secondlife_256.png
new file mode 100644
index 0000000000..a89fb4c74f
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_32.png b/indra/newview/icons/release/secondlife_32.png
new file mode 100644
index 0000000000..530e8fc80c
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_48.png b/indra/newview/icons/release/secondlife_48.png
new file mode 100644
index 0000000000..cb33c51f8a
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_512.png b/indra/newview/icons/release/secondlife_512.png
new file mode 100644
index 0000000000..f291e60586
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife.icns b/indra/newview/icons/test/secondlife.icns
new file mode 100644
index 0000000000..eb8d16a7e7
--- /dev/null
+++ b/indra/newview/icons/test/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/test/secondlife.ico b/indra/newview/icons/test/secondlife.ico
new file mode 100644
index 0000000000..ceb8e8e6eb
--- /dev/null
+++ b/indra/newview/icons/test/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_128.png b/indra/newview/icons/test/secondlife_128.png
new file mode 100644
index 0000000000..019f65db28
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_16.png b/indra/newview/icons/test/secondlife_16.png
new file mode 100644
index 0000000000..91493a033c
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_256.BMP b/indra/newview/icons/test/secondlife_256.BMP
new file mode 100644
index 0000000000..e23fcfdbe9
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_256.png b/indra/newview/icons/test/secondlife_256.png
new file mode 100644
index 0000000000..f402424c51
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_32.png b/indra/newview/icons/test/secondlife_32.png
new file mode 100644
index 0000000000..80d6efe13d
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_48.png b/indra/newview/icons/test/secondlife_48.png
new file mode 100644
index 0000000000..bba938feba
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_512.png b/indra/newview/icons/test/secondlife_512.png
new file mode 100644
index 0000000000..10ff65312b
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_512.png
Binary files 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" /* ÿÿÿ<Aÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FD35 3DFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿý5=ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FA30 3CFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿú0<ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FB2F 1247 4B4A 4A4A 4A4A 4A4A 4A4A" /* ÿÿû/.GKJJJJJJJJJ */
- $"4A4B 450F 0101 0201 0101 0101 0101 0101" /* JKE............. */
- $"0102 0001 696C 3332 0000 05AB FF00 BE00" /* ....il32...«ÿ.¾. */
- $"025A 7881 847F 0064 9200 0262 BBC4 83C2" /* .Zx„..d’..b»ÄƒÂ */
- $"02C7 8451 9000 0255 86BF 84BC 03BF A064" /* .Ç„Q..U†¿„¼.¿ d */
- $"6389 6400 6281 0003 5770 A2A2 85A1 01A3" /* c‰d.b..Wp¢¢…¡.£ */
- $"9D89 9B07 9C97 6758 005B 95AC 88A7 02A8" /* ‰›.œ—gX.[•¬ˆ§.¨ */
- $"A4A7 89A8 05AB 925A 61A7 AE88 AC03 ABCA" /* ¤§‰¨.«’Za§®ˆ¬.«Ê */
- $"AEAB 88AC 05AE A15E 5B9A A788 A503 A0D7" /* ®«ˆ¬.®¡^[š§ˆ¥. × */
- $"D79F 88A5 05A8 9559 5990 A288 9F04 9BAB" /* ןˆ¥.¨•YY¢ˆŸ.›« */
- $"FBAE 9C87 9F05 A28B 5857 879D 879A 0595" /* û®œ‡Ÿ.¢‹XW‡‡š.• */
- $"BDD6 E6E3 9487 9A05 9D82 5656 7F97 8594" /* ½Öæ㔇š.‚VV.—…” */
- $"0995 8FB3 F4CF B1FF AD90 9585 9405 977A" /* Æ•³ôϱÿ­•…”.—z */
- $"0000 7793 8690 078D CDF8 B886 E8E5 8B86" /* ..w“†.Íø¸†è勆 */
- $"9005 9372 0000 708F 828C 808B 0984 BBF7" /* .“r..p‚Œ€‹Æ„»÷ */
- $"C687 85AB FFA9 8580 8B82 8C05 8E6D 0000" /* Ƈ…«ÿ©…€‹‚Œ.Žm.. */
- $"6B8A 8287 0D88 8785 8FF3 FDA1 8186 84E5" /* kŠ‚‡.ˆ‡…óý¡†„å */
- $"E484 8684 8705 8868 0000 6685 8183 117E" /* 䄆„‡.ˆh..f…ƒ.~ */
- $"B3E3 D0D2 FFDC D4DF DDDB D2FD D0DE E2B7" /* ³ãÐÒÿÜÔßÝÛÒýÐÞâ· */
- $"8082 8304 6400 0062 8081 7F06 76C5 FFDB" /* €‚ƒ.d..b€..vÅÿÛ */
- $"F9F3 E381 FF06 F6D4 BFF4 FFD3 7882 7F03" /* ùóãÿ.öÔ¿ôÿÓx‚.. */
- $"6100 005F 827B 0675 B0D9 E1FF C8D8 82DF" /* a.._‚{.u°ÙáÿÈØ‚ß */
- $"05BF F3C9 DCB9 7681 7B04 7A5E 0000 5C82" /* .¿óÉܹv{.z^..\‚ */
- $"7706 786F 96FF E879 7281 7306 7278 C8C2" /* w.xo–ÿèyrs.rxÈÂ */
- $"7074 7880 7706 7875 5C00 005A 7382 7405" /* ptx€w.xu\..Zs‚t. */
- $"71C1 E19A 6D74 8173 0574 6BA2 FFAD 6C81" /* qÁášmts.tk¢ÿ­l */
- $"7406 7571 5B00 005A 6F81 7104 6F77 F2AF" /* t.uq[..Zoq.owò¯ */
- $"6984 7105 6E7E FAFB 836D 8071 0772 6D5A" /* i„q.n~úûƒm€q.rmZ */
- $"0000 586C 6F80 6E03 6C7B 9368 866E 0467" /* ..Xlo€n.l{“h†n.g */
- $"C3FA 8B69 806E 076F 6A59 0000 586A 6E81" /* Ãú‹i€n.ojY..Xjn */
- $"6D01 6C68 876D 036B 717D 6B81 6D07 6E69" /* m.lh‡m.kq}km.ni */
- $"5900 0058 666A 8E69 0168 6682 6903 6A65" /* Y..XfjŽi.hf‚i.je */
- $"5900 BD59 0000 9B59 9E00 FF00 BE00 027D" /* Y.½Y..›Yž.ÿ.¾..} */
- $"98A0 829E 029F 9E85 9200 0284 D5DE 83DC" /* ˜ ‚ž.Ÿž…’..„ÕÞƒÜ */
- $"02E0 A275 9000 0279 A7DB 84D8 03DB BD87" /* .à¢u..y§Û„Ø.Û½‡ */
- $"8689 8700 8581 0003 7A92 C0C0 85BF 01C0" /* †‰‡.…..z’ÀÀ…¿.À */
- $"BB89 B907 BAB4 887B 007E B7CC 88C7 01C8" /* »‰¹.º´ˆ{.~·ÌˆÇ.È */
- $"C68A C805 CBB2 7C84 CAD1 89CF 02DE CFCE" /* ÆŠÈ.˲|„ÊщÏ.ÞÏÎ */
- $"88CF 05D2 C380 7FBF CC88 CA03 C7E8 E5C6" /* ˆÏ.ÒÀ.¿ÌˆÊ.ÇèåÆ */
- $"88CA 05CD B87C 7CB7 CA88 C704 C4CD FCCD" /* ˆÊ.͸||·ÊˆÇ.ÄÍüÍ */
- $"C587 C705 CAB0 7A7A AFC7 87C4 05C1 D4E3" /* ŇÇ.Ê°zz¯Ç‡Ä.ÁÔã */
- $"F0ED C087 C405 C8A8 7979 A7C4 85C0 09C1" /* ðíÀ‡Ä.Ȩyy§Ä…ÀÆÁ */
- $"BDD0 F7E1 D1FF CDBE C185 C005 C4A1 0000" /* ½Ð÷áÑÿ;Á…À.Ä¡.. */
- $"A0C1 86BD 07BA DEFB D5B7 F2EE B986 BD05" /*  Á†½.ºÞûÕ·ò½. */
- $"C09A 0000 9ABE 85BA 09B6 D4F9 DBB8 B6CD" /* Àš..š¾…ºÆ¶ÔùÛ¸¶Í */
- $"FFCA B785 BA05 BD94 0000 94B9 83B6 0EB4" /* ÿÊ·…º.½”..”¹ƒ¶.´ */
- $"B3B9 F7FE C4B0 B4B2 EFED B2B4 B4B5 82B6" /* ³¹÷þÄ°´²ïí²´´µ‚¶ */
- $"05B8 8F00 008E B481 B211 AFCD EBDF E0FF" /* .¸..Ž´².¯Íëßàÿ */
- $"E8E2 E9E8 E6E0 FEDF E8EA D0B0 81B2 05B3" /* èâéèæàþßèêа².³ */
- $"8A00 0089 AF81 AD06 A8D9 FFE7 FBF7 EB81" /* Š..‰¯­.¨Ùÿçû÷ë */
- $"FF06 F9E1 D3F8 FFE3 A980 AD05 AEAD 8600" /* ÿ.ùáÓøÿã©€­.®­†. */
- $"0086 82A9 06A5 CBE5 EAFF DAE5 82EA 05D3" /* .†‚©.¥ËåêÿÚå‚ê.Ó */
- $"F7DA E8D1 A680 A906 AAA7 8300 0082 A382" /* ÷ÚèѦ€©.ª§ƒ..‚£‚ */
- $"A405 9FB7 FFF0 A5A1 81A2 05A1 A5D9 D39F" /* ¤.Ÿ·ÿ𥡢.¡¥ÙÓŸ */
- $"A281 A406 A5A1 8000 0080 9F82 A004 9ED2" /* ¢¤.¥¡€..€Ÿ‚ .žÒ */
- $"E9BA 9B83 A004 9ABF FFC5 9A81 A007 A19C" /* 麛ƒ .š¿ÿÅš .¡œ */
- $"7F00 007E 999D 809B 059A 9FF6 C696 9C83" /* ...~™€›.šŸöÆ–œƒ */
- $"9B05 99A4 FBFB A799 809B 079C 977D 0000" /* ›.™¤ûû§™€›.œ—}.. */
- $"7C95 9980 9803 97A1 B295 8698 0494 D5FC" /* |•™€˜.—¡²•†˜.”Õü */
- $"AC95 8098 0799 937C 0000 7C93 9782 9600" /* ¬•€˜.™“|..|“—‚–. */
- $"9387 9603 9599 A295 8196 0797 917C 0000" /* “‡–.•™¢•–.—‘|.. */
- $"7B8E 928D 9102 9290 8F82 9103 928C 7B00" /* {Ž’‘.’‚‘.’Œ{. */
- $"BD7C 0000 9B7C 9E00 FF00 BE00 0275 9199" /* ½|..›|ž.ÿ.¾..u‘™ */
- $"8498 007E 9200 027D D0D9 83D7 02DB 9B6C" /* „˜.~’..}ÐÙƒ×.Û›l */
- $"9000 0271 A0D5 84D2 03D5 B67F 7E89 7F00" /* ..q Õ„Ò.Õ¶.~‰.. */
- $"7D81 0003 728B BBBB 85BA 02BB B6B3 88B4" /* }..r‹»»…º.»¶³ˆ´ */
- $"08B5 AF81 7300 76B0 C6C2 87C1 01C2 C089" /* .µ¯s.v°Æ‡Á.ÂÀ‰ */
- $"C206 C3C5 AB75 7CC3 CA89 C801 DBC9 89C8" /* Â.ÃÅ«u|ÃʉÈ.ÛÉ‰È */
- $"05CB BD78 77B9 C588 C304 C0E5 E2BF C487" /* .˽xw¹ÅˆÃ.Àåâ¿Ä‡ */
- $"C305 C6B2 7574 B0C3 87C0 05BF BCC7 FCC7" /* Ã.Ʋut°Ã‡À.¿¼ÇüÇ */
- $"BE87 C005 C3A9 7272 A7BF 87BC 05B9 D0E1" /* ¾‡À.érr§¿‡¼.¹Ðá */
- $"EEEB B887 BC05 C0A1 7171 A0BC 86B8 07B5" /* î븇¼.À¡qq ¼†¸.µ */
- $"CBF6 DDCB FFC7 B586 B805 BB99 0000 98B9" /* ËöÝËÿǵ†¸.»™..˜¹ */
- $"86B5 07B2 DBFA D0AE F0EC B186 B505 B892" /* †µ.²ÛúЮð챆µ.¸’ */
- $"0000 91B5 82B2 80B1 09AC D0F9 D7AF ADC7" /* ..‘µ‚²€±Æ¬Ðùׯ­Ç */
- $"FFC4 AD80 B182 B205 B48C 0000 8BB1 81AD" /* ÿÄ­€±‚².´Œ..‹±­ */
- $"11AE ADAC ABB1 F6FD BDA8 ABAA EDEB A9AB" /* .®­¬«±öý½¨«ªíë©« */
- $"ACAC AE81 AD05 AF87 0000 86AB 81A9 11A6" /* ¬¬®­.¯‡..†«©.¦ */
- $"C8E9 DCDE FFE5 DFE7 E6E4 DDFE DCE6 E9CB" /* ÈéÜÞÿåßçæäÝþÜæéË */
- $"A781 A905 AA82 0000 81A6 81A5 069F D6FF" /* §©.ª‚..¦¥.ŸÖÿ */
- $"E4FA F6EA 81FF 06F8 DFCF F7FF E0A0 80A5" /* äúöêÿ.øßÏ÷ÿà €¥ */
- $"05A6 A47E 0000 7D82 A006 9BC6 E3E8 FFD6" /* .¦¤~..}‚ .›ÆãèÿÖ */
- $"E282 E805 CFF6 D7E6 CC9C 80A0 06A1 9E7B" /* â‚è.Ïö×æÌœ€ .¡ž{ */
- $"0000 7A9B 829C 0496 B1FF EF9D 8399 049C" /* ..z›‚œ.–±ÿ.œ */
- $"D6D0 969A 819C 069D 9979 0000 7897 8198" /* ÖЖšœ.™y..x—˜ */
- $"0597 95CF E7B4 9283 9704 91BA FFC0 9181" /* .—•Ïç´’ƒ—.‘ºÿÀ‘ */
- $"9807 9994 7700 0076 9295 8094 0493 98F5" /* ˜.™”w..v’•€”.“˜õ */
- $"C28E 8494 0592 9DFB FBA0 9180 9407 958F" /* ÂŽ„”.’ûû ‘€”.• */
- $"7500 0074 8E91 8090 038F 9AAC 8C86 9004" /* u..tŽ‘€.š¬Œ†. */
- $"8BD1 FBA6 8C80 9007 918B 7400 0074 8B8F" /* ‹Ñû¦Œ€.‘‹t..t‹ */
- $"808E 048F 8E8B 8E8F 848E 048F 8D91 9B8D" /* €Ž.Ž‹Ž„Ž.‘› */
- $"818E 078F 8974 0000 7487 8B8E 8A01 8987" /* Ž.‰t..t‡‹ŽŠ.‰‡ */
- $"828A 038B 8574 00BD 7400 009B 749E 006C" /* ‚Š.‹…t.½t..›tž.l */
- $"386D 6B00 0004 0800 0000 0000 0000 0000" /* 8mk............. */
- $"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 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 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 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0B76 8889 8989" /* ...........vˆ‰‰‰ */
- $"8989 8988 3800 0000 0000 0000 0000 0000" /* ‰‰‰ˆ8........... */
- $"0000 0000 0000 0000 0000 36FF FFFF FFFF" /* ..........6ÿÿÿÿÿ */
- $"FFFF FFFF A301 0000 0000 0000 0000 0000" /* ÿÿÿÿ£........... */
- $"0000 0000 0000 0000 0006 A4FF FFFF FFFF" /* ..........¤ÿÿÿÿÿ */
- $"FFFF FFFF DE59 3F40 4040 4040 4040 4040" /* ÿÿÿÿÞY?@@@@@@@@@ */
- $"4040 4033 0000 0000 1384 F8F3 F3F3 F3F3" /* @@@3.....„øóóóóó */
- $"F3F3 F3F3 F7F9 F7F7 F7F7 F7F7 F7F7 F7F7" /* óóóó÷ù÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F1 520D 001D E1FF FAFB FBFB FBFB" /* ÷÷÷ñR...áÿúûûûûû */
- $"FBFB FBFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ûûûûûûûûûûûûûûûû */
- $"FBFB FBFB FFCD 0E39 FFFF FFFF FFFF FFFF" /* ûûûûÿÍ.9ÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 1F26 F6FF FFFF FFFF FFFF" /* ÿÿÿÿÿø.&öÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE5 1318 ECFF FFFF FFFF FFFF" /* ÿÿÿÿÿå..ìÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD5 0A0F DDFF FFFF FFFF FFFF" /* ÿÿÿÿÿÕÂ.Ýÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC6 0206 D0FF FFFF FFFF FFFF" /* ÿÿÿÿÿÆ..Ðÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB6 0000 C2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¶..Âÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 0000 B2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¥..²ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF95 0000 A4FF FFFF FFFF FFFF" /* ÿÿÿÿÿ•..¤ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF87 0000 96FF FFFF FFFF FFFF" /* ÿÿÿÿÿ‡..–ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF7A 0000 8AFF FFFF FFFF FFFF" /* ÿÿÿÿÿz..Šÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6D 0000 7FFF FFFF FFFF FFFF" /* ÿÿÿÿÿm...ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF63 0000 77FF FFFF FFFF FFFF" /* ÿÿÿÿÿc..wÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5A 0000 6FFF FFFF FFFF FFFF" /* ÿÿÿÿÿZ..oÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF54 0000 69FF FFFF FFFF FFFF" /* ÿÿÿÿÿT..iÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4F 0000 65FF FFFF FFFF FFFF" /* ÿÿÿÿÿO..eÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4C 0000 64FF FFFF FFFF FFFF" /* ÿÿÿÿÿL..dÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4B 0000 61FF FFFF FFFF FFFF" /* ÿÿÿÿÿK..aÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF48 0004 2C6D 7574 7474 7474" /* ÿÿÿÿÿH..,muttttt */
- $"7474 7474 7474 7474 7474 7474 7474 7474" /* tttttttttttttttt */
- $"7474 7475 6824 0202 0D18 1C1C 1C1C 1C1C" /* tttuh$.......... */
- $"1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C" /* ................ */
- $"1C1C 1C1C 170C 0100 0103 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0301 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0069 6833 3200 0009 DEFF" /* .......ih32..ÆÞÿ */
- $"00FF 00FF 00AD 0001 5E66 8865 0261 5859" /* .ÿ.ÿ.­..^fˆe.aXY */
- $"9C00 025E A6BA 87B7 04B9 AE67 5659 9B00" /* œ..^¦º‡·.¹®gVY›. */
- $"0266 BABF 87BE 04BF BC70 5459 9A00 0252" /* .fº¿‡¾.¿¼pTYš..R */
- $"81BD 89BA 03BC 8652 5491 5585 0003 5580" /* ½‰º.¼†RT‘U…..U€ */
- $"B7BA 89B9 02BA B497 918F 0191 7683 0003" /* ·º‰¹.º´—‘.‘vƒ.. */
- $"5864 9399 8B97 0098 929B 039D 855F 5A80" /* Xd“™‹—.˜’›.…_Z€ */
- $"0002 649D A990 A500 A490 A509 A6A9 9B65" /* ..d©¥.¤¥Æ¦©›e */
- $"0000 85B4 AFAF 8EAE 03B0 AEAC AF8E AE07" /* ..…´¯¯Ž®.°®¬¯Ž®. */
- $"AFAF B280 0000 80AD 8FA9 04A8 B2E7 ACA8" /* ¯¯²€..€­©.¨²ç¬¨ */
- $"90A9 05AB 7A00 0076 A98F A604 A5A4 F1E0" /* ©.«z..v©¦.¥¤ñà */
- $"A08F A606 A7A6 7100 006D A390 A204 9DC8" /*  ¦.§¦q..m£¢.È */
- $"FFB9 9C8E A207 A3A0 6A00 0065 9D9F 8D9E" /* ÿ¹œŽ¢.£ j..eŸž */
- $"069F 9C96 A2FA EF9C 8E9E 079F 9A65 0000" /* .Ÿœ–¢úž.Ÿše.. */
- $"6097 9C8D 9B07 97A5 E2C6 D2FF C394 8D9B" /* `—œ›.—¥âÆÒÿÔ› */
- $"079C 9461 0000 5E90 988C 9709 959A D5CE" /* .œ”a..^˜Œ—Æ•šÕÎ */
- $"E4B2 FCF4 9A95 8C97 0799 8D5E 0000 5A8B" /* ä²üôš•Œ—.™^..Z‹ */
- $"968C 9409 8EC8 FFF6 C18D DDFF C78C 8C94" /* –Œ”ÆŽÈÿöÁÝÿÇŒŒ” */
- $"0796 875B 0000 5885 938B 910B 8F8F E5FF" /* .–‡[..X…“‹‘.åÿ */
- $"FFA9 87AA FFF7 988E 8B91 0793 8159 0000" /* ÿ©‡ªÿ÷˜Ž‹‘.“Y.. */
- $"577F 908B 8E0B 87CF D4D0 CA89 8D8B E0FF" /* W.‹Ž.‡ÏÔÐʉ‹àÿ */
- $"C786 8B8E 0790 7B58 0000 5779 8C86 8A81" /* dž‹Ž.{X..WyŒ†Š */
- $"8B0D 84A5 FFFF E38B 898B 85A8 FFF8 9387" /* ‹.„¥ÿÿ㋉‹…¨ÿø“‡ */
- $"818B 868A 078C 7557 0000 5674 8A85 8800" /* ‹†Š.ŒuW..VtŠ…ˆ. */
- $"8680 820E 8385 E4FF FFB9 7C83 8381 7FDD" /* †€‚.ƒ…äÿÿ¹|ƒƒ.Ý */
- $"FFC6 7E81 8200 8585 8807 8A71 5759 0056" /* ÿÆ~‚.……ˆ.ŠqWY.V */
- $"6F87 8485 1983 929F A3A0 94B0 FFFF E39D" /* o‡„….ƒ’Ÿ£ ”°ÿÿã */
- $"9F9E 9DA3 9AB0 FBF4 98A0 A09F A192 8484" /* Ÿž£š°ûô˜  Ÿ¡’„„ */
- $"8507 876D 5759 0056 6984 8482 197C A7EB" /* ….‡mWY.Vi„„‚.|§ë */
- $"FBF1 C2EC FFFB C1ED F2F6 ECFB EDD9 DBFF" /* ûñÂìÿûÁíòöìûíÙÛÿ */
- $"D4EE F0F6 F6B7 7C84 8207 8369 5700 5956" /* Ôîðöö·|„‚.ƒiW.YV */
- $"6481 847F 0979 A3FF FFEB CCFF FFD5 E084" /* d„.Æy£ÿÿëÌÿÿÕà„ */
- $"FF03 C8F1 BCC4 80FF 01C0 7785 7F06 6557" /* ÿ.Èñ¼Ä€ÿ.Àw…..eW */
- $"5959 5661 7E84 7D08 76A3 FFFF C3F4 FFF5" /* YYVa~„}.v£ÿÿÃôÿõ */
- $"CB85 FF08 EDA8 CCC0 F2FF FFC1 7485 7D06" /* Ë…ÿ.í¨ÌÀòÿÿÁt…}. */
- $"6358 5959 575E 7B84 7A09 7692 D0BE D6FF" /* cXYYW^{„zÆv’оÖÿ */
- $"FFC2 B9D0 84CF 08CD B9FF F1B1 CED0 A574" /* ÿ¹ЄÏ.͹ÿñ±ÎÐ¥t */
- $"847A 0679 6058 5959 585D 8678 0776 6A9C" /* „z.y`XYYX]†x.vjœ */
- $"FFFF F081 7086 7106 75D1 D89D 6A71 7484" /* ÿÿðp†q.uÑØjqt„ */
- $"7808 7976 5E58 5959 585B 7486 7505 73B9" /* x.yv^XYYX[t†u.s¹ */
- $"F5FF AC6D 8775 0570 8CEB F889 6F85 7508" /* õÿ¬m‡u.pŒëø‰o…u. */
- $"7672 5C58 5959 5859 7285 7306 6F8A E1C6" /* vr\XYYXYr…s.oŠáÆ */
- $"C176 7287 7306 7179 EEFF E173 7184 7308" /* Ávr‡s.qyîÿásq„s. */
- $"7470 5B58 5959 5859 7085 7205 6B97 FFE7" /* tp[XYYXYp…r.k—ÿç */
- $"776E 8972 0569 C6FF FFB4 6A84 7202 736E" /* wn‰r.iÆÿÿ´j„r.sn */
- $"5A81 5901 586D 856F 0567 B9D9 786B 7089" /* ZY.Xm…o.g¹Ùxkp‰ */
- $"6F06 6993 FFFF F173 6D83 6F01 706B 8259" /* o.i“ÿÿñsmƒo.pk‚Y */
- $"0157 6B85 6E03 6C8C 7269 8B6E 066D 6BD3" /* .Wk…n.lŒri‹n.mkÓ */
- $"FFCB 6C6D 836E 026F 6958 8159 0256 6A6E" /* ÿËlmƒn.oiXY.Vjn */
- $"856D 0169 6B8D 6D04 6A73 8A6D 6B84 6D02" /* …m.ikm.jsŠmk„m. */
- $"6E68 5881 5902 566A 6E98 6D02 6B67 6C85" /* nhXY.Vjn˜m.kgl… */
- $"6D02 6E68 5881 5902 5665 69A3 6802 6963" /* m.nhXY.Vei£h.ic */
- $"5881 5901 5858 A559 0058 B059 0000 AB59" /* XY.XX¥Y.X°Y..«Y */
- $"8000 A959 DF00 FF00 FF00 FF00 AD00 0081" /* €.©Yß.ÿ.ÿ.ÿ.­.. */
- $"8987 0283 7B7C 9C00 0280 C1D3 87D1 04D2" /* ‰‡.ƒ{|œ..€ÁÓ‡Ñ.Ò */
- $"C787 7A7C 9B00 0288 D4DA 87D9 04DA D68F" /* LJz|›..ˆÔÚ‡Ù.ÚÖ */
- $"787C 9A00 0276 A2D8 89D6 02D7 A476 9278" /* x|š..v¢Ø‰Ö.פv’x */
- $"8500 0379 A2D3 D789 D503 D6D0 B5AD 90AE" /* …..y¢Ó׉Õ.Öе­® */
- $"01B0 9683 0003 7C87 B1B7 8BB5 00B6 92B9" /* .°–ƒ..|‡±·‹µ.¶’¹ */
- $"03BA A282 7D80 0003 87BD C8C5 90C4 00C5" /* .º¢‚}€..‡½ÈÅÄ.Å */
- $"8FC4 08C5 C8B9 8700 00A7 D6D1 90D0 01CD" /* Ä.Åȹ‡..§ÖÑÐ.Í */
- $"CF90 D006 D1D3 A000 00A3 D18F CD04 CCD1" /* ÏÐ.ÑÓ ..£ÑÍ.ÌÑ */
- $"EECC CC90 CD05 CF9B 0000 9ACE 90CB 03CA" /* îÌÌÍ.Ï›..šÎË.Ê */
- $"F7E9 C68F CB07 CCCB 9300 0091 C9C9 8FC8" /* ÷éÆË.ÌË“..‘ÉÉÈ */
- $"04C6 DFFF D2C5 8EC8 07C9 C68D 0000 8BC5" /* .ÆßÿÒÅŽÈ.ÉÆ..‹Å */
- $"C78D C606 C7C5 BFC7 FDF3 C38E C607 C7C0" /* ÇÆ.ÇÅ¿ÇýóÃŽÆ.ÇÀ */
- $"8800 0086 C0C5 8DC4 07C2 C7EB DAE4 FFD9" /* ˆ..†ÀÅÄ.ÂÇëÚäÿÙ */
- $"C08D C407 C6BC 8400 0082 BBC4 8CC2 09C1" /* ÀÄ.Ƽ„..‚»ÄŒÂÆÁ */
- $"C2E2 DEED D1FD F7C1 C18C C207 C4B6 8100" /* ÂâÞíÑý÷ÁÁŒÂ.Ķ. */
- $"007F B5C2 8CC0 09BC DBFF F8D7 BBEA FFDB" /* ..µÂŒÀƼÛÿø×»êÿÛ */
- $"BA8C C007 C2B0 7E00 007C B0C0 8BBE 0BBD" /* ºŒÀ.°~..|°À‹¾.½ */
- $"BAED FFFF CCB8 CCFF F9BF BC8B BE07 C0AA" /* ºíÿÿ̸Ìÿù¿¼‹¾.Àª */
- $"7C00 007B ABBF 8BBC 0BB7 DEE1 DFDF B9BB" /* |..{«¿‹¼.·Þáßß¹» */
- $"BAED FFDA B78B BC07 BFA5 7B00 007A A5BC" /* ºíÿÚ·‹¼.¿¥{..z¥¼ */
- $"89B9 0EBA B6C6 FFFF ECB9 B9BA B6CB FFFA" /* ‰¹.º¶Æÿÿì¹¹º¶Ëÿú */
- $"BCB8 8AB9 07BC 9F7A 0000 799F B984 B601" /* ¼¸Š¹.¼Ÿz..yŸ¹„¶. */
- $"B7B5 82B3 0CEC FFFF D4AF B3B3 B2B1 EAFF" /* ·µ‚³.ìÿÿÔ¯³³²±êÿ */
- $"D9B0 81B3 01B5 B784 B607 B899 797C 0079" /* Ù°³.µ·„¶.¸™y|.y */
- $"99B7 84B4 13B3 B9BE C1C0 B9CB FFFF EDBE" /* ™·„´.³¹¾ÁÀ¹Ëÿÿí¾ */
- $"BFBE BEC1 BCCB FCF7 BB80 BF02 C0B9 B384" /* ¿¾¾Á¼Ëü÷»€¿.À¹³„ */
- $"B407 B694 797C 0079 93B4 84B1 19AD C7F1" /* ´.¶”y|.y“´„±.­Çñ */
- $"FBF5 D6F1 FFFD D5F2 F5F8 F1FB F2E4 E7FF" /* ûõÖñÿýÕòõøñûòäçÿ */
- $"E2F3 F4F8 F8D0 AD84 B107 B290 7A00 7C79" /* âóôøøЭ„±.²z.|y */
- $"8DB0 84AE 09AA C3FF FFF2 DCFF FFE2 E984" /* °„®ÆªÃÿÿòÜÿÿâé„ */
- $"FF03 D9F6 D1D8 80FF 01D6 A985 AE06 8C7A" /* ÿ.ÙöÑØ€ÿ.Ö©…®.Œz */
- $"7C7C 7989 AD84 AB08 A7C3 FFFF D5F7 FFF8" /* ||y‰­„«.§ÃÿÿÕ÷ÿø */
- $"DA85 FF08 F2C2 DAD3 F6FF FFD7 A583 AB08" /* Ú…ÿ.òÂÚÓöÿÿ×¥ƒ«. */
- $"ACAA 897A 7C7C 7A86 A984 A809 A5B7 E0D3" /* ¬ª‰z||z†©„¨Æ¥·àÓ */
- $"E2FF FFD6 D0E0 84DF 08DD CFFF F5CB DFE0" /* âÿÿÖÐà„ß.ÝÏÿõËßà */
- $"C3A4 83A8 07A9 A686 7A7C 7C7A 8386 A506" /* 䃨.©¦†z||zƒ†¥. */
- $"A39B BAFF FFF5 AA87 A006 A3DF E2BA 9BA1" /* £›ºÿÿõª‡ .£ß⺛¡ */
- $"A284 A507 A6A2 837B 7C7C 7B82 87A2 059F" /* ¢„¥.¦¢ƒ{||{‚‡¢.Ÿ */
- $"CCF8 FFC7 9C87 A205 9EAF F0F9 AD9E 85A2" /* ÌøÿÇœ‡¢.ž¯ðù­ž…¢ */
- $"08A3 9F81 7B7C 7C7B 7F9D 859F 069C AEE8" /* .£Ÿ{||{.…Ÿ.œ®è */
- $"D4D3 A09E 879F 069D A3F4 FFE8 9D9E 849F" /* ÔÓ ž‡Ÿ.£ôÿèž„Ÿ */
- $"09A0 9B7F 7B7C 7C7B 7E9A 9D84 9C05 98B5" /* Æ ›.{||{~š„œ.˜µ */
- $"FFEE 9F99 899C 0596 D7FF FFC9 9684 9C09" /* ÿ‰œ.–×ÿÿÉ–„œÆ */
- $"9D97 7E7B 7C7C 7B7C 989B 849A 0494 CCE4" /* —~{||{|˜›„š.”Ìä */
- $"A097 8A9A 0695 B3FF FFF4 9C99 839A 019B" /*  —Šš.•³ÿÿôœ™ƒš.› */
- $"9482 7C02 7B95 9984 9803 97AD 9B95 8B98" /* ”‚|.{•™„˜.—­›•‹˜ */
- $"0697 96E0 FFDA 9797 8398 0199 9282 7C02" /* .—–àÿÚ——ƒ˜.™’‚|. */
- $"7A93 9785 9601 9395 8D96 0494 9AAB 9695" /* z“—…–.“•–.”š«–• */
- $"8496 0297 8F7B 817C 027A 9297 9896 0294" /* „–.—{|.z’—˜–.” */
- $"9295 8596 0297 8F7B 817C 027A 8C91 A390" /* ’•…–.—{|.zŒ‘£ */
- $"0291 897A 817C 017B 7BA5 7C00 7BB0 7C00" /* .‘‰z|.{{¥|.{°|. */
- $"00AB 7C80 00A9 7CDF 00FF 00FF 00FF 00AD" /* .«|€.©|ß.ÿ.ÿ.ÿ.­ */
- $"0000 7A89 8002 7C73 749C 0002 79BC CE87" /* ..z‰€.|stœ..y¼Î‡ */
- $"CC04 CDC2 8172 749B 0002 80CF D587 D304" /* Ì.ÍÂrt›..€ÏÕ‡Ó. */
- $"D4D1 8870 749A 0002 6E9B D288 D003 D1D2" /* Ôшptš..n›ÒˆÐ.ÑÒ */
- $"9E6E 9270 8500 0371 9BCE D289 D002 D1CB" /* žn’p…..q›ÎÒ‰Ð.ÑË */
- $"AF91 A801 AA90 8300 0474 80AC B2AF 8AB0" /* ¯‘¨.ªƒ..t€¬²¯Š° */
- $"02B1 B3B4 90B3 03B5 9D7A 7580 0002 80B7" /* .±³´³.µzu€..€· */
- $"C3A4 BF09 C0C3 B57F 0000 A0CF CACA 8DC9" /* ä¿ÆÀõ... ÏÊÊÉ */
- $"04CA CAC6 C8CA 8EC9 07CA CACD 9900 009C" /* .ÊÊÆÈÊŽÉ.ÊÊÍ™..œ */
- $"CA8F C604 C5CB EDC5 C58F C606 C7C8 9400" /* ÊÆ.ÅËíÅÅÆ.ÇÈ”. */
- $"0093 C790 C403 C3F6 E7BF 8FC4 07C5 C48B" /* .“ÇÄ.Ãöç¿Ä.ÅÄ‹ */
- $"0000 8AC2 C28F C104 BEDA FFCE BE8E C107" /* ..ŠÂÂÁ.¾ÚÿξŽÁ. */
- $"C2BF 8600 0083 BEC0 8DBF 06C0 BEB8 C1FC" /* ¿†..ƒ¾À¿.À¾¸Áü */
- $"F3BC 8EBF 07C0 BA81 0000 7EB9 BE8D BD07" /* 󼎿.Àº..~¹¾½. */
- $"BAC0 E9D6 E1FF D5B8 8DBD 07BF B57C 0000" /* ºÀéÖáÿÕ¸½.¿µ|.. */
- $"7AB3 BC8C BA09 B9BB DFDB EBCB FDF7 BAB9" /* z³¼ŒºÆ¹»ßÛëËý÷º¹ */
- $"8CBA 07BC AE79 0000 77AE B98C B709 B3D7" /* Œº.¼®y..w®¹Œ·Æ³× */
- $"FFF8 D3B2 E8FF D7B1 8CB7 07B9 A876 0000" /* ÿøÓ²èÿ×±Œ·.¹¨v.. */
- $"74A9 B78A B50C B6B5 B2EC FFFF C6AF C6FF" /* t©·Šµ.¶µ²ìÿÿƯÆÿ */
- $"F9B8 B48B B507 B7A3 7400 0073 A3B6 8BB3" /* ù¸´‹µ.·£t..s£¶‹³ */
- $"0BAE DBDE DDDB B0B3 B1EA FFD7 AE8B B307" /* .®ÛÞÝÛ°³±êÿ×®‹³. */
- $"B59D 7300 0072 9CB3 8AB0 04AD C0FF FFEA" /* µs..rœ³Š°.­Àÿÿê */
- $"80B0 05AD C4FF F9B4 AF8A B007 B397 7200" /* €°.­Äÿù´¯Š°.³—r. */
- $"0071 97B1 85AE 00AC 80AA 0EAB AAEA FFFF" /* .q—±…®.¬€ª.«ªêÿÿ */
- $"CFA6 AAAA A9A7 E7FF D5A7 81AA 00AC 85AE" /* Ϧªª©§çÿÕ§ª.¬…® */
- $"07B0 9171 7400 7191 AE84 AB13 AAB2 B9BB" /* .°‘qt.q‘®„«.ª²¹» */
- $"BAB2 C6FF FFEB B7B9 B8B7 BBB6 C5FC F7B5" /* º²Æÿÿë·¹¸·»¶Åü÷µ */
- $"80B9 01BA B285 AB07 AD8C 7174 0070 8BAB" /* €¹.º²…«.­Œqt.p‹« */
- $"84A8 19A4 C1EF FBF4 D2F0 FFFC D1F1 F4F8" /* „¨.¤ÁïûôÒðÿüÑñôø */
- $"F0FB F1E2 E5FF DFF2 F3F8 F8CB A484 A807" /* ðûñâåÿßòóøøˤ„¨. */
- $"A988 7200 7471 85A7 84A5 09A1 BDFF FFF0" /* ©ˆr.tq…§„¥Æ¡½ÿÿð */
- $"D9FF FFE0 E784 FF03 D6F5 CDD4 80FF 01D2" /* Ùÿÿàç„ÿ.ÖõÍÔ€ÿ.Ò */
- $"9F85 A506 8472 7474 7181 A484 A208 9EBD" /* Ÿ…¥.„rttq¤„¢.ž½ */
- $"FFFF D2F6 FFF7 D785 FF08 F1BD D8CF F6FF" /* ÿÿÒöÿ÷×…ÿ.ñ½ØÏöÿ */
- $"FFD3 9C83 A208 A3A2 8172 7474 727E A084" /* ÿÓœƒ¢.£¢rttr~ „ */
- $"9F09 9CB0 DDCF DFFF FFD2 CCDD 84DC 08DA" /* ŸÆœ°ÝÏßÿÿÒÌÝ„Ü.Ú */
- $"CBFF F4C6 DCDD BE9B 839F 08A0 9E7E 7274" /* ËÿôÆÜݾ›ƒŸ. ž~rt */
- $"7472 7C9D 849C 089D 9B93 B5FF FFF4 A397" /* tr|„œ.›“µÿÿô£— */
- $"8598 0897 9BDD E0B4 9398 9A9D 839C 089D" /* …˜.—›Ýà´“˜šƒœ. */
- $"9A7B 7374 7473 7998 8699 0597 C8F7 FFC1" /* š{sttsy˜†™.—È÷ÿÁ */
- $"9387 9905 96A9 EEF9 A695 8599 089A 9679" /* “‡™.–©îù¦•…™.š–y */
- $"7374 7473 7795 8596 0693 A7E6 D1D0 9895" /* sttsw•…–.“§æÑИ• */
- $"8796 0695 9BF3 FFE7 9595 8496 0897 9377" /* ‡–.•›óÿç••„–.—“w */
- $"7374 7473 7693 8595 058F B0FF ED98 9289" /* sttsv“…•.°ÿ혒‰ */
- $"9505 8ED4 FFFF C58E 8495 0996 9076 7374" /* •.ŽÔÿÿÅŽ„•Æ–vst */
- $"7473 7490 9384 9204 8BC8 E299 8F8A 9206" /* tst“„’.‹È♊’. */
- $"8DAD FFFF F494 9183 9202 938C 7581 7402" /* ­ÿÿô”‘ƒ’.“Œut. */
- $"738D 9184 9003 8EA7 938D 8B90 068F 8EDD" /* s‘„.Ž§“‹.ŽÝ */
- $"FFD7 8E8F 8390 0191 8A82 7402 728B 8F85" /* ÿ׎ƒ.‘Š‚t.r‹… */
- $"8E01 8B8D 8D8E 048C 93A4 8E8D 848E 028F" /* Ž.‹Ž.Œ“¤Ž„Ž. */
- $"8773 8174 0272 8B8F 988E 028C 8A8D 858E" /* ‡st.r‹˜Ž.ŒŠ…Ž */
- $"028F 8773 8174 0272 8489 A388 0289 8173" /* .‡st.r„‰£ˆ.‰s */
- $"8174 0173 73A5 7400 73B0 7400 00AB 7480" /* t.ss¥t.s°t..«t€ */
- $"00A9 74DF 0068 386D 6B00 0009 0800 0000" /* .©tß.h8mk..Æ.... */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 002E 4549 4A4A 4A4A 4A4A 4A4A 4A4A" /* ....EIJJJJJJJJJJ */
- $"3B0A 0400 0000 0000 0000 0000 0000 0000" /* ;Â.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 2FF9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ../ùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FD52 0802 0000 0000 0000 0000 0000 0000" /* ýR.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 4DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Mÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FF7E 1306 0000 0000 0000 0000 0000 0000" /* ÿ~.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0002 ABFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..«ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFBB 2C11 0B0B 0B0B 0B0B 0B0B 0B0B 0B0B" /* ÿ»,............. */
- $"0B0B 0B0B 0B0B 0903 0000 0000 0000 0000" /* ......Æ......... */
- $"08B2 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF DFCC CCCC CCCC CCCC CCCC CCCC CCCC" /* ÿÿßÌÌÌÌÌÌÌÌÌÌÌÌÌ */
- $"CCCC CCCC CCCC CBC9 8000 0000 0000 0026" /* ÌÌÌÌÌÌËÉ€......& */
- $"71F2 EDEE EFEF EFEF EFEF EFEF EFEF EFEF" /* qòíîïïïïïïïïïïïï */
- $"EFEF F4F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ïïô÷÷÷÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F7 F7F7 F7F5 CE41 2000 0000 5EF7" /* ÷÷÷÷÷÷÷õÎA ...^÷ */
- $"FFF8 F8F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ÿøøùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F8 FAFF EE41 0000 C4FF" /* ùùùùùùùøúÿîA..Äÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFA1 0000 B6FF" /* ÿÿÿÿÿÿÿÿÿÿÿ¡..¶ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF91 0000 A2FF" /* ÿÿÿÿÿÿÿÿÿÿÿ‘..¢ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF7A 0000 8FFF" /* ÿÿÿÿÿÿÿÿÿÿÿz..ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF68 0000 79FF" /* ÿÿÿÿÿÿÿÿÿÿÿh..yÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF57 0000 5EFF" /* ÿÿÿÿÿÿÿÿÿÿÿW..^ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF48 0000 4BFF" /* ÿÿÿÿÿÿÿÿÿÿÿH..Kÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FD3B 0000 3FFE" /* ÿÿÿÿÿÿÿÿÿÿý;..?þ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF F62F 0000 33F8" /* ÿÿÿÿÿÿÿÿÿÿö/..3ø */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF ED23 0000 27F2" /* ÿÿÿÿÿÿÿÿÿÿí#..'ò */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF DE1A 0000 1FE9" /* ÿÿÿÿÿÿÿÿÿÿÞ....é */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF CE10 0000 1ADF" /* ÿÿÿÿÿÿÿÿÿÿÎ....ß */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF C10B 0100 14D5" /* ÿÿÿÿÿÿÿÿÿÿÁ....Õ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF B509 0100 0FCD" /* ÿÿÿÿÿÿÿÿÿÿµÆ...Í */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF AA07 0001 0BC2" /* ÿÿÿÿÿÿÿÿÿÿª.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF A005 0101 09B3" /* ÿÿÿÿÿÿÿÿÿÿ ...Ƴ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 9504 0101 08A6" /* ÿÿÿÿÿÿÿÿÿÿ•....¦ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8D04 0101 069A" /* ÿÿÿÿÿÿÿÿÿÿ....š */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8505 0101 0691" /* ÿÿÿÿÿÿÿÿÿÿ…....‘ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7D05 0101 078B" /* ÿÿÿÿÿÿÿÿÿÿ}....‹ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7606 0101 0885" /* ÿÿÿÿÿÿÿÿÿÿv....… */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7106 0102 0881" /* ÿÿÿÿÿÿÿÿÿÿq.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6D07 0102 0A7E" /* ÿÿÿÿÿÿÿÿÿÿm...Â~ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6A08 0102 0B7B" /* ÿÿÿÿÿÿÿÿÿÿj....{ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6709 0102 0C7C" /* ÿÿÿÿÿÿÿÿÿÿgÆ...| */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 670A 0102 0C75" /* ÿÿÿÿÿÿÿÿÿÿgÂ...u */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 600B 0102 113A" /* ÿÿÿÿÿÿÿÿÿÿ`....: */
- $"7B85 8585 8585 8585 8585 8585 8585 8585" /* {……………………………………… */
- $"8585 8585 8585 8585 8585 8585 8585 8585" /* ………………………………………… */
- $"8585 8585 8585 8585 8574 310F 0101 0B1E" /* ………………………t1..... */
- $"2B34 3535 3535 3535 3535 3535 3535 3535" /* +455555555555555 */
- $"3535 3535 3535 3535 3535 3535 3535 3535" /* 5555555555555555 */
- $"3535 3535 3535 3535 332A 1C0A 0100 040C" /* 555555553*.Â.... */
- $"1418 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1813 0B03 0000 0002" /* ................ */
- $"0304 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0402 0100 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 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0069 7433" /* .............it3 */
- $"3200 0025 F700 0000 00FF 00FF 00FF 00FF" /* 2..%÷....ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 59D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.ŸY× */
- $"00A6 59D3 0001 5959 8000 9D58 8459 D000" /* .¦YÓ..YY€.X„YÐ. */
- $"0359 5900 569F 5901 5658 8359 D000 0257" /* .YY.VŸY.VXƒYÐ..W */
- $"6287 9D95 0494 917F 5E58 8359 CD00 0459" /* b‡•.”‘.^XƒYÍ..Y */
- $"005C 9ABA 9EBC 03B9 AE85 5883 59CD 0004" /* .\šºž¼.¹®…XƒYÍ.. */
- $"5900 6EB3 BE9E BF04 BEB6 9D62 5782 59CD" /* Y.n³¾ž¿.¾¶bW‚YÍ */
- $"0003 5900 74B6 A0BE 03B8 9F63 5782 59CC" /* ..Y.t¶ ¾.¸ŸcW‚YÌ */
- $"0004 5959 547A B8A0 BC03 B7A0 6357 8359" /* ..YYTz¸ ¼.· cWƒY */
- $"CB00 0459 5954 88B9 A0BB 03B7 A366 56B8" /* Ë..YYTˆ¹ ».·£fV¸ */
- $"5995 0005 5959 005B A0B9 A0BA 03B8 AA73" /* Y•..YY.[ ¹ º.¸ªs */
- $"55BA 5992 0006 5959 0053 7BB4 B9A0 BA04" /* UºY’..YY.S{´¹ º. */
- $"B9B2 905A 56BA 5990 0006 5959 0054 73AB" /* ¹²ZVºY..YY.Ts« */
- $"B8A2 B903 B5AB 865E B756 0300 5859 598E" /* ¸¢¹.µ«†^·V..XYYŽ */
- $"0007 5959 005A 83AD B6B7 A2B8 04B7 B4AD" /* ..YY.Zƒ­¶·¢¸.·´­ */
- $"9B87 B57D 047B 725D 0059 8D00 0759 5900" /* ›‡µ}.{r].Y..YY. */
- $"5A8F B2B6 B6A4 B704 B6B5 B4B2 B1B4 B003" /* Z²¶¶¤·.¶µ´²±´°. */
- $"ADA0 7600 8059 8900 8159 0355 77AC B0E2" /* ­ v.€Y‰.Y.Uw¬°â */
- $"B103 AFA4 7D56 8259 8600 0159 5980 0003" /* ±.¯¤}V‚Y†..YY€.. */
- $"5279 9697 E298 0496 9073 5456 8000 0159" /* Ry–—â˜.–sTV€..Y */
- $"5984 0008 5900 5457 6268 686D 7284 73A1" /* Y„..Y.TWbhhmr„s¡ */
- $"74B9 7309 706C 6868 6763 5900 5959 8200" /* t¹sÆplhhgcY.YY‚. */
- $"0759 0052 6E96 A4A7 A8E7 A980 A706 A6A0" /* .Y.Rn–¤§¨ç©€§.¦  */
- $"8E6A 5759 5982 0002 536F A782 B0E5 AF81" /* ŽjWYY‚..So§‚°å¯ */
- $"B006 AFAF AB99 6A00 5980 0004 5900 5A9B" /* °.¯¯«™j.Y€..Y.Z› */
- $"AEF0 AF0B AEA6 895B 0059 0000 5900 6CA7" /* ®ð¯.®¦‰[.Y..Y.l§ */
- $"B4AE 03AF ABAE AFB7 AE0A A996 6500 5900" /* ´®.¯«®¯·®Â©–e.Y. */
- $"0059 5470 A7B3 AD05 AEA8 A299 A8AE B6AD" /* .YTp§³­.®¨¢™¨®¶­ */
- $"0AA8 9666 0059 0059 5900 6CA3 B4AB 05A6" /* ¨–f.Y.YY.l£´«.¦ */
- $"EDE9 99A7 ACB5 AB0A A692 6200 5900 5959" /* í陧¬µ«Â¦’b.Y.YY */
- $"0063 9EB3 A905 A8A8 ECFF E195 B6A9 0BA3" /* .cž³©.¨¨ìÿᕶ©.£ */
- $"8D5F 5859 0059 5900 6099 A7B3 A806 A4DC" /* _XY.YY.`™§³¨.¤Ü */
- $"FFFF CA96 AAB4 A80B A187 5B58 5900 5959" /* ÿÿÊ–ª´¨.¡‡[XY.YY */
- $"005C 94A6 B3A7 01A3 C580 FF02 AD9D A8B3" /* .\”¦³§.£Å€ÿ.­¨³ */
- $"A70B 9F82 5A58 5900 5959 5857 8DA5 B3A6" /* §.Ÿ‚ZXY.YYXW¥³¦ */
- $"07A4 AEF8 FFFF ED97 A4B2 A603 A59C 7C58" /* .¤®øÿÿí—¤²¦.¥œ|X */
- $"8359 0257 87A3 B4A4 01A1 E180 FF02 CB94" /* ƒY.W‡£´¤.¡á€ÿ.Ë” */
- $"A6B1 A403 A399 7657 8359 0254 80A1 B4A2" /* ¦±¤.£™vWƒY.T€¡´¢ */
- $"019D C180 FF03 FEA4 9BA3 B0A2 03A1 9672" /* .Á€ÿ.þ¤›£°¢.¡–r */
- $"5783 5902 547A 9FB4 A202 A0A6 F380 FF02" /* WƒY.TzŸ´¢. ¦ó€ÿ. */
- $"E192 A3B0 A203 A094 6D56 8359 0255 759D" /* á’£°¢. ”mVƒY.Uu */
- $"B5A0 019B D381 FF02 B495 A1AF A006 9D90" /* µ .›Óÿ.´•¡¯ . */
- $"6957 5959 0080 5902 546D 9BB1 9E00 9F80" /* iWYY.€Y.Tm›±ž.Ÿ€ */
- $"A002 9CAF FD80 FF02 EF93 9DAF 9E06 9B8C" /*  .œ¯ý€ÿ.ž.›Œ */
- $"6657 5959 0080 5902 5568 97B0 9D07 9F95" /* fWYY.€Y.Uh—°.Ÿ• */
- $"8A89 8B98 9CE2 81FF 02C3 8F9E AE9D 0699" /* Š‰‹˜œâÿ.Þ®.™ */
- $"8861 5759 5900 8059 0256 6494 AF9C 089D" /* ˆaWYY.€Y.Vd”¯œ. */
- $"8C9E D0DD C793 8CBC 81FF 02F7 9899 AE9C" /* ŒžÐÝÇ“Œ¼ÿ.÷˜™®œ */
- $"0697 855F 5859 5900 8059 0257 5E91 AF9B" /* .—…_XYY.€Y.W^‘¯› */
- $"0195 B781 FF03 F69B 96ED 81FF 02CE 8B9C" /* .•·ÿ.ö›–íÿ.΋œ */
- $"AD9B 0D95 815D 5859 5900 0059 5957 5B8C" /* ­›.•]XYY..YYW[Œ */
- $"98AD 9903 9889 9AD8 81FF 02E0 89C4 81FF" /* ˜­™.˜‰šØÿ.à‰Äÿ */
- $"02FD 9E93 AD99 0D93 7C5A 5859 5900 0059" /* .ýž“­™.“|ZXYY..Y */
- $"5958 5987 96AC 970C 9889 D3CE 88A1 E8FF" /* YXY‡–¬—.˜‰ÓΈ¡èÿ */
- $"FFF9 9B9D F481 FF02 D788 98AC 9702 9079" /* ÿù›ôÿ.׈˜¬—.y */
- $"5A80 5901 0000 8059 0255 8395 AB96 0D97" /* Z€Y...€Y.Uƒ•«–.— */
- $"8DA4 FFFF F6B2 84B4 F6FB A28E CC82 FF02" /* ¤ÿÿö²„´öû¢ŽÌ‚ÿ. */
- $"A28F 97AB 9601 8E75 8159 0100 0080 5902" /* ¢—«–.ŽuY...€Y. */
- $"547F 94AB 9502 9688 E481 FF07 E99E 8CBC" /* T.”«•.–ˆäÿ.鞌¼ */
- $"9991 A2F8 81FF 02DD 8896 AA95 0394 8D71" /* ™‘¢øÿ.݈–ª•.”q */
- $"5880 5901 0000 8059 0255 7993 AA94 0295" /* X€Y...€Y.Uy“ª”.• */
- $"87B4 84FF 05D4 8C93 948F D182 FF02 A68C" /* ‡´„ÿ.ÔŒ“”Ñ‚ÿ.¦Œ */
- $"95A9 9403 938A 6D57 8059 0700 0059 595A" /* •©”.“ŠmW€Y...YYZ */
- $"5374 91AA 9302 908C F284 FF06 DD92 9293" /* St‘ª“.Œò„ÿ.Ý’’“ */
- $"8FA4 FB81 FF01 E086 AA93 0391 876A 5780" /* ¤ûÿ.à†ª“.‘‡jW€ */
- $"5907 0000 5959 5A53 6F8F A991 0292 87CA" /* Y...YYZSo©‘.’‡Ê */
- $"84FF 02F8 A18D 8091 018D D782 FF02 A788" /* „ÿ.ø¡€‘.ׂÿ.§ˆ */
- $"92A8 9103 8F84 6757 8059 0100 0080 5902" /* ’¨‘.„gW€Y...€Y. */
- $"556B 8DA9 9002 8E85 DB84 FF01 C78A 8190" /* Uk©.Ž…Û„ÿ.ÇŠ */
- $"028B A8FE 81FF 01E2 84A9 9003 8E82 6357" /* .‹¨þÿ.â„©.Ž‚cW */
- $"8059 0100 0080 5902 5466 8CA8 9005 9186" /* €Y...€Y.TfŒ¨.‘† */
- $"AB85 A6EE 81FF 02EE 958E 8190 028F 8CDC" /* «…¦îÿ.î•Ž.ŒÜ */
- $"82FF 02AA 8591 A790 038D 7F62 5880 5901" /* ‚ÿ.ª…‘§..bX€Y. */
- $"0000 8059 0254 618A A78E 0C8F 84A5 FFF0" /* ..€Y.TaŠ§Ž.„¥ÿð */
- $"A480 BBF9 FFFF B688 838E 0189 A982 FF01" /* ¤€»ùÿÿ¶ˆƒŽ.‰©‚ÿ. */
- $"E583 A88E 038B 7C5F 5880 5901 0000 8059" /* 僨Ž.‹|_X€Y...€Y */
- $"0256 5F87 A78D 028C 83E8 80FF 06DF 9087" /* .V_‡§.Œƒè€ÿ.߇ */
- $"D4E0 8C8C 838D 028C 8ADE 82FF 02AB 838E" /* ÔàŒŒƒ.ŒŠÞ‚ÿ.«ƒŽ */
- $"A68D 038A 7A5D 5880 5901 0000 8059 0257" /* ¦.Šz]X€Y...€Y.W */
- $"5C84 A68C 028D 7EB7 83FF 03C9 8B8E 8B85" /* \„¦Œ.~·ƒÿ.É‹Ž‹… */
- $"8C01 87AA 82FF 01E6 82A7 8C03 8877 5C58" /* Œ.‡ª‚ÿ.悧Œ.ˆw\X */
- $"8059 0100 0080 5902 5757 81A6 8A02 878A" /* €Y...€Y.WW¦Š.‡Š */
- $"F584 FF01 CB83 868A 0289 88E0 82FF 02A8" /* õ„ÿ.˃†Š.‰ˆà‚ÿ.¨ */
- $"808B A58A 0386 735B 5880 5901 0000 8059" /* €‹¥Š.†s[X€Y...€Y */
- $"0258 557F A58A 028B 7BC9 84FF 02F6 9987" /* .XU.¥Š.‹{É„ÿ.ö™‡ */
- $"878A 0184 AB82 FF01 E580 A68A 0285 715A" /* ‡Š.„«‚ÿ.倦Š.…qZ */
- $"8159 0100 0081 5902 577B 88A3 8902 8A81" /* Y...Y.W{ˆ£‰.Š */
- $"9685 FF01 BF82 8889 0288 87E0 82FF 02A7" /* –…ÿ.¿‚ˆ‰.ˆ‡à‚ÿ.§ */
- $"7F8A A489 0183 6F82 5901 0000 8159 0254" /* .Š¤‰.ƒo‚Y...Y.T */
- $"7787 A488 017A DC84 FF02 EA8C 8689 8801" /* w‡¤ˆ.zÜ„ÿ.ꌆ‰ˆ. */
- $"82A9 82FF 01E3 7EA4 8802 8781 6C82 5901" /* ‚©‚ÿ.ã~¤ˆ.‡l‚Y. */
- $"0000 8159 0151 7497 860E 8784 8686 8486" /* ..Y.Qt—†.‡„††„† */
- $"8684 8685 8486 877B A685 FF11 AD7D 8685" /* †„†…„†‡{¦…ÿ.­}†… */
- $"8486 8584 8784 8487 8485 8783 83DF 82FF" /* „†…„‡„„‡„…‡ƒƒß‚ÿ */
- $"0FA4 7D87 8584 8785 8487 8485 8784 8586" /* .¤}‡…„‡…„‡„…‡„…† */
- $"8596 8602 7F69 5881 5901 0000 8059 035A" /* …–†..iXY...€Y.Z */
- $"5170 8496 850E 8182 7F7F 827F 8082 7E81" /* Qp„–….‚..‚.€‚~ */
- $"8280 837E EC84 FF12 DB7E 817F 8082 7E81" /* ‚€ƒ~ì„ÿ.Û~.€‚~ */
- $"827E 8182 7E82 817E 827B A682 FF10 E07B" /* ‚~‚~‚~‚{¦‚ÿ.à{ */
- $"8380 827E 8181 7E82 817E 8280 7F81 8494" /* ƒ€‚~~‚~‚€.„” */
- $"8503 847D 6758 8159 0100 0080 5903 5A53" /* ….„}gXY...€Y.ZS */
- $"6E84 9585 0E82 90FB BCAC FFA4 B9FF 9BD3" /* n„•….‚û¼¬ÿ¤¹ÿ›Ó */
- $"FC97 7BB9 84FF 14FC 91AA FFA8 BFFF 92D1" /* ü—{¹„ÿ.ü‘ªÿ¨¿ÿ’Ñ */
- $"FB92 E5ED 87F4 DC95 FFCB 73DF 82FF 0FA0" /* û’åí‡ôÜ•ÿËsß‚ÿ.  */
- $"79DC F889 E5ED 90F6 D88F FFC7 AAC2 7D94" /* yÜø‰åíöØÿǪÂ}” */
- $"8503 847C 6558 8159 0100 0080 5903 5A52" /* ….„|eXY...€Y.ZR */
- $"6983 9584 0E81 92FF BCAA FFC4 D2FF 96D4" /* iƒ•„.’ÿ¼ªÿÄÒÿ–Ô */
- $"FF9A 82F8 84FF 14C6 78CE FFA6 BFFF B6E4" /* ÿš‚ø„ÿ.ÆxÎÿ¦¿ÿ¶ä */
- $"FF8D E8F9 AFFE DE91 FFE3 899E 82FF 0FDB" /* ÿèù¯þÞ‘ÿ㉞‚ÿ.Û */
- $"74E2 FFB1 F3F0 8AFA E9B4 FFC8 A6C7 7C94" /* tâÿ±óðŠúé´ÿȦÇ|” */
- $"8403 8379 6258 8159 0100 0080 5903 5A51" /* „.ƒybXY...€Y.ZQ */
- $"6581 9582 047F 90FF D5C8 81FF 04BB E5F9" /* e•‚..ÿÕÈÿ.»åù */
- $"86CA 84FF 06F2 82D6 FFFF C6D6 80FF 02FC" /* †Ê„ÿ.ò‚ÖÿÿÆÖ€ÿ.ü */
- $"B5EF 80FF 06E9 B8FF FFFA 8AD6 82FF 0196" /* µï€ÿ.é¸ÿÿúŠÖ‚ÿ.– */
- $"C680 FF02 F4B4 FA80 FF03 DCC9 C57A 9482" /* Æ€ÿ.ô´ú€ÿ.ÜÉÅz”‚ */
- $"0381 7761 5881 5901 0000 8059 035A 5262" /* .waXY...€Y.ZRb */
- $"7F95 8102 7E8F FA85 FF01 B190 85FF 01AC" /* .•.~ú…ÿ.±…ÿ.¬ */
- $"9A90 FF01 C494 82FF 02D5 8DF9 87FF 01BF" /* šÿ.Ä”‚ÿ.Õù‡ÿ.¿ */
- $"7994 8103 8075 5F58 8159 0100 0081 5902" /* y”.€u_XY...Y. */
- $"5461 7D95 8002 7D8E FA84 FF02 E779 DD84" /* Ta}•€.}Žú„ÿ.çyÝ„ */
- $"FF02 E47C E690 FF02 FC8A D281 FF02 FC8C" /* ÿ.ä|æÿ.üŠÒÿ.üŒ */
- $"C787 FF01 BF77 9480 037E 725E 5881 5901" /* LJÿ.¿w”€.~r^XY. */
- $"0000 8159 0254 5D7C 957F 027C 8EFA 84FF" /* ..Y.T]|•..|Žú„ÿ */
- $"019C A285 FF01 97AD 92FF 01C7 8F80 FF04" /* .œ¢…ÿ.—­’ÿ.Ç€ÿ. */
- $"FBC0 748B F986 FF01 BE76 947F 037D 715C" /* ûÀt‹ù†ÿ.¾v”..}q\ */
- $"5881 5901 0000 8159 0254 597B 957F 027C" /* XY...Y.TY{•..| */
- $"8EFA 83FF 02D7 7BEF 84FF 02D1 7EF4 92FF" /* Žúƒÿ.×{ï„ÿ.Ñ~ô’ÿ */
- $"09FE 8CC9 F8CB 8C64 9F83 C386 FF01 BE76" /* ÆþŒÉøËŒdŸƒÃ†ÿ.¾v */
- $"947F 037C 6F5B 5881 5901 0000 8159 0355" /* ”..|o[XY...Y.U */
- $"5779 7E94 7D02 7A8C FA82 FF02 FD8A B884" /* Wy~”}.zŒú‚ÿ.ýŠ¸„ */
- $"FF02 FA86 C094 FF09 CF74 7C64 7FCB FFC0" /* ÿ.ú†À”ÿÆÏt|d.ËÿÀ */
- $"80F7 85FF 01BD 7494 7D02 7A6D 5B82 5901" /* €÷…ÿ.½t”}.zm[‚Y. */
- $"0000 8159 0256 5677 957C 0279 8BFA 82FF" /* ..Y.VVw•|.y‹ú‚ÿ */
- $"02C3 82FB 84FF 02BB 86FE 95FF 088C 99D5" /* .Âû„ÿ.»†þ•ÿ.Œ™Õ */
- $"FCFF FFFA 7FBC 85FF 01BD 7394 7C02 796B" /* üÿÿú.¼…ÿ.½s”|.yk */
- $"5A82 5901 0000 8159 0257 5575 957B 0277" /* Z‚Y...Y.WUu•{.w */
- $"8BFA 81FF 02F4 7DCE 84FF 02EE 7BD6 96FF" /* ‹úÿ.ô}΄ÿ.î{Ö–ÿ */
- $"01D0 A782 FF02 C47B F484 FF01 BC72 947B" /* .Ч‚ÿ.Ä{ô„ÿ.¼r”{ */
- $"0178 6983 5901 0000 8159 0258 5272 957A" /* .xiƒY...Y.XRr•z */
- $"0877 8AE8 EEEC ECF2 AA91 85FF 02A8 92F2" /* .wŠèîììòª‘…ÿ.¨’ò */
- $"95EC 03ED ED93 DC81 FF03 FD83 B2F2 82EC" /* •ì.íí“Üÿ.ýƒ²ò‚ì */
- $"02F3 B573 947A 0176 6783 5901 0000 8159" /* .óµs”z.vgƒY...Y */
- $"0258 5070 9679 007A 817F 027E 71E3 84FF" /* .XPp–y.z..~qã„ÿ */
- $"03DF 797F 8096 7F02 8078 A382 FF02 C970" /* .ßy.€–..€x£‚ÿ.Ép */
- $"8083 7F00 7D95 7902 7565 5882 5901 0000" /* €ƒ..}•y.ueX‚Y... */
- $"8159 0258 4F6F 9779 8077 0278 69AB 85FF" /* Y.XOo—y€w.xi«…ÿ */
- $"029B 7378 9977 0178 DF81 FF02 B468 7583" /* .›sx™w.xßÿ.´huƒ */
- $"7700 7895 7902 7464 5882 5901 0000 8259" /* w.x•y.tdX‚Y...‚Y */
- $"0150 6D9A 7802 747A F384 FF02 CD72 779A" /* .Pmšx.tzó„ÿ.Írwš */
- $"7808 71A0 FFFF D98C 8FC6 6D9C 7801 7363" /* x.q ÿÿÙŒÆmœx.sc */
- $"8359 0100 0082 5901 516B 9A77 016B C484" /* ƒY...‚Y.Qkšw.kÄ„ */
- $"FF02 F68A 729B 770A 7677 9B8A 80BD FDFF" /* ÿ.öŠr›wÂvw›Š€½ýÿ */
- $"9C6A 789A 7702 7261 5882 5901 0000 8159" /* œjxšw.raX‚Y...Y */
- $"035A 4F68 7598 7602 737B F184 FF01 B96E" /* .ZOhu˜v.s{ñ„ÿ.¹n */
- $"9D76 0371 85D7 FB80 FF02 F076 719A 7602" /* v.q…×û€ÿ.ðvqšv. */
- $"7060 5882 5901 0000 8159 035A 4E66 7498" /* p`X‚Y...Y.ZNft˜ */
- $"7504 7380 77C3 FE81 FF02 E97B 729D 7502" /* u.s€wÃþÿ.é{ru. */
- $"727F EF82 FF01 CD66 9A75 026F 5E58 8259" /* r.ï‚ÿ.Ífšu.o^X‚Y */
- $"0100 0081 5903 5A4D 6473 9774 0672 76EE" /* ...Y.ZMds—t.rvî */
- $"CC73 83DA 80FF 01A4 6C9F 7401 6CBE 83FF" /* ÌsƒÚ€ÿ.¤lŸt.l¾ƒÿ */
- $"02A5 6575 9874 026D 5C58 8259 0100 0081" /* .¥eu˜t.m\X‚Y... */
- $"5902 5A4D 6298 730B 6F82 FAFF F9AD 6A97" /* Y.ZMb˜s.o‚úÿù­j— */
- $"F1DC 7172 9F73 016D 9283 FF03 F981 6B74" /* ñÜqrŸs.m’ƒÿ.ùkt */
- $"9773 026C 5B58 8259 0100 0081 5902 5A4D" /* —s.l[X‚Y...Y.ZM */
- $"6098 7301 6C94 81FF 04EC 957B 8470 A073" /* `˜s.l”ÿ.ì•{„p s */
- $"0271 75E7 83FF 02DD 6972 9773 026B 5C58" /* .quçƒÿ.Ýir—s.k\X */
- $"8259 0100 0081 5902 5A50 5F98 7201 69A8" /* ‚Y...Y.ZP_˜r.i¨ */
- $"83FF 019B 69A2 7201 6ABF 84FF 02AF 6473" /* ƒÿ.›i¢r.j¿„ÿ.¯ds */
- $"9672 026A 5B58 8259 0100 0081 5903 5A51" /* –r.j[X‚Y...Y.ZQ */
- $"5D70 9771 0167 BD81 FF02 F6A1 6FA3 7101" /* ]p—q.g½ÿ.ö¡o£q. */
- $"6B94 84FF 02F7 7B6D 9671 0169 5A83 5901" /* k”„ÿ.÷{m–q.iZƒY. */
- $"0000 8159 035A 505B 6F97 7101 69D5 80FF" /* ..Y.ZP[o—q.iÕ€ÿ */
- $"03E8 8B68 70A3 7102 6F74 E984 FF02 BC65" /* .è‹hp£q.oté„ÿ.¼e */
- $"7294 7102 7067 5883 5901 0000 8159 035A" /* r”q.pgXƒY...Y.Z */
- $"5059 6F96 7007 6F6F E7FF FFD4 7A69 A670" /* PYo–p.ooçÿÿÔzi¦p */
- $"0168 BD84 FF02 EC71 6E94 7002 6F67 5883" /* .h½„ÿ.ìqn”p.ogXƒ */
- $"5901 0000 8159 035A 5058 6E96 6F06 6C79" /* Y...Y.ZPXn–o.ly */
- $"F7FF BD6E 6BA7 6F02 6A8B FD83 FF02 FC83" /* ÷ÿ½nk§o.j‹ýƒÿ.üƒ */
- $"6B94 6F02 6E66 5783 5901 0000 8159 035A" /* k”o.nfWƒY...Y.Z */
- $"5056 6D96 6E05 688E FBA5 676C A86E 026D" /* PVm–n.hŽû¥gl¨n.m */
- $"6AD0 83FF 02F5 7D6B 946E 026D 6456 8359" /* jЃÿ.õ}k”n.mdVƒY */
- $"0100 0081 5903 5A4F 556C 966D 0468 9294" /* ...Y.ZOUl–m.h’” */
- $"656C AA6D 0268 87F8 82FF 01BC 6995 6D02" /* elªm.h‡ø‚ÿ.¼i•m. */
- $"6C63 5683 5901 0000 8159 035A 5054 6C97" /* lcVƒY...Y.ZPTl— */
- $"6D01 6C68 AD6D 0866 9EF7 FFFF F3B1 6C6B" /* m.lh­m.fž÷ÿÿó±lk */
- $"956D 026C 6256 8359 0100 0081 5903 5A50" /* •m.lbVƒY...Y.ZP */
- $"546C CA6D 0667 81A6 9D7A 666C 966D 026C" /* TlÊm.g¦zfl–m.l */
- $"6256 8359 0100 0081 5903 5A51 536C CB6D" /* bVƒY...Y.ZQSlËm */
- $"0369 6565 6998 6D02 6C62 5783 5901 0000" /* .ieei˜m.lbWƒY... */
- $"8159 035A 5152 6AEA 6C02 6B61 5783 5901" /* Y.ZQRjêl.kaWƒY. */
- $"0000 8159 035A 5252 6AEA 6C02 6B61 5783" /* ..Y.ZRRjêl.kaWƒ */
- $"5901 0000 8159 035A 5252 6AEA 6C02 6B61" /* Y...Y.ZRRjêl.ka */
- $"5783 5901 0000 8159 035A 5352 6AEA 6C02" /* WƒY...Y.ZSRjêl. */
- $"6B61 5783 5900 0082 5903 5A54 5168 EA6B" /* kaWƒY..‚Y.ZTQhêk */
- $"0269 5E56 8359 0000 8359 0257 4D5E EA63" /* .i^VƒY..ƒY.WM^êc */
- $"0260 5756 8359 0100 0082 5902 5A55 53EA" /* .`WVƒY...‚Y.ZUSê */
- $"5601 5556 8459 0100 00FB 5901 0000 FB59" /* V.UV„Y...ûY...ûY */
- $"0100 00FB 5901 0000 FB59 0100 00FA 5981" /* ...ûY...ûY...úY */
- $"00F9 5982 00F7 5983 00F6 5986 00F3 59FF" /* .ùY‚.÷Yƒ.öY†.óYÿ */
- $"00FF 0000 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ...ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00DF 009F 7CD7 00A6 7CD3" /* .ÿ.ÿ.ÿ.ß.Ÿ|×.¦|Ó */
- $"0001 7C7C 8000 9D7B 847C D000 037C 7C00" /* ..||€.{„|Ð..||. */
- $"7C9F 7F01 7B7B 837C D000 027B 88A5 9EB0" /* |Ÿ..{{ƒ|Ð..{ˆ¥ž° */
- $"03AC 9D81 7B83 7CCD 0004 7C00 81B3 D09E" /* .¬{ƒ|Í..|.³Ðž */
- $"D302 D0C3 A184 7CCD 0004 7C00 8FCA D79F" /* Ó.Ðá„|Í..|.Êן */
- $"D803 CEB4 837A 827C CD00 037C 0095 CEA0" /* Ø.δƒz‚|Í..|.•Î  */
- $"D803 D1B7 847A 827C CC00 047C 7C78 9BD0" /* Ø.Ñ·„z‚|Ì..||x›Ð */
- $"A0D7 03D1 B884 7A83 7CCB 0004 7C7C 79A8" /*  ×.Ѹ„zƒ|Ë..||y¨ */
- $"D3A0 D703 D2BC 867A B87C 9500 057C 7C00" /* Ó ×.Ò¼†z¸|•..||. */
- $"81BD D5A0 D603 D3C3 9278 BA7C 9200 067C" /* ½Õ Ö.ÓÃ’xº|’..| */
- $"7C00 799D CED5 A0D6 04D4 CBAC 7D79 BA7C" /* |.yÎÕ Ö.Ôˬ}yº| */
- $"9000 067C 7C00 7B97 C5D3 A2D5 03D1 C4A3" /* ..||.{—ÅÓ¢Õ.ÑÄ£ */
- $"8280 7AB4 7B03 007B 7C7C 8E00 077C 7C00" /* ‚€z´{..{||Ž..||. */
- $"81A4 C8D2 D4A2 D505 D4D0 C8B7 A69F B19E" /* ¤ÈÒÔ¢Õ.ÔÐÈ·¦Ÿ±ž */
- $"079F 9F9E 9D94 8100 7C8D 0007 7C7C 0081" /* .ŸŸž”.|..||. */
- $"ADCD D3D3 A4D4 03D3 D2D0 CE80 CCB2 CB03" /* ­ÍÓÓ¤Ô.ÓÒÐ΀̲Ë. */
- $"C7B9 9500 807C 8900 817C 037A 98C6 CDE2" /* ǹ•.€|‰.|.z˜ÆÍâ */
- $"CE03 CCBE 9B7A 827C 8600 017C 7C80 0002" /* Î.̾›z‚|†..||€.. */
- $"7697 B181 B403 B5B5 B4B4 9EB5 01B4 B4B6" /* v—±´.µµ´´žµ.´´¶ */
- $"B506 B4B4 B3AA 9177 7980 0001 7C7C 8400" /* µ.´´³ª‘wy€..||„. */
- $"097C 0078 7D87 8B8B 8D94 95E2 960A 9592" /* Æ|.x}‡‹‹”•â–•’ */
- $"8E8C 8B8B 867D 007C 7C82 0009 7C00 7892" /* ŽŒ‹‹†}.||‚.Æ|.x’ */
- $"B5C1 C4C5 C6C6 81C7 03C6 C6C7 C79E C601" /* µÁÄÅÆÆÇ.ÆÆÇÇžÆ. */
- $"C7C7 82C6 01C7 C7AC C683 C70A C6C6 C4C3" /* ÇÇ‚Æ.ÇǬƃÇÂÆÆÄà */
- $"C3BD AB8C 7A7C 7C82 0005 7893 C5CE CFD0" /* ý«Œz||‚..x“ÅÎÏÐ */
- $"E9CF 08D0 D0CF CEC9 B58B 007C 8000 047C" /* éÏ.ÐÐÏÎɵ‹.|€..| */
- $"0080 B9CE F0D0 0CCF C5A7 7E00 7C00 007C" /* .€¹ÎðÐ.Ïŧ~.|..| */
- $"008F C5CE B3CF 03D0 CDCF D0B7 CF0A C9B2" /* .ÅγÏ.ÐÍÏзÏÂɲ */
- $"8600 7C00 007C 7894 C6B3 CF05 D0CB BEBA" /* †.|..|x”ƳÏ.Ð˾º */
- $"CCD0 B6CF 0ACA B487 007C 007C 7C00 8FC4" /* ÌжÏÂÊ´‡.|.||.Ä */
- $"B4CE 05C9 F2ED B9CC CFB5 CE0B C8B1 8400" /* ´Î.Éòí¹ÌϵÎ.ȱ„. */
- $"7C00 7C7C 0089 C0CC B3CD 05CC F3FF E7B9" /* |.||.‰À̳Í.Ìóÿç¹ */
- $"CEB5 CD0B C5AC 817B 7C00 7C7C 0085 BCCB" /* εÍ.Ŭ{|.||.…¼Ë */
- $"B3CC 06C9 EAFF FFD8 BDCE B4CC 0BC4 A77D" /* ³Ì.ÉêÿÿؽδÌ.ħ} */
- $"7B7C 007C 7C00 81B6 CAB3 CC01 C9DC 80FF" /* {|.||.¶Ê³Ì.ÉÜ€ÿ */
- $"02C6 C4CD B2CC 0DCB C1A3 7D7B 7C00 7C7C" /* .ÆÄͲÌ.ËÁ£}{|.|| */
- $"7B7D B1C9 CBB2 CA07 C9CF FBFF FFF1 BACB" /* {}±É˲Ê.ÉÏûÿÿñºË */
- $"B2CA 03C9 BE9D 7B83 7C02 7BAB C8B4 CA01" /* ²Ê.ɾ{ƒ|.{«È´Ê. */
- $"C8ED 80FF 02D9 BCCB B1CA 03C9 BC98 7A83" /* Èí€ÿ.ټ˱Ê.ɼ˜zƒ */
- $"7C02 7AA5 C6B4 C901 C6DA 80FF 03FD C1C4" /* |.z¥Æ´É.ÆÚ€ÿ.ýÁÄ */
- $"CAB0 C903 C7B9 957A 837C 0279 9FC4 B4C8" /* Ê°É.ǹ•zƒ|.yŸÄ´È */
- $"02C7 CAF7 80FF 02E8 B8C9 B0C8 03C5 B68F" /* .ÇÊ÷€ÿ.è¸É°È.Ŷ */
- $"7A83 7C02 799A C2B5 C701 C4E4 81FF 02CA" /* zƒ|.yšÂµÇ.Ääÿ.Ê */
- $"BFC8 AFC7 06C4 B38B 7A7C 7C00 807C 0278" /* ¿È¯Ç.ij‹z||.€|.x */
- $"93C0 B1C6 00C7 80C8 02C4 CFFD 80FF 01F2" /* “À±Æ.Ç€È.ÄÏý€ÿ.ò */
- $"B8B0 C606 C2AF 897A 7C7C 0080 7C02 798F" /* ¸°Æ.¯‰z||.€|.y */
- $"BEB0 C607 C8C0 B4B2 B6C3 C6ED 81FF 02D4" /* ¾°Æ.ÈÀ´²¶ÃÆíÿ.Ô */
- $"BBC7 AEC6 06C1 AC84 7A7C 7C00 807C 0279" /* »Ç®Æ.Á¬„z||.€|.y */
- $"8BBB AFC5 08C6 B6BA DCE5 D5B3 BAD8 81FF" /* ‹»¯Å.ƶºÜåÕ³ºØÿ */
- $"02F9 BBC4 AEC5 06C0 A982 7B7C 7C00 807C" /* .ù»Ä®Å.À©‚{||.€| */
- $"027A 85B7 AEC4 02C5 C1CE 81FF 03F7 BAC1" /* .z…·®Ä.ÅÁÎÿ.÷ºÁ */
- $"F481 FF02 DCB7 C6AD C40D BDA5 817B 7C7C" /* ôÿ.Ü·Æ­Ä.½¥{|| */
- $"0000 7C7C 7A83 B4C3 ADC4 03C3 B3BE E981" /* ..||zƒ´Ã­Ä.ó¾é */
- $"FF02 E8B6 DC81 FF02 FDBE C0AD C40D BCA1" /* ÿ.è¶Üÿ.ý¾À­Ä.¼¡ */
- $"7E7B 7C7C 0000 7C7C 7B80 B0C2 ACC3 0CC4" /* ~{||..||{€°Â¬Ã.Ä */
- $"B5DD DAAE C4F2 FFFF FAC2 C5F8 81FF 02E2" /* µÝÚ®ÄòÿÿúÂÅøÿ.â */
- $"B5C4 ACC3 01B9 9D81 7C07 0000 7C7C 7B7C" /* µÄ¬Ã.¹|...||{| */
- $"ABC0 ABC1 0DC2 BCC1 FFFF F7C7 ACD0 FBFC" /* «À«Á.¼Áÿÿ÷ǬÐûü */
- $"C7BC E082 FF02 C0BD C2AB C101 B79A 817C" /* Ǽà‚ÿ.À½Â«Á.·š| */
- $"0100 0080 7C02 7BA7 BFAB C102 C2B2 EB81" /* ...€|.{§¿«Á.²ë */
- $"FF07 EDB9 B3D7 C3BF C7FA 81FF 02E6 B3C2" /* ÿ.í¹³×ÿÇúÿ.æ³Â */
- $"AAC1 03C0 B595 7B80 7C01 0000 807C 027A" /* ªÁ.Àµ•{€|...€|.z */
- $"A3BE AAC0 02C1 B6CA 84FF 05DE B8C0 C0BD" /* £¾ªÀ.Á¶Ê„ÿ.Þ¸ÀÀ½ */
- $"E382 FF02 C2BA C1A9 C003 BFB2 927A 807C" /* ã‚ÿ.ºÁ©À.¿²’z€| */
- $"0100 0080 7C02 789D BCAA BF02 BEB3 F584" /* ...€|.x¼ª¿.¾³õ„ */
- $"FF06 EBBF BEBF BDC9 FC81 FF02 E8B2 C0A9" /* ÿ.뿾¿½Éüÿ.è²À© */
- $"BF03 BEB0 8F7A 807C 0100 0080 7C02 7898" /* ¿.¾°z€|...€|.x˜ */
- $"BAA9 BE02 BFB5 D984 FF02 FBC7 BC80 BE01" /* º©¾.¿µÙ„ÿ.ûǼ€¾. */
- $"BBE7 82FF 02C3 B7BF A8BE 03BC AD8B 7A80" /* »ç‚ÿ.÷¿¨¾.¼­‹z€ */
- $"7C01 0000 807C 0278 95B9 A9BD 02BC B3E9" /* |...€|.x•¹©½.¼³é */
- $"84FF 01DD B981 BD02 BACB FE81 FF02 EAB0" /* „ÿ.ݹ½.ºËþÿ.ê° */
- $"BEA8 BD03 BAAA 887A 807C 0100 0080 7C02" /* ¾¨½.ºªˆz€|...€|. */
- $"7890 B8A8 BD05 BEB2 C1AC C7F6 81FF 02F4" /* x¸¨½.¾²Á¬Çöÿ.ô */
- $"C0BC 82BD 01BB EA82 FF02 C4B6 BEA7 BD03" /* À¼‚½.»ê‚ÿ.Ķ¾§½. */
- $"BAA8 867A 807C 0100 0080 7C02 788B B5A7" /* º¨†z€|...€|.x‹µ§ */
- $"BC0C BDB5 C1FF F2BD AAD5 FCFF FFD3 B983" /* ¼.½µÁÿò½ªÕüÿÿÓ¹ƒ */
- $"BC01 B9CC 82FF 02EB AFBD A7BC 03B8 A584" /* ¼.¹Ì‚ÿ.믽§¼.¸¥„ */
- $"7B80 7C01 0000 807C 0279 88B3 A8BC 01AE" /* {€|...€|.yˆ³¨¼.® */
- $"ED80 FF06 E5B1 B1E6 ECBB BB84 BC01 B9EB" /* í€ÿ.å±±æì»»„¼.¹ë */
- $"82FF 02C5 B4BD A6BC 03B7 A381 7B80 7C01" /* ‚ÿ.Å´½¦¼.·£{€|. */
- $"0000 807C 027A 85B1 A6BB 02BC AFCC 82FF" /* ..€|.z…±¦».¼¯Ì‚ÿ */
- $"04FE D6AF BBBA 85BB 01B7 CC82 FF02 ECAE" /* .þÖ¯»º…».·Ì‚ÿ.ì® */
- $"BCA6 BB03 B5A0 807B 807C 0100 0080 7C03" /* ¼¦».µ €{€|...€|. */
- $"7A80 ADB9 A5BA 02B8 B0F7 84FF 01DE B486" /* z€­¹¥º.¸°÷„ÿ.Þ´† */
- $"BA02 B9B8 EB82 FF02 C3B2 BBA5 BA03 B39C" /* º.¹¸ë‚ÿ.ò»¥º.³œ */
- $"7F7B 807C 0100 0080 7C03 7B7E AAB7 A4B8" /* .{€|...€|.{~ª·¤¸ */
- $"02BA ABD8 84FF 02F9 C1B6 87B8 01B5 CC82" /* .º«Ø„ÿ.ùÁ¶‡¸.µÌ‚ */
- $"FF02 EBAC B9A5 B803 B199 7D7B 807C 0100" /* ÿ.묹¥¸.±™}{€|.. */
- $"0080 7C03 7B7D A7B6 A4B7 02B2 B7FE 84FF" /* .€|.{}§¶¤·.²·þ„ÿ */
- $"01D7 B388 B702 B6B6 EB82 FF02 C2B0 B8A4" /* .׳ˆ·.¶¶ë‚ÿ.°¸¤ */
- $"B701 AF96 827C 0100 0081 7C02 7BA3 B5A3" /* ·.¯–‚|...|.{£µ£ */
- $"B602 B7A8 E584 FF02 F1B8 B589 B601 B3CA" /* ¶.·¨å„ÿ.ñ¸µ‰¶.³Ê */
- $"82FF 02EA AAB7 A4B6 01AD 9382 7C01 0000" /* ‚ÿ.ꪷ¤¶.­“‚|... */
- $"817C 0278 9FB4 97B5 0DB4 B5B6 B4B6 B5B4" /* |.xŸ´—µ.´µ¶´¶µ´ */
- $"B6B5 B4B6 B6AD C085 FF11 CCB0 B6B5 B4B6" /* ¶µ´¶¶­À…ÿ.Ì°¶µ´¶ */
- $"B5B4 B6B5 B4B6 B4B5 B6B3 B4EB 82FF 0EC0" /* µ´¶µ´¶´µ¶³´ë‚ÿ.À */
- $"AFB6 B5B4 B6B4 B4B6 B4B5 B6B4 B5B6 97B5" /* ¯¶µ´¶´´¶´µ¶´µ¶—µ */
- $"01AB 9082 7C01 0000 817C 0278 9CB3 95B5" /* .«‚|...|.xœ³•µ */
- $"0FB6 AFA7 A9AA A7AA AAA7 ABA9 A7AC B1A9" /* .¶¯§©ª§ªª§«©§¬±© */
- $"F084 FF12 E9AA A6AA AAA7 ABA9 A7AB A8A8" /* ð„ÿ.骦ªª§«©§«¨¨ */
- $"ACA8 A8AB A7A5 C882 FF0F E8A8 B2A8 A8AB" /* ¬¨¨«§¥È‚ÿ.訲¨¨« */
- $"A8A8 ACA8 A9AC A7A9 AAAB 95B5 03B4 A98E" /* ¨¨¬¨©¬§©ª«•µ.´©Ž */
- $"7B81 7C01 0000 817C 0278 99B2 95B4 0EB3" /* {|...|.x™²•´.³ */
- $"B7F9 D2C7 FFC1 CEFF BCE1 FABB AACD 84FF" /* ·ùÒÇÿÁÎÿ¼áú»ªÍ„ÿ */
- $"14FD BAC6 FFC5 D3FF B7DF F9B7 EBF2 B0F6" /* .ýºÆÿÅÓÿ·ßù·ëò°ö */
- $"E6B9 FDDA A7EB 82FF 0FBD AAE6 F8B0 EBF1" /* æ¹ýÚ§ë‚ÿ.½ªæø°ëñ */
- $"B5F7 E3B4 FED9 C5D5 AF94 B403 B3A7 8B7B" /* µ÷ã´þÙÅÕ¯”´.³§‹{ */
- $"817C 0100 0081 7C02 7794 B195 B30E B1B9" /* |...|.w”±•³.±¹ */
- $"FFD2 C7FF D3DE FFBA E3FF BDAA F984 FF14" /* ÿÒÇÿÓÞÿºãÿ½ªù„ÿ. */
- $"DBA2 DAFF C4D4 FFCA EBFE B4EF FBC4 FEE9" /* Û¢ÚÿÄÔÿÊëþ´ïûÄþé */
- $"B6FF EAAB C082 FF0F E4A3 ECFF C5F6 F5B2" /* ¶ÿê«À‚ÿ.ä£ìÿÅöõ² */
- $"FBEF C8FF DAC4 DAAE 94B3 03B2 A589 7B81" /* ûïÈÿÚÄÚ®”³.²¥‰{ */
- $"7C01 0000 807C 037D 7690 AE95 B104 AFB7" /* |...€|.}v®•±.¯· */
- $"FFE0 D681 FF04 CDEC FCAE D884 FF06 F7AC" /* ÿàÖÿ.Íìü®Ø„ÿ.÷¬ */
- $"E0FF FFD4 E180 FF02 FDC9 F380 FF06 EFCA" /* àÿÿÔá€ÿ.ýÉó€ÿ.ïÊ */
- $"FFFF FAAE E582 FF01 B6DA 80FF 02F7 C7FB" /* ÿÿú®å‚ÿ.¶Ú€ÿ.÷Çû */
- $"80FF 03E5 D6D9 AC94 B103 B0A2 877B 817C" /* €ÿ.åÖÙ¬”±.°¢‡{| */
- $"0100 0081 7C02 768D AC95 B002 AEB7 FB85" /* ...|.v¬•°.®·û… */
- $"FF01 CDB1 85FF 01C9 B890 FF01 D5B8 82FF" /* ÿ.ͱ…ÿ.ɸÿ.Õ¸‚ÿ */
- $"02E0 B3FC 87FF 01D5 AA94 B003 AE9F 857B" /* .à³ü‡ÿ.Õª”°.®Ÿ…{ */
- $"817C 0100 0081 7C02 788A AB95 AF02 ADB6" /* |...|.xŠ«•¯.­¶ */
- $"FB84 FF02 F0A5 E584 FF02 EEA6 EC90 FF02" /* û„ÿ.ð¥å„ÿ.î¦ìÿ. */
- $"FCAE E281 FF02 FCB4 DB87 FF01 D5A9 94AF" /* ü®âÿ.ü´Û‡ÿ.Õ©”¯ */
- $"03AC 9D83 7B81 7C01 0000 817C 0278 86A9" /* .¬ƒ{|...|.x†© */
- $"95AD 02AB B4FB 84FF 01BE BD85 FF01 BAC3" /* •­.«´û„ÿ.¾½…ÿ.ºÃ */
- $"92FF 01D6 B480 FF04 FCD8 A4B3 FB86 FF01" /* ’ÿ.Ö´€ÿ.üؤ³û†ÿ. */
- $"D4A7 94AD 03AB 9A81 7B81 7C01 0000 817C" /* Ô§”­.«š{|...| */
- $"0278 83A7 95AC 02AA B3FB 83FF 02E5 A3F2" /* .xƒ§•¬.ª³ûƒÿ.å£ò */
- $"84FF 02E1 A5F6 92FF 09FD AEDC FBDE B595" /* „ÿ.á¥ö’ÿÆý®ÜûÞµ• */
- $"B6A9 D886 FF01 D3A6 94AC 03A9 9880 7B81" /* ¶©Ø†ÿ.Ó¦”¬.©˜€{ */
- $"7C01 0000 817C 0278 80A5 95AC 02AA B3FB" /* |...|.x€¥•¬.ª³û */
- $"82FF 02FE B0CB 84FF 02FC ADD0 94FF 09DB" /* ‚ÿ.þ°Ë„ÿ.ü­Ð”ÿÆÛ */
- $"A1A8 95A2 D6FF D1AA FA85 FF01 D3A6 94AC" /* ¡¨•¢ÖÿѪú…ÿ.Ó¦”¬ */
- $"03A8 967F 7B81 7C01 0000 817C 0279 7FA3" /* .¨–.{|...|.y.£ */
- $"95AB 02A9 B2FB 82FF 02D7 A7FB 84FF 02D2" /* •«.©²û‚ÿ.קû„ÿ.Ò */
- $"AAFD 95FF 08AD B4DD FCFF FFFA A5D3 85FF" /* ªý•ÿ.­´Ýüÿÿú¥Ó…ÿ */
- $"01D3 A594 AB03 A694 7E7B 817C 0100 0081" /* .Ó¥”«.¦”~{|... */
- $"7C02 7A7D A095 A902 A7B1 FB81 FF02 F8A5" /* |.z} •©.§±ûÿ.ø¥ */
- $"DA84 FF02 F4A4 E096 FF01 DCC2 82FF 02D3" /* Ú„ÿ.ô¤à–ÿ.Ü‚ÿ.Ó */
- $"A5F8 84FF 01D2 A394 A902 A491 7D82 7C01" /* ¥ø„ÿ.Ò£”©.¤‘}‚|. */
- $"0000 817C 027A 7A9E 95A8 08A6 B1EF F3F2" /* ..|.zzž•¨.¦±ïóò */
- $"F2F6 C6B0 85FF 02C5 B4F5 95F2 03F3 F2B5" /* òöÆ°…ÿ.Å´õ•ò.óòµ */
- $"E881 FF03 FCA7 CCF6 82F2 02F7 CDA3 94A8" /* èÿ.ü§Ìö‚ò.÷Í£”¨ */
- $"01A3 8F83 7C01 0000 817C 027B 779C 96A7" /* .£ƒ|...|.{wœ–§ */
- $"00A8 82AB 019C E984 FF03 E9A6 AAAC 96AB" /* .¨‚«.œé„ÿ.馪¬–« */
- $"02AC A6C1 82FF 02D8 A0AC 83AB 00A9 95A7" /* .¬¦Á‚ÿ.Ø ¬ƒ«.©•§ */
- $"01A1 8D83 7C01 0000 817C 037B 7699 A595" /* .¡ƒ|...|.{v™¥• */
- $"A600 A580 A402 A599 C085 FF02 BCA1 A599" /* ¦.¥€¤.¥™À…ÿ.¼¡¥™ */
- $"A401 A5E9 81FF 02CB 96A3 83A4 00A5 95A6" /* ¤.¥éÿ.Ë–£ƒ¤.¥•¦ */
- $"029F 8A7B 827C 0100 0082 7C02 7596 A399" /* .ŸŠ{‚|...‚|.u–£™ */
- $"A402 A29F F584 FF01 DDA0 9BA4 09A0 BFFF" /* ¤.¢Ÿõ„ÿ.Ý ›¤Æ ¿ÿ */
- $"FFE6 ADAB D299 A59B A402 9D88 7B82 7C01" /* ÿæ­«Ò™¥›¤.ˆ{‚|. */
- $"0000 827C 0276 94A2 98A3 02A4 98D1 84FF" /* ..‚|.v”¢˜£.¤˜Ñ„ÿ */
- $"02F9 AFA0 9CA3 09A4 B9A9 A0CB FCFF B599" /* .ù¯ œ£Æ¤¹© Ëüÿµ™ */
- $"A49A A302 9C87 7B82 7C01 0000 827C 0275" /* ¤š£.œ‡{‚|...‚|.u */
- $"92A2 98A3 02A1 A4F5 84FF 01CF 9E9D A303" /* ’¢˜£.¡¤õ„ÿ.Ïž£. */
- $"A0A9 DEFB 80FF 02F3 9CA0 9AA3 029B 867B" /*  ©Þû€ÿ.󜠚£.›†{ */
- $"827C 0100 0081 7C03 7D74 8FA1 97A2 05A3" /* ‚|...|.}t¡—¢.£ */
- $"9FA0 9ED6 FE81 FF02 F0A6 A09D A202 A0A9" /* Ÿ žÖþÿ.𦠢. © */
- $"F382 FF01 D893 9AA2 0299 837B 827C 0100" /* ó‚ÿ.Ø“š¢.™ƒ{‚|.. */
- $"0081 7C03 7D73 8D9F 97A0 069F 9FF1 D697" /* .|.}sŸ— .ŸŸñÖ— */
- $"A6E6 80FF 01C1 9B9F A001 9BD2 83FF 02BB" /* ¦æ€ÿ.Á›Ÿ .›Òƒÿ.» */
- $"94A1 98A0 0297 827B 827C 0100 0081 7C03" /* ”¡˜ .—‚{‚|...|. */
- $"7D72 8A9E 979F 0B9D A6FB FFF9 BF91 B6F6" /* }rŠž—Ÿ.¦ûÿù¿‘¶ö */
- $"E69E 9E9F 9F01 9BB4 83FF 03FA A199 A096" /* æžžŸŸ.›´ƒÿ.ú¡™ – */
- $"9F03 9E95 807B 827C 0100 0081 7C03 7D72" /* Ÿ.ž•€{‚|...|.}r */
- $"889D 979E 0199 B281 FF04 EFAD 9EA9 9CA0" /* ˆ—ž.™²ÿ.ï­ž©œ  */
- $"9E02 9D9F EE83 FF01 E492 979E 039D 9480" /* ž.Ÿîƒÿ.ä’—ž.”€ */
- $"7B82 7C01 0000 817C 037D 7487 9B97 9D01" /* {‚|...|.}t‡›—. */
- $"96BF 82FF 02FE B697 A29D 0198 D184 FF02" /* –¿‚ÿ.þ¶—¢.˜Ñ„ÿ. */
- $"C191 9E95 9D03 9C92 7F7B 827C 0100 0081" /* Á‘ž•.œ’.{‚|... */
- $"7C03 7D75 849A 979C 0194 CE81 FF02 F8BD" /* |.}u„š—œ.”Îÿ.ø½ */
- $"9BA3 9C01 98B4 84FF 02F8 9D99 959C 039B" /* ›£œ.˜´„ÿ.ø™•œ.› */
- $"907E 7B82 7C01 0000 817C 037D 7482 9997" /* ~{‚|...|.}t‚™— */
- $"9B01 94DF 80FF 03EE AD95 9AA3 9B02 9A9D" /* ›.”߀ÿ.î­•š£›.š */
- $"EF84 FF02 CC91 9C94 9B03 9A8F 7C7B 827C" /* ï„ÿ.Ì‘œ”›.š|{‚| */
- $"0100 0081 7C03 7D74 8098 979A 0697 ECFF" /* ...|.}t€˜—š.—ìÿ */
- $"FFE0 A195 A69A 0195 D084 FF02 F098 9994" /* ÿà¡•¦š.•Ð„ÿ.𘙔 */
- $"9A02 998D 7B83 7C01 0000 817C 037D 737E" /* š.™{ƒ|...|.}s~ */
- $"9896 9A06 989F F9FF D099 97A7 9A02 96AD" /* ˜–š.˜ŸùÿЙ—§š.–­ */
- $"FD83 FF02 FCA6 9794 9A02 998D 7B83 7C01" /* ýƒÿ.ü¦—”š.™{ƒ|. */
- $"0000 817C 037D 737D 9796 9905 95AD FCBE" /* ..|.}s}—–™.•­ü¾ */
- $"9498 A999 0196 DD83 FF02 F7A3 9794 9902" /* ”˜©™.–݃ÿ.÷£—”™. */
- $"988C 7A83 7C01 0000 817C 037D 737B 9696" /* ˜Œzƒ|...|.}s{–– */
- $"9803 95B0 B392 AB98 0294 AAF9 82FF 01CF" /* ˜.•°³’«˜.”ªù‚ÿ.Ï */
- $"9595 9802 978A 7A83 7C01 0000 817C 037D" /* ••˜.—Šzƒ|...|.} */
- $"747B 9498 9700 94AD 9708 93B9 F9FF FFF6" /* t{”˜—.”­—.“¹ùÿÿö */
- $"C797 9695 9702 9688 7983 7C01 0000 817C" /* Ç—–•—.–ˆyƒ|...| */
- $"037D 7479 93CA 9606 92A4 BEB8 9F91 9596" /* .}ty“Ê–.’¤¾¸Ÿ‘•– */
- $"9602 9588 7983 7C01 0000 817C 037D 7478" /* –.•ˆyƒ|...|.}tx */
- $"93CB 9603 9390 9193 9896 0294 8779 837C" /* “Ë–.“‘“˜–.”‡yƒ| */
- $"0100 0081 7C03 7D75 7892 EA95 0293 8679" /* ...|.}ux’ê•.“†y */
- $"837C 0100 0081 7C03 7D75 7892 EA95 0293" /* ƒ|...|.}ux’ê•.“ */
- $"8679 837C 0100 0081 7C03 7D76 7792 EA95" /* †yƒ|...|.}vw’ê• */
- $"0293 8679 837C 0100 0081 7C03 7D76 7792" /* .“†yƒ|...|.}vw’ */
- $"EA95 0293 8579 837C 0000 827C 037D 7776" /* ê•.“…yƒ|..‚|.}wv */
- $"8FEA 9402 9182 7883 7C00 0083 7C03 7A70" /* ê”.‘‚xƒ|..ƒ|.zp */
- $"8288 E989 0285 7A79 837C 0100 0082 7C02" /* ‚ˆé‰.…zyƒ|...‚|. */
- $"7D78 76EA 7901 7779 847C 0100 00FB 7C01" /* }xvêy.wy„|...û|. */
- $"0000 FB7C 0100 00FB 7C01 0000 FB7C 0100" /* ..û|...û|...û|.. */
- $"00FA 7C81 00F9 7C82 00F7 7C83 00F6 7C86" /* .ú|.ù|‚.÷|ƒ.ö|† */
- $"00F3 7CFF 00FF 0000 00FF 00FF 00FF 00FF" /* .ó|ÿ.ÿ...ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 74D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.Ÿt× */
- $"00A6 74D3 0001 7474 8000 9D73 8474 D000" /* .¦tÓ..tt€.s„tÐ. */
- $"0374 7400 749E 7702 7673 7283 74D0 0003" /* .tt.tžw.vsrƒtÐ.. */
- $"7381 9FAB 9DAC 03A8 977A 7383 74CD 0004" /* sŸ«¬.¨—zsƒtÍ.. */
- $"7400 79AF CC9E CF03 CCBF 9B73 8374 CD00" /* t.y¯ÌžÏ.Ì¿›sƒtÍ. */
- $"0474 0088 C6D2 9FD3 03CA AF7C 7282 74CD" /* .t.ˆÆÒŸÓ.ʯ|r‚tÍ */
- $"0003 7400 8EC9 A0D3 03CC B27D 7282 74CC" /* ..t.ŽÉ Ó.̲}r‚tÌ */
- $"0004 7474 7094 CBA0 D203 CCB3 7C72 8374" /* ..ttp”Ë Ò.̳|rƒt */
- $"CB00 0474 7471 A1CE A0D1 03CC B67F 72B8" /* Ë..ttq¡Î Ñ.̶.r¸ */
- $"7495 0005 7474 0078 B7D0 A0D1 03CE BE8B" /* t•..tt.x·Ð Ñ.ξ‹ */
- $"70BA 7492 0006 7474 0070 96C9 CFA0 D004" /* pºt’..tt.p–ÉÏ Ð. */
- $"CFC6 A675 71BA 7490 0006 7474 0072 8FC0" /* ÏƦuqºt..tt.rÀ */
- $"CDA2 CF03 CBBF 9D7A B672 0473 0073 7474" /* Í¢Ï.Ë¿z¶r.s.stt */
- $"8E00 0674 7400 799D C3CD A3CF 04CE CAC3" /* Ž..tt.yÃÍ£Ï.ÎÊà */
- $"B2A0 B598 0496 8D79 0074 8D00 0774 7400" /* ² µ˜.–y.t..tt. */
- $"79A8 C8CE CEA4 CF03 CECD CBC9 B5C7 03C3" /* y¨ÈÎΤÏ.ÎÍËɵÇ.à */
- $"B58F 0080 7489 0081 7403 7192 C1C8 E2C9" /* µ.€t‰.t.q’ÁÈâÉ */
- $"03C7 B995 7282 7486 0001 7474 8000 026E" /* .ǹ•r‚t†..tt€..n */
- $"91AC E3AF 04AE A58A 6F71 8000 0174 7484" /* ‘¬ã¯.®¥Šoq€..tt„ */
- $"0008 7400 7075 8085 8487 8E80 8FAA 9000" /* ..t.pu€…„‡Ž€ª. */
- $"8FB0 9080 8F09 8B87 8584 847F 7600 7474" /* °€Æ‹‡…„„.v.tt */
- $"8200 0774 0070 8BAF BCBF C0E7 C109 C0BF" /* ‚..t.p‹¯¼¿ÀçÁÆÀ¿ */
- $"BEBE B8A6 8572 7474 8200 0370 8DC0 C9EE" /* ¾¾¸¦…rtt‚..pÀÉî */
- $"CA05 C9C4 B185 0074 8000 0474 0078 B4C8" /* Ê.Éı….t€..t.x´È */
- $"F0CA 0CC9 BFA1 7600 7400 0074 0088 BFC8" /* ðÊ.É¿¡v.t..t.ˆ¿È */
- $"B3C9 03CA C7C9 CAB7 C90A C3AD 7F00 7400" /* ³É.ÊÇÉÊ·ÉÂí..t. */
- $"0074 708C C0B3 C805 C9C3 B8B3 C4C9 B6C8" /* .tpŒÀ³È.Éø³ÄÉ¶È */
- $"0AC3 AE7F 0074 0074 7400 88BD B4C7 05C2" /* Âî..t.tt.ˆ½´Ç. */
- $"F1EC B2C4 C8B5 C70B C1AB 7C00 7400 7474" /* ñì²ÄȵÇ.Á«|.t.tt */
- $"0082 BAC6 B3C7 04C6 F2FF E6B3 B6C7 0BC0" /* .‚ºÆ³Ç.Æòÿ泶Ç.À */
- $"A67A 7374 0074 7400 7DB5 C5B3 C606 C3E7" /* ¦zst.tt.}µÅ³Æ.Ãç */
- $"FFFF D5B6 C8B4 C60B BDA1 7573 7400 7474" /* ÿÿնȴÆ.½¡ust.tt */
- $"0079 B0C4 B3C5 01C2 D880 FF02 C0BD C6B2" /* .y°Ä³Å.ÂØ€ÿ.À½Æ² */
- $"C50C C4BB 9D75 7374 0074 7473 75AA C2B3" /* Å.Ä»ust.ttsuªÂ³ */
- $"C406 C3C9 FAFF FFF0 B3B3 C403 C3B8 9673" /* Ä.ÃÉúÿÿð³³Ä.ø–s */
- $"8474 01A5 C1B4 C301 C1EB 80FF 02D6 B4C5" /* „t.¥Á´Ã.Áë€ÿ.Ö´Å */
- $"B1C3 03C2 B591 7283 7402 719E BFB4 C201" /* ±Ã.µ‘rƒt.qž¿´Â. */
- $"BFD5 80FF 03FD BBBD C3B0 C203 C0B2 8E72" /* ¿Õ€ÿ.ý»½Ã°Â.À²Žr */
- $"8374 0270 99BD B4C1 02C0 C4F6 80FF 02E6" /* ƒt.p™½´Á.ÀÄö€ÿ.æ */
- $"B1C2 B0C1 03BE AF87 7283 7402 7193 BBB5" /* ±Â°Á.¾¯‡rƒt.q“»µ */
- $"C001 BCE1 81FF 02C6 B7C1 AFC0 06BD AC84" /* À.¼áÿ.Æ·Á¯À.½¬„ */
- $"7274 7400 8074 0270 8CB9 B1BF 00C0 80C1" /* rtt.€t.pŒ¹±¿.À€Á */
- $"02BD CAFD 80FF 01F1 B1B0 BF06 BBA9 8172" /* .½Êý€ÿ.ñ±°¿.»©r */
- $"7474 0080 7402 7088 B7B0 BF07 C1B9 ACAB" /* tt.€t.pˆ·°¿.Á¹¬« */
- $"AEBC BEEB 81FF 02D1 B3C0 AEBF 06BA A67C" /* ®¼¾ëÿ.ѳÀ®¿.º¦| */
- $"7274 7400 8074 0271 83B4 AFBE 08BF AFB4" /* rtt.€t.qƒ´¯¾.¿¯´ */
- $"D9E3 D2AD B1D3 81FF 02F8 B4BC AEBE 06B8" /* ÙãÒ­±Óÿ.ø´¼®¾.¸ */
- $"A27A 7374 7400 8074 0372 7DB1 BCAE BD01" /* ¢zstt.€t.r}±¼®½. */
- $"B9CA 81FF 03F6 B4B9 F381 FF02 D8AF BEAD" /* ¹Êÿ.ö´¹óÿ.د¾­ */
- $"BD0D B69F 7973 7474 0000 7474 727A ADBB" /* ½.¶Ÿystt..ttrz­» */
- $"ADBC 03BB ABB7 E681 FF02 E6AE D881 FF02" /* ­¼.»«·æÿ.æ®Øÿ. */
- $"FDB7 B8AD BC0D B49A 7673 7474 0000 7474" /* ý·¸­¼.´švstt..tt */
- $"7378 A9BA ACBB 0CBC ACDB D7A6 BDF0 FFFF" /* sx©º¬».¼¬Ûצ½ðÿÿ */
- $"FABA BEF7 81FF 02DF ACBC ACBB 01B2 9781" /* úº¾÷ÿ.߬¼¬».²— */
- $"7407 0000 7474 7374 A4B8 ABB9 0DBA B3BB" /* t...ttst¤¸«¹.º³» */
- $"FFFF F7C2 A4CB FAFC C0B4 DC82 FF02 BAB4" /* ÿÿ÷¤ËúüÀ´Ü‚ÿ.º´ */
- $"BAAB B901 B093 8174 0100 0080 7402 729F" /* º«¹.°“t...€t.rŸ */
- $"B6AB B902 BAAA E981 FF07 ECB3 ABD1 BBB6" /* ¶«¹.ºªéÿ.쳫ѻ¶ */
- $"C0FA 81FF 02E4 AABA AAB9 03B8 AD8E 7380" /* Àúÿ.䪺ª¹.¸­Žs€ */
- $"7401 0000 8074 0272 9BB6 AAB8 02B9 ADC6" /* t...€t.r›¶ª¸.¹­Æ */
- $"84FF 05DC AFB7 B8B4 E082 FF02 BCB1 B9A9" /* „ÿ.ܯ·¸´à‚ÿ.¼±¹© */
- $"B803 B6AB 8A72 8074 0100 0080 7402 7095" /* ¸.¶«Šr€t...€t.p• */
- $"B4AA B602 B5AB F484 FF06 E9B6 B5B6 B4C2" /* ´ª¶.µ«ô„ÿ.鶵¶´Â */
- $"FC81 FF02 E6A9 B7A9 B603 B5A8 8872 8074" /* üÿ.æ©·©¶.µ¨ˆr€t */
- $"0100 0080 7402 6F91 B3A9 B602 B7AD D684" /* ...€t.o‘³©¶.·­Ö„ */
- $"FF02 FAC0 B480 B601 B3E4 82FF 02BD AFB7" /* ÿ.úÀ´€¶.³ä‚ÿ.½¯· */
- $"A8B6 03B4 A584 7280 7401 0000 8074 0270" /* ¨¶.´¥„r€t...€t.p */
- $"8DB2 A9B6 02B4 ACE7 84FF 01D9 B181 B602" /* ²©¶.´¬ç„ÿ.Ù±¶. */
- $"B3C5 FE81 FF02 E8A8 B7A8 B603 B3A3 8172" /* ³Åþÿ.訷¨¶.³£r */
- $"8074 0100 0080 7402 7087 B0A8 B505 B6AA" /* €t...€t.p‡°¨µ.¶ª */
- $"BDA4 C1F5 81FF 02F3 B8B4 82B5 01B2 E782" /* ½¤Áõÿ.ó¸´‚µ.²ç‚ */
- $"FF02 BFAD B6A7 B503 B2A1 7F72 8074 0100" /* ÿ.¿­¶§µ.²¡.r€t.. */
- $"0080 7402 7083 ADA7 B40C B5AC BBFF F2B8" /* .€t.pƒ­§´.µ¬»ÿò¸ */
- $"A2D0 FBFF FFCE B083 B401 B1C5 82FF 02EA" /* ¢Ðûÿÿΰƒ´.±Å‚ÿ.ê */
- $"A7B5 A7B4 03B0 9E7C 7380 7401 0000 8074" /* §µ§´.°ž|s€t...€t */
- $"0271 80AB A8B3 01A5 EC80 FF06 E4AA A9E2" /* .q€«¨³.¥ì€ÿ.䪩â */
- $"EAB2 B284 B301 B1E8 82FF 02BF ABB4 A6B3" /* ê²²„³.±è‚ÿ.¿«´¦³ */
- $"03AE 9B79 7380 7401 0000 8074 0272 7DA8" /* .®›ys€t...€t.r}¨ */
- $"A6B2 02B3 A6C8 82FF 04FE D3A8 B2B1 85B2" /* ¦².³¦È‚ÿ.þÓ¨²±…² */
- $"01AE C582 FF02 EAA6 B3A6 B203 AC98 7873" /* .®Å‚ÿ.꦳¦².¬˜xs */
- $"8074 0100 0080 7403 7278 A5B0 A5B1 02AF" /* €t...€t.rx¥°¥±.¯ */
- $"A9F7 84FF 01DA AB86 B102 B0AF E982 FF02" /* ©÷„ÿ.Ú«†±.°¯é‚ÿ. */
- $"BEA9 B2A5 B103 AB95 7773 8074 0100 0080" /* ¾©²¥±.«•ws€t...€ */
- $"7403 7276 A2AF A4B0 02B1 A2D5 84FF 02F8" /* t.rv¢¯¤°.±¢Õ„ÿ.ø */
- $"BAAE 87B0 01AC C682 FF02 EAA4 B1A5 B003" /* º®‡°.¬Æ‚ÿ.ꤱ¥°. */
- $"A991 7573 8074 0100 0080 7402 7375 9FA4" /* ©‘us€t...€t.suŸ¤ */
- $"AE03 AFA9 B0FE 84FF 01D3 AA88 AE02 ADAD" /* ®.¯©°þ„ÿ.Óªˆ®.­­ */
- $"E982 FF02 BCA7 AFA4 AE01 A78E 8274 0100" /* é‚ÿ.¼§¯¤®.§Ž‚t.. */
- $"0081 7402 729B ADA3 AE02 AFA0 E384 FF02" /* .t.r›­£®.¯ ã„ÿ. */
- $"F0B0 AD89 AE01 AAC4 82FF 02E9 A2AF A4AE" /* ð°­‰®.ªÄ‚ÿ.颯¤® */
- $"01A5 8C82 7401 0000 8174 0270 98AC 97AD" /* .¥Œ‚t...t.p˜¬—­ */
- $"0DAC ADAE ACAE ADAC AEAD ACAE AEA4 BB85" /* .¬­®¬®­¬®­¬®®¤»… */
- $"FF11 C7A7 AEAD ACAE ADAC AEAC ACAE ACAD" /* ÿ.ǧ®­¬®­¬®¬¬®¬­ */
- $"AEAB ABE9 82FF 0EBB A6AE ADAC AEAC ACAE" /* ®««é‚ÿ.»¦®­¬®¬¬® */
- $"ACAD AEAC ADAE 97AD 01A3 8982 7401 0000" /* ¬­®¬­®—­.£‰‚t... */
- $"8174 0270 94AA 95AC 0FAD A79F A1A2 9FA2" /* t.p”ª•¬.­§Ÿ¡¢Ÿ¢ */
- $"A29F A2A1 9FA4 A9A1 EF84 FF12 E6A2 9FA2" /* ¢Ÿ¢¡Ÿ¤©¡ï„ÿ.梟¢ */
- $"A1A0 A3A1 A0A2 A0A0 A3A0 A0A2 9F9D C282" /* ¡ £¡ ¢  £  ¢ŸÂ‚ */
- $"FF10 E6A0 A9A0 A0A2 A0A0 A2A0 A1A3 A0A1" /* ÿ.æ ©  ¢  ¢ ¡£ ¡ */
- $"A2A2 AB94 AC03 ABA1 8673 8174 0100 0081" /* ¢¢«”¬.«¡†st... */
- $"7402 7091 A995 AB0E A9AF FACE C2FF BCCA" /* t.p‘©•«.©¯úÎÂÿ¼Ê */
- $"FFB6 DEFA B4A1 C884 FF14 FDB2 C0FF BFCF" /* ÿ¶Þú´¡È„ÿ.ý²Àÿ¿Ï */
- $"FFAF DCFA AFEA F1A8 F5E4 B2FE D79D E982" /* ÿ¯Üú¯êñ¨õä²þ×é‚ */
- $"FF0F B8A1 E4F8 A9EA F0AE F7E0 ACFF D5C0" /* ÿ.¸¡äø©êð®÷à¬ÿÕÀ */
- $"D1A5 94AB 03AA 9F84 7381 7401 0000 8174" /* Ñ¥”«.ªŸ„st...t */
- $"026F 8CA8 95A9 0EA7 B1FF CEC2 FFD0 DBFF" /* .oŒ¨•©.§±ÿÎÂÿÐÛÿ */
- $"B3E0 FFB6 A2F9 84FF 14D7 99D8 FFBE D0FF" /* ³àÿ¶¢ù„ÿ.×™Øÿ¾Ðÿ */
- $"C5E9 FFAC EEFA C0FE E7B0 FFE8 A3B9 82FF" /* Åéÿ¬îúÀþç°ÿ裹‚ÿ */
- $"0FE2 99EA FFC1 F5F4 ABFB EDC4 FFD7 BED6" /* .â™êÿÁõô«ûíÄÿ×¾Ö */
- $"A394 A903 A89C 8173 8174 0100 0080 7403" /* £”©.¨œst...€t. */
- $"756E 88A6 95A8 04A6 B0FF DDD3 81FF 04C9" /* unˆ¦•¨.¦°ÿÝÓÿ.É */
- $"EBFB A6D5 84FF 06F6 A3DE FFFF D1DE 80FF" /* ëû¦Õ„ÿ.ö£ÞÿÿÑÞ€ÿ */
- $"02FD C4F2 80FF 06EE C6FF FFFA A7E2 82FF" /* .ýÄò€ÿ.îÆÿÿú§â‚ÿ */
- $"01B0 D780 FF02 F6C3 FB80 FF03 E3D3 D5A2" /* .°×€ÿ.öÃû€ÿ.ãÓÕ¢ */
- $"94A8 03A7 9A7F 7381 7401 0000 8074 0375" /* ”¨.§š.st...€t.u */
- $"6E85 A495 A702 A5AF FA85 FF01 C7AB 85FF" /* n…¤•§.¥¯ú…ÿ.Ç«…ÿ */
- $"01C4 B290 FF01 D1B1 82FF 02DD ACFB 87FF" /* .IJÿ.ѱ‚ÿ.ݬû‡ÿ */
- $"01D1 A194 A703 A598 7D73 8174 0100 0081" /* .Ñ¡”§.¥˜}st... */
- $"7402 7082 A295 A602 A4AE FB84 FF02 EF9C" /* t.p‚¢•¦.¤®û„ÿ.ïœ */
- $"E484 FF02 EC9E EB90 FF02 FCA7 DF81 FF02" /* ä„ÿ.ìžëÿ.ü§ßÿ. */
- $"FCAD D787 FF01 D0A0 94A6 03A3 957B 7381" /* ü­×‡ÿ.Р”¦.£•{s */
- $"7401 0000 8174 0270 7EA1 95A6 02A4 AEFB" /* t...t.p~¡•¦.¤®û */
- $"84FF 01B8 B885 FF01 B4BF 92FF 01D4 AD80" /* „ÿ.¸¸…ÿ.´¿’ÿ.Ô­€ */
- $"FF04 FCD4 9CAC FA86 FF01 D0A0 94A6 03A3" /* ÿ.üÔœ¬ú†ÿ.Р”¦.£ */
- $"937A 7381 7401 0000 8174 0270 7B9F 95A4" /* “zst...t.p{Ÿ•¤ */
- $"02A2 ACFA 83FF 02E3 9BF1 84FF 02DE 9EF5" /* .¢¬úƒÿ.ã›ñ„ÿ.Þžõ */
- $"92FF 09FD A8D9 FADB AD8B B1A1 D486 FF01" /* ’ÿÆý¨ÙúÛ­‹±¡Ô†ÿ. */
- $"CF9E 94A4 03A1 9178 7381 7401 0000 8174" /* Ïž”¤.¡‘xst...t */
- $"0270 779D 95A3 02A1 ACFA 82FF 02FD A9C7" /* .pw•£.¡¬ú‚ÿ.ý©Ç */
- $"84FF 02FC A5CD 94FF 09D9 989F 8B9B D3FF" /* „ÿ.ü¥Í”ÿÆÙ˜Ÿ‹›Óÿ */
- $"CDA1 F985 FF01 CF9D 94A3 03A0 8E77 7381" /* Í¡ù…ÿ.Ï”£. Žws */
- $"7401 0000 8174 0271 779A 95A2 02A0 ABFA" /* t...t.qwš•¢. «ú */
- $"82FF 02D4 A0FB 84FF 02CE A2FD 95FF 08A6" /* ‚ÿ.Ô û„ÿ.΢ý•ÿ.¦ */
- $"AEDB FCFF FFFA 9ECF 85FF 01CE 9C94 A203" /* ®ÛüÿÿúžÏ…ÿ.Îœ”¢. */
- $"9E8C 7673 8174 0100 0081 7402 7275 9895" /* žŒvst...t.ru˜• */
- $"A102 9FAA FA81 FF02 F79D D784 FF02 F29C" /* ¡.Ÿªúÿ.÷ׄÿ.òœ */
- $"DE96 FF01 DABD 82FF 02D0 9DF8 84FF 01CE" /* Þ–ÿ.Ú½‚ÿ.Ðø„ÿ.Î */
- $"9A94 A102 9C8A 7582 7401 0000 8174 0272" /* š”¡.œŠu‚t...t.r */
- $"7196 959F 089D A9EE F2F1 F1F6 C0AA 85FF" /* q–•Ÿ.©îòññöÀª…ÿ */
- $"02C0 ADF5 95F1 03F2 F1AE E681 FF03 FCA0" /* .À­õ•ñ.òñ®æÿ.ü  */
- $"C7F5 82F1 02F6 C89A 949F 029A 8775 8274" /* Çõ‚ñ.öÈš”Ÿ.š‡u‚t */
- $"0100 0081 7402 736F 9396 9E00 9F82 A201" /* ...t.so“–ž.Ÿ‚¢. */
- $"93E8 84FF 03E8 9EA2 A396 A202 A39D BB82" /* “è„ÿ.螢£–¢.£»‚ */
- $"FF02 D597 A383 A200 A195 9E01 9985 8374" /* ÿ.Õ—£ƒ¢.¡•ž.™…ƒt */
- $"0100 0081 7403 736E 929D 959E 009D 809C" /* ...t.sn’•ž.€œ */
- $"029D 91BC 84FF 03FE B599 9D99 9C01 9DE7" /* .‘¼„ÿ.þµ™™œ.ç */
- $"81FF 02C7 8D9B 839C 009D 959E 0198 8383" /* ÿ.Ç›ƒœ.•ž.˜ƒƒ */
- $"7401 0000 8274 016E 8F9A 9C02 9A98 F484" /* t...‚t.nšœ.š˜ô„ */
- $"FF01 DA99 9B9C 0997 B9FF FFE4 A7A6 CF91" /* ÿ.Ú™›œÆ—¹ÿÿ䧦ϑ */
- $"9D9B 9C02 9681 7382 7401 0000 8274 026F" /* ›œ.–s‚t...‚t.o */
- $"8C9A 989B 029C 90CF 84FF 02F8 A998 9D9B" /* Œš˜›.œÏ„ÿ.ø©˜› */
- $"08B3 A39A C8FC FFB0 919C 9A9B 0294 8073" /* .³£šÈüÿ°‘œš›.”€s */
- $"8274 0100 0082 7402 6D8A 9998 9A02 989C" /* ‚t...‚t.mŠ™˜š.˜œ */
- $"F484 FF01 CB94 9D9A 0397 A2DD FB80 FF02" /* ô„ÿ.Ë”š.—¢Ýû€ÿ. */
- $"F294 979A 9A02 927E 7382 7401 0000 8174" /* ò”—šš.’~s‚t...t */
- $"0375 6B87 9898 9904 969A 96D2 FE81 FF02" /* .uk‡˜˜™.–š–Òþÿ. */
- $"EF9E 979D 9902 97A1 F382 FF02 D68A 9A99" /* ïž—™.—¡ó‚ÿ.ÖŠš™ */
- $"9902 917C 7382 7401 0000 8174 0375 6A85" /* ™.‘|s‚t...t.uj… */
- $"9797 9806 9798 F1D3 8F9F E480 FF01 BB92" /* ——˜.—˜ñÓŸä€ÿ.»’ */
- $"9F98 0192 CF83 FF02 B68A 9998 9802 8F7B" /* Ÿ˜.’σÿ.¶Š™˜˜.{ */
- $"7382 7401 0000 8174 0375 6A82 9597 960B" /* s‚t...t.uj‚•—–. */
- $"939F FBFF F9BB 89B0 F5E4 9595 9F96 0192" /* “Ÿûÿù»‰°õä••Ÿ–.’ */
- $"AD83 FF03 FA9B 9097 9796 028D 7973 8274" /* ­ƒÿ.ú›——–.ys‚t */
- $"0100 0081 7403 756A 8195 9796 0191 AC81" /* ...t.uj•—–.‘¬ */
- $"FF04 EEA8 97A2 94A0 9602 9597 EC83 FF01" /* ÿ.¢” –.•—ìƒÿ. */
- $"E28A 9796 0395 8C78 7382 7401 0000 8174" /* ⊗–.•Œxs‚t...t */
- $"0375 6C7F 9497 9501 8EBB 82FF 02FE B28E" /* .ul.”—•.Ž»‚ÿ.þ²Ž */
- $"A295 018F CE84 FF02 BD89 9695 9503 948B" /* ¢•.΄ÿ.½‰–••.”‹ */
- $"7873 8274 0100 0081 7403 756D 7D92 9794" /* xs‚t...t.um}’—” */
- $"018C CB81 FF02 F8B8 93A3 9401 90AE 84FF" /* .ŒËÿ.ø¸“£”.®„ÿ */
- $"02F7 9691 9594 0393 8A77 7382 7401 0000" /* .÷–‘•”.“Šws‚t... */
- $"8174 0375 6C7B 9197 9301 8CDD 80FF 02ED" /* t.ul{‘—“.ŒÝ€ÿ.í */
- $"A78D A493 0292 96EE 84FF 02C8 8894 9493" /* §¤“.’–î„ÿ.Ȉ””“ */
- $"0392 8875 7382 7401 0000 8174 0375 6C79" /* .’ˆus‚t...t.uly */
- $"9096 9207 9190 EBFF FFDE 9A8D A692 018C" /* –’.‘ëÿÿÞš¦’.Œ */
- $"CC84 FF02 EF91 9194 9201 9186 8474 0100" /* Ì„ÿ.ï‘‘”’.‘†„t.. */
- $"0081 7403 756B 7790 9692 0690 97F8 FFCC" /* .t.ukw–’.—øÿÌ */
- $"918E A792 028E A6FD 83FF 02FC 9F8F 9492" /* ‘Ž§’.Ž¦ýƒÿ.üŸ”’ */
- $"0191 8584 7401 0000 8174 0375 6B75 8E96" /* .‘…„t...t.ukuŽ– */
- $"9005 8BA7 FCBA 8B8E A990 018D DB83 FF02" /* .‹§üº‹Ž©.Ûƒÿ. */
- $"F79B 8D94 9002 8F83 7383 7401 0000 8174" /* ÷›”.ƒsƒt...t */
- $"0375 6C74 8E96 9004 8CAA AD89 8FAA 9002" /* .ultŽ–.Œª­‰ª. */
- $"8CA3 F982 FF01 CB8C 9590 028F 8373 8374" /* Œ£ù‚ÿ.ËŒ•.ƒsƒt */
- $"0100 0081 7403 756B 728D 988F 008B AD8F" /* ...t.ukr˜.‹­ */
- $"088A B4F9 FFFF F6C3 8E8E 958F 028E 8172" /* .Š´ùÿÿöÃŽŽ•.Žr */
- $"8374 0100 0081 7403 756C 718C CA8E 068A" /* ƒt...t.ulqŒÊŽ.Š */
- $"9DBA B398 898D 968E 028D 8072 8374 0100" /* º³˜‰–Ž.€rƒt.. */
- $"0081 7403 756C 718B CB8E 038B 8888 8B98" /* .t.ulq‹ËŽ.‹ˆˆ‹˜ */
- $"8E02 8C80 7283 7401 0000 8174 0375 6D71" /* Ž.Œ€rƒt...t.umq */
- $"8BEA 8E02 8C80 7283 7401 0000 8174 0375" /* ‹êŽ.Œ€rƒt...t.u */
- $"6D70 8AEA 8D02 8B7F 7283 7401 0000 8174" /* mpŠê.‹.rƒt...t */
- $"0375 6E70 8AEA 8D02 8B7E 7283 7401 0000" /* .unpŠê.‹~rƒt... */
- $"8174 0375 6E70 8AEA 8D02 8B7E 7283 7400" /* t.unpŠê.‹~rƒt. */
- $"0082 7403 756F 6E88 EA8C 0289 7B71 8374" /* .‚t.uonˆêŒ.‰{qƒt */
- $"0000 8374 0372 697B 81E9 8202 7E73 7283" /* ..ƒt.ri{é‚.~srƒ */
- $"7401 0000 8274 0475 706E 7172 E671 0372" /* t...‚t.upnqræq.r */
- $"7270 7284 7401 0000 FB74 0100 00FB 7401" /* rpr„t...ût...ût. */
- $"0000 FB74 0100 00FB 7401 0000 FA74 8100" /* ..ût...ût...út. */
- $"F974 8200 F774 8300 F674 8600 F374 FF00" /* ùt‚.÷tƒ.öt†.ótÿ. */
- $"FF00 0000 7438 6D6B 0000 4008 0000 0000" /* ÿ...t8mk..@..... */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0101 0101 0202 0202 0202 0202 0202 0202" /* ................ */
- $"0202 0202 0202 0202 0202 0202 0202 0101" /* ................ */
- $"0101 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 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0102 0202" /* ................ */
- $"0304 0505 0606 0606 0606 0606 0606 0606" /* ................ */
- $"0606 0606 0606 0606 0606 0606 0606 0505" /* ................ */
- $"0503 0302 0100 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 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0001 0100 0000" /* ................ */
- $"0204 0506 0707 0707 0707 0707 0707 0707" /* ................ */
- $"0707 0707 0707 0707 0707 0707 0707 0606" /* ................ */
- $"090A 0805 0302 0100 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 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0101 001C 2F31" /* ............../1 */
- $"3436 383A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A" /* 468::::::::::::: */
- $"3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A34" /* :::::::::::::::4 */
- $"120B 0F0B 0704 0201 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 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0004 8FF3 FAF9" /* ............óúù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA" /* ùùùùùùùùùùùùùùúú */
- $"C433 1112 0C07 0402 0100 0000 0000 0000" /* Ä3.............. */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 0067 FFFF FFFF" /* ...........gÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFC3 201A 130C 0703 0100 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 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 00A9 FFFF FFFF" /* ...........©ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFF8 4A20 1B11 0A05 0200 0000 0000 0000" /* ÿøJ ..Â......... */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0002 00B6 FFFF FFFF" /* ...........¶ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFB 5928 2216 0D07 0200 0000 0000 0000" /* ÿûY("........... */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0103 07CC FFFF FFFF" /* ...........Ìÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFD 6231 291B 1109 0401 0000 0000 0000" /* ÿýb1)..Æ........ */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0201 21F0 FFFF FFFF" /* ..........!ðÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 7337 2F21 160D 0704 0303 0303 0303" /* ÿÿs7/!.......... */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0302 0201 0100" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0001 0500 69FF FFFF FFFF" /* ..........iÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 9A38 3628 1C14 0E0A 0909 0909 0909" /* ÿÿš86(...ÂÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0807 0604 0302" /* ÆÆÆÆÆÆÆÆÆÆ...... */
- $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0203 0021 DFFF FFFF FFFF" /* .........!ßÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF E653 312D 231B 1512 1011 1010 1010" /* ÿÿæS1-#......... */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 0E0C 0A08 0504" /* ............Â... */
- $"0301 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0002 0200 34D3 FFFF FFFF FFFF" /* ........4Óÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFD6 6E40 312A 2522 2121 2121 2121" /* ÿÿÿÖn@1*%"!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2120 1E1B 1814 0D00" /* !!!!!!!!! ...... */
- $"0203 0100 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0102 006C F4FF FFFF FFFF FFFF" /* .......lôÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FEE8 DAD9 D9D8 D8D8 D8D8 D8D8" /* ÿÿÿÿþèÚÙÙØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D7D7 D6D5 D5A9" /* ØØØØØØØØØØ××ÖÕÕ© */
- $"1E00 0200 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0001 0300 71FF FFFF FFFF FFFF FFFF" /* ......qÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"8500 0402 0100 0000 0000 0000 0000 0000" /* …............... */
- $"0001 0203 0317 E1FF FFFF FFFF FFFF FFFF" /* ......áÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"9E03 0905 0302 0100 0000 0000 0000 0000" /* ž.Æ............. */
- $"0201 0000 002C E4E8 E8E9 EAEB ECEC EDED" /* .....,äèèéêëììíí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED ECEC ECEC ECEC ECEC ECEC ECEC" /* ííííìììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEB EAE9 E8F4" /* ìììììììììììëêéèô */
- $"8E02 0400 0000 0202 0000 0000 0000 0002" /* Ž............... */
- $"0012 6297 A3A9 BBBD C0C4 C7CA CCCD CECE" /* ..b—£©»½ÀÄÇÊÌÍÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CDCD CCCC CCCC CBCB CBCB CBCB" /* ÎÎÎÎÍÍÌÌÌÌËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBC9 C8C5 C2C0" /* ËËËËËËËËËËËÉÈÅÂÀ */
- $"B5A6 A5A1 8236 0002 0100 0000 0000 0100" /* µ¦¥¡‚6.......... */
- $"35DC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 5Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFE 8901 0101 0000 0000 001B" /* ÿÿÿÿÿþ‰......... */
- $"DFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF73 0002 0000 0001 0082" /* ÿÿÿÿÿÿÿs.......‚ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE4 1800 0100 0001 00C0" /* ÿÿÿÿÿÿÿä.......À */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4500 0200 0002 02C6" /* ÿÿÿÿÿÿÿÿE......Æ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4C00 0200 0103 00B3" /* ÿÿÿÿÿÿÿÿL......³ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFE 3D00 0300 0104 009C" /* ÿÿÿÿÿÿÿþ=......œ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFF4 2C04 0400 0105 0087" /* ÿÿÿÿÿÿÿô,......‡ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE8 2007 0400 0105 0073" /* ÿÿÿÿÿÿÿè ......s */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFD9 1808 0400 0105 015C" /* ÿÿÿÿÿÿÿÙ.......\ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFC7 0E0A 0401 0105 034A" /* ÿÿÿÿÿÿÿÇ.Â.....J */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFB5 0A0A 0402 0105 043C" /* ÿÿÿÿÿÿÿµÂÂ.....< */
- $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFA1 080A 0402 0105 062B" /* ÿÿÿÿÿÿÿ¡.Â.....+ */
- $"F2FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF8E 050A 0402 0104 0720" /* ÿÿÿÿÿÿÿŽ.Â..... */
- $"E7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF7C 0609 0300 0104 0817" /* ÿÿÿÿÿÿÿ|.Æ...... */
- $"D8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF68 0709 0300 0104 0A0E" /* ÿÿÿÿÿÿÿh.Æ....Â. */
- $"C8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF55 0809 0300 0104 0A0A" /* ÿÿÿÿÿÿÿU.Æ....ÂÂ */
- $"B7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF47 0909 0300 0104 0A07" /* ÿÿÿÿÿÿÿGÆÆ....Â. */
- $"A4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF F638 0B08 0300 0004 0A05" /* ÿÿÿÿÿÿö8......Â. */
- $"91FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF EE2B 0C08 0300 0004 0905" /* ÿÿÿÿÿÿî+......Æ. */
- $"81FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF E224 0D08 0300 0003 0906" /* ÿÿÿÿÿÿâ$......Æ. */
- $"71FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF D51C 0E08 0300 0003 0907" /* ÿÿÿÿÿÿÕ.......Æ. */
- $"5EFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF C714 0F07 0200 0003 0908" /* ÿÿÿÿÿÿÇ.......Æ. */
- $"4FFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF B811 0E07 0200 0003 090A" /* ÿÿÿÿÿÿ¸.......ÆÂ */
- $"43FD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Cýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF A70E 0F07 0200 0003 080B" /* ÿÿÿÿÿÿ§......... */
- $"34F5 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 4õÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 960C 0E06 0200 0002 080D" /* ÿÿÿÿÿÿ–......... */
- $"29EB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* )ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 850C 0E07 0200 0003 080E" /* ÿÿÿÿÿÿ…......... */
- $"22E0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* "àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 760D 0E06 0200 0003 080F" /* ÿÿÿÿÿÿv......... */
- $"1BD3 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 650E 0E06 0200 0002 080F" /* ÿÿÿÿÿÿe......... */
- $"14C7 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 580E 0D06 0200 0002 070F" /* ÿÿÿÿÿÿX......... */
- $"11B9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 4E10 0D06 0100 0002 070F" /* ÿÿÿÿÿÿN......... */
- $"10AB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 4211 0D06 0200 0002 070F" /* ÿÿÿÿÿøB......... */
- $"0D9B FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF1 3513 0D06 0200 0002 080F" /* ÿÿÿÿÿñ5......... */
- $"0C8D FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE9 2E13 0D05 0100 0002 070F" /* ÿÿÿÿÿé.......... */
- $"0D81 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFDF 2914 0D06 0100 0002 070F" /* ÿÿÿÿÿß)......... */
- $"0E73 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD4 2215 0C06 0100 0002 070F" /* ÿÿÿÿÿÔ"......... */
- $"0F64 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC9 1C16 0C05 0100 0002 070F" /* ÿÿÿÿÿÉ.......... */
- $"1058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFBD 1A15 0C05 0100 0002 070F" /* ÿÿÿÿÿ½.......... */
- $"114F FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB2 1815 0C05 0100 0002 070E" /* ÿÿÿÿÿ².......... */
- $"1246 FAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Fúÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 1615 0C05 0100 0002 070E" /* ÿÿÿÿÿ¥.......... */
- $"133B F4FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .;ôÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF98 1515 0C05 0100 0002 060E" /* ÿÿÿÿÿ˜.......... */
- $"1533 EEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .3îÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF8D 1515 0B05 0100 0002 070E" /* ÿÿÿÿÿ.......... */
- $"152F E6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ./æÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF82 1615 0B05 0100 0002 070E" /* ÿÿÿÿÿ‚.......... */
- $"1629 DDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .)Ýÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF77 1615 0B05 0100 0002 060E" /* ÿÿÿÿÿw.......... */
- $"1624 D5FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Õÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6B 1715 0B05 0100 0002 060E" /* ÿÿÿÿÿk.......... */
- $"1720 CCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* . Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF61 1815 0B05 0100 0002 060E" /* ÿÿÿÿÿa.......... */
- $"181D C3FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5B 1914 0B05 0100 0002 060E" /* ÿÿÿÿÿ[.......... */
- $"181C BAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ºÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FE54 1A14 0B05 0100 0002 070E" /* ÿÿÿÿþT.......... */
- $"181B B0FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..°ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F94C 1B15 0B04 0100 0002 060E" /* ÿÿÿÿùL.......... */
- $"181A A6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F544 1C15 0B05 0100 0002 070E" /* ÿÿÿÿõD.......... */
- $"1819 9DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F13D 1D14 0B04 0100 0002 060E" /* ÿÿÿÿñ=.......... */
- $"1819 95FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..•ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF EB3A 1D14 0B05 0100 0002 070E" /* ÿÿÿÿë:.......... */
- $"1819 8EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Žÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF E537 1E14 0B05 0100 0002 070E" /* ÿÿÿÿå7.......... */
- $"181A 86FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..†ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF DF34 1E14 0B05 0100 0002 070E" /* ÿÿÿÿß4.......... */
- $"181B 7EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..~ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D930 1F15 0B05 0100 0002 070E" /* ÿÿÿÿÙ0.......... */
- $"181B 78FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..xÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D32D 1F15 0B05 0100 0002 070F" /* ÿÿÿÿÓ-.......... */
- $"191C 71FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..qÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF CE29 2015 0B05 0100 0002 070F" /* ÿÿÿÿÎ) ......... */
- $"191D 6AFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..jÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C828 2015 0B05 0100 0002 070F" /* ÿÿÿÿÈ( ......... */
- $"191D 65FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..eÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C328 2015 0B05 0100 0002 070F" /* ÿÿÿÿÃ( ......... */
- $"191E 61FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..aÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF BE28 2115 0B05 0100 0002 070F" /* ÿÿÿÿ¾(!......... */
- $"191F 5DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..]ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B827 2115 0C05 0100 0002 070F" /* ÿÿÿÿ¸'!......... */
- $"1920 5AFE FFFF FFFF FFFF FFFF FFFF FFFF" /* . Zþÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B427 2115 0C05 0100 0003 0710" /* ÿÿÿÿ´'!......... */
- $"1A21 58FD FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Xýÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B026 2115 0C05 0100 0003 0810" /* ÿÿÿÿ°&!......... */
- $"1A21 55FB FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Uûÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF AC26 2116 0C05 0200 0003 0810" /* ÿÿÿÿ¬&!......... */
- $"1A22 52F9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ."Rùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A826 2215 0C05 0100 0003 0810" /* ÿÿÿÿ¨&"......... */
- $"1A23 4FF7 FFFF FFFF FFFF FFFF FFFF FFFF" /* .#O÷ÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A426 2316 0D06 0200 0003 0811" /* ÿÿÿÿ¤&#......... */
- $"1B24 4DF6 FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Möÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A126 2316 0D06 0200 0003 0911" /* ÿÿÿÿ¡&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9F26 2317 0D06 0200 0003 0912" /* ÿÿÿÿŸ&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9E26 2317 0D06 0200 0003 0912" /* ÿÿÿÿž&#.......Æ. */
- $"1C26 4BF4 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Kôÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9D27 2317 0D06 0200 0004 0912" /* ÿÿÿÿ'#.......Æ. */
- $"1C26 4AF3 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Jóÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9C27 2417 0D06 0200 0104 0912" /* ÿÿÿÿœ'$.......Æ. */
- $"1C26 47F2 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Gòÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9A27 2417 0D06 0200 0103 0911" /* ÿÿÿÿš'$.......Æ. */
- $"1B27 37D1 FFFF FFFF FFFF FFFF FFFF FFFF" /* .'7Ñÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 7329 2316 0D06 0200 0003 0810" /* ÿÿÿÿs)#......... */
- $"1A27 2F59 B7C6 C6C7 C7C7 C7C7 C7C7 C7C7" /* .'/Y·ÆÆÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C5 C689 372D 2015 0C06 0200 0003 070E" /* ÇÅƉ7- ......... */
- $"1723 3037 3C46 4C4F 5050 5050 5050 5050" /* .#07<FLOPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"4D49 4138 352A 1D13 0A05 0100 0003 060C" /* MIA85*..Â....... */
- $"141E 2934 3D44 494C 4D4E 4E4E 4E4E 4E4E" /* ..)4=DILMNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4D" /* NNNNNNNNNNNNNNNM */
- $"4B46 4039 2F24 1910 0904 0100 0002 050A" /* KF@9/$..Æ...... */
- $"1018 212B 3339 3D40 4142 4242 4242 4242" /* ..!+39=@ABBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4140" /* BBBBBBBBBBBBBBA@ */
- $"3F3B 352F 261D 140D 0703 0100 0002 0407" /* ?;5/&........... */
- $"0C12 1920 272C 2F32 3233 3333 3333 3333" /* ... ',/223333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3332" /* 3333333333333332 */
- $"302D 2924 1D16 0F09 0502 0100 0001 0305" /* 0-)$...Æ........ */
- $"080D 1217 1C1F 2223 2425 2525 2525 2525" /* ......"#$%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2524" /* %%%%%%%%%%%%%%%$ */
- $"2221 1E19 1510 0B07 0402 0000 0000 0103" /* "!.............. */
- $"0609 0C10 1315 1718 1919 1919 1919 1919" /* .Æ.............. */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1918" /* ................ */
- $"1716 1411 0E0A 0704 0201 0000 0000 0002" /* .....Â.......... */
- $"0305 0709 0B0D 0E0F 0F0F 0F0F 0F0F 0F0F" /* ...Æ............ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0D 0C0A 0806 0402 0100 0000 0000 0001" /* ...Â............ */
- $"0103 0304 0607 0708 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0707 0605 0403 0201 0000 0000 0000 0000" /* ................ */
- $"0001 0102 0202 0203 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0202 0202 0201 0100 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 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 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 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" /* ................ */
- $"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 0000 0000 0000 0000 0000 6963 3038" /* ............ic08 */
- $"0000 5CBD 0000 000C 6A50 2020 0D0A 870A" /* ..\½....jP .‡ */
- $"0000 0014 6674 7970 6A70 3220 0000 0000" /* ....ftypjp2 .... */
- $"6A70 3220 0000 004F 6A70 3268 0000 0016" /* jp2 ...Ojp2h.... */
- $"6968 6472 0000 0100 0000 0100 0004 0707" /* ihdr............ */
- $"0100 0000 000F 636F 6C72 0100 0000 0000" /* ......colr...... */
- $"1000 0000 2263 6465 6600 0400 0000 0000" /* ...."cdef....... */
- $"0100 0300 0100 0000 0100 0000 0200 0200" /* ................ */
- $"0000 0300 0000 006A 7032 63FF 4FFF 5100" /* .......jp2cÿOÿQ. */
- $"3200 0000 0001 0000 0001 0000 0000 0000" /* 2............... */
- $"0000 0000 0001 0000 0001 0000 0000 0000" /* ................ */
- $"0000 0000 0407 0101 0701 0107 0101 0701" /* ................ */
- $"01FF 5200 0C00 0000 0101 0504 0400 01FF" /* .ÿR............ÿ */
- $"5C00 1320 5058 5860 5858 6058 5860 5858" /* \.. PXX`XX`XX`XX */
- $"5850 5058 FF64 0011 0001 4B61 6B61 6475" /* XPPXÿd....Kakadu */
- $"2D76 352E 322E 31FF 9000 0A00 0000 005B" /* -v5.2.1ÿ.Â....[ */
- $"D000 01FF 93CF C100 1507 F18D 1991 E793" /* Ð..ÿ“ÏÁ...ñ.‘ç“ */
- $"D8B4 6B7C 459C 4F68 E4BF E0FF 0D3D C2DF" /* Ø´k|EœOhä¿àÿ.=Âß */
- $"FC16 8F7F 6C3A 7FEA ACD5 8632 D1AD 37A6" /* ü..l:.ê¬Õ†2Ñ­7¦ */
- $"22E3 4753 734F 3BFA 0372 1596 A8F1 7183" /* "ãGSsO;ú.r.–¨ñqƒ */
- $"2F17 0A65 C5C2 6A8E C0F9 1000 39CE 9180" /* /.ÂeÅÂjŽÀù..9Α€ */
- $"AE4A F551 B521 2839 FEE4 4D31 9F98 9F17" /* ®JõQµ!(9þäM1Ÿ˜Ÿ. */
- $"29F2 C91D 3B35 397E 15A1 8246 C3EA 3107" /* )òÉ.;59~.¡‚FÃê1. */
- $"5630 A744 5105 404A C843 0AE4 304B 4FE9" /* V0§DQ.@JÈCÂä0KOé */
- $"81E4 4C91 DF64 6885 8D23 6517 B254 DE23" /* äL‘ßdh…#e.²TÞ# */
- $"6101 3C94 9245 923D 4F4C 0F02 784C F319" /* a.<”’E’=OL..xLó. */
- $"CFC0 FC11 7EC2 D9C4 3907 5FDC 553A F1E1" /* ÏÀü.~ÂÙÄ9._ÜU:ñá */
- $"F2BC 6420 59D8 7D25 F42A 5BA5 8E8E 7166" /* ò¼d YØ}%ô*[¥ŽŽqf */
- $"AD5D 5C91 CC75 1452 ACDA 64CA 3249 CCE3" /* ­]\‘Ìu.R¬ÚdÊ2IÌã */
- $"6874 83E2 633E 64E7 8159 4AA2 FD3C 638D" /* htƒâc>dçYJ¢ý<c */
- $"F978 C3ED 328F C0F2 1F81 A80C BB81 9421" /* ùxÃí2Àò.¨.»”! */
- $"980D F457 0EA7 7782 676F 2AB3 EE8F 99C2" /* ˜.ôW.§w‚go*³î™Â */
- $"2221 9D95 8C80 C3A8 91F3 4C08 6A03 DE45" /* "!•Œ€Ã¨‘óL.j.ÞE */
- $"A985 9B7B 9ED3 A9A4 D929 A97F A125 FE22" /* ©…›{žÓ©¤Ù)©.¡%þ" */
- $"A893 77F3 EF0F C15C 3969 A153 3A7C 3110" /* ¨“wóï.Á\9i¡S:|1. */
- $"7A9C 9227 D2F6 BCA8 1A04 0219 8F36 21B7" /* zœ’'Òö¼¨....6!· */
- $"B37C 2AB6 678A 1675 BA9E 03B4 53BA 33B9" /* ³|*¶gŠ.uºž.´Sº3¹ */
- $"06AD 96D8 BDBC BFC8 5134 C040 7EBA B756" /* .­–ؽ¼¿ÈQ4À@~º·V */
- $"E619 DC67 BC83 BB39 AA42 65E1 5BBC 45B4" /* æ.Üg¼ƒ»9ªBeá[¼E´ */
- $"ECB6 E6ED D098 3C9F E17B 876D A039 553E" /* ì¶æíИ<Ÿá{‡m 9U> */
- $"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" /* ÷<H‡QU.•.ˆLiÂ'?9 */
- $"8CCA 32D8 1FD7 A3F4 CDD8 6275 5E7E 3619" /* ŒÊ2Ø.×£ôÍØbu^~6. */
- $"8D18 68C9 D2C7 0FCB 18EA FB01 5A68 4A52" /* .hÉÒÇ.Ë.êû.ZhJR */
- $"3C08 5313 5ED2 9B7D 31B5 953C 2F92 22F7" /* <.S.^Ò›}1µ•</’"÷ */
- $"3764 04E8 A9A6 C747 8DFD 9730 01DD 82E1" /* 7d.試ÇGý—0.Ý‚á */
- $"B08A FD72 7C33 A9BF AFEA 7188 AC4B 2B45" /* °Šýr|3©¿¯êqˆ¬K+E */
- $"BBB2 7826 6704 5864 9BAF 91FC 6BD3 E9D7" /* »²x&g.Xd›¯‘ükÓé× */
- $"0E30 E428 0FB2 4836 F94F 7CB9 3723 72A2" /* .0ä(.²H6ùO|¹7#r¢ */
- $"AB4C C0EB ED8F 823B B8D6 C4A6 E4B5 B41C" /* «LÀëí‚;¸ÖĦ䵴. */
- $"B0FC 0171 880F E77C 1EF8 9645 A8B4 969A" /* °ü.qˆ.ç|.ø–E¨´–š */
- $"5420 86B9 71CE 0DE5 7A40 B41A DD85 6B30" /* T †¹qÎ.åz@´.Ý…k0 */
- $"F02A 3B61 92B4 7A95 269E BF9F DDB3 9FB7" /* ð*;a’´z•&ž¿ŸÝ³Ÿ· */
- $"746B 1514 C89D 391B F835 73B8 0F1C 2567" /* tk..È9.ø5s¸..%g */
- $"A0C2 6B37 DFCE 5F4C 1DCD FD79 5CDA A8FF" /*  Âk7ßÎ_L.Íýy\Ú¨ÿ */
- $"0603 9014 308F AEB3 EDB7 D721 1709 3897" /* ...0®³í·×!.Æ8— */
- $"D3AB 181E 53BE 4025 3492 41C2 5EC7 BFC0" /* Ó«..S¾@%4’AÂ^Ç¿À */
- $"EA12 19D0 6158 530B A57B 8A2B 8DFF 18AF" /* ê..ÐaXS.¥{Š+ÿ.¯ */
- $"7651 65CF CD26 3F05 987E 0760 9C3C E3A6" /* vQeÏÍ&?.˜~.`œ<㦠*/
- $"86C0 DAB4 C6ED 7F19 8034 85FE DA7E 7963" /* †ÀÚ´Æí..€4…þÚ~yc */
- $"AFF2 9CBE 6AAA B6BB B2D3 6F41 BB45 B1EB" /* ¯òœ¾jª¶»²ÓoA»E±ë */
- $"9CC2 8803 907A 5CE1 F2D9 AF69 FF22 7DE8" /* œÂˆ.z\áòÙ¯iÿ"}è */
- $"D328 C2A1 0F97 2EE2 9575 E0E6 A665 B85A" /* Ó(¡.—.â•uàæ¦e¸Z */
- $"C5D7 6FA0 FE24 BC68 9D74 6CEB C4F9 615C" /* Å×o þ$¼htlëÄùa\ */
- $"4F34 48B3 7A64 2540 B64F EFBE 8D0F E427" /* O4H³zd%@¶Oï¾.ä' */
- $"4CCA 6DB3 83AC C5F6 EE52 7A43 8172 41E4" /* LÊm³ƒ¬ÅöîRzCrAä */
- $"2CE3 DF2F 1496 97DE 6AD1 2FFF 7E52 D993" /* ,ãß/.–—ÞjÑ/ÿ~RÙ“ */
- $"8AF9 AAA3 B192 0991 BFAE 4829 001E 963B" /* Šùª£±’Æ‘¿®H)..–; */
- $"019C 8A5D 78E8 6A56 F78C B81A F4D0 6312" /* .œŠ]xèjV÷Œ¸.ôÐc. */
- $"C0C4 A9BF 7CA5 75D9 9C23 F3EA 4F39 B325" /* ÀÄ©¿|¥uÙœ#óêO9³% */
- $"F6DE 6EF4 7D48 A279 8EA9 5395 0FBC C63F" /* öÞnô}H¢yŽ©S•.¼Æ? */
- $"679F CE93 2206 ECA9 079C 2BB7 D094 6A7B" /* gŸÎ“".ì©.œ+·Ð”j{ */
- $"1077 277F 88A6 21AE 84C3 EDD4 38FC 36B2" /* .w'.ˆ¦!®„ÃíÔ8ü6² */
- $"1F86 8F00 8F56 8825 7713 9061 800A A4CD" /* .†.Vˆ%w.a€Â¤Í */
- $"E3D3 0F3C B0AC 0C87 E368 8544 F251 5C39" /* ãÓ.<°¬.‡ãh…DòQ\9 */
- $"7D90 1BEF 7805 D624 7380 0A19 E093 3058" /* }.ïx.Ö$s€Â.à“0X */
- $"1C90 467F 5C70 4932 3947 4A95 A450 36C8" /* .F.\pI29GJ•¤P6È */
- $"D4D5 CA85 9922 FA12 D0D8 96CA 9A2F 40A2" /* ÔÕÊ…™"ú.ÐØ–Êš/@¢ */
- $"F105 054F 8C56 C164 85B5 C4E6 3EAB D76A" /* ñ..OŒVÁd…µÄæ>«×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.<cÛnI$ */
- $"7362 34C9 2F1D 105B 97E2 03BF 648F C21C" /* sb4É/..[—â.¿dÂ. */
- $"C6AC 3657 2C72 ADAA 2889 0623 6A5D ACEC" /* Ƭ6W,r­ª(‰.#j]¬ì */
- $"3210 738F 51F5 CC65 9EA9 7AD3 95CB B265" /* 2.sQõÌež©zӕ˲e */
- $"D54E 6E1D E2A7 2673 E6C2 C247 2FFD C10E" /* ÕNn.â§&sæÂÂG/ýÁ. */
- $"5FC5 C1E1 2511 5C8F 6063 92AB E4B9 8212" /* _ÅÁá%.\`c’«ä¹‚. */
- $"3643 6D53 2492 3E58 3E71 15E3 A3B7 AB2A" /* 6CmS$’>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.íʃ</.¢:\i */
- $"6F17 C143 83FF 31A8 709D 7BFA B0E4 A884" /* o.ÁCƒÿ1¨p{ú°ä¨„ */
- $"E3DC 88CC DF54 C132 6671 A0D0 B4C3 7721" /* ã܈ÌßTÁ2fq Ð´Ãw! */
- $"B5F0 84FF 0FDA 1588 5865 1B6B 94E3 9B46" /* µð„ÿ.Ú.ˆXe.k”ã›F */
- $"5CA1 7767 09F4 3448 2242 114C 2705 2C38" /* \¡wgÆô4H"B.L'.,8 */
- $"4565 F286 ABC2 AFF5 809D 0C5B BB5E 009C" /* Eeò†«Â¯õ€.[»^.œ */
- $"FCBA BC4C 84FF 45EF F42B 3F8E DEE0 A531" /* üº¼L„ÿEïô+?ŽÞà¥1 */
- $"DBBB 2113 7C30 8BB7 76FF 7E55 E6BC 012B" /* Û»!.|0‹·vÿ~Uæ¼.+ */
- $"EBDE EF62 0981 DCE1 AC6E 5AD7 D8AD 0560" /* ëÞïbÆÜá¬nZ×Ø­.` */
- $"5B36 3A62 5B57 3E03 75AC 25FB B396 1086" /* [6:b[W>.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" /* ß"Â.<CáØ]dÊ™æÇï0 */
- $"68AF F4C9 97D5 F961 48CF 954C 2832 33A3" /* h¯ôÉ—ÕùaHÏ•L(23£ */
- $"0088 1417 0D84 DDE1 23FA C81D 487D C9AB" /* .ˆ...„Ýá#úÈ.H}É« */
- $"F239 ABB4 24E0 6694 291C 885C 23CE F212" /* ò9«´$àf”).ˆ\#Îò. */
- $"29F4 5656 7DD1 182A 2C11 AAEF 7534 24EE" /* )ôVV}Ñ.*,.ªïu4$î */
- $"9886 347F 28AD 6952 0A82 E9A4 6AA9 9390" /* ˜†4.(­iR‚é¤j©“ */
- $"06A8 EF47 527A EDF2 894B 5234 A900 82B1" /* .¨ïGRzíò‰KR4©.‚± */
- $"724D 791B 676C BC97 B3A5 94F7 137E FE8D" /* rMy.gl¼—³¥”÷.~þ */
- $"50F5 C1EE 0C5B 1F3D CEF4 DD64 709C 095B" /* PõÁî.[.=ÎôÝdpœÆ[ */
- $"A51A B239 3EC3 C9BA 39EC DBE2 FB9A 3C6F" /* ¥.²9>Ãɺ9ìÛâûš<o */
- $"BBC4 DE3E C5AF 0043 DC2D AE64 C0A7 2039" /* »ÄÞ>ů.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.û˜ò¾Î.Èê<NQáÝ */
- $"5253 CE7A 2D16 8527 AF8E 9A17 757A A42F" /* RSÎz-.…'¯Žš.uz¤/ */
- $"6CA9 6BB3 7787 D84F 8E20 EA1F FB2D 15E3" /* l©k³w‡ØOŽ ê.û-.ã */
- $"0D2C 45A8 8C80 7DA1 89DB 5F46 F3FB 2871" /* .,E¨Œ€}¡‰Û_Fóû(q */
- $"539E 8CCA 5C03 EF20 B6B5 4956 EB82 172C" /* SžŒÊ\.ï ¶µIVë‚., */
- $"AB28 0D6D 4DF9 1F61 6F8D 61FE E962 778D" /* «(.mMù.aoaþébw */
- $"0C8E EC55 3BDC EC81 C9D1 E7D5 A811 C69A" /* .ŽìU;ÜìÉÑçÕ¨.Æš */
- $"6186 BC2C 75B4 DD3D C207 1151 4C3B 4175" /* a†¼,u´Ý=Â..QL;Au */
- $"942E 2ACF D3C7 7122 9D89 31B3 0918 EDC0" /* ”.*ÏÓÇq"‰1³Æ.íÀ */
- $"9D45 75D8 DE61 5036 6D9F 3373 4827 7ADE" /* EuØÞaP6mŸ3sH'zÞ */
- $"1BD1 16E8 8905 37D4 D811 1077 B359 0FF6" /* .Ñ.è‰.7ÔØ..w³Y.ö */
- $"0460 F360 20A5 B532 3418 142A B432 C2E9" /* .`ó` ¥µ24..*´2Âé */
- $"A0D6 DB04 317D 28F3 C893 AAE3 19B1 5742" /*  ÖÛ.1}(óÈ“ªã.±WB */
- $"7BF6 615C 0EAC F35E 0CD4 B142 A289 5458" /* {öa\.¬ó^.Ô±B¢‰TX */
- $"D699 1584 46FF 7174 758F B1F8 F540 F427" /* Ö™.„Fÿqtu±øõ@ô' */
- $"A496 8795 E66B 3DDC FB80 D0B8 9411 7240" /* ¤–‡•æk=Üû€Ð¸”.r@ */
- $"0374 54DC B2CA C982 BD5E FD06 4B02 5E8D" /* .tTܲÊÉ‚½^ý.K.^ */
- $"A958 79AA 5BE6 B5A2 76C3 7C23 0D45 6768" /* ©Xyª[æµ¢vÃ|#.Egh */
- $"D726 8259 FD2E E5CE 9B70 0600 22E7 82A3" /* ×&‚Yý.åΛp.."ç‚£ */
- $"8E14 9626 C4EC EED9 E7D8 13C9 623F 3DEB" /* Ž.–&ÄìîÙçØ.Éb?=ë */
- $"357B E617 A43A C9D4 328A C30A FF45 71BA" /* 5{æ.¤:ÉÔ2ŠÃÂÿEqº */
- $"1F8B 3945 8E06 0CF0 4749 0840 6F5A EDDB" /* .‹9EŽ..ðGI.@oZíÛ */
- $"29AC E877 27BD 6C8C A131 8A1C 9228 0FC5" /* )¬èw'½lŒ¡1Š.’(.Å */
- $"A029 D1A1 324D EFCE EB3F 2B92 150D FB8C" /*  )Ñ¡2MïÎë?+’..ûŒ */
- $"5399 1ABD D375 08BF 8F3F E788 684D 3064" /* S™.½Óu.¿?çˆhM0d */
- $"70B4 A733 4AB6 239A DC03 724F C8B8 F1BB" /* p´§3J¶#šÜ.rOȸñ» */
- $"8F1F A795 FF18 8256 0050 FF74 EDF1 3D05" /* .§•ÿ.‚V.Pÿtíñ=. */
- $"6CB0 E566 9272 E493 C085 3D06 3116 4ECE" /* l°åf’rä“À…=.1.NÎ */
- $"402D 329F 4BBB 2598 A7CF BEE1 333D 9019" /* @-2ŸK»%˜§Ï¾á3=. */
- $"61BB 1A29 2616 E907 2CD6 F64C 456F 9881" /* a».)&.é.,ÖöLEo˜ */
- $"725B 5C38 A40D 60D3 6B4F FDF1 87D7 4786" /* r[\8¤.`ÓkOýñ‡×G† */
- $"29BF CAEB 223A 044D 0F61 FDE6 0A3E 7727" /* )¿Êë":.M.aýæÂ>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.#ÝêŽ.,]Û<W */
- $"BAEC 18E5 1ECE 91D7 A40E 08ED 23EA 55B6" /* ºì.å.Αפ..í#êU¶ */
- $"AA2C F48A 7B0E 8CAE 90DD 5840 41FF 7F4C" /* ª,ôŠ{.Œ®ÝX@Aÿ.L */
- $"47AD E774 87C4 9AB1 9CAD E633 DECD 3E36" /* G­çt‡Äš±œ­æ3ÞÍ>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û<M/e€.:3h=T */
- $"55DF 6B52 1A54 9010 C4D2 12C8 D497 9CDB" /* UßkR.T.ÄÒ.ÈÔ—œÛ */
- $"173A 0609 66F1 C6C0 FD02 47A0 B2E2 D2E6" /* .:.ÆfñÆÀý.G ²âÒæ */
- $"096E F870 0776 4898 2F2B 84CF BA83 D656" /* Ænøp.vH˜/+„ϺƒÖV */
- $"7F77 79FF 0F1D 2A6E 03C6 4D0F E3EF D23B" /* .wyÿ..*n.ÆM.ãïÒ; */
- $"6F82 5F72 6701 98DF 5A63 DA7B 0ABC 75E2" /* o‚_rg.˜ßZcÚ{¼uâ */
- $"382D 0D93 3C8C 5308 19EA EF8D 7922 CD36" /* 8-.“<ŒS..êïy"Í6 */
- $"ED21 EB4D 3D77 5A8A 1380 E238 22E5 84AA" /* í!ëM=wZŠ.€â8"優 */
- $"4488 7DCE 91A0 CB4B 67FA 74AF EA3D 1C8E" /* Dˆ}Α ËKgút¯ê=.Ž */
- $"9279 611D FD02 D08F D952 B05D 2C11 B545" /* ’ya.ý.ÐÙR°],.µE */
- $"5F17 FF5C 1E9C 6A77 DA2F A474 B20C F5A2" /* _.ÿ\.œjwÚ/¤t².õ¢ */
- $"B2D4 176F 97E4 CE9E B576 C3E0 0F3D ECB9" /* ²Ô.o—äΞµvÃà.=ì¹ */
- $"7B35 DEBB 5ABA 9738 36F8 524D 74D8 08FF" /* {5Þ»Zº—86øRMtØ.ÿ */
- $"29A7 9B08 5B43 7C17 FB53 234E 4806 B0C3" /* )§›.[C|.ûS#NH.°Ã */
- $"AF3A FF38 CCAF FEAA C60F D103 32AC 7D7F" /* ¯:ÿ8̯þªÆ.Ñ.2¬}. */
- $"D2B8 51C1 7B7D 56FD 7CFB D2B5 C55B 7C7D" /* Ò¸QÁ{}Vý|ûÒµÅ[|} */
- $"7D30 10C2 4181 3358 5DD6 4625 4FFC EA30" /* }0.ÂA3X]ÖF%Oüê0 */
- $"3402 194F 6D0B 53D8 3C64 54AE E8DA 7874" /* 4..Om.SØ<dT®èÚxt */
- $"7FF1 DE25 3147 0AF0 D5B6 7BF7 88DD 5199" /* .ñÞ%1GÂðÕ¶{÷ˆÝQ™ */
- $"611E 526D B6DB 6DB6 DB69 9C6E 7A40 821D" /* a.Rm¶Ûm¶Ûiœnz@‚. */
- $"4416 6952 04BB 9C0A F19B 2C62 E698 A4F5" /* D.iR.»œÂñ›,b昤õ */
- $"9B83 3C59 8217 0000 0034 8080 DB92 4924" /* ›ƒ<Y‚....4€€Û’I$ */
- $"9249 247D 32D0 9B20 73FF 7E44 A49A 44BB" /* ’I$}2Л sÿ~D¤šD» */
- $"EB45 3E31 A4A0 C0CC BBC0 B29E 7771 4FDE" /* ëE>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ç<v—¯.q£-ÜZ */
- $"28A9 FE90 6CC0 9484 30D1 FCCD 4991 0758" /* (©þlÀ”„0ÑüÍI‘.X */
- $"BE36 B1DE 3A2E B6F8 2756 C568 2A7F D038" /* ¾6±Þ:.¶ø'VÅh*.Ð8 */
- $"2397 6E8F 32E0 C1AC 3736 32A3 C18E 13C4" /* #—n2àÁ¬762£ÁŽ.Ä */
- $"D298 8703 F9AF E24B A630 0627 6E63 ED70" /* Ò˜‡.ù¯âK¦0.'ncíp */
- $"0662 A833 6515 7225 C79D 8C1F 7410 45BF" /* .b¨3e.r%ÇŒ.t.E¿ */
- $"5019 F088 7C6C 43FC AE88 B794 5847 505F" /* P.ðˆ|lCü®ˆ·”XGP_ */
- $"2B73 6E58 E20E 18A2 01B4 DF7F F5BD D4BC" /* +snXâ..¢.´ß.õ½Ô¼ */
- $"B259 706B 754E 9740 BBF2 54FC FCB8 B293" /* ²YpkuN—@»òTüü¸²“ */
- $"4CEA 3670 D04B 8C42 B7C2 314D 1F53 956B" /* Lê6pÐKŒB·Â1M.S•k */
- $"CB14 9D05 8288 E7F0 D4FF 70AE EFB7 A10B" /* Ë..‚ˆçðÔÿp®ï·¡. */
- $"EDDE 3CFE 1B9D 7DBA 7B7D BD13 DF6F 45B8" /* íÞ<þ.}º{}½.ßoE¸ */
- $"FE1A 077D B444 FAB6 46FB 75FC E8AB DECC" /* þ..}´Dú¶Fûuüè«ÞÌ */
- $"AF0D 6C8A C695 8734 8A7A 5A21 F65D 05F6" /* ¯.lŠÆ•‡4ŠzZ!ö].ö */
- $"A417 27AC 998E 3646 07A8 0055 19DC B524" /* ¤.'¬™Ž6F.¨.U.ܵ$ */
- $"D2F2 842C DF9F BECA C26B C9C9 D0FD CA3B" /* Òò„,ߟ¾ÊÂkÉÉÐýÊ; */
- $"DB1B 3F81 F6A7 4465 001E 5552 4D0D 3BF3" /* Û.?ö§De..URM.;ó */
- $"0140 A2E9 7D63 8456 F9C7 665D F7FC 2DBF" /* .@¢é}c„VùÇf]÷ü-¿ */
- $"1B41 0667 7939 1B16 4997 5584 3CFE 81B9" /* .A.gy9..I—U„<þ¹ */
- $"C4A8 B346 EC6D E726 2560 5CB8 8B84 7699" /* Ĩ³Fìmç&%`\¸‹„v™ */
- $"3999 2CA0 91D9 A05A C96C 660C 267B 74A0" /* 9™, ‘Ù ZÉlf.&{t  */
- $"B935 73EB D464 D860 2694 7584 A4D4 DC52" /* ¹5sëÔdØ`&”u„¤ÔÜR */
- $"D136 D49A 1BEA 53F5 AE2F C19E 44E9 BA0A" /* Ñ6Ôš.êSõ®/ÁžDéºÂ */
- $"5D83 6587 7792 3DCB 449A B33E 4632 A395" /* ]ƒe‡w’=ËDš³>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!‹{{‡.ê%¡<UÌ */
- $"0644 1B14 3456 2E32 C013 815C 66C7 0526" /* .D..4V.2À.\fÇ.& */
- $"E24D CE15 B8FB 5D8B 0506 E30A 1D6A E2ED" /* âMÎ.¸û]‹..ãÂ.jâí */
- $"6145 D124 0EC9 1FAB 4E50 06C2 9DA5 8F6C" /* aEÑ$.É.«NP.Â¥l */
- $"C072 D11E BFEE DFE6 F6C7 12F4 E89C 35B7" /* ÀrÑ.¿îßæöÇ.ôèœ5· */
- $"097E 2E25 393F CEA3 03C6 D3C7 DED5 3882" /* Æ~.%9?Σ.ÆÓÇÞÕ8‚ */
- $"ED26 A3FD 9130 95B5 F3FA D31A 691F 8E09" /* í&£ý‘0•µóúÓ.i.ŽÆ */
- $"BFA8 7D7B 85BD B179 5C20 2855 1268 F9AF" /* ¿¨}{…½±y\ (U.hù¯ */
- $"553D 939E 6FC6 C67E 4611 F88C BBD4 773C" /* U=“žoÆÆ~F.øŒ»Ôw< */
- $"5F16 D598 D5C5 E649 B66E FD8D A2D7 9807" /* _.Õ˜ÕÅæI¶ný¢×˜. */
- $"EDA2 4621 2CF5 DDE3 C078 6455 1C29 3A07" /* í¢F!,õÝãÀxdU.):. */
- $"E992 C5DE 8D33 041B 83C6 56F6 7C95 168E" /* é’ÅÞ3..ƒÆVö|•.Ž */
- $"6127 40D2 DE11 CFF2 3379 DC22 20E3 5E1B" /* a'@ÒÞ.Ïò3yÜ" ã^. */
- $"DE83 DBB5 5B8A 8572 3DF2 2890 DC56 BE6E" /* ÞƒÛµ[Š…r=ò(ÜV¾n */
- $"D15F 9396 ECD4 725F 2E18 7616 394A 64C3" /* Ñ_“–ìÔr_..v.9Jdà */
- $"FDAA E6F2 3D6D 46BC B270 5B8F ACB4 9CAE" /* ýªæò=mF¼²p[¬´œ® */
- $"0D0D 3F29 6A02 1E92 347A E406 A52D 111A" /* ..?)j..’4zä.¥-.. */
- $"2E79 0340 1D82 C861 0C40 1963 3397 A4FD" /* .y.@.‚Èa.@.c3—¤ý */
- $"A998 0B63 E30A 7AA3 A5BC 8A8E 9CD0 4795" /* ©˜.cãÂz£¥¼ŠŽœÐG• */
- $"7538 7FB2 EC9A 952C CE29 C80F 369C 4E8D" /* u8.²ìš•,Î)È.6œN */
- $"8000 1C55 D5F3 E2AD 812E 4FAA AC2C D9BB" /* €..UÕóâ­.Oª¬,Ù» */
- $"F4CD 5568 5643 826F 3A38 91BD 6F70 92D3" /* ôÍUhVC‚o:8‘½op’Ó */
- $"23EC DB91 0FC4 C3BB 7542 023B 85F0 36C3" /* #ìÛ‘.ÄûuB.;…ð6à */
- $"8BF6 F6F8 4E77 EEE5 851F 219A CF99 7D9E" /* ‹ööøNwîå….!šÏ™}ž */
- $"856D A687 BC63 8E39 0407 B007 D184 10BD" /* …m¦‡¼cŽ9..°.Ñ„.½ */
- $"D9EF ACB1 B75A 46FA F95E 42DF 377B E2F7" /* Ùבּ·ZFúù^Bß7{â÷ */
- $"BEF2 357A 861C F486 B3F7 57E1 D39B 095B" /* ¾ò5z†.ô†³÷WáÓ›Æ[ */
- $"40C0 925C 0CA1 7885 CFEA 48B7 33E9 E8DE" /* @À’\.¡x…ÏêH·3éèÞ */
- $"D178 1E15 91D1 F6C5 BC87 CB7E CCC6 DEDE" /* Ñx..‘Ñöż‡Ë~ÌÆÞÞ */
- $"B017 A4C1 0B0F DD17 660E CB97 C098 C773" /* °.¤Á..Ý.f.Ë—À˜Çs */
- $"8A0A F4DB 59BD A218 055E 5348 05D8 B304" /* ŠÂôÛY½¢..^SH.س. */
- $"9F23 E1B1 0754 6DA2 FF33 34CB 2B12 7114" /* Ÿ#á±.Tm¢ÿ34Ë+.q. */
- $"62D2 4CA8 8091 CD34 8467 2752 B77A AA5B" /* bÒL¨€‘Í4„g'R·zª[ */
- $"15FC 2E56 7A29 9351 B6A4 AEE5 B56D 354D" /* .ü.Vz)“Q¶¤®åµm5M */
- $"3ED2 FA71 25E9 F887 B187 BADB B11B 2E01" /* >Òú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" /* žÇŠ.—ô<inV..6ÁG */
- $"E7D3 6FE5 A0C6 D7DC BCB0 76AC C4F8 DD65" /* çÓoå Æ×ܼ°v¬ÄøÝe */
- $"A5F9 02BF 2BFD 9A2C 354D 24C2 E088 6B63" /* ¥ù.¿+ýš,5M$Âàˆkc */
- $"E514 C014 E8F4 F5C2 B529 74FB EC02 032B" /* å.À.èôõµ)tûì..+ */
- $"A54B 696E B602 7D58 4542 824D BD8C 40FA" /* ¥Kin¶.}XEB‚M½Œ@ú */
- $"F675 5CD4 71C9 058E 7062 0E1B 10CC 72A9" /* öu\ÔqÉ.Žpb...Ìr© */
- $"95B8 C5FD 7EAF 995C 62ED DDE4 6579 3181" /* •¸Åý~¯™\bíÝäey1 */
- $"8BA1 A02B 1559 F5BC E9C9 914D 8CEB D7D8" /* ‹¡ +.Yõ¼éÉ‘MŒë×Ø */
- $"7D81 20C0 A609 18D2 B679 7C08 FB00 E4C6" /* } À¦Æ.Ò¶y|.û.äÆ */
- $"2797 518E 32CE 67CE 3C8E 6796 A832 F712" /* '—QŽ2ÎgÎ<Žg–¨2÷. */
- $"0037 059C 96CD 85A0 98E6 5D20 05F2 EC61" /* .7.œ–Í… ˜æ] .òìa */
- $"335D AFFF 14BC 3EF9 0779 7A53 BAA4 F47A" /* 3]¯ÿ.¼>ù.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Ä<k]ðUz; */
- $"77CB BFA9 2B73 06AF 9C8B AF37 F600 E568" /* wË¿©+s.¯œ‹¯7ö.åh */
- $"EE70 09D2 B0A7 C201 94D9 AC58 E9A2 9D53" /* îpÆÒ°§Â.”Ù¬Xé¢S */
- $"94C0 D1C9 E379 E453 E4C7 27C5 C3F8 1161" /* ”ÀÑÉãyäSäÇ'ÅÃø.a */
- $"D631 3F3C 0CFE 13A3 F6EB 3048 F049 CF11" /* Ö1?<.þ.£öë0HðIÏ. */
- $"5962 65AE 5D8E F911 A2E2 7787 6C78 F63C" /* Ybe®]Žù.¢âw‡lxö< */
- $"E24C ED5B F634 B2B9 9DDF 51B0 94B9 1ABF" /* âLí[ö4²¹ßQ°”¹.¿ */
- $"BE93 4236 35A6 613E 3D1B C8FD 0587 27C7" /* ¾“B65¦a>=.Èý.‡'Ç */
- $"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" /* ä_¥.<hÊs:W£^F-’. */
- $"9D19 A4FE F266 C323 64FF 7B71 19F7 0BC3" /* .¤þòfÃ#dÿ{q.÷.Ã */
- $"062C 20C4 9745 F075 6FFF 31F0 A3AD 4C84" /* ., Ä—Eðuoÿ1ð£­L„ */
- $"00F3 104C 0064 3899 0DB9 8128 CB5F FF46" /* .ó.L.d8™.¹(Ë_ÿF */
- $"7184 41CB 7E58 4C0B ADD5 CBB2 1A61 E3D6" /* q„AË~XL.­Õ˲.aãÖ */
- $"B45F 489E 7FE9 D915 2B77 0776 98BD B3A6" /* ´_Hž.éÙ.+w.v˜½³¦ */
- $"230E B817 1D5A D937 3251 2449 6B0A 5A13" /* #.¸..ZÙ72Q$IkÂZ. */
- $"C4E0 BB45 CB72 9758 9E56 158D B1E6 9590" /* Äà»EËr—XžV.±æ• */
- $"4FC4 0611 EDBC 426F 6D2B D932 D595 A74E" /* OÄ..í¼Bom+Ù2Õ•§N */
- $"8728 58CD BD02 9746 DBA2 7EAB 0F07 363C" /* ‡(Xͽ.—FÛ¢~«..6< */
- $"BAB3 1228 E02A BDB4 373F F3FB FF7D 8D0D" /* º³.(à*½´7?óûÿ}. */
- $"2193 09F4 7603 A017 98B1 421E 7A47 D126" /* !“Æôv. .˜±B.zGÑ& */
- $"82FD 5449 B97F F864 5CD5 19F6 A8A4 F216" /* ‚ýTI¹.ød\Õ.ö¨¤ò. */
- $"A4B3 FF7F E820 4C58 DE4B 944B 6FD4 F4DA" /* ¤³ÿ.è LXÞK”KoÔôÚ */
- $"596E A688 456C 3F0D 7844 1596 2BED 0D5D" /* Yn¦ˆEl?.xD.–+í.] */
- $"FAFB 8D2E D7D0 ABCB B2BE 8D80 E74D 9EDC" /* úû.×Ы˲¾€çMžÜ */
- $"7FFF 7FC9 2FB9 3BDA F47A B9C2 E1B8 5CC8" /* .ÿ.É/¹;Úôz¹Âá¸\È */
- $"14AB D534 7208 32FE 73D2 EF23 862E 10F8" /* .«Õ4r.2þsÒï#†..ø */
- $"C16F 1FFF 6FBB FA97 5167 CDAD 4886 8FC2" /* Áo.ÿo»ú—QgÍ­H†Â */
- $"BFFF 7FFE 2B73 126E 1EC8 C82A 3F6D 6CC3" /* ¿ÿ.þ+s.n.ÈÈ*?mlà */
- $"D98A D501 1DC2 82FD FF57 9731 B866 2A7D" /* ÙŠÕ..‚ýÿW—1¸f*} */
- $"C983 5F41 893F 2D09 F81C E373 42C2 5963" /* Ƀ_A‰?-Æø.ãsBÂYc */
- $"7E9F C269 2B8B C21A 8247 D433 0DF7 491E" /* ~ŸÂi+‹Â.‚GÔ3.÷I. */
- $"D1BF 3D9E F4BD 1B50 8034 4EE9 4A69 B155" /* Ñ¿=žô½.P€4NéJi±U */
- $"849A B0F7 8CEA 3FD0 E4A0 C339 2431 ED8B" /* „š°÷Œê?Ðä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FD9F 7F36 9703 7BCA 1455 6A98 F02E" /* #fýŸ.6—.{Ê.Uj˜ð. */
- $"1EDC 4707 C9A6 B325 A6E4 637D 612B B3DD" /* .ÜG.ɦ³%¦äc}a+³Ý */
- $"1E5A 3660 EEB0 BEFA 2C50 307B 5887 6D39" /* .Z6`î°¾ú,P0{X‡m9 */
- $"0EC7 2D81 C32E 6B72 8546 30E4 133F 3D3B" /* .Ç-Ã.kr…F0ä.?=; */
- $"0A76 21AA 4387 8F29 03C8 1C32 755C F553" /* Âv!ªC‡).È.2u\õS */
- $"5CA1 C16A 02EC 4654 97C8 6F10 BA2A 16E0" /* \¡Áj.ìFT—Èo.º*.à */
- $"DB18 605E 8A18 8A6E 4F35 1EF7 8C57 F8B2" /* Û.`^Š.ŠnO5.÷ŒWø² */
- $"0020 4D0A 1739 2287 ADE2 B0C2 D816 17D2" /* . MÂ.9"‡­â°ÂØ..Ò */
- $"21F8 3104 FEA8 38E3 8644 6F0B D2C6 A599" /* !ø1.þ¨8ã†Do.ÒÆ¥™ */
- $"B793 1367 B548 23BD 8836 1143 D5DB 2720" /* ·“.gµH#½ˆ6.CÕÛ' */
- $"73BB 1485 DEAF C96F 24E8 AA26 56B9 89D3" /* s».…Þ¯Éo$èª&V¹‰Ó */
- $"8F8D 2F3E 5EA5 466C BE3C 6879 6C0A 5891" /* />^¥Fl¾<hylÂX‘ */
- $"974E 6F22 0E47 66D4 BD1F 6A7D 1885 42CC" /* —No".GfÔ½.j}.…BÌ */
- $"7E13 126E AC98 74B7 B093 BDFF 37DB E527" /* ~..n¬˜t·°“½ÿ7Ûå' */
- $"E6D0 CF2A D7E6 E7EB 1095 05AF 6407 BB9B" /* æÐÏ*×æçë.•.¯d.»› */
- $"0227 D5EB 260A C844 340F B249 E84F 58A7" /* .'Õë&ÂÈD4.²IèOX§ */
- $"FA14 9D34 7614 73A6 BE73 ED76 B2CD 4515" /* ú.4v.s¦¾sív²ÍE. */
- $"F26C 3AD7 7C32 5480 5A3A C4DF 123A EA95" /* òl:×|2T€Z:Äß.:ê• */
- $"D2B4 A3D8 F88D E685 6505 A999 DD9E C8D1" /* Ò´£Øøæ…e.©™ÝžÈÑ */
- $"A073 3702 5A8F 3598 F7DC A36F 0058 065E" /*  s7.Z5˜÷Ü£o.X.^ */
- $"65E6 B5AC 2A85 0F1C 43BF 8A10 43A0 BB10" /* e浬*…..C¿Š.C ». */
- $"4C3A 8F4F 95AD 253D EEE9 FBE8 4023 4647" /* L:O•­%=îéûè@#FG */
- $"7A75 8F1C 9245 3C51 3FF5 BD2B DFD3 57EF" /* zu.’E<Q?õ½+ßÓWï */
- $"1FB4 900F 4546 6EFA A7AE 45EB EAE9 7B9D" /* .´.EFnú§®Eëêé{ */
- $"6408 1DCB F7AC BE44 7D08 1482 2257 A9CF" /* d..Ë÷¬¾D}..‚"W©Ï */
- $"8B78 3610 9816 9518 A64C 215A 4569 6C5F" /* ‹x6.˜.•.¦L!ZEil_ */
- $"57E0 4F89 F77C 88D6 ADFC 8E42 9299 A2C9" /* WàO‰÷|ˆÖ­üŽB’™¢É */
- $"0F7C EA0A 7E98 B7AF 70ED 09A8 0759 B1A7" /* .|êÂ~˜·¯píƨ.Y±§ */
- $"C18E 2CC9 883F A788 A2F1 57B9 7A0E F384" /* ÁŽ,Ɉ?§ˆ¢ñW¹z.ó„ */
- $"F0CE 46F0 E10A ED6F CE17 2BE1 25D5 3A36" /* ðÎFðáÂíoÎ.+á%Õ:6 */
- $"5C6A F3AA F2D1 7225 6C5C 514F 8F1F 64A5" /* \jóªòÑr%l\QO.d¥ */
- $"B08E D05D 3E2E B3E4 DE48 12A9 7DC6 6E03" /* °ŽÐ]>.³äÞ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%ä.%<kì.¿ï */
- $"3E5E 0ACF 766D 9D4E 8978 2AC5 F138 755A" /* >^ÂÏ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ÇÛ.<g */
- $"7F80 43C8 7B29 FA49 8C64 3FEB 6406 35FE" /* .€CÈ{)úIŒd?ëd.5þ */
- $"FAEB 4922 9410 5352 D4C0 00CB 72EA 56CE" /* úëI"”.SRÔÀ.ËrêVÎ */
- $"22F8 673A D3E8 AAFA E992 5B7F 827C A83D" /* "øg:Óèªúé’[.‚|¨= */
- $"586F 54B4 69F8 C6B7 FF14 CFD4 4069 C50F" /* XoT´iøÆ·ÿ.ÏÔ@iÅ. */
- $"9E23 797E DE78 5B86 FCAE BDE5 B920 9551" /* ž#y~Þx[†ü®½å¹ •Q */
- $"22EC 4155 0582 10F4 BF8C 144A 3251 97F3" /* "ìAU.‚.ô¿Œ.J2Q—ó */
- $"2E7D 1E04 969B 4C15 8BDB FAC1 9743 2B6C" /* .}..–›L.‹ÛúÁ—C+l */
- $"6EF5 C95E 47CB A380 A635 C17D AD97 42EA" /* nõÉ^GË£€¦5Á}­—Bê */
- $"88A1 A63E FC76 A19C AE08 C868 115F 098D" /* ˆ¡¦>ü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" /* <YÞxDÐäE¼ :à.Ùt@ */
- $"F09F 10EA E0BA 4596 84F5 81A2 550E 57A7" /* ðŸ.êàºE–„õ¢U.W§ */
- $"F2A8 B2DD D612 A18F D74A 671D B70C 994A" /* ò¨²ÝÖ.¡×Jg.·.™J */
- $"9441 8E10 12B8 80F0 6249 2075 CD39 3667" /* ”AŽ..¸€ðbI uÍ96g */
- $"6632 AFDD 5E48 6B22 15CC 179A C6FA 47AE" /* f2¯Ý^Hk".Ì.šÆúG® */
- $"66AF 7AFB 033D 03F1 B829 B852 F1BF 55DB" /* f¯zû.=.ñ¸)¸Rñ¿UÛ */
- $"17F6 E1EF A955 F266 ACFE 75F4 34FC 38B0" /* .öáï©Uòf¬þuô4ü8° */
- $"0068 7DD6 016E 98D4 57DB 6220 D269 4BE9" /* .h}Ö.n˜ÔWÛb ÒiKé */
- $"8007 22E8 9D82 8FCE EB41 317B D0FA 323B" /* €."è‚ÎëA1{Ðú2; */
- $"B2C0 06D3 99E3 ED9A 2423 78CD AE34 CF5B" /* ²À.Ó™ãíš$#xÍ®4Ï[ */
- $"58DA 8F69 9604 4804 8682 B58C C1DA 1E21" /* XÚi–.H.†‚µŒÁÚ.! */
- $"0E4E F709 83E1 B335 F208 6565 C882 70A0" /* .N÷ƃá³5ò.eeÈ‚p  */
- $"2F58 5379 3999 7F2E E63D 81E4 C2EB 58E3" /* /XSy9™..æ=äÂëXã */
- $"4605 35E7 76D7 C7D0 AEDA 26C5 8BB6 0F99" /* F.5çv×ÇЮÚ&Å‹¶.™ */
- $"77C0 D3D6 9870 8279 4C2E 29C6 518F 13E6" /* wÀÓÖ˜p‚yL.)ÆQ.æ */
- $"1373 FCB8 FD55 3D8F 8322 F8F4 CD80 3C09" /* .sü¸ýU=ƒ"øôÍ€<Æ */
- $"1496 931A E1BF 0AE6 2842 6FF7 6986 6AEE" /* .–“.á¿Âæ(Bo÷i†jî */
- $"1AE9 FF0A 947D E3F6 D93F B59B F6D5 5FB6" /* .éÿ”}ãöÙ?µ›öÕ_¶ */
- $"AAC7 EDD1 1FDB 5A5F 5549 7D55 2E1F B6A4" /* ªÇíÑ.ÛZ_UI}U..¶¤ */
- $"FDAA F7D4 DF7D 4E80 F173 72EC 2AD6 46CC" /* ýª÷Ôß}N€ñsrì*ÖFÌ */
- $"6653 9F8A F548 8CD9 F7CC 0758 DFBD 1976" /* fSŸŠõHŒÙ÷Ì.Xß½.v */
- $"0832 03BE 1A6C 242F 4978 025D 37A6 D46A" /* .2.¾.l$/Ix.]7¦Ôj */
- $"B859 037D 5250 D0D6 8FC0 4C05 AAAB 7F38" /* ¸Y.}RPÐÖÀL.ª«.8 */
- $"799B 43F9 E370 D367 B412 8CC2 F941 E270" /* y›CùãpÓg´.ŒÂùAâp */
- $"A967 1978 577B 7A22 541A 7DDD A593 75E5" /* ©g.xW{z"T.}Ý¥“uå */
- $"6B05 D950 D953 DA5E 7EBF D5D3 4314 5006" /* k.ÙPÙSÚ^~¿ÕÓC.P. */
- $"8EC3 8474 6B41 83B3 7B16 9C95 721B 5405" /* ŽÃ„tkAƒ³{.œ•r.T. */
- $"F4AE A41F 92D8 56DA F2C9 4BF8 5B0A EBC6" /* ô®¤.’ØVÚòÉKø[ÂëÆ */
- $"29D5 F4F3 36B9 A6D7 3BC4 75D7 972C 7465" /* )Õôó6¹¦×;Äu×—,te */
- $"CCBE 21FA 6EAF 6B26 465B 4676 356D E640" /* ̾!ún¯k&F[Fv5mæ@ */
- $"04C3 0E39 C431 FBA5 2B53 E001 8F9D 37F5" /* .Ã.9Ä1û¥+Sà.7õ */
- $"F289 EC84 85B8 5FC3 F74A 734B E0B1 ED8C" /* ò‰ì„…¸_Ã÷JsKà±íŒ */
- $"5DF4 6678 22E4 887C A45B 1478 DFC3 A9E9" /* ]ôfx"äˆ|¤[.xßéé */
- $"F234 5723 01B3 2685 2754 8133 8699 21C8" /* ò4W#.³&…'T3†™!È */
- $"180A 27F8 174C FED5 8F71 4082 C4E8 DB83" /* .Â'ø.LþÕq@‚ÄèÛƒ */
- $"BDA4 4506 3FA4 5286 5D63 00F7 905D A740" /* ½¤E.?¤R†]c.÷]§@ */
- $"5251 07FA 22F8 1334 FBA6 5640 7199 FA41" /* RQ.ú"ø.4û¦V@q™úA */
- $"A3C7 3CC1 ECF5 7F43 A9AE FBD5 C1F0 18B3" /* £Ç<Áìõ.C©®ûÕÁð.³ */
- $"7072 4809 0A4C 8127 6E10 5F7C 335C CC28" /* prHÆÂL'n._|3\Ì( */
- $"B723 3D12 724D 3DE5 37B3 1C2A 136D 2258" /* ·#=.rM=å7³.*.m"X */
- $"DCE6 BFA4 0DAD FB6E 72C1 70F7 6D71 785D" /* Ü濤.­ûnrÁp÷mqx] */
- $"BC75 69CE CE3B CF7A 170E 8343 CBA9 DE66" /* ¼uiÎÎ;Ïz..ƒCË©Þf */
- $"06ED 779C AA9F F28D 943D 5E3E DEDE 4769" /* .íwœªŸò”=^>ÞÞ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" /* \<m톖Hd.V8C.YŠ*/
- $"D913 B06B 0B08 E00E 1802 6D82 7225 E695" /* Ù.°k..à...m‚r%æ• */
- $"9F1E E7B0 D1DF 323C 61DC 1F25 E3FF 83E2" /* Ÿ.ç°Ñß2<aÜ.%ãÿƒâ */
- $"A49A DED4 4495 A948 5B70 9E5A 01F1 2431" /* ¤šÞÔD•©H[pžZ.ñ$1 */
- $"8EE5 2B54 2863 9041 FAE9 9E9F 1B85 E206" /* Žå+T(cAú鞟.…â. */
- $"4104 106C 5027 632A 8716 C3A5 F047 B3D5" /* A..lP'c*‡.Ã¥ðG³Õ */
- $"EE2B 19CD 2B75 17D8 DFB6 E2BF 491E A41F" /* î+.Í+u.Ø߶â¿I.¤. */
- $"BC48 3493 DEFB 453D 64DE DEA0 68DB EF5B" /* ¼H4“ÞûE=dÞÞ hÛï[ */
- $"1E69 8F3F C55C 1FF6 1823 1543 F483 DF20" /* .i?Å\.ö.#.Côƒß */
- $"F5B4 08F4 5D20 4DF0 7D7D 2007 2ACA 5B5E" /* õ´.ô] Mð}} .*Ê[^ */
- $"159F EF4A 505D 811D A8A3 5476 5539 B45B" /* .ŸïJP].¨£TvU9´[ */
- $"3113 1AC7 00F3 F1A7 E9E3 9E88 5D91 6CD5" /* 1..Ç.óñ§é㞈]‘lÕ */
- $"2CC0 F92B 2063 FF29 4B0E 775A 06EE 75CC" /* ,Àù+ cÿ)K.wZ.îuÌ */
- $"DA54 AC2F B72D 1C25 1E46 A4F8 C3E1 7D8D" /* ÚT¬/·-.%.F¤øÃá} */
- $"85AE BBE6 3DBE EC4A 35F7 3B36 1FBF BC38" /* …®»æ=¾ìJ5÷;6.¿¼8 */
- $"2DC1 785C D644 2BED AB51 1950 2643 8730" /* -Áx\ÖD+í«Q.P&C‡0 */
- $"2AE9 E4EB 1B8E 8F90 BA0C FF2F 6F65 5F28" /* *éäë.Žº.ÿ/oe_( */
- $"1A3F 9398 FF20 01A2 69A0 02C9 8D1B C3EA" /* .?“˜ÿ .¢i .É.Ãê */
- $"A600 6417 3CA3 9E84 93EF 063D 59DC 702C" /* ¦.d.<£ž„“ï.=YÜp, */
- $"959D C3A6 B1ED DEF1 F321 5BA6 FCCD 7762" /* •Ã¦±íÞñó![¦üÍwb */
- $"6C23 7398 AA59 4BBA 0052 B8A7 0608 1AAC" /* l#s˜ªYKº.R¸§...¬ */
- $"5B2E AF60 17F4 278E 6433 6F75 7839 CED2" /* [.¯`.ô'Žd3oux9ÎÒ */
- $"F32E 5D7D 9D40 B145 4CFB A25C D8D7 4BCB" /* ó.]}@±ELû¢\Ø×KË */
- $"956D 88DD 4B92 64BF 4CD4 AFD5 6E56 9859" /* •mˆÝK’d¿LÔ¯ÕnV˜Y */
- $"ABEF BB40 AD0E 6E1F 9B3B 16A3 D9D3 58DF" /* «ï»@­.n.›;.£ÙÓXß */
- $"584E C303 1DAD D18B 6082 9C29 88EB 5163" /* XNÃ..­Ñ‹`‚œ)ˆëQc */
- $"A42D 061A 1570 64A9 0F1C E00D 56D9 E0CB" /* ¤-...pd©..à.VÙàË */
- $"7C66 799C 8EB4 BFCA CF5C CFC2 B611 4F0C" /* |fyœŽ´¿ÊÏ\϶.O. */
- $"AFDE 008C 3580 A270 0C1A 3737 50A1 9A89" /* ¯Þ.Œ5€¢p..77P¡š‰ */
- $"2546 BB2C 62A0 57BE 59CB C00A 1EE9 0F1D" /* %F»,b W¾YËÀÂ.é.. */
- $"C528 40D4 EA69 D281 AED4 B078 F27A 0B42" /* Å(@ÔêiÒ®Ô°xòz.B */
- $"7AD2 DADD 146B 7FFF 223D 6A74 2041 4FCF" /* zÒÚÝ.k.ÿ"=jt AOÏ */
- $"46E1 60C8 9ABE 841E E18D 1712 DB6D 902B" /* Fá`Èš¾„.á..Ûm+ */
- $"7BE6 56DA 7E4B 1704 A373 2802 B120 0184" /* {æVÚ~K..£s(.± .„ */
- $"0681 4499 2739 CE73 9CE8 99D8 C352 337C" /* .D™'9Îsœè™ØÃR3| */
- $"06AB BB71 6257 16EF B535 4972 8C2F 2EE0" /* .«»qbW.ïµ5IrŒ/.à */
- $"85CC 8431 D867 47EE CC43 6E87 A485 2316" /* …Ì„1ØgGîÌCn‡¤…#. */
- $"4927 AE22 C12D 49CE 739C E61C 97D0 99CC" /* I'®"Á-IÎsœæ.—Ð™Ì */
- $"3DC5 F26B 1A31 E742 3E56 464B 2944 108E" /* =Åòk.1çB>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˜Æ<H..$ydè.z` */
- $"F2C0 8287 A7F4 B307 FBDF 2550 567E 01EA" /* òÀ‚‡§ô³.ûß%PV~.ê */
- $"2C45 4614 9A0A 04E8 397B 3DEC 6CDA CA95" /* ,EF.šÂ.è9{=ìlÚÊ• */
- $"B754 699A FF29 B46B D6E3 BB8C 153C AEC0" /* ·Tišÿ)´kÖ㻌.<®À */
- $"BEFF 46AD 744B B945 4C07 F7F7 178D 059E" /* ¾ÿF­tK¹EL.÷÷..ž */
- $"2E80 10C4 6DD6 F19E B649 73D6 8C57 7A6C" /* .€.ÄmÖñž¶IsÖŒWzl */
- $"45DE 3D43 22DE C54A DFCD 64EA 9D77 1AC6" /* EÞ=C"ÞÅJßÍdêw.Æ */
- $"E15E A9A7 0D83 D53C 100B EC25 2B93 1D27" /* á^©§.ƒÕ<..ì%+“.' */
- $"367A 864E D9C4 F0B9 DF5C 538D B2C0 24EE" /* 6z†NÙÄð¹ß\S²À$î */
- $"46E7 424C 2127 6BED B492 3354 86C9 D855" /* FçBL!'kí´’3T†ÉØU */
- $"317B 6BE2 8205 C07C 9A42 03E4 D6B0 0F93" /* 1{kâ‚.À|šB.äÖ°.“ */
- $"4400 AFF0 AE8C D6D6 6729 AEBE 9CDE 5C69" /* D.¯ð®ŒÖÖg)®¾œÞ\i */
- $"D95C 01A0 28AF 1E57 B12C CA6D F010 ED89" /* Ù\. (¯.W±,Êmð.í‰ */
- $"4C46 38AA BAFC D67E 9E98 C6CA 85E4 433E" /* LF8ªºüÖ~ž˜ÆÊ…äC> */
- $"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ƒÄ­<x\ */
- $"E3B4 BFC0 C27C 3762 1D98 0A0C B43D 8107" /* ã´¿ÀÂ|7b.˜Â.´=. */
- $"3003 FF74 C626 1BC1 44AA 08A0 7A68 0ADE" /* 0.ÿtÆ&.ÁDª. zhÂÞ */
- $"E9BD 94DB 3644 AA13 CFCA A9CB 0E8F 9061" /* é½”Û6Dª.ÏÊ©Ë.a */
- $"73BC 6A23 359D C129 F184 4EBA BE0F A772" /* s¼j#5Á)ñ„Nº¾.§r */
- $"9AB6 7DDC C179 81DB 9FDC EDA3 E6C5 21E2" /* š¶}ÜÁyÛŸÜí£æÅ!â */
- $"7049 87BC 00E3 34F5 8066 3FFE 7CA7 A588" /* pI‡¼.ã4õ€f?þ|§¥ˆ */
- $"6277 30DE 8FC1 950A A652 5B12 B0A4 B8BE" /* bw0ÞÁ•Â¦R[.°¤¸¾ */
- $"2297 4261 CB90 AEBB F3CB 2BEE 2FA8 149E" /* "—BaË®»óË+î/¨.ž */
- $"11E6 487B 3EFA 45B9 E4A8 17DF DF8E D5FF" /* .æH{>ú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Âæ‚<Xf¸pEͺal */
- $"9995 BEC1 809B 0892 A7EC 43EC 7FE8 F49F" /* ™•¾Á€›.’§ìCì.èôŸ */
- $"9E4B AFD6 66BB 0B88 38ED B165 9C1D F096" /* žK¯Öf».ˆ8í±eœ.ð– */
- $"64EC FD43 9A7A BC84 8CEF 2E65 F99B 4B43" /* dìýCšz¼„Œï.eù›KC */
- $"7D47 3AE8 D0DB A066 308B 201D FF3F ABC1" /* }G:èÐÛ f0‹ .ÿ?«Á */
- $"CD0D B822 3734 A23E AF05 D1E1 F9F5 AF09" /* Í.¸"74¢>¯.Ñáùõ¯Æ */
- $"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" /* ºÍ<QÓD3×!Ǿš‘](. */
- $"3E68 3F1B 43AE 8F30 CE7F FF67 1C78 8498" /* >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}<i}²/ÿ.3 */
- $"81FC E4ED 4BF8 9180 3FD2 0142 3F2D 1DF0" /* üäíKø‘€?Ò.B?-.ð */
- $"097B D61C 019A C409 B506 26FC D55D 7AE9" /* Æ{Ö..šÄƵ.&üÕ]zé */
- $"3464 6C57 13E7 565F 2553 70C3 3EC7 87AC" /* 4dlW.çV_%SpÃ>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" /* Ã\<w]}Q€ .­£®`ªà */
- $"0D88 09A4 4F7B FAC4 A2FD 327D E109 4F0B" /* .ˆÆ¤O{úÄ¢ý2}áÆO. */
- $"3343 C0ED D985 7402 93E2 7A2E 09B4 09A6" /* 3CÀíÙ…t.“âz.ƴƦ */
- $"5348 2E51 C037 BE62 C1A7 15C4 B9C8 7F4B" /* SH.QÀ7¾bÁ§.ĹÈ.K */
- $"FC22 3596 D989 C701 6701 5488 1001 22B2" /* ü"5–Ù‰Ç.g.Tˆ.."² */
- $"C06A A5D5 2C94 6BA9 D1C6 2B33 5910 8B1F" /* Àj¥Õ,”k©ÑÆ+3Y.‹. */
- $"0B0D 5531 BE0F 3E72 9C60 75A8 2669 220D" /* ..U1¾.>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" /* <wdž.Ž<cfôî.).u\ */
- $"EDD8 6093 6868 531C 9FA3 C5C9 3F3C 7786" /* íØ`“hhS.Ÿ£ÅÉ?<w† */
- $"BCC4 440C 13F9 0BCB 76BA 9364 A3CC 344F" /* ¼ÄD..ù.Ëvº“d£Ì4O */
- $"128B D594 CB9D A2DC 6C03 CA48 2D9E 9706" /* .‹Õ”Ë¢Ül.ÊH-ž—. */
- $"A281 5170 A91B 0033 4552 2A9A BF6F D4A9" /* ¢Qp©..3ER*š¿oÔ© */
- $"61B6 F6C1 7959 FDD2 8F3F C94B 2B90 29BB" /* a¶öÁyYýÒ?ÉK+)» */
- $"9FAA A83B FEFF 80A3 1EC2 B2D9 77CF 963B" /* Ÿª¨;þÿ€£.²ÙwÏ–; */
- $"85FF 5728 5CDD 2F01 7556 8155 F8AA 7984" /* …ÿW(\Ý/.uVUøªy„ */
- $"7543 0C18 A1FC 0353 DF5F D368 41E9 E0EF" /* uC..¡ü.Sß_ÓhAéàï */
- $"C363 A78F 3FE9 41E9 5F77 19A4 A811 FF43" /* Ãc§?éAé_w.¤¨.ÿC */
- $"8EE8 3FBA 00FA 54F6 15F5 CF3B 39A6 0984" /* Žè?º.úTö.õÏ;9¦Æ„ */
- $"CC99 7AE1 8E5B 71A9 1575 DB95 F166 D52F" /* Ì™záŽ[q©.uÛ•ñfÕ/ */
- $"A270 08D4 9515 3B89 2EA1 A097 12A3 B4E9" /* ¢p.Ô•.;‰.¡ —.£´é */
- $"5BFB AE47 8FD7 60F0 33DA E91B 234B 5D2F" /* [û®G×`ð3Úé.#K]/ */
- $"7C4B 00C2 60F1 7260 B78A 1835 B440 611B" /* |K.Â`ñr`·Š.5´@a. */
- $"042D F768 F9C9 8785 50AD 8421 77D4 B97A" /* .-÷hùɇ…P­„!wÔ¹z */
- $"6B02 828C E758 8B31 1E92 DF7F BE67 3DAB" /* k.‚ŒçX‹1.’ß.¾g=« */
- $"E5F8 F1FB FD8C 34F4 4B2F 98BF 24A9 4DF2" /* åøñûýŒ4ôK/˜¿$©Mò */
- $"32A9 A661 B01E F960 12E1 9C18 F197 CEA7" /* 2©¦a°.ù`.áœ.ñ—Χ */
- $"E1C4 4AB4 7CEB 2CE2 33F3 C23C F3FD 2CF9" /* áÄJ´|ë,â3óÂ<óý,ù */
- $"F132 8395 3D39 FD9D 983D 4454 9758 856B" /* ñ2ƒ•=9ý˜=DT—X…k */
- $"6556 B234 72B0 C2CA 71CA 9CEB 7AE4 FD7C" /* eV²4r°ÂÊqÊœëzäý| */
- $"0E3F 1930 6B17 7074 C216 3D9C 24BF 5B97" /* .?.0k.ptÂ.=œ$¿[— */
- $"A7EA 25F0 9DCC AFA5 BBEF 47E9 D7E6 7B0E" /* §ê%ð̯¥»ïGé×æ{. */
- $"E02F 87A2 EF87 68FC 9BF7 F274 5F00 FC3D" /* à/‡¢ï‡hü›÷òt_.ü= */
- $"A5F8 7AC7 F0FA A5F8 7D42 C03F 0F42 FE1D" /* ¥øzÇðú¥ø}BÀ?.Bþ. */
- $"ABF0 F7CF E1EE 40ED 1CBC E67A C7C3 33E9" /* «ð÷Ïáî@í.¼æzÇÃ3é */
- $"75CE 6202 697A FF68 B299 C0A6 2F39 4F64" /* uÎb.izÿh²™À¦/9Od */
- $"6775 1459 6387 68C9 941E E328 B150 8D7C" /* gu.Yc‡hÉ”.ã(±P| */
- $"24C4 D953 4443 9A50 E4CC 4E41 B3A9 F28A" /* $ÄÙSDCšPäÌNA³©òŠ */
- $"BB0E 943C 0DAB C98A 023C 332B AE2D AF60" /* ».”<.«ÉŠ.<3+®-¯` */
- $"4D30 BA77 9D1A 93DC CEBB 7560 EA33 084C" /* M0ºw.“Üλu`ê3.L */
- $"BCFD 2F47 685E 4CC9 8A76 F1C8 04AB 126F" /* ¼ý/Gh^LÉŠvñÈ.«.o */
- $"B9FD 4A34 E181 4147 9F56 2AB4 EB2C 50EF" /* ¹ýJ4áAGŸV*´ë,Pï */
- $"D652 4543 763B B857 210B 2B4A BB50 0EAE" /* ÖRECv;¸W!.+J»P.® */
- $"90BD EEEC F92B DD18 0881 9B3A C6DF A028" /* ½îìù+Ý..›:Æß ( */
- $"45EB 36D7 50B4 D756 FB49 9F08 D74D 037B" /* Eë6×P´×VûIŸ.×M.{ */
- $"83A1 001C 0977 1DCC 81D0 B6B9 828A 6851" /* ƒ¡..Æw.Ìж¹‚ŠhQ */
- $"3CAC B3FF 572B 543A 4C73 3F35 0561 EC81" /* <¬³ÿW+T:Ls?5.aì */
- $"A8D4 82BC 9148 5E30 FF3E 3164 C43E 5461" /* ¨Ô‚¼‘H^0ÿ>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àç<?Û¥a.ŸD..àD */
- $"5844 8C9D 83C0 C5D3 6B95 CE2A 3EBC D7FD" /* XDŒƒÀÅÓk•Î*>¼×ý */
- $"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š•}<WÜŸ.æ */
- $"C3B6 16AD C91B E868 E000 1848 3BE4 5C3A" /* ö.­É.èhà..H;ä\: */
- $"1162 2272 401F 600B A973 281E 62B3 2654" /* .b"r@.`.©s(.b³&T */
- $"74B0 287C C53E A3DA 2A14 E38F 9FFE 3A8E" /* t°(|Å>£Ú*.ãŸþ:Ž */
- $"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" /* ^.^à<eWжœ7‚Ѿ:w */
- $"436E 462B 45B7 FF61 4FA4 A45B 8C34 39D8" /* CnF+E·ÿaO¤¤[Œ49Ø */
- $"1B35 B876 A5F1 F2AD 3F78 D289 1C2E E3B4" /* .5¸v¥ñò­?xÒ‰..ã´ */
- $"A28B 64FA 1E2C 0CCD 0B1C AD42 8866 DDD6" /* ¢‹dú.,.Í..­BˆfÝÖ */
- $"62F0 225B 8DF7 32B3 FC3C 79E9 000B 1CA9" /* bð"[÷2³ü<yé...© */
- $"2C82 4874 34AB B158 47CD FA9F EBC8 0923" /* ,‚Ht4«±XGÍúŸëÈÆ# */
- $"B291 7229 8C3F E7FD 193C 330B A3B4 6969" /* ²‘r)Œ?çý.<3.£´ii */
- $"FCF6 E1BA 4C4A E64C B1BC 5BAF F402 C828" /* üöáºLJæL±¼[¯ô.È( */
- $"3A51 CC67 A851 E207 5A7C 3733 1031 FD5C" /* :QÌg¨Qâ.Z|73.1ý\ */
- $"E4D3 B69F FF67 2C6D 3FC7 D5B4 E63F 55B9" /* äÓ¶Ÿÿg,m?ÇÕ´æ?U¹ */
- $"FD5F 3DB1 4589 6ADF 54F0 F42A 498F 61C8" /* ý_=±E‰jßTðô*IaÈ */
- $"4872 5CD7 F70D 9C80 8880 EB9A 1FE7 C715" /* Hr\×÷.œ€ˆ€ëš.çÇ. */
- $"E57A 280F 96CF 014C 0411 EF44 C4F2 C64F" /* åz(.–Ï.L..ïDÄòÆO */
- $"F91B A9D6 EB9E F615 096F E5C0 5B30 BB79" /* ù.©Öëžö.ÆoåÀ[0»y */
- $"D645 BF4F B70A 2C40 3D24 A4C4 5A01 F3DB" /* ÖE¿O·Â,@=$¤ÄZ.óÛ */
- $"8879 D458 F558 4C8E 3C87 E83C 9C30 F0C3" /* ˆyÔXõXLŽ<‡è<œ0ðà */
- $"F7EB BE6A 2B3B B9CB 4F2E 3B49 CA98 6025" /* ÷ë¾j+;¹ËO.;Iʘ`% */
- $"D6C7 6B39 ED18 A784 5410 F9CD 4FB5 9E32" /* ÖÇk9í.§„T.ùÍOµž2 */
- $"EABF F72F 6ECC 217F E295 4BDA F0C8 2678" /* ê¿÷/nÌ!.â•KÚðÈ&x */
- $"B0F7 3381 2299 1033 5300 BB1C E72F 1EE0" /* °÷3"™.3S.».ç/.à */
- $"75D6 68D0 8C87 A574 580B 4AD8 7BC8 E1C4" /* uÖhÐŒ‡¥tX.JØ{ÈáÄ */
- $"64D3 76AA A080 1E28 FD04 890B B9A1 7E5C" /* dÓvª €.(ý.‰.¹¡~\ */
- $"79E2 31B9 1C3E DBAE 8BC6 DB23 53A4 0F06" /* yâ1¹.>Û®‹ÆÛ#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" /* <c..TÍ9.WMòÕÇ( · */
- $"9955 DAC8 72A5 DBBB F7ED 4C9F 6FFE 3A4E" /* ™UÚÈr¥Û»÷íLŸoþ:N */
- $"E165 1831 C0E5 8285 96C2 3959 1BE7 E884" /* áe.1Àå‚…–Â9Y.çè„ */
- $"E568 89C1 FD03 D443 F6D1 A7C9 4CFE F7B9" /* åh‰Áý.ÔCöѧÉLþ÷¹ */
- $"A0BA 5040 19D5 965F 0EB5 E503 4B32 E6C8" /*  ºP@.Õ–_.µå.K2æÈ */
- $"B9C1 DEBB B8B7 47DC A850 AF44 D3B7 F562" /* ¹ÁÞ»¸·GܨP¯DÓ·õb */
- $"4210 4DFF 42A0 3D9A 7C63 8124 22A9 B258" /* B.MÿB =š|c$"©²X */
- $"2256 6243 3077 FF57 7389 3FB6 A096 0EAB" /* "VbC0wÿWs‰?¶ –.« */
- $"DD33 EF25 C4B0 7338 F6D7 8730 FF2E DD0A" /* Ý3ï%Ä°s8öׇ0ÿ.Ý */
- $"BBDA 7A6E EFE8 58EE D64B A09E 2B00 EC04" /* »ÚznïèXîÖK ž+.ì. */
- $"09C9 A9F4 82A0 3132 4829 65CA E93B B827" /* ÆÉ©ô‚ 12H)eÊé;¸' */
- $"E81F B387 132B 5D15 E526 6FEC 2CB1 407F" /* è.³‡.+].å&oì,±@. */
- $"8485 FF32 4933 D357 FC45 0E44 EE66 D960" /* „…ÿ2I3ÓWüE.DîfÙ` */
- $"5AA3 A13A FC0B D8E2 622E 0BEE 714F 2672" /* Z£¡:ü.Øâb..îqO&r */
- $"3850 26C4 E626 F9BA 418C BC8A 7481 C6BE" /* 8P&Äæ&ùºAŒ¼Štƾ */
- $"BFA6 0D72 0603 3452 46C0 9FDB BE63 34D9" /* ¿¦.r..4RFÀŸÛ¾c4Ù */
- $"9599 7519 804B F1CE 0FC8 7572 F58E EB32" /* •™u.€KñÎ.ÈurõŽë2 */
- $"3501 CBB0 C05B 5643 485A 0012 64C2 8022" /* 5.Ë°À[VCHZ..d€" */
- $"BD39 EB39 2B57 0AA3 3931 93D4 885E CDF2" /* ½9ë9+W£91“Ôˆ^Íò */
- $"818D 7734 36C2 BEE1 4F55 116C 47A9 DC40" /* w46¾áOU.lG©Ü@ */
- $"A8A8 4532 7C33 9D7E 070A BA9E 36F7 2445" /* ¨¨E2|3~.ºž6÷$E */
- $"074C 181A 07B2 C470 FA15 8CCB C069 AD0F" /* .L...²Äpú.ŒËÀi­. */
- $"9DD2 8B21 6F22 7300 34B4 4378 25AB D9D2" /* Ò‹!o"s.4´Cx%«ÙÒ */
- $"1D9B B7F7 2F9C C3B1 926F DE61 4463 90BD" /* .›·÷/œÃ±’oÞaDc½ */
- $"BC76 27E7 A5B5 826F 908E 31BA 048F 97C1" /* ¼v'祵‚oŽ1º.—Á */
- $"1884 67A9 C4BA 4B2B 4A58 D0EE 0269 6832" /* .„g©ÄºK+JXÐî.ih2 */
- $"E8C6 03AA D2A2 D034 27AA D49E 9C01 069A" /* èÆ.ªÒ¢Ð4'ªÔžœ..š */
- $"1BDC C40B 3BA7 5F8D 0468 152D E505 7EC0" /* .ÜÄ.;§_.h.-å.~À */
- $"6BBF C4F4 2F45 99CB 1872 C713 FA0D 055F" /* k¿Äô/E™Ë.rÇ.ú.._ */
- $"551D 6E4D 5794 CC71 BAB5 C560 4D20 9464" /* U.nMW”ÌqºµÅ`M ”d */
- $"9F8C 94BA 1C96 0987 1AB4 61BB BA86 751B" /* ŸŒ”º.–Ƈ.´a»º†u. */
- $"9B79 D06A 7A3D A663 FB31 8B86 E588 5D15" /* ›yÐjz=¦cû1‹†åˆ]. */
- $"4A09 8B2B 81FC AE85 0D5A 1D8C A5B7 6DD9" /* JÆ‹+ü®….Z.Œ¥·mÙ */
- $"02F5 50CE 7017 1BDD 3D3D 86CB 250B 491B" /* .õPÎp..Ý==†Ë%.I. */
- $"AA1F 2D21 A416 E8E7 9A53 4299 8CDE CD59" /* ª.-!¤.èçšSB™ŒÞÍY */
- $"C678 B559 D85C C580 6795 AD5F F578 C9EE" /* ÆxµYØ\Å€g•­_õxÉî */
- $"73B2 8F4B 6EEA 6F07 F785 C1B3 374B E51F" /* s²Knêo.÷…Á³7Kå. */
- $"46DC 728C 05A4 6932 792A DB50 4E9A FD82" /* FÜrŒ.¤i2y*ÛPNšý‚ */
- $"A8A2 5EB8 024D C558 D6BC 350C 97B0 B2E8" /* ¨¢^¸.MÅXÖ¼5.—°²è */
- $"8F42 92FD 604D 6FB7 74B6 6EBE 97F6 CE03" /* B’ý`Mo·t¶n¾—öÎ. */
- $"0DFA C340 31C3 4C5E 0041 088B E097 383B" /* .úÃ@1ÃL^.A.‹à—8; */
- $"A236 97CC 8D2B 6F6D 0E58 4E56 1D49 32EC" /* ¢6—Ì+om.XNV.I2ì */
- $"626C C303 42BB D30B B8DE 5868 3C2F E39B" /* blÃ.B»Ó.¸ÞXh</ã› */
- $"A07A 236D 0F21 C0DD 1A0A 933A 7710 6605" /*  z#m.!ÀÝ.“:w.f. */
- $"343E 8D1A 9384 4F16 C01E 5AF7 DF53 0B38" /* 4>.“„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‚<R¹„‰ */
- $"9BDF 0AA1 9A6B 667D DCE2 FE18 C386 4EE9" /* ›ß¡škf}Üâþ.ÆNé */
- $"8AF7 92D0 4405 227C BD4C B9E4 34A7 2533" /* Š÷’ÐD."|½L¹ä4§%3 */
- $"D3C6 E915 D57B 681B B6DC FF03 D5D4 F1DD" /* ÓÆé.Õ{h.¶Üÿ.ÕÔñÝ */
- $"4FB5 BA54 262A 73C2 1CF4 4CD1 D842 E8C2" /* OµºT&*sÂ.ôLÑØBè */
- $"8169 3555 13EC 6A25 6DE0 3614 EC2E D1BB" /* i5U.ìj%mà6.ì.Ñ» */
- $"E597 BFC6 2ACB 6879 11D1 870D E79E 8422" /* å—¿Æ*Ëhy.ч.çž„" */
- $"C01D 4032 8887 6DBA FBEC 3077 F220 49E3" /* À.@2ˆ‡mºûì0wò Iã */
- $"8693 0B00 9F45 0F57 0A39 DA8E EAA5 CD48" /* †“..ŸE.WÂ9ÚŽê¥ÍH */
- $"2C93 C3EC BDE0 71D5 5749 0952 441C E3F8" /* ,“Ãì½àqÕWIÆRD.ãø */
- $"597F C1E6 FB6B BBED AD71 FC34 CFF8 5877" /* Y.Áæûk»í­qü4ÏøXw */
- $"DB67 5F6D 798F E163 5F6B 1CFA A87B ED7C" /* Ûg_myác_k.ú¨{í| */
- $"F176 3065 72FF 443D BA6B 8FBD 9E85 806A" /* ñv0erÿD=ºk½ž…€j */
- $"2A1B 368C 7A9E B1B1 93DE ABD8 263F 31B3" /* *.6Œzž±±“Þ«Ø&?1³ */
- $"1739 58F1 7233 FE7C 4EC4 32AA CDDB CF11" /* .9Xñr3þ|NÄ2ªÍÛÏ. */
- $"C519 9C61 B756 AF62 D55D 5D48 6AF7 4364" /* Å.œa·V¯bÕ]]Hj÷Cd */
- $"205E F14D AAD6 EFF5 2F0D CBE4 0F19 3159" /* ^ñMªÖïõ/.Ëä..1Y */
- $"94F4 910E 4217 990B CABE EBF5 2B67 2EF6" /* ”ô‘.B.™.ʾëõ+g.ö */
- $"FE41 0C44 1C50 43EA 69F5 4E73 5569 82A1" /* þA.D.PCêiõNsUi‚¡ */
- $"C13C 4899 3AA9 5E13 5F76 BF98 2105 1842" /* Á<H™:©^._v¿˜!..B */
- $"AF34 9AFD CFC8 D1E7 3479 E1F3 C86F D06F" /* ¯4šýÏÈÑç4yáóÈoÐo */
- $"9ED9 9DD8 E2E0 4B44 19F4 03E6 9CC0 3474" /* žÙØâàKD.ô.æœÀ4t */
- $"DFBD 078F D140 1C06 5F8C B6E2 665C 703A" /* ß½.Ñ@.._Œ¶âf\p: */
- $"2841 642E F538 C531 697D 5064 11AD 9E8C" /* (Ad.õ8Å1i}Pd.­žŒ */
- $"5A53 3174 7302 762E 9708 BEF5 AD41 0C01" /* ZS1ts.v.—.¾õ­A.. */
- $"D744 85FC D963 416A 9A3A 6898 F067 5B1C" /* ×D…üÙcAjš:h˜ðg[. */
- $"873B 42B6 72C4 FF18 337A 8A24 EDCE 6B8B" /* ‡;B¶rÄÿ.3zŠ$íÎk‹ */
- $"BF06 0EA4 0227 A131 8620 B03C A2B9 729E" /* ¿..¤.'¡1† °<¢¹rž */
- $"1242 EC64 E340 5C5C 9BFF 120A BB1B 75E5" /* .Bìdã@\\›ÿ.».uå */
- $"385B 68AF C7B7 8BA5 1E7B 6FC1 DDB2 F642" /* 8[h¯Ç·‹¥.{oÁݲöB */
- $"FF56 4D21 66B3 EA8C 7095 8FBD 92CC 7315" /* ÿVM!f³êŒp•½’Ìs. */
- $"665F B398 608C ADD4 11E0 DA38 734A C3DB" /* f_³˜`Œ­Ô.àÚ8sJÃÛ */
- $"9249 4640 27D6 D057 426E 651D BF14 F0DE" /* ’IF@'ÖÐWBne.¿.ðÞ */
- $"9130 2D17 8D66 9689 79BD 9A6D 5AF9 6C7C" /* ‘0-.f–‰y½šmZùl| */
- $"94BF 8531 6507 5621 1C11 8D8F F3A5 83D9" /* ”¿…1e.V!..ó¥ƒÙ */
- $"7EE3 1E6D 9B0A 8D44 F466 DE49 E606 E143" /* ~ã.m›ÂDôfÞIæ.áC */
- $"7E77 D417 D49D 9CF2 89AA B0FA 84A4 33A5" /* ~wÔ.Ôœò‰ª°ú„¤3¥ */
- $"8279 A26A 82C5 27CF FB64 D227 994E C6A7" /* ‚y¢j‚Å'ÏûdÒ'™NƧ */
- $"531C 7B7D D333 20D4 F79E 7C21 CC1E 7ADA" /* S.{}Ó3 Ô÷ž|!Ì.zÚ */
- $"F978 DEBB 1FF2 7420 A72D DE6B AB74 8DC6" /* ùxÞ».òt §-Þk«tÆ */
- $"DD0F 0386 BF57 5F23 4926 C874 D598 47A3" /* Ý..†¿W_#I&ÈtÕ˜G£ */
- $"FBC8 E9B0 38BB C695 B7F4 82A1 CC5F 1E22" /* ûÈé°8»Æ•·ô‚¡Ì_." */
- $"767C 20D5 E64D 44F1 B2D4 2298 C6A1 1842" /* v| ÕæMDñ²Ô"˜Æ¡.B */
- $"8139 0CC8 B9C5 284F 9FC8 945B 5342 94A8" /* 9.ȹÅ(OŸÈ”[SB”¨ */
- $"1A57 3351 E00E DB28 D5E3 9712 4346 6DBA" /* .W3Qà.Û(Õã—.CFmº */
- $"CC9B A1ED CD9B 778D 4523 1E9A AC69 8ED9" /* Ì›¡íÍ›wE#.š¬iŽÙ */
- $"67C4 C16D A548 A029 0075 0185 8D06 B7F0" /* gÄÁm¥H ).u.….·ð */
- $"8258 D26A EB95 D437 F0D2 8E91 D536 F534" /* ‚XÒjë•Ô7ðÒŽ‘Õ6õ4 */
- $"30A1 6DE7 E4B8 48DF 246E 6A43 4FE6 AED0" /* 0¡mçä¸Hß$njCOæ®Ð */
- $"48A0 5E1E C339 6C40 BE36 CEB8 870B F9EB" /* H ^.Ã9l@¾6θ‡.ùë */
- $"5ED8 3CA2 B3FA 8CD9 2D26 FF79 6468 862D" /* ^Ø<¢³úŒÙ-&ÿydh†- */
- $"6B87 3072 15D5 5640 D5D4 B4BA EAD3 84F1" /* k‡0r.ÕV@ÕÔ´ºêÓ„ñ */
- $"6A43 F378 100E 8088 A3FE 989B E75B F67F" /* jCóx..€ˆ£þ˜›ç[ö. */
- $"5B25 3AE2 C08C 8CB0 08DD A37F 94DD 7F03" /* [%:âÀŒŒ°.Ý£.”Ý.. */
- $"35C9 DF27 9A9A B829 6326 A95D 91F7 0BA3" /* 5Éß'šš¸)c&©]‘÷.£ */
- $"7220 E220 F062 D8DE ADE2 2AD6 DDFD C9E4" /* r â ðbØÞ­â*ÖÝýÉä */
- $"FAAE 543D 3CCB 5230 74F7 3120 02FD 6B45" /* ú®T=<ËR0t÷1 .ýkE */
- $"A2AB 805B 13FB 1879 6060 5600 1847 98E5" /* ¢«€[.û.y``V..G˜å */
- $"BF65 2CD4 ACD7 15D0 B77E 5A0F 8095 95CA" /* ¿e,Ô¬×.з~Z.€••Ê */
- $"1847 D25F 7D32 1AE2 89EA 9D49 074D A3E5" /* .GÒ_}2.â‰êI.M£å */
- $"201E 8AC7 CB9C 43BC 0732 70E0 3C4F E625" /* .ŠÇËœC¼.2pà<Oæ% */
- $"88E3 74DB 6FB7 7BE2 7006 F9E7 1F76 DBF3" /* ˆãtÛo·{âp.ùç.vÛó */
- $"C988 D665 F7AA 21E2 A5C1 E969 2917 3BA3" /* ɈÖe÷ª!â¥Áéi).;£ */
- $"17BF 925F F835 9827 813E DA4F EE9B 2DF3" /* .¿’_ø5˜'>Ú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" /* <Lƒ”r¦.¡=†º..‹Î‹ */
- $"FB71 18D8 E044 CE7C A642 F1E5 DC8B F8E6" /* ûq.ØàDÎ|¦BñåÜ‹øæ */
- $"2405 66E0 B6C5 6A4F B1AE 2231 3060 11D4" /* $.fà¶ÅjO±®"10`.Ô */
- $"9963 5EF4 BB3D 1F61 0807 0AE1 0DFC 4718" /* ™c^ô»=.a..Âá.üG. */
- $"6C97 80A7 D438 6A81 B76A 6E7E 7A64 87A1" /* l—€§Ô8j·jn~zd‡¡ */
- $"1D7A 8744 3227 F565 4B4A E311 FA0F B477" /* .z‡D2'õeKJã.ú.´w */
- $"9DD6 0662 8844 7138 BDF8 CBCC 007F BDB6" /* Ö.bˆDq8½øËÌ..½¶ */
- $"07C4 98CC 226B 9762 33D0 99EF 54D9 5800" /* .ĘÌ"k—b3ЙïTÙX. */
- $"509D C37B 39A7 E11B 8771 0999 AB8B AAA6" /* PÃ{9§á.‡qÆ™«‹ª¦ */
- $"C463 6C38 7FB0 9121 2CA2 7634 BBEE 41FB" /* Äcl8.°‘!,¢v4»îAû */
- $"4F3B B050 3E38 15C4 98A6 216D 31C2 7057" /* O;°P>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.ú˜ÆÈ<y'ÚË9ˆ.;. */
- $"9BEA 1EF3 D655 CFEB B4F7 0888 971D 69EF" /* ›ê.óÖUÏë´÷.ˆ—.iï */
- $"1105 0EF2 80B8 FF1E F0BE 107F 9AB0 6C52" /* ...ò€¸ÿ.ð¾..š°lR */
- $"FF78 3AA4 8FE0 3370 40DF C5E8 478A 2FCF" /* ÿx:¤à3p@ßÅèGŠ/Ï */
- $"96C5 8D32 8E07 AA93 DA95 4D9B 60C6 2748" /* –Å2Ž.ª“Ú•M›`Æ'H */
- $"C8F4 8347 D2D9 2E35 75E4 333A 6494 B177" /* ÈôƒGÒÙ.5uä3:d”±w */
- $"C836 6E4F AF08 CDB0 0FA5 D565 A0EC 946F" /* È6nO¯.Í°.¥Õe ì”o */
- $"ED5C 03F6 E5DB FA4F D29A BF8F BC7F 12D8" /* í\.öåÛúOÒš¿¼..Ø */
- $"7730 8564 524D 4B31 F681 8C71 C5BC 1641" /* w0…dRMK1öŒqż.A */
- $"6988 F9CF 0385 B8EE 4C04 07DB 5AD2 531C" /* iˆùÏ.…¸îL..ÛZÒS. */
- $"48BA 3E6F E24E AF73 DB5E B729 A4BF 894A" /* Hº>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<Bªˆ.u» ¯ì */
- $"26F9 7E41 5CC7 2154 63A3 D965 075C 1A78" /* &ù~A\Ç!Tc£Ùe.\.x */
- $"2A13 753E DDD9 F846 467C EFC6 5308 2B46" /* *.u>ÝÙø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.<aY.>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<PX¥Ü.@.ž */
- $"3999 F0C2 C418 2E8F 0951 664A 7082 F49F" /* 9™ðÂÄ..ÆQfJp‚ôŸ */
- $"E576 B2B1 5918 E3EE 9B97 1686 6499 A572" /* åv²±Y.ãî›—.†d™¥r */
- $"B1F6 2F39 A798 6292 DE22 007B 60AD 1D94" /* ±ö/9§˜b’Þ".{`­.” */
- $"31BA 068D F15A 06DB 2654 6B52 F692 3C3A" /* 1º.ñZ.Û&TkRö’<: */
- $"0DA8 A74B 30F6 3852 76F0 A897 9086 FBD5" /* .¨§K0ö8Rv𨗆ûÕ */
- $"1C78 047E 7BF2 08EE 7B45 85C5 6ED5 AA43" /* .x.~{ò.î{E…ÅnÕªC */
- $"F423 8A4E 4111 C68E 172E DD87 AF9E BF19" /* ô#ŠNA.ÆŽ..݇¯ž¿. */
- $"D4D2 020C 6FD5 EE3F F0E8 289E 4E6C 0871" /* ÔÒ..oÕî?ðè(žNl.q */
- $"1187 D3F1 E458 94F5 4519 BF3C D239 D86C" /* .‡ÓñäX”õE.¿<Ò9Øl */
- $"17F1 8916 4206 2346 ACD8 1F08 9A44 0AB3" /* .ñ‰.B.#F¬Ø..šD³ */
- $"CEE6 441D 78D5 2909 4CEA 46F7 D6C6 D21A" /* ÎæD.xÕ)ÆLêF÷ÖÆÒ. */
- $"6D41 BB64 ADFF 6252 5A80 3556 C459 2845" /* mA»d­ÿbRZ€5VÄY(E */
- $"C05D C2C5 1F69 4087 0380 C0FF 61AA D5D1" /* À]ÂÅ.i@‡.€ÀÿaªÕÑ */
- $"E5C2 5FC0 CEF4 2D59 B4A3 6BA8 343E 184B" /* åÂ_ÀÎô-Y´£k¨4>.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(!Ý<j4 */
- $"926C 8F3C 1548 D31A 021F 2604 252D A929" /* ’l<.HÓ...&.%-©) */
- $"172B 8212 174F 2D2D CC7D DA15 F9A9 AD7E" /* .+‚..O--Ì}Ú.ù©­~ */
- $"59D3 7885 9215 C77B 6583 4D8F 3308 149C" /* YÓx…’.Ç{eƒM3..œ */
- $"270A 4508 21C9 A05B CDE9 BEF1 C18A 4B74" /* 'ÂE.!É [Íé¾ñÁŠKt */
- $"F07B 0DFE 007B E5AF D9AA CED7 8661 34C7" /* ð{.þ.{å¯ÙªÎ׆a4Ç */
- $"AA26 21AC D09C 6BAA EABB A7C4 486E 40A5" /* ª&!¬Ðœkªê»§ÄHn@¥ */
- $"C791 976A 1EC3 534F 84EC E6E9 7363 FF08" /* Ç‘—j.ÃSO„ìæéscÿ. */
- $"5B20 0E29 000C 5E8F 3339 6210 65CC FD34" /* [ .)..^39b.eÌý4 */
- $"76EB F1B2 76C6 5FDC C1A8 B0F5 53EE 103C" /* vëñ²vÆ_ÜÁ¨°õSî.< */
- $"50B0 650F 8459 9777 E890 E28A BB84 56B9" /* P°e.„Y—wè⊻„V¹ */
- $"0522 90F9 5B81 C982 979E E507 A4BC 26C3" /* ."ù[É‚—žå.¤¼&à */
- $"E356 F2A9 C0D1 BFF3 F882 EC0E 6AA9 CA0D" /* ãVò©ÀÑ¿óø‚ì.j©Ê. */
- $"4419 16FB 9BEF 947E F848 19BF 5CB6 EA4E" /* D..û›ï”~øH.¿\¶êN */
- $"C290 F254 020B 51DB 8094 4D05 E9A5 21A0" /* ÂòT..QÛ€”M.é¥!  */
- $"D3E6 84EA 5A3E 4380 650C B24F 31DA 209F" /* Óæ„êZ>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Ò<YV=롦.X */
- $"CD98 F32B 92E6 D960 C0E1 E542 294D 6FD3" /* ͘ó+’æÙ`ÀáåB)MoÓ */
- $"4234 37C9 3537 275F AC1E 936D 534A BF02" /* B47É57'_¬.“mSJ¿. */
- $"B742 8CAB BE88 E4FF 23DC D9EB 1FC4 9CF0" /* ·BŒ«¾ˆäÿ#ÜÙë.Äœð */
- $"C5D1 3F1D 5995 AD68 12E9 71B3 2100 AFB7" /* ÅÑ?.Y•­h.éq³!.¯· */
- $"CBF7 9ADB D5FF 48EE B1A2 AE4D E021 7C07" /* Ë÷šÛÕÿHî±¢®Mà!|. */
- $"5AD5 E94C A965 DFE8 B32A 23AB DE05 4FB1" /* ZÕéL©eßè³*#«Þ.O± */
- $"FDB7 ECC5 3611 73D9 B03C 399A D5F6 663D" /* ý·ìÅ6.sÙ°<9šÕöf= */
- $"0E78 0BEE 67D9 2F9D 0072 E938 509C 9779" /* .x.îgÙ/.ré8Pœ—y */
- $"6C64 03A1 B8C9 C1C0 2256 29EA 112C FB1C" /* ld.¡¸ÉÁÀ"V)ê.,û. */
- $"766C DF51 83B1 388F 902E EE03 337E 689A" /* vlßQƒ±8.î.3~hš */
- $"CA5A A9F0 09AF 3422 4115 D489 3FBD 22C1" /* ÊZ©ðƯ4"A.Ô‰?½"Á */
- $"4A4F 642A 0AC8 D01C 2950 18CA D441 780A" /* JOd*ÂÈÐ.)P.ÊÔAx */
- $"C929 A7FF 0AFA 956A A581 B590 9B7A 7D74" /* É)§ÿÂú•j¥µ›z}t */
- $"2084 3DC1 5D81 B12B DF9C 333D EFAD 0ADD" /* „=Á]±+ßœ3=ï­ÂÝ */
- $"3445 4F8C 132E F02F C2E7 E13F BE12 2F84" /* 4EOŒ..ð/Âçá?¾./„ */
- $"7FC3 D55F 876A BE1D 07F2 688D 774C FC3E" /* .ÃÕ_‡j¾..òhwLü> */
- $"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#[ßÈ<T¥ */
- $"6B6B D343 F20E AD4C B45C 2BF4 7C65 87A1" /* kkÓCò.­L´\+ô|e‡¡ */
- $"E2EA E2B7 FF17 F9A1 5606 D5A7 C113 F062" /* âêâ·ÿ.ù¡V.Õ§Á.ðb */
- $"D50E E647 922C 8746 7CBA 99C8 4400 979D" /* Õ.æG’,‡F|º™ÈD.— */
- $"3D09 19E7 3A84 E245 ED1F 1C14 3967 45CE" /* =Æ.ç:„âEí...9gEÎ */
- $"2B06 C383 F2A6 2CEE 02E6 A2A7 1821 0F3F" /* +.Ãò¦,î.梧.!.? */
- $"4057 F9E9 B830 94C7 65AA C396 6F97 2721" /* @Wùé¸0”ÇeªÃ–o—'! */
- $"F1AC 6AF7 6C6C 3F02 D2F1 343D 8B42 0F6F" /* ñ¬j÷ll?.Òñ4=‹B.o */
- $"E2D4 A7D8 7158 F033 C573 AD72 01B7 1CC7" /* âÔ§ØqXð3Ås­r.·.Ç */
- $"4CA6 78C2 BABD BB30 5E03 BDEE DF19 8240" /* L¦xº½»0^.½îß.‚@ */
- $"9521 A43A B142 2F42 3590 AD8C B9FD A409" /* •!¤:±B/B5­Œ¹ý¤Æ */
- $"9D77 38E7 B8F8 3BCD 4478 61C3 5768 0324" /* w8ç¸ø;ÍDxaÃWh.$ */
- $"4E55 4240 1E87 1F93 D0BA 6929 C235 7E76" /* NUB@.‡.“кi)Â5~v */
- $"F6E8 AA1B AF13 15FD EB95 2609 BE7D BFE8" /* öèª.¯..ýë•&ƾ}¿è */
- $"3E51 8F2E 4780 4EE6 891E F83D FF7D D1C3" /* >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" /* <NP}úly„úÈlBh‚x¬ */
- $"E40D B7A2 4E43 998B 1C29 D7C6 B7BA 58C9" /* ä.·¢NC™‹.)×Æ·ºXÉ */
- $"3503 114B 86B8 CB5D B605 832D 98FE 0257" /* 5..K†¸Ë]¶.ƒ-˜þ.W */
- $"FB50 8CA0 43D4 71BE E330 1584 5983 668F" /* ûPŒ CÔq¾ã0.„Yƒf */
- $"735C 2448 3B30 82E4 1932 5BF8 129F FE38" /* s\$H;0‚ä.2[ø.Ÿþ8 */
- $"749D 01ED DAFC 95B9 375D BBCB 60D9 FC58" /* t.íÚü•¹7]»Ë`ÙüX */
- $"0796 AEFC 2337 F89E 01F5 48BD 0BAF A61F" /* .–®ü#7øž.õH½.¯¦. */
- $"3EC4 C092 DC6A 584C AAAF 1A9F A20F CEA4" /* >ÄÀ’Ü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" /* <Z.ö!<ž-’$p±ê›}6 */
- $"E7EA 0D03 CB32 7413 AB26 CB30 1B56 CBDE" /* çê..Ë2t.«&Ë0.VËÞ */
- $"3C31 361D 24E2 F441 4D78 7825 1DA0 0C14" /* <16.$âôAMxx%. .. */
- $"5C84 B112 6FC1 77DB 42CA 7791 960B 9F09" /* \„±.oÁwÛBÊw‘–.ŸÆ */
- $"980A 5629 54C0 EC82 889A B0E3 38F4 E734" /* ˜ÂV)TÀ삈š°ã8ôç4 */
- $"FA91 D5CD 2C8F 43CD 5629 3DAD 81DA 5E0A" /* ú‘ÕÍ,CÍV)=­Ú^Â */
- $"C008 712F EAD3 2486 4CD2 C7BA 0FA9 BBD3" /* À.q/êÓ$†LÒǺ.©»Ó */
- $"6AC2 A912 7736 5A33 CC96 9EDC 9C5A 3084" /* j©.w6Z3Ì–žÜœZ0„ */
- $"C826 A3FB 0661 ED4B 9689 A921 22AB 2399" /* È&£û.aíK–‰©!"«#™ */
- $"6F2A 4A78 A5F8 A059 BE4B 7DFF 5D41 1A31" /* o*Jx¥ø Y¾K}ÿ]A.1 */
- $"E688 045C BD1E D1DB 7C5B 6B89 5C22 3CAF" /* æˆ.\½.ÑÛ|[k‰\"<¯ */
- $"F133 FF14 13A2 9A3F 6E42 54EB 5082 9F25" /* ñ3ÿ..¢š?nBTëP‚Ÿ% */
- $"7C07 6BA6 25EA A890 3560 E915 B058 CB68" /* |.k¦%ê¨5`é.°XËh */
- $"3601 4B07 ACE7 EC8A 2897 F908 D405 455E" /* 6.K.¬çìŠ(—ù.Ô.E^ */
- $"5EDD 427E 791A EA3D 6ACE 3BC0 0D43 731A" /* ^ÝB~y.ê=jÎ;À.Cs. */
- $"C9C6 8C03 BD83 6F85 EF75 7246 2F8E 1CFB" /* ÉÆŒ.½ƒo…ïurF/Ž.û */
- $"8DC9 2726 593F 1D87 A822 399F 9770 324C" /* É'&Y?.‡¨"9Ÿ—p2L */
- $"6ABF 38B9 E89E B2F5 D575 E7DB C449 63CF" /* j¿8¹èž²õÕuçÛÄIcÏ */
- $"EBE1 07BB 80A4 C099 6A15 9A47 96F3 8C8D" /* ëá.»€¤À™j.šG–óŒ */
- $"49E1 1F78 2119 9460 CA7A F257 EDA1 104B" /* Iá.x!.”`ÊzòWí¡.K */
- $"5C68 0E57 188C 62B0 FBE3 CF4F 5251 6525" /* \h.W.Œb°ûãÏORQe% */
- $"CB59 5E3D C6F4 6B04 5B2D 1ED2 3BE1 02BB" /* ËY^=Æôk.[-.Ò;á.» */
- $"7207 12AA BFEC 50F4 83FE 2797 121B 3D14" /* r..ª¿ìPôƒþ'—..=. */
- $"DA23 BE41 D647 E5CA DD2D CD48 8C4D A094" /* Ú#¾AÖGåÊÝ-ÍHŒM ” */
- $"B1A9 4ED5 4735 8818 C4F1 597D 3211 5D12" /* ±©NÕG5ˆ.ÄñY}2.]. */
- $"D96B 5A38 AB9A 7E89 C503 13B0 8354 C887" /* ÙkZ8«š~‰Å..°ƒTȇ */
- $"F766 96F0 EDAE C6B6 17B4 E9A4 9230 C2F5" /* ÷f–ðí®Æ¶.´é¤’0Âõ */
- $"029D 3D72 A1CF 5BB9 E975 DBFF 06DC F5B2" /* .=r¡Ï[¹éuÛÿ.Üõ² */
- $"686F 667B AD3E 1D8D 5BE4 0D6A 2CD7 DE66" /* hof{­>.[ä.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Ø<y. */
- $"4243 1F04 D29C 94E6 FA35 A9C7 9C1C 0762" /* BC..Òœ”æú5©Çœ..b */
- $"AA92 7DF8 65D6 B16D 30C6 E3F2 22D5 8971" /* ª’}øeÖ±m0Æãò"Õ‰q */
- $"F890 651C 37E3 1F4A 29A4 6637 D7AE 7CB9" /* øe.7ã.J)¤f7×®|¹ */
- $"14C7 D06B 2595 45F8 89DC DBAF B284 6ADA" /* .ÇÐk%•Eø‰ÜÛ¯²„jÚ */
- $"E4DB 9D25 F76C CDA3 EB7E 1B5A 4264 8145" /* äÛ%÷lÍ£ë~.ZBdE */
- $"547E 6F18 076D A675 BA1A 1AB1 0BF1 AEB6" /* T~o..m¦uº..±.ñ®¶ */
- $"C8C2 AAE0 489F 4E11 7F77 336A 41A4 C050" /* ȪàHŸN..w3jA¤ÀP */
- $"D19E AE10 BD35 C5EC DA71 BDEF A017 C32D" /* Ñž®.½5ÅìÚq½ï .Ã- */
- $"CB15 0C8E 0B75 C179 FB84 FDF2 DD5D C21F" /* Ë..Ž.uÁyû„ýòÝ]Â. */
- $"56A5 397D C437 A82F 65F9 2E68 A785 0AF3" /* V¥9}Ä7¨/eù.h§…Âó */
- $"B9F0 7781 E6B8 ACFA 09DC B57D 6317 B29B" /* ¹ðw測úÆܵ}c.²› */
- $"C754 09FC 3635 9854 0DA1 A3BE D3EE CF40" /* ÇTÆü65˜T.¡£¾ÓîÏ@ */
- $"4BE4 A4D9 07C4 D65E 3887 C8A7 CD3A 83F5" /* Kä¤Ù.ÄÖ^8‡È§Í:ƒõ */
- $"DFA8 10A6 BB6D B811 852D 3877 8782 1E66" /* ߨ.¦»m¸.…-8w‡‚.f */
- $"AF11 43B8 CA3A 6146 3657 AFE0 B314 36CB" /* ¯.C¸Ê:aF6W¯à³.6Ë */
- $"8E1C 272D ED4B 634C AABA 0207 6A1A E2E3" /* Ž.'-íKcLªº..j.âã */
- $"C500 C0A4 894A BAD8 C9A1 0AE7 AC8D 750C" /* Å.À¤‰JºØÉ¡Âç¬u. */
- $"7D84 FBCC DB2E EE05 B04A 002B B383 46DE" /* }„ûÌÛ.î.°J.+³ƒFÞ */
- $"C18D 5BBD B442 9E88 BBB2 89CC 0EBA CF5A" /* Á[½´Bžˆ»²‰Ì.ºÏZ */
- $"5616 DDAB ED7B 4C2E 1C82 0C9D 4820 C0E8" /* V.Ý«í{L..‚.H Àè */
- $"1C4E 39A5 9041 9E33 A20A A73D 821A 238A" /* .N9¥Až3¢Â§=‚.#Š */
- $"3B24 14B9 D9A6 95AA F5B0 13C1 8CFD 790F" /* ;$.¹Ù¦•ªõ°.ÁŒýy. */
- $"33CB 82D3 FE12 0F27 F309 7453 05E0 DF8F" /* 3Ë‚Óþ..'óÆtS.àß */
- $"AAE8 F77A 31BA 0118 43E1 7AE7 69DC 5D12" /* ªè÷z1º..CázçiÜ]. */
- $"BD53 9858 EA6D D8D3 174C FE4C F487 3CCF" /* ½S˜XêmØÓ.LþLô‡<Ï */
- $"9098 7872 8FC3 EBAC 4C76 F503 6915 A1B3" /* ˜xrÃë¬Lvõ.i.¡³ */
- $"5FF8 81CD E13D D511 AAB8 5C7B 1376 C87F" /* _øÍá=Õ.ª¸\{.vÈ. */
- $"2DA1 557D 2053 3341 CC15 418C 0911 5378" /* -¡U} S3AÌ.AŒÆ.Sx */
- $"5FFE 324E 1412 2046 B049 3A77 69B7 417F" /* _þ2N.. F°I:wi·A. */
- $"AC17 B8B0 7FDA 6D19 59F0 DD68 8A88 E55A" /* ¬.¸°.Úm.YðÝhŠˆåZ */
- $"8098 0888 3714 713A 1D17 BB8D F01C 6005" /* €˜.ˆ7.q:..»ð.`. */
- $"8F2E 3D20 2753 1BB4 9BE3 DFD1 709F 99EB" /* .= 'S.´›ãßÑpŸ™ë */
- $"DFCC C1B1 717B 7FA3 52BB C12D E6B7 24D2" /* ßÌÁ±q{.£R»Á-æ·$Ò */
- $"F448 F23D C196 1BAA D61B F422 41B4 D620" /* ôHò=Á–.ªÖ.ô"A´Ö */
- $"466D 45F3 06F6 F631 3E88 5CDE F7F6 BC6F" /* FmEó.öö1>ˆ\Þ÷ö¼o */
- $"789C D06C 02CC 2E71 B6B0 03D2 297B BFCD" /* xœÐl.Ì.q¶°.Ò){¿Í */
- $"8C21 67AD CEE0 DB53 5749 A676 690C 11E3" /* Œ!g­ÎàÛSWI¦vi..ã */
- $"5AD2 905C 78E1 4AB0 E60E C920 4ECC 7CB6" /* ZÒ\xáJ°æ.É NÌ|¶ */
- $"A76F 70F1 BCFD AA1D F4D2 E43F E203 D0C8" /* §opñ¼ýª.ôÒä?â.ÐÈ */
- $"E11E 61AF F1A7 5762 600E 65BB D870 818A" /* á.a¯ñ§Wb`.e»ØpŠ */
- $"CDF0 DFC4 8C9C 1926 678B 2732 C52F 98FD" /* ÍðßÄŒœ.&g‹'2Å/˜ý */
- $"33B3 EE23 138D 5E5F C9C3 FEF9 6111 E3E6" /* 3³î#.^_ÉÃþùa.ãæ */
- $"AF79 A8A5 2949 D590 B463 EDF3 F72A 18FD" /* ¯y¨¥)IÕ´cíó÷*.ý */
- $"BB23 233B 7924 2DD1 A335 B949 467E A30C" /* »##;y$-Ñ£5¹IF~£. */
- $"3185 5FE5 DB63 6748 B22D AB3F 8A8C 0926" /* 1…_åÛcgH²-«?ŠŒÆ& */
- $"5450 E925 A69D 1185 7300 D694 EA1F 4DF2" /* TPé%¦.…s.Ö”ê.Mò */
- $"2413 F4ED 6D64 5B74 BBD5 0E65 26EF A8CD" /* $.ôímd[t»Õ.e&ï¨Í */
- $"5806 0C60 404F 90A0 06B6 AFD1 785F 9646" /* X..`@O .¶¯Ñx_–F */
- $"B1AD 2A45 5777 33FA 49DB 8D3D AC2A BAEA" /* ±­*EWw3úIÛ=¬*ºê */
- $"4527 B4DF 481A 6AB9 4485 05E6 7040 1B93" /* E'´ßH.j¹D….æp@.“ */
- $"D6E0 3BBF A334 E13B 68EC 934B C393 B621" /* Öà;¿£4á;hì“KÓ¶! */
- $"CFC8 69BE A6AC 672C 235E F1FC 4480 DE83" /* ÏÈi¾¦¬g,#^ñüD€Þƒ */
- $"32D7 D269 F78C F22D 5B9F F4DF DDDD D6DE" /* 2×Òi÷Œò-[ŸôßÝÝÖÞ */
- $"4C65 4D61 C1F0 26BF E4C3 D7C9 A034 163D" /* LeMaÁð&¿äÃ×É 4.= */
- $"FBAE 0167 4DF0 EBEF AA8B B742 2832 1F67" /* û®.gMðë懲·B(2.g */
- $"8CC0 80D0 4A6B 9843 DE59 2F7B F944 9DA4" /* ŒÀ€ÐJk˜CÞY/{ùD¤ */
- $"343D 9AD9 9E0B C7B5 0B7D 2CA1 F638 8A3B" /* 4=šÙž.ǵ.},¡ö8Š; */
- $"BB38 A39B 025A 9BA9 34AC ACF0 063D 5483" /* »8£›.Z›©4¬¬ð.=Tƒ */
- $"FE57 22E4 EB2C C699 AEF3 8EFB 1C8C A23A" /* þW"äë,Æ™®óŽû.Œ¢: */
- $"2C15 D2EF AC9A 91C9 993A 4CB0 2DDC 0A32" /* ,.Ò﬚‘É™:L°-ÜÂ2 */
- $"14B9 50D2 8579 8F9D 5AF2 88DB E726 1B39" /* .¹PÒ…yZòˆÛç&.9 */
- $"3E06 69F9 F300 09E4 D3E8 BB4C A704 10E0" /* >.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<q.‰æC/¼ */
- $"5A24 FEA6 EC06 1F23 79D9 3886 F6F4 7FB9" /* Z$þ¦ì..#yÙ8†öô.¹ */
- $"F892 1A20 DC66 1EB1 D6FD 1C48 52DE 4267" /* ø’. Üf.±Öý.HRÞBg */
- $"77E2 620B 2DC0 6828 575C F7CA 74BC FE73" /* wâb.-Àh(W\÷Êt¼þs */
- $"FABD C9ED 4E8F 71A7 8CCD 8D80 8BD2 8AA3" /* ú½ÉíNq§ŒÍ€‹ÒŠ£ */
- $"45C0 EF2A 387D 038E 8B00 BA81 12CD F93F" /* EÀï*8}.Ž‹.º.Íù? */
- $"E9BE 9134 2928 439B 69CF 3DB1 5DFC 3DAF" /* 龑4)(C›iÏ=±]ü=¯ */
- $"86CA 34A7 4574 C91C 3F99 3EA9 B6E9 F3AF" /* †Ê4§EtÉ.?™>©¶éó¯ */
- $"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ºåò<v */
- $"3898 11F6 D710 7470 00FC 0742 CA59 9E40" /* 8˜.ö×.tp.ü.BÊYž@ */
- $"757C 5952 61FF 4D28 0991 1673 9B01 06B9" /* u|YRaÿM(Æ‘.s›..¹ */
- $"3999 E9B5 06CD B1DA CB08 FF19 DE70 8D10" /* 9™éµ.ͱÚË.ÿ.Þp. */
- $"E725 848E D27D 2B0B 54F0 B60B 26AB CD92" /* ç%„ŽÒ}+.Tð¶.&«Í’ */
- $"E4F8 C007 FF68 6933 E2FF 31D5 435B FF7F" /* äøÀ.ÿhi3âÿ1ÕC[ÿ. */
- $"9A8E 9845 007F FEDA 4C63 9892 513A ABD9" /* šŽ˜E..þÚLc˜’Q:«Ù */
- $"A98A C012 5C99 31C0 D48F E334 671D A695" /* ©ŠÀ.\™1ÀÔã4g.¦• */
- $"C7EF 3AAA FF37 D381 4F42 983F FC4D AE82" /* Çï:ªÿ7ÓOB˜?üM®‚ */
- $"FF43 6555 9E7F 10A3 7B95 415D 41FF 20B3" /* ÿCeUž..£{•A]Aÿ ³ */
- $"8CB1 7302 0000 0000 584E AB14 398C A865" /* Œ±s.....XN«.9Œ¨e */
- $"5A7B 1650 52EB 8BCE 3E92 461D 071B 8F21" /* Z{.PRë‹Î>’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”Õ.-_Ìâ<H.Ak */
- $"1540 59C2 1D35 213D A11C EE70 8D15 5394" /* .@YÂ.5!=¡.îp.S” */
- $"53C6 29CF 4E19 F4CF 5B94 7FFF 7F8B 2813" /* SÆ)ÏN.ôÏ[”.ÿ.‹(. */
- $"3E95 DE81 30D0 3188 2A75 4F35 CB11 DDD5" /* >•Þ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}<u */
- $"E4C6 1003 FECF 3E7E 6252 08C0 4A83 50D7" /* äÆ..þÏ>~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…'ü<jS..MºÑ€. */
- $"8995 3DF4 FA80 FE12 8F5F 40E5 09E6 E7E8" /* ‰•=ôú€þ._@åÆæçè */
- $"C5E7 1309 3E97 E278 0228 1693 F565 F83E" /* Åç.Æ>—â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ŸÌ<x.¾!Ä.°.0ôOÇ */
- $"B76C B9FA 26F6 38C8 116D B8F0 0B9D 818F" /* ·l¹ú&ö8È.m¸ð. */
- $"56F9 F934 AE60 71FD E583 8D07 A4A4 DE41" /* Vùù4®`qýåƒ.¤¤ÞA */
- $"FB75 B83F 384B 11C9 CC5E CD9D FF4C 05A8" /* ûu¸?8K.ÉÌ^ÍÿL.¨ */
- $"D59F 1E59 4797 FF7F DFD8 391C E8BA 72E2" /* ÕŸ.YG—ÿ.ßØ9.èºrâ */
- $"C1F8 9F5C 5317 01E3 EC2D 4120 97D2 BAEC" /* ÁøŸ\S..ãì-A —Òºì */
- $"DBB0 FF30 FC56 2E43 3716 1B7B A8CD 19AE" /* Û°ÿ0üV.C7..{¨Í.® */
- $"7FFF 7FF4 468B FF45 749B 3C67 EE31 1651" /* .ÿ.ôF‹ÿEt›<gî1.Q */
- $"17B2 B21C A982 A185 E8A3 03BC 2DCB C09A" /* .²².©‚¡…è£.¼-ËÀš */
- $"8522 64CF BB21 6955 068D F002 871B 05F3" /* …"dÏ»!iU.ð.‡..ó */
- $"9F44 7384 D624 E1FA A24D 67C7 BC5E F7BF" /* ŸDs„Ö$áú¢MgǼ^÷¿ */
- $"59BC DC3C BE4B 1456 0C6F F2C1 0841 038D" /* Y¼Ü<¾K.V.oòÁ.A. */
- $"723C 14FA 4F19 0AD4 1F88 0A1B FF14 3D93" /* r<.úO.ÂÔ.ˆÂ.ÿ.=“ */
- $"27AA 6E0B 4AA7 6A11 E06D 5D82 C930 1B53" /* 'ªn.J§j.àm]‚É0.S */
- $"0227 A9AA 253A 41E6 31D5 8B87 DC08 819B" /* .'©ª%:Aæ1Õ‹‡Ü.› */
- $"E5EE EA0F 6AA0 0000 0006 9BC0 594E 0004" /* åîê.j ....›ÀYN.. */
- $"D326 312C 0364 8835 C4D7 5040 3724 3CD9" /* Ó&1,.dˆ5Ä×P@7$<Ù */
- $"B889 2E14 12BC F0AD 9D2E 326B 1654 5952" /* ¸‰...¼ð­.2k.TYR */
- $"2B5F 1A9D 5403 C9C5 A731 1B3C 3443 783C" /* +_.T.Éŧ1.<4Cx< */
- $"A459 248B BBC7 DEDC 74AD E2A1 D647 5047" /* ¤Y$‹»ÇÞÜt­â¡ÖGPG */
- $"AD17 15AF FF5C 88C4 025F 4361 3F83 BFC9" /* ­..¯ÿ\ˆÄ._Ca?ƒ¿É */
- $"FF6D 7E58 128D 33D7 7076 E73A 9CF6 76D8" /* ÿm~X.3×pvç:œövØ */
- $"A0FF 2C44 2029 0B59 B427 3BDC 915B 87CF" /*  ÿ,D ).Y´';Ü‘[‡Ï */
- $"75D6 EC52 7793 6DFA A4E2 9E2D 7D25 FBC2" /* uÖìRw“mú¤âž-}%û */
- $"2028 DE78 D868 BEC5 E9D2 BFFA 8B12 9265" /* (ÞxØh¾ÅéÒ¿ú‹.’e */
- $"B01D 92F7 F71E 8782 F1CD 4E98 B46E 6DA5" /* °.’÷÷.‡‚ñÍN˜´nm¥ */
- $"8825 F851 1CE9 9F21 D8E2 86EB BAF4 126F" /* ˆ%øQ.éŸ!Øâ†ëºô.o */
- $"9CB3 0144 009A 6F38 0919 9C1F D0CE D23C" /* œ³.D.šo8Æ.œ.ÐÎÒ< */
- $"C9DD 9273 D8F6 6733 6E5A 2E7A 635C 8723" /* ÉÝ’sØög3nZ.zc\‡# */
- $"6E04 1283 1A43 02CA 74E4 8000 0309 08DB" /* n..ƒ.C.Êtä€..Æ.Û */
- $"EF05 DC00 D116 0D58 1A69 2055 1BA0 D8DE" /* ï.Ü.Ñ..X.i U. ØÞ */
- $"34B6 EA40 CC06 C673 559A 75F2 9B58 C474" /* 4¶ê@Ì.ÆsUšuò›XÄt */
- $"DD4C AB9A 9E6D 653B FCDF 4F33 3707 105E" /* ÝL«šžme;üßO37..^ */
- $"DBCE D327 45FB C663 E1AF 375B B106 B0B8" /* ÛÎÓ'EûÆcá¯7[±.°¸ */
- $"26EE AE4B 538A CF74 588E 928B 58C7 2D93" /* &î®KSŠÏtXŽ’‹XÇ-“ */
- $"371E BC81 0ED0 9F2C 1A18 8DD7 7E65 4FBF" /* 7.¼.П,..×~eO¿ */
- $"511B 63A1 8F26 2A08 A4D3 2BF3 96E6 FC32" /* Q.c¡&*.¤Ó+ó–æü2 */
- $"D457 8287 D843 6D19 2458 0EA4 AC8F 0512" /* ÔW‚‡ØCm.$X.¤¬.. */
- $"831D D4CA 9BFF 5A6E 951A 5897 451F 750C" /* ƒ.ÔÊ›ÿZn•.X—E.u. */
- $"CAD4 89C1 94A7 4BFA 4030 4828 1E37 C049" /* ÊÔ‰Á”§Kú@0H(.7ÀI */
- $"34C4 54B1 1054 2645 14E5 6DFF 7FFF 7328" /* 4ÄT±.T&E.åmÿ.ÿs( */
- $"F1A4 AAA2 4FD2 507D 86D5 FF7F FA43 F49A" /* ñ¤ª¢OÒP}†Õÿ.úCôš */
- $"5049 0839 5964 8186 EE46 1867 158E 9E2C" /* PI.9Yd†îF.g.Žž, */
- $"D618 8FF5 D416 6838 6187 9CF7 21BC DE1F" /* Ö.õÔ.h8a‡œ÷!¼Þ. */
- $"F84F F4E9 ACDB ECD8 6CA6 6725 85B4 4049" /* øOôé¬ÛìØl¦g%…´@I */
- $"AA9E 4935 7E1F 54E7 B0D5 A026 B073 899B" /* ªžI5~.Tç°Õ &°s‰› */
- $"51C4 8C2E 483C B3BF 38A0 4BCF 2042 EE90" /* QÄŒ.H<³¿8 KÏ Bî */
- $"4E1B 8C94 420F 99A7 9EA1 7D96 12A3 8C8D" /* N.Œ”B.™§ž¡}–.£Œ */
- $"819B C97D C518 51CB 0D8A A7A1 7159 EB10" /* ›É}Å.QË.Š§¡qYë. */
- $"4A27 5CD0 0ED7 2688 5F74 CE10 DF6A 5B4F" /* J'\Ð.×&ˆ_tÎ.ßj[O */
- $"E370 A282 105D 2F43 6E74 6B07 05EC 880E" /* ãp¢‚.]/Cntk..ìˆ. */
- $"15AF 5118 9D27 327D 2552 9996 020B 2D9A" /* .¯Q.'2}%R™–..-š */
- $"9AFC 6849 6068 6491 42FA 889C 7949 285A" /* šühI`hd‘BúˆœyI(Z */
- $"7FFE 5B6D DAF2 7FFF 772D E08E B9E4 65A3" /* .þ[mÚò.ÿw-àŽ¹äe£ */
- $"B49A DDC8 FF52 8DA3 B318 F84F F4E9 99ED" /* ´šÝÈÿR£³.øOôé™í */
- $"48C4 CA7E BE77 2634 6A22 1FAD 4752 8D9B" /* HÄÊ~¾w&4j".­GR› */
- $"B935 0449 1A27 9EAB B000 C242 3BB7 72B7" /* ¹5.I.'ž«°.ÂB;·r· */
- $"3ACC B41F 0AC9 CFFD 58DA D99F 498A 21CF" /* :Ì´.ÂÉÏýXÚÙŸIŠ!Ï */
- $"50B8 A155 9BB3 B3DA 13FE 251F 14F2 3431" /* P¸¡U›³³Ú.þ%..ò41 */
- $"6DBF 2774 3EFC 55BB 9CB3 40A4 CA00 A112" /* m¿'t>ü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.Ž½.<Iºæ¾vfì¾ */
- $"59D2 4ACC B4CE 3FAD 2173 25CB E42F 37B8" /* YÒJÌ´Î?­!s%Ëä/7¸ */
- $"F3CC 79EF 695C 10F4 0381 2D14 1B0F D632" /* óÌyïi\.ô.-...Ö2 */
- $"8A1E 9C29 F617 6A4B 204E A147 C08D 1AA5" /* Š.œ)ö.jK N¡GÀ.¥ */
- $"7418 DED9 DE83 A555 A75B AB00 C650 247F" /* t.ÞÙÞƒ¥U§[«.ÆP$. */
- $"0222 5558 731B 54DB 14F6 3A0E 1FAD A8D8" /* ."UXs.TÛ.ö:..­¨Ø */
- $"F327 DC8F AF3F 630B 3BA9 7933 8D30 458C" /* ó'ܯ?c.;©y30EŒ */
- $"4C2F 6E3A 0A64 DDC5 926A 71CB 2347 EE4D" /* L/n:ÂdÝÅ’jqË#GîM */
- $"647B D94D BE24 7F62 6A14 EBE2 696F 8735" /* d{ÙM¾$.bj.ëâio‡5 */
- $"A96F E268 6912 A4A9 3254 0293 CB09 0DC0" /* ©oâhi.¤©2T.“ËÆ.À */
- $"206B EB7B F6B9 0643 5E74 4F2C 555A AE2D" /* kë{ö¹.C^tO,UZ®- */
- $"B16B 7FA3 8ADE 7EAC 764F 9A20 BC94 05F1" /* ±k.£ŠÞ~¬vOš ¼”.ñ */
- $"9AAC 0118 36B8 6B30 D696 6E84 EEC2 5342" /* š¬..6¸k0Ö–n„îÂSB */
- $"03A8 EFD3 CB37 D50D F676 35DB AD6C 280A" /* .¨ïÓË7Õ.öv5Û­l( */
- $"DB04 D23A 0922 A2E3 5F45 EBD1 5C49 F6AA" /* Û.Ò:Æ"¢ã_EëÑ\Iöª */
- $"4579 1BA2 D94E D3F0 7A7E C24E 79B0 5D24" /* Ey.¢ÙNÓðz~ÂNy°]$ */
- $"B98E 23E7 4C4F 54D9 A3CE 389F 63F6 2426" /* ¹Ž#çLOTÙ£Î8Ÿcö$& */
- $"7087 D921 86D6 709F 768D 5684 BB90 47B7" /* p‡Ù!†ÖpŸvV„»G· */
- $"AC32 98D7 E247 3668 E954 8105 EE44 AF58" /* ¬2˜×âG6héT.îD¯X */
- $"13FF 573A 9F89 06C9 FB77 277E 08C9 09E9" /* .ÿW:Ÿ‰.Éûw'~.ÉÆé */
- $"B180 F96E C5AB 1E5D 3029 E229 CE1B B2AD" /* ±€ùnÅ«.]0)â)Î.²­ */
- $"BA11 DD98 0D9C 4C45 66DD 8553 3BA2 6F5B" /* º.ݘ.œLEfÝ…S;¢o[ */
- $"699B CEF3 48A7 6C31 63E6 E189 9C68 B9EC" /* i›ÎóH§l1cæቜh¹ì */
- $"A663 411F EBCB 41AB 8F7E 7EAD 87DA 5BF3" /* ¦cA.ëËA«~~­‡Ú[ó */
- $"AAC9 975B AC1F 712B F7ED DEBD 04C3 B85A" /* ªÉ—[¬.q+÷íÞ½.øZ */
- $"470D D74A B91D 0180 7BAB 4088 5671 6268" /* G.×J¹..€{«@ˆVqbh */
- $"5B4A 54FE C179 1600 7677 830B 0E81 EEB4" /* [JTþÁy..vwƒ..î´ */
- $"056E 79FF 8251 AB20 A6BC 15A5 E71F 7D4A" /* .nyÿ‚Q« ¦¼.¥ç.}J */
- $"2F6E 951A DE36 7A81 C704 9A4A F239 E1DC" /* /n•.Þ6zÇ.šJò9áÜ */
- $"FF6C DE49 B4C8 F6C1 F764 8D19 4686 DFC2" /* ÿlÞI´ÈöÁ÷d.F†ß */
- $"5C72 4A52 9784 F974 DCA4 A177 21DA 9869" /* \rJR—„ùtܤ¡w!Ú˜i */
- $"80A4 5BC6 FD54 A56B C7B1 4705 3A32 C896" /* €¤[ÆýT¥kDZG.:2È– */
- $"4539 25E5 90CC F228 B7F9 ADA5 CC2C 59CA" /* E9%åÌò(·ù­¥Ì,YÊ */
- $"D14D 4B86 9CC0 D367 7EF5 DB6D C2E1 06DB" /* ÑMK†œÀÓg~õÛmÂá.Û */
- $"58BC 0D97 DCFE 3CB1 EA45 C36F 1B60 83C9" /* X¼.—Üþ<±êEÃo.`ƒÉ */
- $"663F B883 83BA A69F 2653 0747 18C7 6D20" /* f?¸ƒƒº¦Ÿ&S.G.Çm */
- $"F2C7 6E01 47DA AB9D 2D83 D5CE 1E9C 779A" /* òÇn.GÚ«-ƒÕÎ.œwš */
- $"5FAE 6015 63DE 317A EFCA 7142 F3F8 A7E1" /* _®`.cÞ1zïÊqBóø§á */
- $"F739 60AB DF24 41BF EB6C AF15 7223 E56C" /* ÷9`«ß$A¿ël¯.r#ål */
- $"8D61 D9D1 C61F 8F8E 8435 6452 C45A 917B" /* aÙÑÆ.Ž„5dRÄZ‘{ */
- $"0856 B8BA 14E2 0A77 ABA0 E605 2E39 63EA" /* .V¸º.âÂw« æ..9cê */
- $"E7F5 4804 6535 7672 575F 37EA 9E69 1A1C" /* çõH.e5vrW_7êži.. */
- $"E380 CB7D C109 2D50 73EF 4119 54BE CBFE" /* ã€Ë}ÁÆ-PsïA.T¾Ëþ */
- $"4552 74A1 3E73 C457 1436 9DFF 3C25 8231" /* ERt¡>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˜å.°ü³."<!¿]î */
- $"0229 A0EE 8B90 5918 5910 F6A6 EEB6 503D" /* .) î‹Y.Y.ö¦î¶P= */
- $"8E76 A3B6 E583 FEFF 5B3D F804 F6EE 956E" /* Žv£¶åƒþÿ[=ø.öî•n */
- $"FEE7 D95F 9D05 AE0B 4926 52B4 23C3 D17A" /* þçÙ_.®.I&R´#ÃÑz */
- $"FC0F CC41 1264 0956 8CA2 6A30 C0D0 275F" /* ü.ÌA.dÆVŒ¢j0ÀÐ'_ */
- $"0CE8 C646 CC49 EF38 CC94 8B6C 1737 9636" /* .èÆFÌIï8Ì”‹l.7–6 */
- $"4EA7 0FE7 217B F3F1 A10D 7E49 242E 6F19" /* N§.ç!{óñ¡.~I$.o. */
- $"A8CF 369A 44DE 6C99 A9D4 24DA 6909 62C3" /* ¨Ï6šDÞl™©Ô$ÚiÆbà */
- $"0C4C D4CD D80E 72E6 FF6B A90E 7080 977B" /* .LÔÍØ.ræÿk©.p€—{ */
- $"4BEB 6A2A 72BB 0574 45FB 1E12 6408 C966" /* Këj*r».tEû..d.Éf */
- $"A632 9AC7 E67D 82C9 3FED 1E27 C1FA C47A" /* ¦2šÇæ}‚É?í.'ÁúÄz */
- $"AFCF 5719 3BCA 3975 BE3A 550B 6DC9 91CC" /* ¯ÏW.;Ê9u¾:U.mÉ‘Ì */
- $"F28E 751C 1B20 E7BB 58FF 0D92 2BF7 DE26" /* òŽu.. ç»Xÿ.’+÷Þ& */
- $"DFE3 B230 78F7 C64E ADF8 7741 F45A E3BC" /* ßã²0x÷ÆN­øwAôZã¼ */
- $"5185 1323 1C74 3288 F720 5DB7 B5C9 1EFD" /* Q….#.t2ˆ÷ ]·µÉ.ý */
- $"C844 7159 7047 A9BA 6CA1 403E CE2E 3522" /* ÈDqYpG©ºl¡@>Î.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<fý$ */
- $"D6C1 DFFC 41CF 26FD 27E3 9482 7299 C4A3" /* ÖÁßüAÏ&ý'㔂r™Ä£ */
- $"A4B0 4F99 5ED7 6507 C196 C060 D7BD 7BA6" /* ¤°O™^×e.Á–À`×½{¦ */
- $"A0A2 C1E7 0ECE 98C4 36F0 B006 0526 5FC4" /*  ¢Áç.ΘÄ6ð°..&_Ä */
- $"CDEF A25D CE59 7B6F 507F C409 957F 43E6" /* Íï¢]ÎY{oP.ÄÆ•.Cæ */
- $"20AB C4BE 33C2 E794 46B7 5341 D8C9 5487" /* «Ä¾3Âç”F·SAØÉT‡ */
- $"3000 A3E6 41BE 7D2A B553 6A8D C345 2E1E" /* 0.£æA¾}*µSjÃE.. */
- $"BF55 F536 52DD 101F D6C9 BB65 B7E4 0CFC" /* ¿Uõ6RÝ..ÖÉ»e·ä.ü */
- $"03D7 F641 F641 7A4F 8EE2 BA7A 352C ED91" /* .×öAöAzOŽâºz5,í‘ */
- $"9057 F893 C46F 62F7 A791 A8DE 8A25 BB17" /* Wø“Äob÷§‘¨ÞŠ%». */
- $"F164 F2ED 43E5 A2E2 17E9 C95D DE1C 45F4" /* ñdòíCå¢â.éÉ]Þ.Eô */
- $"3019 8090 809D D124 EE5C B48E 6C92 2A74" /* 0.€€Ñ$î\´Žl’*t */
- $"ACA0 4F0A 1777 70CF EBEC 112A 9035 16AB" /* ¬ OÂ.wpÏëì.*5.« */
- $"B36D 13D6 9F72 69CD E213 F146 6733 BAA3" /* ³m.ÖŸriÍâ.ñFg3º£ */
- $"0080 0000 0000 0000 0001 0151 0AD3 43F0" /* .€.........QÂÓCð */
- $"14A4 0000 61F0 20D9 9F3A 47FC 60A2 4780" /* .¤..að ÙŸ:Gü`¢G€ */
- $"F2D0 2A57 2C4C D349 5B9A 1BE3 0D39 80AD" /* òÐ*W,LÓI[š.ã.9€­ */
- $"72C4 873D 5028 F09E F0F5 700F B776 4B38" /* rć=P(ðžðõp.·vK8 */
- $"4FC6 7D26 AE5D 219E DDCE 4AA3 9AA9 FE19" /* OÆ}&®]!žÝÎJ£š©þ. */
- $"EC25 FEF0 0626 D259 8ECF 0364 6192 A000" /* ì%þð.&ÒYŽÏ.da’ . */
- $"0000 0000 0000 0000 0184 84B4 4FF0 1848" /* .........„„´Oð.H */
- $"4BC2 3700 0000 0000 0000 00B5 DA5E 3FF1" /* KÂ7........µÚ^?ñ */
- $"C9FC 9186 4A80 0000 0000 0000 0000 0000" /* Éü‘†J€.......... */
- $"0510 0FC3 251B 71C0 D918 64A8 0000 0000" /* ...Ã%.qÀÙ.d¨.... */
- $"0000 0000 0000 07E1 1EE1 F164 E11A 319D" /* .......á.áñdá.1 */
- $"3806 659F 8C35 7012 B17E 6096 52F0 8E96" /* 8.eŸŒ5p.±~`–RðŽ– */
- $"1438 1EBF 363A 49C9 51BD 3517 4ADA 7060" /* .8.¿6:IÉQ½5.JÚp` */
- $"0849 8F8B FCEC FD48 0000 54DF 4C0B E043" /* .I‹üìýH..TßL.àC */
- $"F3B6 1CEB 518A F2B1 5A9C 9500 0000 0000" /* ó¶.ëQŠò±Zœ•..... */
- $"0196 C058 0636 AF4B 041F 37EC DE6F 4B4E" /* .–ÀX.6¯K..7ìÞoKN */
- $"291D A2A6 3CB8 9BAC 4B0C 5017 9031 0EF1" /* ).¢¦<¸›¬K.P.1.ñ */
- $"3CF7 F63B 73A1 B4A6 9EA7 0513 C571 8EA8" /* <÷ö;s¡´¦ž§..ÅqŽ¨ */
- $"5D0A 28FC DCB6 D27A 0000 0000 0159 D076" /* ]Â(üܶÒz.....YÐv */
- $"3D1E 84A9 1C76 876E 7B6B 8519 1F9F 01C6" /* =.„©.v‡n{k…..Ÿ.Æ */
- $"1A11 B2A2 4841 4D47 5463 5D18 2AFE 54F5" /* ..²¢HAMGTc].*þTõ */
- $"591E 5FF1 39C7 C0CD 0D20 F366 59DE FE22" /* Y._ñ9ÇÀÍ. ófYÞþ" */
- $"B12C 4608 009D F105 49C8 16B5 417A 6079" /* ±,F..ñ.IÈ.µAz`y */
- $"40B0 7E7A C4B3 83B8 485D 42B1 4000 0000" /* @°~zijƒ¸H]B±@... */
- $"0E9F 0340 5469 49BB 5767 B4BE 47AF 19B3" /* .Ÿ.@TiI»Wg´¾G¯.³ */
- $"4E69 B99F 25DF C3C0 1B9C 5455 41D2 F508" /* Ni¹Ÿ%ßÃÀ.œTUAÒõ. */
- $"9900 1F13 B43E C345 C4B3 C066 8A27 C3D3" /* ™...´>Ã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\ˆ‘ô<i×kMï)Ú */
- $"F378 1035 720A CE61 C2E3 5776 CA53 F43B" /* óx.5rÂÎaÂãWvÊSô; */
- $"4FCB 79E4 5164 1270 A23E 6048 2089 7B12" /* OËyäQd.p¢>`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
--- a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
+++ /dev/null
Binary files 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
--- a/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns
+++ /dev/null
Binary files 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
--- a/indra/newview/installers/darwin/firstlook-dmg/background.jpg
+++ /dev/null
Binary files 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" /* ÿÿÿ<Aÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FD35 3DFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿý5=ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FA30 3CFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿú0<ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FB2F 1247 4B4A 4A4A 4A4A 4A4A 4A4A" /* ÿÿû/.GKJJJJJJJJJ */
- $"4A4B 450F 0101 0201 0101 0101 0101 0101" /* JKE............. */
- $"0102 0001 696C 3332 0000 05AB FF00 BE00" /* ....il32...«ÿ.¾. */
- $"025A 7881 847F 0064 9200 0262 BBC4 83C2" /* .Zx„..d’..b»ÄƒÂ */
- $"02C7 8451 9000 0255 86BF 84BC 03BF A064" /* .Ç„Q..U†¿„¼.¿ d */
- $"6389 6400 6281 0003 5770 A2A2 85A1 01A3" /* c‰d.b..Wp¢¢…¡.£ */
- $"9D89 9B07 9C97 6758 005B 95AC 88A7 02A8" /* ‰›.œ—gX.[•¬ˆ§.¨ */
- $"A4A7 89A8 05AB 925A 61A7 AE88 AC03 ABCA" /* ¤§‰¨.«’Za§®ˆ¬.«Ê */
- $"AEAB 88AC 05AE A15E 5B9A A788 A503 A0D7" /* ®«ˆ¬.®¡^[š§ˆ¥. × */
- $"D79F 88A5 05A8 9559 5990 A288 9F04 9BAB" /* ןˆ¥.¨•YY¢ˆŸ.›« */
- $"FBAE 9C87 9F05 A28B 5857 879D 879A 0595" /* û®œ‡Ÿ.¢‹XW‡‡š.• */
- $"BDD6 E6E3 9487 9A05 9D82 5656 7F97 8594" /* ½Öæ㔇š.‚VV.—…” */
- $"0995 8FB3 F4CF B1FF AD90 9585 9405 977A" /* Æ•³ôϱÿ­•…”.—z */
- $"0000 7793 8690 078D CDF8 B886 E8E5 8B86" /* ..w“†.Íø¸†è勆 */
- $"9005 9372 0000 708F 828C 808B 0984 BBF7" /* .“r..p‚Œ€‹Æ„»÷ */
- $"C687 85AB FFA9 8580 8B82 8C05 8E6D 0000" /* Ƈ…«ÿ©…€‹‚Œ.Žm.. */
- $"6B8A 8287 0D88 8785 8FF3 FDA1 8186 84E5" /* kŠ‚‡.ˆ‡…óý¡†„å */
- $"E484 8684 8705 8868 0000 6685 8183 117E" /* 䄆„‡.ˆh..f…ƒ.~ */
- $"B3E3 D0D2 FFDC D4DF DDDB D2FD D0DE E2B7" /* ³ãÐÒÿÜÔßÝÛÒýÐÞâ· */
- $"8082 8304 6400 0062 8081 7F06 76C5 FFDB" /* €‚ƒ.d..b€..vÅÿÛ */
- $"F9F3 E381 FF06 F6D4 BFF4 FFD3 7882 7F03" /* ùóãÿ.öÔ¿ôÿÓx‚.. */
- $"6100 005F 827B 0675 B0D9 E1FF C8D8 82DF" /* a.._‚{.u°ÙáÿÈØ‚ß */
- $"05BF F3C9 DCB9 7681 7B04 7A5E 0000 5C82" /* .¿óÉܹv{.z^..\‚ */
- $"7706 786F 96FF E879 7281 7306 7278 C8C2" /* w.xo–ÿèyrs.rxÈÂ */
- $"7074 7880 7706 7875 5C00 005A 7382 7405" /* ptx€w.xu\..Zs‚t. */
- $"71C1 E19A 6D74 8173 0574 6BA2 FFAD 6C81" /* qÁášmts.tk¢ÿ­l */
- $"7406 7571 5B00 005A 6F81 7104 6F77 F2AF" /* t.uq[..Zoq.owò¯ */
- $"6984 7105 6E7E FAFB 836D 8071 0772 6D5A" /* i„q.n~úûƒm€q.rmZ */
- $"0000 586C 6F80 6E03 6C7B 9368 866E 0467" /* ..Xlo€n.l{“h†n.g */
- $"C3FA 8B69 806E 076F 6A59 0000 586A 6E81" /* Ãú‹i€n.ojY..Xjn */
- $"6D01 6C68 876D 036B 717D 6B81 6D07 6E69" /* m.lh‡m.kq}km.ni */
- $"5900 0058 666A 8E69 0168 6682 6903 6A65" /* Y..XfjŽi.hf‚i.je */
- $"5900 BD59 0000 9B59 9E00 FF00 BE00 027D" /* Y.½Y..›Yž.ÿ.¾..} */
- $"98A0 829E 029F 9E85 9200 0284 D5DE 83DC" /* ˜ ‚ž.Ÿž…’..„ÕÞƒÜ */
- $"02E0 A275 9000 0279 A7DB 84D8 03DB BD87" /* .à¢u..y§Û„Ø.Û½‡ */
- $"8689 8700 8581 0003 7A92 C0C0 85BF 01C0" /* †‰‡.…..z’ÀÀ…¿.À */
- $"BB89 B907 BAB4 887B 007E B7CC 88C7 01C8" /* »‰¹.º´ˆ{.~·ÌˆÇ.È */
- $"C68A C805 CBB2 7C84 CAD1 89CF 02DE CFCE" /* ÆŠÈ.˲|„ÊщÏ.ÞÏÎ */
- $"88CF 05D2 C380 7FBF CC88 CA03 C7E8 E5C6" /* ˆÏ.ÒÀ.¿ÌˆÊ.ÇèåÆ */
- $"88CA 05CD B87C 7CB7 CA88 C704 C4CD FCCD" /* ˆÊ.͸||·ÊˆÇ.ÄÍüÍ */
- $"C587 C705 CAB0 7A7A AFC7 87C4 05C1 D4E3" /* ŇÇ.Ê°zz¯Ç‡Ä.ÁÔã */
- $"F0ED C087 C405 C8A8 7979 A7C4 85C0 09C1" /* ðíÀ‡Ä.Ȩyy§Ä…ÀÆÁ */
- $"BDD0 F7E1 D1FF CDBE C185 C005 C4A1 0000" /* ½Ð÷áÑÿ;Á…À.Ä¡.. */
- $"A0C1 86BD 07BA DEFB D5B7 F2EE B986 BD05" /*  Á†½.ºÞûÕ·ò½. */
- $"C09A 0000 9ABE 85BA 09B6 D4F9 DBB8 B6CD" /* Àš..š¾…ºÆ¶ÔùÛ¸¶Í */
- $"FFCA B785 BA05 BD94 0000 94B9 83B6 0EB4" /* ÿÊ·…º.½”..”¹ƒ¶.´ */
- $"B3B9 F7FE C4B0 B4B2 EFED B2B4 B4B5 82B6" /* ³¹÷þÄ°´²ïí²´´µ‚¶ */
- $"05B8 8F00 008E B481 B211 AFCD EBDF E0FF" /* .¸..Ž´².¯Íëßàÿ */
- $"E8E2 E9E8 E6E0 FEDF E8EA D0B0 81B2 05B3" /* èâéèæàþßèêа².³ */
- $"8A00 0089 AF81 AD06 A8D9 FFE7 FBF7 EB81" /* Š..‰¯­.¨Ùÿçû÷ë */
- $"FF06 F9E1 D3F8 FFE3 A980 AD05 AEAD 8600" /* ÿ.ùáÓøÿã©€­.®­†. */
- $"0086 82A9 06A5 CBE5 EAFF DAE5 82EA 05D3" /* .†‚©.¥ËåêÿÚå‚ê.Ó */
- $"F7DA E8D1 A680 A906 AAA7 8300 0082 A382" /* ÷ÚèѦ€©.ª§ƒ..‚£‚ */
- $"A405 9FB7 FFF0 A5A1 81A2 05A1 A5D9 D39F" /* ¤.Ÿ·ÿ𥡢.¡¥ÙÓŸ */
- $"A281 A406 A5A1 8000 0080 9F82 A004 9ED2" /* ¢¤.¥¡€..€Ÿ‚ .žÒ */
- $"E9BA 9B83 A004 9ABF FFC5 9A81 A007 A19C" /* 麛ƒ .š¿ÿÅš .¡œ */
- $"7F00 007E 999D 809B 059A 9FF6 C696 9C83" /* ...~™€›.šŸöÆ–œƒ */
- $"9B05 99A4 FBFB A799 809B 079C 977D 0000" /* ›.™¤ûû§™€›.œ—}.. */
- $"7C95 9980 9803 97A1 B295 8698 0494 D5FC" /* |•™€˜.—¡²•†˜.”Õü */
- $"AC95 8098 0799 937C 0000 7C93 9782 9600" /* ¬•€˜.™“|..|“—‚–. */
- $"9387 9603 9599 A295 8196 0797 917C 0000" /* “‡–.•™¢•–.—‘|.. */
- $"7B8E 928D 9102 9290 8F82 9103 928C 7B00" /* {Ž’‘.’‚‘.’Œ{. */
- $"BD7C 0000 9B7C 9E00 FF00 BE00 0275 9199" /* ½|..›|ž.ÿ.¾..u‘™ */
- $"8498 007E 9200 027D D0D9 83D7 02DB 9B6C" /* „˜.~’..}ÐÙƒ×.Û›l */
- $"9000 0271 A0D5 84D2 03D5 B67F 7E89 7F00" /* ..q Õ„Ò.Õ¶.~‰.. */
- $"7D81 0003 728B BBBB 85BA 02BB B6B3 88B4" /* }..r‹»»…º.»¶³ˆ´ */
- $"08B5 AF81 7300 76B0 C6C2 87C1 01C2 C089" /* .µ¯s.v°Æ‡Á.ÂÀ‰ */
- $"C206 C3C5 AB75 7CC3 CA89 C801 DBC9 89C8" /* Â.ÃÅ«u|ÃʉÈ.ÛÉ‰È */
- $"05CB BD78 77B9 C588 C304 C0E5 E2BF C487" /* .˽xw¹ÅˆÃ.Àåâ¿Ä‡ */
- $"C305 C6B2 7574 B0C3 87C0 05BF BCC7 FCC7" /* Ã.Ʋut°Ã‡À.¿¼ÇüÇ */
- $"BE87 C005 C3A9 7272 A7BF 87BC 05B9 D0E1" /* ¾‡À.érr§¿‡¼.¹Ðá */
- $"EEEB B887 BC05 C0A1 7171 A0BC 86B8 07B5" /* î븇¼.À¡qq ¼†¸.µ */
- $"CBF6 DDCB FFC7 B586 B805 BB99 0000 98B9" /* ËöÝËÿǵ†¸.»™..˜¹ */
- $"86B5 07B2 DBFA D0AE F0EC B186 B505 B892" /* †µ.²ÛúЮð챆µ.¸’ */
- $"0000 91B5 82B2 80B1 09AC D0F9 D7AF ADC7" /* ..‘µ‚²€±Æ¬Ðùׯ­Ç */
- $"FFC4 AD80 B182 B205 B48C 0000 8BB1 81AD" /* ÿÄ­€±‚².´Œ..‹±­ */
- $"11AE ADAC ABB1 F6FD BDA8 ABAA EDEB A9AB" /* .®­¬«±öý½¨«ªíë©« */
- $"ACAC AE81 AD05 AF87 0000 86AB 81A9 11A6" /* ¬¬®­.¯‡..†«©.¦ */
- $"C8E9 DCDE FFE5 DFE7 E6E4 DDFE DCE6 E9CB" /* ÈéÜÞÿåßçæäÝþÜæéË */
- $"A781 A905 AA82 0000 81A6 81A5 069F D6FF" /* §©.ª‚..¦¥.ŸÖÿ */
- $"E4FA F6EA 81FF 06F8 DFCF F7FF E0A0 80A5" /* äúöêÿ.øßÏ÷ÿà €¥ */
- $"05A6 A47E 0000 7D82 A006 9BC6 E3E8 FFD6" /* .¦¤~..}‚ .›ÆãèÿÖ */
- $"E282 E805 CFF6 D7E6 CC9C 80A0 06A1 9E7B" /* â‚è.Ïö×æÌœ€ .¡ž{ */
- $"0000 7A9B 829C 0496 B1FF EF9D 8399 049C" /* ..z›‚œ.–±ÿ.œ */
- $"D6D0 969A 819C 069D 9979 0000 7897 8198" /* ÖЖšœ.™y..x—˜ */
- $"0597 95CF E7B4 9283 9704 91BA FFC0 9181" /* .—•Ïç´’ƒ—.‘ºÿÀ‘ */
- $"9807 9994 7700 0076 9295 8094 0493 98F5" /* ˜.™”w..v’•€”.“˜õ */
- $"C28E 8494 0592 9DFB FBA0 9180 9407 958F" /* ÂŽ„”.’ûû ‘€”.• */
- $"7500 0074 8E91 8090 038F 9AAC 8C86 9004" /* u..tŽ‘€.š¬Œ†. */
- $"8BD1 FBA6 8C80 9007 918B 7400 0074 8B8F" /* ‹Ñû¦Œ€.‘‹t..t‹ */
- $"808E 048F 8E8B 8E8F 848E 048F 8D91 9B8D" /* €Ž.Ž‹Ž„Ž.‘› */
- $"818E 078F 8974 0000 7487 8B8E 8A01 8987" /* Ž.‰t..t‡‹ŽŠ.‰‡ */
- $"828A 038B 8574 00BD 7400 009B 749E 006C" /* ‚Š.‹…t.½t..›tž.l */
- $"386D 6B00 0004 0800 0000 0000 0000 0000" /* 8mk............. */
- $"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 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 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 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0B76 8889 8989" /* ...........vˆ‰‰‰ */
- $"8989 8988 3800 0000 0000 0000 0000 0000" /* ‰‰‰ˆ8........... */
- $"0000 0000 0000 0000 0000 36FF FFFF FFFF" /* ..........6ÿÿÿÿÿ */
- $"FFFF FFFF A301 0000 0000 0000 0000 0000" /* ÿÿÿÿ£........... */
- $"0000 0000 0000 0000 0006 A4FF FFFF FFFF" /* ..........¤ÿÿÿÿÿ */
- $"FFFF FFFF DE59 3F40 4040 4040 4040 4040" /* ÿÿÿÿÞY?@@@@@@@@@ */
- $"4040 4033 0000 0000 1384 F8F3 F3F3 F3F3" /* @@@3.....„øóóóóó */
- $"F3F3 F3F3 F7F9 F7F7 F7F7 F7F7 F7F7 F7F7" /* óóóó÷ù÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F1 520D 001D E1FF FAFB FBFB FBFB" /* ÷÷÷ñR...áÿúûûûûû */
- $"FBFB FBFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ûûûûûûûûûûûûûûûû */
- $"FBFB FBFB FFCD 0E39 FFFF FFFF FFFF FFFF" /* ûûûûÿÍ.9ÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 1F26 F6FF FFFF FFFF FFFF" /* ÿÿÿÿÿø.&öÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE5 1318 ECFF FFFF FFFF FFFF" /* ÿÿÿÿÿå..ìÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD5 0A0F DDFF FFFF FFFF FFFF" /* ÿÿÿÿÿÕÂ.Ýÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC6 0206 D0FF FFFF FFFF FFFF" /* ÿÿÿÿÿÆ..Ðÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB6 0000 C2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¶..Âÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 0000 B2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¥..²ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF95 0000 A4FF FFFF FFFF FFFF" /* ÿÿÿÿÿ•..¤ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF87 0000 96FF FFFF FFFF FFFF" /* ÿÿÿÿÿ‡..–ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF7A 0000 8AFF FFFF FFFF FFFF" /* ÿÿÿÿÿz..Šÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6D 0000 7FFF FFFF FFFF FFFF" /* ÿÿÿÿÿm...ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF63 0000 77FF FFFF FFFF FFFF" /* ÿÿÿÿÿc..wÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5A 0000 6FFF FFFF FFFF FFFF" /* ÿÿÿÿÿZ..oÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF54 0000 69FF FFFF FFFF FFFF" /* ÿÿÿÿÿT..iÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4F 0000 65FF FFFF FFFF FFFF" /* ÿÿÿÿÿO..eÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4C 0000 64FF FFFF FFFF FFFF" /* ÿÿÿÿÿL..dÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4B 0000 61FF FFFF FFFF FFFF" /* ÿÿÿÿÿK..aÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF48 0004 2C6D 7574 7474 7474" /* ÿÿÿÿÿH..,muttttt */
- $"7474 7474 7474 7474 7474 7474 7474 7474" /* tttttttttttttttt */
- $"7474 7475 6824 0202 0D18 1C1C 1C1C 1C1C" /* tttuh$.......... */
- $"1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C" /* ................ */
- $"1C1C 1C1C 170C 0100 0103 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0301 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0069 6833 3200 0009 DEFF" /* .......ih32..ÆÞÿ */
- $"00FF 00FF 00AD 0001 5E66 8865 0261 5859" /* .ÿ.ÿ.­..^fˆe.aXY */
- $"9C00 025E A6BA 87B7 04B9 AE67 5659 9B00" /* œ..^¦º‡·.¹®gVY›. */
- $"0266 BABF 87BE 04BF BC70 5459 9A00 0252" /* .fº¿‡¾.¿¼pTYš..R */
- $"81BD 89BA 03BC 8652 5491 5585 0003 5580" /* ½‰º.¼†RT‘U…..U€ */
- $"B7BA 89B9 02BA B497 918F 0191 7683 0003" /* ·º‰¹.º´—‘.‘vƒ.. */
- $"5864 9399 8B97 0098 929B 039D 855F 5A80" /* Xd“™‹—.˜’›.…_Z€ */
- $"0002 649D A990 A500 A490 A509 A6A9 9B65" /* ..d©¥.¤¥Æ¦©›e */
- $"0000 85B4 AFAF 8EAE 03B0 AEAC AF8E AE07" /* ..…´¯¯Ž®.°®¬¯Ž®. */
- $"AFAF B280 0000 80AD 8FA9 04A8 B2E7 ACA8" /* ¯¯²€..€­©.¨²ç¬¨ */
- $"90A9 05AB 7A00 0076 A98F A604 A5A4 F1E0" /* ©.«z..v©¦.¥¤ñà */
- $"A08F A606 A7A6 7100 006D A390 A204 9DC8" /*  ¦.§¦q..m£¢.È */
- $"FFB9 9C8E A207 A3A0 6A00 0065 9D9F 8D9E" /* ÿ¹œŽ¢.£ j..eŸž */
- $"069F 9C96 A2FA EF9C 8E9E 079F 9A65 0000" /* .Ÿœ–¢úž.Ÿše.. */
- $"6097 9C8D 9B07 97A5 E2C6 D2FF C394 8D9B" /* `—œ›.—¥âÆÒÿÔ› */
- $"079C 9461 0000 5E90 988C 9709 959A D5CE" /* .œ”a..^˜Œ—Æ•šÕÎ */
- $"E4B2 FCF4 9A95 8C97 0799 8D5E 0000 5A8B" /* ä²üôš•Œ—.™^..Z‹ */
- $"968C 9409 8EC8 FFF6 C18D DDFF C78C 8C94" /* –Œ”ÆŽÈÿöÁÝÿÇŒŒ” */
- $"0796 875B 0000 5885 938B 910B 8F8F E5FF" /* .–‡[..X…“‹‘.åÿ */
- $"FFA9 87AA FFF7 988E 8B91 0793 8159 0000" /* ÿ©‡ªÿ÷˜Ž‹‘.“Y.. */
- $"577F 908B 8E0B 87CF D4D0 CA89 8D8B E0FF" /* W.‹Ž.‡ÏÔÐʉ‹àÿ */
- $"C786 8B8E 0790 7B58 0000 5779 8C86 8A81" /* dž‹Ž.{X..WyŒ†Š */
- $"8B0D 84A5 FFFF E38B 898B 85A8 FFF8 9387" /* ‹.„¥ÿÿ㋉‹…¨ÿø“‡ */
- $"818B 868A 078C 7557 0000 5674 8A85 8800" /* ‹†Š.ŒuW..VtŠ…ˆ. */
- $"8680 820E 8385 E4FF FFB9 7C83 8381 7FDD" /* †€‚.ƒ…äÿÿ¹|ƒƒ.Ý */
- $"FFC6 7E81 8200 8585 8807 8A71 5759 0056" /* ÿÆ~‚.……ˆ.ŠqWY.V */
- $"6F87 8485 1983 929F A3A0 94B0 FFFF E39D" /* o‡„….ƒ’Ÿ£ ”°ÿÿã */
- $"9F9E 9DA3 9AB0 FBF4 98A0 A09F A192 8484" /* Ÿž£š°ûô˜  Ÿ¡’„„ */
- $"8507 876D 5759 0056 6984 8482 197C A7EB" /* ….‡mWY.Vi„„‚.|§ë */
- $"FBF1 C2EC FFFB C1ED F2F6 ECFB EDD9 DBFF" /* ûñÂìÿûÁíòöìûíÙÛÿ */
- $"D4EE F0F6 F6B7 7C84 8207 8369 5700 5956" /* Ôîðöö·|„‚.ƒiW.YV */
- $"6481 847F 0979 A3FF FFEB CCFF FFD5 E084" /* d„.Æy£ÿÿëÌÿÿÕà„ */
- $"FF03 C8F1 BCC4 80FF 01C0 7785 7F06 6557" /* ÿ.Èñ¼Ä€ÿ.Àw…..eW */
- $"5959 5661 7E84 7D08 76A3 FFFF C3F4 FFF5" /* YYVa~„}.v£ÿÿÃôÿõ */
- $"CB85 FF08 EDA8 CCC0 F2FF FFC1 7485 7D06" /* Ë…ÿ.í¨ÌÀòÿÿÁt…}. */
- $"6358 5959 575E 7B84 7A09 7692 D0BE D6FF" /* cXYYW^{„zÆv’оÖÿ */
- $"FFC2 B9D0 84CF 08CD B9FF F1B1 CED0 A574" /* ÿ¹ЄÏ.͹ÿñ±ÎÐ¥t */
- $"847A 0679 6058 5959 585D 8678 0776 6A9C" /* „z.y`XYYX]†x.vjœ */
- $"FFFF F081 7086 7106 75D1 D89D 6A71 7484" /* ÿÿðp†q.uÑØjqt„ */
- $"7808 7976 5E58 5959 585B 7486 7505 73B9" /* x.yv^XYYX[t†u.s¹ */
- $"F5FF AC6D 8775 0570 8CEB F889 6F85 7508" /* õÿ¬m‡u.pŒëø‰o…u. */
- $"7672 5C58 5959 5859 7285 7306 6F8A E1C6" /* vr\XYYXYr…s.oŠáÆ */
- $"C176 7287 7306 7179 EEFF E173 7184 7308" /* Ávr‡s.qyîÿásq„s. */
- $"7470 5B58 5959 5859 7085 7205 6B97 FFE7" /* tp[XYYXYp…r.k—ÿç */
- $"776E 8972 0569 C6FF FFB4 6A84 7202 736E" /* wn‰r.iÆÿÿ´j„r.sn */
- $"5A81 5901 586D 856F 0567 B9D9 786B 7089" /* ZY.Xm…o.g¹Ùxkp‰ */
- $"6F06 6993 FFFF F173 6D83 6F01 706B 8259" /* o.i“ÿÿñsmƒo.pk‚Y */
- $"0157 6B85 6E03 6C8C 7269 8B6E 066D 6BD3" /* .Wk…n.lŒri‹n.mkÓ */
- $"FFCB 6C6D 836E 026F 6958 8159 0256 6A6E" /* ÿËlmƒn.oiXY.Vjn */
- $"856D 0169 6B8D 6D04 6A73 8A6D 6B84 6D02" /* …m.ikm.jsŠmk„m. */
- $"6E68 5881 5902 566A 6E98 6D02 6B67 6C85" /* nhXY.Vjn˜m.kgl… */
- $"6D02 6E68 5881 5902 5665 69A3 6802 6963" /* m.nhXY.Vei£h.ic */
- $"5881 5901 5858 A559 0058 B059 0000 AB59" /* XY.XX¥Y.X°Y..«Y */
- $"8000 A959 DF00 FF00 FF00 FF00 AD00 0081" /* €.©Yß.ÿ.ÿ.ÿ.­.. */
- $"8987 0283 7B7C 9C00 0280 C1D3 87D1 04D2" /* ‰‡.ƒ{|œ..€ÁÓ‡Ñ.Ò */
- $"C787 7A7C 9B00 0288 D4DA 87D9 04DA D68F" /* LJz|›..ˆÔÚ‡Ù.ÚÖ */
- $"787C 9A00 0276 A2D8 89D6 02D7 A476 9278" /* x|š..v¢Ø‰Ö.פv’x */
- $"8500 0379 A2D3 D789 D503 D6D0 B5AD 90AE" /* …..y¢Ó׉Õ.Öе­® */
- $"01B0 9683 0003 7C87 B1B7 8BB5 00B6 92B9" /* .°–ƒ..|‡±·‹µ.¶’¹ */
- $"03BA A282 7D80 0003 87BD C8C5 90C4 00C5" /* .º¢‚}€..‡½ÈÅÄ.Å */
- $"8FC4 08C5 C8B9 8700 00A7 D6D1 90D0 01CD" /* Ä.Åȹ‡..§ÖÑÐ.Í */
- $"CF90 D006 D1D3 A000 00A3 D18F CD04 CCD1" /* ÏÐ.ÑÓ ..£ÑÍ.ÌÑ */
- $"EECC CC90 CD05 CF9B 0000 9ACE 90CB 03CA" /* îÌÌÍ.Ï›..šÎË.Ê */
- $"F7E9 C68F CB07 CCCB 9300 0091 C9C9 8FC8" /* ÷éÆË.ÌË“..‘ÉÉÈ */
- $"04C6 DFFF D2C5 8EC8 07C9 C68D 0000 8BC5" /* .ÆßÿÒÅŽÈ.ÉÆ..‹Å */
- $"C78D C606 C7C5 BFC7 FDF3 C38E C607 C7C0" /* ÇÆ.ÇÅ¿ÇýóÃŽÆ.ÇÀ */
- $"8800 0086 C0C5 8DC4 07C2 C7EB DAE4 FFD9" /* ˆ..†ÀÅÄ.ÂÇëÚäÿÙ */
- $"C08D C407 C6BC 8400 0082 BBC4 8CC2 09C1" /* ÀÄ.Ƽ„..‚»ÄŒÂÆÁ */
- $"C2E2 DEED D1FD F7C1 C18C C207 C4B6 8100" /* ÂâÞíÑý÷ÁÁŒÂ.Ķ. */
- $"007F B5C2 8CC0 09BC DBFF F8D7 BBEA FFDB" /* ..µÂŒÀƼÛÿø×»êÿÛ */
- $"BA8C C007 C2B0 7E00 007C B0C0 8BBE 0BBD" /* ºŒÀ.°~..|°À‹¾.½ */
- $"BAED FFFF CCB8 CCFF F9BF BC8B BE07 C0AA" /* ºíÿÿ̸Ìÿù¿¼‹¾.Àª */
- $"7C00 007B ABBF 8BBC 0BB7 DEE1 DFDF B9BB" /* |..{«¿‹¼.·Þáßß¹» */
- $"BAED FFDA B78B BC07 BFA5 7B00 007A A5BC" /* ºíÿÚ·‹¼.¿¥{..z¥¼ */
- $"89B9 0EBA B6C6 FFFF ECB9 B9BA B6CB FFFA" /* ‰¹.º¶Æÿÿì¹¹º¶Ëÿú */
- $"BCB8 8AB9 07BC 9F7A 0000 799F B984 B601" /* ¼¸Š¹.¼Ÿz..yŸ¹„¶. */
- $"B7B5 82B3 0CEC FFFF D4AF B3B3 B2B1 EAFF" /* ·µ‚³.ìÿÿÔ¯³³²±êÿ */
- $"D9B0 81B3 01B5 B784 B607 B899 797C 0079" /* Ù°³.µ·„¶.¸™y|.y */
- $"99B7 84B4 13B3 B9BE C1C0 B9CB FFFF EDBE" /* ™·„´.³¹¾ÁÀ¹Ëÿÿí¾ */
- $"BFBE BEC1 BCCB FCF7 BB80 BF02 C0B9 B384" /* ¿¾¾Á¼Ëü÷»€¿.À¹³„ */
- $"B407 B694 797C 0079 93B4 84B1 19AD C7F1" /* ´.¶”y|.y“´„±.­Çñ */
- $"FBF5 D6F1 FFFD D5F2 F5F8 F1FB F2E4 E7FF" /* ûõÖñÿýÕòõøñûòäçÿ */
- $"E2F3 F4F8 F8D0 AD84 B107 B290 7A00 7C79" /* âóôøøЭ„±.²z.|y */
- $"8DB0 84AE 09AA C3FF FFF2 DCFF FFE2 E984" /* °„®ÆªÃÿÿòÜÿÿâé„ */
- $"FF03 D9F6 D1D8 80FF 01D6 A985 AE06 8C7A" /* ÿ.ÙöÑØ€ÿ.Ö©…®.Œz */
- $"7C7C 7989 AD84 AB08 A7C3 FFFF D5F7 FFF8" /* ||y‰­„«.§ÃÿÿÕ÷ÿø */
- $"DA85 FF08 F2C2 DAD3 F6FF FFD7 A583 AB08" /* Ú…ÿ.òÂÚÓöÿÿ×¥ƒ«. */
- $"ACAA 897A 7C7C 7A86 A984 A809 A5B7 E0D3" /* ¬ª‰z||z†©„¨Æ¥·àÓ */
- $"E2FF FFD6 D0E0 84DF 08DD CFFF F5CB DFE0" /* âÿÿÖÐà„ß.ÝÏÿõËßà */
- $"C3A4 83A8 07A9 A686 7A7C 7C7A 8386 A506" /* 䃨.©¦†z||zƒ†¥. */
- $"A39B BAFF FFF5 AA87 A006 A3DF E2BA 9BA1" /* £›ºÿÿõª‡ .£ß⺛¡ */
- $"A284 A507 A6A2 837B 7C7C 7B82 87A2 059F" /* ¢„¥.¦¢ƒ{||{‚‡¢.Ÿ */
- $"CCF8 FFC7 9C87 A205 9EAF F0F9 AD9E 85A2" /* ÌøÿÇœ‡¢.ž¯ðù­ž…¢ */
- $"08A3 9F81 7B7C 7C7B 7F9D 859F 069C AEE8" /* .£Ÿ{||{.…Ÿ.œ®è */
- $"D4D3 A09E 879F 069D A3F4 FFE8 9D9E 849F" /* ÔÓ ž‡Ÿ.£ôÿèž„Ÿ */
- $"09A0 9B7F 7B7C 7C7B 7E9A 9D84 9C05 98B5" /* Æ ›.{||{~š„œ.˜µ */
- $"FFEE 9F99 899C 0596 D7FF FFC9 9684 9C09" /* ÿ‰œ.–×ÿÿÉ–„œÆ */
- $"9D97 7E7B 7C7C 7B7C 989B 849A 0494 CCE4" /* —~{||{|˜›„š.”Ìä */
- $"A097 8A9A 0695 B3FF FFF4 9C99 839A 019B" /*  —Šš.•³ÿÿôœ™ƒš.› */
- $"9482 7C02 7B95 9984 9803 97AD 9B95 8B98" /* ”‚|.{•™„˜.—­›•‹˜ */
- $"0697 96E0 FFDA 9797 8398 0199 9282 7C02" /* .—–àÿÚ——ƒ˜.™’‚|. */
- $"7A93 9785 9601 9395 8D96 0494 9AAB 9695" /* z“—…–.“•–.”š«–• */
- $"8496 0297 8F7B 817C 027A 9297 9896 0294" /* „–.—{|.z’—˜–.” */
- $"9295 8596 0297 8F7B 817C 027A 8C91 A390" /* ’•…–.—{|.zŒ‘£ */
- $"0291 897A 817C 017B 7BA5 7C00 7BB0 7C00" /* .‘‰z|.{{¥|.{°|. */
- $"00AB 7C80 00A9 7CDF 00FF 00FF 00FF 00AD" /* .«|€.©|ß.ÿ.ÿ.ÿ.­ */
- $"0000 7A89 8002 7C73 749C 0002 79BC CE87" /* ..z‰€.|stœ..y¼Î‡ */
- $"CC04 CDC2 8172 749B 0002 80CF D587 D304" /* Ì.ÍÂrt›..€ÏÕ‡Ó. */
- $"D4D1 8870 749A 0002 6E9B D288 D003 D1D2" /* Ôшptš..n›ÒˆÐ.ÑÒ */
- $"9E6E 9270 8500 0371 9BCE D289 D002 D1CB" /* žn’p…..q›ÎÒ‰Ð.ÑË */
- $"AF91 A801 AA90 8300 0474 80AC B2AF 8AB0" /* ¯‘¨.ªƒ..t€¬²¯Š° */
- $"02B1 B3B4 90B3 03B5 9D7A 7580 0002 80B7" /* .±³´³.µzu€..€· */
- $"C3A4 BF09 C0C3 B57F 0000 A0CF CACA 8DC9" /* ä¿ÆÀõ... ÏÊÊÉ */
- $"04CA CAC6 C8CA 8EC9 07CA CACD 9900 009C" /* .ÊÊÆÈÊŽÉ.ÊÊÍ™..œ */
- $"CA8F C604 C5CB EDC5 C58F C606 C7C8 9400" /* ÊÆ.ÅËíÅÅÆ.ÇÈ”. */
- $"0093 C790 C403 C3F6 E7BF 8FC4 07C5 C48B" /* .“ÇÄ.Ãöç¿Ä.ÅÄ‹ */
- $"0000 8AC2 C28F C104 BEDA FFCE BE8E C107" /* ..ŠÂÂÁ.¾ÚÿξŽÁ. */
- $"C2BF 8600 0083 BEC0 8DBF 06C0 BEB8 C1FC" /* ¿†..ƒ¾À¿.À¾¸Áü */
- $"F3BC 8EBF 07C0 BA81 0000 7EB9 BE8D BD07" /* 󼎿.Àº..~¹¾½. */
- $"BAC0 E9D6 E1FF D5B8 8DBD 07BF B57C 0000" /* ºÀéÖáÿÕ¸½.¿µ|.. */
- $"7AB3 BC8C BA09 B9BB DFDB EBCB FDF7 BAB9" /* z³¼ŒºÆ¹»ßÛëËý÷º¹ */
- $"8CBA 07BC AE79 0000 77AE B98C B709 B3D7" /* Œº.¼®y..w®¹Œ·Æ³× */
- $"FFF8 D3B2 E8FF D7B1 8CB7 07B9 A876 0000" /* ÿøÓ²èÿ×±Œ·.¹¨v.. */
- $"74A9 B78A B50C B6B5 B2EC FFFF C6AF C6FF" /* t©·Šµ.¶µ²ìÿÿƯÆÿ */
- $"F9B8 B48B B507 B7A3 7400 0073 A3B6 8BB3" /* ù¸´‹µ.·£t..s£¶‹³ */
- $"0BAE DBDE DDDB B0B3 B1EA FFD7 AE8B B307" /* .®ÛÞÝÛ°³±êÿ×®‹³. */
- $"B59D 7300 0072 9CB3 8AB0 04AD C0FF FFEA" /* µs..rœ³Š°.­Àÿÿê */
- $"80B0 05AD C4FF F9B4 AF8A B007 B397 7200" /* €°.­Äÿù´¯Š°.³—r. */
- $"0071 97B1 85AE 00AC 80AA 0EAB AAEA FFFF" /* .q—±…®.¬€ª.«ªêÿÿ */
- $"CFA6 AAAA A9A7 E7FF D5A7 81AA 00AC 85AE" /* Ϧªª©§çÿÕ§ª.¬…® */
- $"07B0 9171 7400 7191 AE84 AB13 AAB2 B9BB" /* .°‘qt.q‘®„«.ª²¹» */
- $"BAB2 C6FF FFEB B7B9 B8B7 BBB6 C5FC F7B5" /* º²Æÿÿë·¹¸·»¶Åü÷µ */
- $"80B9 01BA B285 AB07 AD8C 7174 0070 8BAB" /* €¹.º²…«.­Œqt.p‹« */
- $"84A8 19A4 C1EF FBF4 D2F0 FFFC D1F1 F4F8" /* „¨.¤ÁïûôÒðÿüÑñôø */
- $"F0FB F1E2 E5FF DFF2 F3F8 F8CB A484 A807" /* ðûñâåÿßòóøøˤ„¨. */
- $"A988 7200 7471 85A7 84A5 09A1 BDFF FFF0" /* ©ˆr.tq…§„¥Æ¡½ÿÿð */
- $"D9FF FFE0 E784 FF03 D6F5 CDD4 80FF 01D2" /* Ùÿÿàç„ÿ.ÖõÍÔ€ÿ.Ò */
- $"9F85 A506 8472 7474 7181 A484 A208 9EBD" /* Ÿ…¥.„rttq¤„¢.ž½ */
- $"FFFF D2F6 FFF7 D785 FF08 F1BD D8CF F6FF" /* ÿÿÒöÿ÷×…ÿ.ñ½ØÏöÿ */
- $"FFD3 9C83 A208 A3A2 8172 7474 727E A084" /* ÿÓœƒ¢.£¢rttr~ „ */
- $"9F09 9CB0 DDCF DFFF FFD2 CCDD 84DC 08DA" /* ŸÆœ°ÝÏßÿÿÒÌÝ„Ü.Ú */
- $"CBFF F4C6 DCDD BE9B 839F 08A0 9E7E 7274" /* ËÿôÆÜݾ›ƒŸ. ž~rt */
- $"7472 7C9D 849C 089D 9B93 B5FF FFF4 A397" /* tr|„œ.›“µÿÿô£— */
- $"8598 0897 9BDD E0B4 9398 9A9D 839C 089D" /* …˜.—›Ýà´“˜šƒœ. */
- $"9A7B 7374 7473 7998 8699 0597 C8F7 FFC1" /* š{sttsy˜†™.—È÷ÿÁ */
- $"9387 9905 96A9 EEF9 A695 8599 089A 9679" /* “‡™.–©îù¦•…™.š–y */
- $"7374 7473 7795 8596 0693 A7E6 D1D0 9895" /* sttsw•…–.“§æÑИ• */
- $"8796 0695 9BF3 FFE7 9595 8496 0897 9377" /* ‡–.•›óÿç••„–.—“w */
- $"7374 7473 7693 8595 058F B0FF ED98 9289" /* sttsv“…•.°ÿ혒‰ */
- $"9505 8ED4 FFFF C58E 8495 0996 9076 7374" /* •.ŽÔÿÿÅŽ„•Æ–vst */
- $"7473 7490 9384 9204 8BC8 E299 8F8A 9206" /* tst“„’.‹È♊’. */
- $"8DAD FFFF F494 9183 9202 938C 7581 7402" /* ­ÿÿô”‘ƒ’.“Œut. */
- $"738D 9184 9003 8EA7 938D 8B90 068F 8EDD" /* s‘„.Ž§“‹.ŽÝ */
- $"FFD7 8E8F 8390 0191 8A82 7402 728B 8F85" /* ÿ׎ƒ.‘Š‚t.r‹… */
- $"8E01 8B8D 8D8E 048C 93A4 8E8D 848E 028F" /* Ž.‹Ž.Œ“¤Ž„Ž. */
- $"8773 8174 0272 8B8F 988E 028C 8A8D 858E" /* ‡st.r‹˜Ž.ŒŠ…Ž */
- $"028F 8773 8174 0272 8489 A388 0289 8173" /* .‡st.r„‰£ˆ.‰s */
- $"8174 0173 73A5 7400 73B0 7400 00AB 7480" /* t.ss¥t.s°t..«t€ */
- $"00A9 74DF 0068 386D 6B00 0009 0800 0000" /* .©tß.h8mk..Æ.... */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 002E 4549 4A4A 4A4A 4A4A 4A4A 4A4A" /* ....EIJJJJJJJJJJ */
- $"3B0A 0400 0000 0000 0000 0000 0000 0000" /* ;Â.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 2FF9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ../ùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FD52 0802 0000 0000 0000 0000 0000 0000" /* ýR.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 4DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Mÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FF7E 1306 0000 0000 0000 0000 0000 0000" /* ÿ~.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0002 ABFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..«ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFBB 2C11 0B0B 0B0B 0B0B 0B0B 0B0B 0B0B" /* ÿ»,............. */
- $"0B0B 0B0B 0B0B 0903 0000 0000 0000 0000" /* ......Æ......... */
- $"08B2 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF DFCC CCCC CCCC CCCC CCCC CCCC CCCC" /* ÿÿßÌÌÌÌÌÌÌÌÌÌÌÌÌ */
- $"CCCC CCCC CCCC CBC9 8000 0000 0000 0026" /* ÌÌÌÌÌÌËÉ€......& */
- $"71F2 EDEE EFEF EFEF EFEF EFEF EFEF EFEF" /* qòíîïïïïïïïïïïïï */
- $"EFEF F4F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ïïô÷÷÷÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F7 F7F7 F7F5 CE41 2000 0000 5EF7" /* ÷÷÷÷÷÷÷õÎA ...^÷ */
- $"FFF8 F8F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ÿøøùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F8 FAFF EE41 0000 C4FF" /* ùùùùùùùøúÿîA..Äÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFA1 0000 B6FF" /* ÿÿÿÿÿÿÿÿÿÿÿ¡..¶ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF91 0000 A2FF" /* ÿÿÿÿÿÿÿÿÿÿÿ‘..¢ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF7A 0000 8FFF" /* ÿÿÿÿÿÿÿÿÿÿÿz..ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF68 0000 79FF" /* ÿÿÿÿÿÿÿÿÿÿÿh..yÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF57 0000 5EFF" /* ÿÿÿÿÿÿÿÿÿÿÿW..^ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF48 0000 4BFF" /* ÿÿÿÿÿÿÿÿÿÿÿH..Kÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FD3B 0000 3FFE" /* ÿÿÿÿÿÿÿÿÿÿý;..?þ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF F62F 0000 33F8" /* ÿÿÿÿÿÿÿÿÿÿö/..3ø */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF ED23 0000 27F2" /* ÿÿÿÿÿÿÿÿÿÿí#..'ò */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF DE1A 0000 1FE9" /* ÿÿÿÿÿÿÿÿÿÿÞ....é */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF CE10 0000 1ADF" /* ÿÿÿÿÿÿÿÿÿÿÎ....ß */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF C10B 0100 14D5" /* ÿÿÿÿÿÿÿÿÿÿÁ....Õ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF B509 0100 0FCD" /* ÿÿÿÿÿÿÿÿÿÿµÆ...Í */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF AA07 0001 0BC2" /* ÿÿÿÿÿÿÿÿÿÿª.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF A005 0101 09B3" /* ÿÿÿÿÿÿÿÿÿÿ ...Ƴ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 9504 0101 08A6" /* ÿÿÿÿÿÿÿÿÿÿ•....¦ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8D04 0101 069A" /* ÿÿÿÿÿÿÿÿÿÿ....š */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8505 0101 0691" /* ÿÿÿÿÿÿÿÿÿÿ…....‘ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7D05 0101 078B" /* ÿÿÿÿÿÿÿÿÿÿ}....‹ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7606 0101 0885" /* ÿÿÿÿÿÿÿÿÿÿv....… */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7106 0102 0881" /* ÿÿÿÿÿÿÿÿÿÿq.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6D07 0102 0A7E" /* ÿÿÿÿÿÿÿÿÿÿm...Â~ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6A08 0102 0B7B" /* ÿÿÿÿÿÿÿÿÿÿj....{ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6709 0102 0C7C" /* ÿÿÿÿÿÿÿÿÿÿgÆ...| */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 670A 0102 0C75" /* ÿÿÿÿÿÿÿÿÿÿgÂ...u */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 600B 0102 113A" /* ÿÿÿÿÿÿÿÿÿÿ`....: */
- $"7B85 8585 8585 8585 8585 8585 8585 8585" /* {……………………………………… */
- $"8585 8585 8585 8585 8585 8585 8585 8585" /* ………………………………………… */
- $"8585 8585 8585 8585 8574 310F 0101 0B1E" /* ………………………t1..... */
- $"2B34 3535 3535 3535 3535 3535 3535 3535" /* +455555555555555 */
- $"3535 3535 3535 3535 3535 3535 3535 3535" /* 5555555555555555 */
- $"3535 3535 3535 3535 332A 1C0A 0100 040C" /* 555555553*.Â.... */
- $"1418 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1813 0B03 0000 0002" /* ................ */
- $"0304 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0402 0100 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 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0069 7433" /* .............it3 */
- $"3200 0025 F700 0000 00FF 00FF 00FF 00FF" /* 2..%÷....ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 59D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.ŸY× */
- $"00A6 59D3 0001 5959 8000 9D58 8459 D000" /* .¦YÓ..YY€.X„YÐ. */
- $"0359 5900 569F 5901 5658 8359 D000 0257" /* .YY.VŸY.VXƒYÐ..W */
- $"6287 9D95 0494 917F 5E58 8359 CD00 0459" /* b‡•.”‘.^XƒYÍ..Y */
- $"005C 9ABA 9EBC 03B9 AE85 5883 59CD 0004" /* .\šºž¼.¹®…XƒYÍ.. */
- $"5900 6EB3 BE9E BF04 BEB6 9D62 5782 59CD" /* Y.n³¾ž¿.¾¶bW‚YÍ */
- $"0003 5900 74B6 A0BE 03B8 9F63 5782 59CC" /* ..Y.t¶ ¾.¸ŸcW‚YÌ */
- $"0004 5959 547A B8A0 BC03 B7A0 6357 8359" /* ..YYTz¸ ¼.· cWƒY */
- $"CB00 0459 5954 88B9 A0BB 03B7 A366 56B8" /* Ë..YYTˆ¹ ».·£fV¸ */
- $"5995 0005 5959 005B A0B9 A0BA 03B8 AA73" /* Y•..YY.[ ¹ º.¸ªs */
- $"55BA 5992 0006 5959 0053 7BB4 B9A0 BA04" /* UºY’..YY.S{´¹ º. */
- $"B9B2 905A 56BA 5990 0006 5959 0054 73AB" /* ¹²ZVºY..YY.Ts« */
- $"B8A2 B903 B5AB 865E B756 0300 5859 598E" /* ¸¢¹.µ«†^·V..XYYŽ */
- $"0007 5959 005A 83AD B6B7 A2B8 04B7 B4AD" /* ..YY.Zƒ­¶·¢¸.·´­ */
- $"9B87 B57D 047B 725D 0059 8D00 0759 5900" /* ›‡µ}.{r].Y..YY. */
- $"5A8F B2B6 B6A4 B704 B6B5 B4B2 B1B4 B003" /* Z²¶¶¤·.¶µ´²±´°. */
- $"ADA0 7600 8059 8900 8159 0355 77AC B0E2" /* ­ v.€Y‰.Y.Uw¬°â */
- $"B103 AFA4 7D56 8259 8600 0159 5980 0003" /* ±.¯¤}V‚Y†..YY€.. */
- $"5279 9697 E298 0496 9073 5456 8000 0159" /* Ry–—â˜.–sTV€..Y */
- $"5984 0008 5900 5457 6268 686D 7284 73A1" /* Y„..Y.TWbhhmr„s¡ */
- $"74B9 7309 706C 6868 6763 5900 5959 8200" /* t¹sÆplhhgcY.YY‚. */
- $"0759 0052 6E96 A4A7 A8E7 A980 A706 A6A0" /* .Y.Rn–¤§¨ç©€§.¦  */
- $"8E6A 5759 5982 0002 536F A782 B0E5 AF81" /* ŽjWYY‚..So§‚°å¯ */
- $"B006 AFAF AB99 6A00 5980 0004 5900 5A9B" /* °.¯¯«™j.Y€..Y.Z› */
- $"AEF0 AF0B AEA6 895B 0059 0000 5900 6CA7" /* ®ð¯.®¦‰[.Y..Y.l§ */
- $"B4AE 03AF ABAE AFB7 AE0A A996 6500 5900" /* ´®.¯«®¯·®Â©–e.Y. */
- $"0059 5470 A7B3 AD05 AEA8 A299 A8AE B6AD" /* .YTp§³­.®¨¢™¨®¶­ */
- $"0AA8 9666 0059 0059 5900 6CA3 B4AB 05A6" /* ¨–f.Y.YY.l£´«.¦ */
- $"EDE9 99A7 ACB5 AB0A A692 6200 5900 5959" /* í陧¬µ«Â¦’b.Y.YY */
- $"0063 9EB3 A905 A8A8 ECFF E195 B6A9 0BA3" /* .cž³©.¨¨ìÿᕶ©.£ */
- $"8D5F 5859 0059 5900 6099 A7B3 A806 A4DC" /* _XY.YY.`™§³¨.¤Ü */
- $"FFFF CA96 AAB4 A80B A187 5B58 5900 5959" /* ÿÿÊ–ª´¨.¡‡[XY.YY */
- $"005C 94A6 B3A7 01A3 C580 FF02 AD9D A8B3" /* .\”¦³§.£Å€ÿ.­¨³ */
- $"A70B 9F82 5A58 5900 5959 5857 8DA5 B3A6" /* §.Ÿ‚ZXY.YYXW¥³¦ */
- $"07A4 AEF8 FFFF ED97 A4B2 A603 A59C 7C58" /* .¤®øÿÿí—¤²¦.¥œ|X */
- $"8359 0257 87A3 B4A4 01A1 E180 FF02 CB94" /* ƒY.W‡£´¤.¡á€ÿ.Ë” */
- $"A6B1 A403 A399 7657 8359 0254 80A1 B4A2" /* ¦±¤.£™vWƒY.T€¡´¢ */
- $"019D C180 FF03 FEA4 9BA3 B0A2 03A1 9672" /* .Á€ÿ.þ¤›£°¢.¡–r */
- $"5783 5902 547A 9FB4 A202 A0A6 F380 FF02" /* WƒY.TzŸ´¢. ¦ó€ÿ. */
- $"E192 A3B0 A203 A094 6D56 8359 0255 759D" /* á’£°¢. ”mVƒY.Uu */
- $"B5A0 019B D381 FF02 B495 A1AF A006 9D90" /* µ .›Óÿ.´•¡¯ . */
- $"6957 5959 0080 5902 546D 9BB1 9E00 9F80" /* iWYY.€Y.Tm›±ž.Ÿ€ */
- $"A002 9CAF FD80 FF02 EF93 9DAF 9E06 9B8C" /*  .œ¯ý€ÿ.ž.›Œ */
- $"6657 5959 0080 5902 5568 97B0 9D07 9F95" /* fWYY.€Y.Uh—°.Ÿ• */
- $"8A89 8B98 9CE2 81FF 02C3 8F9E AE9D 0699" /* Š‰‹˜œâÿ.Þ®.™ */
- $"8861 5759 5900 8059 0256 6494 AF9C 089D" /* ˆaWYY.€Y.Vd”¯œ. */
- $"8C9E D0DD C793 8CBC 81FF 02F7 9899 AE9C" /* ŒžÐÝÇ“Œ¼ÿ.÷˜™®œ */
- $"0697 855F 5859 5900 8059 0257 5E91 AF9B" /* .—…_XYY.€Y.W^‘¯› */
- $"0195 B781 FF03 F69B 96ED 81FF 02CE 8B9C" /* .•·ÿ.ö›–íÿ.΋œ */
- $"AD9B 0D95 815D 5859 5900 0059 5957 5B8C" /* ­›.•]XYY..YYW[Œ */
- $"98AD 9903 9889 9AD8 81FF 02E0 89C4 81FF" /* ˜­™.˜‰šØÿ.à‰Äÿ */
- $"02FD 9E93 AD99 0D93 7C5A 5859 5900 0059" /* .ýž“­™.“|ZXYY..Y */
- $"5958 5987 96AC 970C 9889 D3CE 88A1 E8FF" /* YXY‡–¬—.˜‰ÓΈ¡èÿ */
- $"FFF9 9B9D F481 FF02 D788 98AC 9702 9079" /* ÿù›ôÿ.׈˜¬—.y */
- $"5A80 5901 0000 8059 0255 8395 AB96 0D97" /* Z€Y...€Y.Uƒ•«–.— */
- $"8DA4 FFFF F6B2 84B4 F6FB A28E CC82 FF02" /* ¤ÿÿö²„´öû¢ŽÌ‚ÿ. */
- $"A28F 97AB 9601 8E75 8159 0100 0080 5902" /* ¢—«–.ŽuY...€Y. */
- $"547F 94AB 9502 9688 E481 FF07 E99E 8CBC" /* T.”«•.–ˆäÿ.鞌¼ */
- $"9991 A2F8 81FF 02DD 8896 AA95 0394 8D71" /* ™‘¢øÿ.݈–ª•.”q */
- $"5880 5901 0000 8059 0255 7993 AA94 0295" /* X€Y...€Y.Uy“ª”.• */
- $"87B4 84FF 05D4 8C93 948F D182 FF02 A68C" /* ‡´„ÿ.ÔŒ“”Ñ‚ÿ.¦Œ */
- $"95A9 9403 938A 6D57 8059 0700 0059 595A" /* •©”.“ŠmW€Y...YYZ */
- $"5374 91AA 9302 908C F284 FF06 DD92 9293" /* St‘ª“.Œò„ÿ.Ý’’“ */
- $"8FA4 FB81 FF01 E086 AA93 0391 876A 5780" /* ¤ûÿ.à†ª“.‘‡jW€ */
- $"5907 0000 5959 5A53 6F8F A991 0292 87CA" /* Y...YYZSo©‘.’‡Ê */
- $"84FF 02F8 A18D 8091 018D D782 FF02 A788" /* „ÿ.ø¡€‘.ׂÿ.§ˆ */
- $"92A8 9103 8F84 6757 8059 0100 0080 5902" /* ’¨‘.„gW€Y...€Y. */
- $"556B 8DA9 9002 8E85 DB84 FF01 C78A 8190" /* Uk©.Ž…Û„ÿ.ÇŠ */
- $"028B A8FE 81FF 01E2 84A9 9003 8E82 6357" /* .‹¨þÿ.â„©.Ž‚cW */
- $"8059 0100 0080 5902 5466 8CA8 9005 9186" /* €Y...€Y.TfŒ¨.‘† */
- $"AB85 A6EE 81FF 02EE 958E 8190 028F 8CDC" /* «…¦îÿ.î•Ž.ŒÜ */
- $"82FF 02AA 8591 A790 038D 7F62 5880 5901" /* ‚ÿ.ª…‘§..bX€Y. */
- $"0000 8059 0254 618A A78E 0C8F 84A5 FFF0" /* ..€Y.TaŠ§Ž.„¥ÿð */
- $"A480 BBF9 FFFF B688 838E 0189 A982 FF01" /* ¤€»ùÿÿ¶ˆƒŽ.‰©‚ÿ. */
- $"E583 A88E 038B 7C5F 5880 5901 0000 8059" /* 僨Ž.‹|_X€Y...€Y */
- $"0256 5F87 A78D 028C 83E8 80FF 06DF 9087" /* .V_‡§.Œƒè€ÿ.߇ */
- $"D4E0 8C8C 838D 028C 8ADE 82FF 02AB 838E" /* ÔàŒŒƒ.ŒŠÞ‚ÿ.«ƒŽ */
- $"A68D 038A 7A5D 5880 5901 0000 8059 0257" /* ¦.Šz]X€Y...€Y.W */
- $"5C84 A68C 028D 7EB7 83FF 03C9 8B8E 8B85" /* \„¦Œ.~·ƒÿ.É‹Ž‹… */
- $"8C01 87AA 82FF 01E6 82A7 8C03 8877 5C58" /* Œ.‡ª‚ÿ.悧Œ.ˆw\X */
- $"8059 0100 0080 5902 5757 81A6 8A02 878A" /* €Y...€Y.WW¦Š.‡Š */
- $"F584 FF01 CB83 868A 0289 88E0 82FF 02A8" /* õ„ÿ.˃†Š.‰ˆà‚ÿ.¨ */
- $"808B A58A 0386 735B 5880 5901 0000 8059" /* €‹¥Š.†s[X€Y...€Y */
- $"0258 557F A58A 028B 7BC9 84FF 02F6 9987" /* .XU.¥Š.‹{É„ÿ.ö™‡ */
- $"878A 0184 AB82 FF01 E580 A68A 0285 715A" /* ‡Š.„«‚ÿ.倦Š.…qZ */
- $"8159 0100 0081 5902 577B 88A3 8902 8A81" /* Y...Y.W{ˆ£‰.Š */
- $"9685 FF01 BF82 8889 0288 87E0 82FF 02A7" /* –…ÿ.¿‚ˆ‰.ˆ‡à‚ÿ.§ */
- $"7F8A A489 0183 6F82 5901 0000 8159 0254" /* .Š¤‰.ƒo‚Y...Y.T */
- $"7787 A488 017A DC84 FF02 EA8C 8689 8801" /* w‡¤ˆ.zÜ„ÿ.ꌆ‰ˆ. */
- $"82A9 82FF 01E3 7EA4 8802 8781 6C82 5901" /* ‚©‚ÿ.ã~¤ˆ.‡l‚Y. */
- $"0000 8159 0151 7497 860E 8784 8686 8486" /* ..Y.Qt—†.‡„††„† */
- $"8684 8685 8486 877B A685 FF11 AD7D 8685" /* †„†…„†‡{¦…ÿ.­}†… */
- $"8486 8584 8784 8487 8485 8783 83DF 82FF" /* „†…„‡„„‡„…‡ƒƒß‚ÿ */
- $"0FA4 7D87 8584 8785 8487 8485 8784 8586" /* .¤}‡…„‡…„‡„…‡„…† */
- $"8596 8602 7F69 5881 5901 0000 8059 035A" /* …–†..iXY...€Y.Z */
- $"5170 8496 850E 8182 7F7F 827F 8082 7E81" /* Qp„–….‚..‚.€‚~ */
- $"8280 837E EC84 FF12 DB7E 817F 8082 7E81" /* ‚€ƒ~ì„ÿ.Û~.€‚~ */
- $"827E 8182 7E82 817E 827B A682 FF10 E07B" /* ‚~‚~‚~‚{¦‚ÿ.à{ */
- $"8380 827E 8181 7E82 817E 8280 7F81 8494" /* ƒ€‚~~‚~‚€.„” */
- $"8503 847D 6758 8159 0100 0080 5903 5A53" /* ….„}gXY...€Y.ZS */
- $"6E84 9585 0E82 90FB BCAC FFA4 B9FF 9BD3" /* n„•….‚û¼¬ÿ¤¹ÿ›Ó */
- $"FC97 7BB9 84FF 14FC 91AA FFA8 BFFF 92D1" /* ü—{¹„ÿ.ü‘ªÿ¨¿ÿ’Ñ */
- $"FB92 E5ED 87F4 DC95 FFCB 73DF 82FF 0FA0" /* û’åí‡ôÜ•ÿËsß‚ÿ.  */
- $"79DC F889 E5ED 90F6 D88F FFC7 AAC2 7D94" /* yÜø‰åíöØÿǪÂ}” */
- $"8503 847C 6558 8159 0100 0080 5903 5A52" /* ….„|eXY...€Y.ZR */
- $"6983 9584 0E81 92FF BCAA FFC4 D2FF 96D4" /* iƒ•„.’ÿ¼ªÿÄÒÿ–Ô */
- $"FF9A 82F8 84FF 14C6 78CE FFA6 BFFF B6E4" /* ÿš‚ø„ÿ.ÆxÎÿ¦¿ÿ¶ä */
- $"FF8D E8F9 AFFE DE91 FFE3 899E 82FF 0FDB" /* ÿèù¯þÞ‘ÿ㉞‚ÿ.Û */
- $"74E2 FFB1 F3F0 8AFA E9B4 FFC8 A6C7 7C94" /* tâÿ±óðŠúé´ÿȦÇ|” */
- $"8403 8379 6258 8159 0100 0080 5903 5A51" /* „.ƒybXY...€Y.ZQ */
- $"6581 9582 047F 90FF D5C8 81FF 04BB E5F9" /* e•‚..ÿÕÈÿ.»åù */
- $"86CA 84FF 06F2 82D6 FFFF C6D6 80FF 02FC" /* †Ê„ÿ.ò‚ÖÿÿÆÖ€ÿ.ü */
- $"B5EF 80FF 06E9 B8FF FFFA 8AD6 82FF 0196" /* µï€ÿ.é¸ÿÿúŠÖ‚ÿ.– */
- $"C680 FF02 F4B4 FA80 FF03 DCC9 C57A 9482" /* Æ€ÿ.ô´ú€ÿ.ÜÉÅz”‚ */
- $"0381 7761 5881 5901 0000 8059 035A 5262" /* .waXY...€Y.ZRb */
- $"7F95 8102 7E8F FA85 FF01 B190 85FF 01AC" /* .•.~ú…ÿ.±…ÿ.¬ */
- $"9A90 FF01 C494 82FF 02D5 8DF9 87FF 01BF" /* šÿ.Ä”‚ÿ.Õù‡ÿ.¿ */
- $"7994 8103 8075 5F58 8159 0100 0081 5902" /* y”.€u_XY...Y. */
- $"5461 7D95 8002 7D8E FA84 FF02 E779 DD84" /* Ta}•€.}Žú„ÿ.çyÝ„ */
- $"FF02 E47C E690 FF02 FC8A D281 FF02 FC8C" /* ÿ.ä|æÿ.üŠÒÿ.üŒ */
- $"C787 FF01 BF77 9480 037E 725E 5881 5901" /* LJÿ.¿w”€.~r^XY. */
- $"0000 8159 0254 5D7C 957F 027C 8EFA 84FF" /* ..Y.T]|•..|Žú„ÿ */
- $"019C A285 FF01 97AD 92FF 01C7 8F80 FF04" /* .œ¢…ÿ.—­’ÿ.Ç€ÿ. */
- $"FBC0 748B F986 FF01 BE76 947F 037D 715C" /* ûÀt‹ù†ÿ.¾v”..}q\ */
- $"5881 5901 0000 8159 0254 597B 957F 027C" /* XY...Y.TY{•..| */
- $"8EFA 83FF 02D7 7BEF 84FF 02D1 7EF4 92FF" /* Žúƒÿ.×{ï„ÿ.Ñ~ô’ÿ */
- $"09FE 8CC9 F8CB 8C64 9F83 C386 FF01 BE76" /* ÆþŒÉøËŒdŸƒÃ†ÿ.¾v */
- $"947F 037C 6F5B 5881 5901 0000 8159 0355" /* ”..|o[XY...Y.U */
- $"5779 7E94 7D02 7A8C FA82 FF02 FD8A B884" /* Wy~”}.zŒú‚ÿ.ýŠ¸„ */
- $"FF02 FA86 C094 FF09 CF74 7C64 7FCB FFC0" /* ÿ.ú†À”ÿÆÏt|d.ËÿÀ */
- $"80F7 85FF 01BD 7494 7D02 7A6D 5B82 5901" /* €÷…ÿ.½t”}.zm[‚Y. */
- $"0000 8159 0256 5677 957C 0279 8BFA 82FF" /* ..Y.VVw•|.y‹ú‚ÿ */
- $"02C3 82FB 84FF 02BB 86FE 95FF 088C 99D5" /* .Âû„ÿ.»†þ•ÿ.Œ™Õ */
- $"FCFF FFFA 7FBC 85FF 01BD 7394 7C02 796B" /* üÿÿú.¼…ÿ.½s”|.yk */
- $"5A82 5901 0000 8159 0257 5575 957B 0277" /* Z‚Y...Y.WUu•{.w */
- $"8BFA 81FF 02F4 7DCE 84FF 02EE 7BD6 96FF" /* ‹úÿ.ô}΄ÿ.î{Ö–ÿ */
- $"01D0 A782 FF02 C47B F484 FF01 BC72 947B" /* .Ч‚ÿ.Ä{ô„ÿ.¼r”{ */
- $"0178 6983 5901 0000 8159 0258 5272 957A" /* .xiƒY...Y.XRr•z */
- $"0877 8AE8 EEEC ECF2 AA91 85FF 02A8 92F2" /* .wŠèîììòª‘…ÿ.¨’ò */
- $"95EC 03ED ED93 DC81 FF03 FD83 B2F2 82EC" /* •ì.íí“Üÿ.ýƒ²ò‚ì */
- $"02F3 B573 947A 0176 6783 5901 0000 8159" /* .óµs”z.vgƒY...Y */
- $"0258 5070 9679 007A 817F 027E 71E3 84FF" /* .XPp–y.z..~qã„ÿ */
- $"03DF 797F 8096 7F02 8078 A382 FF02 C970" /* .ßy.€–..€x£‚ÿ.Ép */
- $"8083 7F00 7D95 7902 7565 5882 5901 0000" /* €ƒ..}•y.ueX‚Y... */
- $"8159 0258 4F6F 9779 8077 0278 69AB 85FF" /* Y.XOo—y€w.xi«…ÿ */
- $"029B 7378 9977 0178 DF81 FF02 B468 7583" /* .›sx™w.xßÿ.´huƒ */
- $"7700 7895 7902 7464 5882 5901 0000 8259" /* w.x•y.tdX‚Y...‚Y */
- $"0150 6D9A 7802 747A F384 FF02 CD72 779A" /* .Pmšx.tzó„ÿ.Írwš */
- $"7808 71A0 FFFF D98C 8FC6 6D9C 7801 7363" /* x.q ÿÿÙŒÆmœx.sc */
- $"8359 0100 0082 5901 516B 9A77 016B C484" /* ƒY...‚Y.Qkšw.kÄ„ */
- $"FF02 F68A 729B 770A 7677 9B8A 80BD FDFF" /* ÿ.öŠr›wÂvw›Š€½ýÿ */
- $"9C6A 789A 7702 7261 5882 5901 0000 8159" /* œjxšw.raX‚Y...Y */
- $"035A 4F68 7598 7602 737B F184 FF01 B96E" /* .ZOhu˜v.s{ñ„ÿ.¹n */
- $"9D76 0371 85D7 FB80 FF02 F076 719A 7602" /* v.q…×û€ÿ.ðvqšv. */
- $"7060 5882 5901 0000 8159 035A 4E66 7498" /* p`X‚Y...Y.ZNft˜ */
- $"7504 7380 77C3 FE81 FF02 E97B 729D 7502" /* u.s€wÃþÿ.é{ru. */
- $"727F EF82 FF01 CD66 9A75 026F 5E58 8259" /* r.ï‚ÿ.Ífšu.o^X‚Y */
- $"0100 0081 5903 5A4D 6473 9774 0672 76EE" /* ...Y.ZMds—t.rvî */
- $"CC73 83DA 80FF 01A4 6C9F 7401 6CBE 83FF" /* ÌsƒÚ€ÿ.¤lŸt.l¾ƒÿ */
- $"02A5 6575 9874 026D 5C58 8259 0100 0081" /* .¥eu˜t.m\X‚Y... */
- $"5902 5A4D 6298 730B 6F82 FAFF F9AD 6A97" /* Y.ZMb˜s.o‚úÿù­j— */
- $"F1DC 7172 9F73 016D 9283 FF03 F981 6B74" /* ñÜqrŸs.m’ƒÿ.ùkt */
- $"9773 026C 5B58 8259 0100 0081 5902 5A4D" /* —s.l[X‚Y...Y.ZM */
- $"6098 7301 6C94 81FF 04EC 957B 8470 A073" /* `˜s.l”ÿ.ì•{„p s */
- $"0271 75E7 83FF 02DD 6972 9773 026B 5C58" /* .quçƒÿ.Ýir—s.k\X */
- $"8259 0100 0081 5902 5A50 5F98 7201 69A8" /* ‚Y...Y.ZP_˜r.i¨ */
- $"83FF 019B 69A2 7201 6ABF 84FF 02AF 6473" /* ƒÿ.›i¢r.j¿„ÿ.¯ds */
- $"9672 026A 5B58 8259 0100 0081 5903 5A51" /* –r.j[X‚Y...Y.ZQ */
- $"5D70 9771 0167 BD81 FF02 F6A1 6FA3 7101" /* ]p—q.g½ÿ.ö¡o£q. */
- $"6B94 84FF 02F7 7B6D 9671 0169 5A83 5901" /* k”„ÿ.÷{m–q.iZƒY. */
- $"0000 8159 035A 505B 6F97 7101 69D5 80FF" /* ..Y.ZP[o—q.iÕ€ÿ */
- $"03E8 8B68 70A3 7102 6F74 E984 FF02 BC65" /* .è‹hp£q.oté„ÿ.¼e */
- $"7294 7102 7067 5883 5901 0000 8159 035A" /* r”q.pgXƒY...Y.Z */
- $"5059 6F96 7007 6F6F E7FF FFD4 7A69 A670" /* PYo–p.ooçÿÿÔzi¦p */
- $"0168 BD84 FF02 EC71 6E94 7002 6F67 5883" /* .h½„ÿ.ìqn”p.ogXƒ */
- $"5901 0000 8159 035A 5058 6E96 6F06 6C79" /* Y...Y.ZPXn–o.ly */
- $"F7FF BD6E 6BA7 6F02 6A8B FD83 FF02 FC83" /* ÷ÿ½nk§o.j‹ýƒÿ.üƒ */
- $"6B94 6F02 6E66 5783 5901 0000 8159 035A" /* k”o.nfWƒY...Y.Z */
- $"5056 6D96 6E05 688E FBA5 676C A86E 026D" /* PVm–n.hŽû¥gl¨n.m */
- $"6AD0 83FF 02F5 7D6B 946E 026D 6456 8359" /* jЃÿ.õ}k”n.mdVƒY */
- $"0100 0081 5903 5A4F 556C 966D 0468 9294" /* ...Y.ZOUl–m.h’” */
- $"656C AA6D 0268 87F8 82FF 01BC 6995 6D02" /* elªm.h‡ø‚ÿ.¼i•m. */
- $"6C63 5683 5901 0000 8159 035A 5054 6C97" /* lcVƒY...Y.ZPTl— */
- $"6D01 6C68 AD6D 0866 9EF7 FFFF F3B1 6C6B" /* m.lh­m.fž÷ÿÿó±lk */
- $"956D 026C 6256 8359 0100 0081 5903 5A50" /* •m.lbVƒY...Y.ZP */
- $"546C CA6D 0667 81A6 9D7A 666C 966D 026C" /* TlÊm.g¦zfl–m.l */
- $"6256 8359 0100 0081 5903 5A51 536C CB6D" /* bVƒY...Y.ZQSlËm */
- $"0369 6565 6998 6D02 6C62 5783 5901 0000" /* .ieei˜m.lbWƒY... */
- $"8159 035A 5152 6AEA 6C02 6B61 5783 5901" /* Y.ZQRjêl.kaWƒY. */
- $"0000 8159 035A 5252 6AEA 6C02 6B61 5783" /* ..Y.ZRRjêl.kaWƒ */
- $"5901 0000 8159 035A 5252 6AEA 6C02 6B61" /* Y...Y.ZRRjêl.ka */
- $"5783 5901 0000 8159 035A 5352 6AEA 6C02" /* WƒY...Y.ZSRjêl. */
- $"6B61 5783 5900 0082 5903 5A54 5168 EA6B" /* kaWƒY..‚Y.ZTQhêk */
- $"0269 5E56 8359 0000 8359 0257 4D5E EA63" /* .i^VƒY..ƒY.WM^êc */
- $"0260 5756 8359 0100 0082 5902 5A55 53EA" /* .`WVƒY...‚Y.ZUSê */
- $"5601 5556 8459 0100 00FB 5901 0000 FB59" /* V.UV„Y...ûY...ûY */
- $"0100 00FB 5901 0000 FB59 0100 00FA 5981" /* ...ûY...ûY...úY */
- $"00F9 5982 00F7 5983 00F6 5986 00F3 59FF" /* .ùY‚.÷Yƒ.öY†.óYÿ */
- $"00FF 0000 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ...ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00DF 009F 7CD7 00A6 7CD3" /* .ÿ.ÿ.ÿ.ß.Ÿ|×.¦|Ó */
- $"0001 7C7C 8000 9D7B 847C D000 037C 7C00" /* ..||€.{„|Ð..||. */
- $"7C9F 7F01 7B7B 837C D000 027B 88A5 9EB0" /* |Ÿ..{{ƒ|Ð..{ˆ¥ž° */
- $"03AC 9D81 7B83 7CCD 0004 7C00 81B3 D09E" /* .¬{ƒ|Í..|.³Ðž */
- $"D302 D0C3 A184 7CCD 0004 7C00 8FCA D79F" /* Ó.Ðá„|Í..|.Êן */
- $"D803 CEB4 837A 827C CD00 037C 0095 CEA0" /* Ø.δƒz‚|Í..|.•Î  */
- $"D803 D1B7 847A 827C CC00 047C 7C78 9BD0" /* Ø.Ñ·„z‚|Ì..||x›Ð */
- $"A0D7 03D1 B884 7A83 7CCB 0004 7C7C 79A8" /*  ×.Ѹ„zƒ|Ë..||y¨ */
- $"D3A0 D703 D2BC 867A B87C 9500 057C 7C00" /* Ó ×.Ò¼†z¸|•..||. */
- $"81BD D5A0 D603 D3C3 9278 BA7C 9200 067C" /* ½Õ Ö.ÓÃ’xº|’..| */
- $"7C00 799D CED5 A0D6 04D4 CBAC 7D79 BA7C" /* |.yÎÕ Ö.Ôˬ}yº| */
- $"9000 067C 7C00 7B97 C5D3 A2D5 03D1 C4A3" /* ..||.{—ÅÓ¢Õ.ÑÄ£ */
- $"8280 7AB4 7B03 007B 7C7C 8E00 077C 7C00" /* ‚€z´{..{||Ž..||. */
- $"81A4 C8D2 D4A2 D505 D4D0 C8B7 A69F B19E" /* ¤ÈÒÔ¢Õ.ÔÐÈ·¦Ÿ±ž */
- $"079F 9F9E 9D94 8100 7C8D 0007 7C7C 0081" /* .ŸŸž”.|..||. */
- $"ADCD D3D3 A4D4 03D3 D2D0 CE80 CCB2 CB03" /* ­ÍÓÓ¤Ô.ÓÒÐ΀̲Ë. */
- $"C7B9 9500 807C 8900 817C 037A 98C6 CDE2" /* ǹ•.€|‰.|.z˜ÆÍâ */
- $"CE03 CCBE 9B7A 827C 8600 017C 7C80 0002" /* Î.̾›z‚|†..||€.. */
- $"7697 B181 B403 B5B5 B4B4 9EB5 01B4 B4B6" /* v—±´.µµ´´žµ.´´¶ */
- $"B506 B4B4 B3AA 9177 7980 0001 7C7C 8400" /* µ.´´³ª‘wy€..||„. */
- $"097C 0078 7D87 8B8B 8D94 95E2 960A 9592" /* Æ|.x}‡‹‹”•â–•’ */
- $"8E8C 8B8B 867D 007C 7C82 0009 7C00 7892" /* ŽŒ‹‹†}.||‚.Æ|.x’ */
- $"B5C1 C4C5 C6C6 81C7 03C6 C6C7 C79E C601" /* µÁÄÅÆÆÇ.ÆÆÇÇžÆ. */
- $"C7C7 82C6 01C7 C7AC C683 C70A C6C6 C4C3" /* ÇÇ‚Æ.ÇǬƃÇÂÆÆÄà */
- $"C3BD AB8C 7A7C 7C82 0005 7893 C5CE CFD0" /* ý«Œz||‚..x“ÅÎÏÐ */
- $"E9CF 08D0 D0CF CEC9 B58B 007C 8000 047C" /* éÏ.ÐÐÏÎɵ‹.|€..| */
- $"0080 B9CE F0D0 0CCF C5A7 7E00 7C00 007C" /* .€¹ÎðÐ.Ïŧ~.|..| */
- $"008F C5CE B3CF 03D0 CDCF D0B7 CF0A C9B2" /* .ÅγÏ.ÐÍÏзÏÂɲ */
- $"8600 7C00 007C 7894 C6B3 CF05 D0CB BEBA" /* †.|..|x”ƳÏ.Ð˾º */
- $"CCD0 B6CF 0ACA B487 007C 007C 7C00 8FC4" /* ÌжÏÂÊ´‡.|.||.Ä */
- $"B4CE 05C9 F2ED B9CC CFB5 CE0B C8B1 8400" /* ´Î.Éòí¹ÌϵÎ.ȱ„. */
- $"7C00 7C7C 0089 C0CC B3CD 05CC F3FF E7B9" /* |.||.‰À̳Í.Ìóÿç¹ */
- $"CEB5 CD0B C5AC 817B 7C00 7C7C 0085 BCCB" /* εÍ.Ŭ{|.||.…¼Ë */
- $"B3CC 06C9 EAFF FFD8 BDCE B4CC 0BC4 A77D" /* ³Ì.ÉêÿÿؽδÌ.ħ} */
- $"7B7C 007C 7C00 81B6 CAB3 CC01 C9DC 80FF" /* {|.||.¶Ê³Ì.ÉÜ€ÿ */
- $"02C6 C4CD B2CC 0DCB C1A3 7D7B 7C00 7C7C" /* .ÆÄͲÌ.ËÁ£}{|.|| */
- $"7B7D B1C9 CBB2 CA07 C9CF FBFF FFF1 BACB" /* {}±É˲Ê.ÉÏûÿÿñºË */
- $"B2CA 03C9 BE9D 7B83 7C02 7BAB C8B4 CA01" /* ²Ê.ɾ{ƒ|.{«È´Ê. */
- $"C8ED 80FF 02D9 BCCB B1CA 03C9 BC98 7A83" /* Èí€ÿ.ټ˱Ê.ɼ˜zƒ */
- $"7C02 7AA5 C6B4 C901 C6DA 80FF 03FD C1C4" /* |.z¥Æ´É.ÆÚ€ÿ.ýÁÄ */
- $"CAB0 C903 C7B9 957A 837C 0279 9FC4 B4C8" /* Ê°É.ǹ•zƒ|.yŸÄ´È */
- $"02C7 CAF7 80FF 02E8 B8C9 B0C8 03C5 B68F" /* .ÇÊ÷€ÿ.è¸É°È.Ŷ */
- $"7A83 7C02 799A C2B5 C701 C4E4 81FF 02CA" /* zƒ|.yšÂµÇ.Ääÿ.Ê */
- $"BFC8 AFC7 06C4 B38B 7A7C 7C00 807C 0278" /* ¿È¯Ç.ij‹z||.€|.x */
- $"93C0 B1C6 00C7 80C8 02C4 CFFD 80FF 01F2" /* “À±Æ.Ç€È.ÄÏý€ÿ.ò */
- $"B8B0 C606 C2AF 897A 7C7C 0080 7C02 798F" /* ¸°Æ.¯‰z||.€|.y */
- $"BEB0 C607 C8C0 B4B2 B6C3 C6ED 81FF 02D4" /* ¾°Æ.ÈÀ´²¶ÃÆíÿ.Ô */
- $"BBC7 AEC6 06C1 AC84 7A7C 7C00 807C 0279" /* »Ç®Æ.Á¬„z||.€|.y */
- $"8BBB AFC5 08C6 B6BA DCE5 D5B3 BAD8 81FF" /* ‹»¯Å.ƶºÜåÕ³ºØÿ */
- $"02F9 BBC4 AEC5 06C0 A982 7B7C 7C00 807C" /* .ù»Ä®Å.À©‚{||.€| */
- $"027A 85B7 AEC4 02C5 C1CE 81FF 03F7 BAC1" /* .z…·®Ä.ÅÁÎÿ.÷ºÁ */
- $"F481 FF02 DCB7 C6AD C40D BDA5 817B 7C7C" /* ôÿ.Ü·Æ­Ä.½¥{|| */
- $"0000 7C7C 7A83 B4C3 ADC4 03C3 B3BE E981" /* ..||zƒ´Ã­Ä.ó¾é */
- $"FF02 E8B6 DC81 FF02 FDBE C0AD C40D BCA1" /* ÿ.è¶Üÿ.ý¾À­Ä.¼¡ */
- $"7E7B 7C7C 0000 7C7C 7B80 B0C2 ACC3 0CC4" /* ~{||..||{€°Â¬Ã.Ä */
- $"B5DD DAAE C4F2 FFFF FAC2 C5F8 81FF 02E2" /* µÝÚ®ÄòÿÿúÂÅøÿ.â */
- $"B5C4 ACC3 01B9 9D81 7C07 0000 7C7C 7B7C" /* µÄ¬Ã.¹|...||{| */
- $"ABC0 ABC1 0DC2 BCC1 FFFF F7C7 ACD0 FBFC" /* «À«Á.¼Áÿÿ÷ǬÐûü */
- $"C7BC E082 FF02 C0BD C2AB C101 B79A 817C" /* Ǽà‚ÿ.À½Â«Á.·š| */
- $"0100 0080 7C02 7BA7 BFAB C102 C2B2 EB81" /* ...€|.{§¿«Á.²ë */
- $"FF07 EDB9 B3D7 C3BF C7FA 81FF 02E6 B3C2" /* ÿ.í¹³×ÿÇúÿ.æ³Â */
- $"AAC1 03C0 B595 7B80 7C01 0000 807C 027A" /* ªÁ.Àµ•{€|...€|.z */
- $"A3BE AAC0 02C1 B6CA 84FF 05DE B8C0 C0BD" /* £¾ªÀ.Á¶Ê„ÿ.Þ¸ÀÀ½ */
- $"E382 FF02 C2BA C1A9 C003 BFB2 927A 807C" /* ã‚ÿ.ºÁ©À.¿²’z€| */
- $"0100 0080 7C02 789D BCAA BF02 BEB3 F584" /* ...€|.x¼ª¿.¾³õ„ */
- $"FF06 EBBF BEBF BDC9 FC81 FF02 E8B2 C0A9" /* ÿ.뿾¿½Éüÿ.è²À© */
- $"BF03 BEB0 8F7A 807C 0100 0080 7C02 7898" /* ¿.¾°z€|...€|.x˜ */
- $"BAA9 BE02 BFB5 D984 FF02 FBC7 BC80 BE01" /* º©¾.¿µÙ„ÿ.ûǼ€¾. */
- $"BBE7 82FF 02C3 B7BF A8BE 03BC AD8B 7A80" /* »ç‚ÿ.÷¿¨¾.¼­‹z€ */
- $"7C01 0000 807C 0278 95B9 A9BD 02BC B3E9" /* |...€|.x•¹©½.¼³é */
- $"84FF 01DD B981 BD02 BACB FE81 FF02 EAB0" /* „ÿ.ݹ½.ºËþÿ.ê° */
- $"BEA8 BD03 BAAA 887A 807C 0100 0080 7C02" /* ¾¨½.ºªˆz€|...€|. */
- $"7890 B8A8 BD05 BEB2 C1AC C7F6 81FF 02F4" /* x¸¨½.¾²Á¬Çöÿ.ô */
- $"C0BC 82BD 01BB EA82 FF02 C4B6 BEA7 BD03" /* À¼‚½.»ê‚ÿ.Ķ¾§½. */
- $"BAA8 867A 807C 0100 0080 7C02 788B B5A7" /* º¨†z€|...€|.x‹µ§ */
- $"BC0C BDB5 C1FF F2BD AAD5 FCFF FFD3 B983" /* ¼.½µÁÿò½ªÕüÿÿÓ¹ƒ */
- $"BC01 B9CC 82FF 02EB AFBD A7BC 03B8 A584" /* ¼.¹Ì‚ÿ.믽§¼.¸¥„ */
- $"7B80 7C01 0000 807C 0279 88B3 A8BC 01AE" /* {€|...€|.yˆ³¨¼.® */
- $"ED80 FF06 E5B1 B1E6 ECBB BB84 BC01 B9EB" /* í€ÿ.å±±æì»»„¼.¹ë */
- $"82FF 02C5 B4BD A6BC 03B7 A381 7B80 7C01" /* ‚ÿ.Å´½¦¼.·£{€|. */
- $"0000 807C 027A 85B1 A6BB 02BC AFCC 82FF" /* ..€|.z…±¦».¼¯Ì‚ÿ */
- $"04FE D6AF BBBA 85BB 01B7 CC82 FF02 ECAE" /* .þÖ¯»º…».·Ì‚ÿ.ì® */
- $"BCA6 BB03 B5A0 807B 807C 0100 0080 7C03" /* ¼¦».µ €{€|...€|. */
- $"7A80 ADB9 A5BA 02B8 B0F7 84FF 01DE B486" /* z€­¹¥º.¸°÷„ÿ.Þ´† */
- $"BA02 B9B8 EB82 FF02 C3B2 BBA5 BA03 B39C" /* º.¹¸ë‚ÿ.ò»¥º.³œ */
- $"7F7B 807C 0100 0080 7C03 7B7E AAB7 A4B8" /* .{€|...€|.{~ª·¤¸ */
- $"02BA ABD8 84FF 02F9 C1B6 87B8 01B5 CC82" /* .º«Ø„ÿ.ùÁ¶‡¸.µÌ‚ */
- $"FF02 EBAC B9A5 B803 B199 7D7B 807C 0100" /* ÿ.묹¥¸.±™}{€|.. */
- $"0080 7C03 7B7D A7B6 A4B7 02B2 B7FE 84FF" /* .€|.{}§¶¤·.²·þ„ÿ */
- $"01D7 B388 B702 B6B6 EB82 FF02 C2B0 B8A4" /* .׳ˆ·.¶¶ë‚ÿ.°¸¤ */
- $"B701 AF96 827C 0100 0081 7C02 7BA3 B5A3" /* ·.¯–‚|...|.{£µ£ */
- $"B602 B7A8 E584 FF02 F1B8 B589 B601 B3CA" /* ¶.·¨å„ÿ.ñ¸µ‰¶.³Ê */
- $"82FF 02EA AAB7 A4B6 01AD 9382 7C01 0000" /* ‚ÿ.ꪷ¤¶.­“‚|... */
- $"817C 0278 9FB4 97B5 0DB4 B5B6 B4B6 B5B4" /* |.xŸ´—µ.´µ¶´¶µ´ */
- $"B6B5 B4B6 B6AD C085 FF11 CCB0 B6B5 B4B6" /* ¶µ´¶¶­À…ÿ.Ì°¶µ´¶ */
- $"B5B4 B6B5 B4B6 B4B5 B6B3 B4EB 82FF 0EC0" /* µ´¶µ´¶´µ¶³´ë‚ÿ.À */
- $"AFB6 B5B4 B6B4 B4B6 B4B5 B6B4 B5B6 97B5" /* ¯¶µ´¶´´¶´µ¶´µ¶—µ */
- $"01AB 9082 7C01 0000 817C 0278 9CB3 95B5" /* .«‚|...|.xœ³•µ */
- $"0FB6 AFA7 A9AA A7AA AAA7 ABA9 A7AC B1A9" /* .¶¯§©ª§ªª§«©§¬±© */
- $"F084 FF12 E9AA A6AA AAA7 ABA9 A7AB A8A8" /* ð„ÿ.骦ªª§«©§«¨¨ */
- $"ACA8 A8AB A7A5 C882 FF0F E8A8 B2A8 A8AB" /* ¬¨¨«§¥È‚ÿ.訲¨¨« */
- $"A8A8 ACA8 A9AC A7A9 AAAB 95B5 03B4 A98E" /* ¨¨¬¨©¬§©ª«•µ.´©Ž */
- $"7B81 7C01 0000 817C 0278 99B2 95B4 0EB3" /* {|...|.x™²•´.³ */
- $"B7F9 D2C7 FFC1 CEFF BCE1 FABB AACD 84FF" /* ·ùÒÇÿÁÎÿ¼áú»ªÍ„ÿ */
- $"14FD BAC6 FFC5 D3FF B7DF F9B7 EBF2 B0F6" /* .ýºÆÿÅÓÿ·ßù·ëò°ö */
- $"E6B9 FDDA A7EB 82FF 0FBD AAE6 F8B0 EBF1" /* æ¹ýÚ§ë‚ÿ.½ªæø°ëñ */
- $"B5F7 E3B4 FED9 C5D5 AF94 B403 B3A7 8B7B" /* µ÷ã´þÙÅÕ¯”´.³§‹{ */
- $"817C 0100 0081 7C02 7794 B195 B30E B1B9" /* |...|.w”±•³.±¹ */
- $"FFD2 C7FF D3DE FFBA E3FF BDAA F984 FF14" /* ÿÒÇÿÓÞÿºãÿ½ªù„ÿ. */
- $"DBA2 DAFF C4D4 FFCA EBFE B4EF FBC4 FEE9" /* Û¢ÚÿÄÔÿÊëþ´ïûÄþé */
- $"B6FF EAAB C082 FF0F E4A3 ECFF C5F6 F5B2" /* ¶ÿê«À‚ÿ.ä£ìÿÅöõ² */
- $"FBEF C8FF DAC4 DAAE 94B3 03B2 A589 7B81" /* ûïÈÿÚÄÚ®”³.²¥‰{ */
- $"7C01 0000 807C 037D 7690 AE95 B104 AFB7" /* |...€|.}v®•±.¯· */
- $"FFE0 D681 FF04 CDEC FCAE D884 FF06 F7AC" /* ÿàÖÿ.Íìü®Ø„ÿ.÷¬ */
- $"E0FF FFD4 E180 FF02 FDC9 F380 FF06 EFCA" /* àÿÿÔá€ÿ.ýÉó€ÿ.ïÊ */
- $"FFFF FAAE E582 FF01 B6DA 80FF 02F7 C7FB" /* ÿÿú®å‚ÿ.¶Ú€ÿ.÷Çû */
- $"80FF 03E5 D6D9 AC94 B103 B0A2 877B 817C" /* €ÿ.åÖÙ¬”±.°¢‡{| */
- $"0100 0081 7C02 768D AC95 B002 AEB7 FB85" /* ...|.v¬•°.®·û… */
- $"FF01 CDB1 85FF 01C9 B890 FF01 D5B8 82FF" /* ÿ.ͱ…ÿ.ɸÿ.Õ¸‚ÿ */
- $"02E0 B3FC 87FF 01D5 AA94 B003 AE9F 857B" /* .à³ü‡ÿ.Õª”°.®Ÿ…{ */
- $"817C 0100 0081 7C02 788A AB95 AF02 ADB6" /* |...|.xŠ«•¯.­¶ */
- $"FB84 FF02 F0A5 E584 FF02 EEA6 EC90 FF02" /* û„ÿ.ð¥å„ÿ.î¦ìÿ. */
- $"FCAE E281 FF02 FCB4 DB87 FF01 D5A9 94AF" /* ü®âÿ.ü´Û‡ÿ.Õ©”¯ */
- $"03AC 9D83 7B81 7C01 0000 817C 0278 86A9" /* .¬ƒ{|...|.x†© */
- $"95AD 02AB B4FB 84FF 01BE BD85 FF01 BAC3" /* •­.«´û„ÿ.¾½…ÿ.ºÃ */
- $"92FF 01D6 B480 FF04 FCD8 A4B3 FB86 FF01" /* ’ÿ.Ö´€ÿ.üؤ³û†ÿ. */
- $"D4A7 94AD 03AB 9A81 7B81 7C01 0000 817C" /* Ô§”­.«š{|...| */
- $"0278 83A7 95AC 02AA B3FB 83FF 02E5 A3F2" /* .xƒ§•¬.ª³ûƒÿ.å£ò */
- $"84FF 02E1 A5F6 92FF 09FD AEDC FBDE B595" /* „ÿ.á¥ö’ÿÆý®ÜûÞµ• */
- $"B6A9 D886 FF01 D3A6 94AC 03A9 9880 7B81" /* ¶©Ø†ÿ.Ó¦”¬.©˜€{ */
- $"7C01 0000 817C 0278 80A5 95AC 02AA B3FB" /* |...|.x€¥•¬.ª³û */
- $"82FF 02FE B0CB 84FF 02FC ADD0 94FF 09DB" /* ‚ÿ.þ°Ë„ÿ.ü­Ð”ÿÆÛ */
- $"A1A8 95A2 D6FF D1AA FA85 FF01 D3A6 94AC" /* ¡¨•¢ÖÿѪú…ÿ.Ó¦”¬ */
- $"03A8 967F 7B81 7C01 0000 817C 0279 7FA3" /* .¨–.{|...|.y.£ */
- $"95AB 02A9 B2FB 82FF 02D7 A7FB 84FF 02D2" /* •«.©²û‚ÿ.קû„ÿ.Ò */
- $"AAFD 95FF 08AD B4DD FCFF FFFA A5D3 85FF" /* ªý•ÿ.­´Ýüÿÿú¥Ó…ÿ */
- $"01D3 A594 AB03 A694 7E7B 817C 0100 0081" /* .Ó¥”«.¦”~{|... */
- $"7C02 7A7D A095 A902 A7B1 FB81 FF02 F8A5" /* |.z} •©.§±ûÿ.ø¥ */
- $"DA84 FF02 F4A4 E096 FF01 DCC2 82FF 02D3" /* Ú„ÿ.ô¤à–ÿ.Ü‚ÿ.Ó */
- $"A5F8 84FF 01D2 A394 A902 A491 7D82 7C01" /* ¥ø„ÿ.Ò£”©.¤‘}‚|. */
- $"0000 817C 027A 7A9E 95A8 08A6 B1EF F3F2" /* ..|.zzž•¨.¦±ïóò */
- $"F2F6 C6B0 85FF 02C5 B4F5 95F2 03F3 F2B5" /* òöÆ°…ÿ.Å´õ•ò.óòµ */
- $"E881 FF03 FCA7 CCF6 82F2 02F7 CDA3 94A8" /* èÿ.ü§Ìö‚ò.÷Í£”¨ */
- $"01A3 8F83 7C01 0000 817C 027B 779C 96A7" /* .£ƒ|...|.{wœ–§ */
- $"00A8 82AB 019C E984 FF03 E9A6 AAAC 96AB" /* .¨‚«.œé„ÿ.馪¬–« */
- $"02AC A6C1 82FF 02D8 A0AC 83AB 00A9 95A7" /* .¬¦Á‚ÿ.Ø ¬ƒ«.©•§ */
- $"01A1 8D83 7C01 0000 817C 037B 7699 A595" /* .¡ƒ|...|.{v™¥• */
- $"A600 A580 A402 A599 C085 FF02 BCA1 A599" /* ¦.¥€¤.¥™À…ÿ.¼¡¥™ */
- $"A401 A5E9 81FF 02CB 96A3 83A4 00A5 95A6" /* ¤.¥éÿ.Ë–£ƒ¤.¥•¦ */
- $"029F 8A7B 827C 0100 0082 7C02 7596 A399" /* .ŸŠ{‚|...‚|.u–£™ */
- $"A402 A29F F584 FF01 DDA0 9BA4 09A0 BFFF" /* ¤.¢Ÿõ„ÿ.Ý ›¤Æ ¿ÿ */
- $"FFE6 ADAB D299 A59B A402 9D88 7B82 7C01" /* ÿæ­«Ò™¥›¤.ˆ{‚|. */
- $"0000 827C 0276 94A2 98A3 02A4 98D1 84FF" /* ..‚|.v”¢˜£.¤˜Ñ„ÿ */
- $"02F9 AFA0 9CA3 09A4 B9A9 A0CB FCFF B599" /* .ù¯ œ£Æ¤¹© Ëüÿµ™ */
- $"A49A A302 9C87 7B82 7C01 0000 827C 0275" /* ¤š£.œ‡{‚|...‚|.u */
- $"92A2 98A3 02A1 A4F5 84FF 01CF 9E9D A303" /* ’¢˜£.¡¤õ„ÿ.Ïž£. */
- $"A0A9 DEFB 80FF 02F3 9CA0 9AA3 029B 867B" /*  ©Þû€ÿ.󜠚£.›†{ */
- $"827C 0100 0081 7C03 7D74 8FA1 97A2 05A3" /* ‚|...|.}t¡—¢.£ */
- $"9FA0 9ED6 FE81 FF02 F0A6 A09D A202 A0A9" /* Ÿ žÖþÿ.𦠢. © */
- $"F382 FF01 D893 9AA2 0299 837B 827C 0100" /* ó‚ÿ.Ø“š¢.™ƒ{‚|.. */
- $"0081 7C03 7D73 8D9F 97A0 069F 9FF1 D697" /* .|.}sŸ— .ŸŸñÖ— */
- $"A6E6 80FF 01C1 9B9F A001 9BD2 83FF 02BB" /* ¦æ€ÿ.Á›Ÿ .›Òƒÿ.» */
- $"94A1 98A0 0297 827B 827C 0100 0081 7C03" /* ”¡˜ .—‚{‚|...|. */
- $"7D72 8A9E 979F 0B9D A6FB FFF9 BF91 B6F6" /* }rŠž—Ÿ.¦ûÿù¿‘¶ö */
- $"E69E 9E9F 9F01 9BB4 83FF 03FA A199 A096" /* æžžŸŸ.›´ƒÿ.ú¡™ – */
- $"9F03 9E95 807B 827C 0100 0081 7C03 7D72" /* Ÿ.ž•€{‚|...|.}r */
- $"889D 979E 0199 B281 FF04 EFAD 9EA9 9CA0" /* ˆ—ž.™²ÿ.ï­ž©œ  */
- $"9E02 9D9F EE83 FF01 E492 979E 039D 9480" /* ž.Ÿîƒÿ.ä’—ž.”€ */
- $"7B82 7C01 0000 817C 037D 7487 9B97 9D01" /* {‚|...|.}t‡›—. */
- $"96BF 82FF 02FE B697 A29D 0198 D184 FF02" /* –¿‚ÿ.þ¶—¢.˜Ñ„ÿ. */
- $"C191 9E95 9D03 9C92 7F7B 827C 0100 0081" /* Á‘ž•.œ’.{‚|... */
- $"7C03 7D75 849A 979C 0194 CE81 FF02 F8BD" /* |.}u„š—œ.”Îÿ.ø½ */
- $"9BA3 9C01 98B4 84FF 02F8 9D99 959C 039B" /* ›£œ.˜´„ÿ.ø™•œ.› */
- $"907E 7B82 7C01 0000 817C 037D 7482 9997" /* ~{‚|...|.}t‚™— */
- $"9B01 94DF 80FF 03EE AD95 9AA3 9B02 9A9D" /* ›.”߀ÿ.î­•š£›.š */
- $"EF84 FF02 CC91 9C94 9B03 9A8F 7C7B 827C" /* ï„ÿ.Ì‘œ”›.š|{‚| */
- $"0100 0081 7C03 7D74 8098 979A 0697 ECFF" /* ...|.}t€˜—š.—ìÿ */
- $"FFE0 A195 A69A 0195 D084 FF02 F098 9994" /* ÿà¡•¦š.•Ð„ÿ.𘙔 */
- $"9A02 998D 7B83 7C01 0000 817C 037D 737E" /* š.™{ƒ|...|.}s~ */
- $"9896 9A06 989F F9FF D099 97A7 9A02 96AD" /* ˜–š.˜ŸùÿЙ—§š.–­ */
- $"FD83 FF02 FCA6 9794 9A02 998D 7B83 7C01" /* ýƒÿ.ü¦—”š.™{ƒ|. */
- $"0000 817C 037D 737D 9796 9905 95AD FCBE" /* ..|.}s}—–™.•­ü¾ */
- $"9498 A999 0196 DD83 FF02 F7A3 9794 9902" /* ”˜©™.–݃ÿ.÷£—”™. */
- $"988C 7A83 7C01 0000 817C 037D 737B 9696" /* ˜Œzƒ|...|.}s{–– */
- $"9803 95B0 B392 AB98 0294 AAF9 82FF 01CF" /* ˜.•°³’«˜.”ªù‚ÿ.Ï */
- $"9595 9802 978A 7A83 7C01 0000 817C 037D" /* ••˜.—Šzƒ|...|.} */
- $"747B 9498 9700 94AD 9708 93B9 F9FF FFF6" /* t{”˜—.”­—.“¹ùÿÿö */
- $"C797 9695 9702 9688 7983 7C01 0000 817C" /* Ç—–•—.–ˆyƒ|...| */
- $"037D 7479 93CA 9606 92A4 BEB8 9F91 9596" /* .}ty“Ê–.’¤¾¸Ÿ‘•– */
- $"9602 9588 7983 7C01 0000 817C 037D 7478" /* –.•ˆyƒ|...|.}tx */
- $"93CB 9603 9390 9193 9896 0294 8779 837C" /* “Ë–.“‘“˜–.”‡yƒ| */
- $"0100 0081 7C03 7D75 7892 EA95 0293 8679" /* ...|.}ux’ê•.“†y */
- $"837C 0100 0081 7C03 7D75 7892 EA95 0293" /* ƒ|...|.}ux’ê•.“ */
- $"8679 837C 0100 0081 7C03 7D76 7792 EA95" /* †yƒ|...|.}vw’ê• */
- $"0293 8679 837C 0100 0081 7C03 7D76 7792" /* .“†yƒ|...|.}vw’ */
- $"EA95 0293 8579 837C 0000 827C 037D 7776" /* ê•.“…yƒ|..‚|.}wv */
- $"8FEA 9402 9182 7883 7C00 0083 7C03 7A70" /* ê”.‘‚xƒ|..ƒ|.zp */
- $"8288 E989 0285 7A79 837C 0100 0082 7C02" /* ‚ˆé‰.…zyƒ|...‚|. */
- $"7D78 76EA 7901 7779 847C 0100 00FB 7C01" /* }xvêy.wy„|...û|. */
- $"0000 FB7C 0100 00FB 7C01 0000 FB7C 0100" /* ..û|...û|...û|.. */
- $"00FA 7C81 00F9 7C82 00F7 7C83 00F6 7C86" /* .ú|.ù|‚.÷|ƒ.ö|† */
- $"00F3 7CFF 00FF 0000 00FF 00FF 00FF 00FF" /* .ó|ÿ.ÿ...ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 74D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.Ÿt× */
- $"00A6 74D3 0001 7474 8000 9D73 8474 D000" /* .¦tÓ..tt€.s„tÐ. */
- $"0374 7400 749E 7702 7673 7283 74D0 0003" /* .tt.tžw.vsrƒtÐ.. */
- $"7381 9FAB 9DAC 03A8 977A 7383 74CD 0004" /* sŸ«¬.¨—zsƒtÍ.. */
- $"7400 79AF CC9E CF03 CCBF 9B73 8374 CD00" /* t.y¯ÌžÏ.Ì¿›sƒtÍ. */
- $"0474 0088 C6D2 9FD3 03CA AF7C 7282 74CD" /* .t.ˆÆÒŸÓ.ʯ|r‚tÍ */
- $"0003 7400 8EC9 A0D3 03CC B27D 7282 74CC" /* ..t.ŽÉ Ó.̲}r‚tÌ */
- $"0004 7474 7094 CBA0 D203 CCB3 7C72 8374" /* ..ttp”Ë Ò.̳|rƒt */
- $"CB00 0474 7471 A1CE A0D1 03CC B67F 72B8" /* Ë..ttq¡Î Ñ.̶.r¸ */
- $"7495 0005 7474 0078 B7D0 A0D1 03CE BE8B" /* t•..tt.x·Ð Ñ.ξ‹ */
- $"70BA 7492 0006 7474 0070 96C9 CFA0 D004" /* pºt’..tt.p–ÉÏ Ð. */
- $"CFC6 A675 71BA 7490 0006 7474 0072 8FC0" /* ÏƦuqºt..tt.rÀ */
- $"CDA2 CF03 CBBF 9D7A B672 0473 0073 7474" /* Í¢Ï.Ë¿z¶r.s.stt */
- $"8E00 0674 7400 799D C3CD A3CF 04CE CAC3" /* Ž..tt.yÃÍ£Ï.ÎÊà */
- $"B2A0 B598 0496 8D79 0074 8D00 0774 7400" /* ² µ˜.–y.t..tt. */
- $"79A8 C8CE CEA4 CF03 CECD CBC9 B5C7 03C3" /* y¨ÈÎΤÏ.ÎÍËɵÇ.à */
- $"B58F 0080 7489 0081 7403 7192 C1C8 E2C9" /* µ.€t‰.t.q’ÁÈâÉ */
- $"03C7 B995 7282 7486 0001 7474 8000 026E" /* .ǹ•r‚t†..tt€..n */
- $"91AC E3AF 04AE A58A 6F71 8000 0174 7484" /* ‘¬ã¯.®¥Šoq€..tt„ */
- $"0008 7400 7075 8085 8487 8E80 8FAA 9000" /* ..t.pu€…„‡Ž€ª. */
- $"8FB0 9080 8F09 8B87 8584 847F 7600 7474" /* °€Æ‹‡…„„.v.tt */
- $"8200 0774 0070 8BAF BCBF C0E7 C109 C0BF" /* ‚..t.p‹¯¼¿ÀçÁÆÀ¿ */
- $"BEBE B8A6 8572 7474 8200 0370 8DC0 C9EE" /* ¾¾¸¦…rtt‚..pÀÉî */
- $"CA05 C9C4 B185 0074 8000 0474 0078 B4C8" /* Ê.Éı….t€..t.x´È */
- $"F0CA 0CC9 BFA1 7600 7400 0074 0088 BFC8" /* ðÊ.É¿¡v.t..t.ˆ¿È */
- $"B3C9 03CA C7C9 CAB7 C90A C3AD 7F00 7400" /* ³É.ÊÇÉÊ·ÉÂí..t. */
- $"0074 708C C0B3 C805 C9C3 B8B3 C4C9 B6C8" /* .tpŒÀ³È.Éø³ÄÉ¶È */
- $"0AC3 AE7F 0074 0074 7400 88BD B4C7 05C2" /* Âî..t.tt.ˆ½´Ç. */
- $"F1EC B2C4 C8B5 C70B C1AB 7C00 7400 7474" /* ñì²ÄȵÇ.Á«|.t.tt */
- $"0082 BAC6 B3C7 04C6 F2FF E6B3 B6C7 0BC0" /* .‚ºÆ³Ç.Æòÿ泶Ç.À */
- $"A67A 7374 0074 7400 7DB5 C5B3 C606 C3E7" /* ¦zst.tt.}µÅ³Æ.Ãç */
- $"FFFF D5B6 C8B4 C60B BDA1 7573 7400 7474" /* ÿÿնȴÆ.½¡ust.tt */
- $"0079 B0C4 B3C5 01C2 D880 FF02 C0BD C6B2" /* .y°Ä³Å.ÂØ€ÿ.À½Æ² */
- $"C50C C4BB 9D75 7374 0074 7473 75AA C2B3" /* Å.Ä»ust.ttsuªÂ³ */
- $"C406 C3C9 FAFF FFF0 B3B3 C403 C3B8 9673" /* Ä.ÃÉúÿÿð³³Ä.ø–s */
- $"8474 01A5 C1B4 C301 C1EB 80FF 02D6 B4C5" /* „t.¥Á´Ã.Áë€ÿ.Ö´Å */
- $"B1C3 03C2 B591 7283 7402 719E BFB4 C201" /* ±Ã.µ‘rƒt.qž¿´Â. */
- $"BFD5 80FF 03FD BBBD C3B0 C203 C0B2 8E72" /* ¿Õ€ÿ.ý»½Ã°Â.À²Žr */
- $"8374 0270 99BD B4C1 02C0 C4F6 80FF 02E6" /* ƒt.p™½´Á.ÀÄö€ÿ.æ */
- $"B1C2 B0C1 03BE AF87 7283 7402 7193 BBB5" /* ±Â°Á.¾¯‡rƒt.q“»µ */
- $"C001 BCE1 81FF 02C6 B7C1 AFC0 06BD AC84" /* À.¼áÿ.Æ·Á¯À.½¬„ */
- $"7274 7400 8074 0270 8CB9 B1BF 00C0 80C1" /* rtt.€t.pŒ¹±¿.À€Á */
- $"02BD CAFD 80FF 01F1 B1B0 BF06 BBA9 8172" /* .½Êý€ÿ.ñ±°¿.»©r */
- $"7474 0080 7402 7088 B7B0 BF07 C1B9 ACAB" /* tt.€t.pˆ·°¿.Á¹¬« */
- $"AEBC BEEB 81FF 02D1 B3C0 AEBF 06BA A67C" /* ®¼¾ëÿ.ѳÀ®¿.º¦| */
- $"7274 7400 8074 0271 83B4 AFBE 08BF AFB4" /* rtt.€t.qƒ´¯¾.¿¯´ */
- $"D9E3 D2AD B1D3 81FF 02F8 B4BC AEBE 06B8" /* ÙãÒ­±Óÿ.ø´¼®¾.¸ */
- $"A27A 7374 7400 8074 0372 7DB1 BCAE BD01" /* ¢zstt.€t.r}±¼®½. */
- $"B9CA 81FF 03F6 B4B9 F381 FF02 D8AF BEAD" /* ¹Êÿ.ö´¹óÿ.د¾­ */
- $"BD0D B69F 7973 7474 0000 7474 727A ADBB" /* ½.¶Ÿystt..ttrz­» */
- $"ADBC 03BB ABB7 E681 FF02 E6AE D881 FF02" /* ­¼.»«·æÿ.æ®Øÿ. */
- $"FDB7 B8AD BC0D B49A 7673 7474 0000 7474" /* ý·¸­¼.´švstt..tt */
- $"7378 A9BA ACBB 0CBC ACDB D7A6 BDF0 FFFF" /* sx©º¬».¼¬Ûצ½ðÿÿ */
- $"FABA BEF7 81FF 02DF ACBC ACBB 01B2 9781" /* úº¾÷ÿ.߬¼¬».²— */
- $"7407 0000 7474 7374 A4B8 ABB9 0DBA B3BB" /* t...ttst¤¸«¹.º³» */
- $"FFFF F7C2 A4CB FAFC C0B4 DC82 FF02 BAB4" /* ÿÿ÷¤ËúüÀ´Ü‚ÿ.º´ */
- $"BAAB B901 B093 8174 0100 0080 7402 729F" /* º«¹.°“t...€t.rŸ */
- $"B6AB B902 BAAA E981 FF07 ECB3 ABD1 BBB6" /* ¶«¹.ºªéÿ.쳫ѻ¶ */
- $"C0FA 81FF 02E4 AABA AAB9 03B8 AD8E 7380" /* Àúÿ.䪺ª¹.¸­Žs€ */
- $"7401 0000 8074 0272 9BB6 AAB8 02B9 ADC6" /* t...€t.r›¶ª¸.¹­Æ */
- $"84FF 05DC AFB7 B8B4 E082 FF02 BCB1 B9A9" /* „ÿ.ܯ·¸´à‚ÿ.¼±¹© */
- $"B803 B6AB 8A72 8074 0100 0080 7402 7095" /* ¸.¶«Šr€t...€t.p• */
- $"B4AA B602 B5AB F484 FF06 E9B6 B5B6 B4C2" /* ´ª¶.µ«ô„ÿ.鶵¶´Â */
- $"FC81 FF02 E6A9 B7A9 B603 B5A8 8872 8074" /* üÿ.æ©·©¶.µ¨ˆr€t */
- $"0100 0080 7402 6F91 B3A9 B602 B7AD D684" /* ...€t.o‘³©¶.·­Ö„ */
- $"FF02 FAC0 B480 B601 B3E4 82FF 02BD AFB7" /* ÿ.úÀ´€¶.³ä‚ÿ.½¯· */
- $"A8B6 03B4 A584 7280 7401 0000 8074 0270" /* ¨¶.´¥„r€t...€t.p */
- $"8DB2 A9B6 02B4 ACE7 84FF 01D9 B181 B602" /* ²©¶.´¬ç„ÿ.Ù±¶. */
- $"B3C5 FE81 FF02 E8A8 B7A8 B603 B3A3 8172" /* ³Åþÿ.訷¨¶.³£r */
- $"8074 0100 0080 7402 7087 B0A8 B505 B6AA" /* €t...€t.p‡°¨µ.¶ª */
- $"BDA4 C1F5 81FF 02F3 B8B4 82B5 01B2 E782" /* ½¤Áõÿ.ó¸´‚µ.²ç‚ */
- $"FF02 BFAD B6A7 B503 B2A1 7F72 8074 0100" /* ÿ.¿­¶§µ.²¡.r€t.. */
- $"0080 7402 7083 ADA7 B40C B5AC BBFF F2B8" /* .€t.pƒ­§´.µ¬»ÿò¸ */
- $"A2D0 FBFF FFCE B083 B401 B1C5 82FF 02EA" /* ¢Ðûÿÿΰƒ´.±Å‚ÿ.ê */
- $"A7B5 A7B4 03B0 9E7C 7380 7401 0000 8074" /* §µ§´.°ž|s€t...€t */
- $"0271 80AB A8B3 01A5 EC80 FF06 E4AA A9E2" /* .q€«¨³.¥ì€ÿ.䪩â */
- $"EAB2 B284 B301 B1E8 82FF 02BF ABB4 A6B3" /* ê²²„³.±è‚ÿ.¿«´¦³ */
- $"03AE 9B79 7380 7401 0000 8074 0272 7DA8" /* .®›ys€t...€t.r}¨ */
- $"A6B2 02B3 A6C8 82FF 04FE D3A8 B2B1 85B2" /* ¦².³¦È‚ÿ.þÓ¨²±…² */
- $"01AE C582 FF02 EAA6 B3A6 B203 AC98 7873" /* .®Å‚ÿ.꦳¦².¬˜xs */
- $"8074 0100 0080 7403 7278 A5B0 A5B1 02AF" /* €t...€t.rx¥°¥±.¯ */
- $"A9F7 84FF 01DA AB86 B102 B0AF E982 FF02" /* ©÷„ÿ.Ú«†±.°¯é‚ÿ. */
- $"BEA9 B2A5 B103 AB95 7773 8074 0100 0080" /* ¾©²¥±.«•ws€t...€ */
- $"7403 7276 A2AF A4B0 02B1 A2D5 84FF 02F8" /* t.rv¢¯¤°.±¢Õ„ÿ.ø */
- $"BAAE 87B0 01AC C682 FF02 EAA4 B1A5 B003" /* º®‡°.¬Æ‚ÿ.ꤱ¥°. */
- $"A991 7573 8074 0100 0080 7402 7375 9FA4" /* ©‘us€t...€t.suŸ¤ */
- $"AE03 AFA9 B0FE 84FF 01D3 AA88 AE02 ADAD" /* ®.¯©°þ„ÿ.Óªˆ®.­­ */
- $"E982 FF02 BCA7 AFA4 AE01 A78E 8274 0100" /* é‚ÿ.¼§¯¤®.§Ž‚t.. */
- $"0081 7402 729B ADA3 AE02 AFA0 E384 FF02" /* .t.r›­£®.¯ ã„ÿ. */
- $"F0B0 AD89 AE01 AAC4 82FF 02E9 A2AF A4AE" /* ð°­‰®.ªÄ‚ÿ.颯¤® */
- $"01A5 8C82 7401 0000 8174 0270 98AC 97AD" /* .¥Œ‚t...t.p˜¬—­ */
- $"0DAC ADAE ACAE ADAC AEAD ACAE AEA4 BB85" /* .¬­®¬®­¬®­¬®®¤»… */
- $"FF11 C7A7 AEAD ACAE ADAC AEAC ACAE ACAD" /* ÿ.ǧ®­¬®­¬®¬¬®¬­ */
- $"AEAB ABE9 82FF 0EBB A6AE ADAC AEAC ACAE" /* ®««é‚ÿ.»¦®­¬®¬¬® */
- $"ACAD AEAC ADAE 97AD 01A3 8982 7401 0000" /* ¬­®¬­®—­.£‰‚t... */
- $"8174 0270 94AA 95AC 0FAD A79F A1A2 9FA2" /* t.p”ª•¬.­§Ÿ¡¢Ÿ¢ */
- $"A29F A2A1 9FA4 A9A1 EF84 FF12 E6A2 9FA2" /* ¢Ÿ¢¡Ÿ¤©¡ï„ÿ.梟¢ */
- $"A1A0 A3A1 A0A2 A0A0 A3A0 A0A2 9F9D C282" /* ¡ £¡ ¢  £  ¢ŸÂ‚ */
- $"FF10 E6A0 A9A0 A0A2 A0A0 A2A0 A1A3 A0A1" /* ÿ.æ ©  ¢  ¢ ¡£ ¡ */
- $"A2A2 AB94 AC03 ABA1 8673 8174 0100 0081" /* ¢¢«”¬.«¡†st... */
- $"7402 7091 A995 AB0E A9AF FACE C2FF BCCA" /* t.p‘©•«.©¯úÎÂÿ¼Ê */
- $"FFB6 DEFA B4A1 C884 FF14 FDB2 C0FF BFCF" /* ÿ¶Þú´¡È„ÿ.ý²Àÿ¿Ï */
- $"FFAF DCFA AFEA F1A8 F5E4 B2FE D79D E982" /* ÿ¯Üú¯êñ¨õä²þ×é‚ */
- $"FF0F B8A1 E4F8 A9EA F0AE F7E0 ACFF D5C0" /* ÿ.¸¡äø©êð®÷à¬ÿÕÀ */
- $"D1A5 94AB 03AA 9F84 7381 7401 0000 8174" /* Ñ¥”«.ªŸ„st...t */
- $"026F 8CA8 95A9 0EA7 B1FF CEC2 FFD0 DBFF" /* .oŒ¨•©.§±ÿÎÂÿÐÛÿ */
- $"B3E0 FFB6 A2F9 84FF 14D7 99D8 FFBE D0FF" /* ³àÿ¶¢ù„ÿ.×™Øÿ¾Ðÿ */
- $"C5E9 FFAC EEFA C0FE E7B0 FFE8 A3B9 82FF" /* Åéÿ¬îúÀþç°ÿ裹‚ÿ */
- $"0FE2 99EA FFC1 F5F4 ABFB EDC4 FFD7 BED6" /* .â™êÿÁõô«ûíÄÿ×¾Ö */
- $"A394 A903 A89C 8173 8174 0100 0080 7403" /* £”©.¨œst...€t. */
- $"756E 88A6 95A8 04A6 B0FF DDD3 81FF 04C9" /* unˆ¦•¨.¦°ÿÝÓÿ.É */
- $"EBFB A6D5 84FF 06F6 A3DE FFFF D1DE 80FF" /* ëû¦Õ„ÿ.ö£ÞÿÿÑÞ€ÿ */
- $"02FD C4F2 80FF 06EE C6FF FFFA A7E2 82FF" /* .ýÄò€ÿ.îÆÿÿú§â‚ÿ */
- $"01B0 D780 FF02 F6C3 FB80 FF03 E3D3 D5A2" /* .°×€ÿ.öÃû€ÿ.ãÓÕ¢ */
- $"94A8 03A7 9A7F 7381 7401 0000 8074 0375" /* ”¨.§š.st...€t.u */
- $"6E85 A495 A702 A5AF FA85 FF01 C7AB 85FF" /* n…¤•§.¥¯ú…ÿ.Ç«…ÿ */
- $"01C4 B290 FF01 D1B1 82FF 02DD ACFB 87FF" /* .IJÿ.ѱ‚ÿ.ݬû‡ÿ */
- $"01D1 A194 A703 A598 7D73 8174 0100 0081" /* .Ñ¡”§.¥˜}st... */
- $"7402 7082 A295 A602 A4AE FB84 FF02 EF9C" /* t.p‚¢•¦.¤®û„ÿ.ïœ */
- $"E484 FF02 EC9E EB90 FF02 FCA7 DF81 FF02" /* ä„ÿ.ìžëÿ.ü§ßÿ. */
- $"FCAD D787 FF01 D0A0 94A6 03A3 957B 7381" /* ü­×‡ÿ.Р”¦.£•{s */
- $"7401 0000 8174 0270 7EA1 95A6 02A4 AEFB" /* t...t.p~¡•¦.¤®û */
- $"84FF 01B8 B885 FF01 B4BF 92FF 01D4 AD80" /* „ÿ.¸¸…ÿ.´¿’ÿ.Ô­€ */
- $"FF04 FCD4 9CAC FA86 FF01 D0A0 94A6 03A3" /* ÿ.üÔœ¬ú†ÿ.Р”¦.£ */
- $"937A 7381 7401 0000 8174 0270 7B9F 95A4" /* “zst...t.p{Ÿ•¤ */
- $"02A2 ACFA 83FF 02E3 9BF1 84FF 02DE 9EF5" /* .¢¬úƒÿ.ã›ñ„ÿ.Þžõ */
- $"92FF 09FD A8D9 FADB AD8B B1A1 D486 FF01" /* ’ÿÆý¨ÙúÛ­‹±¡Ô†ÿ. */
- $"CF9E 94A4 03A1 9178 7381 7401 0000 8174" /* Ïž”¤.¡‘xst...t */
- $"0270 779D 95A3 02A1 ACFA 82FF 02FD A9C7" /* .pw•£.¡¬ú‚ÿ.ý©Ç */
- $"84FF 02FC A5CD 94FF 09D9 989F 8B9B D3FF" /* „ÿ.ü¥Í”ÿÆÙ˜Ÿ‹›Óÿ */
- $"CDA1 F985 FF01 CF9D 94A3 03A0 8E77 7381" /* Í¡ù…ÿ.Ï”£. Žws */
- $"7401 0000 8174 0271 779A 95A2 02A0 ABFA" /* t...t.qwš•¢. «ú */
- $"82FF 02D4 A0FB 84FF 02CE A2FD 95FF 08A6" /* ‚ÿ.Ô û„ÿ.΢ý•ÿ.¦ */
- $"AEDB FCFF FFFA 9ECF 85FF 01CE 9C94 A203" /* ®ÛüÿÿúžÏ…ÿ.Îœ”¢. */
- $"9E8C 7673 8174 0100 0081 7402 7275 9895" /* žŒvst...t.ru˜• */
- $"A102 9FAA FA81 FF02 F79D D784 FF02 F29C" /* ¡.Ÿªúÿ.÷ׄÿ.òœ */
- $"DE96 FF01 DABD 82FF 02D0 9DF8 84FF 01CE" /* Þ–ÿ.Ú½‚ÿ.Ðø„ÿ.Î */
- $"9A94 A102 9C8A 7582 7401 0000 8174 0272" /* š”¡.œŠu‚t...t.r */
- $"7196 959F 089D A9EE F2F1 F1F6 C0AA 85FF" /* q–•Ÿ.©îòññöÀª…ÿ */
- $"02C0 ADF5 95F1 03F2 F1AE E681 FF03 FCA0" /* .À­õ•ñ.òñ®æÿ.ü  */
- $"C7F5 82F1 02F6 C89A 949F 029A 8775 8274" /* Çõ‚ñ.öÈš”Ÿ.š‡u‚t */
- $"0100 0081 7402 736F 9396 9E00 9F82 A201" /* ...t.so“–ž.Ÿ‚¢. */
- $"93E8 84FF 03E8 9EA2 A396 A202 A39D BB82" /* “è„ÿ.螢£–¢.£»‚ */
- $"FF02 D597 A383 A200 A195 9E01 9985 8374" /* ÿ.Õ—£ƒ¢.¡•ž.™…ƒt */
- $"0100 0081 7403 736E 929D 959E 009D 809C" /* ...t.sn’•ž.€œ */
- $"029D 91BC 84FF 03FE B599 9D99 9C01 9DE7" /* .‘¼„ÿ.þµ™™œ.ç */
- $"81FF 02C7 8D9B 839C 009D 959E 0198 8383" /* ÿ.Ç›ƒœ.•ž.˜ƒƒ */
- $"7401 0000 8274 016E 8F9A 9C02 9A98 F484" /* t...‚t.nšœ.š˜ô„ */
- $"FF01 DA99 9B9C 0997 B9FF FFE4 A7A6 CF91" /* ÿ.Ú™›œÆ—¹ÿÿ䧦ϑ */
- $"9D9B 9C02 9681 7382 7401 0000 8274 026F" /* ›œ.–s‚t...‚t.o */
- $"8C9A 989B 029C 90CF 84FF 02F8 A998 9D9B" /* Œš˜›.œÏ„ÿ.ø©˜› */
- $"08B3 A39A C8FC FFB0 919C 9A9B 0294 8073" /* .³£šÈüÿ°‘œš›.”€s */
- $"8274 0100 0082 7402 6D8A 9998 9A02 989C" /* ‚t...‚t.mŠ™˜š.˜œ */
- $"F484 FF01 CB94 9D9A 0397 A2DD FB80 FF02" /* ô„ÿ.Ë”š.—¢Ýû€ÿ. */
- $"F294 979A 9A02 927E 7382 7401 0000 8174" /* ò”—šš.’~s‚t...t */
- $"0375 6B87 9898 9904 969A 96D2 FE81 FF02" /* .uk‡˜˜™.–š–Òþÿ. */
- $"EF9E 979D 9902 97A1 F382 FF02 D68A 9A99" /* ïž—™.—¡ó‚ÿ.ÖŠš™ */
- $"9902 917C 7382 7401 0000 8174 0375 6A85" /* ™.‘|s‚t...t.uj… */
- $"9797 9806 9798 F1D3 8F9F E480 FF01 BB92" /* ——˜.—˜ñÓŸä€ÿ.»’ */
- $"9F98 0192 CF83 FF02 B68A 9998 9802 8F7B" /* Ÿ˜.’σÿ.¶Š™˜˜.{ */
- $"7382 7401 0000 8174 0375 6A82 9597 960B" /* s‚t...t.uj‚•—–. */
- $"939F FBFF F9BB 89B0 F5E4 9595 9F96 0192" /* “Ÿûÿù»‰°õä••Ÿ–.’ */
- $"AD83 FF03 FA9B 9097 9796 028D 7973 8274" /* ­ƒÿ.ú›——–.ys‚t */
- $"0100 0081 7403 756A 8195 9796 0191 AC81" /* ...t.uj•—–.‘¬ */
- $"FF04 EEA8 97A2 94A0 9602 9597 EC83 FF01" /* ÿ.¢” –.•—ìƒÿ. */
- $"E28A 9796 0395 8C78 7382 7401 0000 8174" /* ⊗–.•Œxs‚t...t */
- $"0375 6C7F 9497 9501 8EBB 82FF 02FE B28E" /* .ul.”—•.Ž»‚ÿ.þ²Ž */
- $"A295 018F CE84 FF02 BD89 9695 9503 948B" /* ¢•.΄ÿ.½‰–••.”‹ */
- $"7873 8274 0100 0081 7403 756D 7D92 9794" /* xs‚t...t.um}’—” */
- $"018C CB81 FF02 F8B8 93A3 9401 90AE 84FF" /* .ŒËÿ.ø¸“£”.®„ÿ */
- $"02F7 9691 9594 0393 8A77 7382 7401 0000" /* .÷–‘•”.“Šws‚t... */
- $"8174 0375 6C7B 9197 9301 8CDD 80FF 02ED" /* t.ul{‘—“.ŒÝ€ÿ.í */
- $"A78D A493 0292 96EE 84FF 02C8 8894 9493" /* §¤“.’–î„ÿ.Ȉ””“ */
- $"0392 8875 7382 7401 0000 8174 0375 6C79" /* .’ˆus‚t...t.uly */
- $"9096 9207 9190 EBFF FFDE 9A8D A692 018C" /* –’.‘ëÿÿÞš¦’.Œ */
- $"CC84 FF02 EF91 9194 9201 9186 8474 0100" /* Ì„ÿ.ï‘‘”’.‘†„t.. */
- $"0081 7403 756B 7790 9692 0690 97F8 FFCC" /* .t.ukw–’.—øÿÌ */
- $"918E A792 028E A6FD 83FF 02FC 9F8F 9492" /* ‘Ž§’.Ž¦ýƒÿ.üŸ”’ */
- $"0191 8584 7401 0000 8174 0375 6B75 8E96" /* .‘…„t...t.ukuŽ– */
- $"9005 8BA7 FCBA 8B8E A990 018D DB83 FF02" /* .‹§üº‹Ž©.Ûƒÿ. */
- $"F79B 8D94 9002 8F83 7383 7401 0000 8174" /* ÷›”.ƒsƒt...t */
- $"0375 6C74 8E96 9004 8CAA AD89 8FAA 9002" /* .ultŽ–.Œª­‰ª. */
- $"8CA3 F982 FF01 CB8C 9590 028F 8373 8374" /* Œ£ù‚ÿ.ËŒ•.ƒsƒt */
- $"0100 0081 7403 756B 728D 988F 008B AD8F" /* ...t.ukr˜.‹­ */
- $"088A B4F9 FFFF F6C3 8E8E 958F 028E 8172" /* .Š´ùÿÿöÃŽŽ•.Žr */
- $"8374 0100 0081 7403 756C 718C CA8E 068A" /* ƒt...t.ulqŒÊŽ.Š */
- $"9DBA B398 898D 968E 028D 8072 8374 0100" /* º³˜‰–Ž.€rƒt.. */
- $"0081 7403 756C 718B CB8E 038B 8888 8B98" /* .t.ulq‹ËŽ.‹ˆˆ‹˜ */
- $"8E02 8C80 7283 7401 0000 8174 0375 6D71" /* Ž.Œ€rƒt...t.umq */
- $"8BEA 8E02 8C80 7283 7401 0000 8174 0375" /* ‹êŽ.Œ€rƒt...t.u */
- $"6D70 8AEA 8D02 8B7F 7283 7401 0000 8174" /* mpŠê.‹.rƒt...t */
- $"0375 6E70 8AEA 8D02 8B7E 7283 7401 0000" /* .unpŠê.‹~rƒt... */
- $"8174 0375 6E70 8AEA 8D02 8B7E 7283 7400" /* t.unpŠê.‹~rƒt. */
- $"0082 7403 756F 6E88 EA8C 0289 7B71 8374" /* .‚t.uonˆêŒ.‰{qƒt */
- $"0000 8374 0372 697B 81E9 8202 7E73 7283" /* ..ƒt.ri{é‚.~srƒ */
- $"7401 0000 8274 0475 706E 7172 E671 0372" /* t...‚t.upnqræq.r */
- $"7270 7284 7401 0000 FB74 0100 00FB 7401" /* rpr„t...ût...ût. */
- $"0000 FB74 0100 00FB 7401 0000 FA74 8100" /* ..ût...ût...út. */
- $"F974 8200 F774 8300 F674 8600 F374 FF00" /* ùt‚.÷tƒ.öt†.ótÿ. */
- $"FF00 0000 7438 6D6B 0000 4008 0000 0000" /* ÿ...t8mk..@..... */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0101 0101 0202 0202 0202 0202 0202 0202" /* ................ */
- $"0202 0202 0202 0202 0202 0202 0202 0101" /* ................ */
- $"0101 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 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0102 0202" /* ................ */
- $"0304 0505 0606 0606 0606 0606 0606 0606" /* ................ */
- $"0606 0606 0606 0606 0606 0606 0606 0505" /* ................ */
- $"0503 0302 0100 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 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0001 0100 0000" /* ................ */
- $"0204 0506 0707 0707 0707 0707 0707 0707" /* ................ */
- $"0707 0707 0707 0707 0707 0707 0707 0606" /* ................ */
- $"090A 0805 0302 0100 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 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0101 001C 2F31" /* ............../1 */
- $"3436 383A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A" /* 468::::::::::::: */
- $"3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A34" /* :::::::::::::::4 */
- $"120B 0F0B 0704 0201 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 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0004 8FF3 FAF9" /* ............óúù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA" /* ùùùùùùùùùùùùùùúú */
- $"C433 1112 0C07 0402 0100 0000 0000 0000" /* Ä3.............. */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 0067 FFFF FFFF" /* ...........gÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFC3 201A 130C 0703 0100 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 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 00A9 FFFF FFFF" /* ...........©ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFF8 4A20 1B11 0A05 0200 0000 0000 0000" /* ÿøJ ..Â......... */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0002 00B6 FFFF FFFF" /* ...........¶ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFB 5928 2216 0D07 0200 0000 0000 0000" /* ÿûY("........... */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0103 07CC FFFF FFFF" /* ...........Ìÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFD 6231 291B 1109 0401 0000 0000 0000" /* ÿýb1)..Æ........ */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0201 21F0 FFFF FFFF" /* ..........!ðÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 7337 2F21 160D 0704 0303 0303 0303" /* ÿÿs7/!.......... */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0302 0201 0100" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0001 0500 69FF FFFF FFFF" /* ..........iÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 9A38 3628 1C14 0E0A 0909 0909 0909" /* ÿÿš86(...ÂÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0807 0604 0302" /* ÆÆÆÆÆÆÆÆÆÆ...... */
- $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0203 0021 DFFF FFFF FFFF" /* .........!ßÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF E653 312D 231B 1512 1011 1010 1010" /* ÿÿæS1-#......... */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 0E0C 0A08 0504" /* ............Â... */
- $"0301 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0002 0200 34D3 FFFF FFFF FFFF" /* ........4Óÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFD6 6E40 312A 2522 2121 2121 2121" /* ÿÿÿÖn@1*%"!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2120 1E1B 1814 0D00" /* !!!!!!!!! ...... */
- $"0203 0100 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0102 006C F4FF FFFF FFFF FFFF" /* .......lôÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FEE8 DAD9 D9D8 D8D8 D8D8 D8D8" /* ÿÿÿÿþèÚÙÙØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D7D7 D6D5 D5A9" /* ØØØØØØØØØØ××ÖÕÕ© */
- $"1E00 0200 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0001 0300 71FF FFFF FFFF FFFF FFFF" /* ......qÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"8500 0402 0100 0000 0000 0000 0000 0000" /* …............... */
- $"0001 0203 0317 E1FF FFFF FFFF FFFF FFFF" /* ......áÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"9E03 0905 0302 0100 0000 0000 0000 0000" /* ž.Æ............. */
- $"0201 0000 002C E4E8 E8E9 EAEB ECEC EDED" /* .....,äèèéêëììíí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED ECEC ECEC ECEC ECEC ECEC ECEC" /* ííííìììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEB EAE9 E8F4" /* ìììììììììììëêéèô */
- $"8E02 0400 0000 0202 0000 0000 0000 0002" /* Ž............... */
- $"0012 6297 A3A9 BBBD C0C4 C7CA CCCD CECE" /* ..b—£©»½ÀÄÇÊÌÍÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CDCD CCCC CCCC CBCB CBCB CBCB" /* ÎÎÎÎÍÍÌÌÌÌËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBC9 C8C5 C2C0" /* ËËËËËËËËËËËÉÈÅÂÀ */
- $"B5A6 A5A1 8236 0002 0100 0000 0000 0100" /* µ¦¥¡‚6.......... */
- $"35DC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 5Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFE 8901 0101 0000 0000 001B" /* ÿÿÿÿÿþ‰......... */
- $"DFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF73 0002 0000 0001 0082" /* ÿÿÿÿÿÿÿs.......‚ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE4 1800 0100 0001 00C0" /* ÿÿÿÿÿÿÿä.......À */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4500 0200 0002 02C6" /* ÿÿÿÿÿÿÿÿE......Æ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4C00 0200 0103 00B3" /* ÿÿÿÿÿÿÿÿL......³ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFE 3D00 0300 0104 009C" /* ÿÿÿÿÿÿÿþ=......œ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFF4 2C04 0400 0105 0087" /* ÿÿÿÿÿÿÿô,......‡ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE8 2007 0400 0105 0073" /* ÿÿÿÿÿÿÿè ......s */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFD9 1808 0400 0105 015C" /* ÿÿÿÿÿÿÿÙ.......\ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFC7 0E0A 0401 0105 034A" /* ÿÿÿÿÿÿÿÇ.Â.....J */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFB5 0A0A 0402 0105 043C" /* ÿÿÿÿÿÿÿµÂÂ.....< */
- $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFA1 080A 0402 0105 062B" /* ÿÿÿÿÿÿÿ¡.Â.....+ */
- $"F2FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF8E 050A 0402 0104 0720" /* ÿÿÿÿÿÿÿŽ.Â..... */
- $"E7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF7C 0609 0300 0104 0817" /* ÿÿÿÿÿÿÿ|.Æ...... */
- $"D8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF68 0709 0300 0104 0A0E" /* ÿÿÿÿÿÿÿh.Æ....Â. */
- $"C8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF55 0809 0300 0104 0A0A" /* ÿÿÿÿÿÿÿU.Æ....ÂÂ */
- $"B7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF47 0909 0300 0104 0A07" /* ÿÿÿÿÿÿÿGÆÆ....Â. */
- $"A4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF F638 0B08 0300 0004 0A05" /* ÿÿÿÿÿÿö8......Â. */
- $"91FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF EE2B 0C08 0300 0004 0905" /* ÿÿÿÿÿÿî+......Æ. */
- $"81FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF E224 0D08 0300 0003 0906" /* ÿÿÿÿÿÿâ$......Æ. */
- $"71FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF D51C 0E08 0300 0003 0907" /* ÿÿÿÿÿÿÕ.......Æ. */
- $"5EFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF C714 0F07 0200 0003 0908" /* ÿÿÿÿÿÿÇ.......Æ. */
- $"4FFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF B811 0E07 0200 0003 090A" /* ÿÿÿÿÿÿ¸.......ÆÂ */
- $"43FD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Cýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF A70E 0F07 0200 0003 080B" /* ÿÿÿÿÿÿ§......... */
- $"34F5 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 4õÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 960C 0E06 0200 0002 080D" /* ÿÿÿÿÿÿ–......... */
- $"29EB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* )ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 850C 0E07 0200 0003 080E" /* ÿÿÿÿÿÿ…......... */
- $"22E0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* "àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 760D 0E06 0200 0003 080F" /* ÿÿÿÿÿÿv......... */
- $"1BD3 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 650E 0E06 0200 0002 080F" /* ÿÿÿÿÿÿe......... */
- $"14C7 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 580E 0D06 0200 0002 070F" /* ÿÿÿÿÿÿX......... */
- $"11B9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 4E10 0D06 0100 0002 070F" /* ÿÿÿÿÿÿN......... */
- $"10AB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 4211 0D06 0200 0002 070F" /* ÿÿÿÿÿøB......... */
- $"0D9B FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF1 3513 0D06 0200 0002 080F" /* ÿÿÿÿÿñ5......... */
- $"0C8D FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE9 2E13 0D05 0100 0002 070F" /* ÿÿÿÿÿé.......... */
- $"0D81 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFDF 2914 0D06 0100 0002 070F" /* ÿÿÿÿÿß)......... */
- $"0E73 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD4 2215 0C06 0100 0002 070F" /* ÿÿÿÿÿÔ"......... */
- $"0F64 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC9 1C16 0C05 0100 0002 070F" /* ÿÿÿÿÿÉ.......... */
- $"1058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFBD 1A15 0C05 0100 0002 070F" /* ÿÿÿÿÿ½.......... */
- $"114F FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB2 1815 0C05 0100 0002 070E" /* ÿÿÿÿÿ².......... */
- $"1246 FAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Fúÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 1615 0C05 0100 0002 070E" /* ÿÿÿÿÿ¥.......... */
- $"133B F4FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .;ôÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF98 1515 0C05 0100 0002 060E" /* ÿÿÿÿÿ˜.......... */
- $"1533 EEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .3îÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF8D 1515 0B05 0100 0002 070E" /* ÿÿÿÿÿ.......... */
- $"152F E6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ./æÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF82 1615 0B05 0100 0002 070E" /* ÿÿÿÿÿ‚.......... */
- $"1629 DDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .)Ýÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF77 1615 0B05 0100 0002 060E" /* ÿÿÿÿÿw.......... */
- $"1624 D5FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Õÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6B 1715 0B05 0100 0002 060E" /* ÿÿÿÿÿk.......... */
- $"1720 CCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* . Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF61 1815 0B05 0100 0002 060E" /* ÿÿÿÿÿa.......... */
- $"181D C3FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5B 1914 0B05 0100 0002 060E" /* ÿÿÿÿÿ[.......... */
- $"181C BAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ºÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FE54 1A14 0B05 0100 0002 070E" /* ÿÿÿÿþT.......... */
- $"181B B0FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..°ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F94C 1B15 0B04 0100 0002 060E" /* ÿÿÿÿùL.......... */
- $"181A A6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F544 1C15 0B05 0100 0002 070E" /* ÿÿÿÿõD.......... */
- $"1819 9DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F13D 1D14 0B04 0100 0002 060E" /* ÿÿÿÿñ=.......... */
- $"1819 95FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..•ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF EB3A 1D14 0B05 0100 0002 070E" /* ÿÿÿÿë:.......... */
- $"1819 8EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Žÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF E537 1E14 0B05 0100 0002 070E" /* ÿÿÿÿå7.......... */
- $"181A 86FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..†ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF DF34 1E14 0B05 0100 0002 070E" /* ÿÿÿÿß4.......... */
- $"181B 7EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..~ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D930 1F15 0B05 0100 0002 070E" /* ÿÿÿÿÙ0.......... */
- $"181B 78FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..xÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D32D 1F15 0B05 0100 0002 070F" /* ÿÿÿÿÓ-.......... */
- $"191C 71FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..qÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF CE29 2015 0B05 0100 0002 070F" /* ÿÿÿÿÎ) ......... */
- $"191D 6AFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..jÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C828 2015 0B05 0100 0002 070F" /* ÿÿÿÿÈ( ......... */
- $"191D 65FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..eÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C328 2015 0B05 0100 0002 070F" /* ÿÿÿÿÃ( ......... */
- $"191E 61FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..aÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF BE28 2115 0B05 0100 0002 070F" /* ÿÿÿÿ¾(!......... */
- $"191F 5DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..]ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B827 2115 0C05 0100 0002 070F" /* ÿÿÿÿ¸'!......... */
- $"1920 5AFE FFFF FFFF FFFF FFFF FFFF FFFF" /* . Zþÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B427 2115 0C05 0100 0003 0710" /* ÿÿÿÿ´'!......... */
- $"1A21 58FD FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Xýÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B026 2115 0C05 0100 0003 0810" /* ÿÿÿÿ°&!......... */
- $"1A21 55FB FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Uûÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF AC26 2116 0C05 0200 0003 0810" /* ÿÿÿÿ¬&!......... */
- $"1A22 52F9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ."Rùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A826 2215 0C05 0100 0003 0810" /* ÿÿÿÿ¨&"......... */
- $"1A23 4FF7 FFFF FFFF FFFF FFFF FFFF FFFF" /* .#O÷ÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A426 2316 0D06 0200 0003 0811" /* ÿÿÿÿ¤&#......... */
- $"1B24 4DF6 FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Möÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A126 2316 0D06 0200 0003 0911" /* ÿÿÿÿ¡&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9F26 2317 0D06 0200 0003 0912" /* ÿÿÿÿŸ&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9E26 2317 0D06 0200 0003 0912" /* ÿÿÿÿž&#.......Æ. */
- $"1C26 4BF4 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Kôÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9D27 2317 0D06 0200 0004 0912" /* ÿÿÿÿ'#.......Æ. */
- $"1C26 4AF3 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Jóÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9C27 2417 0D06 0200 0104 0912" /* ÿÿÿÿœ'$.......Æ. */
- $"1C26 47F2 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Gòÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9A27 2417 0D06 0200 0103 0911" /* ÿÿÿÿš'$.......Æ. */
- $"1B27 37D1 FFFF FFFF FFFF FFFF FFFF FFFF" /* .'7Ñÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 7329 2316 0D06 0200 0003 0810" /* ÿÿÿÿs)#......... */
- $"1A27 2F59 B7C6 C6C7 C7C7 C7C7 C7C7 C7C7" /* .'/Y·ÆÆÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C5 C689 372D 2015 0C06 0200 0003 070E" /* ÇÅƉ7- ......... */
- $"1723 3037 3C46 4C4F 5050 5050 5050 5050" /* .#07<FLOPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"4D49 4138 352A 1D13 0A05 0100 0003 060C" /* MIA85*..Â....... */
- $"141E 2934 3D44 494C 4D4E 4E4E 4E4E 4E4E" /* ..)4=DILMNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4D" /* NNNNNNNNNNNNNNNM */
- $"4B46 4039 2F24 1910 0904 0100 0002 050A" /* KF@9/$..Æ...... */
- $"1018 212B 3339 3D40 4142 4242 4242 4242" /* ..!+39=@ABBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4140" /* BBBBBBBBBBBBBBA@ */
- $"3F3B 352F 261D 140D 0703 0100 0002 0407" /* ?;5/&........... */
- $"0C12 1920 272C 2F32 3233 3333 3333 3333" /* ... ',/223333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3332" /* 3333333333333332 */
- $"302D 2924 1D16 0F09 0502 0100 0001 0305" /* 0-)$...Æ........ */
- $"080D 1217 1C1F 2223 2425 2525 2525 2525" /* ......"#$%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2524" /* %%%%%%%%%%%%%%%$ */
- $"2221 1E19 1510 0B07 0402 0000 0000 0103" /* "!.............. */
- $"0609 0C10 1315 1718 1919 1919 1919 1919" /* .Æ.............. */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1918" /* ................ */
- $"1716 1411 0E0A 0704 0201 0000 0000 0002" /* .....Â.......... */
- $"0305 0709 0B0D 0E0F 0F0F 0F0F 0F0F 0F0F" /* ...Æ............ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0D 0C0A 0806 0402 0100 0000 0000 0001" /* ...Â............ */
- $"0103 0304 0607 0708 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0707 0605 0403 0201 0000 0000 0000 0000" /* ................ */
- $"0001 0102 0202 0203 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0202 0202 0201 0100 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 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 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 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" /* ................ */
- $"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 0000 0000 0000 0000 0000 6963 3038" /* ............ic08 */
- $"0000 5CBD 0000 000C 6A50 2020 0D0A 870A" /* ..\½....jP .‡ */
- $"0000 0014 6674 7970 6A70 3220 0000 0000" /* ....ftypjp2 .... */
- $"6A70 3220 0000 004F 6A70 3268 0000 0016" /* jp2 ...Ojp2h.... */
- $"6968 6472 0000 0100 0000 0100 0004 0707" /* ihdr............ */
- $"0100 0000 000F 636F 6C72 0100 0000 0000" /* ......colr...... */
- $"1000 0000 2263 6465 6600 0400 0000 0000" /* ...."cdef....... */
- $"0100 0300 0100 0000 0100 0000 0200 0200" /* ................ */
- $"0000 0300 0000 006A 7032 63FF 4FFF 5100" /* .......jp2cÿOÿQ. */
- $"3200 0000 0001 0000 0001 0000 0000 0000" /* 2............... */
- $"0000 0000 0001 0000 0001 0000 0000 0000" /* ................ */
- $"0000 0000 0407 0101 0701 0107 0101 0701" /* ................ */
- $"01FF 5200 0C00 0000 0101 0504 0400 01FF" /* .ÿR............ÿ */
- $"5C00 1320 5058 5860 5858 6058 5860 5858" /* \.. PXX`XX`XX`XX */
- $"5850 5058 FF64 0011 0001 4B61 6B61 6475" /* XPPXÿd....Kakadu */
- $"2D76 352E 322E 31FF 9000 0A00 0000 005B" /* -v5.2.1ÿ.Â....[ */
- $"D000 01FF 93CF C100 1507 F18D 1991 E793" /* Ð..ÿ“ÏÁ...ñ.‘ç“ */
- $"D8B4 6B7C 459C 4F68 E4BF E0FF 0D3D C2DF" /* Ø´k|EœOhä¿àÿ.=Âß */
- $"FC16 8F7F 6C3A 7FEA ACD5 8632 D1AD 37A6" /* ü..l:.ê¬Õ†2Ñ­7¦ */
- $"22E3 4753 734F 3BFA 0372 1596 A8F1 7183" /* "ãGSsO;ú.r.–¨ñqƒ */
- $"2F17 0A65 C5C2 6A8E C0F9 1000 39CE 9180" /* /.ÂeÅÂjŽÀù..9Α€ */
- $"AE4A F551 B521 2839 FEE4 4D31 9F98 9F17" /* ®JõQµ!(9þäM1Ÿ˜Ÿ. */
- $"29F2 C91D 3B35 397E 15A1 8246 C3EA 3107" /* )òÉ.;59~.¡‚FÃê1. */
- $"5630 A744 5105 404A C843 0AE4 304B 4FE9" /* V0§DQ.@JÈCÂä0KOé */
- $"81E4 4C91 DF64 6885 8D23 6517 B254 DE23" /* äL‘ßdh…#e.²TÞ# */
- $"6101 3C94 9245 923D 4F4C 0F02 784C F319" /* a.<”’E’=OL..xLó. */
- $"CFC0 FC11 7EC2 D9C4 3907 5FDC 553A F1E1" /* ÏÀü.~ÂÙÄ9._ÜU:ñá */
- $"F2BC 6420 59D8 7D25 F42A 5BA5 8E8E 7166" /* ò¼d YØ}%ô*[¥ŽŽqf */
- $"AD5D 5C91 CC75 1452 ACDA 64CA 3249 CCE3" /* ­]\‘Ìu.R¬ÚdÊ2IÌã */
- $"6874 83E2 633E 64E7 8159 4AA2 FD3C 638D" /* htƒâc>dçYJ¢ý<c */
- $"F978 C3ED 328F C0F2 1F81 A80C BB81 9421" /* ùxÃí2Àò.¨.»”! */
- $"980D F457 0EA7 7782 676F 2AB3 EE8F 99C2" /* ˜.ôW.§w‚go*³î™Â */
- $"2221 9D95 8C80 C3A8 91F3 4C08 6A03 DE45" /* "!•Œ€Ã¨‘óL.j.ÞE */
- $"A985 9B7B 9ED3 A9A4 D929 A97F A125 FE22" /* ©…›{žÓ©¤Ù)©.¡%þ" */
- $"A893 77F3 EF0F C15C 3969 A153 3A7C 3110" /* ¨“wóï.Á\9i¡S:|1. */
- $"7A9C 9227 D2F6 BCA8 1A04 0219 8F36 21B7" /* zœ’'Òö¼¨....6!· */
- $"B37C 2AB6 678A 1675 BA9E 03B4 53BA 33B9" /* ³|*¶gŠ.uºž.´Sº3¹ */
- $"06AD 96D8 BDBC BFC8 5134 C040 7EBA B756" /* .­–ؽ¼¿ÈQ4À@~º·V */
- $"E619 DC67 BC83 BB39 AA42 65E1 5BBC 45B4" /* æ.Üg¼ƒ»9ªBeá[¼E´ */
- $"ECB6 E6ED D098 3C9F E17B 876D A039 553E" /* ì¶æíИ<Ÿá{‡m 9U> */
- $"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" /* ÷<H‡QU.•.ˆLiÂ'?9 */
- $"8CCA 32D8 1FD7 A3F4 CDD8 6275 5E7E 3619" /* ŒÊ2Ø.×£ôÍØbu^~6. */
- $"8D18 68C9 D2C7 0FCB 18EA FB01 5A68 4A52" /* .hÉÒÇ.Ë.êû.ZhJR */
- $"3C08 5313 5ED2 9B7D 31B5 953C 2F92 22F7" /* <.S.^Ò›}1µ•</’"÷ */
- $"3764 04E8 A9A6 C747 8DFD 9730 01DD 82E1" /* 7d.試ÇGý—0.Ý‚á */
- $"B08A FD72 7C33 A9BF AFEA 7188 AC4B 2B45" /* °Šýr|3©¿¯êqˆ¬K+E */
- $"BBB2 7826 6704 5864 9BAF 91FC 6BD3 E9D7" /* »²x&g.Xd›¯‘ükÓé× */
- $"0E30 E428 0FB2 4836 F94F 7CB9 3723 72A2" /* .0ä(.²H6ùO|¹7#r¢ */
- $"AB4C C0EB ED8F 823B B8D6 C4A6 E4B5 B41C" /* «LÀëí‚;¸ÖĦ䵴. */
- $"B0FC 0171 880F E77C 1EF8 9645 A8B4 969A" /* °ü.qˆ.ç|.ø–E¨´–š */
- $"5420 86B9 71CE 0DE5 7A40 B41A DD85 6B30" /* T †¹qÎ.åz@´.Ý…k0 */
- $"F02A 3B61 92B4 7A95 269E BF9F DDB3 9FB7" /* ð*;a’´z•&ž¿ŸÝ³Ÿ· */
- $"746B 1514 C89D 391B F835 73B8 0F1C 2567" /* tk..È9.ø5s¸..%g */
- $"A0C2 6B37 DFCE 5F4C 1DCD FD79 5CDA A8FF" /*  Âk7ßÎ_L.Íýy\Ú¨ÿ */
- $"0603 9014 308F AEB3 EDB7 D721 1709 3897" /* ...0®³í·×!.Æ8— */
- $"D3AB 181E 53BE 4025 3492 41C2 5EC7 BFC0" /* Ó«..S¾@%4’AÂ^Ç¿À */
- $"EA12 19D0 6158 530B A57B 8A2B 8DFF 18AF" /* ê..ÐaXS.¥{Š+ÿ.¯ */
- $"7651 65CF CD26 3F05 987E 0760 9C3C E3A6" /* vQeÏÍ&?.˜~.`œ<㦠*/
- $"86C0 DAB4 C6ED 7F19 8034 85FE DA7E 7963" /* †ÀÚ´Æí..€4…þÚ~yc */
- $"AFF2 9CBE 6AAA B6BB B2D3 6F41 BB45 B1EB" /* ¯òœ¾jª¶»²ÓoA»E±ë */
- $"9CC2 8803 907A 5CE1 F2D9 AF69 FF22 7DE8" /* œÂˆ.z\áòÙ¯iÿ"}è */
- $"D328 C2A1 0F97 2EE2 9575 E0E6 A665 B85A" /* Ó(¡.—.â•uàæ¦e¸Z */
- $"C5D7 6FA0 FE24 BC68 9D74 6CEB C4F9 615C" /* Å×o þ$¼htlëÄùa\ */
- $"4F34 48B3 7A64 2540 B64F EFBE 8D0F E427" /* O4H³zd%@¶Oï¾.ä' */
- $"4CCA 6DB3 83AC C5F6 EE52 7A43 8172 41E4" /* LÊm³ƒ¬ÅöîRzCrAä */
- $"2CE3 DF2F 1496 97DE 6AD1 2FFF 7E52 D993" /* ,ãß/.–—ÞjÑ/ÿ~RÙ“ */
- $"8AF9 AAA3 B192 0991 BFAE 4829 001E 963B" /* Šùª£±’Æ‘¿®H)..–; */
- $"019C 8A5D 78E8 6A56 F78C B81A F4D0 6312" /* .œŠ]xèjV÷Œ¸.ôÐc. */
- $"C0C4 A9BF 7CA5 75D9 9C23 F3EA 4F39 B325" /* ÀÄ©¿|¥uÙœ#óêO9³% */
- $"F6DE 6EF4 7D48 A279 8EA9 5395 0FBC C63F" /* öÞnô}H¢yŽ©S•.¼Æ? */
- $"679F CE93 2206 ECA9 079C 2BB7 D094 6A7B" /* gŸÎ“".ì©.œ+·Ð”j{ */
- $"1077 277F 88A6 21AE 84C3 EDD4 38FC 36B2" /* .w'.ˆ¦!®„ÃíÔ8ü6² */
- $"1F86 8F00 8F56 8825 7713 9061 800A A4CD" /* .†.Vˆ%w.a€Â¤Í */
- $"E3D3 0F3C B0AC 0C87 E368 8544 F251 5C39" /* ãÓ.<°¬.‡ãh…DòQ\9 */
- $"7D90 1BEF 7805 D624 7380 0A19 E093 3058" /* }.ïx.Ö$s€Â.à“0X */
- $"1C90 467F 5C70 4932 3947 4A95 A450 36C8" /* .F.\pI29GJ•¤P6È */
- $"D4D5 CA85 9922 FA12 D0D8 96CA 9A2F 40A2" /* ÔÕÊ…™"ú.ÐØ–Êš/@¢ */
- $"F105 054F 8C56 C164 85B5 C4E6 3EAB D76A" /* ñ..OŒVÁd…µÄæ>«×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.<cÛnI$ */
- $"7362 34C9 2F1D 105B 97E2 03BF 648F C21C" /* sb4É/..[—â.¿dÂ. */
- $"C6AC 3657 2C72 ADAA 2889 0623 6A5D ACEC" /* Ƭ6W,r­ª(‰.#j]¬ì */
- $"3210 738F 51F5 CC65 9EA9 7AD3 95CB B265" /* 2.sQõÌež©zӕ˲e */
- $"D54E 6E1D E2A7 2673 E6C2 C247 2FFD C10E" /* ÕNn.â§&sæÂÂG/ýÁ. */
- $"5FC5 C1E1 2511 5C8F 6063 92AB E4B9 8212" /* _ÅÁá%.\`c’«ä¹‚. */
- $"3643 6D53 2492 3E58 3E71 15E3 A3B7 AB2A" /* 6CmS$’>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.íʃ</.¢:\i */
- $"6F17 C143 83FF 31A8 709D 7BFA B0E4 A884" /* o.ÁCƒÿ1¨p{ú°ä¨„ */
- $"E3DC 88CC DF54 C132 6671 A0D0 B4C3 7721" /* ã܈ÌßTÁ2fq Ð´Ãw! */
- $"B5F0 84FF 0FDA 1588 5865 1B6B 94E3 9B46" /* µð„ÿ.Ú.ˆXe.k”ã›F */
- $"5CA1 7767 09F4 3448 2242 114C 2705 2C38" /* \¡wgÆô4H"B.L'.,8 */
- $"4565 F286 ABC2 AFF5 809D 0C5B BB5E 009C" /* Eeò†«Â¯õ€.[»^.œ */
- $"FCBA BC4C 84FF 45EF F42B 3F8E DEE0 A531" /* üº¼L„ÿEïô+?ŽÞà¥1 */
- $"DBBB 2113 7C30 8BB7 76FF 7E55 E6BC 012B" /* Û»!.|0‹·vÿ~Uæ¼.+ */
- $"EBDE EF62 0981 DCE1 AC6E 5AD7 D8AD 0560" /* ëÞïbÆÜá¬nZ×Ø­.` */
- $"5B36 3A62 5B57 3E03 75AC 25FB B396 1086" /* [6:b[W>.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" /* ß"Â.<CáØ]dÊ™æÇï0 */
- $"68AF F4C9 97D5 F961 48CF 954C 2832 33A3" /* h¯ôÉ—ÕùaHÏ•L(23£ */
- $"0088 1417 0D84 DDE1 23FA C81D 487D C9AB" /* .ˆ...„Ýá#úÈ.H}É« */
- $"F239 ABB4 24E0 6694 291C 885C 23CE F212" /* ò9«´$àf”).ˆ\#Îò. */
- $"29F4 5656 7DD1 182A 2C11 AAEF 7534 24EE" /* )ôVV}Ñ.*,.ªïu4$î */
- $"9886 347F 28AD 6952 0A82 E9A4 6AA9 9390" /* ˜†4.(­iR‚é¤j©“ */
- $"06A8 EF47 527A EDF2 894B 5234 A900 82B1" /* .¨ïGRzíò‰KR4©.‚± */
- $"724D 791B 676C BC97 B3A5 94F7 137E FE8D" /* rMy.gl¼—³¥”÷.~þ */
- $"50F5 C1EE 0C5B 1F3D CEF4 DD64 709C 095B" /* PõÁî.[.=ÎôÝdpœÆ[ */
- $"A51A B239 3EC3 C9BA 39EC DBE2 FB9A 3C6F" /* ¥.²9>Ãɺ9ìÛâûš<o */
- $"BBC4 DE3E C5AF 0043 DC2D AE64 C0A7 2039" /* »ÄÞ>ů.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.û˜ò¾Î.Èê<NQáÝ */
- $"5253 CE7A 2D16 8527 AF8E 9A17 757A A42F" /* RSÎz-.…'¯Žš.uz¤/ */
- $"6CA9 6BB3 7787 D84F 8E20 EA1F FB2D 15E3" /* l©k³w‡ØOŽ ê.û-.ã */
- $"0D2C 45A8 8C80 7DA1 89DB 5F46 F3FB 2871" /* .,E¨Œ€}¡‰Û_Fóû(q */
- $"539E 8CCA 5C03 EF20 B6B5 4956 EB82 172C" /* SžŒÊ\.ï ¶µIVë‚., */
- $"AB28 0D6D 4DF9 1F61 6F8D 61FE E962 778D" /* «(.mMù.aoaþébw */
- $"0C8E EC55 3BDC EC81 C9D1 E7D5 A811 C69A" /* .ŽìU;ÜìÉÑçÕ¨.Æš */
- $"6186 BC2C 75B4 DD3D C207 1151 4C3B 4175" /* a†¼,u´Ý=Â..QL;Au */
- $"942E 2ACF D3C7 7122 9D89 31B3 0918 EDC0" /* ”.*ÏÓÇq"‰1³Æ.íÀ */
- $"9D45 75D8 DE61 5036 6D9F 3373 4827 7ADE" /* EuØÞaP6mŸ3sH'zÞ */
- $"1BD1 16E8 8905 37D4 D811 1077 B359 0FF6" /* .Ñ.è‰.7ÔØ..w³Y.ö */
- $"0460 F360 20A5 B532 3418 142A B432 C2E9" /* .`ó` ¥µ24..*´2Âé */
- $"A0D6 DB04 317D 28F3 C893 AAE3 19B1 5742" /*  ÖÛ.1}(óÈ“ªã.±WB */
- $"7BF6 615C 0EAC F35E 0CD4 B142 A289 5458" /* {öa\.¬ó^.Ô±B¢‰TX */
- $"D699 1584 46FF 7174 758F B1F8 F540 F427" /* Ö™.„Fÿqtu±øõ@ô' */
- $"A496 8795 E66B 3DDC FB80 D0B8 9411 7240" /* ¤–‡•æk=Üû€Ð¸”.r@ */
- $"0374 54DC B2CA C982 BD5E FD06 4B02 5E8D" /* .tTܲÊÉ‚½^ý.K.^ */
- $"A958 79AA 5BE6 B5A2 76C3 7C23 0D45 6768" /* ©Xyª[æµ¢vÃ|#.Egh */
- $"D726 8259 FD2E E5CE 9B70 0600 22E7 82A3" /* ×&‚Yý.åΛp.."ç‚£ */
- $"8E14 9626 C4EC EED9 E7D8 13C9 623F 3DEB" /* Ž.–&ÄìîÙçØ.Éb?=ë */
- $"357B E617 A43A C9D4 328A C30A FF45 71BA" /* 5{æ.¤:ÉÔ2ŠÃÂÿEqº */
- $"1F8B 3945 8E06 0CF0 4749 0840 6F5A EDDB" /* .‹9EŽ..ðGI.@oZíÛ */
- $"29AC E877 27BD 6C8C A131 8A1C 9228 0FC5" /* )¬èw'½lŒ¡1Š.’(.Å */
- $"A029 D1A1 324D EFCE EB3F 2B92 150D FB8C" /*  )Ñ¡2MïÎë?+’..ûŒ */
- $"5399 1ABD D375 08BF 8F3F E788 684D 3064" /* S™.½Óu.¿?çˆhM0d */
- $"70B4 A733 4AB6 239A DC03 724F C8B8 F1BB" /* p´§3J¶#šÜ.rOȸñ» */
- $"8F1F A795 FF18 8256 0050 FF74 EDF1 3D05" /* .§•ÿ.‚V.Pÿtíñ=. */
- $"6CB0 E566 9272 E493 C085 3D06 3116 4ECE" /* l°åf’rä“À…=.1.NÎ */
- $"402D 329F 4BBB 2598 A7CF BEE1 333D 9019" /* @-2ŸK»%˜§Ï¾á3=. */
- $"61BB 1A29 2616 E907 2CD6 F64C 456F 9881" /* a».)&.é.,ÖöLEo˜ */
- $"725B 5C38 A40D 60D3 6B4F FDF1 87D7 4786" /* r[\8¤.`ÓkOýñ‡×G† */
- $"29BF CAEB 223A 044D 0F61 FDE6 0A3E 7727" /* )¿Êë":.M.aýæÂ>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.#ÝêŽ.,]Û<W */
- $"BAEC 18E5 1ECE 91D7 A40E 08ED 23EA 55B6" /* ºì.å.Αפ..í#êU¶ */
- $"AA2C F48A 7B0E 8CAE 90DD 5840 41FF 7F4C" /* ª,ôŠ{.Œ®ÝX@Aÿ.L */
- $"47AD E774 87C4 9AB1 9CAD E633 DECD 3E36" /* G­çt‡Äš±œ­æ3ÞÍ>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û<M/e€.:3h=T */
- $"55DF 6B52 1A54 9010 C4D2 12C8 D497 9CDB" /* UßkR.T.ÄÒ.ÈÔ—œÛ */
- $"173A 0609 66F1 C6C0 FD02 47A0 B2E2 D2E6" /* .:.ÆfñÆÀý.G ²âÒæ */
- $"096E F870 0776 4898 2F2B 84CF BA83 D656" /* Ænøp.vH˜/+„ϺƒÖV */
- $"7F77 79FF 0F1D 2A6E 03C6 4D0F E3EF D23B" /* .wyÿ..*n.ÆM.ãïÒ; */
- $"6F82 5F72 6701 98DF 5A63 DA7B 0ABC 75E2" /* o‚_rg.˜ßZcÚ{¼uâ */
- $"382D 0D93 3C8C 5308 19EA EF8D 7922 CD36" /* 8-.“<ŒS..êïy"Í6 */
- $"ED21 EB4D 3D77 5A8A 1380 E238 22E5 84AA" /* í!ëM=wZŠ.€â8"優 */
- $"4488 7DCE 91A0 CB4B 67FA 74AF EA3D 1C8E" /* Dˆ}Α ËKgút¯ê=.Ž */
- $"9279 611D FD02 D08F D952 B05D 2C11 B545" /* ’ya.ý.ÐÙR°],.µE */
- $"5F17 FF5C 1E9C 6A77 DA2F A474 B20C F5A2" /* _.ÿ\.œjwÚ/¤t².õ¢ */
- $"B2D4 176F 97E4 CE9E B576 C3E0 0F3D ECB9" /* ²Ô.o—äΞµvÃà.=ì¹ */
- $"7B35 DEBB 5ABA 9738 36F8 524D 74D8 08FF" /* {5Þ»Zº—86øRMtØ.ÿ */
- $"29A7 9B08 5B43 7C17 FB53 234E 4806 B0C3" /* )§›.[C|.ûS#NH.°Ã */
- $"AF3A FF38 CCAF FEAA C60F D103 32AC 7D7F" /* ¯:ÿ8̯þªÆ.Ñ.2¬}. */
- $"D2B8 51C1 7B7D 56FD 7CFB D2B5 C55B 7C7D" /* Ò¸QÁ{}Vý|ûÒµÅ[|} */
- $"7D30 10C2 4181 3358 5DD6 4625 4FFC EA30" /* }0.ÂA3X]ÖF%Oüê0 */
- $"3402 194F 6D0B 53D8 3C64 54AE E8DA 7874" /* 4..Om.SØ<dT®èÚxt */
- $"7FF1 DE25 3147 0AF0 D5B6 7BF7 88DD 5199" /* .ñÞ%1GÂðÕ¶{÷ˆÝQ™ */
- $"611E 526D B6DB 6DB6 DB69 9C6E 7A40 821D" /* a.Rm¶Ûm¶Ûiœnz@‚. */
- $"4416 6952 04BB 9C0A F19B 2C62 E698 A4F5" /* D.iR.»œÂñ›,b昤õ */
- $"9B83 3C59 8217 0000 0034 8080 DB92 4924" /* ›ƒ<Y‚....4€€Û’I$ */
- $"9249 247D 32D0 9B20 73FF 7E44 A49A 44BB" /* ’I$}2Л sÿ~D¤šD» */
- $"EB45 3E31 A4A0 C0CC BBC0 B29E 7771 4FDE" /* ëE>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ç<v—¯.q£-ÜZ */
- $"28A9 FE90 6CC0 9484 30D1 FCCD 4991 0758" /* (©þlÀ”„0ÑüÍI‘.X */
- $"BE36 B1DE 3A2E B6F8 2756 C568 2A7F D038" /* ¾6±Þ:.¶ø'VÅh*.Ð8 */
- $"2397 6E8F 32E0 C1AC 3736 32A3 C18E 13C4" /* #—n2àÁ¬762£ÁŽ.Ä */
- $"D298 8703 F9AF E24B A630 0627 6E63 ED70" /* Ò˜‡.ù¯âK¦0.'ncíp */
- $"0662 A833 6515 7225 C79D 8C1F 7410 45BF" /* .b¨3e.r%ÇŒ.t.E¿ */
- $"5019 F088 7C6C 43FC AE88 B794 5847 505F" /* P.ðˆ|lCü®ˆ·”XGP_ */
- $"2B73 6E58 E20E 18A2 01B4 DF7F F5BD D4BC" /* +snXâ..¢.´ß.õ½Ô¼ */
- $"B259 706B 754E 9740 BBF2 54FC FCB8 B293" /* ²YpkuN—@»òTüü¸²“ */
- $"4CEA 3670 D04B 8C42 B7C2 314D 1F53 956B" /* Lê6pÐKŒB·Â1M.S•k */
- $"CB14 9D05 8288 E7F0 D4FF 70AE EFB7 A10B" /* Ë..‚ˆçðÔÿp®ï·¡. */
- $"EDDE 3CFE 1B9D 7DBA 7B7D BD13 DF6F 45B8" /* íÞ<þ.}º{}½.ßoE¸ */
- $"FE1A 077D B444 FAB6 46FB 75FC E8AB DECC" /* þ..}´Dú¶Fûuüè«ÞÌ */
- $"AF0D 6C8A C695 8734 8A7A 5A21 F65D 05F6" /* ¯.lŠÆ•‡4ŠzZ!ö].ö */
- $"A417 27AC 998E 3646 07A8 0055 19DC B524" /* ¤.'¬™Ž6F.¨.U.ܵ$ */
- $"D2F2 842C DF9F BECA C26B C9C9 D0FD CA3B" /* Òò„,ߟ¾ÊÂkÉÉÐýÊ; */
- $"DB1B 3F81 F6A7 4465 001E 5552 4D0D 3BF3" /* Û.?ö§De..URM.;ó */
- $"0140 A2E9 7D63 8456 F9C7 665D F7FC 2DBF" /* .@¢é}c„VùÇf]÷ü-¿ */
- $"1B41 0667 7939 1B16 4997 5584 3CFE 81B9" /* .A.gy9..I—U„<þ¹ */
- $"C4A8 B346 EC6D E726 2560 5CB8 8B84 7699" /* Ĩ³Fìmç&%`\¸‹„v™ */
- $"3999 2CA0 91D9 A05A C96C 660C 267B 74A0" /* 9™, ‘Ù ZÉlf.&{t  */
- $"B935 73EB D464 D860 2694 7584 A4D4 DC52" /* ¹5sëÔdØ`&”u„¤ÔÜR */
- $"D136 D49A 1BEA 53F5 AE2F C19E 44E9 BA0A" /* Ñ6Ôš.êSõ®/ÁžDéºÂ */
- $"5D83 6587 7792 3DCB 449A B33E 4632 A395" /* ]ƒe‡w’=ËDš³>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!‹{{‡.ê%¡<UÌ */
- $"0644 1B14 3456 2E32 C013 815C 66C7 0526" /* .D..4V.2À.\fÇ.& */
- $"E24D CE15 B8FB 5D8B 0506 E30A 1D6A E2ED" /* âMÎ.¸û]‹..ãÂ.jâí */
- $"6145 D124 0EC9 1FAB 4E50 06C2 9DA5 8F6C" /* aEÑ$.É.«NP.Â¥l */
- $"C072 D11E BFEE DFE6 F6C7 12F4 E89C 35B7" /* ÀrÑ.¿îßæöÇ.ôèœ5· */
- $"097E 2E25 393F CEA3 03C6 D3C7 DED5 3882" /* Æ~.%9?Σ.ÆÓÇÞÕ8‚ */
- $"ED26 A3FD 9130 95B5 F3FA D31A 691F 8E09" /* í&£ý‘0•µóúÓ.i.ŽÆ */
- $"BFA8 7D7B 85BD B179 5C20 2855 1268 F9AF" /* ¿¨}{…½±y\ (U.hù¯ */
- $"553D 939E 6FC6 C67E 4611 F88C BBD4 773C" /* U=“žoÆÆ~F.øŒ»Ôw< */
- $"5F16 D598 D5C5 E649 B66E FD8D A2D7 9807" /* _.Õ˜ÕÅæI¶ný¢×˜. */
- $"EDA2 4621 2CF5 DDE3 C078 6455 1C29 3A07" /* í¢F!,õÝãÀxdU.):. */
- $"E992 C5DE 8D33 041B 83C6 56F6 7C95 168E" /* é’ÅÞ3..ƒÆVö|•.Ž */
- $"6127 40D2 DE11 CFF2 3379 DC22 20E3 5E1B" /* a'@ÒÞ.Ïò3yÜ" ã^. */
- $"DE83 DBB5 5B8A 8572 3DF2 2890 DC56 BE6E" /* ÞƒÛµ[Š…r=ò(ÜV¾n */
- $"D15F 9396 ECD4 725F 2E18 7616 394A 64C3" /* Ñ_“–ìÔr_..v.9Jdà */
- $"FDAA E6F2 3D6D 46BC B270 5B8F ACB4 9CAE" /* ýªæò=mF¼²p[¬´œ® */
- $"0D0D 3F29 6A02 1E92 347A E406 A52D 111A" /* ..?)j..’4zä.¥-.. */
- $"2E79 0340 1D82 C861 0C40 1963 3397 A4FD" /* .y.@.‚Èa.@.c3—¤ý */
- $"A998 0B63 E30A 7AA3 A5BC 8A8E 9CD0 4795" /* ©˜.cãÂz£¥¼ŠŽœÐG• */
- $"7538 7FB2 EC9A 952C CE29 C80F 369C 4E8D" /* u8.²ìš•,Î)È.6œN */
- $"8000 1C55 D5F3 E2AD 812E 4FAA AC2C D9BB" /* €..UÕóâ­.Oª¬,Ù» */
- $"F4CD 5568 5643 826F 3A38 91BD 6F70 92D3" /* ôÍUhVC‚o:8‘½op’Ó */
- $"23EC DB91 0FC4 C3BB 7542 023B 85F0 36C3" /* #ìÛ‘.ÄûuB.;…ð6à */
- $"8BF6 F6F8 4E77 EEE5 851F 219A CF99 7D9E" /* ‹ööøNwîå….!šÏ™}ž */
- $"856D A687 BC63 8E39 0407 B007 D184 10BD" /* …m¦‡¼cŽ9..°.Ñ„.½ */
- $"D9EF ACB1 B75A 46FA F95E 42DF 377B E2F7" /* Ùבּ·ZFúù^Bß7{â÷ */
- $"BEF2 357A 861C F486 B3F7 57E1 D39B 095B" /* ¾ò5z†.ô†³÷WáÓ›Æ[ */
- $"40C0 925C 0CA1 7885 CFEA 48B7 33E9 E8DE" /* @À’\.¡x…ÏêH·3éèÞ */
- $"D178 1E15 91D1 F6C5 BC87 CB7E CCC6 DEDE" /* Ñx..‘Ñöż‡Ë~ÌÆÞÞ */
- $"B017 A4C1 0B0F DD17 660E CB97 C098 C773" /* °.¤Á..Ý.f.Ë—À˜Çs */
- $"8A0A F4DB 59BD A218 055E 5348 05D8 B304" /* ŠÂôÛY½¢..^SH.س. */
- $"9F23 E1B1 0754 6DA2 FF33 34CB 2B12 7114" /* Ÿ#á±.Tm¢ÿ34Ë+.q. */
- $"62D2 4CA8 8091 CD34 8467 2752 B77A AA5B" /* bÒL¨€‘Í4„g'R·zª[ */
- $"15FC 2E56 7A29 9351 B6A4 AEE5 B56D 354D" /* .ü.Vz)“Q¶¤®åµm5M */
- $"3ED2 FA71 25E9 F887 B187 BADB B11B 2E01" /* >Òú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" /* žÇŠ.—ô<inV..6ÁG */
- $"E7D3 6FE5 A0C6 D7DC BCB0 76AC C4F8 DD65" /* çÓoå Æ×ܼ°v¬ÄøÝe */
- $"A5F9 02BF 2BFD 9A2C 354D 24C2 E088 6B63" /* ¥ù.¿+ýš,5M$Âàˆkc */
- $"E514 C014 E8F4 F5C2 B529 74FB EC02 032B" /* å.À.èôõµ)tûì..+ */
- $"A54B 696E B602 7D58 4542 824D BD8C 40FA" /* ¥Kin¶.}XEB‚M½Œ@ú */
- $"F675 5CD4 71C9 058E 7062 0E1B 10CC 72A9" /* öu\ÔqÉ.Žpb...Ìr© */
- $"95B8 C5FD 7EAF 995C 62ED DDE4 6579 3181" /* •¸Åý~¯™\bíÝäey1 */
- $"8BA1 A02B 1559 F5BC E9C9 914D 8CEB D7D8" /* ‹¡ +.Yõ¼éÉ‘MŒë×Ø */
- $"7D81 20C0 A609 18D2 B679 7C08 FB00 E4C6" /* } À¦Æ.Ò¶y|.û.äÆ */
- $"2797 518E 32CE 67CE 3C8E 6796 A832 F712" /* '—QŽ2ÎgÎ<Žg–¨2÷. */
- $"0037 059C 96CD 85A0 98E6 5D20 05F2 EC61" /* .7.œ–Í… ˜æ] .òìa */
- $"335D AFFF 14BC 3EF9 0779 7A53 BAA4 F47A" /* 3]¯ÿ.¼>ù.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Ä<k]ðUz; */
- $"77CB BFA9 2B73 06AF 9C8B AF37 F600 E568" /* wË¿©+s.¯œ‹¯7ö.åh */
- $"EE70 09D2 B0A7 C201 94D9 AC58 E9A2 9D53" /* îpÆÒ°§Â.”Ù¬Xé¢S */
- $"94C0 D1C9 E379 E453 E4C7 27C5 C3F8 1161" /* ”ÀÑÉãyäSäÇ'ÅÃø.a */
- $"D631 3F3C 0CFE 13A3 F6EB 3048 F049 CF11" /* Ö1?<.þ.£öë0HðIÏ. */
- $"5962 65AE 5D8E F911 A2E2 7787 6C78 F63C" /* Ybe®]Žù.¢âw‡lxö< */
- $"E24C ED5B F634 B2B9 9DDF 51B0 94B9 1ABF" /* âLí[ö4²¹ßQ°”¹.¿ */
- $"BE93 4236 35A6 613E 3D1B C8FD 0587 27C7" /* ¾“B65¦a>=.Èý.‡'Ç */
- $"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" /* ä_¥.<hÊs:W£^F-’. */
- $"9D19 A4FE F266 C323 64FF 7B71 19F7 0BC3" /* .¤þòfÃ#dÿ{q.÷.Ã */
- $"062C 20C4 9745 F075 6FFF 31F0 A3AD 4C84" /* ., Ä—Eðuoÿ1ð£­L„ */
- $"00F3 104C 0064 3899 0DB9 8128 CB5F FF46" /* .ó.L.d8™.¹(Ë_ÿF */
- $"7184 41CB 7E58 4C0B ADD5 CBB2 1A61 E3D6" /* q„AË~XL.­Õ˲.aãÖ */
- $"B45F 489E 7FE9 D915 2B77 0776 98BD B3A6" /* ´_Hž.éÙ.+w.v˜½³¦ */
- $"230E B817 1D5A D937 3251 2449 6B0A 5A13" /* #.¸..ZÙ72Q$IkÂZ. */
- $"C4E0 BB45 CB72 9758 9E56 158D B1E6 9590" /* Äà»EËr—XžV.±æ• */
- $"4FC4 0611 EDBC 426F 6D2B D932 D595 A74E" /* OÄ..í¼Bom+Ù2Õ•§N */
- $"8728 58CD BD02 9746 DBA2 7EAB 0F07 363C" /* ‡(Xͽ.—FÛ¢~«..6< */
- $"BAB3 1228 E02A BDB4 373F F3FB FF7D 8D0D" /* º³.(à*½´7?óûÿ}. */
- $"2193 09F4 7603 A017 98B1 421E 7A47 D126" /* !“Æôv. .˜±B.zGÑ& */
- $"82FD 5449 B97F F864 5CD5 19F6 A8A4 F216" /* ‚ýTI¹.ød\Õ.ö¨¤ò. */
- $"A4B3 FF7F E820 4C58 DE4B 944B 6FD4 F4DA" /* ¤³ÿ.è LXÞK”KoÔôÚ */
- $"596E A688 456C 3F0D 7844 1596 2BED 0D5D" /* Yn¦ˆEl?.xD.–+í.] */
- $"FAFB 8D2E D7D0 ABCB B2BE 8D80 E74D 9EDC" /* úû.×Ы˲¾€çMžÜ */
- $"7FFF 7FC9 2FB9 3BDA F47A B9C2 E1B8 5CC8" /* .ÿ.É/¹;Úôz¹Âá¸\È */
- $"14AB D534 7208 32FE 73D2 EF23 862E 10F8" /* .«Õ4r.2þsÒï#†..ø */
- $"C16F 1FFF 6FBB FA97 5167 CDAD 4886 8FC2" /* Áo.ÿo»ú—QgÍ­H†Â */
- $"BFFF 7FFE 2B73 126E 1EC8 C82A 3F6D 6CC3" /* ¿ÿ.þ+s.n.ÈÈ*?mlà */
- $"D98A D501 1DC2 82FD FF57 9731 B866 2A7D" /* ÙŠÕ..‚ýÿW—1¸f*} */
- $"C983 5F41 893F 2D09 F81C E373 42C2 5963" /* Ƀ_A‰?-Æø.ãsBÂYc */
- $"7E9F C269 2B8B C21A 8247 D433 0DF7 491E" /* ~ŸÂi+‹Â.‚GÔ3.÷I. */
- $"D1BF 3D9E F4BD 1B50 8034 4EE9 4A69 B155" /* Ñ¿=žô½.P€4NéJi±U */
- $"849A B0F7 8CEA 3FD0 E4A0 C339 2431 ED8B" /* „š°÷Œê?Ðä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FD9F 7F36 9703 7BCA 1455 6A98 F02E" /* #fýŸ.6—.{Ê.Uj˜ð. */
- $"1EDC 4707 C9A6 B325 A6E4 637D 612B B3DD" /* .ÜG.ɦ³%¦äc}a+³Ý */
- $"1E5A 3660 EEB0 BEFA 2C50 307B 5887 6D39" /* .Z6`î°¾ú,P0{X‡m9 */
- $"0EC7 2D81 C32E 6B72 8546 30E4 133F 3D3B" /* .Ç-Ã.kr…F0ä.?=; */
- $"0A76 21AA 4387 8F29 03C8 1C32 755C F553" /* Âv!ªC‡).È.2u\õS */
- $"5CA1 C16A 02EC 4654 97C8 6F10 BA2A 16E0" /* \¡Áj.ìFT—Èo.º*.à */
- $"DB18 605E 8A18 8A6E 4F35 1EF7 8C57 F8B2" /* Û.`^Š.ŠnO5.÷ŒWø² */
- $"0020 4D0A 1739 2287 ADE2 B0C2 D816 17D2" /* . MÂ.9"‡­â°ÂØ..Ò */
- $"21F8 3104 FEA8 38E3 8644 6F0B D2C6 A599" /* !ø1.þ¨8ã†Do.ÒÆ¥™ */
- $"B793 1367 B548 23BD 8836 1143 D5DB 2720" /* ·“.gµH#½ˆ6.CÕÛ' */
- $"73BB 1485 DEAF C96F 24E8 AA26 56B9 89D3" /* s».…Þ¯Éo$èª&V¹‰Ó */
- $"8F8D 2F3E 5EA5 466C BE3C 6879 6C0A 5891" /* />^¥Fl¾<hylÂX‘ */
- $"974E 6F22 0E47 66D4 BD1F 6A7D 1885 42CC" /* —No".GfÔ½.j}.…BÌ */
- $"7E13 126E AC98 74B7 B093 BDFF 37DB E527" /* ~..n¬˜t·°“½ÿ7Ûå' */
- $"E6D0 CF2A D7E6 E7EB 1095 05AF 6407 BB9B" /* æÐÏ*×æçë.•.¯d.»› */
- $"0227 D5EB 260A C844 340F B249 E84F 58A7" /* .'Õë&ÂÈD4.²IèOX§ */
- $"FA14 9D34 7614 73A6 BE73 ED76 B2CD 4515" /* ú.4v.s¦¾sív²ÍE. */
- $"F26C 3AD7 7C32 5480 5A3A C4DF 123A EA95" /* òl:×|2T€Z:Äß.:ê• */
- $"D2B4 A3D8 F88D E685 6505 A999 DD9E C8D1" /* Ò´£Øøæ…e.©™ÝžÈÑ */
- $"A073 3702 5A8F 3598 F7DC A36F 0058 065E" /*  s7.Z5˜÷Ü£o.X.^ */
- $"65E6 B5AC 2A85 0F1C 43BF 8A10 43A0 BB10" /* e浬*…..C¿Š.C ». */
- $"4C3A 8F4F 95AD 253D EEE9 FBE8 4023 4647" /* L:O•­%=îéûè@#FG */
- $"7A75 8F1C 9245 3C51 3FF5 BD2B DFD3 57EF" /* zu.’E<Q?õ½+ßÓWï */
- $"1FB4 900F 4546 6EFA A7AE 45EB EAE9 7B9D" /* .´.EFnú§®Eëêé{ */
- $"6408 1DCB F7AC BE44 7D08 1482 2257 A9CF" /* d..Ë÷¬¾D}..‚"W©Ï */
- $"8B78 3610 9816 9518 A64C 215A 4569 6C5F" /* ‹x6.˜.•.¦L!ZEil_ */
- $"57E0 4F89 F77C 88D6 ADFC 8E42 9299 A2C9" /* WàO‰÷|ˆÖ­üŽB’™¢É */
- $"0F7C EA0A 7E98 B7AF 70ED 09A8 0759 B1A7" /* .|êÂ~˜·¯píƨ.Y±§ */
- $"C18E 2CC9 883F A788 A2F1 57B9 7A0E F384" /* ÁŽ,Ɉ?§ˆ¢ñW¹z.ó„ */
- $"F0CE 46F0 E10A ED6F CE17 2BE1 25D5 3A36" /* ðÎFðáÂíoÎ.+á%Õ:6 */
- $"5C6A F3AA F2D1 7225 6C5C 514F 8F1F 64A5" /* \jóªòÑr%l\QO.d¥ */
- $"B08E D05D 3E2E B3E4 DE48 12A9 7DC6 6E03" /* °ŽÐ]>.³äÞ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%ä.%<kì.¿ï */
- $"3E5E 0ACF 766D 9D4E 8978 2AC5 F138 755A" /* >^ÂÏ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ÇÛ.<g */
- $"7F80 43C8 7B29 FA49 8C64 3FEB 6406 35FE" /* .€CÈ{)úIŒd?ëd.5þ */
- $"FAEB 4922 9410 5352 D4C0 00CB 72EA 56CE" /* úëI"”.SRÔÀ.ËrêVÎ */
- $"22F8 673A D3E8 AAFA E992 5B7F 827C A83D" /* "øg:Óèªúé’[.‚|¨= */
- $"586F 54B4 69F8 C6B7 FF14 CFD4 4069 C50F" /* XoT´iøÆ·ÿ.ÏÔ@iÅ. */
- $"9E23 797E DE78 5B86 FCAE BDE5 B920 9551" /* ž#y~Þx[†ü®½å¹ •Q */
- $"22EC 4155 0582 10F4 BF8C 144A 3251 97F3" /* "ìAU.‚.ô¿Œ.J2Q—ó */
- $"2E7D 1E04 969B 4C15 8BDB FAC1 9743 2B6C" /* .}..–›L.‹ÛúÁ—C+l */
- $"6EF5 C95E 47CB A380 A635 C17D AD97 42EA" /* nõÉ^GË£€¦5Á}­—Bê */
- $"88A1 A63E FC76 A19C AE08 C868 115F 098D" /* ˆ¡¦>ü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" /* <YÞxDÐäE¼ :à.Ùt@ */
- $"F09F 10EA E0BA 4596 84F5 81A2 550E 57A7" /* ðŸ.êàºE–„õ¢U.W§ */
- $"F2A8 B2DD D612 A18F D74A 671D B70C 994A" /* ò¨²ÝÖ.¡×Jg.·.™J */
- $"9441 8E10 12B8 80F0 6249 2075 CD39 3667" /* ”AŽ..¸€ðbI uÍ96g */
- $"6632 AFDD 5E48 6B22 15CC 179A C6FA 47AE" /* f2¯Ý^Hk".Ì.šÆúG® */
- $"66AF 7AFB 033D 03F1 B829 B852 F1BF 55DB" /* f¯zû.=.ñ¸)¸Rñ¿UÛ */
- $"17F6 E1EF A955 F266 ACFE 75F4 34FC 38B0" /* .öáï©Uòf¬þuô4ü8° */
- $"0068 7DD6 016E 98D4 57DB 6220 D269 4BE9" /* .h}Ö.n˜ÔWÛb ÒiKé */
- $"8007 22E8 9D82 8FCE EB41 317B D0FA 323B" /* €."è‚ÎëA1{Ðú2; */
- $"B2C0 06D3 99E3 ED9A 2423 78CD AE34 CF5B" /* ²À.Ó™ãíš$#xÍ®4Ï[ */
- $"58DA 8F69 9604 4804 8682 B58C C1DA 1E21" /* XÚi–.H.†‚µŒÁÚ.! */
- $"0E4E F709 83E1 B335 F208 6565 C882 70A0" /* .N÷ƃá³5ò.eeÈ‚p  */
- $"2F58 5379 3999 7F2E E63D 81E4 C2EB 58E3" /* /XSy9™..æ=äÂëXã */
- $"4605 35E7 76D7 C7D0 AEDA 26C5 8BB6 0F99" /* F.5çv×ÇЮÚ&Å‹¶.™ */
- $"77C0 D3D6 9870 8279 4C2E 29C6 518F 13E6" /* wÀÓÖ˜p‚yL.)ÆQ.æ */
- $"1373 FCB8 FD55 3D8F 8322 F8F4 CD80 3C09" /* .sü¸ýU=ƒ"øôÍ€<Æ */
- $"1496 931A E1BF 0AE6 2842 6FF7 6986 6AEE" /* .–“.á¿Âæ(Bo÷i†jî */
- $"1AE9 FF0A 947D E3F6 D93F B59B F6D5 5FB6" /* .éÿ”}ãöÙ?µ›öÕ_¶ */
- $"AAC7 EDD1 1FDB 5A5F 5549 7D55 2E1F B6A4" /* ªÇíÑ.ÛZ_UI}U..¶¤ */
- $"FDAA F7D4 DF7D 4E80 F173 72EC 2AD6 46CC" /* ýª÷Ôß}N€ñsrì*ÖFÌ */
- $"6653 9F8A F548 8CD9 F7CC 0758 DFBD 1976" /* fSŸŠõHŒÙ÷Ì.Xß½.v */
- $"0832 03BE 1A6C 242F 4978 025D 37A6 D46A" /* .2.¾.l$/Ix.]7¦Ôj */
- $"B859 037D 5250 D0D6 8FC0 4C05 AAAB 7F38" /* ¸Y.}RPÐÖÀL.ª«.8 */
- $"799B 43F9 E370 D367 B412 8CC2 F941 E270" /* y›CùãpÓg´.ŒÂùAâp */
- $"A967 1978 577B 7A22 541A 7DDD A593 75E5" /* ©g.xW{z"T.}Ý¥“uå */
- $"6B05 D950 D953 DA5E 7EBF D5D3 4314 5006" /* k.ÙPÙSÚ^~¿ÕÓC.P. */
- $"8EC3 8474 6B41 83B3 7B16 9C95 721B 5405" /* ŽÃ„tkAƒ³{.œ•r.T. */
- $"F4AE A41F 92D8 56DA F2C9 4BF8 5B0A EBC6" /* ô®¤.’ØVÚòÉKø[ÂëÆ */
- $"29D5 F4F3 36B9 A6D7 3BC4 75D7 972C 7465" /* )Õôó6¹¦×;Äu×—,te */
- $"CCBE 21FA 6EAF 6B26 465B 4676 356D E640" /* ̾!ún¯k&F[Fv5mæ@ */
- $"04C3 0E39 C431 FBA5 2B53 E001 8F9D 37F5" /* .Ã.9Ä1û¥+Sà.7õ */
- $"F289 EC84 85B8 5FC3 F74A 734B E0B1 ED8C" /* ò‰ì„…¸_Ã÷JsKà±íŒ */
- $"5DF4 6678 22E4 887C A45B 1478 DFC3 A9E9" /* ]ôfx"äˆ|¤[.xßéé */
- $"F234 5723 01B3 2685 2754 8133 8699 21C8" /* ò4W#.³&…'T3†™!È */
- $"180A 27F8 174C FED5 8F71 4082 C4E8 DB83" /* .Â'ø.LþÕq@‚ÄèÛƒ */
- $"BDA4 4506 3FA4 5286 5D63 00F7 905D A740" /* ½¤E.?¤R†]c.÷]§@ */
- $"5251 07FA 22F8 1334 FBA6 5640 7199 FA41" /* RQ.ú"ø.4û¦V@q™úA */
- $"A3C7 3CC1 ECF5 7F43 A9AE FBD5 C1F0 18B3" /* £Ç<Áìõ.C©®ûÕÁð.³ */
- $"7072 4809 0A4C 8127 6E10 5F7C 335C CC28" /* prHÆÂL'n._|3\Ì( */
- $"B723 3D12 724D 3DE5 37B3 1C2A 136D 2258" /* ·#=.rM=å7³.*.m"X */
- $"DCE6 BFA4 0DAD FB6E 72C1 70F7 6D71 785D" /* Ü濤.­ûnrÁp÷mqx] */
- $"BC75 69CE CE3B CF7A 170E 8343 CBA9 DE66" /* ¼uiÎÎ;Ïz..ƒCË©Þf */
- $"06ED 779C AA9F F28D 943D 5E3E DEDE 4769" /* .íwœªŸò”=^>ÞÞ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" /* \<m톖Hd.V8C.YŠ*/
- $"D913 B06B 0B08 E00E 1802 6D82 7225 E695" /* Ù.°k..à...m‚r%æ• */
- $"9F1E E7B0 D1DF 323C 61DC 1F25 E3FF 83E2" /* Ÿ.ç°Ñß2<aÜ.%ãÿƒâ */
- $"A49A DED4 4495 A948 5B70 9E5A 01F1 2431" /* ¤šÞÔD•©H[pžZ.ñ$1 */
- $"8EE5 2B54 2863 9041 FAE9 9E9F 1B85 E206" /* Žå+T(cAú鞟.…â. */
- $"4104 106C 5027 632A 8716 C3A5 F047 B3D5" /* A..lP'c*‡.Ã¥ðG³Õ */
- $"EE2B 19CD 2B75 17D8 DFB6 E2BF 491E A41F" /* î+.Í+u.Ø߶â¿I.¤. */
- $"BC48 3493 DEFB 453D 64DE DEA0 68DB EF5B" /* ¼H4“ÞûE=dÞÞ hÛï[ */
- $"1E69 8F3F C55C 1FF6 1823 1543 F483 DF20" /* .i?Å\.ö.#.Côƒß */
- $"F5B4 08F4 5D20 4DF0 7D7D 2007 2ACA 5B5E" /* õ´.ô] Mð}} .*Ê[^ */
- $"159F EF4A 505D 811D A8A3 5476 5539 B45B" /* .ŸïJP].¨£TvU9´[ */
- $"3113 1AC7 00F3 F1A7 E9E3 9E88 5D91 6CD5" /* 1..Ç.óñ§é㞈]‘lÕ */
- $"2CC0 F92B 2063 FF29 4B0E 775A 06EE 75CC" /* ,Àù+ cÿ)K.wZ.îuÌ */
- $"DA54 AC2F B72D 1C25 1E46 A4F8 C3E1 7D8D" /* ÚT¬/·-.%.F¤øÃá} */
- $"85AE BBE6 3DBE EC4A 35F7 3B36 1FBF BC38" /* …®»æ=¾ìJ5÷;6.¿¼8 */
- $"2DC1 785C D644 2BED AB51 1950 2643 8730" /* -Áx\ÖD+í«Q.P&C‡0 */
- $"2AE9 E4EB 1B8E 8F90 BA0C FF2F 6F65 5F28" /* *éäë.Žº.ÿ/oe_( */
- $"1A3F 9398 FF20 01A2 69A0 02C9 8D1B C3EA" /* .?“˜ÿ .¢i .É.Ãê */
- $"A600 6417 3CA3 9E84 93EF 063D 59DC 702C" /* ¦.d.<£ž„“ï.=YÜp, */
- $"959D C3A6 B1ED DEF1 F321 5BA6 FCCD 7762" /* •Ã¦±íÞñó![¦üÍwb */
- $"6C23 7398 AA59 4BBA 0052 B8A7 0608 1AAC" /* l#s˜ªYKº.R¸§...¬ */
- $"5B2E AF60 17F4 278E 6433 6F75 7839 CED2" /* [.¯`.ô'Žd3oux9ÎÒ */
- $"F32E 5D7D 9D40 B145 4CFB A25C D8D7 4BCB" /* ó.]}@±ELû¢\Ø×KË */
- $"956D 88DD 4B92 64BF 4CD4 AFD5 6E56 9859" /* •mˆÝK’d¿LÔ¯ÕnV˜Y */
- $"ABEF BB40 AD0E 6E1F 9B3B 16A3 D9D3 58DF" /* «ï»@­.n.›;.£ÙÓXß */
- $"584E C303 1DAD D18B 6082 9C29 88EB 5163" /* XNÃ..­Ñ‹`‚œ)ˆëQc */
- $"A42D 061A 1570 64A9 0F1C E00D 56D9 E0CB" /* ¤-...pd©..à.VÙàË */
- $"7C66 799C 8EB4 BFCA CF5C CFC2 B611 4F0C" /* |fyœŽ´¿ÊÏ\϶.O. */
- $"AFDE 008C 3580 A270 0C1A 3737 50A1 9A89" /* ¯Þ.Œ5€¢p..77P¡š‰ */
- $"2546 BB2C 62A0 57BE 59CB C00A 1EE9 0F1D" /* %F»,b W¾YËÀÂ.é.. */
- $"C528 40D4 EA69 D281 AED4 B078 F27A 0B42" /* Å(@ÔêiÒ®Ô°xòz.B */
- $"7AD2 DADD 146B 7FFF 223D 6A74 2041 4FCF" /* zÒÚÝ.k.ÿ"=jt AOÏ */
- $"46E1 60C8 9ABE 841E E18D 1712 DB6D 902B" /* Fá`Èš¾„.á..Ûm+ */
- $"7BE6 56DA 7E4B 1704 A373 2802 B120 0184" /* {æVÚ~K..£s(.± .„ */
- $"0681 4499 2739 CE73 9CE8 99D8 C352 337C" /* .D™'9Îsœè™ØÃR3| */
- $"06AB BB71 6257 16EF B535 4972 8C2F 2EE0" /* .«»qbW.ïµ5IrŒ/.à */
- $"85CC 8431 D867 47EE CC43 6E87 A485 2316" /* …Ì„1ØgGîÌCn‡¤…#. */
- $"4927 AE22 C12D 49CE 739C E61C 97D0 99CC" /* I'®"Á-IÎsœæ.—Ð™Ì */
- $"3DC5 F26B 1A31 E742 3E56 464B 2944 108E" /* =Åòk.1çB>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˜Æ<H..$ydè.z` */
- $"F2C0 8287 A7F4 B307 FBDF 2550 567E 01EA" /* òÀ‚‡§ô³.ûß%PV~.ê */
- $"2C45 4614 9A0A 04E8 397B 3DEC 6CDA CA95" /* ,EF.šÂ.è9{=ìlÚÊ• */
- $"B754 699A FF29 B46B D6E3 BB8C 153C AEC0" /* ·Tišÿ)´kÖ㻌.<®À */
- $"BEFF 46AD 744B B945 4C07 F7F7 178D 059E" /* ¾ÿF­tK¹EL.÷÷..ž */
- $"2E80 10C4 6DD6 F19E B649 73D6 8C57 7A6C" /* .€.ÄmÖñž¶IsÖŒWzl */
- $"45DE 3D43 22DE C54A DFCD 64EA 9D77 1AC6" /* EÞ=C"ÞÅJßÍdêw.Æ */
- $"E15E A9A7 0D83 D53C 100B EC25 2B93 1D27" /* á^©§.ƒÕ<..ì%+“.' */
- $"367A 864E D9C4 F0B9 DF5C 538D B2C0 24EE" /* 6z†NÙÄð¹ß\S²À$î */
- $"46E7 424C 2127 6BED B492 3354 86C9 D855" /* FçBL!'kí´’3T†ÉØU */
- $"317B 6BE2 8205 C07C 9A42 03E4 D6B0 0F93" /* 1{kâ‚.À|šB.äÖ°.“ */
- $"4400 AFF0 AE8C D6D6 6729 AEBE 9CDE 5C69" /* D.¯ð®ŒÖÖg)®¾œÞ\i */
- $"D95C 01A0 28AF 1E57 B12C CA6D F010 ED89" /* Ù\. (¯.W±,Êmð.í‰ */
- $"4C46 38AA BAFC D67E 9E98 C6CA 85E4 433E" /* LF8ªºüÖ~ž˜ÆÊ…äC> */
- $"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ƒÄ­<x\ */
- $"E3B4 BFC0 C27C 3762 1D98 0A0C B43D 8107" /* ã´¿ÀÂ|7b.˜Â.´=. */
- $"3003 FF74 C626 1BC1 44AA 08A0 7A68 0ADE" /* 0.ÿtÆ&.ÁDª. zhÂÞ */
- $"E9BD 94DB 3644 AA13 CFCA A9CB 0E8F 9061" /* é½”Û6Dª.ÏÊ©Ë.a */
- $"73BC 6A23 359D C129 F184 4EBA BE0F A772" /* s¼j#5Á)ñ„Nº¾.§r */
- $"9AB6 7DDC C179 81DB 9FDC EDA3 E6C5 21E2" /* š¶}ÜÁyÛŸÜí£æÅ!â */
- $"7049 87BC 00E3 34F5 8066 3FFE 7CA7 A588" /* pI‡¼.ã4õ€f?þ|§¥ˆ */
- $"6277 30DE 8FC1 950A A652 5B12 B0A4 B8BE" /* bw0ÞÁ•Â¦R[.°¤¸¾ */
- $"2297 4261 CB90 AEBB F3CB 2BEE 2FA8 149E" /* "—BaË®»óË+î/¨.ž */
- $"11E6 487B 3EFA 45B9 E4A8 17DF DF8E D5FF" /* .æH{>ú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Âæ‚<Xf¸pEͺal */
- $"9995 BEC1 809B 0892 A7EC 43EC 7FE8 F49F" /* ™•¾Á€›.’§ìCì.èôŸ */
- $"9E4B AFD6 66BB 0B88 38ED B165 9C1D F096" /* žK¯Öf».ˆ8í±eœ.ð– */
- $"64EC FD43 9A7A BC84 8CEF 2E65 F99B 4B43" /* dìýCšz¼„Œï.eù›KC */
- $"7D47 3AE8 D0DB A066 308B 201D FF3F ABC1" /* }G:èÐÛ f0‹ .ÿ?«Á */
- $"CD0D B822 3734 A23E AF05 D1E1 F9F5 AF09" /* Í.¸"74¢>¯.Ñáùõ¯Æ */
- $"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" /* ºÍ<QÓD3×!Ǿš‘](. */
- $"3E68 3F1B 43AE 8F30 CE7F FF67 1C78 8498" /* >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}<i}²/ÿ.3 */
- $"81FC E4ED 4BF8 9180 3FD2 0142 3F2D 1DF0" /* üäíKø‘€?Ò.B?-.ð */
- $"097B D61C 019A C409 B506 26FC D55D 7AE9" /* Æ{Ö..šÄƵ.&üÕ]zé */
- $"3464 6C57 13E7 565F 2553 70C3 3EC7 87AC" /* 4dlW.çV_%SpÃ>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" /* Ã\<w]}Q€ .­£®`ªà */
- $"0D88 09A4 4F7B FAC4 A2FD 327D E109 4F0B" /* .ˆÆ¤O{úÄ¢ý2}áÆO. */
- $"3343 C0ED D985 7402 93E2 7A2E 09B4 09A6" /* 3CÀíÙ…t.“âz.ƴƦ */
- $"5348 2E51 C037 BE62 C1A7 15C4 B9C8 7F4B" /* SH.QÀ7¾bÁ§.ĹÈ.K */
- $"FC22 3596 D989 C701 6701 5488 1001 22B2" /* ü"5–Ù‰Ç.g.Tˆ.."² */
- $"C06A A5D5 2C94 6BA9 D1C6 2B33 5910 8B1F" /* Àj¥Õ,”k©ÑÆ+3Y.‹. */
- $"0B0D 5531 BE0F 3E72 9C60 75A8 2669 220D" /* ..U1¾.>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" /* <wdž.Ž<cfôî.).u\ */
- $"EDD8 6093 6868 531C 9FA3 C5C9 3F3C 7786" /* íØ`“hhS.Ÿ£ÅÉ?<w† */
- $"BCC4 440C 13F9 0BCB 76BA 9364 A3CC 344F" /* ¼ÄD..ù.Ëvº“d£Ì4O */
- $"128B D594 CB9D A2DC 6C03 CA48 2D9E 9706" /* .‹Õ”Ë¢Ül.ÊH-ž—. */
- $"A281 5170 A91B 0033 4552 2A9A BF6F D4A9" /* ¢Qp©..3ER*š¿oÔ© */
- $"61B6 F6C1 7959 FDD2 8F3F C94B 2B90 29BB" /* a¶öÁyYýÒ?ÉK+)» */
- $"9FAA A83B FEFF 80A3 1EC2 B2D9 77CF 963B" /* Ÿª¨;þÿ€£.²ÙwÏ–; */
- $"85FF 5728 5CDD 2F01 7556 8155 F8AA 7984" /* …ÿW(\Ý/.uVUøªy„ */
- $"7543 0C18 A1FC 0353 DF5F D368 41E9 E0EF" /* uC..¡ü.Sß_ÓhAéàï */
- $"C363 A78F 3FE9 41E9 5F77 19A4 A811 FF43" /* Ãc§?éAé_w.¤¨.ÿC */
- $"8EE8 3FBA 00FA 54F6 15F5 CF3B 39A6 0984" /* Žè?º.úTö.õÏ;9¦Æ„ */
- $"CC99 7AE1 8E5B 71A9 1575 DB95 F166 D52F" /* Ì™záŽ[q©.uÛ•ñfÕ/ */
- $"A270 08D4 9515 3B89 2EA1 A097 12A3 B4E9" /* ¢p.Ô•.;‰.¡ —.£´é */
- $"5BFB AE47 8FD7 60F0 33DA E91B 234B 5D2F" /* [û®G×`ð3Úé.#K]/ */
- $"7C4B 00C2 60F1 7260 B78A 1835 B440 611B" /* |K.Â`ñr`·Š.5´@a. */
- $"042D F768 F9C9 8785 50AD 8421 77D4 B97A" /* .-÷hùɇ…P­„!wÔ¹z */
- $"6B02 828C E758 8B31 1E92 DF7F BE67 3DAB" /* k.‚ŒçX‹1.’ß.¾g=« */
- $"E5F8 F1FB FD8C 34F4 4B2F 98BF 24A9 4DF2" /* åøñûýŒ4ôK/˜¿$©Mò */
- $"32A9 A661 B01E F960 12E1 9C18 F197 CEA7" /* 2©¦a°.ù`.áœ.ñ—Χ */
- $"E1C4 4AB4 7CEB 2CE2 33F3 C23C F3FD 2CF9" /* áÄJ´|ë,â3óÂ<óý,ù */
- $"F132 8395 3D39 FD9D 983D 4454 9758 856B" /* ñ2ƒ•=9ý˜=DT—X…k */
- $"6556 B234 72B0 C2CA 71CA 9CEB 7AE4 FD7C" /* eV²4r°ÂÊqÊœëzäý| */
- $"0E3F 1930 6B17 7074 C216 3D9C 24BF 5B97" /* .?.0k.ptÂ.=œ$¿[— */
- $"A7EA 25F0 9DCC AFA5 BBEF 47E9 D7E6 7B0E" /* §ê%ð̯¥»ïGé×æ{. */
- $"E02F 87A2 EF87 68FC 9BF7 F274 5F00 FC3D" /* à/‡¢ï‡hü›÷òt_.ü= */
- $"A5F8 7AC7 F0FA A5F8 7D42 C03F 0F42 FE1D" /* ¥øzÇðú¥ø}BÀ?.Bþ. */
- $"ABF0 F7CF E1EE 40ED 1CBC E67A C7C3 33E9" /* «ð÷Ïáî@í.¼æzÇÃ3é */
- $"75CE 6202 697A FF68 B299 C0A6 2F39 4F64" /* uÎb.izÿh²™À¦/9Od */
- $"6775 1459 6387 68C9 941E E328 B150 8D7C" /* gu.Yc‡hÉ”.ã(±P| */
- $"24C4 D953 4443 9A50 E4CC 4E41 B3A9 F28A" /* $ÄÙSDCšPäÌNA³©òŠ */
- $"BB0E 943C 0DAB C98A 023C 332B AE2D AF60" /* ».”<.«ÉŠ.<3+®-¯` */
- $"4D30 BA77 9D1A 93DC CEBB 7560 EA33 084C" /* M0ºw.“Üλu`ê3.L */
- $"BCFD 2F47 685E 4CC9 8A76 F1C8 04AB 126F" /* ¼ý/Gh^LÉŠvñÈ.«.o */
- $"B9FD 4A34 E181 4147 9F56 2AB4 EB2C 50EF" /* ¹ýJ4áAGŸV*´ë,Pï */
- $"D652 4543 763B B857 210B 2B4A BB50 0EAE" /* ÖRECv;¸W!.+J»P.® */
- $"90BD EEEC F92B DD18 0881 9B3A C6DF A028" /* ½îìù+Ý..›:Æß ( */
- $"45EB 36D7 50B4 D756 FB49 9F08 D74D 037B" /* Eë6×P´×VûIŸ.×M.{ */
- $"83A1 001C 0977 1DCC 81D0 B6B9 828A 6851" /* ƒ¡..Æw.Ìж¹‚ŠhQ */
- $"3CAC B3FF 572B 543A 4C73 3F35 0561 EC81" /* <¬³ÿW+T:Ls?5.aì */
- $"A8D4 82BC 9148 5E30 FF3E 3164 C43E 5461" /* ¨Ô‚¼‘H^0ÿ>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àç<?Û¥a.ŸD..àD */
- $"5844 8C9D 83C0 C5D3 6B95 CE2A 3EBC D7FD" /* XDŒƒÀÅÓk•Î*>¼×ý */
- $"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š•}<WÜŸ.æ */
- $"C3B6 16AD C91B E868 E000 1848 3BE4 5C3A" /* ö.­É.èhà..H;ä\: */
- $"1162 2272 401F 600B A973 281E 62B3 2654" /* .b"r@.`.©s(.b³&T */
- $"74B0 287C C53E A3DA 2A14 E38F 9FFE 3A8E" /* t°(|Å>£Ú*.ãŸþ:Ž */
- $"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" /* ^.^à<eWжœ7‚Ѿ:w */
- $"436E 462B 45B7 FF61 4FA4 A45B 8C34 39D8" /* CnF+E·ÿaO¤¤[Œ49Ø */
- $"1B35 B876 A5F1 F2AD 3F78 D289 1C2E E3B4" /* .5¸v¥ñò­?xÒ‰..ã´ */
- $"A28B 64FA 1E2C 0CCD 0B1C AD42 8866 DDD6" /* ¢‹dú.,.Í..­BˆfÝÖ */
- $"62F0 225B 8DF7 32B3 FC3C 79E9 000B 1CA9" /* bð"[÷2³ü<yé...© */
- $"2C82 4874 34AB B158 47CD FA9F EBC8 0923" /* ,‚Ht4«±XGÍúŸëÈÆ# */
- $"B291 7229 8C3F E7FD 193C 330B A3B4 6969" /* ²‘r)Œ?çý.<3.£´ii */
- $"FCF6 E1BA 4C4A E64C B1BC 5BAF F402 C828" /* üöáºLJæL±¼[¯ô.È( */
- $"3A51 CC67 A851 E207 5A7C 3733 1031 FD5C" /* :QÌg¨Qâ.Z|73.1ý\ */
- $"E4D3 B69F FF67 2C6D 3FC7 D5B4 E63F 55B9" /* äÓ¶Ÿÿg,m?ÇÕ´æ?U¹ */
- $"FD5F 3DB1 4589 6ADF 54F0 F42A 498F 61C8" /* ý_=±E‰jßTðô*IaÈ */
- $"4872 5CD7 F70D 9C80 8880 EB9A 1FE7 C715" /* Hr\×÷.œ€ˆ€ëš.çÇ. */
- $"E57A 280F 96CF 014C 0411 EF44 C4F2 C64F" /* åz(.–Ï.L..ïDÄòÆO */
- $"F91B A9D6 EB9E F615 096F E5C0 5B30 BB79" /* ù.©Öëžö.ÆoåÀ[0»y */
- $"D645 BF4F B70A 2C40 3D24 A4C4 5A01 F3DB" /* ÖE¿O·Â,@=$¤ÄZ.óÛ */
- $"8879 D458 F558 4C8E 3C87 E83C 9C30 F0C3" /* ˆyÔXõXLŽ<‡è<œ0ðà */
- $"F7EB BE6A 2B3B B9CB 4F2E 3B49 CA98 6025" /* ÷ë¾j+;¹ËO.;Iʘ`% */
- $"D6C7 6B39 ED18 A784 5410 F9CD 4FB5 9E32" /* ÖÇk9í.§„T.ùÍOµž2 */
- $"EABF F72F 6ECC 217F E295 4BDA F0C8 2678" /* ê¿÷/nÌ!.â•KÚðÈ&x */
- $"B0F7 3381 2299 1033 5300 BB1C E72F 1EE0" /* °÷3"™.3S.».ç/.à */
- $"75D6 68D0 8C87 A574 580B 4AD8 7BC8 E1C4" /* uÖhÐŒ‡¥tX.JØ{ÈáÄ */
- $"64D3 76AA A080 1E28 FD04 890B B9A1 7E5C" /* dÓvª €.(ý.‰.¹¡~\ */
- $"79E2 31B9 1C3E DBAE 8BC6 DB23 53A4 0F06" /* yâ1¹.>Û®‹ÆÛ#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" /* <c..TÍ9.WMòÕÇ( · */
- $"9955 DAC8 72A5 DBBB F7ED 4C9F 6FFE 3A4E" /* ™UÚÈr¥Û»÷íLŸoþ:N */
- $"E165 1831 C0E5 8285 96C2 3959 1BE7 E884" /* áe.1Àå‚…–Â9Y.çè„ */
- $"E568 89C1 FD03 D443 F6D1 A7C9 4CFE F7B9" /* åh‰Áý.ÔCöѧÉLþ÷¹ */
- $"A0BA 5040 19D5 965F 0EB5 E503 4B32 E6C8" /*  ºP@.Õ–_.µå.K2æÈ */
- $"B9C1 DEBB B8B7 47DC A850 AF44 D3B7 F562" /* ¹ÁÞ»¸·GܨP¯DÓ·õb */
- $"4210 4DFF 42A0 3D9A 7C63 8124 22A9 B258" /* B.MÿB =š|c$"©²X */
- $"2256 6243 3077 FF57 7389 3FB6 A096 0EAB" /* "VbC0wÿWs‰?¶ –.« */
- $"DD33 EF25 C4B0 7338 F6D7 8730 FF2E DD0A" /* Ý3ï%Ä°s8öׇ0ÿ.Ý */
- $"BBDA 7A6E EFE8 58EE D64B A09E 2B00 EC04" /* »ÚznïèXîÖK ž+.ì. */
- $"09C9 A9F4 82A0 3132 4829 65CA E93B B827" /* ÆÉ©ô‚ 12H)eÊé;¸' */
- $"E81F B387 132B 5D15 E526 6FEC 2CB1 407F" /* è.³‡.+].å&oì,±@. */
- $"8485 FF32 4933 D357 FC45 0E44 EE66 D960" /* „…ÿ2I3ÓWüE.DîfÙ` */
- $"5AA3 A13A FC0B D8E2 622E 0BEE 714F 2672" /* Z£¡:ü.Øâb..îqO&r */
- $"3850 26C4 E626 F9BA 418C BC8A 7481 C6BE" /* 8P&Äæ&ùºAŒ¼Štƾ */
- $"BFA6 0D72 0603 3452 46C0 9FDB BE63 34D9" /* ¿¦.r..4RFÀŸÛ¾c4Ù */
- $"9599 7519 804B F1CE 0FC8 7572 F58E EB32" /* •™u.€KñÎ.ÈurõŽë2 */
- $"3501 CBB0 C05B 5643 485A 0012 64C2 8022" /* 5.Ë°À[VCHZ..d€" */
- $"BD39 EB39 2B57 0AA3 3931 93D4 885E CDF2" /* ½9ë9+W£91“Ôˆ^Íò */
- $"818D 7734 36C2 BEE1 4F55 116C 47A9 DC40" /* w46¾áOU.lG©Ü@ */
- $"A8A8 4532 7C33 9D7E 070A BA9E 36F7 2445" /* ¨¨E2|3~.ºž6÷$E */
- $"074C 181A 07B2 C470 FA15 8CCB C069 AD0F" /* .L...²Äpú.ŒËÀi­. */
- $"9DD2 8B21 6F22 7300 34B4 4378 25AB D9D2" /* Ò‹!o"s.4´Cx%«ÙÒ */
- $"1D9B B7F7 2F9C C3B1 926F DE61 4463 90BD" /* .›·÷/œÃ±’oÞaDc½ */
- $"BC76 27E7 A5B5 826F 908E 31BA 048F 97C1" /* ¼v'祵‚oŽ1º.—Á */
- $"1884 67A9 C4BA 4B2B 4A58 D0EE 0269 6832" /* .„g©ÄºK+JXÐî.ih2 */
- $"E8C6 03AA D2A2 D034 27AA D49E 9C01 069A" /* èÆ.ªÒ¢Ð4'ªÔžœ..š */
- $"1BDC C40B 3BA7 5F8D 0468 152D E505 7EC0" /* .ÜÄ.;§_.h.-å.~À */
- $"6BBF C4F4 2F45 99CB 1872 C713 FA0D 055F" /* k¿Äô/E™Ë.rÇ.ú.._ */
- $"551D 6E4D 5794 CC71 BAB5 C560 4D20 9464" /* U.nMW”ÌqºµÅ`M ”d */
- $"9F8C 94BA 1C96 0987 1AB4 61BB BA86 751B" /* ŸŒ”º.–Ƈ.´a»º†u. */
- $"9B79 D06A 7A3D A663 FB31 8B86 E588 5D15" /* ›yÐjz=¦cû1‹†åˆ]. */
- $"4A09 8B2B 81FC AE85 0D5A 1D8C A5B7 6DD9" /* JÆ‹+ü®….Z.Œ¥·mÙ */
- $"02F5 50CE 7017 1BDD 3D3D 86CB 250B 491B" /* .õPÎp..Ý==†Ë%.I. */
- $"AA1F 2D21 A416 E8E7 9A53 4299 8CDE CD59" /* ª.-!¤.èçšSB™ŒÞÍY */
- $"C678 B559 D85C C580 6795 AD5F F578 C9EE" /* ÆxµYØ\Å€g•­_õxÉî */
- $"73B2 8F4B 6EEA 6F07 F785 C1B3 374B E51F" /* s²Knêo.÷…Á³7Kå. */
- $"46DC 728C 05A4 6932 792A DB50 4E9A FD82" /* FÜrŒ.¤i2y*ÛPNšý‚ */
- $"A8A2 5EB8 024D C558 D6BC 350C 97B0 B2E8" /* ¨¢^¸.MÅXÖ¼5.—°²è */
- $"8F42 92FD 604D 6FB7 74B6 6EBE 97F6 CE03" /* B’ý`Mo·t¶n¾—öÎ. */
- $"0DFA C340 31C3 4C5E 0041 088B E097 383B" /* .úÃ@1ÃL^.A.‹à—8; */
- $"A236 97CC 8D2B 6F6D 0E58 4E56 1D49 32EC" /* ¢6—Ì+om.XNV.I2ì */
- $"626C C303 42BB D30B B8DE 5868 3C2F E39B" /* blÃ.B»Ó.¸ÞXh</ã› */
- $"A07A 236D 0F21 C0DD 1A0A 933A 7710 6605" /*  z#m.!ÀÝ.“:w.f. */
- $"343E 8D1A 9384 4F16 C01E 5AF7 DF53 0B38" /* 4>.“„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‚<R¹„‰ */
- $"9BDF 0AA1 9A6B 667D DCE2 FE18 C386 4EE9" /* ›ß¡škf}Üâþ.ÆNé */
- $"8AF7 92D0 4405 227C BD4C B9E4 34A7 2533" /* Š÷’ÐD."|½L¹ä4§%3 */
- $"D3C6 E915 D57B 681B B6DC FF03 D5D4 F1DD" /* ÓÆé.Õ{h.¶Üÿ.ÕÔñÝ */
- $"4FB5 BA54 262A 73C2 1CF4 4CD1 D842 E8C2" /* OµºT&*sÂ.ôLÑØBè */
- $"8169 3555 13EC 6A25 6DE0 3614 EC2E D1BB" /* i5U.ìj%mà6.ì.Ñ» */
- $"E597 BFC6 2ACB 6879 11D1 870D E79E 8422" /* å—¿Æ*Ëhy.ч.çž„" */
- $"C01D 4032 8887 6DBA FBEC 3077 F220 49E3" /* À.@2ˆ‡mºûì0wò Iã */
- $"8693 0B00 9F45 0F57 0A39 DA8E EAA5 CD48" /* †“..ŸE.WÂ9ÚŽê¥ÍH */
- $"2C93 C3EC BDE0 71D5 5749 0952 441C E3F8" /* ,“Ãì½àqÕWIÆRD.ãø */
- $"597F C1E6 FB6B BBED AD71 FC34 CFF8 5877" /* Y.Áæûk»í­qü4ÏøXw */
- $"DB67 5F6D 798F E163 5F6B 1CFA A87B ED7C" /* Ûg_myác_k.ú¨{í| */
- $"F176 3065 72FF 443D BA6B 8FBD 9E85 806A" /* ñv0erÿD=ºk½ž…€j */
- $"2A1B 368C 7A9E B1B1 93DE ABD8 263F 31B3" /* *.6Œzž±±“Þ«Ø&?1³ */
- $"1739 58F1 7233 FE7C 4EC4 32AA CDDB CF11" /* .9Xñr3þ|NÄ2ªÍÛÏ. */
- $"C519 9C61 B756 AF62 D55D 5D48 6AF7 4364" /* Å.œa·V¯bÕ]]Hj÷Cd */
- $"205E F14D AAD6 EFF5 2F0D CBE4 0F19 3159" /* ^ñMªÖïõ/.Ëä..1Y */
- $"94F4 910E 4217 990B CABE EBF5 2B67 2EF6" /* ”ô‘.B.™.ʾëõ+g.ö */
- $"FE41 0C44 1C50 43EA 69F5 4E73 5569 82A1" /* þA.D.PCêiõNsUi‚¡ */
- $"C13C 4899 3AA9 5E13 5F76 BF98 2105 1842" /* Á<H™:©^._v¿˜!..B */
- $"AF34 9AFD CFC8 D1E7 3479 E1F3 C86F D06F" /* ¯4šýÏÈÑç4yáóÈoÐo */
- $"9ED9 9DD8 E2E0 4B44 19F4 03E6 9CC0 3474" /* žÙØâàKD.ô.æœÀ4t */
- $"DFBD 078F D140 1C06 5F8C B6E2 665C 703A" /* ß½.Ñ@.._Œ¶âf\p: */
- $"2841 642E F538 C531 697D 5064 11AD 9E8C" /* (Ad.õ8Å1i}Pd.­žŒ */
- $"5A53 3174 7302 762E 9708 BEF5 AD41 0C01" /* ZS1ts.v.—.¾õ­A.. */
- $"D744 85FC D963 416A 9A3A 6898 F067 5B1C" /* ×D…üÙcAjš:h˜ðg[. */
- $"873B 42B6 72C4 FF18 337A 8A24 EDCE 6B8B" /* ‡;B¶rÄÿ.3zŠ$íÎk‹ */
- $"BF06 0EA4 0227 A131 8620 B03C A2B9 729E" /* ¿..¤.'¡1† °<¢¹rž */
- $"1242 EC64 E340 5C5C 9BFF 120A BB1B 75E5" /* .Bìdã@\\›ÿ.».uå */
- $"385B 68AF C7B7 8BA5 1E7B 6FC1 DDB2 F642" /* 8[h¯Ç·‹¥.{oÁݲöB */
- $"FF56 4D21 66B3 EA8C 7095 8FBD 92CC 7315" /* ÿVM!f³êŒp•½’Ìs. */
- $"665F B398 608C ADD4 11E0 DA38 734A C3DB" /* f_³˜`Œ­Ô.àÚ8sJÃÛ */
- $"9249 4640 27D6 D057 426E 651D BF14 F0DE" /* ’IF@'ÖÐWBne.¿.ðÞ */
- $"9130 2D17 8D66 9689 79BD 9A6D 5AF9 6C7C" /* ‘0-.f–‰y½šmZùl| */
- $"94BF 8531 6507 5621 1C11 8D8F F3A5 83D9" /* ”¿…1e.V!..ó¥ƒÙ */
- $"7EE3 1E6D 9B0A 8D44 F466 DE49 E606 E143" /* ~ã.m›ÂDôfÞIæ.áC */
- $"7E77 D417 D49D 9CF2 89AA B0FA 84A4 33A5" /* ~wÔ.Ôœò‰ª°ú„¤3¥ */
- $"8279 A26A 82C5 27CF FB64 D227 994E C6A7" /* ‚y¢j‚Å'ÏûdÒ'™NƧ */
- $"531C 7B7D D333 20D4 F79E 7C21 CC1E 7ADA" /* S.{}Ó3 Ô÷ž|!Ì.zÚ */
- $"F978 DEBB 1FF2 7420 A72D DE6B AB74 8DC6" /* ùxÞ».òt §-Þk«tÆ */
- $"DD0F 0386 BF57 5F23 4926 C874 D598 47A3" /* Ý..†¿W_#I&ÈtÕ˜G£ */
- $"FBC8 E9B0 38BB C695 B7F4 82A1 CC5F 1E22" /* ûÈé°8»Æ•·ô‚¡Ì_." */
- $"767C 20D5 E64D 44F1 B2D4 2298 C6A1 1842" /* v| ÕæMDñ²Ô"˜Æ¡.B */
- $"8139 0CC8 B9C5 284F 9FC8 945B 5342 94A8" /* 9.ȹÅ(OŸÈ”[SB”¨ */
- $"1A57 3351 E00E DB28 D5E3 9712 4346 6DBA" /* .W3Qà.Û(Õã—.CFmº */
- $"CC9B A1ED CD9B 778D 4523 1E9A AC69 8ED9" /* Ì›¡íÍ›wE#.š¬iŽÙ */
- $"67C4 C16D A548 A029 0075 0185 8D06 B7F0" /* gÄÁm¥H ).u.….·ð */
- $"8258 D26A EB95 D437 F0D2 8E91 D536 F534" /* ‚XÒjë•Ô7ðÒŽ‘Õ6õ4 */
- $"30A1 6DE7 E4B8 48DF 246E 6A43 4FE6 AED0" /* 0¡mçä¸Hß$njCOæ®Ð */
- $"48A0 5E1E C339 6C40 BE36 CEB8 870B F9EB" /* H ^.Ã9l@¾6θ‡.ùë */
- $"5ED8 3CA2 B3FA 8CD9 2D26 FF79 6468 862D" /* ^Ø<¢³úŒÙ-&ÿydh†- */
- $"6B87 3072 15D5 5640 D5D4 B4BA EAD3 84F1" /* k‡0r.ÕV@ÕÔ´ºêÓ„ñ */
- $"6A43 F378 100E 8088 A3FE 989B E75B F67F" /* jCóx..€ˆ£þ˜›ç[ö. */
- $"5B25 3AE2 C08C 8CB0 08DD A37F 94DD 7F03" /* [%:âÀŒŒ°.Ý£.”Ý.. */
- $"35C9 DF27 9A9A B829 6326 A95D 91F7 0BA3" /* 5Éß'šš¸)c&©]‘÷.£ */
- $"7220 E220 F062 D8DE ADE2 2AD6 DDFD C9E4" /* r â ðbØÞ­â*ÖÝýÉä */
- $"FAAE 543D 3CCB 5230 74F7 3120 02FD 6B45" /* ú®T=<ËR0t÷1 .ýkE */
- $"A2AB 805B 13FB 1879 6060 5600 1847 98E5" /* ¢«€[.û.y``V..G˜å */
- $"BF65 2CD4 ACD7 15D0 B77E 5A0F 8095 95CA" /* ¿e,Ô¬×.з~Z.€••Ê */
- $"1847 D25F 7D32 1AE2 89EA 9D49 074D A3E5" /* .GÒ_}2.â‰êI.M£å */
- $"201E 8AC7 CB9C 43BC 0732 70E0 3C4F E625" /* .ŠÇËœC¼.2pà<Oæ% */
- $"88E3 74DB 6FB7 7BE2 7006 F9E7 1F76 DBF3" /* ˆãtÛo·{âp.ùç.vÛó */
- $"C988 D665 F7AA 21E2 A5C1 E969 2917 3BA3" /* ɈÖe÷ª!â¥Áéi).;£ */
- $"17BF 925F F835 9827 813E DA4F EE9B 2DF3" /* .¿’_ø5˜'>Ú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" /* <Lƒ”r¦.¡=†º..‹Î‹ */
- $"FB71 18D8 E044 CE7C A642 F1E5 DC8B F8E6" /* ûq.ØàDÎ|¦BñåÜ‹øæ */
- $"2405 66E0 B6C5 6A4F B1AE 2231 3060 11D4" /* $.fà¶ÅjO±®"10`.Ô */
- $"9963 5EF4 BB3D 1F61 0807 0AE1 0DFC 4718" /* ™c^ô»=.a..Âá.üG. */
- $"6C97 80A7 D438 6A81 B76A 6E7E 7A64 87A1" /* l—€§Ô8j·jn~zd‡¡ */
- $"1D7A 8744 3227 F565 4B4A E311 FA0F B477" /* .z‡D2'õeKJã.ú.´w */
- $"9DD6 0662 8844 7138 BDF8 CBCC 007F BDB6" /* Ö.bˆDq8½øËÌ..½¶ */
- $"07C4 98CC 226B 9762 33D0 99EF 54D9 5800" /* .ĘÌ"k—b3ЙïTÙX. */
- $"509D C37B 39A7 E11B 8771 0999 AB8B AAA6" /* PÃ{9§á.‡qÆ™«‹ª¦ */
- $"C463 6C38 7FB0 9121 2CA2 7634 BBEE 41FB" /* Äcl8.°‘!,¢v4»îAû */
- $"4F3B B050 3E38 15C4 98A6 216D 31C2 7057" /* O;°P>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.ú˜ÆÈ<y'ÚË9ˆ.;. */
- $"9BEA 1EF3 D655 CFEB B4F7 0888 971D 69EF" /* ›ê.óÖUÏë´÷.ˆ—.iï */
- $"1105 0EF2 80B8 FF1E F0BE 107F 9AB0 6C52" /* ...ò€¸ÿ.ð¾..š°lR */
- $"FF78 3AA4 8FE0 3370 40DF C5E8 478A 2FCF" /* ÿx:¤à3p@ßÅèGŠ/Ï */
- $"96C5 8D32 8E07 AA93 DA95 4D9B 60C6 2748" /* –Å2Ž.ª“Ú•M›`Æ'H */
- $"C8F4 8347 D2D9 2E35 75E4 333A 6494 B177" /* ÈôƒGÒÙ.5uä3:d”±w */
- $"C836 6E4F AF08 CDB0 0FA5 D565 A0EC 946F" /* È6nO¯.Í°.¥Õe ì”o */
- $"ED5C 03F6 E5DB FA4F D29A BF8F BC7F 12D8" /* í\.öåÛúOÒš¿¼..Ø */
- $"7730 8564 524D 4B31 F681 8C71 C5BC 1641" /* w0…dRMK1öŒqż.A */
- $"6988 F9CF 0385 B8EE 4C04 07DB 5AD2 531C" /* iˆùÏ.…¸îL..ÛZÒS. */
- $"48BA 3E6F E24E AF73 DB5E B729 A4BF 894A" /* Hº>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<Bªˆ.u» ¯ì */
- $"26F9 7E41 5CC7 2154 63A3 D965 075C 1A78" /* &ù~A\Ç!Tc£Ùe.\.x */
- $"2A13 753E DDD9 F846 467C EFC6 5308 2B46" /* *.u>ÝÙø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.<aY.>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<PX¥Ü.@.ž */
- $"3999 F0C2 C418 2E8F 0951 664A 7082 F49F" /* 9™ðÂÄ..ÆQfJp‚ôŸ */
- $"E576 B2B1 5918 E3EE 9B97 1686 6499 A572" /* åv²±Y.ãî›—.†d™¥r */
- $"B1F6 2F39 A798 6292 DE22 007B 60AD 1D94" /* ±ö/9§˜b’Þ".{`­.” */
- $"31BA 068D F15A 06DB 2654 6B52 F692 3C3A" /* 1º.ñZ.Û&TkRö’<: */
- $"0DA8 A74B 30F6 3852 76F0 A897 9086 FBD5" /* .¨§K0ö8Rv𨗆ûÕ */
- $"1C78 047E 7BF2 08EE 7B45 85C5 6ED5 AA43" /* .x.~{ò.î{E…ÅnÕªC */
- $"F423 8A4E 4111 C68E 172E DD87 AF9E BF19" /* ô#ŠNA.ÆŽ..݇¯ž¿. */
- $"D4D2 020C 6FD5 EE3F F0E8 289E 4E6C 0871" /* ÔÒ..oÕî?ðè(žNl.q */
- $"1187 D3F1 E458 94F5 4519 BF3C D239 D86C" /* .‡ÓñäX”õE.¿<Ò9Øl */
- $"17F1 8916 4206 2346 ACD8 1F08 9A44 0AB3" /* .ñ‰.B.#F¬Ø..šD³ */
- $"CEE6 441D 78D5 2909 4CEA 46F7 D6C6 D21A" /* ÎæD.xÕ)ÆLêF÷ÖÆÒ. */
- $"6D41 BB64 ADFF 6252 5A80 3556 C459 2845" /* mA»d­ÿbRZ€5VÄY(E */
- $"C05D C2C5 1F69 4087 0380 C0FF 61AA D5D1" /* À]ÂÅ.i@‡.€ÀÿaªÕÑ */
- $"E5C2 5FC0 CEF4 2D59 B4A3 6BA8 343E 184B" /* åÂ_ÀÎô-Y´£k¨4>.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(!Ý<j4 */
- $"926C 8F3C 1548 D31A 021F 2604 252D A929" /* ’l<.HÓ...&.%-©) */
- $"172B 8212 174F 2D2D CC7D DA15 F9A9 AD7E" /* .+‚..O--Ì}Ú.ù©­~ */
- $"59D3 7885 9215 C77B 6583 4D8F 3308 149C" /* YÓx…’.Ç{eƒM3..œ */
- $"270A 4508 21C9 A05B CDE9 BEF1 C18A 4B74" /* 'ÂE.!É [Íé¾ñÁŠKt */
- $"F07B 0DFE 007B E5AF D9AA CED7 8661 34C7" /* ð{.þ.{å¯ÙªÎ׆a4Ç */
- $"AA26 21AC D09C 6BAA EABB A7C4 486E 40A5" /* ª&!¬Ðœkªê»§ÄHn@¥ */
- $"C791 976A 1EC3 534F 84EC E6E9 7363 FF08" /* Ç‘—j.ÃSO„ìæéscÿ. */
- $"5B20 0E29 000C 5E8F 3339 6210 65CC FD34" /* [ .)..^39b.eÌý4 */
- $"76EB F1B2 76C6 5FDC C1A8 B0F5 53EE 103C" /* vëñ²vÆ_ÜÁ¨°õSî.< */
- $"50B0 650F 8459 9777 E890 E28A BB84 56B9" /* P°e.„Y—wè⊻„V¹ */
- $"0522 90F9 5B81 C982 979E E507 A4BC 26C3" /* ."ù[É‚—žå.¤¼&à */
- $"E356 F2A9 C0D1 BFF3 F882 EC0E 6AA9 CA0D" /* ãVò©ÀÑ¿óø‚ì.j©Ê. */
- $"4419 16FB 9BEF 947E F848 19BF 5CB6 EA4E" /* D..û›ï”~øH.¿\¶êN */
- $"C290 F254 020B 51DB 8094 4D05 E9A5 21A0" /* ÂòT..QÛ€”M.é¥!  */
- $"D3E6 84EA 5A3E 4380 650C B24F 31DA 209F" /* Óæ„êZ>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Ò<YV=롦.X */
- $"CD98 F32B 92E6 D960 C0E1 E542 294D 6FD3" /* ͘ó+’æÙ`ÀáåB)MoÓ */
- $"4234 37C9 3537 275F AC1E 936D 534A BF02" /* B47É57'_¬.“mSJ¿. */
- $"B742 8CAB BE88 E4FF 23DC D9EB 1FC4 9CF0" /* ·BŒ«¾ˆäÿ#ÜÙë.Äœð */
- $"C5D1 3F1D 5995 AD68 12E9 71B3 2100 AFB7" /* ÅÑ?.Y•­h.éq³!.¯· */
- $"CBF7 9ADB D5FF 48EE B1A2 AE4D E021 7C07" /* Ë÷šÛÕÿHî±¢®Mà!|. */
- $"5AD5 E94C A965 DFE8 B32A 23AB DE05 4FB1" /* ZÕéL©eßè³*#«Þ.O± */
- $"FDB7 ECC5 3611 73D9 B03C 399A D5F6 663D" /* ý·ìÅ6.sÙ°<9šÕöf= */
- $"0E78 0BEE 67D9 2F9D 0072 E938 509C 9779" /* .x.îgÙ/.ré8Pœ—y */
- $"6C64 03A1 B8C9 C1C0 2256 29EA 112C FB1C" /* ld.¡¸ÉÁÀ"V)ê.,û. */
- $"766C DF51 83B1 388F 902E EE03 337E 689A" /* vlßQƒ±8.î.3~hš */
- $"CA5A A9F0 09AF 3422 4115 D489 3FBD 22C1" /* ÊZ©ðƯ4"A.Ô‰?½"Á */
- $"4A4F 642A 0AC8 D01C 2950 18CA D441 780A" /* JOd*ÂÈÐ.)P.ÊÔAx */
- $"C929 A7FF 0AFA 956A A581 B590 9B7A 7D74" /* É)§ÿÂú•j¥µ›z}t */
- $"2084 3DC1 5D81 B12B DF9C 333D EFAD 0ADD" /* „=Á]±+ßœ3=ï­ÂÝ */
- $"3445 4F8C 132E F02F C2E7 E13F BE12 2F84" /* 4EOŒ..ð/Âçá?¾./„ */
- $"7FC3 D55F 876A BE1D 07F2 688D 774C FC3E" /* .ÃÕ_‡j¾..òhwLü> */
- $"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#[ßÈ<T¥ */
- $"6B6B D343 F20E AD4C B45C 2BF4 7C65 87A1" /* kkÓCò.­L´\+ô|e‡¡ */
- $"E2EA E2B7 FF17 F9A1 5606 D5A7 C113 F062" /* âêâ·ÿ.ù¡V.Õ§Á.ðb */
- $"D50E E647 922C 8746 7CBA 99C8 4400 979D" /* Õ.æG’,‡F|º™ÈD.— */
- $"3D09 19E7 3A84 E245 ED1F 1C14 3967 45CE" /* =Æ.ç:„âEí...9gEÎ */
- $"2B06 C383 F2A6 2CEE 02E6 A2A7 1821 0F3F" /* +.Ãò¦,î.梧.!.? */
- $"4057 F9E9 B830 94C7 65AA C396 6F97 2721" /* @Wùé¸0”ÇeªÃ–o—'! */
- $"F1AC 6AF7 6C6C 3F02 D2F1 343D 8B42 0F6F" /* ñ¬j÷ll?.Òñ4=‹B.o */
- $"E2D4 A7D8 7158 F033 C573 AD72 01B7 1CC7" /* âÔ§ØqXð3Ås­r.·.Ç */
- $"4CA6 78C2 BABD BB30 5E03 BDEE DF19 8240" /* L¦xº½»0^.½îß.‚@ */
- $"9521 A43A B142 2F42 3590 AD8C B9FD A409" /* •!¤:±B/B5­Œ¹ý¤Æ */
- $"9D77 38E7 B8F8 3BCD 4478 61C3 5768 0324" /* w8ç¸ø;ÍDxaÃWh.$ */
- $"4E55 4240 1E87 1F93 D0BA 6929 C235 7E76" /* NUB@.‡.“кi)Â5~v */
- $"F6E8 AA1B AF13 15FD EB95 2609 BE7D BFE8" /* öèª.¯..ýë•&ƾ}¿è */
- $"3E51 8F2E 4780 4EE6 891E F83D FF7D D1C3" /* >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" /* <NP}úly„úÈlBh‚x¬ */
- $"E40D B7A2 4E43 998B 1C29 D7C6 B7BA 58C9" /* ä.·¢NC™‹.)×Æ·ºXÉ */
- $"3503 114B 86B8 CB5D B605 832D 98FE 0257" /* 5..K†¸Ë]¶.ƒ-˜þ.W */
- $"FB50 8CA0 43D4 71BE E330 1584 5983 668F" /* ûPŒ CÔq¾ã0.„Yƒf */
- $"735C 2448 3B30 82E4 1932 5BF8 129F FE38" /* s\$H;0‚ä.2[ø.Ÿþ8 */
- $"749D 01ED DAFC 95B9 375D BBCB 60D9 FC58" /* t.íÚü•¹7]»Ë`ÙüX */
- $"0796 AEFC 2337 F89E 01F5 48BD 0BAF A61F" /* .–®ü#7øž.õH½.¯¦. */
- $"3EC4 C092 DC6A 584C AAAF 1A9F A20F CEA4" /* >ÄÀ’Ü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" /* <Z.ö!<ž-’$p±ê›}6 */
- $"E7EA 0D03 CB32 7413 AB26 CB30 1B56 CBDE" /* çê..Ë2t.«&Ë0.VËÞ */
- $"3C31 361D 24E2 F441 4D78 7825 1DA0 0C14" /* <16.$âôAMxx%. .. */
- $"5C84 B112 6FC1 77DB 42CA 7791 960B 9F09" /* \„±.oÁwÛBÊw‘–.ŸÆ */
- $"980A 5629 54C0 EC82 889A B0E3 38F4 E734" /* ˜ÂV)TÀ삈š°ã8ôç4 */
- $"FA91 D5CD 2C8F 43CD 5629 3DAD 81DA 5E0A" /* ú‘ÕÍ,CÍV)=­Ú^Â */
- $"C008 712F EAD3 2486 4CD2 C7BA 0FA9 BBD3" /* À.q/êÓ$†LÒǺ.©»Ó */
- $"6AC2 A912 7736 5A33 CC96 9EDC 9C5A 3084" /* j©.w6Z3Ì–žÜœZ0„ */
- $"C826 A3FB 0661 ED4B 9689 A921 22AB 2399" /* È&£û.aíK–‰©!"«#™ */
- $"6F2A 4A78 A5F8 A059 BE4B 7DFF 5D41 1A31" /* o*Jx¥ø Y¾K}ÿ]A.1 */
- $"E688 045C BD1E D1DB 7C5B 6B89 5C22 3CAF" /* æˆ.\½.ÑÛ|[k‰\"<¯ */
- $"F133 FF14 13A2 9A3F 6E42 54EB 5082 9F25" /* ñ3ÿ..¢š?nBTëP‚Ÿ% */
- $"7C07 6BA6 25EA A890 3560 E915 B058 CB68" /* |.k¦%ê¨5`é.°XËh */
- $"3601 4B07 ACE7 EC8A 2897 F908 D405 455E" /* 6.K.¬çìŠ(—ù.Ô.E^ */
- $"5EDD 427E 791A EA3D 6ACE 3BC0 0D43 731A" /* ^ÝB~y.ê=jÎ;À.Cs. */
- $"C9C6 8C03 BD83 6F85 EF75 7246 2F8E 1CFB" /* ÉÆŒ.½ƒo…ïurF/Ž.û */
- $"8DC9 2726 593F 1D87 A822 399F 9770 324C" /* É'&Y?.‡¨"9Ÿ—p2L */
- $"6ABF 38B9 E89E B2F5 D575 E7DB C449 63CF" /* j¿8¹èž²õÕuçÛÄIcÏ */
- $"EBE1 07BB 80A4 C099 6A15 9A47 96F3 8C8D" /* ëá.»€¤À™j.šG–óŒ */
- $"49E1 1F78 2119 9460 CA7A F257 EDA1 104B" /* Iá.x!.”`ÊzòWí¡.K */
- $"5C68 0E57 188C 62B0 FBE3 CF4F 5251 6525" /* \h.W.Œb°ûãÏORQe% */
- $"CB59 5E3D C6F4 6B04 5B2D 1ED2 3BE1 02BB" /* ËY^=Æôk.[-.Ò;á.» */
- $"7207 12AA BFEC 50F4 83FE 2797 121B 3D14" /* r..ª¿ìPôƒþ'—..=. */
- $"DA23 BE41 D647 E5CA DD2D CD48 8C4D A094" /* Ú#¾AÖGåÊÝ-ÍHŒM ” */
- $"B1A9 4ED5 4735 8818 C4F1 597D 3211 5D12" /* ±©NÕG5ˆ.ÄñY}2.]. */
- $"D96B 5A38 AB9A 7E89 C503 13B0 8354 C887" /* ÙkZ8«š~‰Å..°ƒTȇ */
- $"F766 96F0 EDAE C6B6 17B4 E9A4 9230 C2F5" /* ÷f–ðí®Æ¶.´é¤’0Âõ */
- $"029D 3D72 A1CF 5BB9 E975 DBFF 06DC F5B2" /* .=r¡Ï[¹éuÛÿ.Üõ² */
- $"686F 667B AD3E 1D8D 5BE4 0D6A 2CD7 DE66" /* hof{­>.[ä.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Ø<y. */
- $"4243 1F04 D29C 94E6 FA35 A9C7 9C1C 0762" /* BC..Òœ”æú5©Çœ..b */
- $"AA92 7DF8 65D6 B16D 30C6 E3F2 22D5 8971" /* ª’}øeÖ±m0Æãò"Õ‰q */
- $"F890 651C 37E3 1F4A 29A4 6637 D7AE 7CB9" /* øe.7ã.J)¤f7×®|¹ */
- $"14C7 D06B 2595 45F8 89DC DBAF B284 6ADA" /* .ÇÐk%•Eø‰ÜÛ¯²„jÚ */
- $"E4DB 9D25 F76C CDA3 EB7E 1B5A 4264 8145" /* äÛ%÷lÍ£ë~.ZBdE */
- $"547E 6F18 076D A675 BA1A 1AB1 0BF1 AEB6" /* T~o..m¦uº..±.ñ®¶ */
- $"C8C2 AAE0 489F 4E11 7F77 336A 41A4 C050" /* ȪàHŸN..w3jA¤ÀP */
- $"D19E AE10 BD35 C5EC DA71 BDEF A017 C32D" /* Ñž®.½5ÅìÚq½ï .Ã- */
- $"CB15 0C8E 0B75 C179 FB84 FDF2 DD5D C21F" /* Ë..Ž.uÁyû„ýòÝ]Â. */
- $"56A5 397D C437 A82F 65F9 2E68 A785 0AF3" /* V¥9}Ä7¨/eù.h§…Âó */
- $"B9F0 7781 E6B8 ACFA 09DC B57D 6317 B29B" /* ¹ðw測úÆܵ}c.²› */
- $"C754 09FC 3635 9854 0DA1 A3BE D3EE CF40" /* ÇTÆü65˜T.¡£¾ÓîÏ@ */
- $"4BE4 A4D9 07C4 D65E 3887 C8A7 CD3A 83F5" /* Kä¤Ù.ÄÖ^8‡È§Í:ƒõ */
- $"DFA8 10A6 BB6D B811 852D 3877 8782 1E66" /* ߨ.¦»m¸.…-8w‡‚.f */
- $"AF11 43B8 CA3A 6146 3657 AFE0 B314 36CB" /* ¯.C¸Ê:aF6W¯à³.6Ë */
- $"8E1C 272D ED4B 634C AABA 0207 6A1A E2E3" /* Ž.'-íKcLªº..j.âã */
- $"C500 C0A4 894A BAD8 C9A1 0AE7 AC8D 750C" /* Å.À¤‰JºØÉ¡Âç¬u. */
- $"7D84 FBCC DB2E EE05 B04A 002B B383 46DE" /* }„ûÌÛ.î.°J.+³ƒFÞ */
- $"C18D 5BBD B442 9E88 BBB2 89CC 0EBA CF5A" /* Á[½´Bžˆ»²‰Ì.ºÏZ */
- $"5616 DDAB ED7B 4C2E 1C82 0C9D 4820 C0E8" /* V.Ý«í{L..‚.H Àè */
- $"1C4E 39A5 9041 9E33 A20A A73D 821A 238A" /* .N9¥Až3¢Â§=‚.#Š */
- $"3B24 14B9 D9A6 95AA F5B0 13C1 8CFD 790F" /* ;$.¹Ù¦•ªõ°.ÁŒýy. */
- $"33CB 82D3 FE12 0F27 F309 7453 05E0 DF8F" /* 3Ë‚Óþ..'óÆtS.àß */
- $"AAE8 F77A 31BA 0118 43E1 7AE7 69DC 5D12" /* ªè÷z1º..CázçiÜ]. */
- $"BD53 9858 EA6D D8D3 174C FE4C F487 3CCF" /* ½S˜XêmØÓ.LþLô‡<Ï */
- $"9098 7872 8FC3 EBAC 4C76 F503 6915 A1B3" /* ˜xrÃë¬Lvõ.i.¡³ */
- $"5FF8 81CD E13D D511 AAB8 5C7B 1376 C87F" /* _øÍá=Õ.ª¸\{.vÈ. */
- $"2DA1 557D 2053 3341 CC15 418C 0911 5378" /* -¡U} S3AÌ.AŒÆ.Sx */
- $"5FFE 324E 1412 2046 B049 3A77 69B7 417F" /* _þ2N.. F°I:wi·A. */
- $"AC17 B8B0 7FDA 6D19 59F0 DD68 8A88 E55A" /* ¬.¸°.Úm.YðÝhŠˆåZ */
- $"8098 0888 3714 713A 1D17 BB8D F01C 6005" /* €˜.ˆ7.q:..»ð.`. */
- $"8F2E 3D20 2753 1BB4 9BE3 DFD1 709F 99EB" /* .= 'S.´›ãßÑpŸ™ë */
- $"DFCC C1B1 717B 7FA3 52BB C12D E6B7 24D2" /* ßÌÁ±q{.£R»Á-æ·$Ò */
- $"F448 F23D C196 1BAA D61B F422 41B4 D620" /* ôHò=Á–.ªÖ.ô"A´Ö */
- $"466D 45F3 06F6 F631 3E88 5CDE F7F6 BC6F" /* FmEó.öö1>ˆ\Þ÷ö¼o */
- $"789C D06C 02CC 2E71 B6B0 03D2 297B BFCD" /* xœÐl.Ì.q¶°.Ò){¿Í */
- $"8C21 67AD CEE0 DB53 5749 A676 690C 11E3" /* Œ!g­ÎàÛSWI¦vi..ã */
- $"5AD2 905C 78E1 4AB0 E60E C920 4ECC 7CB6" /* ZÒ\xáJ°æ.É NÌ|¶ */
- $"A76F 70F1 BCFD AA1D F4D2 E43F E203 D0C8" /* §opñ¼ýª.ôÒä?â.ÐÈ */
- $"E11E 61AF F1A7 5762 600E 65BB D870 818A" /* á.a¯ñ§Wb`.e»ØpŠ */
- $"CDF0 DFC4 8C9C 1926 678B 2732 C52F 98FD" /* ÍðßÄŒœ.&g‹'2Å/˜ý */
- $"33B3 EE23 138D 5E5F C9C3 FEF9 6111 E3E6" /* 3³î#.^_ÉÃþùa.ãæ */
- $"AF79 A8A5 2949 D590 B463 EDF3 F72A 18FD" /* ¯y¨¥)IÕ´cíó÷*.ý */
- $"BB23 233B 7924 2DD1 A335 B949 467E A30C" /* »##;y$-Ñ£5¹IF~£. */
- $"3185 5FE5 DB63 6748 B22D AB3F 8A8C 0926" /* 1…_åÛcgH²-«?ŠŒÆ& */
- $"5450 E925 A69D 1185 7300 D694 EA1F 4DF2" /* TPé%¦.…s.Ö”ê.Mò */
- $"2413 F4ED 6D64 5B74 BBD5 0E65 26EF A8CD" /* $.ôímd[t»Õ.e&ï¨Í */
- $"5806 0C60 404F 90A0 06B6 AFD1 785F 9646" /* X..`@O .¶¯Ñx_–F */
- $"B1AD 2A45 5777 33FA 49DB 8D3D AC2A BAEA" /* ±­*EWw3úIÛ=¬*ºê */
- $"4527 B4DF 481A 6AB9 4485 05E6 7040 1B93" /* E'´ßH.j¹D….æp@.“ */
- $"D6E0 3BBF A334 E13B 68EC 934B C393 B621" /* Öà;¿£4á;hì“KÓ¶! */
- $"CFC8 69BE A6AC 672C 235E F1FC 4480 DE83" /* ÏÈi¾¦¬g,#^ñüD€Þƒ */
- $"32D7 D269 F78C F22D 5B9F F4DF DDDD D6DE" /* 2×Òi÷Œò-[ŸôßÝÝÖÞ */
- $"4C65 4D61 C1F0 26BF E4C3 D7C9 A034 163D" /* LeMaÁð&¿äÃ×É 4.= */
- $"FBAE 0167 4DF0 EBEF AA8B B742 2832 1F67" /* û®.gMðë懲·B(2.g */
- $"8CC0 80D0 4A6B 9843 DE59 2F7B F944 9DA4" /* ŒÀ€ÐJk˜CÞY/{ùD¤ */
- $"343D 9AD9 9E0B C7B5 0B7D 2CA1 F638 8A3B" /* 4=šÙž.ǵ.},¡ö8Š; */
- $"BB38 A39B 025A 9BA9 34AC ACF0 063D 5483" /* »8£›.Z›©4¬¬ð.=Tƒ */
- $"FE57 22E4 EB2C C699 AEF3 8EFB 1C8C A23A" /* þW"äë,Æ™®óŽû.Œ¢: */
- $"2C15 D2EF AC9A 91C9 993A 4CB0 2DDC 0A32" /* ,.Ò﬚‘É™:L°-ÜÂ2 */
- $"14B9 50D2 8579 8F9D 5AF2 88DB E726 1B39" /* .¹PÒ…yZòˆÛç&.9 */
- $"3E06 69F9 F300 09E4 D3E8 BB4C A704 10E0" /* >.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<q.‰æC/¼ */
- $"5A24 FEA6 EC06 1F23 79D9 3886 F6F4 7FB9" /* Z$þ¦ì..#yÙ8†öô.¹ */
- $"F892 1A20 DC66 1EB1 D6FD 1C48 52DE 4267" /* ø’. Üf.±Öý.HRÞBg */
- $"77E2 620B 2DC0 6828 575C F7CA 74BC FE73" /* wâb.-Àh(W\÷Êt¼þs */
- $"FABD C9ED 4E8F 71A7 8CCD 8D80 8BD2 8AA3" /* ú½ÉíNq§ŒÍ€‹ÒŠ£ */
- $"45C0 EF2A 387D 038E 8B00 BA81 12CD F93F" /* EÀï*8}.Ž‹.º.Íù? */
- $"E9BE 9134 2928 439B 69CF 3DB1 5DFC 3DAF" /* 龑4)(C›iÏ=±]ü=¯ */
- $"86CA 34A7 4574 C91C 3F99 3EA9 B6E9 F3AF" /* †Ê4§EtÉ.?™>©¶éó¯ */
- $"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ºåò<v */
- $"3898 11F6 D710 7470 00FC 0742 CA59 9E40" /* 8˜.ö×.tp.ü.BÊYž@ */
- $"757C 5952 61FF 4D28 0991 1673 9B01 06B9" /* u|YRaÿM(Æ‘.s›..¹ */
- $"3999 E9B5 06CD B1DA CB08 FF19 DE70 8D10" /* 9™éµ.ͱÚË.ÿ.Þp. */
- $"E725 848E D27D 2B0B 54F0 B60B 26AB CD92" /* ç%„ŽÒ}+.Tð¶.&«Í’ */
- $"E4F8 C007 FF68 6933 E2FF 31D5 435B FF7F" /* äøÀ.ÿhi3âÿ1ÕC[ÿ. */
- $"9A8E 9845 007F FEDA 4C63 9892 513A ABD9" /* šŽ˜E..þÚLc˜’Q:«Ù */
- $"A98A C012 5C99 31C0 D48F E334 671D A695" /* ©ŠÀ.\™1ÀÔã4g.¦• */
- $"C7EF 3AAA FF37 D381 4F42 983F FC4D AE82" /* Çï:ªÿ7ÓOB˜?üM®‚ */
- $"FF43 6555 9E7F 10A3 7B95 415D 41FF 20B3" /* ÿCeUž..£{•A]Aÿ ³ */
- $"8CB1 7302 0000 0000 584E AB14 398C A865" /* Œ±s.....XN«.9Œ¨e */
- $"5A7B 1650 52EB 8BCE 3E92 461D 071B 8F21" /* Z{.PRë‹Î>’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”Õ.-_Ìâ<H.Ak */
- $"1540 59C2 1D35 213D A11C EE70 8D15 5394" /* .@YÂ.5!=¡.îp.S” */
- $"53C6 29CF 4E19 F4CF 5B94 7FFF 7F8B 2813" /* SÆ)ÏN.ôÏ[”.ÿ.‹(. */
- $"3E95 DE81 30D0 3188 2A75 4F35 CB11 DDD5" /* >•Þ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}<u */
- $"E4C6 1003 FECF 3E7E 6252 08C0 4A83 50D7" /* äÆ..þÏ>~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…'ü<jS..MºÑ€. */
- $"8995 3DF4 FA80 FE12 8F5F 40E5 09E6 E7E8" /* ‰•=ôú€þ._@åÆæçè */
- $"C5E7 1309 3E97 E278 0228 1693 F565 F83E" /* Åç.Æ>—â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ŸÌ<x.¾!Ä.°.0ôOÇ */
- $"B76C B9FA 26F6 38C8 116D B8F0 0B9D 818F" /* ·l¹ú&ö8È.m¸ð. */
- $"56F9 F934 AE60 71FD E583 8D07 A4A4 DE41" /* Vùù4®`qýåƒ.¤¤ÞA */
- $"FB75 B83F 384B 11C9 CC5E CD9D FF4C 05A8" /* ûu¸?8K.ÉÌ^ÍÿL.¨ */
- $"D59F 1E59 4797 FF7F DFD8 391C E8BA 72E2" /* ÕŸ.YG—ÿ.ßØ9.èºrâ */
- $"C1F8 9F5C 5317 01E3 EC2D 4120 97D2 BAEC" /* ÁøŸ\S..ãì-A —Òºì */
- $"DBB0 FF30 FC56 2E43 3716 1B7B A8CD 19AE" /* Û°ÿ0üV.C7..{¨Í.® */
- $"7FFF 7FF4 468B FF45 749B 3C67 EE31 1651" /* .ÿ.ôF‹ÿEt›<gî1.Q */
- $"17B2 B21C A982 A185 E8A3 03BC 2DCB C09A" /* .²².©‚¡…è£.¼-ËÀš */
- $"8522 64CF BB21 6955 068D F002 871B 05F3" /* …"dÏ»!iU.ð.‡..ó */
- $"9F44 7384 D624 E1FA A24D 67C7 BC5E F7BF" /* ŸDs„Ö$áú¢MgǼ^÷¿ */
- $"59BC DC3C BE4B 1456 0C6F F2C1 0841 038D" /* Y¼Ü<¾K.V.oòÁ.A. */
- $"723C 14FA 4F19 0AD4 1F88 0A1B FF14 3D93" /* r<.úO.ÂÔ.ˆÂ.ÿ.=“ */
- $"27AA 6E0B 4AA7 6A11 E06D 5D82 C930 1B53" /* 'ªn.J§j.àm]‚É0.S */
- $"0227 A9AA 253A 41E6 31D5 8B87 DC08 819B" /* .'©ª%:Aæ1Õ‹‡Ü.› */
- $"E5EE EA0F 6AA0 0000 0006 9BC0 594E 0004" /* åîê.j ....›ÀYN.. */
- $"D326 312C 0364 8835 C4D7 5040 3724 3CD9" /* Ó&1,.dˆ5Ä×P@7$<Ù */
- $"B889 2E14 12BC F0AD 9D2E 326B 1654 5952" /* ¸‰...¼ð­.2k.TYR */
- $"2B5F 1A9D 5403 C9C5 A731 1B3C 3443 783C" /* +_.T.Éŧ1.<4Cx< */
- $"A459 248B BBC7 DEDC 74AD E2A1 D647 5047" /* ¤Y$‹»ÇÞÜt­â¡ÖGPG */
- $"AD17 15AF FF5C 88C4 025F 4361 3F83 BFC9" /* ­..¯ÿ\ˆÄ._Ca?ƒ¿É */
- $"FF6D 7E58 128D 33D7 7076 E73A 9CF6 76D8" /* ÿm~X.3×pvç:œövØ */
- $"A0FF 2C44 2029 0B59 B427 3BDC 915B 87CF" /*  ÿ,D ).Y´';Ü‘[‡Ï */
- $"75D6 EC52 7793 6DFA A4E2 9E2D 7D25 FBC2" /* uÖìRw“mú¤âž-}%û */
- $"2028 DE78 D868 BEC5 E9D2 BFFA 8B12 9265" /* (ÞxØh¾ÅéÒ¿ú‹.’e */
- $"B01D 92F7 F71E 8782 F1CD 4E98 B46E 6DA5" /* °.’÷÷.‡‚ñÍN˜´nm¥ */
- $"8825 F851 1CE9 9F21 D8E2 86EB BAF4 126F" /* ˆ%øQ.éŸ!Øâ†ëºô.o */
- $"9CB3 0144 009A 6F38 0919 9C1F D0CE D23C" /* œ³.D.šo8Æ.œ.ÐÎÒ< */
- $"C9DD 9273 D8F6 6733 6E5A 2E7A 635C 8723" /* ÉÝ’sØög3nZ.zc\‡# */
- $"6E04 1283 1A43 02CA 74E4 8000 0309 08DB" /* n..ƒ.C.Êtä€..Æ.Û */
- $"EF05 DC00 D116 0D58 1A69 2055 1BA0 D8DE" /* ï.Ü.Ñ..X.i U. ØÞ */
- $"34B6 EA40 CC06 C673 559A 75F2 9B58 C474" /* 4¶ê@Ì.ÆsUšuò›XÄt */
- $"DD4C AB9A 9E6D 653B FCDF 4F33 3707 105E" /* ÝL«šžme;üßO37..^ */
- $"DBCE D327 45FB C663 E1AF 375B B106 B0B8" /* ÛÎÓ'EûÆcá¯7[±.°¸ */
- $"26EE AE4B 538A CF74 588E 928B 58C7 2D93" /* &î®KSŠÏtXŽ’‹XÇ-“ */
- $"371E BC81 0ED0 9F2C 1A18 8DD7 7E65 4FBF" /* 7.¼.П,..×~eO¿ */
- $"511B 63A1 8F26 2A08 A4D3 2BF3 96E6 FC32" /* Q.c¡&*.¤Ó+ó–æü2 */
- $"D457 8287 D843 6D19 2458 0EA4 AC8F 0512" /* ÔW‚‡ØCm.$X.¤¬.. */
- $"831D D4CA 9BFF 5A6E 951A 5897 451F 750C" /* ƒ.ÔÊ›ÿZn•.X—E.u. */
- $"CAD4 89C1 94A7 4BFA 4030 4828 1E37 C049" /* ÊÔ‰Á”§Kú@0H(.7ÀI */
- $"34C4 54B1 1054 2645 14E5 6DFF 7FFF 7328" /* 4ÄT±.T&E.åmÿ.ÿs( */
- $"F1A4 AAA2 4FD2 507D 86D5 FF7F FA43 F49A" /* ñ¤ª¢OÒP}†Õÿ.úCôš */
- $"5049 0839 5964 8186 EE46 1867 158E 9E2C" /* PI.9Yd†îF.g.Žž, */
- $"D618 8FF5 D416 6838 6187 9CF7 21BC DE1F" /* Ö.õÔ.h8a‡œ÷!¼Þ. */
- $"F84F F4E9 ACDB ECD8 6CA6 6725 85B4 4049" /* øOôé¬ÛìØl¦g%…´@I */
- $"AA9E 4935 7E1F 54E7 B0D5 A026 B073 899B" /* ªžI5~.Tç°Õ &°s‰› */
- $"51C4 8C2E 483C B3BF 38A0 4BCF 2042 EE90" /* QÄŒ.H<³¿8 KÏ Bî */
- $"4E1B 8C94 420F 99A7 9EA1 7D96 12A3 8C8D" /* N.Œ”B.™§ž¡}–.£Œ */
- $"819B C97D C518 51CB 0D8A A7A1 7159 EB10" /* ›É}Å.QË.Š§¡qYë. */
- $"4A27 5CD0 0ED7 2688 5F74 CE10 DF6A 5B4F" /* J'\Ð.×&ˆ_tÎ.ßj[O */
- $"E370 A282 105D 2F43 6E74 6B07 05EC 880E" /* ãp¢‚.]/Cntk..ìˆ. */
- $"15AF 5118 9D27 327D 2552 9996 020B 2D9A" /* .¯Q.'2}%R™–..-š */
- $"9AFC 6849 6068 6491 42FA 889C 7949 285A" /* šühI`hd‘BúˆœyI(Z */
- $"7FFE 5B6D DAF2 7FFF 772D E08E B9E4 65A3" /* .þ[mÚò.ÿw-àŽ¹äe£ */
- $"B49A DDC8 FF52 8DA3 B318 F84F F4E9 99ED" /* ´šÝÈÿR£³.øOôé™í */
- $"48C4 CA7E BE77 2634 6A22 1FAD 4752 8D9B" /* HÄÊ~¾w&4j".­GR› */
- $"B935 0449 1A27 9EAB B000 C242 3BB7 72B7" /* ¹5.I.'ž«°.ÂB;·r· */
- $"3ACC B41F 0AC9 CFFD 58DA D99F 498A 21CF" /* :Ì´.ÂÉÏýXÚÙŸIŠ!Ï */
- $"50B8 A155 9BB3 B3DA 13FE 251F 14F2 3431" /* P¸¡U›³³Ú.þ%..ò41 */
- $"6DBF 2774 3EFC 55BB 9CB3 40A4 CA00 A112" /* m¿'t>ü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.Ž½.<Iºæ¾vfì¾ */
- $"59D2 4ACC B4CE 3FAD 2173 25CB E42F 37B8" /* YÒJÌ´Î?­!s%Ëä/7¸ */
- $"F3CC 79EF 695C 10F4 0381 2D14 1B0F D632" /* óÌyïi\.ô.-...Ö2 */
- $"8A1E 9C29 F617 6A4B 204E A147 C08D 1AA5" /* Š.œ)ö.jK N¡GÀ.¥ */
- $"7418 DED9 DE83 A555 A75B AB00 C650 247F" /* t.ÞÙÞƒ¥U§[«.ÆP$. */
- $"0222 5558 731B 54DB 14F6 3A0E 1FAD A8D8" /* ."UXs.TÛ.ö:..­¨Ø */
- $"F327 DC8F AF3F 630B 3BA9 7933 8D30 458C" /* ó'ܯ?c.;©y30EŒ */
- $"4C2F 6E3A 0A64 DDC5 926A 71CB 2347 EE4D" /* L/n:ÂdÝÅ’jqË#GîM */
- $"647B D94D BE24 7F62 6A14 EBE2 696F 8735" /* d{ÙM¾$.bj.ëâio‡5 */
- $"A96F E268 6912 A4A9 3254 0293 CB09 0DC0" /* ©oâhi.¤©2T.“ËÆ.À */
- $"206B EB7B F6B9 0643 5E74 4F2C 555A AE2D" /* kë{ö¹.C^tO,UZ®- */
- $"B16B 7FA3 8ADE 7EAC 764F 9A20 BC94 05F1" /* ±k.£ŠÞ~¬vOš ¼”.ñ */
- $"9AAC 0118 36B8 6B30 D696 6E84 EEC2 5342" /* š¬..6¸k0Ö–n„îÂSB */
- $"03A8 EFD3 CB37 D50D F676 35DB AD6C 280A" /* .¨ïÓË7Õ.öv5Û­l( */
- $"DB04 D23A 0922 A2E3 5F45 EBD1 5C49 F6AA" /* Û.Ò:Æ"¢ã_EëÑ\Iöª */
- $"4579 1BA2 D94E D3F0 7A7E C24E 79B0 5D24" /* Ey.¢ÙNÓðz~ÂNy°]$ */
- $"B98E 23E7 4C4F 54D9 A3CE 389F 63F6 2426" /* ¹Ž#çLOTÙ£Î8Ÿcö$& */
- $"7087 D921 86D6 709F 768D 5684 BB90 47B7" /* p‡Ù!†ÖpŸvV„»G· */
- $"AC32 98D7 E247 3668 E954 8105 EE44 AF58" /* ¬2˜×âG6héT.îD¯X */
- $"13FF 573A 9F89 06C9 FB77 277E 08C9 09E9" /* .ÿW:Ÿ‰.Éûw'~.ÉÆé */
- $"B180 F96E C5AB 1E5D 3029 E229 CE1B B2AD" /* ±€ùnÅ«.]0)â)Î.²­ */
- $"BA11 DD98 0D9C 4C45 66DD 8553 3BA2 6F5B" /* º.ݘ.œLEfÝ…S;¢o[ */
- $"699B CEF3 48A7 6C31 63E6 E189 9C68 B9EC" /* i›ÎóH§l1cæቜh¹ì */
- $"A663 411F EBCB 41AB 8F7E 7EAD 87DA 5BF3" /* ¦cA.ëËA«~~­‡Ú[ó */
- $"AAC9 975B AC1F 712B F7ED DEBD 04C3 B85A" /* ªÉ—[¬.q+÷íÞ½.øZ */
- $"470D D74A B91D 0180 7BAB 4088 5671 6268" /* G.×J¹..€{«@ˆVqbh */
- $"5B4A 54FE C179 1600 7677 830B 0E81 EEB4" /* [JTþÁy..vwƒ..î´ */
- $"056E 79FF 8251 AB20 A6BC 15A5 E71F 7D4A" /* .nyÿ‚Q« ¦¼.¥ç.}J */
- $"2F6E 951A DE36 7A81 C704 9A4A F239 E1DC" /* /n•.Þ6zÇ.šJò9áÜ */
- $"FF6C DE49 B4C8 F6C1 F764 8D19 4686 DFC2" /* ÿlÞI´ÈöÁ÷d.F†ß */
- $"5C72 4A52 9784 F974 DCA4 A177 21DA 9869" /* \rJR—„ùtܤ¡w!Ú˜i */
- $"80A4 5BC6 FD54 A56B C7B1 4705 3A32 C896" /* €¤[ÆýT¥kDZG.:2È– */
- $"4539 25E5 90CC F228 B7F9 ADA5 CC2C 59CA" /* E9%åÌò(·ù­¥Ì,YÊ */
- $"D14D 4B86 9CC0 D367 7EF5 DB6D C2E1 06DB" /* ÑMK†œÀÓg~õÛmÂá.Û */
- $"58BC 0D97 DCFE 3CB1 EA45 C36F 1B60 83C9" /* X¼.—Üþ<±êEÃo.`ƒÉ */
- $"663F B883 83BA A69F 2653 0747 18C7 6D20" /* f?¸ƒƒº¦Ÿ&S.G.Çm */
- $"F2C7 6E01 47DA AB9D 2D83 D5CE 1E9C 779A" /* òÇn.GÚ«-ƒÕÎ.œwš */
- $"5FAE 6015 63DE 317A EFCA 7142 F3F8 A7E1" /* _®`.cÞ1zïÊqBóø§á */
- $"F739 60AB DF24 41BF EB6C AF15 7223 E56C" /* ÷9`«ß$A¿ël¯.r#ål */
- $"8D61 D9D1 C61F 8F8E 8435 6452 C45A 917B" /* aÙÑÆ.Ž„5dRÄZ‘{ */
- $"0856 B8BA 14E2 0A77 ABA0 E605 2E39 63EA" /* .V¸º.âÂw« æ..9cê */
- $"E7F5 4804 6535 7672 575F 37EA 9E69 1A1C" /* çõH.e5vrW_7êži.. */
- $"E380 CB7D C109 2D50 73EF 4119 54BE CBFE" /* ã€Ë}ÁÆ-PsïA.T¾Ëþ */
- $"4552 74A1 3E73 C457 1436 9DFF 3C25 8231" /* ERt¡>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˜å.°ü³."<!¿]î */
- $"0229 A0EE 8B90 5918 5910 F6A6 EEB6 503D" /* .) î‹Y.Y.ö¦î¶P= */
- $"8E76 A3B6 E583 FEFF 5B3D F804 F6EE 956E" /* Žv£¶åƒþÿ[=ø.öî•n */
- $"FEE7 D95F 9D05 AE0B 4926 52B4 23C3 D17A" /* þçÙ_.®.I&R´#ÃÑz */
- $"FC0F CC41 1264 0956 8CA2 6A30 C0D0 275F" /* ü.ÌA.dÆVŒ¢j0ÀÐ'_ */
- $"0CE8 C646 CC49 EF38 CC94 8B6C 1737 9636" /* .èÆFÌIï8Ì”‹l.7–6 */
- $"4EA7 0FE7 217B F3F1 A10D 7E49 242E 6F19" /* N§.ç!{óñ¡.~I$.o. */
- $"A8CF 369A 44DE 6C99 A9D4 24DA 6909 62C3" /* ¨Ï6šDÞl™©Ô$ÚiÆbà */
- $"0C4C D4CD D80E 72E6 FF6B A90E 7080 977B" /* .LÔÍØ.ræÿk©.p€—{ */
- $"4BEB 6A2A 72BB 0574 45FB 1E12 6408 C966" /* Këj*r».tEû..d.Éf */
- $"A632 9AC7 E67D 82C9 3FED 1E27 C1FA C47A" /* ¦2šÇæ}‚É?í.'ÁúÄz */
- $"AFCF 5719 3BCA 3975 BE3A 550B 6DC9 91CC" /* ¯ÏW.;Ê9u¾:U.mÉ‘Ì */
- $"F28E 751C 1B20 E7BB 58FF 0D92 2BF7 DE26" /* òŽu.. ç»Xÿ.’+÷Þ& */
- $"DFE3 B230 78F7 C64E ADF8 7741 F45A E3BC" /* ßã²0x÷ÆN­øwAôZã¼ */
- $"5185 1323 1C74 3288 F720 5DB7 B5C9 1EFD" /* Q….#.t2ˆ÷ ]·µÉ.ý */
- $"C844 7159 7047 A9BA 6CA1 403E CE2E 3522" /* ÈDqYpG©ºl¡@>Î.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<fý$ */
- $"D6C1 DFFC 41CF 26FD 27E3 9482 7299 C4A3" /* ÖÁßüAÏ&ý'㔂r™Ä£ */
- $"A4B0 4F99 5ED7 6507 C196 C060 D7BD 7BA6" /* ¤°O™^×e.Á–À`×½{¦ */
- $"A0A2 C1E7 0ECE 98C4 36F0 B006 0526 5FC4" /*  ¢Áç.ΘÄ6ð°..&_Ä */
- $"CDEF A25D CE59 7B6F 507F C409 957F 43E6" /* Íï¢]ÎY{oP.ÄÆ•.Cæ */
- $"20AB C4BE 33C2 E794 46B7 5341 D8C9 5487" /* «Ä¾3Âç”F·SAØÉT‡ */
- $"3000 A3E6 41BE 7D2A B553 6A8D C345 2E1E" /* 0.£æA¾}*µSjÃE.. */
- $"BF55 F536 52DD 101F D6C9 BB65 B7E4 0CFC" /* ¿Uõ6RÝ..ÖÉ»e·ä.ü */
- $"03D7 F641 F641 7A4F 8EE2 BA7A 352C ED91" /* .×öAöAzOŽâºz5,í‘ */
- $"9057 F893 C46F 62F7 A791 A8DE 8A25 BB17" /* Wø“Äob÷§‘¨ÞŠ%». */
- $"F164 F2ED 43E5 A2E2 17E9 C95D DE1C 45F4" /* ñdòíCå¢â.éÉ]Þ.Eô */
- $"3019 8090 809D D124 EE5C B48E 6C92 2A74" /* 0.€€Ñ$î\´Žl’*t */
- $"ACA0 4F0A 1777 70CF EBEC 112A 9035 16AB" /* ¬ OÂ.wpÏëì.*5.« */
- $"B36D 13D6 9F72 69CD E213 F146 6733 BAA3" /* ³m.ÖŸriÍâ.ñFg3º£ */
- $"0080 0000 0000 0000 0001 0151 0AD3 43F0" /* .€.........QÂÓCð */
- $"14A4 0000 61F0 20D9 9F3A 47FC 60A2 4780" /* .¤..að ÙŸ:Gü`¢G€ */
- $"F2D0 2A57 2C4C D349 5B9A 1BE3 0D39 80AD" /* òÐ*W,LÓI[š.ã.9€­ */
- $"72C4 873D 5028 F09E F0F5 700F B776 4B38" /* rć=P(ðžðõp.·vK8 */
- $"4FC6 7D26 AE5D 219E DDCE 4AA3 9AA9 FE19" /* OÆ}&®]!žÝÎJ£š©þ. */
- $"EC25 FEF0 0626 D259 8ECF 0364 6192 A000" /* ì%þð.&ÒYŽÏ.da’ . */
- $"0000 0000 0000 0000 0184 84B4 4FF0 1848" /* .........„„´Oð.H */
- $"4BC2 3700 0000 0000 0000 00B5 DA5E 3FF1" /* KÂ7........µÚ^?ñ */
- $"C9FC 9186 4A80 0000 0000 0000 0000 0000" /* Éü‘†J€.......... */
- $"0510 0FC3 251B 71C0 D918 64A8 0000 0000" /* ...Ã%.qÀÙ.d¨.... */
- $"0000 0000 0000 07E1 1EE1 F164 E11A 319D" /* .......á.áñdá.1 */
- $"3806 659F 8C35 7012 B17E 6096 52F0 8E96" /* 8.eŸŒ5p.±~`–RðŽ– */
- $"1438 1EBF 363A 49C9 51BD 3517 4ADA 7060" /* .8.¿6:IÉQ½5.JÚp` */
- $"0849 8F8B FCEC FD48 0000 54DF 4C0B E043" /* .I‹üìýH..TßL.àC */
- $"F3B6 1CEB 518A F2B1 5A9C 9500 0000 0000" /* ó¶.ëQŠò±Zœ•..... */
- $"0196 C058 0636 AF4B 041F 37EC DE6F 4B4E" /* .–ÀX.6¯K..7ìÞoKN */
- $"291D A2A6 3CB8 9BAC 4B0C 5017 9031 0EF1" /* ).¢¦<¸›¬K.P.1.ñ */
- $"3CF7 F63B 73A1 B4A6 9EA7 0513 C571 8EA8" /* <÷ö;s¡´¦ž§..ÅqŽ¨ */
- $"5D0A 28FC DCB6 D27A 0000 0000 0159 D076" /* ]Â(üܶÒz.....YÐv */
- $"3D1E 84A9 1C76 876E 7B6B 8519 1F9F 01C6" /* =.„©.v‡n{k…..Ÿ.Æ */
- $"1A11 B2A2 4841 4D47 5463 5D18 2AFE 54F5" /* ..²¢HAMGTc].*þTõ */
- $"591E 5FF1 39C7 C0CD 0D20 F366 59DE FE22" /* Y._ñ9ÇÀÍ. ófYÞþ" */
- $"B12C 4608 009D F105 49C8 16B5 417A 6079" /* ±,F..ñ.IÈ.µAz`y */
- $"40B0 7E7A C4B3 83B8 485D 42B1 4000 0000" /* @°~zijƒ¸H]B±@... */
- $"0E9F 0340 5469 49BB 5767 B4BE 47AF 19B3" /* .Ÿ.@TiI»Wg´¾G¯.³ */
- $"4E69 B99F 25DF C3C0 1B9C 5455 41D2 F508" /* Ni¹Ÿ%ßÃÀ.œTUAÒõ. */
- $"9900 1F13 B43E C345 C4B3 C066 8A27 C3D3" /* ™...´>Ã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\ˆ‘ô<i×kMï)Ú */
- $"F378 1035 720A CE61 C2E3 5776 CA53 F43B" /* óx.5rÂÎaÂãWvÊSô; */
- $"4FCB 79E4 5164 1270 A23E 6048 2089 7B12" /* OËyäQd.p¢>`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
--- a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
+++ /dev/null
Binary files 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
--- a/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns
+++ /dev/null
Binary files 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
--- a/indra/newview/installers/darwin/publicnightly-dmg/background.jpg
+++ /dev/null
Binary files 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" /* ÿÿÿ<Aÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FD35 3DFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿý5=ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FA30 3CFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿú0<ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FB2F 1247 4B4A 4A4A 4A4A 4A4A 4A4A" /* ÿÿû/.GKJJJJJJJJJ */
- $"4A4B 450F 0101 0201 0101 0101 0101 0101" /* JKE............. */
- $"0102 0001 696C 3332 0000 05AB FF00 BE00" /* ....il32...«ÿ.¾. */
- $"025A 7881 847F 0064 9200 0262 BBC4 83C2" /* .Zx„..d’..b»ÄƒÂ */
- $"02C7 8451 9000 0255 86BF 84BC 03BF A064" /* .Ç„Q..U†¿„¼.¿ d */
- $"6389 6400 6281 0003 5770 A2A2 85A1 01A3" /* c‰d.b..Wp¢¢…¡.£ */
- $"9D89 9B07 9C97 6758 005B 95AC 88A7 02A8" /* ‰›.œ—gX.[•¬ˆ§.¨ */
- $"A4A7 89A8 05AB 925A 61A7 AE88 AC03 ABCA" /* ¤§‰¨.«’Za§®ˆ¬.«Ê */
- $"AEAB 88AC 05AE A15E 5B9A A788 A503 A0D7" /* ®«ˆ¬.®¡^[š§ˆ¥. × */
- $"D79F 88A5 05A8 9559 5990 A288 9F04 9BAB" /* ןˆ¥.¨•YY¢ˆŸ.›« */
- $"FBAE 9C87 9F05 A28B 5857 879D 879A 0595" /* û®œ‡Ÿ.¢‹XW‡‡š.• */
- $"BDD6 E6E3 9487 9A05 9D82 5656 7F97 8594" /* ½Öæ㔇š.‚VV.—…” */
- $"0995 8FB3 F4CF B1FF AD90 9585 9405 977A" /* Æ•³ôϱÿ­•…”.—z */
- $"0000 7793 8690 078D CDF8 B886 E8E5 8B86" /* ..w“†.Íø¸†è勆 */
- $"9005 9372 0000 708F 828C 808B 0984 BBF7" /* .“r..p‚Œ€‹Æ„»÷ */
- $"C687 85AB FFA9 8580 8B82 8C05 8E6D 0000" /* Ƈ…«ÿ©…€‹‚Œ.Žm.. */
- $"6B8A 8287 0D88 8785 8FF3 FDA1 8186 84E5" /* kŠ‚‡.ˆ‡…óý¡†„å */
- $"E484 8684 8705 8868 0000 6685 8183 117E" /* 䄆„‡.ˆh..f…ƒ.~ */
- $"B3E3 D0D2 FFDC D4DF DDDB D2FD D0DE E2B7" /* ³ãÐÒÿÜÔßÝÛÒýÐÞâ· */
- $"8082 8304 6400 0062 8081 7F06 76C5 FFDB" /* €‚ƒ.d..b€..vÅÿÛ */
- $"F9F3 E381 FF06 F6D4 BFF4 FFD3 7882 7F03" /* ùóãÿ.öÔ¿ôÿÓx‚.. */
- $"6100 005F 827B 0675 B0D9 E1FF C8D8 82DF" /* a.._‚{.u°ÙáÿÈØ‚ß */
- $"05BF F3C9 DCB9 7681 7B04 7A5E 0000 5C82" /* .¿óÉܹv{.z^..\‚ */
- $"7706 786F 96FF E879 7281 7306 7278 C8C2" /* w.xo–ÿèyrs.rxÈÂ */
- $"7074 7880 7706 7875 5C00 005A 7382 7405" /* ptx€w.xu\..Zs‚t. */
- $"71C1 E19A 6D74 8173 0574 6BA2 FFAD 6C81" /* qÁášmts.tk¢ÿ­l */
- $"7406 7571 5B00 005A 6F81 7104 6F77 F2AF" /* t.uq[..Zoq.owò¯ */
- $"6984 7105 6E7E FAFB 836D 8071 0772 6D5A" /* i„q.n~úûƒm€q.rmZ */
- $"0000 586C 6F80 6E03 6C7B 9368 866E 0467" /* ..Xlo€n.l{“h†n.g */
- $"C3FA 8B69 806E 076F 6A59 0000 586A 6E81" /* Ãú‹i€n.ojY..Xjn */
- $"6D01 6C68 876D 036B 717D 6B81 6D07 6E69" /* m.lh‡m.kq}km.ni */
- $"5900 0058 666A 8E69 0168 6682 6903 6A65" /* Y..XfjŽi.hf‚i.je */
- $"5900 BD59 0000 9B59 9E00 FF00 BE00 027D" /* Y.½Y..›Yž.ÿ.¾..} */
- $"98A0 829E 029F 9E85 9200 0284 D5DE 83DC" /* ˜ ‚ž.Ÿž…’..„ÕÞƒÜ */
- $"02E0 A275 9000 0279 A7DB 84D8 03DB BD87" /* .à¢u..y§Û„Ø.Û½‡ */
- $"8689 8700 8581 0003 7A92 C0C0 85BF 01C0" /* †‰‡.…..z’ÀÀ…¿.À */
- $"BB89 B907 BAB4 887B 007E B7CC 88C7 01C8" /* »‰¹.º´ˆ{.~·ÌˆÇ.È */
- $"C68A C805 CBB2 7C84 CAD1 89CF 02DE CFCE" /* ÆŠÈ.˲|„ÊщÏ.ÞÏÎ */
- $"88CF 05D2 C380 7FBF CC88 CA03 C7E8 E5C6" /* ˆÏ.ÒÀ.¿ÌˆÊ.ÇèåÆ */
- $"88CA 05CD B87C 7CB7 CA88 C704 C4CD FCCD" /* ˆÊ.͸||·ÊˆÇ.ÄÍüÍ */
- $"C587 C705 CAB0 7A7A AFC7 87C4 05C1 D4E3" /* ŇÇ.Ê°zz¯Ç‡Ä.ÁÔã */
- $"F0ED C087 C405 C8A8 7979 A7C4 85C0 09C1" /* ðíÀ‡Ä.Ȩyy§Ä…ÀÆÁ */
- $"BDD0 F7E1 D1FF CDBE C185 C005 C4A1 0000" /* ½Ð÷áÑÿ;Á…À.Ä¡.. */
- $"A0C1 86BD 07BA DEFB D5B7 F2EE B986 BD05" /*  Á†½.ºÞûÕ·ò½. */
- $"C09A 0000 9ABE 85BA 09B6 D4F9 DBB8 B6CD" /* Àš..š¾…ºÆ¶ÔùÛ¸¶Í */
- $"FFCA B785 BA05 BD94 0000 94B9 83B6 0EB4" /* ÿÊ·…º.½”..”¹ƒ¶.´ */
- $"B3B9 F7FE C4B0 B4B2 EFED B2B4 B4B5 82B6" /* ³¹÷þÄ°´²ïí²´´µ‚¶ */
- $"05B8 8F00 008E B481 B211 AFCD EBDF E0FF" /* .¸..Ž´².¯Íëßàÿ */
- $"E8E2 E9E8 E6E0 FEDF E8EA D0B0 81B2 05B3" /* èâéèæàþßèêа².³ */
- $"8A00 0089 AF81 AD06 A8D9 FFE7 FBF7 EB81" /* Š..‰¯­.¨Ùÿçû÷ë */
- $"FF06 F9E1 D3F8 FFE3 A980 AD05 AEAD 8600" /* ÿ.ùáÓøÿã©€­.®­†. */
- $"0086 82A9 06A5 CBE5 EAFF DAE5 82EA 05D3" /* .†‚©.¥ËåêÿÚå‚ê.Ó */
- $"F7DA E8D1 A680 A906 AAA7 8300 0082 A382" /* ÷ÚèѦ€©.ª§ƒ..‚£‚ */
- $"A405 9FB7 FFF0 A5A1 81A2 05A1 A5D9 D39F" /* ¤.Ÿ·ÿ𥡢.¡¥ÙÓŸ */
- $"A281 A406 A5A1 8000 0080 9F82 A004 9ED2" /* ¢¤.¥¡€..€Ÿ‚ .žÒ */
- $"E9BA 9B83 A004 9ABF FFC5 9A81 A007 A19C" /* 麛ƒ .š¿ÿÅš .¡œ */
- $"7F00 007E 999D 809B 059A 9FF6 C696 9C83" /* ...~™€›.šŸöÆ–œƒ */
- $"9B05 99A4 FBFB A799 809B 079C 977D 0000" /* ›.™¤ûû§™€›.œ—}.. */
- $"7C95 9980 9803 97A1 B295 8698 0494 D5FC" /* |•™€˜.—¡²•†˜.”Õü */
- $"AC95 8098 0799 937C 0000 7C93 9782 9600" /* ¬•€˜.™“|..|“—‚–. */
- $"9387 9603 9599 A295 8196 0797 917C 0000" /* “‡–.•™¢•–.—‘|.. */
- $"7B8E 928D 9102 9290 8F82 9103 928C 7B00" /* {Ž’‘.’‚‘.’Œ{. */
- $"BD7C 0000 9B7C 9E00 FF00 BE00 0275 9199" /* ½|..›|ž.ÿ.¾..u‘™ */
- $"8498 007E 9200 027D D0D9 83D7 02DB 9B6C" /* „˜.~’..}ÐÙƒ×.Û›l */
- $"9000 0271 A0D5 84D2 03D5 B67F 7E89 7F00" /* ..q Õ„Ò.Õ¶.~‰.. */
- $"7D81 0003 728B BBBB 85BA 02BB B6B3 88B4" /* }..r‹»»…º.»¶³ˆ´ */
- $"08B5 AF81 7300 76B0 C6C2 87C1 01C2 C089" /* .µ¯s.v°Æ‡Á.ÂÀ‰ */
- $"C206 C3C5 AB75 7CC3 CA89 C801 DBC9 89C8" /* Â.ÃÅ«u|ÃʉÈ.ÛÉ‰È */
- $"05CB BD78 77B9 C588 C304 C0E5 E2BF C487" /* .˽xw¹ÅˆÃ.Àåâ¿Ä‡ */
- $"C305 C6B2 7574 B0C3 87C0 05BF BCC7 FCC7" /* Ã.Ʋut°Ã‡À.¿¼ÇüÇ */
- $"BE87 C005 C3A9 7272 A7BF 87BC 05B9 D0E1" /* ¾‡À.érr§¿‡¼.¹Ðá */
- $"EEEB B887 BC05 C0A1 7171 A0BC 86B8 07B5" /* î븇¼.À¡qq ¼†¸.µ */
- $"CBF6 DDCB FFC7 B586 B805 BB99 0000 98B9" /* ËöÝËÿǵ†¸.»™..˜¹ */
- $"86B5 07B2 DBFA D0AE F0EC B186 B505 B892" /* †µ.²ÛúЮð챆µ.¸’ */
- $"0000 91B5 82B2 80B1 09AC D0F9 D7AF ADC7" /* ..‘µ‚²€±Æ¬Ðùׯ­Ç */
- $"FFC4 AD80 B182 B205 B48C 0000 8BB1 81AD" /* ÿÄ­€±‚².´Œ..‹±­ */
- $"11AE ADAC ABB1 F6FD BDA8 ABAA EDEB A9AB" /* .®­¬«±öý½¨«ªíë©« */
- $"ACAC AE81 AD05 AF87 0000 86AB 81A9 11A6" /* ¬¬®­.¯‡..†«©.¦ */
- $"C8E9 DCDE FFE5 DFE7 E6E4 DDFE DCE6 E9CB" /* ÈéÜÞÿåßçæäÝþÜæéË */
- $"A781 A905 AA82 0000 81A6 81A5 069F D6FF" /* §©.ª‚..¦¥.ŸÖÿ */
- $"E4FA F6EA 81FF 06F8 DFCF F7FF E0A0 80A5" /* äúöêÿ.øßÏ÷ÿà €¥ */
- $"05A6 A47E 0000 7D82 A006 9BC6 E3E8 FFD6" /* .¦¤~..}‚ .›ÆãèÿÖ */
- $"E282 E805 CFF6 D7E6 CC9C 80A0 06A1 9E7B" /* â‚è.Ïö×æÌœ€ .¡ž{ */
- $"0000 7A9B 829C 0496 B1FF EF9D 8399 049C" /* ..z›‚œ.–±ÿ.œ */
- $"D6D0 969A 819C 069D 9979 0000 7897 8198" /* ÖЖšœ.™y..x—˜ */
- $"0597 95CF E7B4 9283 9704 91BA FFC0 9181" /* .—•Ïç´’ƒ—.‘ºÿÀ‘ */
- $"9807 9994 7700 0076 9295 8094 0493 98F5" /* ˜.™”w..v’•€”.“˜õ */
- $"C28E 8494 0592 9DFB FBA0 9180 9407 958F" /* ÂŽ„”.’ûû ‘€”.• */
- $"7500 0074 8E91 8090 038F 9AAC 8C86 9004" /* u..tŽ‘€.š¬Œ†. */
- $"8BD1 FBA6 8C80 9007 918B 7400 0074 8B8F" /* ‹Ñû¦Œ€.‘‹t..t‹ */
- $"808E 048F 8E8B 8E8F 848E 048F 8D91 9B8D" /* €Ž.Ž‹Ž„Ž.‘› */
- $"818E 078F 8974 0000 7487 8B8E 8A01 8987" /* Ž.‰t..t‡‹ŽŠ.‰‡ */
- $"828A 038B 8574 00BD 7400 009B 749E 006C" /* ‚Š.‹…t.½t..›tž.l */
- $"386D 6B00 0004 0800 0000 0000 0000 0000" /* 8mk............. */
- $"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 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 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 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0B76 8889 8989" /* ...........vˆ‰‰‰ */
- $"8989 8988 3800 0000 0000 0000 0000 0000" /* ‰‰‰ˆ8........... */
- $"0000 0000 0000 0000 0000 36FF FFFF FFFF" /* ..........6ÿÿÿÿÿ */
- $"FFFF FFFF A301 0000 0000 0000 0000 0000" /* ÿÿÿÿ£........... */
- $"0000 0000 0000 0000 0006 A4FF FFFF FFFF" /* ..........¤ÿÿÿÿÿ */
- $"FFFF FFFF DE59 3F40 4040 4040 4040 4040" /* ÿÿÿÿÞY?@@@@@@@@@ */
- $"4040 4033 0000 0000 1384 F8F3 F3F3 F3F3" /* @@@3.....„øóóóóó */
- $"F3F3 F3F3 F7F9 F7F7 F7F7 F7F7 F7F7 F7F7" /* óóóó÷ù÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F1 520D 001D E1FF FAFB FBFB FBFB" /* ÷÷÷ñR...áÿúûûûûû */
- $"FBFB FBFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ûûûûûûûûûûûûûûûû */
- $"FBFB FBFB FFCD 0E39 FFFF FFFF FFFF FFFF" /* ûûûûÿÍ.9ÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 1F26 F6FF FFFF FFFF FFFF" /* ÿÿÿÿÿø.&öÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE5 1318 ECFF FFFF FFFF FFFF" /* ÿÿÿÿÿå..ìÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD5 0A0F DDFF FFFF FFFF FFFF" /* ÿÿÿÿÿÕÂ.Ýÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC6 0206 D0FF FFFF FFFF FFFF" /* ÿÿÿÿÿÆ..Ðÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB6 0000 C2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¶..Âÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 0000 B2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¥..²ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF95 0000 A4FF FFFF FFFF FFFF" /* ÿÿÿÿÿ•..¤ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF87 0000 96FF FFFF FFFF FFFF" /* ÿÿÿÿÿ‡..–ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF7A 0000 8AFF FFFF FFFF FFFF" /* ÿÿÿÿÿz..Šÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6D 0000 7FFF FFFF FFFF FFFF" /* ÿÿÿÿÿm...ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF63 0000 77FF FFFF FFFF FFFF" /* ÿÿÿÿÿc..wÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5A 0000 6FFF FFFF FFFF FFFF" /* ÿÿÿÿÿZ..oÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF54 0000 69FF FFFF FFFF FFFF" /* ÿÿÿÿÿT..iÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4F 0000 65FF FFFF FFFF FFFF" /* ÿÿÿÿÿO..eÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4C 0000 64FF FFFF FFFF FFFF" /* ÿÿÿÿÿL..dÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4B 0000 61FF FFFF FFFF FFFF" /* ÿÿÿÿÿK..aÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF48 0004 2C6D 7574 7474 7474" /* ÿÿÿÿÿH..,muttttt */
- $"7474 7474 7474 7474 7474 7474 7474 7474" /* tttttttttttttttt */
- $"7474 7475 6824 0202 0D18 1C1C 1C1C 1C1C" /* tttuh$.......... */
- $"1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C" /* ................ */
- $"1C1C 1C1C 170C 0100 0103 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0301 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0069 6833 3200 0009 DEFF" /* .......ih32..ÆÞÿ */
- $"00FF 00FF 00AD 0001 5E66 8865 0261 5859" /* .ÿ.ÿ.­..^fˆe.aXY */
- $"9C00 025E A6BA 87B7 04B9 AE67 5659 9B00" /* œ..^¦º‡·.¹®gVY›. */
- $"0266 BABF 87BE 04BF BC70 5459 9A00 0252" /* .fº¿‡¾.¿¼pTYš..R */
- $"81BD 89BA 03BC 8652 5491 5585 0003 5580" /* ½‰º.¼†RT‘U…..U€ */
- $"B7BA 89B9 02BA B497 918F 0191 7683 0003" /* ·º‰¹.º´—‘.‘vƒ.. */
- $"5864 9399 8B97 0098 929B 039D 855F 5A80" /* Xd“™‹—.˜’›.…_Z€ */
- $"0002 649D A990 A500 A490 A509 A6A9 9B65" /* ..d©¥.¤¥Æ¦©›e */
- $"0000 85B4 AFAF 8EAE 03B0 AEAC AF8E AE07" /* ..…´¯¯Ž®.°®¬¯Ž®. */
- $"AFAF B280 0000 80AD 8FA9 04A8 B2E7 ACA8" /* ¯¯²€..€­©.¨²ç¬¨ */
- $"90A9 05AB 7A00 0076 A98F A604 A5A4 F1E0" /* ©.«z..v©¦.¥¤ñà */
- $"A08F A606 A7A6 7100 006D A390 A204 9DC8" /*  ¦.§¦q..m£¢.È */
- $"FFB9 9C8E A207 A3A0 6A00 0065 9D9F 8D9E" /* ÿ¹œŽ¢.£ j..eŸž */
- $"069F 9C96 A2FA EF9C 8E9E 079F 9A65 0000" /* .Ÿœ–¢úž.Ÿše.. */
- $"6097 9C8D 9B07 97A5 E2C6 D2FF C394 8D9B" /* `—œ›.—¥âÆÒÿÔ› */
- $"079C 9461 0000 5E90 988C 9709 959A D5CE" /* .œ”a..^˜Œ—Æ•šÕÎ */
- $"E4B2 FCF4 9A95 8C97 0799 8D5E 0000 5A8B" /* ä²üôš•Œ—.™^..Z‹ */
- $"968C 9409 8EC8 FFF6 C18D DDFF C78C 8C94" /* –Œ”ÆŽÈÿöÁÝÿÇŒŒ” */
- $"0796 875B 0000 5885 938B 910B 8F8F E5FF" /* .–‡[..X…“‹‘.åÿ */
- $"FFA9 87AA FFF7 988E 8B91 0793 8159 0000" /* ÿ©‡ªÿ÷˜Ž‹‘.“Y.. */
- $"577F 908B 8E0B 87CF D4D0 CA89 8D8B E0FF" /* W.‹Ž.‡ÏÔÐʉ‹àÿ */
- $"C786 8B8E 0790 7B58 0000 5779 8C86 8A81" /* dž‹Ž.{X..WyŒ†Š */
- $"8B0D 84A5 FFFF E38B 898B 85A8 FFF8 9387" /* ‹.„¥ÿÿ㋉‹…¨ÿø“‡ */
- $"818B 868A 078C 7557 0000 5674 8A85 8800" /* ‹†Š.ŒuW..VtŠ…ˆ. */
- $"8680 820E 8385 E4FF FFB9 7C83 8381 7FDD" /* †€‚.ƒ…äÿÿ¹|ƒƒ.Ý */
- $"FFC6 7E81 8200 8585 8807 8A71 5759 0056" /* ÿÆ~‚.……ˆ.ŠqWY.V */
- $"6F87 8485 1983 929F A3A0 94B0 FFFF E39D" /* o‡„….ƒ’Ÿ£ ”°ÿÿã */
- $"9F9E 9DA3 9AB0 FBF4 98A0 A09F A192 8484" /* Ÿž£š°ûô˜  Ÿ¡’„„ */
- $"8507 876D 5759 0056 6984 8482 197C A7EB" /* ….‡mWY.Vi„„‚.|§ë */
- $"FBF1 C2EC FFFB C1ED F2F6 ECFB EDD9 DBFF" /* ûñÂìÿûÁíòöìûíÙÛÿ */
- $"D4EE F0F6 F6B7 7C84 8207 8369 5700 5956" /* Ôîðöö·|„‚.ƒiW.YV */
- $"6481 847F 0979 A3FF FFEB CCFF FFD5 E084" /* d„.Æy£ÿÿëÌÿÿÕà„ */
- $"FF03 C8F1 BCC4 80FF 01C0 7785 7F06 6557" /* ÿ.Èñ¼Ä€ÿ.Àw…..eW */
- $"5959 5661 7E84 7D08 76A3 FFFF C3F4 FFF5" /* YYVa~„}.v£ÿÿÃôÿõ */
- $"CB85 FF08 EDA8 CCC0 F2FF FFC1 7485 7D06" /* Ë…ÿ.í¨ÌÀòÿÿÁt…}. */
- $"6358 5959 575E 7B84 7A09 7692 D0BE D6FF" /* cXYYW^{„zÆv’оÖÿ */
- $"FFC2 B9D0 84CF 08CD B9FF F1B1 CED0 A574" /* ÿ¹ЄÏ.͹ÿñ±ÎÐ¥t */
- $"847A 0679 6058 5959 585D 8678 0776 6A9C" /* „z.y`XYYX]†x.vjœ */
- $"FFFF F081 7086 7106 75D1 D89D 6A71 7484" /* ÿÿðp†q.uÑØjqt„ */
- $"7808 7976 5E58 5959 585B 7486 7505 73B9" /* x.yv^XYYX[t†u.s¹ */
- $"F5FF AC6D 8775 0570 8CEB F889 6F85 7508" /* õÿ¬m‡u.pŒëø‰o…u. */
- $"7672 5C58 5959 5859 7285 7306 6F8A E1C6" /* vr\XYYXYr…s.oŠáÆ */
- $"C176 7287 7306 7179 EEFF E173 7184 7308" /* Ávr‡s.qyîÿásq„s. */
- $"7470 5B58 5959 5859 7085 7205 6B97 FFE7" /* tp[XYYXYp…r.k—ÿç */
- $"776E 8972 0569 C6FF FFB4 6A84 7202 736E" /* wn‰r.iÆÿÿ´j„r.sn */
- $"5A81 5901 586D 856F 0567 B9D9 786B 7089" /* ZY.Xm…o.g¹Ùxkp‰ */
- $"6F06 6993 FFFF F173 6D83 6F01 706B 8259" /* o.i“ÿÿñsmƒo.pk‚Y */
- $"0157 6B85 6E03 6C8C 7269 8B6E 066D 6BD3" /* .Wk…n.lŒri‹n.mkÓ */
- $"FFCB 6C6D 836E 026F 6958 8159 0256 6A6E" /* ÿËlmƒn.oiXY.Vjn */
- $"856D 0169 6B8D 6D04 6A73 8A6D 6B84 6D02" /* …m.ikm.jsŠmk„m. */
- $"6E68 5881 5902 566A 6E98 6D02 6B67 6C85" /* nhXY.Vjn˜m.kgl… */
- $"6D02 6E68 5881 5902 5665 69A3 6802 6963" /* m.nhXY.Vei£h.ic */
- $"5881 5901 5858 A559 0058 B059 0000 AB59" /* XY.XX¥Y.X°Y..«Y */
- $"8000 A959 DF00 FF00 FF00 FF00 AD00 0081" /* €.©Yß.ÿ.ÿ.ÿ.­.. */
- $"8987 0283 7B7C 9C00 0280 C1D3 87D1 04D2" /* ‰‡.ƒ{|œ..€ÁÓ‡Ñ.Ò */
- $"C787 7A7C 9B00 0288 D4DA 87D9 04DA D68F" /* LJz|›..ˆÔÚ‡Ù.ÚÖ */
- $"787C 9A00 0276 A2D8 89D6 02D7 A476 9278" /* x|š..v¢Ø‰Ö.פv’x */
- $"8500 0379 A2D3 D789 D503 D6D0 B5AD 90AE" /* …..y¢Ó׉Õ.Öе­® */
- $"01B0 9683 0003 7C87 B1B7 8BB5 00B6 92B9" /* .°–ƒ..|‡±·‹µ.¶’¹ */
- $"03BA A282 7D80 0003 87BD C8C5 90C4 00C5" /* .º¢‚}€..‡½ÈÅÄ.Å */
- $"8FC4 08C5 C8B9 8700 00A7 D6D1 90D0 01CD" /* Ä.Åȹ‡..§ÖÑÐ.Í */
- $"CF90 D006 D1D3 A000 00A3 D18F CD04 CCD1" /* ÏÐ.ÑÓ ..£ÑÍ.ÌÑ */
- $"EECC CC90 CD05 CF9B 0000 9ACE 90CB 03CA" /* îÌÌÍ.Ï›..šÎË.Ê */
- $"F7E9 C68F CB07 CCCB 9300 0091 C9C9 8FC8" /* ÷éÆË.ÌË“..‘ÉÉÈ */
- $"04C6 DFFF D2C5 8EC8 07C9 C68D 0000 8BC5" /* .ÆßÿÒÅŽÈ.ÉÆ..‹Å */
- $"C78D C606 C7C5 BFC7 FDF3 C38E C607 C7C0" /* ÇÆ.ÇÅ¿ÇýóÃŽÆ.ÇÀ */
- $"8800 0086 C0C5 8DC4 07C2 C7EB DAE4 FFD9" /* ˆ..†ÀÅÄ.ÂÇëÚäÿÙ */
- $"C08D C407 C6BC 8400 0082 BBC4 8CC2 09C1" /* ÀÄ.Ƽ„..‚»ÄŒÂÆÁ */
- $"C2E2 DEED D1FD F7C1 C18C C207 C4B6 8100" /* ÂâÞíÑý÷ÁÁŒÂ.Ķ. */
- $"007F B5C2 8CC0 09BC DBFF F8D7 BBEA FFDB" /* ..µÂŒÀƼÛÿø×»êÿÛ */
- $"BA8C C007 C2B0 7E00 007C B0C0 8BBE 0BBD" /* ºŒÀ.°~..|°À‹¾.½ */
- $"BAED FFFF CCB8 CCFF F9BF BC8B BE07 C0AA" /* ºíÿÿ̸Ìÿù¿¼‹¾.Àª */
- $"7C00 007B ABBF 8BBC 0BB7 DEE1 DFDF B9BB" /* |..{«¿‹¼.·Þáßß¹» */
- $"BAED FFDA B78B BC07 BFA5 7B00 007A A5BC" /* ºíÿÚ·‹¼.¿¥{..z¥¼ */
- $"89B9 0EBA B6C6 FFFF ECB9 B9BA B6CB FFFA" /* ‰¹.º¶Æÿÿì¹¹º¶Ëÿú */
- $"BCB8 8AB9 07BC 9F7A 0000 799F B984 B601" /* ¼¸Š¹.¼Ÿz..yŸ¹„¶. */
- $"B7B5 82B3 0CEC FFFF D4AF B3B3 B2B1 EAFF" /* ·µ‚³.ìÿÿÔ¯³³²±êÿ */
- $"D9B0 81B3 01B5 B784 B607 B899 797C 0079" /* Ù°³.µ·„¶.¸™y|.y */
- $"99B7 84B4 13B3 B9BE C1C0 B9CB FFFF EDBE" /* ™·„´.³¹¾ÁÀ¹Ëÿÿí¾ */
- $"BFBE BEC1 BCCB FCF7 BB80 BF02 C0B9 B384" /* ¿¾¾Á¼Ëü÷»€¿.À¹³„ */
- $"B407 B694 797C 0079 93B4 84B1 19AD C7F1" /* ´.¶”y|.y“´„±.­Çñ */
- $"FBF5 D6F1 FFFD D5F2 F5F8 F1FB F2E4 E7FF" /* ûõÖñÿýÕòõøñûòäçÿ */
- $"E2F3 F4F8 F8D0 AD84 B107 B290 7A00 7C79" /* âóôøøЭ„±.²z.|y */
- $"8DB0 84AE 09AA C3FF FFF2 DCFF FFE2 E984" /* °„®ÆªÃÿÿòÜÿÿâé„ */
- $"FF03 D9F6 D1D8 80FF 01D6 A985 AE06 8C7A" /* ÿ.ÙöÑØ€ÿ.Ö©…®.Œz */
- $"7C7C 7989 AD84 AB08 A7C3 FFFF D5F7 FFF8" /* ||y‰­„«.§ÃÿÿÕ÷ÿø */
- $"DA85 FF08 F2C2 DAD3 F6FF FFD7 A583 AB08" /* Ú…ÿ.òÂÚÓöÿÿ×¥ƒ«. */
- $"ACAA 897A 7C7C 7A86 A984 A809 A5B7 E0D3" /* ¬ª‰z||z†©„¨Æ¥·àÓ */
- $"E2FF FFD6 D0E0 84DF 08DD CFFF F5CB DFE0" /* âÿÿÖÐà„ß.ÝÏÿõËßà */
- $"C3A4 83A8 07A9 A686 7A7C 7C7A 8386 A506" /* 䃨.©¦†z||zƒ†¥. */
- $"A39B BAFF FFF5 AA87 A006 A3DF E2BA 9BA1" /* £›ºÿÿõª‡ .£ß⺛¡ */
- $"A284 A507 A6A2 837B 7C7C 7B82 87A2 059F" /* ¢„¥.¦¢ƒ{||{‚‡¢.Ÿ */
- $"CCF8 FFC7 9C87 A205 9EAF F0F9 AD9E 85A2" /* ÌøÿÇœ‡¢.ž¯ðù­ž…¢ */
- $"08A3 9F81 7B7C 7C7B 7F9D 859F 069C AEE8" /* .£Ÿ{||{.…Ÿ.œ®è */
- $"D4D3 A09E 879F 069D A3F4 FFE8 9D9E 849F" /* ÔÓ ž‡Ÿ.£ôÿèž„Ÿ */
- $"09A0 9B7F 7B7C 7C7B 7E9A 9D84 9C05 98B5" /* Æ ›.{||{~š„œ.˜µ */
- $"FFEE 9F99 899C 0596 D7FF FFC9 9684 9C09" /* ÿ‰œ.–×ÿÿÉ–„œÆ */
- $"9D97 7E7B 7C7C 7B7C 989B 849A 0494 CCE4" /* —~{||{|˜›„š.”Ìä */
- $"A097 8A9A 0695 B3FF FFF4 9C99 839A 019B" /*  —Šš.•³ÿÿôœ™ƒš.› */
- $"9482 7C02 7B95 9984 9803 97AD 9B95 8B98" /* ”‚|.{•™„˜.—­›•‹˜ */
- $"0697 96E0 FFDA 9797 8398 0199 9282 7C02" /* .—–àÿÚ——ƒ˜.™’‚|. */
- $"7A93 9785 9601 9395 8D96 0494 9AAB 9695" /* z“—…–.“•–.”š«–• */
- $"8496 0297 8F7B 817C 027A 9297 9896 0294" /* „–.—{|.z’—˜–.” */
- $"9295 8596 0297 8F7B 817C 027A 8C91 A390" /* ’•…–.—{|.zŒ‘£ */
- $"0291 897A 817C 017B 7BA5 7C00 7BB0 7C00" /* .‘‰z|.{{¥|.{°|. */
- $"00AB 7C80 00A9 7CDF 00FF 00FF 00FF 00AD" /* .«|€.©|ß.ÿ.ÿ.ÿ.­ */
- $"0000 7A89 8002 7C73 749C 0002 79BC CE87" /* ..z‰€.|stœ..y¼Î‡ */
- $"CC04 CDC2 8172 749B 0002 80CF D587 D304" /* Ì.ÍÂrt›..€ÏÕ‡Ó. */
- $"D4D1 8870 749A 0002 6E9B D288 D003 D1D2" /* Ôшptš..n›ÒˆÐ.ÑÒ */
- $"9E6E 9270 8500 0371 9BCE D289 D002 D1CB" /* žn’p…..q›ÎÒ‰Ð.ÑË */
- $"AF91 A801 AA90 8300 0474 80AC B2AF 8AB0" /* ¯‘¨.ªƒ..t€¬²¯Š° */
- $"02B1 B3B4 90B3 03B5 9D7A 7580 0002 80B7" /* .±³´³.µzu€..€· */
- $"C3A4 BF09 C0C3 B57F 0000 A0CF CACA 8DC9" /* ä¿ÆÀõ... ÏÊÊÉ */
- $"04CA CAC6 C8CA 8EC9 07CA CACD 9900 009C" /* .ÊÊÆÈÊŽÉ.ÊÊÍ™..œ */
- $"CA8F C604 C5CB EDC5 C58F C606 C7C8 9400" /* ÊÆ.ÅËíÅÅÆ.ÇÈ”. */
- $"0093 C790 C403 C3F6 E7BF 8FC4 07C5 C48B" /* .“ÇÄ.Ãöç¿Ä.ÅÄ‹ */
- $"0000 8AC2 C28F C104 BEDA FFCE BE8E C107" /* ..ŠÂÂÁ.¾ÚÿξŽÁ. */
- $"C2BF 8600 0083 BEC0 8DBF 06C0 BEB8 C1FC" /* ¿†..ƒ¾À¿.À¾¸Áü */
- $"F3BC 8EBF 07C0 BA81 0000 7EB9 BE8D BD07" /* 󼎿.Àº..~¹¾½. */
- $"BAC0 E9D6 E1FF D5B8 8DBD 07BF B57C 0000" /* ºÀéÖáÿÕ¸½.¿µ|.. */
- $"7AB3 BC8C BA09 B9BB DFDB EBCB FDF7 BAB9" /* z³¼ŒºÆ¹»ßÛëËý÷º¹ */
- $"8CBA 07BC AE79 0000 77AE B98C B709 B3D7" /* Œº.¼®y..w®¹Œ·Æ³× */
- $"FFF8 D3B2 E8FF D7B1 8CB7 07B9 A876 0000" /* ÿøÓ²èÿ×±Œ·.¹¨v.. */
- $"74A9 B78A B50C B6B5 B2EC FFFF C6AF C6FF" /* t©·Šµ.¶µ²ìÿÿƯÆÿ */
- $"F9B8 B48B B507 B7A3 7400 0073 A3B6 8BB3" /* ù¸´‹µ.·£t..s£¶‹³ */
- $"0BAE DBDE DDDB B0B3 B1EA FFD7 AE8B B307" /* .®ÛÞÝÛ°³±êÿ×®‹³. */
- $"B59D 7300 0072 9CB3 8AB0 04AD C0FF FFEA" /* µs..rœ³Š°.­Àÿÿê */
- $"80B0 05AD C4FF F9B4 AF8A B007 B397 7200" /* €°.­Äÿù´¯Š°.³—r. */
- $"0071 97B1 85AE 00AC 80AA 0EAB AAEA FFFF" /* .q—±…®.¬€ª.«ªêÿÿ */
- $"CFA6 AAAA A9A7 E7FF D5A7 81AA 00AC 85AE" /* Ϧªª©§çÿÕ§ª.¬…® */
- $"07B0 9171 7400 7191 AE84 AB13 AAB2 B9BB" /* .°‘qt.q‘®„«.ª²¹» */
- $"BAB2 C6FF FFEB B7B9 B8B7 BBB6 C5FC F7B5" /* º²Æÿÿë·¹¸·»¶Åü÷µ */
- $"80B9 01BA B285 AB07 AD8C 7174 0070 8BAB" /* €¹.º²…«.­Œqt.p‹« */
- $"84A8 19A4 C1EF FBF4 D2F0 FFFC D1F1 F4F8" /* „¨.¤ÁïûôÒðÿüÑñôø */
- $"F0FB F1E2 E5FF DFF2 F3F8 F8CB A484 A807" /* ðûñâåÿßòóøøˤ„¨. */
- $"A988 7200 7471 85A7 84A5 09A1 BDFF FFF0" /* ©ˆr.tq…§„¥Æ¡½ÿÿð */
- $"D9FF FFE0 E784 FF03 D6F5 CDD4 80FF 01D2" /* Ùÿÿàç„ÿ.ÖõÍÔ€ÿ.Ò */
- $"9F85 A506 8472 7474 7181 A484 A208 9EBD" /* Ÿ…¥.„rttq¤„¢.ž½ */
- $"FFFF D2F6 FFF7 D785 FF08 F1BD D8CF F6FF" /* ÿÿÒöÿ÷×…ÿ.ñ½ØÏöÿ */
- $"FFD3 9C83 A208 A3A2 8172 7474 727E A084" /* ÿÓœƒ¢.£¢rttr~ „ */
- $"9F09 9CB0 DDCF DFFF FFD2 CCDD 84DC 08DA" /* ŸÆœ°ÝÏßÿÿÒÌÝ„Ü.Ú */
- $"CBFF F4C6 DCDD BE9B 839F 08A0 9E7E 7274" /* ËÿôÆÜݾ›ƒŸ. ž~rt */
- $"7472 7C9D 849C 089D 9B93 B5FF FFF4 A397" /* tr|„œ.›“µÿÿô£— */
- $"8598 0897 9BDD E0B4 9398 9A9D 839C 089D" /* …˜.—›Ýà´“˜šƒœ. */
- $"9A7B 7374 7473 7998 8699 0597 C8F7 FFC1" /* š{sttsy˜†™.—È÷ÿÁ */
- $"9387 9905 96A9 EEF9 A695 8599 089A 9679" /* “‡™.–©îù¦•…™.š–y */
- $"7374 7473 7795 8596 0693 A7E6 D1D0 9895" /* sttsw•…–.“§æÑИ• */
- $"8796 0695 9BF3 FFE7 9595 8496 0897 9377" /* ‡–.•›óÿç••„–.—“w */
- $"7374 7473 7693 8595 058F B0FF ED98 9289" /* sttsv“…•.°ÿ혒‰ */
- $"9505 8ED4 FFFF C58E 8495 0996 9076 7374" /* •.ŽÔÿÿÅŽ„•Æ–vst */
- $"7473 7490 9384 9204 8BC8 E299 8F8A 9206" /* tst“„’.‹È♊’. */
- $"8DAD FFFF F494 9183 9202 938C 7581 7402" /* ­ÿÿô”‘ƒ’.“Œut. */
- $"738D 9184 9003 8EA7 938D 8B90 068F 8EDD" /* s‘„.Ž§“‹.ŽÝ */
- $"FFD7 8E8F 8390 0191 8A82 7402 728B 8F85" /* ÿ׎ƒ.‘Š‚t.r‹… */
- $"8E01 8B8D 8D8E 048C 93A4 8E8D 848E 028F" /* Ž.‹Ž.Œ“¤Ž„Ž. */
- $"8773 8174 0272 8B8F 988E 028C 8A8D 858E" /* ‡st.r‹˜Ž.ŒŠ…Ž */
- $"028F 8773 8174 0272 8489 A388 0289 8173" /* .‡st.r„‰£ˆ.‰s */
- $"8174 0173 73A5 7400 73B0 7400 00AB 7480" /* t.ss¥t.s°t..«t€ */
- $"00A9 74DF 0068 386D 6B00 0009 0800 0000" /* .©tß.h8mk..Æ.... */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 002E 4549 4A4A 4A4A 4A4A 4A4A 4A4A" /* ....EIJJJJJJJJJJ */
- $"3B0A 0400 0000 0000 0000 0000 0000 0000" /* ;Â.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 2FF9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ../ùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FD52 0802 0000 0000 0000 0000 0000 0000" /* ýR.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 4DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Mÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FF7E 1306 0000 0000 0000 0000 0000 0000" /* ÿ~.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0002 ABFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..«ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFBB 2C11 0B0B 0B0B 0B0B 0B0B 0B0B 0B0B" /* ÿ»,............. */
- $"0B0B 0B0B 0B0B 0903 0000 0000 0000 0000" /* ......Æ......... */
- $"08B2 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF DFCC CCCC CCCC CCCC CCCC CCCC CCCC" /* ÿÿßÌÌÌÌÌÌÌÌÌÌÌÌÌ */
- $"CCCC CCCC CCCC CBC9 8000 0000 0000 0026" /* ÌÌÌÌÌÌËÉ€......& */
- $"71F2 EDEE EFEF EFEF EFEF EFEF EFEF EFEF" /* qòíîïïïïïïïïïïïï */
- $"EFEF F4F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ïïô÷÷÷÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F7 F7F7 F7F5 CE41 2000 0000 5EF7" /* ÷÷÷÷÷÷÷õÎA ...^÷ */
- $"FFF8 F8F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ÿøøùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F8 FAFF EE41 0000 C4FF" /* ùùùùùùùøúÿîA..Äÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFA1 0000 B6FF" /* ÿÿÿÿÿÿÿÿÿÿÿ¡..¶ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF91 0000 A2FF" /* ÿÿÿÿÿÿÿÿÿÿÿ‘..¢ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF7A 0000 8FFF" /* ÿÿÿÿÿÿÿÿÿÿÿz..ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF68 0000 79FF" /* ÿÿÿÿÿÿÿÿÿÿÿh..yÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF57 0000 5EFF" /* ÿÿÿÿÿÿÿÿÿÿÿW..^ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF48 0000 4BFF" /* ÿÿÿÿÿÿÿÿÿÿÿH..Kÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FD3B 0000 3FFE" /* ÿÿÿÿÿÿÿÿÿÿý;..?þ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF F62F 0000 33F8" /* ÿÿÿÿÿÿÿÿÿÿö/..3ø */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF ED23 0000 27F2" /* ÿÿÿÿÿÿÿÿÿÿí#..'ò */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF DE1A 0000 1FE9" /* ÿÿÿÿÿÿÿÿÿÿÞ....é */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF CE10 0000 1ADF" /* ÿÿÿÿÿÿÿÿÿÿÎ....ß */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF C10B 0100 14D5" /* ÿÿÿÿÿÿÿÿÿÿÁ....Õ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF B509 0100 0FCD" /* ÿÿÿÿÿÿÿÿÿÿµÆ...Í */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF AA07 0001 0BC2" /* ÿÿÿÿÿÿÿÿÿÿª.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF A005 0101 09B3" /* ÿÿÿÿÿÿÿÿÿÿ ...Ƴ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 9504 0101 08A6" /* ÿÿÿÿÿÿÿÿÿÿ•....¦ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8D04 0101 069A" /* ÿÿÿÿÿÿÿÿÿÿ....š */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8505 0101 0691" /* ÿÿÿÿÿÿÿÿÿÿ…....‘ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7D05 0101 078B" /* ÿÿÿÿÿÿÿÿÿÿ}....‹ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7606 0101 0885" /* ÿÿÿÿÿÿÿÿÿÿv....… */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7106 0102 0881" /* ÿÿÿÿÿÿÿÿÿÿq.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6D07 0102 0A7E" /* ÿÿÿÿÿÿÿÿÿÿm...Â~ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6A08 0102 0B7B" /* ÿÿÿÿÿÿÿÿÿÿj....{ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6709 0102 0C7C" /* ÿÿÿÿÿÿÿÿÿÿgÆ...| */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 670A 0102 0C75" /* ÿÿÿÿÿÿÿÿÿÿgÂ...u */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 600B 0102 113A" /* ÿÿÿÿÿÿÿÿÿÿ`....: */
- $"7B85 8585 8585 8585 8585 8585 8585 8585" /* {……………………………………… */
- $"8585 8585 8585 8585 8585 8585 8585 8585" /* ………………………………………… */
- $"8585 8585 8585 8585 8574 310F 0101 0B1E" /* ………………………t1..... */
- $"2B34 3535 3535 3535 3535 3535 3535 3535" /* +455555555555555 */
- $"3535 3535 3535 3535 3535 3535 3535 3535" /* 5555555555555555 */
- $"3535 3535 3535 3535 332A 1C0A 0100 040C" /* 555555553*.Â.... */
- $"1418 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1813 0B03 0000 0002" /* ................ */
- $"0304 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0402 0100 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 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0069 7433" /* .............it3 */
- $"3200 0025 F700 0000 00FF 00FF 00FF 00FF" /* 2..%÷....ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 59D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.ŸY× */
- $"00A6 59D3 0001 5959 8000 9D58 8459 D000" /* .¦YÓ..YY€.X„YÐ. */
- $"0359 5900 569F 5901 5658 8359 D000 0257" /* .YY.VŸY.VXƒYÐ..W */
- $"6287 9D95 0494 917F 5E58 8359 CD00 0459" /* b‡•.”‘.^XƒYÍ..Y */
- $"005C 9ABA 9EBC 03B9 AE85 5883 59CD 0004" /* .\šºž¼.¹®…XƒYÍ.. */
- $"5900 6EB3 BE9E BF04 BEB6 9D62 5782 59CD" /* Y.n³¾ž¿.¾¶bW‚YÍ */
- $"0003 5900 74B6 A0BE 03B8 9F63 5782 59CC" /* ..Y.t¶ ¾.¸ŸcW‚YÌ */
- $"0004 5959 547A B8A0 BC03 B7A0 6357 8359" /* ..YYTz¸ ¼.· cWƒY */
- $"CB00 0459 5954 88B9 A0BB 03B7 A366 56B8" /* Ë..YYTˆ¹ ».·£fV¸ */
- $"5995 0005 5959 005B A0B9 A0BA 03B8 AA73" /* Y•..YY.[ ¹ º.¸ªs */
- $"55BA 5992 0006 5959 0053 7BB4 B9A0 BA04" /* UºY’..YY.S{´¹ º. */
- $"B9B2 905A 56BA 5990 0006 5959 0054 73AB" /* ¹²ZVºY..YY.Ts« */
- $"B8A2 B903 B5AB 865E B756 0300 5859 598E" /* ¸¢¹.µ«†^·V..XYYŽ */
- $"0007 5959 005A 83AD B6B7 A2B8 04B7 B4AD" /* ..YY.Zƒ­¶·¢¸.·´­ */
- $"9B87 B57D 047B 725D 0059 8D00 0759 5900" /* ›‡µ}.{r].Y..YY. */
- $"5A8F B2B6 B6A4 B704 B6B5 B4B2 B1B4 B003" /* Z²¶¶¤·.¶µ´²±´°. */
- $"ADA0 7600 8059 8900 8159 0355 77AC B0E2" /* ­ v.€Y‰.Y.Uw¬°â */
- $"B103 AFA4 7D56 8259 8600 0159 5980 0003" /* ±.¯¤}V‚Y†..YY€.. */
- $"5279 9697 E298 0496 9073 5456 8000 0159" /* Ry–—â˜.–sTV€..Y */
- $"5984 0008 5900 5457 6268 686D 7284 73A1" /* Y„..Y.TWbhhmr„s¡ */
- $"74B9 7309 706C 6868 6763 5900 5959 8200" /* t¹sÆplhhgcY.YY‚. */
- $"0759 0052 6E96 A4A7 A8E7 A980 A706 A6A0" /* .Y.Rn–¤§¨ç©€§.¦  */
- $"8E6A 5759 5982 0002 536F A782 B0E5 AF81" /* ŽjWYY‚..So§‚°å¯ */
- $"B006 AFAF AB99 6A00 5980 0004 5900 5A9B" /* °.¯¯«™j.Y€..Y.Z› */
- $"AEF0 AF0B AEA6 895B 0059 0000 5900 6CA7" /* ®ð¯.®¦‰[.Y..Y.l§ */
- $"B4AE 03AF ABAE AFB7 AE0A A996 6500 5900" /* ´®.¯«®¯·®Â©–e.Y. */
- $"0059 5470 A7B3 AD05 AEA8 A299 A8AE B6AD" /* .YTp§³­.®¨¢™¨®¶­ */
- $"0AA8 9666 0059 0059 5900 6CA3 B4AB 05A6" /* ¨–f.Y.YY.l£´«.¦ */
- $"EDE9 99A7 ACB5 AB0A A692 6200 5900 5959" /* í陧¬µ«Â¦’b.Y.YY */
- $"0063 9EB3 A905 A8A8 ECFF E195 B6A9 0BA3" /* .cž³©.¨¨ìÿᕶ©.£ */
- $"8D5F 5859 0059 5900 6099 A7B3 A806 A4DC" /* _XY.YY.`™§³¨.¤Ü */
- $"FFFF CA96 AAB4 A80B A187 5B58 5900 5959" /* ÿÿÊ–ª´¨.¡‡[XY.YY */
- $"005C 94A6 B3A7 01A3 C580 FF02 AD9D A8B3" /* .\”¦³§.£Å€ÿ.­¨³ */
- $"A70B 9F82 5A58 5900 5959 5857 8DA5 B3A6" /* §.Ÿ‚ZXY.YYXW¥³¦ */
- $"07A4 AEF8 FFFF ED97 A4B2 A603 A59C 7C58" /* .¤®øÿÿí—¤²¦.¥œ|X */
- $"8359 0257 87A3 B4A4 01A1 E180 FF02 CB94" /* ƒY.W‡£´¤.¡á€ÿ.Ë” */
- $"A6B1 A403 A399 7657 8359 0254 80A1 B4A2" /* ¦±¤.£™vWƒY.T€¡´¢ */
- $"019D C180 FF03 FEA4 9BA3 B0A2 03A1 9672" /* .Á€ÿ.þ¤›£°¢.¡–r */
- $"5783 5902 547A 9FB4 A202 A0A6 F380 FF02" /* WƒY.TzŸ´¢. ¦ó€ÿ. */
- $"E192 A3B0 A203 A094 6D56 8359 0255 759D" /* á’£°¢. ”mVƒY.Uu */
- $"B5A0 019B D381 FF02 B495 A1AF A006 9D90" /* µ .›Óÿ.´•¡¯ . */
- $"6957 5959 0080 5902 546D 9BB1 9E00 9F80" /* iWYY.€Y.Tm›±ž.Ÿ€ */
- $"A002 9CAF FD80 FF02 EF93 9DAF 9E06 9B8C" /*  .œ¯ý€ÿ.ž.›Œ */
- $"6657 5959 0080 5902 5568 97B0 9D07 9F95" /* fWYY.€Y.Uh—°.Ÿ• */
- $"8A89 8B98 9CE2 81FF 02C3 8F9E AE9D 0699" /* Š‰‹˜œâÿ.Þ®.™ */
- $"8861 5759 5900 8059 0256 6494 AF9C 089D" /* ˆaWYY.€Y.Vd”¯œ. */
- $"8C9E D0DD C793 8CBC 81FF 02F7 9899 AE9C" /* ŒžÐÝÇ“Œ¼ÿ.÷˜™®œ */
- $"0697 855F 5859 5900 8059 0257 5E91 AF9B" /* .—…_XYY.€Y.W^‘¯› */
- $"0195 B781 FF03 F69B 96ED 81FF 02CE 8B9C" /* .•·ÿ.ö›–íÿ.΋œ */
- $"AD9B 0D95 815D 5859 5900 0059 5957 5B8C" /* ­›.•]XYY..YYW[Œ */
- $"98AD 9903 9889 9AD8 81FF 02E0 89C4 81FF" /* ˜­™.˜‰šØÿ.à‰Äÿ */
- $"02FD 9E93 AD99 0D93 7C5A 5859 5900 0059" /* .ýž“­™.“|ZXYY..Y */
- $"5958 5987 96AC 970C 9889 D3CE 88A1 E8FF" /* YXY‡–¬—.˜‰ÓΈ¡èÿ */
- $"FFF9 9B9D F481 FF02 D788 98AC 9702 9079" /* ÿù›ôÿ.׈˜¬—.y */
- $"5A80 5901 0000 8059 0255 8395 AB96 0D97" /* Z€Y...€Y.Uƒ•«–.— */
- $"8DA4 FFFF F6B2 84B4 F6FB A28E CC82 FF02" /* ¤ÿÿö²„´öû¢ŽÌ‚ÿ. */
- $"A28F 97AB 9601 8E75 8159 0100 0080 5902" /* ¢—«–.ŽuY...€Y. */
- $"547F 94AB 9502 9688 E481 FF07 E99E 8CBC" /* T.”«•.–ˆäÿ.鞌¼ */
- $"9991 A2F8 81FF 02DD 8896 AA95 0394 8D71" /* ™‘¢øÿ.݈–ª•.”q */
- $"5880 5901 0000 8059 0255 7993 AA94 0295" /* X€Y...€Y.Uy“ª”.• */
- $"87B4 84FF 05D4 8C93 948F D182 FF02 A68C" /* ‡´„ÿ.ÔŒ“”Ñ‚ÿ.¦Œ */
- $"95A9 9403 938A 6D57 8059 0700 0059 595A" /* •©”.“ŠmW€Y...YYZ */
- $"5374 91AA 9302 908C F284 FF06 DD92 9293" /* St‘ª“.Œò„ÿ.Ý’’“ */
- $"8FA4 FB81 FF01 E086 AA93 0391 876A 5780" /* ¤ûÿ.à†ª“.‘‡jW€ */
- $"5907 0000 5959 5A53 6F8F A991 0292 87CA" /* Y...YYZSo©‘.’‡Ê */
- $"84FF 02F8 A18D 8091 018D D782 FF02 A788" /* „ÿ.ø¡€‘.ׂÿ.§ˆ */
- $"92A8 9103 8F84 6757 8059 0100 0080 5902" /* ’¨‘.„gW€Y...€Y. */
- $"556B 8DA9 9002 8E85 DB84 FF01 C78A 8190" /* Uk©.Ž…Û„ÿ.ÇŠ */
- $"028B A8FE 81FF 01E2 84A9 9003 8E82 6357" /* .‹¨þÿ.â„©.Ž‚cW */
- $"8059 0100 0080 5902 5466 8CA8 9005 9186" /* €Y...€Y.TfŒ¨.‘† */
- $"AB85 A6EE 81FF 02EE 958E 8190 028F 8CDC" /* «…¦îÿ.î•Ž.ŒÜ */
- $"82FF 02AA 8591 A790 038D 7F62 5880 5901" /* ‚ÿ.ª…‘§..bX€Y. */
- $"0000 8059 0254 618A A78E 0C8F 84A5 FFF0" /* ..€Y.TaŠ§Ž.„¥ÿð */
- $"A480 BBF9 FFFF B688 838E 0189 A982 FF01" /* ¤€»ùÿÿ¶ˆƒŽ.‰©‚ÿ. */
- $"E583 A88E 038B 7C5F 5880 5901 0000 8059" /* 僨Ž.‹|_X€Y...€Y */
- $"0256 5F87 A78D 028C 83E8 80FF 06DF 9087" /* .V_‡§.Œƒè€ÿ.߇ */
- $"D4E0 8C8C 838D 028C 8ADE 82FF 02AB 838E" /* ÔàŒŒƒ.ŒŠÞ‚ÿ.«ƒŽ */
- $"A68D 038A 7A5D 5880 5901 0000 8059 0257" /* ¦.Šz]X€Y...€Y.W */
- $"5C84 A68C 028D 7EB7 83FF 03C9 8B8E 8B85" /* \„¦Œ.~·ƒÿ.É‹Ž‹… */
- $"8C01 87AA 82FF 01E6 82A7 8C03 8877 5C58" /* Œ.‡ª‚ÿ.悧Œ.ˆw\X */
- $"8059 0100 0080 5902 5757 81A6 8A02 878A" /* €Y...€Y.WW¦Š.‡Š */
- $"F584 FF01 CB83 868A 0289 88E0 82FF 02A8" /* õ„ÿ.˃†Š.‰ˆà‚ÿ.¨ */
- $"808B A58A 0386 735B 5880 5901 0000 8059" /* €‹¥Š.†s[X€Y...€Y */
- $"0258 557F A58A 028B 7BC9 84FF 02F6 9987" /* .XU.¥Š.‹{É„ÿ.ö™‡ */
- $"878A 0184 AB82 FF01 E580 A68A 0285 715A" /* ‡Š.„«‚ÿ.倦Š.…qZ */
- $"8159 0100 0081 5902 577B 88A3 8902 8A81" /* Y...Y.W{ˆ£‰.Š */
- $"9685 FF01 BF82 8889 0288 87E0 82FF 02A7" /* –…ÿ.¿‚ˆ‰.ˆ‡à‚ÿ.§ */
- $"7F8A A489 0183 6F82 5901 0000 8159 0254" /* .Š¤‰.ƒo‚Y...Y.T */
- $"7787 A488 017A DC84 FF02 EA8C 8689 8801" /* w‡¤ˆ.zÜ„ÿ.ꌆ‰ˆ. */
- $"82A9 82FF 01E3 7EA4 8802 8781 6C82 5901" /* ‚©‚ÿ.ã~¤ˆ.‡l‚Y. */
- $"0000 8159 0151 7497 860E 8784 8686 8486" /* ..Y.Qt—†.‡„††„† */
- $"8684 8685 8486 877B A685 FF11 AD7D 8685" /* †„†…„†‡{¦…ÿ.­}†… */
- $"8486 8584 8784 8487 8485 8783 83DF 82FF" /* „†…„‡„„‡„…‡ƒƒß‚ÿ */
- $"0FA4 7D87 8584 8785 8487 8485 8784 8586" /* .¤}‡…„‡…„‡„…‡„…† */
- $"8596 8602 7F69 5881 5901 0000 8059 035A" /* …–†..iXY...€Y.Z */
- $"5170 8496 850E 8182 7F7F 827F 8082 7E81" /* Qp„–….‚..‚.€‚~ */
- $"8280 837E EC84 FF12 DB7E 817F 8082 7E81" /* ‚€ƒ~ì„ÿ.Û~.€‚~ */
- $"827E 8182 7E82 817E 827B A682 FF10 E07B" /* ‚~‚~‚~‚{¦‚ÿ.à{ */
- $"8380 827E 8181 7E82 817E 8280 7F81 8494" /* ƒ€‚~~‚~‚€.„” */
- $"8503 847D 6758 8159 0100 0080 5903 5A53" /* ….„}gXY...€Y.ZS */
- $"6E84 9585 0E82 90FB BCAC FFA4 B9FF 9BD3" /* n„•….‚û¼¬ÿ¤¹ÿ›Ó */
- $"FC97 7BB9 84FF 14FC 91AA FFA8 BFFF 92D1" /* ü—{¹„ÿ.ü‘ªÿ¨¿ÿ’Ñ */
- $"FB92 E5ED 87F4 DC95 FFCB 73DF 82FF 0FA0" /* û’åí‡ôÜ•ÿËsß‚ÿ.  */
- $"79DC F889 E5ED 90F6 D88F FFC7 AAC2 7D94" /* yÜø‰åíöØÿǪÂ}” */
- $"8503 847C 6558 8159 0100 0080 5903 5A52" /* ….„|eXY...€Y.ZR */
- $"6983 9584 0E81 92FF BCAA FFC4 D2FF 96D4" /* iƒ•„.’ÿ¼ªÿÄÒÿ–Ô */
- $"FF9A 82F8 84FF 14C6 78CE FFA6 BFFF B6E4" /* ÿš‚ø„ÿ.ÆxÎÿ¦¿ÿ¶ä */
- $"FF8D E8F9 AFFE DE91 FFE3 899E 82FF 0FDB" /* ÿèù¯þÞ‘ÿ㉞‚ÿ.Û */
- $"74E2 FFB1 F3F0 8AFA E9B4 FFC8 A6C7 7C94" /* tâÿ±óðŠúé´ÿȦÇ|” */
- $"8403 8379 6258 8159 0100 0080 5903 5A51" /* „.ƒybXY...€Y.ZQ */
- $"6581 9582 047F 90FF D5C8 81FF 04BB E5F9" /* e•‚..ÿÕÈÿ.»åù */
- $"86CA 84FF 06F2 82D6 FFFF C6D6 80FF 02FC" /* †Ê„ÿ.ò‚ÖÿÿÆÖ€ÿ.ü */
- $"B5EF 80FF 06E9 B8FF FFFA 8AD6 82FF 0196" /* µï€ÿ.é¸ÿÿúŠÖ‚ÿ.– */
- $"C680 FF02 F4B4 FA80 FF03 DCC9 C57A 9482" /* Æ€ÿ.ô´ú€ÿ.ÜÉÅz”‚ */
- $"0381 7761 5881 5901 0000 8059 035A 5262" /* .waXY...€Y.ZRb */
- $"7F95 8102 7E8F FA85 FF01 B190 85FF 01AC" /* .•.~ú…ÿ.±…ÿ.¬ */
- $"9A90 FF01 C494 82FF 02D5 8DF9 87FF 01BF" /* šÿ.Ä”‚ÿ.Õù‡ÿ.¿ */
- $"7994 8103 8075 5F58 8159 0100 0081 5902" /* y”.€u_XY...Y. */
- $"5461 7D95 8002 7D8E FA84 FF02 E779 DD84" /* Ta}•€.}Žú„ÿ.çyÝ„ */
- $"FF02 E47C E690 FF02 FC8A D281 FF02 FC8C" /* ÿ.ä|æÿ.üŠÒÿ.üŒ */
- $"C787 FF01 BF77 9480 037E 725E 5881 5901" /* LJÿ.¿w”€.~r^XY. */
- $"0000 8159 0254 5D7C 957F 027C 8EFA 84FF" /* ..Y.T]|•..|Žú„ÿ */
- $"019C A285 FF01 97AD 92FF 01C7 8F80 FF04" /* .œ¢…ÿ.—­’ÿ.Ç€ÿ. */
- $"FBC0 748B F986 FF01 BE76 947F 037D 715C" /* ûÀt‹ù†ÿ.¾v”..}q\ */
- $"5881 5901 0000 8159 0254 597B 957F 027C" /* XY...Y.TY{•..| */
- $"8EFA 83FF 02D7 7BEF 84FF 02D1 7EF4 92FF" /* Žúƒÿ.×{ï„ÿ.Ñ~ô’ÿ */
- $"09FE 8CC9 F8CB 8C64 9F83 C386 FF01 BE76" /* ÆþŒÉøËŒdŸƒÃ†ÿ.¾v */
- $"947F 037C 6F5B 5881 5901 0000 8159 0355" /* ”..|o[XY...Y.U */
- $"5779 7E94 7D02 7A8C FA82 FF02 FD8A B884" /* Wy~”}.zŒú‚ÿ.ýŠ¸„ */
- $"FF02 FA86 C094 FF09 CF74 7C64 7FCB FFC0" /* ÿ.ú†À”ÿÆÏt|d.ËÿÀ */
- $"80F7 85FF 01BD 7494 7D02 7A6D 5B82 5901" /* €÷…ÿ.½t”}.zm[‚Y. */
- $"0000 8159 0256 5677 957C 0279 8BFA 82FF" /* ..Y.VVw•|.y‹ú‚ÿ */
- $"02C3 82FB 84FF 02BB 86FE 95FF 088C 99D5" /* .Âû„ÿ.»†þ•ÿ.Œ™Õ */
- $"FCFF FFFA 7FBC 85FF 01BD 7394 7C02 796B" /* üÿÿú.¼…ÿ.½s”|.yk */
- $"5A82 5901 0000 8159 0257 5575 957B 0277" /* Z‚Y...Y.WUu•{.w */
- $"8BFA 81FF 02F4 7DCE 84FF 02EE 7BD6 96FF" /* ‹úÿ.ô}΄ÿ.î{Ö–ÿ */
- $"01D0 A782 FF02 C47B F484 FF01 BC72 947B" /* .Ч‚ÿ.Ä{ô„ÿ.¼r”{ */
- $"0178 6983 5901 0000 8159 0258 5272 957A" /* .xiƒY...Y.XRr•z */
- $"0877 8AE8 EEEC ECF2 AA91 85FF 02A8 92F2" /* .wŠèîììòª‘…ÿ.¨’ò */
- $"95EC 03ED ED93 DC81 FF03 FD83 B2F2 82EC" /* •ì.íí“Üÿ.ýƒ²ò‚ì */
- $"02F3 B573 947A 0176 6783 5901 0000 8159" /* .óµs”z.vgƒY...Y */
- $"0258 5070 9679 007A 817F 027E 71E3 84FF" /* .XPp–y.z..~qã„ÿ */
- $"03DF 797F 8096 7F02 8078 A382 FF02 C970" /* .ßy.€–..€x£‚ÿ.Ép */
- $"8083 7F00 7D95 7902 7565 5882 5901 0000" /* €ƒ..}•y.ueX‚Y... */
- $"8159 0258 4F6F 9779 8077 0278 69AB 85FF" /* Y.XOo—y€w.xi«…ÿ */
- $"029B 7378 9977 0178 DF81 FF02 B468 7583" /* .›sx™w.xßÿ.´huƒ */
- $"7700 7895 7902 7464 5882 5901 0000 8259" /* w.x•y.tdX‚Y...‚Y */
- $"0150 6D9A 7802 747A F384 FF02 CD72 779A" /* .Pmšx.tzó„ÿ.Írwš */
- $"7808 71A0 FFFF D98C 8FC6 6D9C 7801 7363" /* x.q ÿÿÙŒÆmœx.sc */
- $"8359 0100 0082 5901 516B 9A77 016B C484" /* ƒY...‚Y.Qkšw.kÄ„ */
- $"FF02 F68A 729B 770A 7677 9B8A 80BD FDFF" /* ÿ.öŠr›wÂvw›Š€½ýÿ */
- $"9C6A 789A 7702 7261 5882 5901 0000 8159" /* œjxšw.raX‚Y...Y */
- $"035A 4F68 7598 7602 737B F184 FF01 B96E" /* .ZOhu˜v.s{ñ„ÿ.¹n */
- $"9D76 0371 85D7 FB80 FF02 F076 719A 7602" /* v.q…×û€ÿ.ðvqšv. */
- $"7060 5882 5901 0000 8159 035A 4E66 7498" /* p`X‚Y...Y.ZNft˜ */
- $"7504 7380 77C3 FE81 FF02 E97B 729D 7502" /* u.s€wÃþÿ.é{ru. */
- $"727F EF82 FF01 CD66 9A75 026F 5E58 8259" /* r.ï‚ÿ.Ífšu.o^X‚Y */
- $"0100 0081 5903 5A4D 6473 9774 0672 76EE" /* ...Y.ZMds—t.rvî */
- $"CC73 83DA 80FF 01A4 6C9F 7401 6CBE 83FF" /* ÌsƒÚ€ÿ.¤lŸt.l¾ƒÿ */
- $"02A5 6575 9874 026D 5C58 8259 0100 0081" /* .¥eu˜t.m\X‚Y... */
- $"5902 5A4D 6298 730B 6F82 FAFF F9AD 6A97" /* Y.ZMb˜s.o‚úÿù­j— */
- $"F1DC 7172 9F73 016D 9283 FF03 F981 6B74" /* ñÜqrŸs.m’ƒÿ.ùkt */
- $"9773 026C 5B58 8259 0100 0081 5902 5A4D" /* —s.l[X‚Y...Y.ZM */
- $"6098 7301 6C94 81FF 04EC 957B 8470 A073" /* `˜s.l”ÿ.ì•{„p s */
- $"0271 75E7 83FF 02DD 6972 9773 026B 5C58" /* .quçƒÿ.Ýir—s.k\X */
- $"8259 0100 0081 5902 5A50 5F98 7201 69A8" /* ‚Y...Y.ZP_˜r.i¨ */
- $"83FF 019B 69A2 7201 6ABF 84FF 02AF 6473" /* ƒÿ.›i¢r.j¿„ÿ.¯ds */
- $"9672 026A 5B58 8259 0100 0081 5903 5A51" /* –r.j[X‚Y...Y.ZQ */
- $"5D70 9771 0167 BD81 FF02 F6A1 6FA3 7101" /* ]p—q.g½ÿ.ö¡o£q. */
- $"6B94 84FF 02F7 7B6D 9671 0169 5A83 5901" /* k”„ÿ.÷{m–q.iZƒY. */
- $"0000 8159 035A 505B 6F97 7101 69D5 80FF" /* ..Y.ZP[o—q.iÕ€ÿ */
- $"03E8 8B68 70A3 7102 6F74 E984 FF02 BC65" /* .è‹hp£q.oté„ÿ.¼e */
- $"7294 7102 7067 5883 5901 0000 8159 035A" /* r”q.pgXƒY...Y.Z */
- $"5059 6F96 7007 6F6F E7FF FFD4 7A69 A670" /* PYo–p.ooçÿÿÔzi¦p */
- $"0168 BD84 FF02 EC71 6E94 7002 6F67 5883" /* .h½„ÿ.ìqn”p.ogXƒ */
- $"5901 0000 8159 035A 5058 6E96 6F06 6C79" /* Y...Y.ZPXn–o.ly */
- $"F7FF BD6E 6BA7 6F02 6A8B FD83 FF02 FC83" /* ÷ÿ½nk§o.j‹ýƒÿ.üƒ */
- $"6B94 6F02 6E66 5783 5901 0000 8159 035A" /* k”o.nfWƒY...Y.Z */
- $"5056 6D96 6E05 688E FBA5 676C A86E 026D" /* PVm–n.hŽû¥gl¨n.m */
- $"6AD0 83FF 02F5 7D6B 946E 026D 6456 8359" /* jЃÿ.õ}k”n.mdVƒY */
- $"0100 0081 5903 5A4F 556C 966D 0468 9294" /* ...Y.ZOUl–m.h’” */
- $"656C AA6D 0268 87F8 82FF 01BC 6995 6D02" /* elªm.h‡ø‚ÿ.¼i•m. */
- $"6C63 5683 5901 0000 8159 035A 5054 6C97" /* lcVƒY...Y.ZPTl— */
- $"6D01 6C68 AD6D 0866 9EF7 FFFF F3B1 6C6B" /* m.lh­m.fž÷ÿÿó±lk */
- $"956D 026C 6256 8359 0100 0081 5903 5A50" /* •m.lbVƒY...Y.ZP */
- $"546C CA6D 0667 81A6 9D7A 666C 966D 026C" /* TlÊm.g¦zfl–m.l */
- $"6256 8359 0100 0081 5903 5A51 536C CB6D" /* bVƒY...Y.ZQSlËm */
- $"0369 6565 6998 6D02 6C62 5783 5901 0000" /* .ieei˜m.lbWƒY... */
- $"8159 035A 5152 6AEA 6C02 6B61 5783 5901" /* Y.ZQRjêl.kaWƒY. */
- $"0000 8159 035A 5252 6AEA 6C02 6B61 5783" /* ..Y.ZRRjêl.kaWƒ */
- $"5901 0000 8159 035A 5252 6AEA 6C02 6B61" /* Y...Y.ZRRjêl.ka */
- $"5783 5901 0000 8159 035A 5352 6AEA 6C02" /* WƒY...Y.ZSRjêl. */
- $"6B61 5783 5900 0082 5903 5A54 5168 EA6B" /* kaWƒY..‚Y.ZTQhêk */
- $"0269 5E56 8359 0000 8359 0257 4D5E EA63" /* .i^VƒY..ƒY.WM^êc */
- $"0260 5756 8359 0100 0082 5902 5A55 53EA" /* .`WVƒY...‚Y.ZUSê */
- $"5601 5556 8459 0100 00FB 5901 0000 FB59" /* V.UV„Y...ûY...ûY */
- $"0100 00FB 5901 0000 FB59 0100 00FA 5981" /* ...ûY...ûY...úY */
- $"00F9 5982 00F7 5983 00F6 5986 00F3 59FF" /* .ùY‚.÷Yƒ.öY†.óYÿ */
- $"00FF 0000 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ...ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00DF 009F 7CD7 00A6 7CD3" /* .ÿ.ÿ.ÿ.ß.Ÿ|×.¦|Ó */
- $"0001 7C7C 8000 9D7B 847C D000 037C 7C00" /* ..||€.{„|Ð..||. */
- $"7C9F 7F01 7B7B 837C D000 027B 88A5 9EB0" /* |Ÿ..{{ƒ|Ð..{ˆ¥ž° */
- $"03AC 9D81 7B83 7CCD 0004 7C00 81B3 D09E" /* .¬{ƒ|Í..|.³Ðž */
- $"D302 D0C3 A184 7CCD 0004 7C00 8FCA D79F" /* Ó.Ðá„|Í..|.Êן */
- $"D803 CEB4 837A 827C CD00 037C 0095 CEA0" /* Ø.δƒz‚|Í..|.•Î  */
- $"D803 D1B7 847A 827C CC00 047C 7C78 9BD0" /* Ø.Ñ·„z‚|Ì..||x›Ð */
- $"A0D7 03D1 B884 7A83 7CCB 0004 7C7C 79A8" /*  ×.Ѹ„zƒ|Ë..||y¨ */
- $"D3A0 D703 D2BC 867A B87C 9500 057C 7C00" /* Ó ×.Ò¼†z¸|•..||. */
- $"81BD D5A0 D603 D3C3 9278 BA7C 9200 067C" /* ½Õ Ö.ÓÃ’xº|’..| */
- $"7C00 799D CED5 A0D6 04D4 CBAC 7D79 BA7C" /* |.yÎÕ Ö.Ôˬ}yº| */
- $"9000 067C 7C00 7B97 C5D3 A2D5 03D1 C4A3" /* ..||.{—ÅÓ¢Õ.ÑÄ£ */
- $"8280 7AB4 7B03 007B 7C7C 8E00 077C 7C00" /* ‚€z´{..{||Ž..||. */
- $"81A4 C8D2 D4A2 D505 D4D0 C8B7 A69F B19E" /* ¤ÈÒÔ¢Õ.ÔÐÈ·¦Ÿ±ž */
- $"079F 9F9E 9D94 8100 7C8D 0007 7C7C 0081" /* .ŸŸž”.|..||. */
- $"ADCD D3D3 A4D4 03D3 D2D0 CE80 CCB2 CB03" /* ­ÍÓÓ¤Ô.ÓÒÐ΀̲Ë. */
- $"C7B9 9500 807C 8900 817C 037A 98C6 CDE2" /* ǹ•.€|‰.|.z˜ÆÍâ */
- $"CE03 CCBE 9B7A 827C 8600 017C 7C80 0002" /* Î.̾›z‚|†..||€.. */
- $"7697 B181 B403 B5B5 B4B4 9EB5 01B4 B4B6" /* v—±´.µµ´´žµ.´´¶ */
- $"B506 B4B4 B3AA 9177 7980 0001 7C7C 8400" /* µ.´´³ª‘wy€..||„. */
- $"097C 0078 7D87 8B8B 8D94 95E2 960A 9592" /* Æ|.x}‡‹‹”•â–•’ */
- $"8E8C 8B8B 867D 007C 7C82 0009 7C00 7892" /* ŽŒ‹‹†}.||‚.Æ|.x’ */
- $"B5C1 C4C5 C6C6 81C7 03C6 C6C7 C79E C601" /* µÁÄÅÆÆÇ.ÆÆÇÇžÆ. */
- $"C7C7 82C6 01C7 C7AC C683 C70A C6C6 C4C3" /* ÇÇ‚Æ.ÇǬƃÇÂÆÆÄà */
- $"C3BD AB8C 7A7C 7C82 0005 7893 C5CE CFD0" /* ý«Œz||‚..x“ÅÎÏÐ */
- $"E9CF 08D0 D0CF CEC9 B58B 007C 8000 047C" /* éÏ.ÐÐÏÎɵ‹.|€..| */
- $"0080 B9CE F0D0 0CCF C5A7 7E00 7C00 007C" /* .€¹ÎðÐ.Ïŧ~.|..| */
- $"008F C5CE B3CF 03D0 CDCF D0B7 CF0A C9B2" /* .ÅγÏ.ÐÍÏзÏÂɲ */
- $"8600 7C00 007C 7894 C6B3 CF05 D0CB BEBA" /* †.|..|x”ƳÏ.Ð˾º */
- $"CCD0 B6CF 0ACA B487 007C 007C 7C00 8FC4" /* ÌжÏÂÊ´‡.|.||.Ä */
- $"B4CE 05C9 F2ED B9CC CFB5 CE0B C8B1 8400" /* ´Î.Éòí¹ÌϵÎ.ȱ„. */
- $"7C00 7C7C 0089 C0CC B3CD 05CC F3FF E7B9" /* |.||.‰À̳Í.Ìóÿç¹ */
- $"CEB5 CD0B C5AC 817B 7C00 7C7C 0085 BCCB" /* εÍ.Ŭ{|.||.…¼Ë */
- $"B3CC 06C9 EAFF FFD8 BDCE B4CC 0BC4 A77D" /* ³Ì.ÉêÿÿؽδÌ.ħ} */
- $"7B7C 007C 7C00 81B6 CAB3 CC01 C9DC 80FF" /* {|.||.¶Ê³Ì.ÉÜ€ÿ */
- $"02C6 C4CD B2CC 0DCB C1A3 7D7B 7C00 7C7C" /* .ÆÄͲÌ.ËÁ£}{|.|| */
- $"7B7D B1C9 CBB2 CA07 C9CF FBFF FFF1 BACB" /* {}±É˲Ê.ÉÏûÿÿñºË */
- $"B2CA 03C9 BE9D 7B83 7C02 7BAB C8B4 CA01" /* ²Ê.ɾ{ƒ|.{«È´Ê. */
- $"C8ED 80FF 02D9 BCCB B1CA 03C9 BC98 7A83" /* Èí€ÿ.ټ˱Ê.ɼ˜zƒ */
- $"7C02 7AA5 C6B4 C901 C6DA 80FF 03FD C1C4" /* |.z¥Æ´É.ÆÚ€ÿ.ýÁÄ */
- $"CAB0 C903 C7B9 957A 837C 0279 9FC4 B4C8" /* Ê°É.ǹ•zƒ|.yŸÄ´È */
- $"02C7 CAF7 80FF 02E8 B8C9 B0C8 03C5 B68F" /* .ÇÊ÷€ÿ.è¸É°È.Ŷ */
- $"7A83 7C02 799A C2B5 C701 C4E4 81FF 02CA" /* zƒ|.yšÂµÇ.Ääÿ.Ê */
- $"BFC8 AFC7 06C4 B38B 7A7C 7C00 807C 0278" /* ¿È¯Ç.ij‹z||.€|.x */
- $"93C0 B1C6 00C7 80C8 02C4 CFFD 80FF 01F2" /* “À±Æ.Ç€È.ÄÏý€ÿ.ò */
- $"B8B0 C606 C2AF 897A 7C7C 0080 7C02 798F" /* ¸°Æ.¯‰z||.€|.y */
- $"BEB0 C607 C8C0 B4B2 B6C3 C6ED 81FF 02D4" /* ¾°Æ.ÈÀ´²¶ÃÆíÿ.Ô */
- $"BBC7 AEC6 06C1 AC84 7A7C 7C00 807C 0279" /* »Ç®Æ.Á¬„z||.€|.y */
- $"8BBB AFC5 08C6 B6BA DCE5 D5B3 BAD8 81FF" /* ‹»¯Å.ƶºÜåÕ³ºØÿ */
- $"02F9 BBC4 AEC5 06C0 A982 7B7C 7C00 807C" /* .ù»Ä®Å.À©‚{||.€| */
- $"027A 85B7 AEC4 02C5 C1CE 81FF 03F7 BAC1" /* .z…·®Ä.ÅÁÎÿ.÷ºÁ */
- $"F481 FF02 DCB7 C6AD C40D BDA5 817B 7C7C" /* ôÿ.Ü·Æ­Ä.½¥{|| */
- $"0000 7C7C 7A83 B4C3 ADC4 03C3 B3BE E981" /* ..||zƒ´Ã­Ä.ó¾é */
- $"FF02 E8B6 DC81 FF02 FDBE C0AD C40D BCA1" /* ÿ.è¶Üÿ.ý¾À­Ä.¼¡ */
- $"7E7B 7C7C 0000 7C7C 7B80 B0C2 ACC3 0CC4" /* ~{||..||{€°Â¬Ã.Ä */
- $"B5DD DAAE C4F2 FFFF FAC2 C5F8 81FF 02E2" /* µÝÚ®ÄòÿÿúÂÅøÿ.â */
- $"B5C4 ACC3 01B9 9D81 7C07 0000 7C7C 7B7C" /* µÄ¬Ã.¹|...||{| */
- $"ABC0 ABC1 0DC2 BCC1 FFFF F7C7 ACD0 FBFC" /* «À«Á.¼Áÿÿ÷ǬÐûü */
- $"C7BC E082 FF02 C0BD C2AB C101 B79A 817C" /* Ǽà‚ÿ.À½Â«Á.·š| */
- $"0100 0080 7C02 7BA7 BFAB C102 C2B2 EB81" /* ...€|.{§¿«Á.²ë */
- $"FF07 EDB9 B3D7 C3BF C7FA 81FF 02E6 B3C2" /* ÿ.í¹³×ÿÇúÿ.æ³Â */
- $"AAC1 03C0 B595 7B80 7C01 0000 807C 027A" /* ªÁ.Àµ•{€|...€|.z */
- $"A3BE AAC0 02C1 B6CA 84FF 05DE B8C0 C0BD" /* £¾ªÀ.Á¶Ê„ÿ.Þ¸ÀÀ½ */
- $"E382 FF02 C2BA C1A9 C003 BFB2 927A 807C" /* ã‚ÿ.ºÁ©À.¿²’z€| */
- $"0100 0080 7C02 789D BCAA BF02 BEB3 F584" /* ...€|.x¼ª¿.¾³õ„ */
- $"FF06 EBBF BEBF BDC9 FC81 FF02 E8B2 C0A9" /* ÿ.뿾¿½Éüÿ.è²À© */
- $"BF03 BEB0 8F7A 807C 0100 0080 7C02 7898" /* ¿.¾°z€|...€|.x˜ */
- $"BAA9 BE02 BFB5 D984 FF02 FBC7 BC80 BE01" /* º©¾.¿µÙ„ÿ.ûǼ€¾. */
- $"BBE7 82FF 02C3 B7BF A8BE 03BC AD8B 7A80" /* »ç‚ÿ.÷¿¨¾.¼­‹z€ */
- $"7C01 0000 807C 0278 95B9 A9BD 02BC B3E9" /* |...€|.x•¹©½.¼³é */
- $"84FF 01DD B981 BD02 BACB FE81 FF02 EAB0" /* „ÿ.ݹ½.ºËþÿ.ê° */
- $"BEA8 BD03 BAAA 887A 807C 0100 0080 7C02" /* ¾¨½.ºªˆz€|...€|. */
- $"7890 B8A8 BD05 BEB2 C1AC C7F6 81FF 02F4" /* x¸¨½.¾²Á¬Çöÿ.ô */
- $"C0BC 82BD 01BB EA82 FF02 C4B6 BEA7 BD03" /* À¼‚½.»ê‚ÿ.Ķ¾§½. */
- $"BAA8 867A 807C 0100 0080 7C02 788B B5A7" /* º¨†z€|...€|.x‹µ§ */
- $"BC0C BDB5 C1FF F2BD AAD5 FCFF FFD3 B983" /* ¼.½µÁÿò½ªÕüÿÿÓ¹ƒ */
- $"BC01 B9CC 82FF 02EB AFBD A7BC 03B8 A584" /* ¼.¹Ì‚ÿ.믽§¼.¸¥„ */
- $"7B80 7C01 0000 807C 0279 88B3 A8BC 01AE" /* {€|...€|.yˆ³¨¼.® */
- $"ED80 FF06 E5B1 B1E6 ECBB BB84 BC01 B9EB" /* í€ÿ.å±±æì»»„¼.¹ë */
- $"82FF 02C5 B4BD A6BC 03B7 A381 7B80 7C01" /* ‚ÿ.Å´½¦¼.·£{€|. */
- $"0000 807C 027A 85B1 A6BB 02BC AFCC 82FF" /* ..€|.z…±¦».¼¯Ì‚ÿ */
- $"04FE D6AF BBBA 85BB 01B7 CC82 FF02 ECAE" /* .þÖ¯»º…».·Ì‚ÿ.ì® */
- $"BCA6 BB03 B5A0 807B 807C 0100 0080 7C03" /* ¼¦».µ €{€|...€|. */
- $"7A80 ADB9 A5BA 02B8 B0F7 84FF 01DE B486" /* z€­¹¥º.¸°÷„ÿ.Þ´† */
- $"BA02 B9B8 EB82 FF02 C3B2 BBA5 BA03 B39C" /* º.¹¸ë‚ÿ.ò»¥º.³œ */
- $"7F7B 807C 0100 0080 7C03 7B7E AAB7 A4B8" /* .{€|...€|.{~ª·¤¸ */
- $"02BA ABD8 84FF 02F9 C1B6 87B8 01B5 CC82" /* .º«Ø„ÿ.ùÁ¶‡¸.µÌ‚ */
- $"FF02 EBAC B9A5 B803 B199 7D7B 807C 0100" /* ÿ.묹¥¸.±™}{€|.. */
- $"0080 7C03 7B7D A7B6 A4B7 02B2 B7FE 84FF" /* .€|.{}§¶¤·.²·þ„ÿ */
- $"01D7 B388 B702 B6B6 EB82 FF02 C2B0 B8A4" /* .׳ˆ·.¶¶ë‚ÿ.°¸¤ */
- $"B701 AF96 827C 0100 0081 7C02 7BA3 B5A3" /* ·.¯–‚|...|.{£µ£ */
- $"B602 B7A8 E584 FF02 F1B8 B589 B601 B3CA" /* ¶.·¨å„ÿ.ñ¸µ‰¶.³Ê */
- $"82FF 02EA AAB7 A4B6 01AD 9382 7C01 0000" /* ‚ÿ.ꪷ¤¶.­“‚|... */
- $"817C 0278 9FB4 97B5 0DB4 B5B6 B4B6 B5B4" /* |.xŸ´—µ.´µ¶´¶µ´ */
- $"B6B5 B4B6 B6AD C085 FF11 CCB0 B6B5 B4B6" /* ¶µ´¶¶­À…ÿ.Ì°¶µ´¶ */
- $"B5B4 B6B5 B4B6 B4B5 B6B3 B4EB 82FF 0EC0" /* µ´¶µ´¶´µ¶³´ë‚ÿ.À */
- $"AFB6 B5B4 B6B4 B4B6 B4B5 B6B4 B5B6 97B5" /* ¯¶µ´¶´´¶´µ¶´µ¶—µ */
- $"01AB 9082 7C01 0000 817C 0278 9CB3 95B5" /* .«‚|...|.xœ³•µ */
- $"0FB6 AFA7 A9AA A7AA AAA7 ABA9 A7AC B1A9" /* .¶¯§©ª§ªª§«©§¬±© */
- $"F084 FF12 E9AA A6AA AAA7 ABA9 A7AB A8A8" /* ð„ÿ.骦ªª§«©§«¨¨ */
- $"ACA8 A8AB A7A5 C882 FF0F E8A8 B2A8 A8AB" /* ¬¨¨«§¥È‚ÿ.訲¨¨« */
- $"A8A8 ACA8 A9AC A7A9 AAAB 95B5 03B4 A98E" /* ¨¨¬¨©¬§©ª«•µ.´©Ž */
- $"7B81 7C01 0000 817C 0278 99B2 95B4 0EB3" /* {|...|.x™²•´.³ */
- $"B7F9 D2C7 FFC1 CEFF BCE1 FABB AACD 84FF" /* ·ùÒÇÿÁÎÿ¼áú»ªÍ„ÿ */
- $"14FD BAC6 FFC5 D3FF B7DF F9B7 EBF2 B0F6" /* .ýºÆÿÅÓÿ·ßù·ëò°ö */
- $"E6B9 FDDA A7EB 82FF 0FBD AAE6 F8B0 EBF1" /* æ¹ýÚ§ë‚ÿ.½ªæø°ëñ */
- $"B5F7 E3B4 FED9 C5D5 AF94 B403 B3A7 8B7B" /* µ÷ã´þÙÅÕ¯”´.³§‹{ */
- $"817C 0100 0081 7C02 7794 B195 B30E B1B9" /* |...|.w”±•³.±¹ */
- $"FFD2 C7FF D3DE FFBA E3FF BDAA F984 FF14" /* ÿÒÇÿÓÞÿºãÿ½ªù„ÿ. */
- $"DBA2 DAFF C4D4 FFCA EBFE B4EF FBC4 FEE9" /* Û¢ÚÿÄÔÿÊëþ´ïûÄþé */
- $"B6FF EAAB C082 FF0F E4A3 ECFF C5F6 F5B2" /* ¶ÿê«À‚ÿ.ä£ìÿÅöõ² */
- $"FBEF C8FF DAC4 DAAE 94B3 03B2 A589 7B81" /* ûïÈÿÚÄÚ®”³.²¥‰{ */
- $"7C01 0000 807C 037D 7690 AE95 B104 AFB7" /* |...€|.}v®•±.¯· */
- $"FFE0 D681 FF04 CDEC FCAE D884 FF06 F7AC" /* ÿàÖÿ.Íìü®Ø„ÿ.÷¬ */
- $"E0FF FFD4 E180 FF02 FDC9 F380 FF06 EFCA" /* àÿÿÔá€ÿ.ýÉó€ÿ.ïÊ */
- $"FFFF FAAE E582 FF01 B6DA 80FF 02F7 C7FB" /* ÿÿú®å‚ÿ.¶Ú€ÿ.÷Çû */
- $"80FF 03E5 D6D9 AC94 B103 B0A2 877B 817C" /* €ÿ.åÖÙ¬”±.°¢‡{| */
- $"0100 0081 7C02 768D AC95 B002 AEB7 FB85" /* ...|.v¬•°.®·û… */
- $"FF01 CDB1 85FF 01C9 B890 FF01 D5B8 82FF" /* ÿ.ͱ…ÿ.ɸÿ.Õ¸‚ÿ */
- $"02E0 B3FC 87FF 01D5 AA94 B003 AE9F 857B" /* .à³ü‡ÿ.Õª”°.®Ÿ…{ */
- $"817C 0100 0081 7C02 788A AB95 AF02 ADB6" /* |...|.xŠ«•¯.­¶ */
- $"FB84 FF02 F0A5 E584 FF02 EEA6 EC90 FF02" /* û„ÿ.ð¥å„ÿ.î¦ìÿ. */
- $"FCAE E281 FF02 FCB4 DB87 FF01 D5A9 94AF" /* ü®âÿ.ü´Û‡ÿ.Õ©”¯ */
- $"03AC 9D83 7B81 7C01 0000 817C 0278 86A9" /* .¬ƒ{|...|.x†© */
- $"95AD 02AB B4FB 84FF 01BE BD85 FF01 BAC3" /* •­.«´û„ÿ.¾½…ÿ.ºÃ */
- $"92FF 01D6 B480 FF04 FCD8 A4B3 FB86 FF01" /* ’ÿ.Ö´€ÿ.üؤ³û†ÿ. */
- $"D4A7 94AD 03AB 9A81 7B81 7C01 0000 817C" /* Ô§”­.«š{|...| */
- $"0278 83A7 95AC 02AA B3FB 83FF 02E5 A3F2" /* .xƒ§•¬.ª³ûƒÿ.å£ò */
- $"84FF 02E1 A5F6 92FF 09FD AEDC FBDE B595" /* „ÿ.á¥ö’ÿÆý®ÜûÞµ• */
- $"B6A9 D886 FF01 D3A6 94AC 03A9 9880 7B81" /* ¶©Ø†ÿ.Ó¦”¬.©˜€{ */
- $"7C01 0000 817C 0278 80A5 95AC 02AA B3FB" /* |...|.x€¥•¬.ª³û */
- $"82FF 02FE B0CB 84FF 02FC ADD0 94FF 09DB" /* ‚ÿ.þ°Ë„ÿ.ü­Ð”ÿÆÛ */
- $"A1A8 95A2 D6FF D1AA FA85 FF01 D3A6 94AC" /* ¡¨•¢ÖÿѪú…ÿ.Ó¦”¬ */
- $"03A8 967F 7B81 7C01 0000 817C 0279 7FA3" /* .¨–.{|...|.y.£ */
- $"95AB 02A9 B2FB 82FF 02D7 A7FB 84FF 02D2" /* •«.©²û‚ÿ.קû„ÿ.Ò */
- $"AAFD 95FF 08AD B4DD FCFF FFFA A5D3 85FF" /* ªý•ÿ.­´Ýüÿÿú¥Ó…ÿ */
- $"01D3 A594 AB03 A694 7E7B 817C 0100 0081" /* .Ó¥”«.¦”~{|... */
- $"7C02 7A7D A095 A902 A7B1 FB81 FF02 F8A5" /* |.z} •©.§±ûÿ.ø¥ */
- $"DA84 FF02 F4A4 E096 FF01 DCC2 82FF 02D3" /* Ú„ÿ.ô¤à–ÿ.Ü‚ÿ.Ó */
- $"A5F8 84FF 01D2 A394 A902 A491 7D82 7C01" /* ¥ø„ÿ.Ò£”©.¤‘}‚|. */
- $"0000 817C 027A 7A9E 95A8 08A6 B1EF F3F2" /* ..|.zzž•¨.¦±ïóò */
- $"F2F6 C6B0 85FF 02C5 B4F5 95F2 03F3 F2B5" /* òöÆ°…ÿ.Å´õ•ò.óòµ */
- $"E881 FF03 FCA7 CCF6 82F2 02F7 CDA3 94A8" /* èÿ.ü§Ìö‚ò.÷Í£”¨ */
- $"01A3 8F83 7C01 0000 817C 027B 779C 96A7" /* .£ƒ|...|.{wœ–§ */
- $"00A8 82AB 019C E984 FF03 E9A6 AAAC 96AB" /* .¨‚«.œé„ÿ.馪¬–« */
- $"02AC A6C1 82FF 02D8 A0AC 83AB 00A9 95A7" /* .¬¦Á‚ÿ.Ø ¬ƒ«.©•§ */
- $"01A1 8D83 7C01 0000 817C 037B 7699 A595" /* .¡ƒ|...|.{v™¥• */
- $"A600 A580 A402 A599 C085 FF02 BCA1 A599" /* ¦.¥€¤.¥™À…ÿ.¼¡¥™ */
- $"A401 A5E9 81FF 02CB 96A3 83A4 00A5 95A6" /* ¤.¥éÿ.Ë–£ƒ¤.¥•¦ */
- $"029F 8A7B 827C 0100 0082 7C02 7596 A399" /* .ŸŠ{‚|...‚|.u–£™ */
- $"A402 A29F F584 FF01 DDA0 9BA4 09A0 BFFF" /* ¤.¢Ÿõ„ÿ.Ý ›¤Æ ¿ÿ */
- $"FFE6 ADAB D299 A59B A402 9D88 7B82 7C01" /* ÿæ­«Ò™¥›¤.ˆ{‚|. */
- $"0000 827C 0276 94A2 98A3 02A4 98D1 84FF" /* ..‚|.v”¢˜£.¤˜Ñ„ÿ */
- $"02F9 AFA0 9CA3 09A4 B9A9 A0CB FCFF B599" /* .ù¯ œ£Æ¤¹© Ëüÿµ™ */
- $"A49A A302 9C87 7B82 7C01 0000 827C 0275" /* ¤š£.œ‡{‚|...‚|.u */
- $"92A2 98A3 02A1 A4F5 84FF 01CF 9E9D A303" /* ’¢˜£.¡¤õ„ÿ.Ïž£. */
- $"A0A9 DEFB 80FF 02F3 9CA0 9AA3 029B 867B" /*  ©Þû€ÿ.󜠚£.›†{ */
- $"827C 0100 0081 7C03 7D74 8FA1 97A2 05A3" /* ‚|...|.}t¡—¢.£ */
- $"9FA0 9ED6 FE81 FF02 F0A6 A09D A202 A0A9" /* Ÿ žÖþÿ.𦠢. © */
- $"F382 FF01 D893 9AA2 0299 837B 827C 0100" /* ó‚ÿ.Ø“š¢.™ƒ{‚|.. */
- $"0081 7C03 7D73 8D9F 97A0 069F 9FF1 D697" /* .|.}sŸ— .ŸŸñÖ— */
- $"A6E6 80FF 01C1 9B9F A001 9BD2 83FF 02BB" /* ¦æ€ÿ.Á›Ÿ .›Òƒÿ.» */
- $"94A1 98A0 0297 827B 827C 0100 0081 7C03" /* ”¡˜ .—‚{‚|...|. */
- $"7D72 8A9E 979F 0B9D A6FB FFF9 BF91 B6F6" /* }rŠž—Ÿ.¦ûÿù¿‘¶ö */
- $"E69E 9E9F 9F01 9BB4 83FF 03FA A199 A096" /* æžžŸŸ.›´ƒÿ.ú¡™ – */
- $"9F03 9E95 807B 827C 0100 0081 7C03 7D72" /* Ÿ.ž•€{‚|...|.}r */
- $"889D 979E 0199 B281 FF04 EFAD 9EA9 9CA0" /* ˆ—ž.™²ÿ.ï­ž©œ  */
- $"9E02 9D9F EE83 FF01 E492 979E 039D 9480" /* ž.Ÿîƒÿ.ä’—ž.”€ */
- $"7B82 7C01 0000 817C 037D 7487 9B97 9D01" /* {‚|...|.}t‡›—. */
- $"96BF 82FF 02FE B697 A29D 0198 D184 FF02" /* –¿‚ÿ.þ¶—¢.˜Ñ„ÿ. */
- $"C191 9E95 9D03 9C92 7F7B 827C 0100 0081" /* Á‘ž•.œ’.{‚|... */
- $"7C03 7D75 849A 979C 0194 CE81 FF02 F8BD" /* |.}u„š—œ.”Îÿ.ø½ */
- $"9BA3 9C01 98B4 84FF 02F8 9D99 959C 039B" /* ›£œ.˜´„ÿ.ø™•œ.› */
- $"907E 7B82 7C01 0000 817C 037D 7482 9997" /* ~{‚|...|.}t‚™— */
- $"9B01 94DF 80FF 03EE AD95 9AA3 9B02 9A9D" /* ›.”߀ÿ.î­•š£›.š */
- $"EF84 FF02 CC91 9C94 9B03 9A8F 7C7B 827C" /* ï„ÿ.Ì‘œ”›.š|{‚| */
- $"0100 0081 7C03 7D74 8098 979A 0697 ECFF" /* ...|.}t€˜—š.—ìÿ */
- $"FFE0 A195 A69A 0195 D084 FF02 F098 9994" /* ÿà¡•¦š.•Ð„ÿ.𘙔 */
- $"9A02 998D 7B83 7C01 0000 817C 037D 737E" /* š.™{ƒ|...|.}s~ */
- $"9896 9A06 989F F9FF D099 97A7 9A02 96AD" /* ˜–š.˜ŸùÿЙ—§š.–­ */
- $"FD83 FF02 FCA6 9794 9A02 998D 7B83 7C01" /* ýƒÿ.ü¦—”š.™{ƒ|. */
- $"0000 817C 037D 737D 9796 9905 95AD FCBE" /* ..|.}s}—–™.•­ü¾ */
- $"9498 A999 0196 DD83 FF02 F7A3 9794 9902" /* ”˜©™.–݃ÿ.÷£—”™. */
- $"988C 7A83 7C01 0000 817C 037D 737B 9696" /* ˜Œzƒ|...|.}s{–– */
- $"9803 95B0 B392 AB98 0294 AAF9 82FF 01CF" /* ˜.•°³’«˜.”ªù‚ÿ.Ï */
- $"9595 9802 978A 7A83 7C01 0000 817C 037D" /* ••˜.—Šzƒ|...|.} */
- $"747B 9498 9700 94AD 9708 93B9 F9FF FFF6" /* t{”˜—.”­—.“¹ùÿÿö */
- $"C797 9695 9702 9688 7983 7C01 0000 817C" /* Ç—–•—.–ˆyƒ|...| */
- $"037D 7479 93CA 9606 92A4 BEB8 9F91 9596" /* .}ty“Ê–.’¤¾¸Ÿ‘•– */
- $"9602 9588 7983 7C01 0000 817C 037D 7478" /* –.•ˆyƒ|...|.}tx */
- $"93CB 9603 9390 9193 9896 0294 8779 837C" /* “Ë–.“‘“˜–.”‡yƒ| */
- $"0100 0081 7C03 7D75 7892 EA95 0293 8679" /* ...|.}ux’ê•.“†y */
- $"837C 0100 0081 7C03 7D75 7892 EA95 0293" /* ƒ|...|.}ux’ê•.“ */
- $"8679 837C 0100 0081 7C03 7D76 7792 EA95" /* †yƒ|...|.}vw’ê• */
- $"0293 8679 837C 0100 0081 7C03 7D76 7792" /* .“†yƒ|...|.}vw’ */
- $"EA95 0293 8579 837C 0000 827C 037D 7776" /* ê•.“…yƒ|..‚|.}wv */
- $"8FEA 9402 9182 7883 7C00 0083 7C03 7A70" /* ê”.‘‚xƒ|..ƒ|.zp */
- $"8288 E989 0285 7A79 837C 0100 0082 7C02" /* ‚ˆé‰.…zyƒ|...‚|. */
- $"7D78 76EA 7901 7779 847C 0100 00FB 7C01" /* }xvêy.wy„|...û|. */
- $"0000 FB7C 0100 00FB 7C01 0000 FB7C 0100" /* ..û|...û|...û|.. */
- $"00FA 7C81 00F9 7C82 00F7 7C83 00F6 7C86" /* .ú|.ù|‚.÷|ƒ.ö|† */
- $"00F3 7CFF 00FF 0000 00FF 00FF 00FF 00FF" /* .ó|ÿ.ÿ...ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 74D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.Ÿt× */
- $"00A6 74D3 0001 7474 8000 9D73 8474 D000" /* .¦tÓ..tt€.s„tÐ. */
- $"0374 7400 749E 7702 7673 7283 74D0 0003" /* .tt.tžw.vsrƒtÐ.. */
- $"7381 9FAB 9DAC 03A8 977A 7383 74CD 0004" /* sŸ«¬.¨—zsƒtÍ.. */
- $"7400 79AF CC9E CF03 CCBF 9B73 8374 CD00" /* t.y¯ÌžÏ.Ì¿›sƒtÍ. */
- $"0474 0088 C6D2 9FD3 03CA AF7C 7282 74CD" /* .t.ˆÆÒŸÓ.ʯ|r‚tÍ */
- $"0003 7400 8EC9 A0D3 03CC B27D 7282 74CC" /* ..t.ŽÉ Ó.̲}r‚tÌ */
- $"0004 7474 7094 CBA0 D203 CCB3 7C72 8374" /* ..ttp”Ë Ò.̳|rƒt */
- $"CB00 0474 7471 A1CE A0D1 03CC B67F 72B8" /* Ë..ttq¡Î Ñ.̶.r¸ */
- $"7495 0005 7474 0078 B7D0 A0D1 03CE BE8B" /* t•..tt.x·Ð Ñ.ξ‹ */
- $"70BA 7492 0006 7474 0070 96C9 CFA0 D004" /* pºt’..tt.p–ÉÏ Ð. */
- $"CFC6 A675 71BA 7490 0006 7474 0072 8FC0" /* ÏƦuqºt..tt.rÀ */
- $"CDA2 CF03 CBBF 9D7A B672 0473 0073 7474" /* Í¢Ï.Ë¿z¶r.s.stt */
- $"8E00 0674 7400 799D C3CD A3CF 04CE CAC3" /* Ž..tt.yÃÍ£Ï.ÎÊà */
- $"B2A0 B598 0496 8D79 0074 8D00 0774 7400" /* ² µ˜.–y.t..tt. */
- $"79A8 C8CE CEA4 CF03 CECD CBC9 B5C7 03C3" /* y¨ÈÎΤÏ.ÎÍËɵÇ.à */
- $"B58F 0080 7489 0081 7403 7192 C1C8 E2C9" /* µ.€t‰.t.q’ÁÈâÉ */
- $"03C7 B995 7282 7486 0001 7474 8000 026E" /* .ǹ•r‚t†..tt€..n */
- $"91AC E3AF 04AE A58A 6F71 8000 0174 7484" /* ‘¬ã¯.®¥Šoq€..tt„ */
- $"0008 7400 7075 8085 8487 8E80 8FAA 9000" /* ..t.pu€…„‡Ž€ª. */
- $"8FB0 9080 8F09 8B87 8584 847F 7600 7474" /* °€Æ‹‡…„„.v.tt */
- $"8200 0774 0070 8BAF BCBF C0E7 C109 C0BF" /* ‚..t.p‹¯¼¿ÀçÁÆÀ¿ */
- $"BEBE B8A6 8572 7474 8200 0370 8DC0 C9EE" /* ¾¾¸¦…rtt‚..pÀÉî */
- $"CA05 C9C4 B185 0074 8000 0474 0078 B4C8" /* Ê.Éı….t€..t.x´È */
- $"F0CA 0CC9 BFA1 7600 7400 0074 0088 BFC8" /* ðÊ.É¿¡v.t..t.ˆ¿È */
- $"B3C9 03CA C7C9 CAB7 C90A C3AD 7F00 7400" /* ³É.ÊÇÉÊ·ÉÂí..t. */
- $"0074 708C C0B3 C805 C9C3 B8B3 C4C9 B6C8" /* .tpŒÀ³È.Éø³ÄÉ¶È */
- $"0AC3 AE7F 0074 0074 7400 88BD B4C7 05C2" /* Âî..t.tt.ˆ½´Ç. */
- $"F1EC B2C4 C8B5 C70B C1AB 7C00 7400 7474" /* ñì²ÄȵÇ.Á«|.t.tt */
- $"0082 BAC6 B3C7 04C6 F2FF E6B3 B6C7 0BC0" /* .‚ºÆ³Ç.Æòÿ泶Ç.À */
- $"A67A 7374 0074 7400 7DB5 C5B3 C606 C3E7" /* ¦zst.tt.}µÅ³Æ.Ãç */
- $"FFFF D5B6 C8B4 C60B BDA1 7573 7400 7474" /* ÿÿնȴÆ.½¡ust.tt */
- $"0079 B0C4 B3C5 01C2 D880 FF02 C0BD C6B2" /* .y°Ä³Å.ÂØ€ÿ.À½Æ² */
- $"C50C C4BB 9D75 7374 0074 7473 75AA C2B3" /* Å.Ä»ust.ttsuªÂ³ */
- $"C406 C3C9 FAFF FFF0 B3B3 C403 C3B8 9673" /* Ä.ÃÉúÿÿð³³Ä.ø–s */
- $"8474 01A5 C1B4 C301 C1EB 80FF 02D6 B4C5" /* „t.¥Á´Ã.Áë€ÿ.Ö´Å */
- $"B1C3 03C2 B591 7283 7402 719E BFB4 C201" /* ±Ã.µ‘rƒt.qž¿´Â. */
- $"BFD5 80FF 03FD BBBD C3B0 C203 C0B2 8E72" /* ¿Õ€ÿ.ý»½Ã°Â.À²Žr */
- $"8374 0270 99BD B4C1 02C0 C4F6 80FF 02E6" /* ƒt.p™½´Á.ÀÄö€ÿ.æ */
- $"B1C2 B0C1 03BE AF87 7283 7402 7193 BBB5" /* ±Â°Á.¾¯‡rƒt.q“»µ */
- $"C001 BCE1 81FF 02C6 B7C1 AFC0 06BD AC84" /* À.¼áÿ.Æ·Á¯À.½¬„ */
- $"7274 7400 8074 0270 8CB9 B1BF 00C0 80C1" /* rtt.€t.pŒ¹±¿.À€Á */
- $"02BD CAFD 80FF 01F1 B1B0 BF06 BBA9 8172" /* .½Êý€ÿ.ñ±°¿.»©r */
- $"7474 0080 7402 7088 B7B0 BF07 C1B9 ACAB" /* tt.€t.pˆ·°¿.Á¹¬« */
- $"AEBC BEEB 81FF 02D1 B3C0 AEBF 06BA A67C" /* ®¼¾ëÿ.ѳÀ®¿.º¦| */
- $"7274 7400 8074 0271 83B4 AFBE 08BF AFB4" /* rtt.€t.qƒ´¯¾.¿¯´ */
- $"D9E3 D2AD B1D3 81FF 02F8 B4BC AEBE 06B8" /* ÙãÒ­±Óÿ.ø´¼®¾.¸ */
- $"A27A 7374 7400 8074 0372 7DB1 BCAE BD01" /* ¢zstt.€t.r}±¼®½. */
- $"B9CA 81FF 03F6 B4B9 F381 FF02 D8AF BEAD" /* ¹Êÿ.ö´¹óÿ.د¾­ */
- $"BD0D B69F 7973 7474 0000 7474 727A ADBB" /* ½.¶Ÿystt..ttrz­» */
- $"ADBC 03BB ABB7 E681 FF02 E6AE D881 FF02" /* ­¼.»«·æÿ.æ®Øÿ. */
- $"FDB7 B8AD BC0D B49A 7673 7474 0000 7474" /* ý·¸­¼.´švstt..tt */
- $"7378 A9BA ACBB 0CBC ACDB D7A6 BDF0 FFFF" /* sx©º¬».¼¬Ûצ½ðÿÿ */
- $"FABA BEF7 81FF 02DF ACBC ACBB 01B2 9781" /* úº¾÷ÿ.߬¼¬».²— */
- $"7407 0000 7474 7374 A4B8 ABB9 0DBA B3BB" /* t...ttst¤¸«¹.º³» */
- $"FFFF F7C2 A4CB FAFC C0B4 DC82 FF02 BAB4" /* ÿÿ÷¤ËúüÀ´Ü‚ÿ.º´ */
- $"BAAB B901 B093 8174 0100 0080 7402 729F" /* º«¹.°“t...€t.rŸ */
- $"B6AB B902 BAAA E981 FF07 ECB3 ABD1 BBB6" /* ¶«¹.ºªéÿ.쳫ѻ¶ */
- $"C0FA 81FF 02E4 AABA AAB9 03B8 AD8E 7380" /* Àúÿ.䪺ª¹.¸­Žs€ */
- $"7401 0000 8074 0272 9BB6 AAB8 02B9 ADC6" /* t...€t.r›¶ª¸.¹­Æ */
- $"84FF 05DC AFB7 B8B4 E082 FF02 BCB1 B9A9" /* „ÿ.ܯ·¸´à‚ÿ.¼±¹© */
- $"B803 B6AB 8A72 8074 0100 0080 7402 7095" /* ¸.¶«Šr€t...€t.p• */
- $"B4AA B602 B5AB F484 FF06 E9B6 B5B6 B4C2" /* ´ª¶.µ«ô„ÿ.鶵¶´Â */
- $"FC81 FF02 E6A9 B7A9 B603 B5A8 8872 8074" /* üÿ.æ©·©¶.µ¨ˆr€t */
- $"0100 0080 7402 6F91 B3A9 B602 B7AD D684" /* ...€t.o‘³©¶.·­Ö„ */
- $"FF02 FAC0 B480 B601 B3E4 82FF 02BD AFB7" /* ÿ.úÀ´€¶.³ä‚ÿ.½¯· */
- $"A8B6 03B4 A584 7280 7401 0000 8074 0270" /* ¨¶.´¥„r€t...€t.p */
- $"8DB2 A9B6 02B4 ACE7 84FF 01D9 B181 B602" /* ²©¶.´¬ç„ÿ.Ù±¶. */
- $"B3C5 FE81 FF02 E8A8 B7A8 B603 B3A3 8172" /* ³Åþÿ.訷¨¶.³£r */
- $"8074 0100 0080 7402 7087 B0A8 B505 B6AA" /* €t...€t.p‡°¨µ.¶ª */
- $"BDA4 C1F5 81FF 02F3 B8B4 82B5 01B2 E782" /* ½¤Áõÿ.ó¸´‚µ.²ç‚ */
- $"FF02 BFAD B6A7 B503 B2A1 7F72 8074 0100" /* ÿ.¿­¶§µ.²¡.r€t.. */
- $"0080 7402 7083 ADA7 B40C B5AC BBFF F2B8" /* .€t.pƒ­§´.µ¬»ÿò¸ */
- $"A2D0 FBFF FFCE B083 B401 B1C5 82FF 02EA" /* ¢Ðûÿÿΰƒ´.±Å‚ÿ.ê */
- $"A7B5 A7B4 03B0 9E7C 7380 7401 0000 8074" /* §µ§´.°ž|s€t...€t */
- $"0271 80AB A8B3 01A5 EC80 FF06 E4AA A9E2" /* .q€«¨³.¥ì€ÿ.䪩â */
- $"EAB2 B284 B301 B1E8 82FF 02BF ABB4 A6B3" /* ê²²„³.±è‚ÿ.¿«´¦³ */
- $"03AE 9B79 7380 7401 0000 8074 0272 7DA8" /* .®›ys€t...€t.r}¨ */
- $"A6B2 02B3 A6C8 82FF 04FE D3A8 B2B1 85B2" /* ¦².³¦È‚ÿ.þÓ¨²±…² */
- $"01AE C582 FF02 EAA6 B3A6 B203 AC98 7873" /* .®Å‚ÿ.꦳¦².¬˜xs */
- $"8074 0100 0080 7403 7278 A5B0 A5B1 02AF" /* €t...€t.rx¥°¥±.¯ */
- $"A9F7 84FF 01DA AB86 B102 B0AF E982 FF02" /* ©÷„ÿ.Ú«†±.°¯é‚ÿ. */
- $"BEA9 B2A5 B103 AB95 7773 8074 0100 0080" /* ¾©²¥±.«•ws€t...€ */
- $"7403 7276 A2AF A4B0 02B1 A2D5 84FF 02F8" /* t.rv¢¯¤°.±¢Õ„ÿ.ø */
- $"BAAE 87B0 01AC C682 FF02 EAA4 B1A5 B003" /* º®‡°.¬Æ‚ÿ.ꤱ¥°. */
- $"A991 7573 8074 0100 0080 7402 7375 9FA4" /* ©‘us€t...€t.suŸ¤ */
- $"AE03 AFA9 B0FE 84FF 01D3 AA88 AE02 ADAD" /* ®.¯©°þ„ÿ.Óªˆ®.­­ */
- $"E982 FF02 BCA7 AFA4 AE01 A78E 8274 0100" /* é‚ÿ.¼§¯¤®.§Ž‚t.. */
- $"0081 7402 729B ADA3 AE02 AFA0 E384 FF02" /* .t.r›­£®.¯ ã„ÿ. */
- $"F0B0 AD89 AE01 AAC4 82FF 02E9 A2AF A4AE" /* ð°­‰®.ªÄ‚ÿ.颯¤® */
- $"01A5 8C82 7401 0000 8174 0270 98AC 97AD" /* .¥Œ‚t...t.p˜¬—­ */
- $"0DAC ADAE ACAE ADAC AEAD ACAE AEA4 BB85" /* .¬­®¬®­¬®­¬®®¤»… */
- $"FF11 C7A7 AEAD ACAE ADAC AEAC ACAE ACAD" /* ÿ.ǧ®­¬®­¬®¬¬®¬­ */
- $"AEAB ABE9 82FF 0EBB A6AE ADAC AEAC ACAE" /* ®««é‚ÿ.»¦®­¬®¬¬® */
- $"ACAD AEAC ADAE 97AD 01A3 8982 7401 0000" /* ¬­®¬­®—­.£‰‚t... */
- $"8174 0270 94AA 95AC 0FAD A79F A1A2 9FA2" /* t.p”ª•¬.­§Ÿ¡¢Ÿ¢ */
- $"A29F A2A1 9FA4 A9A1 EF84 FF12 E6A2 9FA2" /* ¢Ÿ¢¡Ÿ¤©¡ï„ÿ.梟¢ */
- $"A1A0 A3A1 A0A2 A0A0 A3A0 A0A2 9F9D C282" /* ¡ £¡ ¢  £  ¢ŸÂ‚ */
- $"FF10 E6A0 A9A0 A0A2 A0A0 A2A0 A1A3 A0A1" /* ÿ.æ ©  ¢  ¢ ¡£ ¡ */
- $"A2A2 AB94 AC03 ABA1 8673 8174 0100 0081" /* ¢¢«”¬.«¡†st... */
- $"7402 7091 A995 AB0E A9AF FACE C2FF BCCA" /* t.p‘©•«.©¯úÎÂÿ¼Ê */
- $"FFB6 DEFA B4A1 C884 FF14 FDB2 C0FF BFCF" /* ÿ¶Þú´¡È„ÿ.ý²Àÿ¿Ï */
- $"FFAF DCFA AFEA F1A8 F5E4 B2FE D79D E982" /* ÿ¯Üú¯êñ¨õä²þ×é‚ */
- $"FF0F B8A1 E4F8 A9EA F0AE F7E0 ACFF D5C0" /* ÿ.¸¡äø©êð®÷à¬ÿÕÀ */
- $"D1A5 94AB 03AA 9F84 7381 7401 0000 8174" /* Ñ¥”«.ªŸ„st...t */
- $"026F 8CA8 95A9 0EA7 B1FF CEC2 FFD0 DBFF" /* .oŒ¨•©.§±ÿÎÂÿÐÛÿ */
- $"B3E0 FFB6 A2F9 84FF 14D7 99D8 FFBE D0FF" /* ³àÿ¶¢ù„ÿ.×™Øÿ¾Ðÿ */
- $"C5E9 FFAC EEFA C0FE E7B0 FFE8 A3B9 82FF" /* Åéÿ¬îúÀþç°ÿ裹‚ÿ */
- $"0FE2 99EA FFC1 F5F4 ABFB EDC4 FFD7 BED6" /* .â™êÿÁõô«ûíÄÿ×¾Ö */
- $"A394 A903 A89C 8173 8174 0100 0080 7403" /* £”©.¨œst...€t. */
- $"756E 88A6 95A8 04A6 B0FF DDD3 81FF 04C9" /* unˆ¦•¨.¦°ÿÝÓÿ.É */
- $"EBFB A6D5 84FF 06F6 A3DE FFFF D1DE 80FF" /* ëû¦Õ„ÿ.ö£ÞÿÿÑÞ€ÿ */
- $"02FD C4F2 80FF 06EE C6FF FFFA A7E2 82FF" /* .ýÄò€ÿ.îÆÿÿú§â‚ÿ */
- $"01B0 D780 FF02 F6C3 FB80 FF03 E3D3 D5A2" /* .°×€ÿ.öÃû€ÿ.ãÓÕ¢ */
- $"94A8 03A7 9A7F 7381 7401 0000 8074 0375" /* ”¨.§š.st...€t.u */
- $"6E85 A495 A702 A5AF FA85 FF01 C7AB 85FF" /* n…¤•§.¥¯ú…ÿ.Ç«…ÿ */
- $"01C4 B290 FF01 D1B1 82FF 02DD ACFB 87FF" /* .IJÿ.ѱ‚ÿ.ݬû‡ÿ */
- $"01D1 A194 A703 A598 7D73 8174 0100 0081" /* .Ñ¡”§.¥˜}st... */
- $"7402 7082 A295 A602 A4AE FB84 FF02 EF9C" /* t.p‚¢•¦.¤®û„ÿ.ïœ */
- $"E484 FF02 EC9E EB90 FF02 FCA7 DF81 FF02" /* ä„ÿ.ìžëÿ.ü§ßÿ. */
- $"FCAD D787 FF01 D0A0 94A6 03A3 957B 7381" /* ü­×‡ÿ.Р”¦.£•{s */
- $"7401 0000 8174 0270 7EA1 95A6 02A4 AEFB" /* t...t.p~¡•¦.¤®û */
- $"84FF 01B8 B885 FF01 B4BF 92FF 01D4 AD80" /* „ÿ.¸¸…ÿ.´¿’ÿ.Ô­€ */
- $"FF04 FCD4 9CAC FA86 FF01 D0A0 94A6 03A3" /* ÿ.üÔœ¬ú†ÿ.Р”¦.£ */
- $"937A 7381 7401 0000 8174 0270 7B9F 95A4" /* “zst...t.p{Ÿ•¤ */
- $"02A2 ACFA 83FF 02E3 9BF1 84FF 02DE 9EF5" /* .¢¬úƒÿ.ã›ñ„ÿ.Þžõ */
- $"92FF 09FD A8D9 FADB AD8B B1A1 D486 FF01" /* ’ÿÆý¨ÙúÛ­‹±¡Ô†ÿ. */
- $"CF9E 94A4 03A1 9178 7381 7401 0000 8174" /* Ïž”¤.¡‘xst...t */
- $"0270 779D 95A3 02A1 ACFA 82FF 02FD A9C7" /* .pw•£.¡¬ú‚ÿ.ý©Ç */
- $"84FF 02FC A5CD 94FF 09D9 989F 8B9B D3FF" /* „ÿ.ü¥Í”ÿÆÙ˜Ÿ‹›Óÿ */
- $"CDA1 F985 FF01 CF9D 94A3 03A0 8E77 7381" /* Í¡ù…ÿ.Ï”£. Žws */
- $"7401 0000 8174 0271 779A 95A2 02A0 ABFA" /* t...t.qwš•¢. «ú */
- $"82FF 02D4 A0FB 84FF 02CE A2FD 95FF 08A6" /* ‚ÿ.Ô û„ÿ.΢ý•ÿ.¦ */
- $"AEDB FCFF FFFA 9ECF 85FF 01CE 9C94 A203" /* ®ÛüÿÿúžÏ…ÿ.Îœ”¢. */
- $"9E8C 7673 8174 0100 0081 7402 7275 9895" /* žŒvst...t.ru˜• */
- $"A102 9FAA FA81 FF02 F79D D784 FF02 F29C" /* ¡.Ÿªúÿ.÷ׄÿ.òœ */
- $"DE96 FF01 DABD 82FF 02D0 9DF8 84FF 01CE" /* Þ–ÿ.Ú½‚ÿ.Ðø„ÿ.Î */
- $"9A94 A102 9C8A 7582 7401 0000 8174 0272" /* š”¡.œŠu‚t...t.r */
- $"7196 959F 089D A9EE F2F1 F1F6 C0AA 85FF" /* q–•Ÿ.©îòññöÀª…ÿ */
- $"02C0 ADF5 95F1 03F2 F1AE E681 FF03 FCA0" /* .À­õ•ñ.òñ®æÿ.ü  */
- $"C7F5 82F1 02F6 C89A 949F 029A 8775 8274" /* Çõ‚ñ.öÈš”Ÿ.š‡u‚t */
- $"0100 0081 7402 736F 9396 9E00 9F82 A201" /* ...t.so“–ž.Ÿ‚¢. */
- $"93E8 84FF 03E8 9EA2 A396 A202 A39D BB82" /* “è„ÿ.螢£–¢.£»‚ */
- $"FF02 D597 A383 A200 A195 9E01 9985 8374" /* ÿ.Õ—£ƒ¢.¡•ž.™…ƒt */
- $"0100 0081 7403 736E 929D 959E 009D 809C" /* ...t.sn’•ž.€œ */
- $"029D 91BC 84FF 03FE B599 9D99 9C01 9DE7" /* .‘¼„ÿ.þµ™™œ.ç */
- $"81FF 02C7 8D9B 839C 009D 959E 0198 8383" /* ÿ.Ç›ƒœ.•ž.˜ƒƒ */
- $"7401 0000 8274 016E 8F9A 9C02 9A98 F484" /* t...‚t.nšœ.š˜ô„ */
- $"FF01 DA99 9B9C 0997 B9FF FFE4 A7A6 CF91" /* ÿ.Ú™›œÆ—¹ÿÿ䧦ϑ */
- $"9D9B 9C02 9681 7382 7401 0000 8274 026F" /* ›œ.–s‚t...‚t.o */
- $"8C9A 989B 029C 90CF 84FF 02F8 A998 9D9B" /* Œš˜›.œÏ„ÿ.ø©˜› */
- $"08B3 A39A C8FC FFB0 919C 9A9B 0294 8073" /* .³£šÈüÿ°‘œš›.”€s */
- $"8274 0100 0082 7402 6D8A 9998 9A02 989C" /* ‚t...‚t.mŠ™˜š.˜œ */
- $"F484 FF01 CB94 9D9A 0397 A2DD FB80 FF02" /* ô„ÿ.Ë”š.—¢Ýû€ÿ. */
- $"F294 979A 9A02 927E 7382 7401 0000 8174" /* ò”—šš.’~s‚t...t */
- $"0375 6B87 9898 9904 969A 96D2 FE81 FF02" /* .uk‡˜˜™.–š–Òþÿ. */
- $"EF9E 979D 9902 97A1 F382 FF02 D68A 9A99" /* ïž—™.—¡ó‚ÿ.ÖŠš™ */
- $"9902 917C 7382 7401 0000 8174 0375 6A85" /* ™.‘|s‚t...t.uj… */
- $"9797 9806 9798 F1D3 8F9F E480 FF01 BB92" /* ——˜.—˜ñÓŸä€ÿ.»’ */
- $"9F98 0192 CF83 FF02 B68A 9998 9802 8F7B" /* Ÿ˜.’σÿ.¶Š™˜˜.{ */
- $"7382 7401 0000 8174 0375 6A82 9597 960B" /* s‚t...t.uj‚•—–. */
- $"939F FBFF F9BB 89B0 F5E4 9595 9F96 0192" /* “Ÿûÿù»‰°õä••Ÿ–.’ */
- $"AD83 FF03 FA9B 9097 9796 028D 7973 8274" /* ­ƒÿ.ú›——–.ys‚t */
- $"0100 0081 7403 756A 8195 9796 0191 AC81" /* ...t.uj•—–.‘¬ */
- $"FF04 EEA8 97A2 94A0 9602 9597 EC83 FF01" /* ÿ.¢” –.•—ìƒÿ. */
- $"E28A 9796 0395 8C78 7382 7401 0000 8174" /* ⊗–.•Œxs‚t...t */
- $"0375 6C7F 9497 9501 8EBB 82FF 02FE B28E" /* .ul.”—•.Ž»‚ÿ.þ²Ž */
- $"A295 018F CE84 FF02 BD89 9695 9503 948B" /* ¢•.΄ÿ.½‰–••.”‹ */
- $"7873 8274 0100 0081 7403 756D 7D92 9794" /* xs‚t...t.um}’—” */
- $"018C CB81 FF02 F8B8 93A3 9401 90AE 84FF" /* .ŒËÿ.ø¸“£”.®„ÿ */
- $"02F7 9691 9594 0393 8A77 7382 7401 0000" /* .÷–‘•”.“Šws‚t... */
- $"8174 0375 6C7B 9197 9301 8CDD 80FF 02ED" /* t.ul{‘—“.ŒÝ€ÿ.í */
- $"A78D A493 0292 96EE 84FF 02C8 8894 9493" /* §¤“.’–î„ÿ.Ȉ””“ */
- $"0392 8875 7382 7401 0000 8174 0375 6C79" /* .’ˆus‚t...t.uly */
- $"9096 9207 9190 EBFF FFDE 9A8D A692 018C" /* –’.‘ëÿÿÞš¦’.Œ */
- $"CC84 FF02 EF91 9194 9201 9186 8474 0100" /* Ì„ÿ.ï‘‘”’.‘†„t.. */
- $"0081 7403 756B 7790 9692 0690 97F8 FFCC" /* .t.ukw–’.—øÿÌ */
- $"918E A792 028E A6FD 83FF 02FC 9F8F 9492" /* ‘Ž§’.Ž¦ýƒÿ.üŸ”’ */
- $"0191 8584 7401 0000 8174 0375 6B75 8E96" /* .‘…„t...t.ukuŽ– */
- $"9005 8BA7 FCBA 8B8E A990 018D DB83 FF02" /* .‹§üº‹Ž©.Ûƒÿ. */
- $"F79B 8D94 9002 8F83 7383 7401 0000 8174" /* ÷›”.ƒsƒt...t */
- $"0375 6C74 8E96 9004 8CAA AD89 8FAA 9002" /* .ultŽ–.Œª­‰ª. */
- $"8CA3 F982 FF01 CB8C 9590 028F 8373 8374" /* Œ£ù‚ÿ.ËŒ•.ƒsƒt */
- $"0100 0081 7403 756B 728D 988F 008B AD8F" /* ...t.ukr˜.‹­ */
- $"088A B4F9 FFFF F6C3 8E8E 958F 028E 8172" /* .Š´ùÿÿöÃŽŽ•.Žr */
- $"8374 0100 0081 7403 756C 718C CA8E 068A" /* ƒt...t.ulqŒÊŽ.Š */
- $"9DBA B398 898D 968E 028D 8072 8374 0100" /* º³˜‰–Ž.€rƒt.. */
- $"0081 7403 756C 718B CB8E 038B 8888 8B98" /* .t.ulq‹ËŽ.‹ˆˆ‹˜ */
- $"8E02 8C80 7283 7401 0000 8174 0375 6D71" /* Ž.Œ€rƒt...t.umq */
- $"8BEA 8E02 8C80 7283 7401 0000 8174 0375" /* ‹êŽ.Œ€rƒt...t.u */
- $"6D70 8AEA 8D02 8B7F 7283 7401 0000 8174" /* mpŠê.‹.rƒt...t */
- $"0375 6E70 8AEA 8D02 8B7E 7283 7401 0000" /* .unpŠê.‹~rƒt... */
- $"8174 0375 6E70 8AEA 8D02 8B7E 7283 7400" /* t.unpŠê.‹~rƒt. */
- $"0082 7403 756F 6E88 EA8C 0289 7B71 8374" /* .‚t.uonˆêŒ.‰{qƒt */
- $"0000 8374 0372 697B 81E9 8202 7E73 7283" /* ..ƒt.ri{é‚.~srƒ */
- $"7401 0000 8274 0475 706E 7172 E671 0372" /* t...‚t.upnqræq.r */
- $"7270 7284 7401 0000 FB74 0100 00FB 7401" /* rpr„t...ût...ût. */
- $"0000 FB74 0100 00FB 7401 0000 FA74 8100" /* ..ût...ût...út. */
- $"F974 8200 F774 8300 F674 8600 F374 FF00" /* ùt‚.÷tƒ.öt†.ótÿ. */
- $"FF00 0000 7438 6D6B 0000 4008 0000 0000" /* ÿ...t8mk..@..... */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 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 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 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 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 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 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" /* ................ */
- $"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 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 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0101 0101 0202 0202 0202 0202 0202 0202" /* ................ */
- $"0202 0202 0202 0202 0202 0202 0202 0101" /* ................ */
- $"0101 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 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0102 0202" /* ................ */
- $"0304 0505 0606 0606 0606 0606 0606 0606" /* ................ */
- $"0606 0606 0606 0606 0606 0606 0606 0505" /* ................ */
- $"0503 0302 0100 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 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0001 0100 0000" /* ................ */
- $"0204 0506 0707 0707 0707 0707 0707 0707" /* ................ */
- $"0707 0707 0707 0707 0707 0707 0707 0606" /* ................ */
- $"090A 0805 0302 0100 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 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0101 001C 2F31" /* ............../1 */
- $"3436 383A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A" /* 468::::::::::::: */
- $"3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A34" /* :::::::::::::::4 */
- $"120B 0F0B 0704 0201 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 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0004 8FF3 FAF9" /* ............óúù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA" /* ùùùùùùùùùùùùùùúú */
- $"C433 1112 0C07 0402 0100 0000 0000 0000" /* Ä3.............. */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 0067 FFFF FFFF" /* ...........gÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFC3 201A 130C 0703 0100 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 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 00A9 FFFF FFFF" /* ...........©ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFF8 4A20 1B11 0A05 0200 0000 0000 0000" /* ÿøJ ..Â......... */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0002 00B6 FFFF FFFF" /* ...........¶ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFB 5928 2216 0D07 0200 0000 0000 0000" /* ÿûY("........... */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0103 07CC FFFF FFFF" /* ...........Ìÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFD 6231 291B 1109 0401 0000 0000 0000" /* ÿýb1)..Æ........ */
- $"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 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0201 21F0 FFFF FFFF" /* ..........!ðÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 7337 2F21 160D 0704 0303 0303 0303" /* ÿÿs7/!.......... */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0302 0201 0100" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0001 0500 69FF FFFF FFFF" /* ..........iÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 9A38 3628 1C14 0E0A 0909 0909 0909" /* ÿÿš86(...ÂÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0807 0604 0302" /* ÆÆÆÆÆÆÆÆÆÆ...... */
- $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0203 0021 DFFF FFFF FFFF" /* .........!ßÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF E653 312D 231B 1512 1011 1010 1010" /* ÿÿæS1-#......... */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 0E0C 0A08 0504" /* ............Â... */
- $"0301 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0002 0200 34D3 FFFF FFFF FFFF" /* ........4Óÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFD6 6E40 312A 2522 2121 2121 2121" /* ÿÿÿÖn@1*%"!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2120 1E1B 1814 0D00" /* !!!!!!!!! ...... */
- $"0203 0100 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0102 006C F4FF FFFF FFFF FFFF" /* .......lôÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FEE8 DAD9 D9D8 D8D8 D8D8 D8D8" /* ÿÿÿÿþèÚÙÙØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D7D7 D6D5 D5A9" /* ØØØØØØØØØØ××ÖÕÕ© */
- $"1E00 0200 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0001 0300 71FF FFFF FFFF FFFF FFFF" /* ......qÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"8500 0402 0100 0000 0000 0000 0000 0000" /* …............... */
- $"0001 0203 0317 E1FF FFFF FFFF FFFF FFFF" /* ......áÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"9E03 0905 0302 0100 0000 0000 0000 0000" /* ž.Æ............. */
- $"0201 0000 002C E4E8 E8E9 EAEB ECEC EDED" /* .....,äèèéêëììíí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED ECEC ECEC ECEC ECEC ECEC ECEC" /* ííííìììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEB EAE9 E8F4" /* ìììììììììììëêéèô */
- $"8E02 0400 0000 0202 0000 0000 0000 0002" /* Ž............... */
- $"0012 6297 A3A9 BBBD C0C4 C7CA CCCD CECE" /* ..b—£©»½ÀÄÇÊÌÍÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CDCD CCCC CCCC CBCB CBCB CBCB" /* ÎÎÎÎÍÍÌÌÌÌËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBC9 C8C5 C2C0" /* ËËËËËËËËËËËÉÈÅÂÀ */
- $"B5A6 A5A1 8236 0002 0100 0000 0000 0100" /* µ¦¥¡‚6.......... */
- $"35DC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 5Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFE 8901 0101 0000 0000 001B" /* ÿÿÿÿÿþ‰......... */
- $"DFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF73 0002 0000 0001 0082" /* ÿÿÿÿÿÿÿs.......‚ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE4 1800 0100 0001 00C0" /* ÿÿÿÿÿÿÿä.......À */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4500 0200 0002 02C6" /* ÿÿÿÿÿÿÿÿE......Æ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4C00 0200 0103 00B3" /* ÿÿÿÿÿÿÿÿL......³ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFE 3D00 0300 0104 009C" /* ÿÿÿÿÿÿÿþ=......œ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFF4 2C04 0400 0105 0087" /* ÿÿÿÿÿÿÿô,......‡ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE8 2007 0400 0105 0073" /* ÿÿÿÿÿÿÿè ......s */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFD9 1808 0400 0105 015C" /* ÿÿÿÿÿÿÿÙ.......\ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFC7 0E0A 0401 0105 034A" /* ÿÿÿÿÿÿÿÇ.Â.....J */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFB5 0A0A 0402 0105 043C" /* ÿÿÿÿÿÿÿµÂÂ.....< */
- $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFA1 080A 0402 0105 062B" /* ÿÿÿÿÿÿÿ¡.Â.....+ */
- $"F2FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF8E 050A 0402 0104 0720" /* ÿÿÿÿÿÿÿŽ.Â..... */
- $"E7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF7C 0609 0300 0104 0817" /* ÿÿÿÿÿÿÿ|.Æ...... */
- $"D8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF68 0709 0300 0104 0A0E" /* ÿÿÿÿÿÿÿh.Æ....Â. */
- $"C8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF55 0809 0300 0104 0A0A" /* ÿÿÿÿÿÿÿU.Æ....ÂÂ */
- $"B7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF47 0909 0300 0104 0A07" /* ÿÿÿÿÿÿÿGÆÆ....Â. */
- $"A4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF F638 0B08 0300 0004 0A05" /* ÿÿÿÿÿÿö8......Â. */
- $"91FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF EE2B 0C08 0300 0004 0905" /* ÿÿÿÿÿÿî+......Æ. */
- $"81FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF E224 0D08 0300 0003 0906" /* ÿÿÿÿÿÿâ$......Æ. */
- $"71FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF D51C 0E08 0300 0003 0907" /* ÿÿÿÿÿÿÕ.......Æ. */
- $"5EFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF C714 0F07 0200 0003 0908" /* ÿÿÿÿÿÿÇ.......Æ. */
- $"4FFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF B811 0E07 0200 0003 090A" /* ÿÿÿÿÿÿ¸.......ÆÂ */
- $"43FD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Cýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF A70E 0F07 0200 0003 080B" /* ÿÿÿÿÿÿ§......... */
- $"34F5 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 4õÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 960C 0E06 0200 0002 080D" /* ÿÿÿÿÿÿ–......... */
- $"29EB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* )ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 850C 0E07 0200 0003 080E" /* ÿÿÿÿÿÿ…......... */
- $"22E0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* "àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 760D 0E06 0200 0003 080F" /* ÿÿÿÿÿÿv......... */
- $"1BD3 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 650E 0E06 0200 0002 080F" /* ÿÿÿÿÿÿe......... */
- $"14C7 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 580E 0D06 0200 0002 070F" /* ÿÿÿÿÿÿX......... */
- $"11B9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 4E10 0D06 0100 0002 070F" /* ÿÿÿÿÿÿN......... */
- $"10AB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 4211 0D06 0200 0002 070F" /* ÿÿÿÿÿøB......... */
- $"0D9B FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF1 3513 0D06 0200 0002 080F" /* ÿÿÿÿÿñ5......... */
- $"0C8D FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE9 2E13 0D05 0100 0002 070F" /* ÿÿÿÿÿé.......... */
- $"0D81 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFDF 2914 0D06 0100 0002 070F" /* ÿÿÿÿÿß)......... */
- $"0E73 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD4 2215 0C06 0100 0002 070F" /* ÿÿÿÿÿÔ"......... */
- $"0F64 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC9 1C16 0C05 0100 0002 070F" /* ÿÿÿÿÿÉ.......... */
- $"1058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFBD 1A15 0C05 0100 0002 070F" /* ÿÿÿÿÿ½.......... */
- $"114F FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB2 1815 0C05 0100 0002 070E" /* ÿÿÿÿÿ².......... */
- $"1246 FAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Fúÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 1615 0C05 0100 0002 070E" /* ÿÿÿÿÿ¥.......... */
- $"133B F4FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .;ôÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF98 1515 0C05 0100 0002 060E" /* ÿÿÿÿÿ˜.......... */
- $"1533 EEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .3îÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF8D 1515 0B05 0100 0002 070E" /* ÿÿÿÿÿ.......... */
- $"152F E6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ./æÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF82 1615 0B05 0100 0002 070E" /* ÿÿÿÿÿ‚.......... */
- $"1629 DDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .)Ýÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF77 1615 0B05 0100 0002 060E" /* ÿÿÿÿÿw.......... */
- $"1624 D5FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Õÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6B 1715 0B05 0100 0002 060E" /* ÿÿÿÿÿk.......... */
- $"1720 CCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* . Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF61 1815 0B05 0100 0002 060E" /* ÿÿÿÿÿa.......... */
- $"181D C3FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5B 1914 0B05 0100 0002 060E" /* ÿÿÿÿÿ[.......... */
- $"181C BAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ºÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FE54 1A14 0B05 0100 0002 070E" /* ÿÿÿÿþT.......... */
- $"181B B0FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..°ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F94C 1B15 0B04 0100 0002 060E" /* ÿÿÿÿùL.......... */
- $"181A A6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F544 1C15 0B05 0100 0002 070E" /* ÿÿÿÿõD.......... */
- $"1819 9DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F13D 1D14 0B04 0100 0002 060E" /* ÿÿÿÿñ=.......... */
- $"1819 95FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..•ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF EB3A 1D14 0B05 0100 0002 070E" /* ÿÿÿÿë:.......... */
- $"1819 8EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Žÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF E537 1E14 0B05 0100 0002 070E" /* ÿÿÿÿå7.......... */
- $"181A 86FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..†ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF DF34 1E14 0B05 0100 0002 070E" /* ÿÿÿÿß4.......... */
- $"181B 7EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..~ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D930 1F15 0B05 0100 0002 070E" /* ÿÿÿÿÙ0.......... */
- $"181B 78FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..xÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D32D 1F15 0B05 0100 0002 070F" /* ÿÿÿÿÓ-.......... */
- $"191C 71FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..qÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF CE29 2015 0B05 0100 0002 070F" /* ÿÿÿÿÎ) ......... */
- $"191D 6AFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..jÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C828 2015 0B05 0100 0002 070F" /* ÿÿÿÿÈ( ......... */
- $"191D 65FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..eÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C328 2015 0B05 0100 0002 070F" /* ÿÿÿÿÃ( ......... */
- $"191E 61FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..aÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF BE28 2115 0B05 0100 0002 070F" /* ÿÿÿÿ¾(!......... */
- $"191F 5DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..]ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B827 2115 0C05 0100 0002 070F" /* ÿÿÿÿ¸'!......... */
- $"1920 5AFE FFFF FFFF FFFF FFFF FFFF FFFF" /* . Zþÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B427 2115 0C05 0100 0003 0710" /* ÿÿÿÿ´'!......... */
- $"1A21 58FD FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Xýÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B026 2115 0C05 0100 0003 0810" /* ÿÿÿÿ°&!......... */
- $"1A21 55FB FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Uûÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF AC26 2116 0C05 0200 0003 0810" /* ÿÿÿÿ¬&!......... */
- $"1A22 52F9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ."Rùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A826 2215 0C05 0100 0003 0810" /* ÿÿÿÿ¨&"......... */
- $"1A23 4FF7 FFFF FFFF FFFF FFFF FFFF FFFF" /* .#O÷ÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A426 2316 0D06 0200 0003 0811" /* ÿÿÿÿ¤&#......... */
- $"1B24 4DF6 FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Möÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A126 2316 0D06 0200 0003 0911" /* ÿÿÿÿ¡&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9F26 2317 0D06 0200 0003 0912" /* ÿÿÿÿŸ&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9E26 2317 0D06 0200 0003 0912" /* ÿÿÿÿž&#.......Æ. */
- $"1C26 4BF4 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Kôÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9D27 2317 0D06 0200 0004 0912" /* ÿÿÿÿ'#.......Æ. */
- $"1C26 4AF3 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Jóÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9C27 2417 0D06 0200 0104 0912" /* ÿÿÿÿœ'$.......Æ. */
- $"1C26 47F2 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Gòÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9A27 2417 0D06 0200 0103 0911" /* ÿÿÿÿš'$.......Æ. */
- $"1B27 37D1 FFFF FFFF FFFF FFFF FFFF FFFF" /* .'7Ñÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 7329 2316 0D06 0200 0003 0810" /* ÿÿÿÿs)#......... */
- $"1A27 2F59 B7C6 C6C7 C7C7 C7C7 C7C7 C7C7" /* .'/Y·ÆÆÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C5 C689 372D 2015 0C06 0200 0003 070E" /* ÇÅƉ7- ......... */
- $"1723 3037 3C46 4C4F 5050 5050 5050 5050" /* .#07<FLOPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"4D49 4138 352A 1D13 0A05 0100 0003 060C" /* MIA85*..Â....... */
- $"141E 2934 3D44 494C 4D4E 4E4E 4E4E 4E4E" /* ..)4=DILMNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4D" /* NNNNNNNNNNNNNNNM */
- $"4B46 4039 2F24 1910 0904 0100 0002 050A" /* KF@9/$..Æ...... */
- $"1018 212B 3339 3D40 4142 4242 4242 4242" /* ..!+39=@ABBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4140" /* BBBBBBBBBBBBBBA@ */
- $"3F3B 352F 261D 140D 0703 0100 0002 0407" /* ?;5/&........... */
- $"0C12 1920 272C 2F32 3233 3333 3333 3333" /* ... ',/223333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3332" /* 3333333333333332 */
- $"302D 2924 1D16 0F09 0502 0100 0001 0305" /* 0-)$...Æ........ */
- $"080D 1217 1C1F 2223 2425 2525 2525 2525" /* ......"#$%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2524" /* %%%%%%%%%%%%%%%$ */
- $"2221 1E19 1510 0B07 0402 0000 0000 0103" /* "!.............. */
- $"0609 0C10 1315 1718 1919 1919 1919 1919" /* .Æ.............. */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1918" /* ................ */
- $"1716 1411 0E0A 0704 0201 0000 0000 0002" /* .....Â.......... */
- $"0305 0709 0B0D 0E0F 0F0F 0F0F 0F0F 0F0F" /* ...Æ............ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0D 0C0A 0806 0402 0100 0000 0000 0001" /* ...Â............ */
- $"0103 0304 0607 0708 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0707 0605 0403 0201 0000 0000 0000 0000" /* ................ */
- $"0001 0102 0202 0203 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0202 0202 0201 0100 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 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 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 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" /* ................ */
- $"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 0000 0000 0000 0000 0000 6963 3038" /* ............ic08 */
- $"0000 5CBD 0000 000C 6A50 2020 0D0A 870A" /* ..\½....jP .‡ */
- $"0000 0014 6674 7970 6A70 3220 0000 0000" /* ....ftypjp2 .... */
- $"6A70 3220 0000 004F 6A70 3268 0000 0016" /* jp2 ...Ojp2h.... */
- $"6968 6472 0000 0100 0000 0100 0004 0707" /* ihdr............ */
- $"0100 0000 000F 636F 6C72 0100 0000 0000" /* ......colr...... */
- $"1000 0000 2263 6465 6600 0400 0000 0000" /* ...."cdef....... */
- $"0100 0300 0100 0000 0100 0000 0200 0200" /* ................ */
- $"0000 0300 0000 006A 7032 63FF 4FFF 5100" /* .......jp2cÿOÿQ. */
- $"3200 0000 0001 0000 0001 0000 0000 0000" /* 2............... */
- $"0000 0000 0001 0000 0001 0000 0000 0000" /* ................ */
- $"0000 0000 0407 0101 0701 0107 0101 0701" /* ................ */
- $"01FF 5200 0C00 0000 0101 0504 0400 01FF" /* .ÿR............ÿ */
- $"5C00 1320 5058 5860 5858 6058 5860 5858" /* \.. PXX`XX`XX`XX */
- $"5850 5058 FF64 0011 0001 4B61 6B61 6475" /* XPPXÿd....Kakadu */
- $"2D76 352E 322E 31FF 9000 0A00 0000 005B" /* -v5.2.1ÿ.Â....[ */
- $"D000 01FF 93CF C100 1507 F18D 1991 E793" /* Ð..ÿ“ÏÁ...ñ.‘ç“ */
- $"D8B4 6B7C 459C 4F68 E4BF E0FF 0D3D C2DF" /* Ø´k|EœOhä¿àÿ.=Âß */
- $"FC16 8F7F 6C3A 7FEA ACD5 8632 D1AD 37A6" /* ü..l:.ê¬Õ†2Ñ­7¦ */
- $"22E3 4753 734F 3BFA 0372 1596 A8F1 7183" /* "ãGSsO;ú.r.–¨ñqƒ */
- $"2F17 0A65 C5C2 6A8E C0F9 1000 39CE 9180" /* /.ÂeÅÂjŽÀù..9Α€ */
- $"AE4A F551 B521 2839 FEE4 4D31 9F98 9F17" /* ®JõQµ!(9þäM1Ÿ˜Ÿ. */
- $"29F2 C91D 3B35 397E 15A1 8246 C3EA 3107" /* )òÉ.;59~.¡‚FÃê1. */
- $"5630 A744 5105 404A C843 0AE4 304B 4FE9" /* V0§DQ.@JÈCÂä0KOé */
- $"81E4 4C91 DF64 6885 8D23 6517 B254 DE23" /* äL‘ßdh…#e.²TÞ# */
- $"6101 3C94 9245 923D 4F4C 0F02 784C F319" /* a.<”’E’=OL..xLó. */
- $"CFC0 FC11 7EC2 D9C4 3907 5FDC 553A F1E1" /* ÏÀü.~ÂÙÄ9._ÜU:ñá */
- $"F2BC 6420 59D8 7D25 F42A 5BA5 8E8E 7166" /* ò¼d YØ}%ô*[¥ŽŽqf */
- $"AD5D 5C91 CC75 1452 ACDA 64CA 3249 CCE3" /* ­]\‘Ìu.R¬ÚdÊ2IÌã */
- $"6874 83E2 633E 64E7 8159 4AA2 FD3C 638D" /* htƒâc>dçYJ¢ý<c */
- $"F978 C3ED 328F C0F2 1F81 A80C BB81 9421" /* ùxÃí2Àò.¨.»”! */
- $"980D F457 0EA7 7782 676F 2AB3 EE8F 99C2" /* ˜.ôW.§w‚go*³î™Â */
- $"2221 9D95 8C80 C3A8 91F3 4C08 6A03 DE45" /* "!•Œ€Ã¨‘óL.j.ÞE */
- $"A985 9B7B 9ED3 A9A4 D929 A97F A125 FE22" /* ©…›{žÓ©¤Ù)©.¡%þ" */
- $"A893 77F3 EF0F C15C 3969 A153 3A7C 3110" /* ¨“wóï.Á\9i¡S:|1. */
- $"7A9C 9227 D2F6 BCA8 1A04 0219 8F36 21B7" /* zœ’'Òö¼¨....6!· */
- $"B37C 2AB6 678A 1675 BA9E 03B4 53BA 33B9" /* ³|*¶gŠ.uºž.´Sº3¹ */
- $"06AD 96D8 BDBC BFC8 5134 C040 7EBA B756" /* .­–ؽ¼¿ÈQ4À@~º·V */
- $"E619 DC67 BC83 BB39 AA42 65E1 5BBC 45B4" /* æ.Üg¼ƒ»9ªBeá[¼E´ */
- $"ECB6 E6ED D098 3C9F E17B 876D A039 553E" /* ì¶æíИ<Ÿá{‡m 9U> */
- $"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" /* ÷<H‡QU.•.ˆLiÂ'?9 */
- $"8CCA 32D8 1FD7 A3F4 CDD8 6275 5E7E 3619" /* ŒÊ2Ø.×£ôÍØbu^~6. */
- $"8D18 68C9 D2C7 0FCB 18EA FB01 5A68 4A52" /* .hÉÒÇ.Ë.êû.ZhJR */
- $"3C08 5313 5ED2 9B7D 31B5 953C 2F92 22F7" /* <.S.^Ò›}1µ•</’"÷ */
- $"3764 04E8 A9A6 C747 8DFD 9730 01DD 82E1" /* 7d.試ÇGý—0.Ý‚á */
- $"B08A FD72 7C33 A9BF AFEA 7188 AC4B 2B45" /* °Šýr|3©¿¯êqˆ¬K+E */
- $"BBB2 7826 6704 5864 9BAF 91FC 6BD3 E9D7" /* »²x&g.Xd›¯‘ükÓé× */
- $"0E30 E428 0FB2 4836 F94F 7CB9 3723 72A2" /* .0ä(.²H6ùO|¹7#r¢ */
- $"AB4C C0EB ED8F 823B B8D6 C4A6 E4B5 B41C" /* «LÀëí‚;¸ÖĦ䵴. */
- $"B0FC 0171 880F E77C 1EF8 9645 A8B4 969A" /* °ü.qˆ.ç|.ø–E¨´–š */
- $"5420 86B9 71CE 0DE5 7A40 B41A DD85 6B30" /* T †¹qÎ.åz@´.Ý…k0 */
- $"F02A 3B61 92B4 7A95 269E BF9F DDB3 9FB7" /* ð*;a’´z•&ž¿ŸÝ³Ÿ· */
- $"746B 1514 C89D 391B F835 73B8 0F1C 2567" /* tk..È9.ø5s¸..%g */
- $"A0C2 6B37 DFCE 5F4C 1DCD FD79 5CDA A8FF" /*  Âk7ßÎ_L.Íýy\Ú¨ÿ */
- $"0603 9014 308F AEB3 EDB7 D721 1709 3897" /* ...0®³í·×!.Æ8— */
- $"D3AB 181E 53BE 4025 3492 41C2 5EC7 BFC0" /* Ó«..S¾@%4’AÂ^Ç¿À */
- $"EA12 19D0 6158 530B A57B 8A2B 8DFF 18AF" /* ê..ÐaXS.¥{Š+ÿ.¯ */
- $"7651 65CF CD26 3F05 987E 0760 9C3C E3A6" /* vQeÏÍ&?.˜~.`œ<㦠*/
- $"86C0 DAB4 C6ED 7F19 8034 85FE DA7E 7963" /* †ÀÚ´Æí..€4…þÚ~yc */
- $"AFF2 9CBE 6AAA B6BB B2D3 6F41 BB45 B1EB" /* ¯òœ¾jª¶»²ÓoA»E±ë */
- $"9CC2 8803 907A 5CE1 F2D9 AF69 FF22 7DE8" /* œÂˆ.z\áòÙ¯iÿ"}è */
- $"D328 C2A1 0F97 2EE2 9575 E0E6 A665 B85A" /* Ó(¡.—.â•uàæ¦e¸Z */
- $"C5D7 6FA0 FE24 BC68 9D74 6CEB C4F9 615C" /* Å×o þ$¼htlëÄùa\ */
- $"4F34 48B3 7A64 2540 B64F EFBE 8D0F E427" /* O4H³zd%@¶Oï¾.ä' */
- $"4CCA 6DB3 83AC C5F6 EE52 7A43 8172 41E4" /* LÊm³ƒ¬ÅöîRzCrAä */
- $"2CE3 DF2F 1496 97DE 6AD1 2FFF 7E52 D993" /* ,ãß/.–—ÞjÑ/ÿ~RÙ“ */
- $"8AF9 AAA3 B192 0991 BFAE 4829 001E 963B" /* Šùª£±’Æ‘¿®H)..–; */
- $"019C 8A5D 78E8 6A56 F78C B81A F4D0 6312" /* .œŠ]xèjV÷Œ¸.ôÐc. */
- $"C0C4 A9BF 7CA5 75D9 9C23 F3EA 4F39 B325" /* ÀÄ©¿|¥uÙœ#óêO9³% */
- $"F6DE 6EF4 7D48 A279 8EA9 5395 0FBC C63F" /* öÞnô}H¢yŽ©S•.¼Æ? */
- $"679F CE93 2206 ECA9 079C 2BB7 D094 6A7B" /* gŸÎ“".ì©.œ+·Ð”j{ */
- $"1077 277F 88A6 21AE 84C3 EDD4 38FC 36B2" /* .w'.ˆ¦!®„ÃíÔ8ü6² */
- $"1F86 8F00 8F56 8825 7713 9061 800A A4CD" /* .†.Vˆ%w.a€Â¤Í */
- $"E3D3 0F3C B0AC 0C87 E368 8544 F251 5C39" /* ãÓ.<°¬.‡ãh…DòQ\9 */
- $"7D90 1BEF 7805 D624 7380 0A19 E093 3058" /* }.ïx.Ö$s€Â.à“0X */
- $"1C90 467F 5C70 4932 3947 4A95 A450 36C8" /* .F.\pI29GJ•¤P6È */
- $"D4D5 CA85 9922 FA12 D0D8 96CA 9A2F 40A2" /* ÔÕÊ…™"ú.ÐØ–Êš/@¢ */
- $"F105 054F 8C56 C164 85B5 C4E6 3EAB D76A" /* ñ..OŒVÁd…µÄæ>«×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.<cÛnI$ */
- $"7362 34C9 2F1D 105B 97E2 03BF 648F C21C" /* sb4É/..[—â.¿dÂ. */
- $"C6AC 3657 2C72 ADAA 2889 0623 6A5D ACEC" /* Ƭ6W,r­ª(‰.#j]¬ì */
- $"3210 738F 51F5 CC65 9EA9 7AD3 95CB B265" /* 2.sQõÌež©zӕ˲e */
- $"D54E 6E1D E2A7 2673 E6C2 C247 2FFD C10E" /* ÕNn.â§&sæÂÂG/ýÁ. */
- $"5FC5 C1E1 2511 5C8F 6063 92AB E4B9 8212" /* _ÅÁá%.\`c’«ä¹‚. */
- $"3643 6D53 2492 3E58 3E71 15E3 A3B7 AB2A" /* 6CmS$’>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.íʃ</.¢:\i */
- $"6F17 C143 83FF 31A8 709D 7BFA B0E4 A884" /* o.ÁCƒÿ1¨p{ú°ä¨„ */
- $"E3DC 88CC DF54 C132 6671 A0D0 B4C3 7721" /* ã܈ÌßTÁ2fq Ð´Ãw! */
- $"B5F0 84FF 0FDA 1588 5865 1B6B 94E3 9B46" /* µð„ÿ.Ú.ˆXe.k”ã›F */
- $"5CA1 7767 09F4 3448 2242 114C 2705 2C38" /* \¡wgÆô4H"B.L'.,8 */
- $"4565 F286 ABC2 AFF5 809D 0C5B BB5E 009C" /* Eeò†«Â¯õ€.[»^.œ */
- $"FCBA BC4C 84FF 45EF F42B 3F8E DEE0 A531" /* üº¼L„ÿEïô+?ŽÞà¥1 */
- $"DBBB 2113 7C30 8BB7 76FF 7E55 E6BC 012B" /* Û»!.|0‹·vÿ~Uæ¼.+ */
- $"EBDE EF62 0981 DCE1 AC6E 5AD7 D8AD 0560" /* ëÞïbÆÜá¬nZ×Ø­.` */
- $"5B36 3A62 5B57 3E03 75AC 25FB B396 1086" /* [6:b[W>.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" /* ß"Â.<CáØ]dÊ™æÇï0 */
- $"68AF F4C9 97D5 F961 48CF 954C 2832 33A3" /* h¯ôÉ—ÕùaHÏ•L(23£ */
- $"0088 1417 0D84 DDE1 23FA C81D 487D C9AB" /* .ˆ...„Ýá#úÈ.H}É« */
- $"F239 ABB4 24E0 6694 291C 885C 23CE F212" /* ò9«´$àf”).ˆ\#Îò. */
- $"29F4 5656 7DD1 182A 2C11 AAEF 7534 24EE" /* )ôVV}Ñ.*,.ªïu4$î */
- $"9886 347F 28AD 6952 0A82 E9A4 6AA9 9390" /* ˜†4.(­iR‚é¤j©“ */
- $"06A8 EF47 527A EDF2 894B 5234 A900 82B1" /* .¨ïGRzíò‰KR4©.‚± */
- $"724D 791B 676C BC97 B3A5 94F7 137E FE8D" /* rMy.gl¼—³¥”÷.~þ */
- $"50F5 C1EE 0C5B 1F3D CEF4 DD64 709C 095B" /* PõÁî.[.=ÎôÝdpœÆ[ */
- $"A51A B239 3EC3 C9BA 39EC DBE2 FB9A 3C6F" /* ¥.²9>Ãɺ9ìÛâûš<o */
- $"BBC4 DE3E C5AF 0043 DC2D AE64 C0A7 2039" /* »ÄÞ>ů.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.û˜ò¾Î.Èê<NQáÝ */
- $"5253 CE7A 2D16 8527 AF8E 9A17 757A A42F" /* RSÎz-.…'¯Žš.uz¤/ */
- $"6CA9 6BB3 7787 D84F 8E20 EA1F FB2D 15E3" /* l©k³w‡ØOŽ ê.û-.ã */
- $"0D2C 45A8 8C80 7DA1 89DB 5F46 F3FB 2871" /* .,E¨Œ€}¡‰Û_Fóû(q */
- $"539E 8CCA 5C03 EF20 B6B5 4956 EB82 172C" /* SžŒÊ\.ï ¶µIVë‚., */
- $"AB28 0D6D 4DF9 1F61 6F8D 61FE E962 778D" /* «(.mMù.aoaþébw */
- $"0C8E EC55 3BDC EC81 C9D1 E7D5 A811 C69A" /* .ŽìU;ÜìÉÑçÕ¨.Æš */
- $"6186 BC2C 75B4 DD3D C207 1151 4C3B 4175" /* a†¼,u´Ý=Â..QL;Au */
- $"942E 2ACF D3C7 7122 9D89 31B3 0918 EDC0" /* ”.*ÏÓÇq"‰1³Æ.íÀ */
- $"9D45 75D8 DE61 5036 6D9F 3373 4827 7ADE" /* EuØÞaP6mŸ3sH'zÞ */
- $"1BD1 16E8 8905 37D4 D811 1077 B359 0FF6" /* .Ñ.è‰.7ÔØ..w³Y.ö */
- $"0460 F360 20A5 B532 3418 142A B432 C2E9" /* .`ó` ¥µ24..*´2Âé */
- $"A0D6 DB04 317D 28F3 C893 AAE3 19B1 5742" /*  ÖÛ.1}(óÈ“ªã.±WB */
- $"7BF6 615C 0EAC F35E 0CD4 B142 A289 5458" /* {öa\.¬ó^.Ô±B¢‰TX */
- $"D699 1584 46FF 7174 758F B1F8 F540 F427" /* Ö™.„Fÿqtu±øõ@ô' */
- $"A496 8795 E66B 3DDC FB80 D0B8 9411 7240" /* ¤–‡•æk=Üû€Ð¸”.r@ */
- $"0374 54DC B2CA C982 BD5E FD06 4B02 5E8D" /* .tTܲÊÉ‚½^ý.K.^ */
- $"A958 79AA 5BE6 B5A2 76C3 7C23 0D45 6768" /* ©Xyª[æµ¢vÃ|#.Egh */
- $"D726 8259 FD2E E5CE 9B70 0600 22E7 82A3" /* ×&‚Yý.åΛp.."ç‚£ */
- $"8E14 9626 C4EC EED9 E7D8 13C9 623F 3DEB" /* Ž.–&ÄìîÙçØ.Éb?=ë */
- $"357B E617 A43A C9D4 328A C30A FF45 71BA" /* 5{æ.¤:ÉÔ2ŠÃÂÿEqº */
- $"1F8B 3945 8E06 0CF0 4749 0840 6F5A EDDB" /* .‹9EŽ..ðGI.@oZíÛ */
- $"29AC E877 27BD 6C8C A131 8A1C 9228 0FC5" /* )¬èw'½lŒ¡1Š.’(.Å */
- $"A029 D1A1 324D EFCE EB3F 2B92 150D FB8C" /*  )Ñ¡2MïÎë?+’..ûŒ */
- $"5399 1ABD D375 08BF 8F3F E788 684D 3064" /* S™.½Óu.¿?çˆhM0d */
- $"70B4 A733 4AB6 239A DC03 724F C8B8 F1BB" /* p´§3J¶#šÜ.rOȸñ» */
- $"8F1F A795 FF18 8256 0050 FF74 EDF1 3D05" /* .§•ÿ.‚V.Pÿtíñ=. */
- $"6CB0 E566 9272 E493 C085 3D06 3116 4ECE" /* l°åf’rä“À…=.1.NÎ */
- $"402D 329F 4BBB 2598 A7CF BEE1 333D 9019" /* @-2ŸK»%˜§Ï¾á3=. */
- $"61BB 1A29 2616 E907 2CD6 F64C 456F 9881" /* a».)&.é.,ÖöLEo˜ */
- $"725B 5C38 A40D 60D3 6B4F FDF1 87D7 4786" /* r[\8¤.`ÓkOýñ‡×G† */
- $"29BF CAEB 223A 044D 0F61 FDE6 0A3E 7727" /* )¿Êë":.M.aýæÂ>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.#ÝêŽ.,]Û<W */
- $"BAEC 18E5 1ECE 91D7 A40E 08ED 23EA 55B6" /* ºì.å.Αפ..í#êU¶ */
- $"AA2C F48A 7B0E 8CAE 90DD 5840 41FF 7F4C" /* ª,ôŠ{.Œ®ÝX@Aÿ.L */
- $"47AD E774 87C4 9AB1 9CAD E633 DECD 3E36" /* G­çt‡Äš±œ­æ3ÞÍ>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û<M/e€.:3h=T */
- $"55DF 6B52 1A54 9010 C4D2 12C8 D497 9CDB" /* UßkR.T.ÄÒ.ÈÔ—œÛ */
- $"173A 0609 66F1 C6C0 FD02 47A0 B2E2 D2E6" /* .:.ÆfñÆÀý.G ²âÒæ */
- $"096E F870 0776 4898 2F2B 84CF BA83 D656" /* Ænøp.vH˜/+„ϺƒÖV */
- $"7F77 79FF 0F1D 2A6E 03C6 4D0F E3EF D23B" /* .wyÿ..*n.ÆM.ãïÒ; */
- $"6F82 5F72 6701 98DF 5A63 DA7B 0ABC 75E2" /* o‚_rg.˜ßZcÚ{¼uâ */
- $"382D 0D93 3C8C 5308 19EA EF8D 7922 CD36" /* 8-.“<ŒS..êïy"Í6 */
- $"ED21 EB4D 3D77 5A8A 1380 E238 22E5 84AA" /* í!ëM=wZŠ.€â8"優 */
- $"4488 7DCE 91A0 CB4B 67FA 74AF EA3D 1C8E" /* Dˆ}Α ËKgút¯ê=.Ž */
- $"9279 611D FD02 D08F D952 B05D 2C11 B545" /* ’ya.ý.ÐÙR°],.µE */
- $"5F17 FF5C 1E9C 6A77 DA2F A474 B20C F5A2" /* _.ÿ\.œjwÚ/¤t².õ¢ */
- $"B2D4 176F 97E4 CE9E B576 C3E0 0F3D ECB9" /* ²Ô.o—äΞµvÃà.=ì¹ */
- $"7B35 DEBB 5ABA 9738 36F8 524D 74D8 08FF" /* {5Þ»Zº—86øRMtØ.ÿ */
- $"29A7 9B08 5B43 7C17 FB53 234E 4806 B0C3" /* )§›.[C|.ûS#NH.°Ã */
- $"AF3A FF38 CCAF FEAA C60F D103 32AC 7D7F" /* ¯:ÿ8̯þªÆ.Ñ.2¬}. */
- $"D2B8 51C1 7B7D 56FD 7CFB D2B5 C55B 7C7D" /* Ò¸QÁ{}Vý|ûÒµÅ[|} */
- $"7D30 10C2 4181 3358 5DD6 4625 4FFC EA30" /* }0.ÂA3X]ÖF%Oüê0 */
- $"3402 194F 6D0B 53D8 3C64 54AE E8DA 7874" /* 4..Om.SØ<dT®èÚxt */
- $"7FF1 DE25 3147 0AF0 D5B6 7BF7 88DD 5199" /* .ñÞ%1GÂðÕ¶{÷ˆÝQ™ */
- $"611E 526D B6DB 6DB6 DB69 9C6E 7A40 821D" /* a.Rm¶Ûm¶Ûiœnz@‚. */
- $"4416 6952 04BB 9C0A F19B 2C62 E698 A4F5" /* D.iR.»œÂñ›,b昤õ */
- $"9B83 3C59 8217 0000 0034 8080 DB92 4924" /* ›ƒ<Y‚....4€€Û’I$ */
- $"9249 247D 32D0 9B20 73FF 7E44 A49A 44BB" /* ’I$}2Л sÿ~D¤šD» */
- $"EB45 3E31 A4A0 C0CC BBC0 B29E 7771 4FDE" /* ëE>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ç<v—¯.q£-ÜZ */
- $"28A9 FE90 6CC0 9484 30D1 FCCD 4991 0758" /* (©þlÀ”„0ÑüÍI‘.X */
- $"BE36 B1DE 3A2E B6F8 2756 C568 2A7F D038" /* ¾6±Þ:.¶ø'VÅh*.Ð8 */
- $"2397 6E8F 32E0 C1AC 3736 32A3 C18E 13C4" /* #—n2àÁ¬762£ÁŽ.Ä */
- $"D298 8703 F9AF E24B A630 0627 6E63 ED70" /* Ò˜‡.ù¯âK¦0.'ncíp */
- $"0662 A833 6515 7225 C79D 8C1F 7410 45BF" /* .b¨3e.r%ÇŒ.t.E¿ */
- $"5019 F088 7C6C 43FC AE88 B794 5847 505F" /* P.ðˆ|lCü®ˆ·”XGP_ */
- $"2B73 6E58 E20E 18A2 01B4 DF7F F5BD D4BC" /* +snXâ..¢.´ß.õ½Ô¼ */
- $"B259 706B 754E 9740 BBF2 54FC FCB8 B293" /* ²YpkuN—@»òTüü¸²“ */
- $"4CEA 3670 D04B 8C42 B7C2 314D 1F53 956B" /* Lê6pÐKŒB·Â1M.S•k */
- $"CB14 9D05 8288 E7F0 D4FF 70AE EFB7 A10B" /* Ë..‚ˆçðÔÿp®ï·¡. */
- $"EDDE 3CFE 1B9D 7DBA 7B7D BD13 DF6F 45B8" /* íÞ<þ.}º{}½.ßoE¸ */
- $"FE1A 077D B444 FAB6 46FB 75FC E8AB DECC" /* þ..}´Dú¶Fûuüè«ÞÌ */
- $"AF0D 6C8A C695 8734 8A7A 5A21 F65D 05F6" /* ¯.lŠÆ•‡4ŠzZ!ö].ö */
- $"A417 27AC 998E 3646 07A8 0055 19DC B524" /* ¤.'¬™Ž6F.¨.U.ܵ$ */
- $"D2F2 842C DF9F BECA C26B C9C9 D0FD CA3B" /* Òò„,ߟ¾ÊÂkÉÉÐýÊ; */
- $"DB1B 3F81 F6A7 4465 001E 5552 4D0D 3BF3" /* Û.?ö§De..URM.;ó */
- $"0140 A2E9 7D63 8456 F9C7 665D F7FC 2DBF" /* .@¢é}c„VùÇf]÷ü-¿ */
- $"1B41 0667 7939 1B16 4997 5584 3CFE 81B9" /* .A.gy9..I—U„<þ¹ */
- $"C4A8 B346 EC6D E726 2560 5CB8 8B84 7699" /* Ĩ³Fìmç&%`\¸‹„v™ */
- $"3999 2CA0 91D9 A05A C96C 660C 267B 74A0" /* 9™, ‘Ù ZÉlf.&{t  */
- $"B935 73EB D464 D860 2694 7584 A4D4 DC52" /* ¹5sëÔdØ`&”u„¤ÔÜR */
- $"D136 D49A 1BEA 53F5 AE2F C19E 44E9 BA0A" /* Ñ6Ôš.êSõ®/ÁžDéºÂ */
- $"5D83 6587 7792 3DCB 449A B33E 4632 A395" /* ]ƒe‡w’=ËDš³>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!‹{{‡.ê%¡<UÌ */
- $"0644 1B14 3456 2E32 C013 815C 66C7 0526" /* .D..4V.2À.\fÇ.& */
- $"E24D CE15 B8FB 5D8B 0506 E30A 1D6A E2ED" /* âMÎ.¸û]‹..ãÂ.jâí */
- $"6145 D124 0EC9 1FAB 4E50 06C2 9DA5 8F6C" /* aEÑ$.É.«NP.Â¥l */
- $"C072 D11E BFEE DFE6 F6C7 12F4 E89C 35B7" /* ÀrÑ.¿îßæöÇ.ôèœ5· */
- $"097E 2E25 393F CEA3 03C6 D3C7 DED5 3882" /* Æ~.%9?Σ.ÆÓÇÞÕ8‚ */
- $"ED26 A3FD 9130 95B5 F3FA D31A 691F 8E09" /* í&£ý‘0•µóúÓ.i.ŽÆ */
- $"BFA8 7D7B 85BD B179 5C20 2855 1268 F9AF" /* ¿¨}{…½±y\ (U.hù¯ */
- $"553D 939E 6FC6 C67E 4611 F88C BBD4 773C" /* U=“žoÆÆ~F.øŒ»Ôw< */
- $"5F16 D598 D5C5 E649 B66E FD8D A2D7 9807" /* _.Õ˜ÕÅæI¶ný¢×˜. */
- $"EDA2 4621 2CF5 DDE3 C078 6455 1C29 3A07" /* í¢F!,õÝãÀxdU.):. */
- $"E992 C5DE 8D33 041B 83C6 56F6 7C95 168E" /* é’ÅÞ3..ƒÆVö|•.Ž */
- $"6127 40D2 DE11 CFF2 3379 DC22 20E3 5E1B" /* a'@ÒÞ.Ïò3yÜ" ã^. */
- $"DE83 DBB5 5B8A 8572 3DF2 2890 DC56 BE6E" /* ÞƒÛµ[Š…r=ò(ÜV¾n */
- $"D15F 9396 ECD4 725F 2E18 7616 394A 64C3" /* Ñ_“–ìÔr_..v.9Jdà */
- $"FDAA E6F2 3D6D 46BC B270 5B8F ACB4 9CAE" /* ýªæò=mF¼²p[¬´œ® */
- $"0D0D 3F29 6A02 1E92 347A E406 A52D 111A" /* ..?)j..’4zä.¥-.. */
- $"2E79 0340 1D82 C861 0C40 1963 3397 A4FD" /* .y.@.‚Èa.@.c3—¤ý */
- $"A998 0B63 E30A 7AA3 A5BC 8A8E 9CD0 4795" /* ©˜.cãÂz£¥¼ŠŽœÐG• */
- $"7538 7FB2 EC9A 952C CE29 C80F 369C 4E8D" /* u8.²ìš•,Î)È.6œN */
- $"8000 1C55 D5F3 E2AD 812E 4FAA AC2C D9BB" /* €..UÕóâ­.Oª¬,Ù» */
- $"F4CD 5568 5643 826F 3A38 91BD 6F70 92D3" /* ôÍUhVC‚o:8‘½op’Ó */
- $"23EC DB91 0FC4 C3BB 7542 023B 85F0 36C3" /* #ìÛ‘.ÄûuB.;…ð6à */
- $"8BF6 F6F8 4E77 EEE5 851F 219A CF99 7D9E" /* ‹ööøNwîå….!šÏ™}ž */
- $"856D A687 BC63 8E39 0407 B007 D184 10BD" /* …m¦‡¼cŽ9..°.Ñ„.½ */
- $"D9EF ACB1 B75A 46FA F95E 42DF 377B E2F7" /* Ùבּ·ZFúù^Bß7{â÷ */
- $"BEF2 357A 861C F486 B3F7 57E1 D39B 095B" /* ¾ò5z†.ô†³÷WáÓ›Æ[ */
- $"40C0 925C 0CA1 7885 CFEA 48B7 33E9 E8DE" /* @À’\.¡x…ÏêH·3éèÞ */
- $"D178 1E15 91D1 F6C5 BC87 CB7E CCC6 DEDE" /* Ñx..‘Ñöż‡Ë~ÌÆÞÞ */
- $"B017 A4C1 0B0F DD17 660E CB97 C098 C773" /* °.¤Á..Ý.f.Ë—À˜Çs */
- $"8A0A F4DB 59BD A218 055E 5348 05D8 B304" /* ŠÂôÛY½¢..^SH.س. */
- $"9F23 E1B1 0754 6DA2 FF33 34CB 2B12 7114" /* Ÿ#á±.Tm¢ÿ34Ë+.q. */
- $"62D2 4CA8 8091 CD34 8467 2752 B77A AA5B" /* bÒL¨€‘Í4„g'R·zª[ */
- $"15FC 2E56 7A29 9351 B6A4 AEE5 B56D 354D" /* .ü.Vz)“Q¶¤®åµm5M */
- $"3ED2 FA71 25E9 F887 B187 BADB B11B 2E01" /* >Òú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" /* žÇŠ.—ô<inV..6ÁG */
- $"E7D3 6FE5 A0C6 D7DC BCB0 76AC C4F8 DD65" /* çÓoå Æ×ܼ°v¬ÄøÝe */
- $"A5F9 02BF 2BFD 9A2C 354D 24C2 E088 6B63" /* ¥ù.¿+ýš,5M$Âàˆkc */
- $"E514 C014 E8F4 F5C2 B529 74FB EC02 032B" /* å.À.èôõµ)tûì..+ */
- $"A54B 696E B602 7D58 4542 824D BD8C 40FA" /* ¥Kin¶.}XEB‚M½Œ@ú */
- $"F675 5CD4 71C9 058E 7062 0E1B 10CC 72A9" /* öu\ÔqÉ.Žpb...Ìr© */
- $"95B8 C5FD 7EAF 995C 62ED DDE4 6579 3181" /* •¸Åý~¯™\bíÝäey1 */
- $"8BA1 A02B 1559 F5BC E9C9 914D 8CEB D7D8" /* ‹¡ +.Yõ¼éÉ‘MŒë×Ø */
- $"7D81 20C0 A609 18D2 B679 7C08 FB00 E4C6" /* } À¦Æ.Ò¶y|.û.äÆ */
- $"2797 518E 32CE 67CE 3C8E 6796 A832 F712" /* '—QŽ2ÎgÎ<Žg–¨2÷. */
- $"0037 059C 96CD 85A0 98E6 5D20 05F2 EC61" /* .7.œ–Í… ˜æ] .òìa */
- $"335D AFFF 14BC 3EF9 0779 7A53 BAA4 F47A" /* 3]¯ÿ.¼>ù.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Ä<k]ðUz; */
- $"77CB BFA9 2B73 06AF 9C8B AF37 F600 E568" /* wË¿©+s.¯œ‹¯7ö.åh */
- $"EE70 09D2 B0A7 C201 94D9 AC58 E9A2 9D53" /* îpÆÒ°§Â.”Ù¬Xé¢S */
- $"94C0 D1C9 E379 E453 E4C7 27C5 C3F8 1161" /* ”ÀÑÉãyäSäÇ'ÅÃø.a */
- $"D631 3F3C 0CFE 13A3 F6EB 3048 F049 CF11" /* Ö1?<.þ.£öë0HðIÏ. */
- $"5962 65AE 5D8E F911 A2E2 7787 6C78 F63C" /* Ybe®]Žù.¢âw‡lxö< */
- $"E24C ED5B F634 B2B9 9DDF 51B0 94B9 1ABF" /* âLí[ö4²¹ßQ°”¹.¿ */
- $"BE93 4236 35A6 613E 3D1B C8FD 0587 27C7" /* ¾“B65¦a>=.Èý.‡'Ç */
- $"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" /* ä_¥.<hÊs:W£^F-’. */
- $"9D19 A4FE F266 C323 64FF 7B71 19F7 0BC3" /* .¤þòfÃ#dÿ{q.÷.Ã */
- $"062C 20C4 9745 F075 6FFF 31F0 A3AD 4C84" /* ., Ä—Eðuoÿ1ð£­L„ */
- $"00F3 104C 0064 3899 0DB9 8128 CB5F FF46" /* .ó.L.d8™.¹(Ë_ÿF */
- $"7184 41CB 7E58 4C0B ADD5 CBB2 1A61 E3D6" /* q„AË~XL.­Õ˲.aãÖ */
- $"B45F 489E 7FE9 D915 2B77 0776 98BD B3A6" /* ´_Hž.éÙ.+w.v˜½³¦ */
- $"230E B817 1D5A D937 3251 2449 6B0A 5A13" /* #.¸..ZÙ72Q$IkÂZ. */
- $"C4E0 BB45 CB72 9758 9E56 158D B1E6 9590" /* Äà»EËr—XžV.±æ• */
- $"4FC4 0611 EDBC 426F 6D2B D932 D595 A74E" /* OÄ..í¼Bom+Ù2Õ•§N */
- $"8728 58CD BD02 9746 DBA2 7EAB 0F07 363C" /* ‡(Xͽ.—FÛ¢~«..6< */
- $"BAB3 1228 E02A BDB4 373F F3FB FF7D 8D0D" /* º³.(à*½´7?óûÿ}. */
- $"2193 09F4 7603 A017 98B1 421E 7A47 D126" /* !“Æôv. .˜±B.zGÑ& */
- $"82FD 5449 B97F F864 5CD5 19F6 A8A4 F216" /* ‚ýTI¹.ød\Õ.ö¨¤ò. */
- $"A4B3 FF7F E820 4C58 DE4B 944B 6FD4 F4DA" /* ¤³ÿ.è LXÞK”KoÔôÚ */
- $"596E A688 456C 3F0D 7844 1596 2BED 0D5D" /* Yn¦ˆEl?.xD.–+í.] */
- $"FAFB 8D2E D7D0 ABCB B2BE 8D80 E74D 9EDC" /* úû.×Ы˲¾€çMžÜ */
- $"7FFF 7FC9 2FB9 3BDA F47A B9C2 E1B8 5CC8" /* .ÿ.É/¹;Úôz¹Âá¸\È */
- $"14AB D534 7208 32FE 73D2 EF23 862E 10F8" /* .«Õ4r.2þsÒï#†..ø */
- $"C16F 1FFF 6FBB FA97 5167 CDAD 4886 8FC2" /* Áo.ÿo»ú—QgÍ­H†Â */
- $"BFFF 7FFE 2B73 126E 1EC8 C82A 3F6D 6CC3" /* ¿ÿ.þ+s.n.ÈÈ*?mlà */
- $"D98A D501 1DC2 82FD FF57 9731 B866 2A7D" /* ÙŠÕ..‚ýÿW—1¸f*} */
- $"C983 5F41 893F 2D09 F81C E373 42C2 5963" /* Ƀ_A‰?-Æø.ãsBÂYc */
- $"7E9F C269 2B8B C21A 8247 D433 0DF7 491E" /* ~ŸÂi+‹Â.‚GÔ3.÷I. */
- $"D1BF 3D9E F4BD 1B50 8034 4EE9 4A69 B155" /* Ñ¿=žô½.P€4NéJi±U */
- $"849A B0F7 8CEA 3FD0 E4A0 C339 2431 ED8B" /* „š°÷Œê?Ðä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FD9F 7F36 9703 7BCA 1455 6A98 F02E" /* #fýŸ.6—.{Ê.Uj˜ð. */
- $"1EDC 4707 C9A6 B325 A6E4 637D 612B B3DD" /* .ÜG.ɦ³%¦äc}a+³Ý */
- $"1E5A 3660 EEB0 BEFA 2C50 307B 5887 6D39" /* .Z6`î°¾ú,P0{X‡m9 */
- $"0EC7 2D81 C32E 6B72 8546 30E4 133F 3D3B" /* .Ç-Ã.kr…F0ä.?=; */
- $"0A76 21AA 4387 8F29 03C8 1C32 755C F553" /* Âv!ªC‡).È.2u\õS */
- $"5CA1 C16A 02EC 4654 97C8 6F10 BA2A 16E0" /* \¡Áj.ìFT—Èo.º*.à */
- $"DB18 605E 8A18 8A6E 4F35 1EF7 8C57 F8B2" /* Û.`^Š.ŠnO5.÷ŒWø² */
- $"0020 4D0A 1739 2287 ADE2 B0C2 D816 17D2" /* . MÂ.9"‡­â°ÂØ..Ò */
- $"21F8 3104 FEA8 38E3 8644 6F0B D2C6 A599" /* !ø1.þ¨8ã†Do.ÒÆ¥™ */
- $"B793 1367 B548 23BD 8836 1143 D5DB 2720" /* ·“.gµH#½ˆ6.CÕÛ' */
- $"73BB 1485 DEAF C96F 24E8 AA26 56B9 89D3" /* s».…Þ¯Éo$èª&V¹‰Ó */
- $"8F8D 2F3E 5EA5 466C BE3C 6879 6C0A 5891" /* />^¥Fl¾<hylÂX‘ */
- $"974E 6F22 0E47 66D4 BD1F 6A7D 1885 42CC" /* —No".GfÔ½.j}.…BÌ */
- $"7E13 126E AC98 74B7 B093 BDFF 37DB E527" /* ~..n¬˜t·°“½ÿ7Ûå' */
- $"E6D0 CF2A D7E6 E7EB 1095 05AF 6407 BB9B" /* æÐÏ*×æçë.•.¯d.»› */
- $"0227 D5EB 260A C844 340F B249 E84F 58A7" /* .'Õë&ÂÈD4.²IèOX§ */
- $"FA14 9D34 7614 73A6 BE73 ED76 B2CD 4515" /* ú.4v.s¦¾sív²ÍE. */
- $"F26C 3AD7 7C32 5480 5A3A C4DF 123A EA95" /* òl:×|2T€Z:Äß.:ê• */
- $"D2B4 A3D8 F88D E685 6505 A999 DD9E C8D1" /* Ò´£Øøæ…e.©™ÝžÈÑ */
- $"A073 3702 5A8F 3598 F7DC A36F 0058 065E" /*  s7.Z5˜÷Ü£o.X.^ */
- $"65E6 B5AC 2A85 0F1C 43BF 8A10 43A0 BB10" /* e浬*…..C¿Š.C ». */
- $"4C3A 8F4F 95AD 253D EEE9 FBE8 4023 4647" /* L:O•­%=îéûè@#FG */
- $"7A75 8F1C 9245 3C51 3FF5 BD2B DFD3 57EF" /* zu.’E<Q?õ½+ßÓWï */
- $"1FB4 900F 4546 6EFA A7AE 45EB EAE9 7B9D" /* .´.EFnú§®Eëêé{ */
- $"6408 1DCB F7AC BE44 7D08 1482 2257 A9CF" /* d..Ë÷¬¾D}..‚"W©Ï */
- $"8B78 3610 9816 9518 A64C 215A 4569 6C5F" /* ‹x6.˜.•.¦L!ZEil_ */
- $"57E0 4F89 F77C 88D6 ADFC 8E42 9299 A2C9" /* WàO‰÷|ˆÖ­üŽB’™¢É */
- $"0F7C EA0A 7E98 B7AF 70ED 09A8 0759 B1A7" /* .|êÂ~˜·¯píƨ.Y±§ */
- $"C18E 2CC9 883F A788 A2F1 57B9 7A0E F384" /* ÁŽ,Ɉ?§ˆ¢ñW¹z.ó„ */
- $"F0CE 46F0 E10A ED6F CE17 2BE1 25D5 3A36" /* ðÎFðáÂíoÎ.+á%Õ:6 */
- $"5C6A F3AA F2D1 7225 6C5C 514F 8F1F 64A5" /* \jóªòÑr%l\QO.d¥ */
- $"B08E D05D 3E2E B3E4 DE48 12A9 7DC6 6E03" /* °ŽÐ]>.³äÞ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%ä.%<kì.¿ï */
- $"3E5E 0ACF 766D 9D4E 8978 2AC5 F138 755A" /* >^ÂÏ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ÇÛ.<g */
- $"7F80 43C8 7B29 FA49 8C64 3FEB 6406 35FE" /* .€CÈ{)úIŒd?ëd.5þ */
- $"FAEB 4922 9410 5352 D4C0 00CB 72EA 56CE" /* úëI"”.SRÔÀ.ËrêVÎ */
- $"22F8 673A D3E8 AAFA E992 5B7F 827C A83D" /* "øg:Óèªúé’[.‚|¨= */
- $"586F 54B4 69F8 C6B7 FF14 CFD4 4069 C50F" /* XoT´iøÆ·ÿ.ÏÔ@iÅ. */
- $"9E23 797E DE78 5B86 FCAE BDE5 B920 9551" /* ž#y~Þx[†ü®½å¹ •Q */
- $"22EC 4155 0582 10F4 BF8C 144A 3251 97F3" /* "ìAU.‚.ô¿Œ.J2Q—ó */
- $"2E7D 1E04 969B 4C15 8BDB FAC1 9743 2B6C" /* .}..–›L.‹ÛúÁ—C+l */
- $"6EF5 C95E 47CB A380 A635 C17D AD97 42EA" /* nõÉ^GË£€¦5Á}­—Bê */
- $"88A1 A63E FC76 A19C AE08 C868 115F 098D" /* ˆ¡¦>ü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" /* <YÞxDÐäE¼ :à.Ùt@ */
- $"F09F 10EA E0BA 4596 84F5 81A2 550E 57A7" /* ðŸ.êàºE–„õ¢U.W§ */
- $"F2A8 B2DD D612 A18F D74A 671D B70C 994A" /* ò¨²ÝÖ.¡×Jg.·.™J */
- $"9441 8E10 12B8 80F0 6249 2075 CD39 3667" /* ”AŽ..¸€ðbI uÍ96g */
- $"6632 AFDD 5E48 6B22 15CC 179A C6FA 47AE" /* f2¯Ý^Hk".Ì.šÆúG® */
- $"66AF 7AFB 033D 03F1 B829 B852 F1BF 55DB" /* f¯zû.=.ñ¸)¸Rñ¿UÛ */
- $"17F6 E1EF A955 F266 ACFE 75F4 34FC 38B0" /* .öáï©Uòf¬þuô4ü8° */
- $"0068 7DD6 016E 98D4 57DB 6220 D269 4BE9" /* .h}Ö.n˜ÔWÛb ÒiKé */
- $"8007 22E8 9D82 8FCE EB41 317B D0FA 323B" /* €."è‚ÎëA1{Ðú2; */
- $"B2C0 06D3 99E3 ED9A 2423 78CD AE34 CF5B" /* ²À.Ó™ãíš$#xÍ®4Ï[ */
- $"58DA 8F69 9604 4804 8682 B58C C1DA 1E21" /* XÚi–.H.†‚µŒÁÚ.! */
- $"0E4E F709 83E1 B335 F208 6565 C882 70A0" /* .N÷ƃá³5ò.eeÈ‚p  */
- $"2F58 5379 3999 7F2E E63D 81E4 C2EB 58E3" /* /XSy9™..æ=äÂëXã */
- $"4605 35E7 76D7 C7D0 AEDA 26C5 8BB6 0F99" /* F.5çv×ÇЮÚ&Å‹¶.™ */
- $"77C0 D3D6 9870 8279 4C2E 29C6 518F 13E6" /* wÀÓÖ˜p‚yL.)ÆQ.æ */
- $"1373 FCB8 FD55 3D8F 8322 F8F4 CD80 3C09" /* .sü¸ýU=ƒ"øôÍ€<Æ */
- $"1496 931A E1BF 0AE6 2842 6FF7 6986 6AEE" /* .–“.á¿Âæ(Bo÷i†jî */
- $"1AE9 FF0A 947D E3F6 D93F B59B F6D5 5FB6" /* .éÿ”}ãöÙ?µ›öÕ_¶ */
- $"AAC7 EDD1 1FDB 5A5F 5549 7D55 2E1F B6A4" /* ªÇíÑ.ÛZ_UI}U..¶¤ */
- $"FDAA F7D4 DF7D 4E80 F173 72EC 2AD6 46CC" /* ýª÷Ôß}N€ñsrì*ÖFÌ */
- $"6653 9F8A F548 8CD9 F7CC 0758 DFBD 1976" /* fSŸŠõHŒÙ÷Ì.Xß½.v */
- $"0832 03BE 1A6C 242F 4978 025D 37A6 D46A" /* .2.¾.l$/Ix.]7¦Ôj */
- $"B859 037D 5250 D0D6 8FC0 4C05 AAAB 7F38" /* ¸Y.}RPÐÖÀL.ª«.8 */
- $"799B 43F9 E370 D367 B412 8CC2 F941 E270" /* y›CùãpÓg´.ŒÂùAâp */
- $"A967 1978 577B 7A22 541A 7DDD A593 75E5" /* ©g.xW{z"T.}Ý¥“uå */
- $"6B05 D950 D953 DA5E 7EBF D5D3 4314 5006" /* k.ÙPÙSÚ^~¿ÕÓC.P. */
- $"8EC3 8474 6B41 83B3 7B16 9C95 721B 5405" /* ŽÃ„tkAƒ³{.œ•r.T. */
- $"F4AE A41F 92D8 56DA F2C9 4BF8 5B0A EBC6" /* ô®¤.’ØVÚòÉKø[ÂëÆ */
- $"29D5 F4F3 36B9 A6D7 3BC4 75D7 972C 7465" /* )Õôó6¹¦×;Äu×—,te */
- $"CCBE 21FA 6EAF 6B26 465B 4676 356D E640" /* ̾!ún¯k&F[Fv5mæ@ */
- $"04C3 0E39 C431 FBA5 2B53 E001 8F9D 37F5" /* .Ã.9Ä1û¥+Sà.7õ */
- $"F289 EC84 85B8 5FC3 F74A 734B E0B1 ED8C" /* ò‰ì„…¸_Ã÷JsKà±íŒ */
- $"5DF4 6678 22E4 887C A45B 1478 DFC3 A9E9" /* ]ôfx"äˆ|¤[.xßéé */
- $"F234 5723 01B3 2685 2754 8133 8699 21C8" /* ò4W#.³&…'T3†™!È */
- $"180A 27F8 174C FED5 8F71 4082 C4E8 DB83" /* .Â'ø.LþÕq@‚ÄèÛƒ */
- $"BDA4 4506 3FA4 5286 5D63 00F7 905D A740" /* ½¤E.?¤R†]c.÷]§@ */
- $"5251 07FA 22F8 1334 FBA6 5640 7199 FA41" /* RQ.ú"ø.4û¦V@q™úA */
- $"A3C7 3CC1 ECF5 7F43 A9AE FBD5 C1F0 18B3" /* £Ç<Áìõ.C©®ûÕÁð.³ */
- $"7072 4809 0A4C 8127 6E10 5F7C 335C CC28" /* prHÆÂL'n._|3\Ì( */
- $"B723 3D12 724D 3DE5 37B3 1C2A 136D 2258" /* ·#=.rM=å7³.*.m"X */
- $"DCE6 BFA4 0DAD FB6E 72C1 70F7 6D71 785D" /* Ü濤.­ûnrÁp÷mqx] */
- $"BC75 69CE CE3B CF7A 170E 8343 CBA9 DE66" /* ¼uiÎÎ;Ïz..ƒCË©Þf */
- $"06ED 779C AA9F F28D 943D 5E3E DEDE 4769" /* .íwœªŸò”=^>ÞÞ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" /* \<m톖Hd.V8C.YŠ*/
- $"D913 B06B 0B08 E00E 1802 6D82 7225 E695" /* Ù.°k..à...m‚r%æ• */
- $"9F1E E7B0 D1DF 323C 61DC 1F25 E3FF 83E2" /* Ÿ.ç°Ñß2<aÜ.%ãÿƒâ */
- $"A49A DED4 4495 A948 5B70 9E5A 01F1 2431" /* ¤šÞÔD•©H[pžZ.ñ$1 */
- $"8EE5 2B54 2863 9041 FAE9 9E9F 1B85 E206" /* Žå+T(cAú鞟.…â. */
- $"4104 106C 5027 632A 8716 C3A5 F047 B3D5" /* A..lP'c*‡.Ã¥ðG³Õ */
- $"EE2B 19CD 2B75 17D8 DFB6 E2BF 491E A41F" /* î+.Í+u.Ø߶â¿I.¤. */
- $"BC48 3493 DEFB 453D 64DE DEA0 68DB EF5B" /* ¼H4“ÞûE=dÞÞ hÛï[ */
- $"1E69 8F3F C55C 1FF6 1823 1543 F483 DF20" /* .i?Å\.ö.#.Côƒß */
- $"F5B4 08F4 5D20 4DF0 7D7D 2007 2ACA 5B5E" /* õ´.ô] Mð}} .*Ê[^ */
- $"159F EF4A 505D 811D A8A3 5476 5539 B45B" /* .ŸïJP].¨£TvU9´[ */
- $"3113 1AC7 00F3 F1A7 E9E3 9E88 5D91 6CD5" /* 1..Ç.óñ§é㞈]‘lÕ */
- $"2CC0 F92B 2063 FF29 4B0E 775A 06EE 75CC" /* ,Àù+ cÿ)K.wZ.îuÌ */
- $"DA54 AC2F B72D 1C25 1E46 A4F8 C3E1 7D8D" /* ÚT¬/·-.%.F¤øÃá} */
- $"85AE BBE6 3DBE EC4A 35F7 3B36 1FBF BC38" /* …®»æ=¾ìJ5÷;6.¿¼8 */
- $"2DC1 785C D644 2BED AB51 1950 2643 8730" /* -Áx\ÖD+í«Q.P&C‡0 */
- $"2AE9 E4EB 1B8E 8F90 BA0C FF2F 6F65 5F28" /* *éäë.Žº.ÿ/oe_( */
- $"1A3F 9398 FF20 01A2 69A0 02C9 8D1B C3EA" /* .?“˜ÿ .¢i .É.Ãê */
- $"A600 6417 3CA3 9E84 93EF 063D 59DC 702C" /* ¦.d.<£ž„“ï.=YÜp, */
- $"959D C3A6 B1ED DEF1 F321 5BA6 FCCD 7762" /* •Ã¦±íÞñó![¦üÍwb */
- $"6C23 7398 AA59 4BBA 0052 B8A7 0608 1AAC" /* l#s˜ªYKº.R¸§...¬ */
- $"5B2E AF60 17F4 278E 6433 6F75 7839 CED2" /* [.¯`.ô'Žd3oux9ÎÒ */
- $"F32E 5D7D 9D40 B145 4CFB A25C D8D7 4BCB" /* ó.]}@±ELû¢\Ø×KË */
- $"956D 88DD 4B92 64BF 4CD4 AFD5 6E56 9859" /* •mˆÝK’d¿LÔ¯ÕnV˜Y */
- $"ABEF BB40 AD0E 6E1F 9B3B 16A3 D9D3 58DF" /* «ï»@­.n.›;.£ÙÓXß */
- $"584E C303 1DAD D18B 6082 9C29 88EB 5163" /* XNÃ..­Ñ‹`‚œ)ˆëQc */
- $"A42D 061A 1570 64A9 0F1C E00D 56D9 E0CB" /* ¤-...pd©..à.VÙàË */
- $"7C66 799C 8EB4 BFCA CF5C CFC2 B611 4F0C" /* |fyœŽ´¿ÊÏ\϶.O. */
- $"AFDE 008C 3580 A270 0C1A 3737 50A1 9A89" /* ¯Þ.Œ5€¢p..77P¡š‰ */
- $"2546 BB2C 62A0 57BE 59CB C00A 1EE9 0F1D" /* %F»,b W¾YËÀÂ.é.. */
- $"C528 40D4 EA69 D281 AED4 B078 F27A 0B42" /* Å(@ÔêiÒ®Ô°xòz.B */
- $"7AD2 DADD 146B 7FFF 223D 6A74 2041 4FCF" /* zÒÚÝ.k.ÿ"=jt AOÏ */
- $"46E1 60C8 9ABE 841E E18D 1712 DB6D 902B" /* Fá`Èš¾„.á..Ûm+ */
- $"7BE6 56DA 7E4B 1704 A373 2802 B120 0184" /* {æVÚ~K..£s(.± .„ */
- $"0681 4499 2739 CE73 9CE8 99D8 C352 337C" /* .D™'9Îsœè™ØÃR3| */
- $"06AB BB71 6257 16EF B535 4972 8C2F 2EE0" /* .«»qbW.ïµ5IrŒ/.à */
- $"85CC 8431 D867 47EE CC43 6E87 A485 2316" /* …Ì„1ØgGîÌCn‡¤…#. */
- $"4927 AE22 C12D 49CE 739C E61C 97D0 99CC" /* I'®"Á-IÎsœæ.—Ð™Ì */
- $"3DC5 F26B 1A31 E742 3E56 464B 2944 108E" /* =Åòk.1çB>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˜Æ<H..$ydè.z` */
- $"F2C0 8287 A7F4 B307 FBDF 2550 567E 01EA" /* òÀ‚‡§ô³.ûß%PV~.ê */
- $"2C45 4614 9A0A 04E8 397B 3DEC 6CDA CA95" /* ,EF.šÂ.è9{=ìlÚÊ• */
- $"B754 699A FF29 B46B D6E3 BB8C 153C AEC0" /* ·Tišÿ)´kÖ㻌.<®À */
- $"BEFF 46AD 744B B945 4C07 F7F7 178D 059E" /* ¾ÿF­tK¹EL.÷÷..ž */
- $"2E80 10C4 6DD6 F19E B649 73D6 8C57 7A6C" /* .€.ÄmÖñž¶IsÖŒWzl */
- $"45DE 3D43 22DE C54A DFCD 64EA 9D77 1AC6" /* EÞ=C"ÞÅJßÍdêw.Æ */
- $"E15E A9A7 0D83 D53C 100B EC25 2B93 1D27" /* á^©§.ƒÕ<..ì%+“.' */
- $"367A 864E D9C4 F0B9 DF5C 538D B2C0 24EE" /* 6z†NÙÄð¹ß\S²À$î */
- $"46E7 424C 2127 6BED B492 3354 86C9 D855" /* FçBL!'kí´’3T†ÉØU */
- $"317B 6BE2 8205 C07C 9A42 03E4 D6B0 0F93" /* 1{kâ‚.À|šB.äÖ°.“ */
- $"4400 AFF0 AE8C D6D6 6729 AEBE 9CDE 5C69" /* D.¯ð®ŒÖÖg)®¾œÞ\i */
- $"D95C 01A0 28AF 1E57 B12C CA6D F010 ED89" /* Ù\. (¯.W±,Êmð.í‰ */
- $"4C46 38AA BAFC D67E 9E98 C6CA 85E4 433E" /* LF8ªºüÖ~ž˜ÆÊ…äC> */
- $"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ƒÄ­<x\ */
- $"E3B4 BFC0 C27C 3762 1D98 0A0C B43D 8107" /* ã´¿ÀÂ|7b.˜Â.´=. */
- $"3003 FF74 C626 1BC1 44AA 08A0 7A68 0ADE" /* 0.ÿtÆ&.ÁDª. zhÂÞ */
- $"E9BD 94DB 3644 AA13 CFCA A9CB 0E8F 9061" /* é½”Û6Dª.ÏÊ©Ë.a */
- $"73BC 6A23 359D C129 F184 4EBA BE0F A772" /* s¼j#5Á)ñ„Nº¾.§r */
- $"9AB6 7DDC C179 81DB 9FDC EDA3 E6C5 21E2" /* š¶}ÜÁyÛŸÜí£æÅ!â */
- $"7049 87BC 00E3 34F5 8066 3FFE 7CA7 A588" /* pI‡¼.ã4õ€f?þ|§¥ˆ */
- $"6277 30DE 8FC1 950A A652 5B12 B0A4 B8BE" /* bw0ÞÁ•Â¦R[.°¤¸¾ */
- $"2297 4261 CB90 AEBB F3CB 2BEE 2FA8 149E" /* "—BaË®»óË+î/¨.ž */
- $"11E6 487B 3EFA 45B9 E4A8 17DF DF8E D5FF" /* .æH{>ú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Âæ‚<Xf¸pEͺal */
- $"9995 BEC1 809B 0892 A7EC 43EC 7FE8 F49F" /* ™•¾Á€›.’§ìCì.èôŸ */
- $"9E4B AFD6 66BB 0B88 38ED B165 9C1D F096" /* žK¯Öf».ˆ8í±eœ.ð– */
- $"64EC FD43 9A7A BC84 8CEF 2E65 F99B 4B43" /* dìýCšz¼„Œï.eù›KC */
- $"7D47 3AE8 D0DB A066 308B 201D FF3F ABC1" /* }G:èÐÛ f0‹ .ÿ?«Á */
- $"CD0D B822 3734 A23E AF05 D1E1 F9F5 AF09" /* Í.¸"74¢>¯.Ñáùõ¯Æ */
- $"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" /* ºÍ<QÓD3×!Ǿš‘](. */
- $"3E68 3F1B 43AE 8F30 CE7F FF67 1C78 8498" /* >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}<i}²/ÿ.3 */
- $"81FC E4ED 4BF8 9180 3FD2 0142 3F2D 1DF0" /* üäíKø‘€?Ò.B?-.ð */
- $"097B D61C 019A C409 B506 26FC D55D 7AE9" /* Æ{Ö..šÄƵ.&üÕ]zé */
- $"3464 6C57 13E7 565F 2553 70C3 3EC7 87AC" /* 4dlW.çV_%SpÃ>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" /* Ã\<w]}Q€ .­£®`ªà */
- $"0D88 09A4 4F7B FAC4 A2FD 327D E109 4F0B" /* .ˆÆ¤O{úÄ¢ý2}áÆO. */
- $"3343 C0ED D985 7402 93E2 7A2E 09B4 09A6" /* 3CÀíÙ…t.“âz.ƴƦ */
- $"5348 2E51 C037 BE62 C1A7 15C4 B9C8 7F4B" /* SH.QÀ7¾bÁ§.ĹÈ.K */
- $"FC22 3596 D989 C701 6701 5488 1001 22B2" /* ü"5–Ù‰Ç.g.Tˆ.."² */
- $"C06A A5D5 2C94 6BA9 D1C6 2B33 5910 8B1F" /* Àj¥Õ,”k©ÑÆ+3Y.‹. */
- $"0B0D 5531 BE0F 3E72 9C60 75A8 2669 220D" /* ..U1¾.>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" /* <wdž.Ž<cfôî.).u\ */
- $"EDD8 6093 6868 531C 9FA3 C5C9 3F3C 7786" /* íØ`“hhS.Ÿ£ÅÉ?<w† */
- $"BCC4 440C 13F9 0BCB 76BA 9364 A3CC 344F" /* ¼ÄD..ù.Ëvº“d£Ì4O */
- $"128B D594 CB9D A2DC 6C03 CA48 2D9E 9706" /* .‹Õ”Ë¢Ül.ÊH-ž—. */
- $"A281 5170 A91B 0033 4552 2A9A BF6F D4A9" /* ¢Qp©..3ER*š¿oÔ© */
- $"61B6 F6C1 7959 FDD2 8F3F C94B 2B90 29BB" /* a¶öÁyYýÒ?ÉK+)» */
- $"9FAA A83B FEFF 80A3 1EC2 B2D9 77CF 963B" /* Ÿª¨;þÿ€£.²ÙwÏ–; */
- $"85FF 5728 5CDD 2F01 7556 8155 F8AA 7984" /* …ÿW(\Ý/.uVUøªy„ */
- $"7543 0C18 A1FC 0353 DF5F D368 41E9 E0EF" /* uC..¡ü.Sß_ÓhAéàï */
- $"C363 A78F 3FE9 41E9 5F77 19A4 A811 FF43" /* Ãc§?éAé_w.¤¨.ÿC */
- $"8EE8 3FBA 00FA 54F6 15F5 CF3B 39A6 0984" /* Žè?º.úTö.õÏ;9¦Æ„ */
- $"CC99 7AE1 8E5B 71A9 1575 DB95 F166 D52F" /* Ì™záŽ[q©.uÛ•ñfÕ/ */
- $"A270 08D4 9515 3B89 2EA1 A097 12A3 B4E9" /* ¢p.Ô•.;‰.¡ —.£´é */
- $"5BFB AE47 8FD7 60F0 33DA E91B 234B 5D2F" /* [û®G×`ð3Úé.#K]/ */
- $"7C4B 00C2 60F1 7260 B78A 1835 B440 611B" /* |K.Â`ñr`·Š.5´@a. */
- $"042D F768 F9C9 8785 50AD 8421 77D4 B97A" /* .-÷hùɇ…P­„!wÔ¹z */
- $"6B02 828C E758 8B31 1E92 DF7F BE67 3DAB" /* k.‚ŒçX‹1.’ß.¾g=« */
- $"E5F8 F1FB FD8C 34F4 4B2F 98BF 24A9 4DF2" /* åøñûýŒ4ôK/˜¿$©Mò */
- $"32A9 A661 B01E F960 12E1 9C18 F197 CEA7" /* 2©¦a°.ù`.áœ.ñ—Χ */
- $"E1C4 4AB4 7CEB 2CE2 33F3 C23C F3FD 2CF9" /* áÄJ´|ë,â3óÂ<óý,ù */
- $"F132 8395 3D39 FD9D 983D 4454 9758 856B" /* ñ2ƒ•=9ý˜=DT—X…k */
- $"6556 B234 72B0 C2CA 71CA 9CEB 7AE4 FD7C" /* eV²4r°ÂÊqÊœëzäý| */
- $"0E3F 1930 6B17 7074 C216 3D9C 24BF 5B97" /* .?.0k.ptÂ.=œ$¿[— */
- $"A7EA 25F0 9DCC AFA5 BBEF 47E9 D7E6 7B0E" /* §ê%ð̯¥»ïGé×æ{. */
- $"E02F 87A2 EF87 68FC 9BF7 F274 5F00 FC3D" /* à/‡¢ï‡hü›÷òt_.ü= */
- $"A5F8 7AC7 F0FA A5F8 7D42 C03F 0F42 FE1D" /* ¥øzÇðú¥ø}BÀ?.Bþ. */
- $"ABF0 F7CF E1EE 40ED 1CBC E67A C7C3 33E9" /* «ð÷Ïáî@í.¼æzÇÃ3é */
- $"75CE 6202 697A FF68 B299 C0A6 2F39 4F64" /* uÎb.izÿh²™À¦/9Od */
- $"6775 1459 6387 68C9 941E E328 B150 8D7C" /* gu.Yc‡hÉ”.ã(±P| */
- $"24C4 D953 4443 9A50 E4CC 4E41 B3A9 F28A" /* $ÄÙSDCšPäÌNA³©òŠ */
- $"BB0E 943C 0DAB C98A 023C 332B AE2D AF60" /* ».”<.«ÉŠ.<3+®-¯` */
- $"4D30 BA77 9D1A 93DC CEBB 7560 EA33 084C" /* M0ºw.“Üλu`ê3.L */
- $"BCFD 2F47 685E 4CC9 8A76 F1C8 04AB 126F" /* ¼ý/Gh^LÉŠvñÈ.«.o */
- $"B9FD 4A34 E181 4147 9F56 2AB4 EB2C 50EF" /* ¹ýJ4áAGŸV*´ë,Pï */
- $"D652 4543 763B B857 210B 2B4A BB50 0EAE" /* ÖRECv;¸W!.+J»P.® */
- $"90BD EEEC F92B DD18 0881 9B3A C6DF A028" /* ½îìù+Ý..›:Æß ( */
- $"45EB 36D7 50B4 D756 FB49 9F08 D74D 037B" /* Eë6×P´×VûIŸ.×M.{ */
- $"83A1 001C 0977 1DCC 81D0 B6B9 828A 6851" /* ƒ¡..Æw.Ìж¹‚ŠhQ */
- $"3CAC B3FF 572B 543A 4C73 3F35 0561 EC81" /* <¬³ÿW+T:Ls?5.aì */
- $"A8D4 82BC 9148 5E30 FF3E 3164 C43E 5461" /* ¨Ô‚¼‘H^0ÿ>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àç<?Û¥a.ŸD..àD */
- $"5844 8C9D 83C0 C5D3 6B95 CE2A 3EBC D7FD" /* XDŒƒÀÅÓk•Î*>¼×ý */
- $"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š•}<WÜŸ.æ */
- $"C3B6 16AD C91B E868 E000 1848 3BE4 5C3A" /* ö.­É.èhà..H;ä\: */
- $"1162 2272 401F 600B A973 281E 62B3 2654" /* .b"r@.`.©s(.b³&T */
- $"74B0 287C C53E A3DA 2A14 E38F 9FFE 3A8E" /* t°(|Å>£Ú*.ãŸþ:Ž */
- $"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" /* ^.^à<eWжœ7‚Ѿ:w */
- $"436E 462B 45B7 FF61 4FA4 A45B 8C34 39D8" /* CnF+E·ÿaO¤¤[Œ49Ø */
- $"1B35 B876 A5F1 F2AD 3F78 D289 1C2E E3B4" /* .5¸v¥ñò­?xÒ‰..ã´ */
- $"A28B 64FA 1E2C 0CCD 0B1C AD42 8866 DDD6" /* ¢‹dú.,.Í..­BˆfÝÖ */
- $"62F0 225B 8DF7 32B3 FC3C 79E9 000B 1CA9" /* bð"[÷2³ü<yé...© */
- $"2C82 4874 34AB B158 47CD FA9F EBC8 0923" /* ,‚Ht4«±XGÍúŸëÈÆ# */
- $"B291 7229 8C3F E7FD 193C 330B A3B4 6969" /* ²‘r)Œ?çý.<3.£´ii */
- $"FCF6 E1BA 4C4A E64C B1BC 5BAF F402 C828" /* üöáºLJæL±¼[¯ô.È( */
- $"3A51 CC67 A851 E207 5A7C 3733 1031 FD5C" /* :QÌg¨Qâ.Z|73.1ý\ */
- $"E4D3 B69F FF67 2C6D 3FC7 D5B4 E63F 55B9" /* äÓ¶Ÿÿg,m?ÇÕ´æ?U¹ */
- $"FD5F 3DB1 4589 6ADF 54F0 F42A 498F 61C8" /* ý_=±E‰jßTðô*IaÈ */
- $"4872 5CD7 F70D 9C80 8880 EB9A 1FE7 C715" /* Hr\×÷.œ€ˆ€ëš.çÇ. */
- $"E57A 280F 96CF 014C 0411 EF44 C4F2 C64F" /* åz(.–Ï.L..ïDÄòÆO */
- $"F91B A9D6 EB9E F615 096F E5C0 5B30 BB79" /* ù.©Öëžö.ÆoåÀ[0»y */
- $"D645 BF4F B70A 2C40 3D24 A4C4 5A01 F3DB" /* ÖE¿O·Â,@=$¤ÄZ.óÛ */
- $"8879 D458 F558 4C8E 3C87 E83C 9C30 F0C3" /* ˆyÔXõXLŽ<‡è<œ0ðà */
- $"F7EB BE6A 2B3B B9CB 4F2E 3B49 CA98 6025" /* ÷ë¾j+;¹ËO.;Iʘ`% */
- $"D6C7 6B39 ED18 A784 5410 F9CD 4FB5 9E32" /* ÖÇk9í.§„T.ùÍOµž2 */
- $"EABF F72F 6ECC 217F E295 4BDA F0C8 2678" /* ê¿÷/nÌ!.â•KÚðÈ&x */
- $"B0F7 3381 2299 1033 5300 BB1C E72F 1EE0" /* °÷3"™.3S.».ç/.à */
- $"75D6 68D0 8C87 A574 580B 4AD8 7BC8 E1C4" /* uÖhÐŒ‡¥tX.JØ{ÈáÄ */
- $"64D3 76AA A080 1E28 FD04 890B B9A1 7E5C" /* dÓvª €.(ý.‰.¹¡~\ */
- $"79E2 31B9 1C3E DBAE 8BC6 DB23 53A4 0F06" /* yâ1¹.>Û®‹ÆÛ#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" /* <c..TÍ9.WMòÕÇ( · */
- $"9955 DAC8 72A5 DBBB F7ED 4C9F 6FFE 3A4E" /* ™UÚÈr¥Û»÷íLŸoþ:N */
- $"E165 1831 C0E5 8285 96C2 3959 1BE7 E884" /* áe.1Àå‚…–Â9Y.çè„ */
- $"E568 89C1 FD03 D443 F6D1 A7C9 4CFE F7B9" /* åh‰Áý.ÔCöѧÉLþ÷¹ */
- $"A0BA 5040 19D5 965F 0EB5 E503 4B32 E6C8" /*  ºP@.Õ–_.µå.K2æÈ */
- $"B9C1 DEBB B8B7 47DC A850 AF44 D3B7 F562" /* ¹ÁÞ»¸·GܨP¯DÓ·õb */
- $"4210 4DFF 42A0 3D9A 7C63 8124 22A9 B258" /* B.MÿB =š|c$"©²X */
- $"2256 6243 3077 FF57 7389 3FB6 A096 0EAB" /* "VbC0wÿWs‰?¶ –.« */
- $"DD33 EF25 C4B0 7338 F6D7 8730 FF2E DD0A" /* Ý3ï%Ä°s8öׇ0ÿ.Ý */
- $"BBDA 7A6E EFE8 58EE D64B A09E 2B00 EC04" /* »ÚznïèXîÖK ž+.ì. */
- $"09C9 A9F4 82A0 3132 4829 65CA E93B B827" /* ÆÉ©ô‚ 12H)eÊé;¸' */
- $"E81F B387 132B 5D15 E526 6FEC 2CB1 407F" /* è.³‡.+].å&oì,±@. */
- $"8485 FF32 4933 D357 FC45 0E44 EE66 D960" /* „…ÿ2I3ÓWüE.DîfÙ` */
- $"5AA3 A13A FC0B D8E2 622E 0BEE 714F 2672" /* Z£¡:ü.Øâb..îqO&r */
- $"3850 26C4 E626 F9BA 418C BC8A 7481 C6BE" /* 8P&Äæ&ùºAŒ¼Štƾ */
- $"BFA6 0D72 0603 3452 46C0 9FDB BE63 34D9" /* ¿¦.r..4RFÀŸÛ¾c4Ù */
- $"9599 7519 804B F1CE 0FC8 7572 F58E EB32" /* •™u.€KñÎ.ÈurõŽë2 */
- $"3501 CBB0 C05B 5643 485A 0012 64C2 8022" /* 5.Ë°À[VCHZ..d€" */
- $"BD39 EB39 2B57 0AA3 3931 93D4 885E CDF2" /* ½9ë9+W£91“Ôˆ^Íò */
- $"818D 7734 36C2 BEE1 4F55 116C 47A9 DC40" /* w46¾áOU.lG©Ü@ */
- $"A8A8 4532 7C33 9D7E 070A BA9E 36F7 2445" /* ¨¨E2|3~.ºž6÷$E */
- $"074C 181A 07B2 C470 FA15 8CCB C069 AD0F" /* .L...²Äpú.ŒËÀi­. */
- $"9DD2 8B21 6F22 7300 34B4 4378 25AB D9D2" /* Ò‹!o"s.4´Cx%«ÙÒ */
- $"1D9B B7F7 2F9C C3B1 926F DE61 4463 90BD" /* .›·÷/œÃ±’oÞaDc½ */
- $"BC76 27E7 A5B5 826F 908E 31BA 048F 97C1" /* ¼v'祵‚oŽ1º.—Á */
- $"1884 67A9 C4BA 4B2B 4A58 D0EE 0269 6832" /* .„g©ÄºK+JXÐî.ih2 */
- $"E8C6 03AA D2A2 D034 27AA D49E 9C01 069A" /* èÆ.ªÒ¢Ð4'ªÔžœ..š */
- $"1BDC C40B 3BA7 5F8D 0468 152D E505 7EC0" /* .ÜÄ.;§_.h.-å.~À */
- $"6BBF C4F4 2F45 99CB 1872 C713 FA0D 055F" /* k¿Äô/E™Ë.rÇ.ú.._ */
- $"551D 6E4D 5794 CC71 BAB5 C560 4D20 9464" /* U.nMW”ÌqºµÅ`M ”d */
- $"9F8C 94BA 1C96 0987 1AB4 61BB BA86 751B" /* ŸŒ”º.–Ƈ.´a»º†u. */
- $"9B79 D06A 7A3D A663 FB31 8B86 E588 5D15" /* ›yÐjz=¦cû1‹†åˆ]. */
- $"4A09 8B2B 81FC AE85 0D5A 1D8C A5B7 6DD9" /* JÆ‹+ü®….Z.Œ¥·mÙ */
- $"02F5 50CE 7017 1BDD 3D3D 86CB 250B 491B" /* .õPÎp..Ý==†Ë%.I. */
- $"AA1F 2D21 A416 E8E7 9A53 4299 8CDE CD59" /* ª.-!¤.èçšSB™ŒÞÍY */
- $"C678 B559 D85C C580 6795 AD5F F578 C9EE" /* ÆxµYØ\Å€g•­_õxÉî */
- $"73B2 8F4B 6EEA 6F07 F785 C1B3 374B E51F" /* s²Knêo.÷…Á³7Kå. */
- $"46DC 728C 05A4 6932 792A DB50 4E9A FD82" /* FÜrŒ.¤i2y*ÛPNšý‚ */
- $"A8A2 5EB8 024D C558 D6BC 350C 97B0 B2E8" /* ¨¢^¸.MÅXÖ¼5.—°²è */
- $"8F42 92FD 604D 6FB7 74B6 6EBE 97F6 CE03" /* B’ý`Mo·t¶n¾—öÎ. */
- $"0DFA C340 31C3 4C5E 0041 088B E097 383B" /* .úÃ@1ÃL^.A.‹à—8; */
- $"A236 97CC 8D2B 6F6D 0E58 4E56 1D49 32EC" /* ¢6—Ì+om.XNV.I2ì */
- $"626C C303 42BB D30B B8DE 5868 3C2F E39B" /* blÃ.B»Ó.¸ÞXh</ã› */
- $"A07A 236D 0F21 C0DD 1A0A 933A 7710 6605" /*  z#m.!ÀÝ.“:w.f. */
- $"343E 8D1A 9384 4F16 C01E 5AF7 DF53 0B38" /* 4>.“„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‚<R¹„‰ */
- $"9BDF 0AA1 9A6B 667D DCE2 FE18 C386 4EE9" /* ›ß¡škf}Üâþ.ÆNé */
- $"8AF7 92D0 4405 227C BD4C B9E4 34A7 2533" /* Š÷’ÐD."|½L¹ä4§%3 */
- $"D3C6 E915 D57B 681B B6DC FF03 D5D4 F1DD" /* ÓÆé.Õ{h.¶Üÿ.ÕÔñÝ */
- $"4FB5 BA54 262A 73C2 1CF4 4CD1 D842 E8C2" /* OµºT&*sÂ.ôLÑØBè */
- $"8169 3555 13EC 6A25 6DE0 3614 EC2E D1BB" /* i5U.ìj%mà6.ì.Ñ» */
- $"E597 BFC6 2ACB 6879 11D1 870D E79E 8422" /* å—¿Æ*Ëhy.ч.çž„" */
- $"C01D 4032 8887 6DBA FBEC 3077 F220 49E3" /* À.@2ˆ‡mºûì0wò Iã */
- $"8693 0B00 9F45 0F57 0A39 DA8E EAA5 CD48" /* †“..ŸE.WÂ9ÚŽê¥ÍH */
- $"2C93 C3EC BDE0 71D5 5749 0952 441C E3F8" /* ,“Ãì½àqÕWIÆRD.ãø */
- $"597F C1E6 FB6B BBED AD71 FC34 CFF8 5877" /* Y.Áæûk»í­qü4ÏøXw */
- $"DB67 5F6D 798F E163 5F6B 1CFA A87B ED7C" /* Ûg_myác_k.ú¨{í| */
- $"F176 3065 72FF 443D BA6B 8FBD 9E85 806A" /* ñv0erÿD=ºk½ž…€j */
- $"2A1B 368C 7A9E B1B1 93DE ABD8 263F 31B3" /* *.6Œzž±±“Þ«Ø&?1³ */
- $"1739 58F1 7233 FE7C 4EC4 32AA CDDB CF11" /* .9Xñr3þ|NÄ2ªÍÛÏ. */
- $"C519 9C61 B756 AF62 D55D 5D48 6AF7 4364" /* Å.œa·V¯bÕ]]Hj÷Cd */
- $"205E F14D AAD6 EFF5 2F0D CBE4 0F19 3159" /* ^ñMªÖïõ/.Ëä..1Y */
- $"94F4 910E 4217 990B CABE EBF5 2B67 2EF6" /* ”ô‘.B.™.ʾëõ+g.ö */
- $"FE41 0C44 1C50 43EA 69F5 4E73 5569 82A1" /* þA.D.PCêiõNsUi‚¡ */
- $"C13C 4899 3AA9 5E13 5F76 BF98 2105 1842" /* Á<H™:©^._v¿˜!..B */
- $"AF34 9AFD CFC8 D1E7 3479 E1F3 C86F D06F" /* ¯4šýÏÈÑç4yáóÈoÐo */
- $"9ED9 9DD8 E2E0 4B44 19F4 03E6 9CC0 3474" /* žÙØâàKD.ô.æœÀ4t */
- $"DFBD 078F D140 1C06 5F8C B6E2 665C 703A" /* ß½.Ñ@.._Œ¶âf\p: */
- $"2841 642E F538 C531 697D 5064 11AD 9E8C" /* (Ad.õ8Å1i}Pd.­žŒ */
- $"5A53 3174 7302 762E 9708 BEF5 AD41 0C01" /* ZS1ts.v.—.¾õ­A.. */
- $"D744 85FC D963 416A 9A3A 6898 F067 5B1C" /* ×D…üÙcAjš:h˜ðg[. */
- $"873B 42B6 72C4 FF18 337A 8A24 EDCE 6B8B" /* ‡;B¶rÄÿ.3zŠ$íÎk‹ */
- $"BF06 0EA4 0227 A131 8620 B03C A2B9 729E" /* ¿..¤.'¡1† °<¢¹rž */
- $"1242 EC64 E340 5C5C 9BFF 120A BB1B 75E5" /* .Bìdã@\\›ÿ.».uå */
- $"385B 68AF C7B7 8BA5 1E7B 6FC1 DDB2 F642" /* 8[h¯Ç·‹¥.{oÁݲöB */
- $"FF56 4D21 66B3 EA8C 7095 8FBD 92CC 7315" /* ÿVM!f³êŒp•½’Ìs. */
- $"665F B398 608C ADD4 11E0 DA38 734A C3DB" /* f_³˜`Œ­Ô.àÚ8sJÃÛ */
- $"9249 4640 27D6 D057 426E 651D BF14 F0DE" /* ’IF@'ÖÐWBne.¿.ðÞ */
- $"9130 2D17 8D66 9689 79BD 9A6D 5AF9 6C7C" /* ‘0-.f–‰y½šmZùl| */
- $"94BF 8531 6507 5621 1C11 8D8F F3A5 83D9" /* ”¿…1e.V!..ó¥ƒÙ */
- $"7EE3 1E6D 9B0A 8D44 F466 DE49 E606 E143" /* ~ã.m›ÂDôfÞIæ.áC */
- $"7E77 D417 D49D 9CF2 89AA B0FA 84A4 33A5" /* ~wÔ.Ôœò‰ª°ú„¤3¥ */
- $"8279 A26A 82C5 27CF FB64 D227 994E C6A7" /* ‚y¢j‚Å'ÏûdÒ'™NƧ */
- $"531C 7B7D D333 20D4 F79E 7C21 CC1E 7ADA" /* S.{}Ó3 Ô÷ž|!Ì.zÚ */
- $"F978 DEBB 1FF2 7420 A72D DE6B AB74 8DC6" /* ùxÞ».òt §-Þk«tÆ */
- $"DD0F 0386 BF57 5F23 4926 C874 D598 47A3" /* Ý..†¿W_#I&ÈtÕ˜G£ */
- $"FBC8 E9B0 38BB C695 B7F4 82A1 CC5F 1E22" /* ûÈé°8»Æ•·ô‚¡Ì_." */
- $"767C 20D5 E64D 44F1 B2D4 2298 C6A1 1842" /* v| ÕæMDñ²Ô"˜Æ¡.B */
- $"8139 0CC8 B9C5 284F 9FC8 945B 5342 94A8" /* 9.ȹÅ(OŸÈ”[SB”¨ */
- $"1A57 3351 E00E DB28 D5E3 9712 4346 6DBA" /* .W3Qà.Û(Õã—.CFmº */
- $"CC9B A1ED CD9B 778D 4523 1E9A AC69 8ED9" /* Ì›¡íÍ›wE#.š¬iŽÙ */
- $"67C4 C16D A548 A029 0075 0185 8D06 B7F0" /* gÄÁm¥H ).u.….·ð */
- $"8258 D26A EB95 D437 F0D2 8E91 D536 F534" /* ‚XÒjë•Ô7ðÒŽ‘Õ6õ4 */
- $"30A1 6DE7 E4B8 48DF 246E 6A43 4FE6 AED0" /* 0¡mçä¸Hß$njCOæ®Ð */
- $"48A0 5E1E C339 6C40 BE36 CEB8 870B F9EB" /* H ^.Ã9l@¾6θ‡.ùë */
- $"5ED8 3CA2 B3FA 8CD9 2D26 FF79 6468 862D" /* ^Ø<¢³úŒÙ-&ÿydh†- */
- $"6B87 3072 15D5 5640 D5D4 B4BA EAD3 84F1" /* k‡0r.ÕV@ÕÔ´ºêÓ„ñ */
- $"6A43 F378 100E 8088 A3FE 989B E75B F67F" /* jCóx..€ˆ£þ˜›ç[ö. */
- $"5B25 3AE2 C08C 8CB0 08DD A37F 94DD 7F03" /* [%:âÀŒŒ°.Ý£.”Ý.. */
- $"35C9 DF27 9A9A B829 6326 A95D 91F7 0BA3" /* 5Éß'šš¸)c&©]‘÷.£ */
- $"7220 E220 F062 D8DE ADE2 2AD6 DDFD C9E4" /* r â ðbØÞ­â*ÖÝýÉä */
- $"FAAE 543D 3CCB 5230 74F7 3120 02FD 6B45" /* ú®T=<ËR0t÷1 .ýkE */
- $"A2AB 805B 13FB 1879 6060 5600 1847 98E5" /* ¢«€[.û.y``V..G˜å */
- $"BF65 2CD4 ACD7 15D0 B77E 5A0F 8095 95CA" /* ¿e,Ô¬×.з~Z.€••Ê */
- $"1847 D25F 7D32 1AE2 89EA 9D49 074D A3E5" /* .GÒ_}2.â‰êI.M£å */
- $"201E 8AC7 CB9C 43BC 0732 70E0 3C4F E625" /* .ŠÇËœC¼.2pà<Oæ% */
- $"88E3 74DB 6FB7 7BE2 7006 F9E7 1F76 DBF3" /* ˆãtÛo·{âp.ùç.vÛó */
- $"C988 D665 F7AA 21E2 A5C1 E969 2917 3BA3" /* ɈÖe÷ª!â¥Áéi).;£ */
- $"17BF 925F F835 9827 813E DA4F EE9B 2DF3" /* .¿’_ø5˜'>Ú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" /* <Lƒ”r¦.¡=†º..‹Î‹ */
- $"FB71 18D8 E044 CE7C A642 F1E5 DC8B F8E6" /* ûq.ØàDÎ|¦BñåÜ‹øæ */
- $"2405 66E0 B6C5 6A4F B1AE 2231 3060 11D4" /* $.fà¶ÅjO±®"10`.Ô */
- $"9963 5EF4 BB3D 1F61 0807 0AE1 0DFC 4718" /* ™c^ô»=.a..Âá.üG. */
- $"6C97 80A7 D438 6A81 B76A 6E7E 7A64 87A1" /* l—€§Ô8j·jn~zd‡¡ */
- $"1D7A 8744 3227 F565 4B4A E311 FA0F B477" /* .z‡D2'õeKJã.ú.´w */
- $"9DD6 0662 8844 7138 BDF8 CBCC 007F BDB6" /* Ö.bˆDq8½øËÌ..½¶ */
- $"07C4 98CC 226B 9762 33D0 99EF 54D9 5800" /* .ĘÌ"k—b3ЙïTÙX. */
- $"509D C37B 39A7 E11B 8771 0999 AB8B AAA6" /* PÃ{9§á.‡qÆ™«‹ª¦ */
- $"C463 6C38 7FB0 9121 2CA2 7634 BBEE 41FB" /* Äcl8.°‘!,¢v4»îAû */
- $"4F3B B050 3E38 15C4 98A6 216D 31C2 7057" /* O;°P>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.ú˜ÆÈ<y'ÚË9ˆ.;. */
- $"9BEA 1EF3 D655 CFEB B4F7 0888 971D 69EF" /* ›ê.óÖUÏë´÷.ˆ—.iï */
- $"1105 0EF2 80B8 FF1E F0BE 107F 9AB0 6C52" /* ...ò€¸ÿ.ð¾..š°lR */
- $"FF78 3AA4 8FE0 3370 40DF C5E8 478A 2FCF" /* ÿx:¤à3p@ßÅèGŠ/Ï */
- $"96C5 8D32 8E07 AA93 DA95 4D9B 60C6 2748" /* –Å2Ž.ª“Ú•M›`Æ'H */
- $"C8F4 8347 D2D9 2E35 75E4 333A 6494 B177" /* ÈôƒGÒÙ.5uä3:d”±w */
- $"C836 6E4F AF08 CDB0 0FA5 D565 A0EC 946F" /* È6nO¯.Í°.¥Õe ì”o */
- $"ED5C 03F6 E5DB FA4F D29A BF8F BC7F 12D8" /* í\.öåÛúOÒš¿¼..Ø */
- $"7730 8564 524D 4B31 F681 8C71 C5BC 1641" /* w0…dRMK1öŒqż.A */
- $"6988 F9CF 0385 B8EE 4C04 07DB 5AD2 531C" /* iˆùÏ.…¸îL..ÛZÒS. */
- $"48BA 3E6F E24E AF73 DB5E B729 A4BF 894A" /* Hº>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<Bªˆ.u» ¯ì */
- $"26F9 7E41 5CC7 2154 63A3 D965 075C 1A78" /* &ù~A\Ç!Tc£Ùe.\.x */
- $"2A13 753E DDD9 F846 467C EFC6 5308 2B46" /* *.u>ÝÙø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.<aY.>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<PX¥Ü.@.ž */
- $"3999 F0C2 C418 2E8F 0951 664A 7082 F49F" /* 9™ðÂÄ..ÆQfJp‚ôŸ */
- $"E576 B2B1 5918 E3EE 9B97 1686 6499 A572" /* åv²±Y.ãî›—.†d™¥r */
- $"B1F6 2F39 A798 6292 DE22 007B 60AD 1D94" /* ±ö/9§˜b’Þ".{`­.” */
- $"31BA 068D F15A 06DB 2654 6B52 F692 3C3A" /* 1º.ñZ.Û&TkRö’<: */
- $"0DA8 A74B 30F6 3852 76F0 A897 9086 FBD5" /* .¨§K0ö8Rv𨗆ûÕ */
- $"1C78 047E 7BF2 08EE 7B45 85C5 6ED5 AA43" /* .x.~{ò.î{E…ÅnÕªC */
- $"F423 8A4E 4111 C68E 172E DD87 AF9E BF19" /* ô#ŠNA.ÆŽ..݇¯ž¿. */
- $"D4D2 020C 6FD5 EE3F F0E8 289E 4E6C 0871" /* ÔÒ..oÕî?ðè(žNl.q */
- $"1187 D3F1 E458 94F5 4519 BF3C D239 D86C" /* .‡ÓñäX”õE.¿<Ò9Øl */
- $"17F1 8916 4206 2346 ACD8 1F08 9A44 0AB3" /* .ñ‰.B.#F¬Ø..šD³ */
- $"CEE6 441D 78D5 2909 4CEA 46F7 D6C6 D21A" /* ÎæD.xÕ)ÆLêF÷ÖÆÒ. */
- $"6D41 BB64 ADFF 6252 5A80 3556 C459 2845" /* mA»d­ÿbRZ€5VÄY(E */
- $"C05D C2C5 1F69 4087 0380 C0FF 61AA D5D1" /* À]ÂÅ.i@‡.€ÀÿaªÕÑ */
- $"E5C2 5FC0 CEF4 2D59 B4A3 6BA8 343E 184B" /* åÂ_ÀÎô-Y´£k¨4>.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(!Ý<j4 */
- $"926C 8F3C 1548 D31A 021F 2604 252D A929" /* ’l<.HÓ...&.%-©) */
- $"172B 8212 174F 2D2D CC7D DA15 F9A9 AD7E" /* .+‚..O--Ì}Ú.ù©­~ */
- $"59D3 7885 9215 C77B 6583 4D8F 3308 149C" /* YÓx…’.Ç{eƒM3..œ */
- $"270A 4508 21C9 A05B CDE9 BEF1 C18A 4B74" /* 'ÂE.!É [Íé¾ñÁŠKt */
- $"F07B 0DFE 007B E5AF D9AA CED7 8661 34C7" /* ð{.þ.{å¯ÙªÎ׆a4Ç */
- $"AA26 21AC D09C 6BAA EABB A7C4 486E 40A5" /* ª&!¬Ðœkªê»§ÄHn@¥ */
- $"C791 976A 1EC3 534F 84EC E6E9 7363 FF08" /* Ç‘—j.ÃSO„ìæéscÿ. */
- $"5B20 0E29 000C 5E8F 3339 6210 65CC FD34" /* [ .)..^39b.eÌý4 */
- $"76EB F1B2 76C6 5FDC C1A8 B0F5 53EE 103C" /* vëñ²vÆ_ÜÁ¨°õSî.< */
- $"50B0 650F 8459 9777 E890 E28A BB84 56B9" /* P°e.„Y—wè⊻„V¹ */
- $"0522 90F9 5B81 C982 979E E507 A4BC 26C3" /* ."ù[É‚—žå.¤¼&à */
- $"E356 F2A9 C0D1 BFF3 F882 EC0E 6AA9 CA0D" /* ãVò©ÀÑ¿óø‚ì.j©Ê. */
- $"4419 16FB 9BEF 947E F848 19BF 5CB6 EA4E" /* D..û›ï”~øH.¿\¶êN */
- $"C290 F254 020B 51DB 8094 4D05 E9A5 21A0" /* ÂòT..QÛ€”M.é¥!  */
- $"D3E6 84EA 5A3E 4380 650C B24F 31DA 209F" /* Óæ„êZ>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Ò<YV=롦.X */
- $"CD98 F32B 92E6 D960 C0E1 E542 294D 6FD3" /* ͘ó+’æÙ`ÀáåB)MoÓ */
- $"4234 37C9 3537 275F AC1E 936D 534A BF02" /* B47É57'_¬.“mSJ¿. */
- $"B742 8CAB BE88 E4FF 23DC D9EB 1FC4 9CF0" /* ·BŒ«¾ˆäÿ#ÜÙë.Äœð */
- $"C5D1 3F1D 5995 AD68 12E9 71B3 2100 AFB7" /* ÅÑ?.Y•­h.éq³!.¯· */
- $"CBF7 9ADB D5FF 48EE B1A2 AE4D E021 7C07" /* Ë÷šÛÕÿHî±¢®Mà!|. */
- $"5AD5 E94C A965 DFE8 B32A 23AB DE05 4FB1" /* ZÕéL©eßè³*#«Þ.O± */
- $"FDB7 ECC5 3611 73D9 B03C 399A D5F6 663D" /* ý·ìÅ6.sÙ°<9šÕöf= */
- $"0E78 0BEE 67D9 2F9D 0072 E938 509C 9779" /* .x.îgÙ/.ré8Pœ—y */
- $"6C64 03A1 B8C9 C1C0 2256 29EA 112C FB1C" /* ld.¡¸ÉÁÀ"V)ê.,û. */
- $"766C DF51 83B1 388F 902E EE03 337E 689A" /* vlßQƒ±8.î.3~hš */
- $"CA5A A9F0 09AF 3422 4115 D489 3FBD 22C1" /* ÊZ©ðƯ4"A.Ô‰?½"Á */
- $"4A4F 642A 0AC8 D01C 2950 18CA D441 780A" /* JOd*ÂÈÐ.)P.ÊÔAx */
- $"C929 A7FF 0AFA 956A A581 B590 9B7A 7D74" /* É)§ÿÂú•j¥µ›z}t */
- $"2084 3DC1 5D81 B12B DF9C 333D EFAD 0ADD" /* „=Á]±+ßœ3=ï­ÂÝ */
- $"3445 4F8C 132E F02F C2E7 E13F BE12 2F84" /* 4EOŒ..ð/Âçá?¾./„ */
- $"7FC3 D55F 876A BE1D 07F2 688D 774C FC3E" /* .ÃÕ_‡j¾..òhwLü> */
- $"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#[ßÈ<T¥ */
- $"6B6B D343 F20E AD4C B45C 2BF4 7C65 87A1" /* kkÓCò.­L´\+ô|e‡¡ */
- $"E2EA E2B7 FF17 F9A1 5606 D5A7 C113 F062" /* âêâ·ÿ.ù¡V.Õ§Á.ðb */
- $"D50E E647 922C 8746 7CBA 99C8 4400 979D" /* Õ.æG’,‡F|º™ÈD.— */
- $"3D09 19E7 3A84 E245 ED1F 1C14 3967 45CE" /* =Æ.ç:„âEí...9gEÎ */
- $"2B06 C383 F2A6 2CEE 02E6 A2A7 1821 0F3F" /* +.Ãò¦,î.梧.!.? */
- $"4057 F9E9 B830 94C7 65AA C396 6F97 2721" /* @Wùé¸0”ÇeªÃ–o—'! */
- $"F1AC 6AF7 6C6C 3F02 D2F1 343D 8B42 0F6F" /* ñ¬j÷ll?.Òñ4=‹B.o */
- $"E2D4 A7D8 7158 F033 C573 AD72 01B7 1CC7" /* âÔ§ØqXð3Ås­r.·.Ç */
- $"4CA6 78C2 BABD BB30 5E03 BDEE DF19 8240" /* L¦xº½»0^.½îß.‚@ */
- $"9521 A43A B142 2F42 3590 AD8C B9FD A409" /* •!¤:±B/B5­Œ¹ý¤Æ */
- $"9D77 38E7 B8F8 3BCD 4478 61C3 5768 0324" /* w8ç¸ø;ÍDxaÃWh.$ */
- $"4E55 4240 1E87 1F93 D0BA 6929 C235 7E76" /* NUB@.‡.“кi)Â5~v */
- $"F6E8 AA1B AF13 15FD EB95 2609 BE7D BFE8" /* öèª.¯..ýë•&ƾ}¿è */
- $"3E51 8F2E 4780 4EE6 891E F83D FF7D D1C3" /* >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" /* <NP}úly„úÈlBh‚x¬ */
- $"E40D B7A2 4E43 998B 1C29 D7C6 B7BA 58C9" /* ä.·¢NC™‹.)×Æ·ºXÉ */
- $"3503 114B 86B8 CB5D B605 832D 98FE 0257" /* 5..K†¸Ë]¶.ƒ-˜þ.W */
- $"FB50 8CA0 43D4 71BE E330 1584 5983 668F" /* ûPŒ CÔq¾ã0.„Yƒf */
- $"735C 2448 3B30 82E4 1932 5BF8 129F FE38" /* s\$H;0‚ä.2[ø.Ÿþ8 */
- $"749D 01ED DAFC 95B9 375D BBCB 60D9 FC58" /* t.íÚü•¹7]»Ë`ÙüX */
- $"0796 AEFC 2337 F89E 01F5 48BD 0BAF A61F" /* .–®ü#7øž.õH½.¯¦. */
- $"3EC4 C092 DC6A 584C AAAF 1A9F A20F CEA4" /* >ÄÀ’Ü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" /* <Z.ö!<ž-’$p±ê›}6 */
- $"E7EA 0D03 CB32 7413 AB26 CB30 1B56 CBDE" /* çê..Ë2t.«&Ë0.VËÞ */
- $"3C31 361D 24E2 F441 4D78 7825 1DA0 0C14" /* <16.$âôAMxx%. .. */
- $"5C84 B112 6FC1 77DB 42CA 7791 960B 9F09" /* \„±.oÁwÛBÊw‘–.ŸÆ */
- $"980A 5629 54C0 EC82 889A B0E3 38F4 E734" /* ˜ÂV)TÀ삈š°ã8ôç4 */
- $"FA91 D5CD 2C8F 43CD 5629 3DAD 81DA 5E0A" /* ú‘ÕÍ,CÍV)=­Ú^Â */
- $"C008 712F EAD3 2486 4CD2 C7BA 0FA9 BBD3" /* À.q/êÓ$†LÒǺ.©»Ó */
- $"6AC2 A912 7736 5A33 CC96 9EDC 9C5A 3084" /* j©.w6Z3Ì–žÜœZ0„ */
- $"C826 A3FB 0661 ED4B 9689 A921 22AB 2399" /* È&£û.aíK–‰©!"«#™ */
- $"6F2A 4A78 A5F8 A059 BE4B 7DFF 5D41 1A31" /* o*Jx¥ø Y¾K}ÿ]A.1 */
- $"E688 045C BD1E D1DB 7C5B 6B89 5C22 3CAF" /* æˆ.\½.ÑÛ|[k‰\"<¯ */
- $"F133 FF14 13A2 9A3F 6E42 54EB 5082 9F25" /* ñ3ÿ..¢š?nBTëP‚Ÿ% */
- $"7C07 6BA6 25EA A890 3560 E915 B058 CB68" /* |.k¦%ê¨5`é.°XËh */
- $"3601 4B07 ACE7 EC8A 2897 F908 D405 455E" /* 6.K.¬çìŠ(—ù.Ô.E^ */
- $"5EDD 427E 791A EA3D 6ACE 3BC0 0D43 731A" /* ^ÝB~y.ê=jÎ;À.Cs. */
- $"C9C6 8C03 BD83 6F85 EF75 7246 2F8E 1CFB" /* ÉÆŒ.½ƒo…ïurF/Ž.û */
- $"8DC9 2726 593F 1D87 A822 399F 9770 324C" /* É'&Y?.‡¨"9Ÿ—p2L */
- $"6ABF 38B9 E89E B2F5 D575 E7DB C449 63CF" /* j¿8¹èž²õÕuçÛÄIcÏ */
- $"EBE1 07BB 80A4 C099 6A15 9A47 96F3 8C8D" /* ëá.»€¤À™j.šG–óŒ */
- $"49E1 1F78 2119 9460 CA7A F257 EDA1 104B" /* Iá.x!.”`ÊzòWí¡.K */
- $"5C68 0E57 188C 62B0 FBE3 CF4F 5251 6525" /* \h.W.Œb°ûãÏORQe% */
- $"CB59 5E3D C6F4 6B04 5B2D 1ED2 3BE1 02BB" /* ËY^=Æôk.[-.Ò;á.» */
- $"7207 12AA BFEC 50F4 83FE 2797 121B 3D14" /* r..ª¿ìPôƒþ'—..=. */
- $"DA23 BE41 D647 E5CA DD2D CD48 8C4D A094" /* Ú#¾AÖGåÊÝ-ÍHŒM ” */
- $"B1A9 4ED5 4735 8818 C4F1 597D 3211 5D12" /* ±©NÕG5ˆ.ÄñY}2.]. */
- $"D96B 5A38 AB9A 7E89 C503 13B0 8354 C887" /* ÙkZ8«š~‰Å..°ƒTȇ */
- $"F766 96F0 EDAE C6B6 17B4 E9A4 9230 C2F5" /* ÷f–ðí®Æ¶.´é¤’0Âõ */
- $"029D 3D72 A1CF 5BB9 E975 DBFF 06DC F5B2" /* .=r¡Ï[¹éuÛÿ.Üõ² */
- $"686F 667B AD3E 1D8D 5BE4 0D6A 2CD7 DE66" /* hof{­>.[ä.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Ø<y. */
- $"4243 1F04 D29C 94E6 FA35 A9C7 9C1C 0762" /* BC..Òœ”æú5©Çœ..b */
- $"AA92 7DF8 65D6 B16D 30C6 E3F2 22D5 8971" /* ª’}øeÖ±m0Æãò"Õ‰q */
- $"F890 651C 37E3 1F4A 29A4 6637 D7AE 7CB9" /* øe.7ã.J)¤f7×®|¹ */
- $"14C7 D06B 2595 45F8 89DC DBAF B284 6ADA" /* .ÇÐk%•Eø‰ÜÛ¯²„jÚ */
- $"E4DB 9D25 F76C CDA3 EB7E 1B5A 4264 8145" /* äÛ%÷lÍ£ë~.ZBdE */
- $"547E 6F18 076D A675 BA1A 1AB1 0BF1 AEB6" /* T~o..m¦uº..±.ñ®¶ */
- $"C8C2 AAE0 489F 4E11 7F77 336A 41A4 C050" /* ȪàHŸN..w3jA¤ÀP */
- $"D19E AE10 BD35 C5EC DA71 BDEF A017 C32D" /* Ñž®.½5ÅìÚq½ï .Ã- */
- $"CB15 0C8E 0B75 C179 FB84 FDF2 DD5D C21F" /* Ë..Ž.uÁyû„ýòÝ]Â. */
- $"56A5 397D C437 A82F 65F9 2E68 A785 0AF3" /* V¥9}Ä7¨/eù.h§…Âó */
- $"B9F0 7781 E6B8 ACFA 09DC B57D 6317 B29B" /* ¹ðw測úÆܵ}c.²› */
- $"C754 09FC 3635 9854 0DA1 A3BE D3EE CF40" /* ÇTÆü65˜T.¡£¾ÓîÏ@ */
- $"4BE4 A4D9 07C4 D65E 3887 C8A7 CD3A 83F5" /* Kä¤Ù.ÄÖ^8‡È§Í:ƒõ */
- $"DFA8 10A6 BB6D B811 852D 3877 8782 1E66" /* ߨ.¦»m¸.…-8w‡‚.f */
- $"AF11 43B8 CA3A 6146 3657 AFE0 B314 36CB" /* ¯.C¸Ê:aF6W¯à³.6Ë */
- $"8E1C 272D ED4B 634C AABA 0207 6A1A E2E3" /* Ž.'-íKcLªº..j.âã */
- $"C500 C0A4 894A BAD8 C9A1 0AE7 AC8D 750C" /* Å.À¤‰JºØÉ¡Âç¬u. */
- $"7D84 FBCC DB2E EE05 B04A 002B B383 46DE" /* }„ûÌÛ.î.°J.+³ƒFÞ */
- $"C18D 5BBD B442 9E88 BBB2 89CC 0EBA CF5A" /* Á[½´Bžˆ»²‰Ì.ºÏZ */
- $"5616 DDAB ED7B 4C2E 1C82 0C9D 4820 C0E8" /* V.Ý«í{L..‚.H Àè */
- $"1C4E 39A5 9041 9E33 A20A A73D 821A 238A" /* .N9¥Až3¢Â§=‚.#Š */
- $"3B24 14B9 D9A6 95AA F5B0 13C1 8CFD 790F" /* ;$.¹Ù¦•ªõ°.ÁŒýy. */
- $"33CB 82D3 FE12 0F27 F309 7453 05E0 DF8F" /* 3Ë‚Óþ..'óÆtS.àß */
- $"AAE8 F77A 31BA 0118 43E1 7AE7 69DC 5D12" /* ªè÷z1º..CázçiÜ]. */
- $"BD53 9858 EA6D D8D3 174C FE4C F487 3CCF" /* ½S˜XêmØÓ.LþLô‡<Ï */
- $"9098 7872 8FC3 EBAC 4C76 F503 6915 A1B3" /* ˜xrÃë¬Lvõ.i.¡³ */
- $"5FF8 81CD E13D D511 AAB8 5C7B 1376 C87F" /* _øÍá=Õ.ª¸\{.vÈ. */
- $"2DA1 557D 2053 3341 CC15 418C 0911 5378" /* -¡U} S3AÌ.AŒÆ.Sx */
- $"5FFE 324E 1412 2046 B049 3A77 69B7 417F" /* _þ2N.. F°I:wi·A. */
- $"AC17 B8B0 7FDA 6D19 59F0 DD68 8A88 E55A" /* ¬.¸°.Úm.YðÝhŠˆåZ */
- $"8098 0888 3714 713A 1D17 BB8D F01C 6005" /* €˜.ˆ7.q:..»ð.`. */
- $"8F2E 3D20 2753 1BB4 9BE3 DFD1 709F 99EB" /* .= 'S.´›ãßÑpŸ™ë */
- $"DFCC C1B1 717B 7FA3 52BB C12D E6B7 24D2" /* ßÌÁ±q{.£R»Á-æ·$Ò */
- $"F448 F23D C196 1BAA D61B F422 41B4 D620" /* ôHò=Á–.ªÖ.ô"A´Ö */
- $"466D 45F3 06F6 F631 3E88 5CDE F7F6 BC6F" /* FmEó.öö1>ˆ\Þ÷ö¼o */
- $"789C D06C 02CC 2E71 B6B0 03D2 297B BFCD" /* xœÐl.Ì.q¶°.Ò){¿Í */
- $"8C21 67AD CEE0 DB53 5749 A676 690C 11E3" /* Œ!g­ÎàÛSWI¦vi..ã */
- $"5AD2 905C 78E1 4AB0 E60E C920 4ECC 7CB6" /* ZÒ\xáJ°æ.É NÌ|¶ */
- $"A76F 70F1 BCFD AA1D F4D2 E43F E203 D0C8" /* §opñ¼ýª.ôÒä?â.ÐÈ */
- $"E11E 61AF F1A7 5762 600E 65BB D870 818A" /* á.a¯ñ§Wb`.e»ØpŠ */
- $"CDF0 DFC4 8C9C 1926 678B 2732 C52F 98FD" /* ÍðßÄŒœ.&g‹'2Å/˜ý */
- $"33B3 EE23 138D 5E5F C9C3 FEF9 6111 E3E6" /* 3³î#.^_ÉÃþùa.ãæ */
- $"AF79 A8A5 2949 D590 B463 EDF3 F72A 18FD" /* ¯y¨¥)IÕ´cíó÷*.ý */
- $"BB23 233B 7924 2DD1 A335 B949 467E A30C" /* »##;y$-Ñ£5¹IF~£. */
- $"3185 5FE5 DB63 6748 B22D AB3F 8A8C 0926" /* 1…_åÛcgH²-«?ŠŒÆ& */
- $"5450 E925 A69D 1185 7300 D694 EA1F 4DF2" /* TPé%¦.…s.Ö”ê.Mò */
- $"2413 F4ED 6D64 5B74 BBD5 0E65 26EF A8CD" /* $.ôímd[t»Õ.e&ï¨Í */
- $"5806 0C60 404F 90A0 06B6 AFD1 785F 9646" /* X..`@O .¶¯Ñx_–F */
- $"B1AD 2A45 5777 33FA 49DB 8D3D AC2A BAEA" /* ±­*EWw3úIÛ=¬*ºê */
- $"4527 B4DF 481A 6AB9 4485 05E6 7040 1B93" /* E'´ßH.j¹D….æp@.“ */
- $"D6E0 3BBF A334 E13B 68EC 934B C393 B621" /* Öà;¿£4á;hì“KÓ¶! */
- $"CFC8 69BE A6AC 672C 235E F1FC 4480 DE83" /* ÏÈi¾¦¬g,#^ñüD€Þƒ */
- $"32D7 D269 F78C F22D 5B9F F4DF DDDD D6DE" /* 2×Òi÷Œò-[ŸôßÝÝÖÞ */
- $"4C65 4D61 C1F0 26BF E4C3 D7C9 A034 163D" /* LeMaÁð&¿äÃ×É 4.= */
- $"FBAE 0167 4DF0 EBEF AA8B B742 2832 1F67" /* û®.gMðë懲·B(2.g */
- $"8CC0 80D0 4A6B 9843 DE59 2F7B F944 9DA4" /* ŒÀ€ÐJk˜CÞY/{ùD¤ */
- $"343D 9AD9 9E0B C7B5 0B7D 2CA1 F638 8A3B" /* 4=šÙž.ǵ.},¡ö8Š; */
- $"BB38 A39B 025A 9BA9 34AC ACF0 063D 5483" /* »8£›.Z›©4¬¬ð.=Tƒ */
- $"FE57 22E4 EB2C C699 AEF3 8EFB 1C8C A23A" /* þW"äë,Æ™®óŽû.Œ¢: */
- $"2C15 D2EF AC9A 91C9 993A 4CB0 2DDC 0A32" /* ,.Ò﬚‘É™:L°-ÜÂ2 */
- $"14B9 50D2 8579 8F9D 5AF2 88DB E726 1B39" /* .¹PÒ…yZòˆÛç&.9 */
- $"3E06 69F9 F300 09E4 D3E8 BB4C A704 10E0" /* >.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<q.‰æC/¼ */
- $"5A24 FEA6 EC06 1F23 79D9 3886 F6F4 7FB9" /* Z$þ¦ì..#yÙ8†öô.¹ */
- $"F892 1A20 DC66 1EB1 D6FD 1C48 52DE 4267" /* ø’. Üf.±Öý.HRÞBg */
- $"77E2 620B 2DC0 6828 575C F7CA 74BC FE73" /* wâb.-Àh(W\÷Êt¼þs */
- $"FABD C9ED 4E8F 71A7 8CCD 8D80 8BD2 8AA3" /* ú½ÉíNq§ŒÍ€‹ÒŠ£ */
- $"45C0 EF2A 387D 038E 8B00 BA81 12CD F93F" /* EÀï*8}.Ž‹.º.Íù? */
- $"E9BE 9134 2928 439B 69CF 3DB1 5DFC 3DAF" /* 龑4)(C›iÏ=±]ü=¯ */
- $"86CA 34A7 4574 C91C 3F99 3EA9 B6E9 F3AF" /* †Ê4§EtÉ.?™>©¶éó¯ */
- $"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ºåò<v */
- $"3898 11F6 D710 7470 00FC 0742 CA59 9E40" /* 8˜.ö×.tp.ü.BÊYž@ */
- $"757C 5952 61FF 4D28 0991 1673 9B01 06B9" /* u|YRaÿM(Æ‘.s›..¹ */
- $"3999 E9B5 06CD B1DA CB08 FF19 DE70 8D10" /* 9™éµ.ͱÚË.ÿ.Þp. */
- $"E725 848E D27D 2B0B 54F0 B60B 26AB CD92" /* ç%„ŽÒ}+.Tð¶.&«Í’ */
- $"E4F8 C007 FF68 6933 E2FF 31D5 435B FF7F" /* äøÀ.ÿhi3âÿ1ÕC[ÿ. */
- $"9A8E 9845 007F FEDA 4C63 9892 513A ABD9" /* šŽ˜E..þÚLc˜’Q:«Ù */
- $"A98A C012 5C99 31C0 D48F E334 671D A695" /* ©ŠÀ.\™1ÀÔã4g.¦• */
- $"C7EF 3AAA FF37 D381 4F42 983F FC4D AE82" /* Çï:ªÿ7ÓOB˜?üM®‚ */
- $"FF43 6555 9E7F 10A3 7B95 415D 41FF 20B3" /* ÿCeUž..£{•A]Aÿ ³ */
- $"8CB1 7302 0000 0000 584E AB14 398C A865" /* Œ±s.....XN«.9Œ¨e */
- $"5A7B 1650 52EB 8BCE 3E92 461D 071B 8F21" /* Z{.PRë‹Î>’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”Õ.-_Ìâ<H.Ak */
- $"1540 59C2 1D35 213D A11C EE70 8D15 5394" /* .@YÂ.5!=¡.îp.S” */
- $"53C6 29CF 4E19 F4CF 5B94 7FFF 7F8B 2813" /* SÆ)ÏN.ôÏ[”.ÿ.‹(. */
- $"3E95 DE81 30D0 3188 2A75 4F35 CB11 DDD5" /* >•Þ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}<u */
- $"E4C6 1003 FECF 3E7E 6252 08C0 4A83 50D7" /* äÆ..þÏ>~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…'ü<jS..MºÑ€. */
- $"8995 3DF4 FA80 FE12 8F5F 40E5 09E6 E7E8" /* ‰•=ôú€þ._@åÆæçè */
- $"C5E7 1309 3E97 E278 0228 1693 F565 F83E" /* Åç.Æ>—â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ŸÌ<x.¾!Ä.°.0ôOÇ */
- $"B76C B9FA 26F6 38C8 116D B8F0 0B9D 818F" /* ·l¹ú&ö8È.m¸ð. */
- $"56F9 F934 AE60 71FD E583 8D07 A4A4 DE41" /* Vùù4®`qýåƒ.¤¤ÞA */
- $"FB75 B83F 384B 11C9 CC5E CD9D FF4C 05A8" /* ûu¸?8K.ÉÌ^ÍÿL.¨ */
- $"D59F 1E59 4797 FF7F DFD8 391C E8BA 72E2" /* ÕŸ.YG—ÿ.ßØ9.èºrâ */
- $"C1F8 9F5C 5317 01E3 EC2D 4120 97D2 BAEC" /* ÁøŸ\S..ãì-A —Òºì */
- $"DBB0 FF30 FC56 2E43 3716 1B7B A8CD 19AE" /* Û°ÿ0üV.C7..{¨Í.® */
- $"7FFF 7FF4 468B FF45 749B 3C67 EE31 1651" /* .ÿ.ôF‹ÿEt›<gî1.Q */
- $"17B2 B21C A982 A185 E8A3 03BC 2DCB C09A" /* .²².©‚¡…è£.¼-ËÀš */
- $"8522 64CF BB21 6955 068D F002 871B 05F3" /* …"dÏ»!iU.ð.‡..ó */
- $"9F44 7384 D624 E1FA A24D 67C7 BC5E F7BF" /* ŸDs„Ö$áú¢MgǼ^÷¿ */
- $"59BC DC3C BE4B 1456 0C6F F2C1 0841 038D" /* Y¼Ü<¾K.V.oòÁ.A. */
- $"723C 14FA 4F19 0AD4 1F88 0A1B FF14 3D93" /* r<.úO.ÂÔ.ˆÂ.ÿ.=“ */
- $"27AA 6E0B 4AA7 6A11 E06D 5D82 C930 1B53" /* 'ªn.J§j.àm]‚É0.S */
- $"0227 A9AA 253A 41E6 31D5 8B87 DC08 819B" /* .'©ª%:Aæ1Õ‹‡Ü.› */
- $"E5EE EA0F 6AA0 0000 0006 9BC0 594E 0004" /* åîê.j ....›ÀYN.. */
- $"D326 312C 0364 8835 C4D7 5040 3724 3CD9" /* Ó&1,.dˆ5Ä×P@7$<Ù */
- $"B889 2E14 12BC F0AD 9D2E 326B 1654 5952" /* ¸‰...¼ð­.2k.TYR */
- $"2B5F 1A9D 5403 C9C5 A731 1B3C 3443 783C" /* +_.T.Éŧ1.<4Cx< */
- $"A459 248B BBC7 DEDC 74AD E2A1 D647 5047" /* ¤Y$‹»ÇÞÜt­â¡ÖGPG */
- $"AD17 15AF FF5C 88C4 025F 4361 3F83 BFC9" /* ­..¯ÿ\ˆÄ._Ca?ƒ¿É */
- $"FF6D 7E58 128D 33D7 7076 E73A 9CF6 76D8" /* ÿm~X.3×pvç:œövØ */
- $"A0FF 2C44 2029 0B59 B427 3BDC 915B 87CF" /*  ÿ,D ).Y´';Ü‘[‡Ï */
- $"75D6 EC52 7793 6DFA A4E2 9E2D 7D25 FBC2" /* uÖìRw“mú¤âž-}%û */
- $"2028 DE78 D868 BEC5 E9D2 BFFA 8B12 9265" /* (ÞxØh¾ÅéÒ¿ú‹.’e */
- $"B01D 92F7 F71E 8782 F1CD 4E98 B46E 6DA5" /* °.’÷÷.‡‚ñÍN˜´nm¥ */
- $"8825 F851 1CE9 9F21 D8E2 86EB BAF4 126F" /* ˆ%øQ.éŸ!Øâ†ëºô.o */
- $"9CB3 0144 009A 6F38 0919 9C1F D0CE D23C" /* œ³.D.šo8Æ.œ.ÐÎÒ< */
- $"C9DD 9273 D8F6 6733 6E5A 2E7A 635C 8723" /* ÉÝ’sØög3nZ.zc\‡# */
- $"6E04 1283 1A43 02CA 74E4 8000 0309 08DB" /* n..ƒ.C.Êtä€..Æ.Û */
- $"EF05 DC00 D116 0D58 1A69 2055 1BA0 D8DE" /* ï.Ü.Ñ..X.i U. ØÞ */
- $"34B6 EA40 CC06 C673 559A 75F2 9B58 C474" /* 4¶ê@Ì.ÆsUšuò›XÄt */
- $"DD4C AB9A 9E6D 653B FCDF 4F33 3707 105E" /* ÝL«šžme;üßO37..^ */
- $"DBCE D327 45FB C663 E1AF 375B B106 B0B8" /* ÛÎÓ'EûÆcá¯7[±.°¸ */
- $"26EE AE4B 538A CF74 588E 928B 58C7 2D93" /* &î®KSŠÏtXŽ’‹XÇ-“ */
- $"371E BC81 0ED0 9F2C 1A18 8DD7 7E65 4FBF" /* 7.¼.П,..×~eO¿ */
- $"511B 63A1 8F26 2A08 A4D3 2BF3 96E6 FC32" /* Q.c¡&*.¤Ó+ó–æü2 */
- $"D457 8287 D843 6D19 2458 0EA4 AC8F 0512" /* ÔW‚‡ØCm.$X.¤¬.. */
- $"831D D4CA 9BFF 5A6E 951A 5897 451F 750C" /* ƒ.ÔÊ›ÿZn•.X—E.u. */
- $"CAD4 89C1 94A7 4BFA 4030 4828 1E37 C049" /* ÊÔ‰Á”§Kú@0H(.7ÀI */
- $"34C4 54B1 1054 2645 14E5 6DFF 7FFF 7328" /* 4ÄT±.T&E.åmÿ.ÿs( */
- $"F1A4 AAA2 4FD2 507D 86D5 FF7F FA43 F49A" /* ñ¤ª¢OÒP}†Õÿ.úCôš */
- $"5049 0839 5964 8186 EE46 1867 158E 9E2C" /* PI.9Yd†îF.g.Žž, */
- $"D618 8FF5 D416 6838 6187 9CF7 21BC DE1F" /* Ö.õÔ.h8a‡œ÷!¼Þ. */
- $"F84F F4E9 ACDB ECD8 6CA6 6725 85B4 4049" /* øOôé¬ÛìØl¦g%…´@I */
- $"AA9E 4935 7E1F 54E7 B0D5 A026 B073 899B" /* ªžI5~.Tç°Õ &°s‰› */
- $"51C4 8C2E 483C B3BF 38A0 4BCF 2042 EE90" /* QÄŒ.H<³¿8 KÏ Bî */
- $"4E1B 8C94 420F 99A7 9EA1 7D96 12A3 8C8D" /* N.Œ”B.™§ž¡}–.£Œ */
- $"819B C97D C518 51CB 0D8A A7A1 7159 EB10" /* ›É}Å.QË.Š§¡qYë. */
- $"4A27 5CD0 0ED7 2688 5F74 CE10 DF6A 5B4F" /* J'\Ð.×&ˆ_tÎ.ßj[O */
- $"E370 A282 105D 2F43 6E74 6B07 05EC 880E" /* ãp¢‚.]/Cntk..ìˆ. */
- $"15AF 5118 9D27 327D 2552 9996 020B 2D9A" /* .¯Q.'2}%R™–..-š */
- $"9AFC 6849 6068 6491 42FA 889C 7949 285A" /* šühI`hd‘BúˆœyI(Z */
- $"7FFE 5B6D DAF2 7FFF 772D E08E B9E4 65A3" /* .þ[mÚò.ÿw-àŽ¹äe£ */
- $"B49A DDC8 FF52 8DA3 B318 F84F F4E9 99ED" /* ´šÝÈÿR£³.øOôé™í */
- $"48C4 CA7E BE77 2634 6A22 1FAD 4752 8D9B" /* HÄÊ~¾w&4j".­GR› */
- $"B935 0449 1A27 9EAB B000 C242 3BB7 72B7" /* ¹5.I.'ž«°.ÂB;·r· */
- $"3ACC B41F 0AC9 CFFD 58DA D99F 498A 21CF" /* :Ì´.ÂÉÏýXÚÙŸIŠ!Ï */
- $"50B8 A155 9BB3 B3DA 13FE 251F 14F2 3431" /* P¸¡U›³³Ú.þ%..ò41 */
- $"6DBF 2774 3EFC 55BB 9CB3 40A4 CA00 A112" /* m¿'t>ü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.Ž½.<Iºæ¾vfì¾ */
- $"59D2 4ACC B4CE 3FAD 2173 25CB E42F 37B8" /* YÒJÌ´Î?­!s%Ëä/7¸ */
- $"F3CC 79EF 695C 10F4 0381 2D14 1B0F D632" /* óÌyïi\.ô.-...Ö2 */
- $"8A1E 9C29 F617 6A4B 204E A147 C08D 1AA5" /* Š.œ)ö.jK N¡GÀ.¥ */
- $"7418 DED9 DE83 A555 A75B AB00 C650 247F" /* t.ÞÙÞƒ¥U§[«.ÆP$. */
- $"0222 5558 731B 54DB 14F6 3A0E 1FAD A8D8" /* ."UXs.TÛ.ö:..­¨Ø */
- $"F327 DC8F AF3F 630B 3BA9 7933 8D30 458C" /* ó'ܯ?c.;©y30EŒ */
- $"4C2F 6E3A 0A64 DDC5 926A 71CB 2347 EE4D" /* L/n:ÂdÝÅ’jqË#GîM */
- $"647B D94D BE24 7F62 6A14 EBE2 696F 8735" /* d{ÙM¾$.bj.ëâio‡5 */
- $"A96F E268 6912 A4A9 3254 0293 CB09 0DC0" /* ©oâhi.¤©2T.“ËÆ.À */
- $"206B EB7B F6B9 0643 5E74 4F2C 555A AE2D" /* kë{ö¹.C^tO,UZ®- */
- $"B16B 7FA3 8ADE 7EAC 764F 9A20 BC94 05F1" /* ±k.£ŠÞ~¬vOš ¼”.ñ */
- $"9AAC 0118 36B8 6B30 D696 6E84 EEC2 5342" /* š¬..6¸k0Ö–n„îÂSB */
- $"03A8 EFD3 CB37 D50D F676 35DB AD6C 280A" /* .¨ïÓË7Õ.öv5Û­l( */
- $"DB04 D23A 0922 A2E3 5F45 EBD1 5C49 F6AA" /* Û.Ò:Æ"¢ã_EëÑ\Iöª */
- $"4579 1BA2 D94E D3F0 7A7E C24E 79B0 5D24" /* Ey.¢ÙNÓðz~ÂNy°]$ */
- $"B98E 23E7 4C4F 54D9 A3CE 389F 63F6 2426" /* ¹Ž#çLOTÙ£Î8Ÿcö$& */
- $"7087 D921 86D6 709F 768D 5684 BB90 47B7" /* p‡Ù!†ÖpŸvV„»G· */
- $"AC32 98D7 E247 3668 E954 8105 EE44 AF58" /* ¬2˜×âG6héT.îD¯X */
- $"13FF 573A 9F89 06C9 FB77 277E 08C9 09E9" /* .ÿW:Ÿ‰.Éûw'~.ÉÆé */
- $"B180 F96E C5AB 1E5D 3029 E229 CE1B B2AD" /* ±€ùnÅ«.]0)â)Î.²­ */
- $"BA11 DD98 0D9C 4C45 66DD 8553 3BA2 6F5B" /* º.ݘ.œLEfÝ…S;¢o[ */
- $"699B CEF3 48A7 6C31 63E6 E189 9C68 B9EC" /* i›ÎóH§l1cæቜh¹ì */
- $"A663 411F EBCB 41AB 8F7E 7EAD 87DA 5BF3" /* ¦cA.ëËA«~~­‡Ú[ó */
- $"AAC9 975B AC1F 712B F7ED DEBD 04C3 B85A" /* ªÉ—[¬.q+÷íÞ½.øZ */
- $"470D D74A B91D 0180 7BAB 4088 5671 6268" /* G.×J¹..€{«@ˆVqbh */
- $"5B4A 54FE C179 1600 7677 830B 0E81 EEB4" /* [JTþÁy..vwƒ..î´ */
- $"056E 79FF 8251 AB20 A6BC 15A5 E71F 7D4A" /* .nyÿ‚Q« ¦¼.¥ç.}J */
- $"2F6E 951A DE36 7A81 C704 9A4A F239 E1DC" /* /n•.Þ6zÇ.šJò9áÜ */
- $"FF6C DE49 B4C8 F6C1 F764 8D19 4686 DFC2" /* ÿlÞI´ÈöÁ÷d.F†ß */
- $"5C72 4A52 9784 F974 DCA4 A177 21DA 9869" /* \rJR—„ùtܤ¡w!Ú˜i */
- $"80A4 5BC6 FD54 A56B C7B1 4705 3A32 C896" /* €¤[ÆýT¥kDZG.:2È– */
- $"4539 25E5 90CC F228 B7F9 ADA5 CC2C 59CA" /* E9%åÌò(·ù­¥Ì,YÊ */
- $"D14D 4B86 9CC0 D367 7EF5 DB6D C2E1 06DB" /* ÑMK†œÀÓg~õÛmÂá.Û */
- $"58BC 0D97 DCFE 3CB1 EA45 C36F 1B60 83C9" /* X¼.—Üþ<±êEÃo.`ƒÉ */
- $"663F B883 83BA A69F 2653 0747 18C7 6D20" /* f?¸ƒƒº¦Ÿ&S.G.Çm */
- $"F2C7 6E01 47DA AB9D 2D83 D5CE 1E9C 779A" /* òÇn.GÚ«-ƒÕÎ.œwš */
- $"5FAE 6015 63DE 317A EFCA 7142 F3F8 A7E1" /* _®`.cÞ1zïÊqBóø§á */
- $"F739 60AB DF24 41BF EB6C AF15 7223 E56C" /* ÷9`«ß$A¿ël¯.r#ål */
- $"8D61 D9D1 C61F 8F8E 8435 6452 C45A 917B" /* aÙÑÆ.Ž„5dRÄZ‘{ */
- $"0856 B8BA 14E2 0A77 ABA0 E605 2E39 63EA" /* .V¸º.âÂw« æ..9cê */
- $"E7F5 4804 6535 7672 575F 37EA 9E69 1A1C" /* çõH.e5vrW_7êži.. */
- $"E380 CB7D C109 2D50 73EF 4119 54BE CBFE" /* ã€Ë}ÁÆ-PsïA.T¾Ëþ */
- $"4552 74A1 3E73 C457 1436 9DFF 3C25 8231" /* ERt¡>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˜å.°ü³."<!¿]î */
- $"0229 A0EE 8B90 5918 5910 F6A6 EEB6 503D" /* .) î‹Y.Y.ö¦î¶P= */
- $"8E76 A3B6 E583 FEFF 5B3D F804 F6EE 956E" /* Žv£¶åƒþÿ[=ø.öî•n */
- $"FEE7 D95F 9D05 AE0B 4926 52B4 23C3 D17A" /* þçÙ_.®.I&R´#ÃÑz */
- $"FC0F CC41 1264 0956 8CA2 6A30 C0D0 275F" /* ü.ÌA.dÆVŒ¢j0ÀÐ'_ */
- $"0CE8 C646 CC49 EF38 CC94 8B6C 1737 9636" /* .èÆFÌIï8Ì”‹l.7–6 */
- $"4EA7 0FE7 217B F3F1 A10D 7E49 242E 6F19" /* N§.ç!{óñ¡.~I$.o. */
- $"A8CF 369A 44DE 6C99 A9D4 24DA 6909 62C3" /* ¨Ï6šDÞl™©Ô$ÚiÆbà */
- $"0C4C D4CD D80E 72E6 FF6B A90E 7080 977B" /* .LÔÍØ.ræÿk©.p€—{ */
- $"4BEB 6A2A 72BB 0574 45FB 1E12 6408 C966" /* Këj*r».tEû..d.Éf */
- $"A632 9AC7 E67D 82C9 3FED 1E27 C1FA C47A" /* ¦2šÇæ}‚É?í.'ÁúÄz */
- $"AFCF 5719 3BCA 3975 BE3A 550B 6DC9 91CC" /* ¯ÏW.;Ê9u¾:U.mÉ‘Ì */
- $"F28E 751C 1B20 E7BB 58FF 0D92 2BF7 DE26" /* òŽu.. ç»Xÿ.’+÷Þ& */
- $"DFE3 B230 78F7 C64E ADF8 7741 F45A E3BC" /* ßã²0x÷ÆN­øwAôZã¼ */
- $"5185 1323 1C74 3288 F720 5DB7 B5C9 1EFD" /* Q….#.t2ˆ÷ ]·µÉ.ý */
- $"C844 7159 7047 A9BA 6CA1 403E CE2E 3522" /* ÈDqYpG©ºl¡@>Î.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<fý$ */
- $"D6C1 DFFC 41CF 26FD 27E3 9482 7299 C4A3" /* ÖÁßüAÏ&ý'㔂r™Ä£ */
- $"A4B0 4F99 5ED7 6507 C196 C060 D7BD 7BA6" /* ¤°O™^×e.Á–À`×½{¦ */
- $"A0A2 C1E7 0ECE 98C4 36F0 B006 0526 5FC4" /*  ¢Áç.ΘÄ6ð°..&_Ä */
- $"CDEF A25D CE59 7B6F 507F C409 957F 43E6" /* Íï¢]ÎY{oP.ÄÆ•.Cæ */
- $"20AB C4BE 33C2 E794 46B7 5341 D8C9 5487" /* «Ä¾3Âç”F·SAØÉT‡ */
- $"3000 A3E6 41BE 7D2A B553 6A8D C345 2E1E" /* 0.£æA¾}*µSjÃE.. */
- $"BF55 F536 52DD 101F D6C9 BB65 B7E4 0CFC" /* ¿Uõ6RÝ..ÖÉ»e·ä.ü */
- $"03D7 F641 F641 7A4F 8EE2 BA7A 352C ED91" /* .×öAöAzOŽâºz5,í‘ */
- $"9057 F893 C46F 62F7 A791 A8DE 8A25 BB17" /* Wø“Äob÷§‘¨ÞŠ%». */
- $"F164 F2ED 43E5 A2E2 17E9 C95D DE1C 45F4" /* ñdòíCå¢â.éÉ]Þ.Eô */
- $"3019 8090 809D D124 EE5C B48E 6C92 2A74" /* 0.€€Ñ$î\´Žl’*t */
- $"ACA0 4F0A 1777 70CF EBEC 112A 9035 16AB" /* ¬ OÂ.wpÏëì.*5.« */
- $"B36D 13D6 9F72 69CD E213 F146 6733 BAA3" /* ³m.ÖŸriÍâ.ñFg3º£ */
- $"0080 0000 0000 0000 0001 0151 0AD3 43F0" /* .€.........QÂÓCð */
- $"14A4 0000 61F0 20D9 9F3A 47FC 60A2 4780" /* .¤..að ÙŸ:Gü`¢G€ */
- $"F2D0 2A57 2C4C D349 5B9A 1BE3 0D39 80AD" /* òÐ*W,LÓI[š.ã.9€­ */
- $"72C4 873D 5028 F09E F0F5 700F B776 4B38" /* rć=P(ðžðõp.·vK8 */
- $"4FC6 7D26 AE5D 219E DDCE 4AA3 9AA9 FE19" /* OÆ}&®]!žÝÎJ£š©þ. */
- $"EC25 FEF0 0626 D259 8ECF 0364 6192 A000" /* ì%þð.&ÒYŽÏ.da’ . */
- $"0000 0000 0000 0000 0184 84B4 4FF0 1848" /* .........„„´Oð.H */
- $"4BC2 3700 0000 0000 0000 00B5 DA5E 3FF1" /* KÂ7........µÚ^?ñ */
- $"C9FC 9186 4A80 0000 0000 0000 0000 0000" /* Éü‘†J€.......... */
- $"0510 0FC3 251B 71C0 D918 64A8 0000 0000" /* ...Ã%.qÀÙ.d¨.... */
- $"0000 0000 0000 07E1 1EE1 F164 E11A 319D" /* .......á.áñdá.1 */
- $"3806 659F 8C35 7012 B17E 6096 52F0 8E96" /* 8.eŸŒ5p.±~`–RðŽ– */
- $"1438 1EBF 363A 49C9 51BD 3517 4ADA 7060" /* .8.¿6:IÉQ½5.JÚp` */
- $"0849 8F8B FCEC FD48 0000 54DF 4C0B E043" /* .I‹üìýH..TßL.àC */
- $"F3B6 1CEB 518A F2B1 5A9C 9500 0000 0000" /* ó¶.ëQŠò±Zœ•..... */
- $"0196 C058 0636 AF4B 041F 37EC DE6F 4B4E" /* .–ÀX.6¯K..7ìÞoKN */
- $"291D A2A6 3CB8 9BAC 4B0C 5017 9031 0EF1" /* ).¢¦<¸›¬K.P.1.ñ */
- $"3CF7 F63B 73A1 B4A6 9EA7 0513 C571 8EA8" /* <÷ö;s¡´¦ž§..ÅqŽ¨ */
- $"5D0A 28FC DCB6 D27A 0000 0000 0159 D076" /* ]Â(üܶÒz.....YÐv */
- $"3D1E 84A9 1C76 876E 7B6B 8519 1F9F 01C6" /* =.„©.v‡n{k…..Ÿ.Æ */
- $"1A11 B2A2 4841 4D47 5463 5D18 2AFE 54F5" /* ..²¢HAMGTc].*þTõ */
- $"591E 5FF1 39C7 C0CD 0D20 F366 59DE FE22" /* Y._ñ9ÇÀÍ. ófYÞþ" */
- $"B12C 4608 009D F105 49C8 16B5 417A 6079" /* ±,F..ñ.IÈ.µAz`y */
- $"40B0 7E7A C4B3 83B8 485D 42B1 4000 0000" /* @°~zijƒ¸H]B±@... */
- $"0E9F 0340 5469 49BB 5767 B4BE 47AF 19B3" /* .Ÿ.@TiI»Wg´¾G¯.³ */
- $"4E69 B99F 25DF C3C0 1B9C 5455 41D2 F508" /* Ni¹Ÿ%ßÃÀ.œTUAÒõ. */
- $"9900 1F13 B43E C345 C4B3 C066 8A27 C3D3" /* ™...´>Ã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\ˆ‘ô<i×kMï)Ú */
- $"F378 1035 720A CE61 C2E3 5776 CA53 F43B" /* óx.5rÂÎaÂãWvÊSô; */
- $"4FCB 79E4 5164 1270 A23E 6048 2089 7B12" /* OËyäQd.p¢>`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
--- a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
+++ /dev/null
Binary files 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
--- a/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns
+++ /dev/null
Binary files 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
--- a/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index b5d43021ec..a874ce1245 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -1,860 +1,860 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; secondlife setup.nsi
-;; Copyright 2004-2010, Linden Research, Inc.
-;;
-;; NSIS Unicode 2.38.1 or higher required
-;; http://www.scratchpaper.com/
-;;
-;; Author: James Cook, Don Kjer, Callum Prentice
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Compiler flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-SetOverwrite on ; overwrite files
-SetCompress auto ; compress iff saves space
-SetCompressor /solid lzma ; compress whole installer as one block
-SetDatablockOptimize off ; only saves us 0.1%, not worth it
-XPStyle on ; add an XP manifest to the installer
-RequestExecutionLevel admin ; on Vista we must be admin because we write to Program Files
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Project flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-%%VERSION%%
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; - language files - one for each language (or flavor thereof)
-;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
-;; application directory so we have to add a path to these include files)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-!include "%%SOURCE%%\installers\windows\lang_da.nsi"
-!include "%%SOURCE%%\installers\windows\lang_de.nsi"
-!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
-!include "%%SOURCE%%\installers\windows\lang_es.nsi"
-!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
-!include "%%SOURCE%%\installers\windows\lang_it.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
-!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
-!include "%%SOURCE%%\installers\windows\lang_pl.nsi"
-!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
-!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
-
-# *TODO: Move these into the language files themselves
-LangString LanguageCode ${LANG_DANISH} "da"
-LangString LanguageCode ${LANG_GERMAN} "de"
-LangString LanguageCode ${LANG_ENGLISH} "en"
-LangString LanguageCode ${LANG_SPANISH} "es"
-LangString LanguageCode ${LANG_FRENCH} "fr"
-LangString LanguageCode ${LANG_JAPANESE} "ja"
-LangString LanguageCode ${LANG_ITALIAN} "it"
-LangString LanguageCode ${LANG_KOREAN} "ko"
-LangString LanguageCode ${LANG_DUTCH} "nl"
-LangString LanguageCode ${LANG_POLISH} "pl"
-LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
-LangString LanguageCode ${LANG_SIMPCHINESE} "zh"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
-;; For example:
-;; !define INSTFLAGS "%(flags)s"
-;; !define INSTNAME "SecondLife%(grid_caps)s"
-;; !define SHORTCUT "Second Life (%(grid_caps)s)"
-;; !define URLNAME "secondlife%(grid)s"
-;; !define UNINSTALL_SETTINGS 1
-
-%%GRID_VARS%%
-
-Name ${INSTNAME}
-
-SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
-
-BrandingText " " ; bottom of window text
-Icon %%SOURCE%%\installers\windows\install_icon.ico
-UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
-WindowIcon on ; show our icon in left corner
-BGGradient off ; no big background window
-CRCCheck on ; make sure CRC is OK
-InstProgressFlags smooth colored ; new colored smooth look
-ShowInstDetails nevershow ; no details, no "show" button
-SetOverwrite on ; stomp files by default
-AutoCloseWindow true ; after all files install, close window
-
-InstallDir "$PROGRAMFILES\${INSTNAME}"
-InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
-DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
-Page directory dirPre
-Page instfiles
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Var INSTPROG
-Var INSTEXE
-Var INSTFLAGS
-Var INSTSHORTCUT
-Var COMMANDLINE ; command line passed to this installer, set in .onInit
-Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
-Var SKIP_DIALOGS ; set from command line in .onInit. autoinstall
- ; GUI and the defaults.
-
-;;; Function definitions should go before file includes, because calls to
-;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
-;;; the end of this script NSIS has to decompress the whole installer before
-;;; it can call the DLL function. JC
-
-!include "FileFunc.nsh" ; For GetParameters, GetOptions
-!insertmacro GetParameters
-!insertmacro GetOptions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; After install completes, launch app
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function .onInstSuccess
- Push $R0 # Option value, unused
-
- StrCmp $SKIP_DIALOGS "true" label_launch
-
- ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
- # If parameter was there (no error) just launch
- # Otherwise ask
- IfErrors label_ask_launch label_launch
-
-label_ask_launch:
- # Don't launch by default when silent
- IfSilent label_no_launch
- MessageBox MB_YESNO $(InstSuccesssQuestion) \
- IDYES label_launch IDNO label_no_launch
-
-label_launch:
- # Assumes SetOutPath $INSTDIR
- Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
-label_no_launch:
- Pop $R0
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Pre-directory page callback
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function dirPre
- StrCmp $SKIP_DIALOGS "true" 0 +2
- Abort
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Make sure we're not on Windows 98 / ME
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckWindowsVersion
- DetailPrint "Checking Windows version..."
- Call GetWindowsVersion
- Pop $R0
- ; Just get first two characters, ignore 4.0 part of "NT 4.0"
- StrCpy $R0 $R0 2
- ; Blacklist certain OS versions
- StrCmp $R0 "95" win_ver_bad
- StrCmp $R0 "98" win_ver_bad
- StrCmp $R0 "ME" win_ver_bad
- StrCmp $R0 "NT" win_ver_bad
- Return
-win_ver_bad:
- StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
- MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
- Return
-win_ver_abort:
- Quit
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Make sure the user can install/uninstall
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckIfAdministrator
- DetailPrint $(CheckAdministratorInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorInstMB)
- Quit
-lbl_is_admin:
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CheckIfAdministrator
- DetailPrint $(CheckAdministratorUnInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorUnInstMB)
- Quit
-lbl_is_admin:
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Checks to see if the current version has already been installed (according to the registry).
-; If it has, allow user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckIfAlreadyCurrent
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
- StrCmp $0 ${VERSION_LONG} 0 continue_install
- StrCmp $SKIP_DIALOGS "true" continue_install
- MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
- Quit
-continue_install:
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Checks for CPU valid (must have SSE2 support)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckCPUFlags
- Call GetWindowsVersion
- Pop $R0
- StrCmp $R0 "2000" OK_SSE ; sse check not available on win2k.
-
- Push $1
- System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
- IntCmp $1 1 OK_SSE
- MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE
- Quit
-
- OK_SSE:
- Pop $1
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Close the program, if running. Modifies no variables.
-; Allows user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CloseSecondLife
- Push $0
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
-
- StrCmp $SKIP_DIALOGS "true" CLOSE
- MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
-
- CANCEL_INSTALL:
- Quit
-
- CLOSE:
- DetailPrint $(CloseSecondLifeInstDP)
- SendMessage $0 16 0 0
-
- LOOP:
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- Sleep 500
- Goto LOOP
-
- DONE:
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Test our connection to secondlife.com
-; Also allows us to count attempted installs by examining web logs.
-; *TODO: Return current SL version info and have installer check
-; if it is up to date.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckNetworkConnection
- Push $0
- Push $1
- Push $2 # Option value for GetOptions
- DetailPrint $(CheckNetworkConnectionDP)
- ; Look for a tag value from the stub installer, used for statistics
- ; to correlate installs. Default to "" if not found on command line.
- StrCpy $2 ""
- ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
- GetTempFileName $0
- !define HTTP_TIMEOUT 5000 ; milliseconds
- ; Don't show secondary progress bar, this will be quick.
- NSISdl::download_quiet \
- /TIMEOUT=${HTTP_TIMEOUT} \
- "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
- $0
- Pop $1 ; Return value, either "success", "cancel" or an error message
- ; MessageBox MB_OK "Download result: $1"
- ; Result ignored for now
- ; StrCmp $1 "success" +2
- ; DetailPrint "Connection failed: $1"
- Delete $0 ; temporary file
- Pop $2
- Pop $1
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Delete files in Documents and Settings\<user>\SecondLife\cache
-; Delete files in Documents and Settings\All Users\SecondLife\cache
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;Function RemoveCacheFiles
-;
-;; Delete files in Documents and Settings\<user>\SecondLife
-;Push $0
-;Push $1
-;Push $2
-; DetailPrint $(RemoveCacheFilesDP)
-;
-; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-;
-; LOOP:
-; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
-; StrCmp $1 "" DONE ; no more users
-;
-; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
-; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-;
-; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
-; ExpandEnvStrings $2 $2
-;
-; ; When explicitly uninstalling, everything goes away
-; RMDir /r "$2\Application Data\SecondLife\cache"
-;
-; CONTINUE:
-; IntOp $0 $0 + 1
-; Goto LOOP
-; DONE:
-;Pop $2
-;Pop $1
-;Pop $0
-;
-;; Delete files in Documents and Settings\All Users\SecondLife
-;Push $0
-; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
-; StrCmp $0 "" +2
-; RMDir /r "$0\SecondLife\cache"
-;Pop $0
-;
-;; Delete filse in C:\Windows\Application Data\SecondLife
-;; If the user is running on a pre-NT system, Application Data lives here instead of
-;; in Documents and Settings.
-;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
-;
-;FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Delete the installed shader files
-;;; Since shaders are in active development, we'll likely need to shuffle them
-;;; around a bit from build to build. This ensures that shaders that we move
-;;; or rename in the dev tree don't get left behind in the install.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveOldShaders
-
-;; Remove old shader files first so fallbacks will work. see DEV-5663
-RMDir /r "$INSTDIR\app_settings\shaders\*"
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Delete the installed XUI files
-;;; We've changed the directory hierarchy for skins, putting all XUI and texture
-;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
-;;; to skins/xui/en-us. Need to clean up the old path when upgrading
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveOldXUI
-
-;; remove old XUI and texture files
-RmDir /r "$INSTDIR\skins\html"
-RmDir /r "$INSTDIR\skins\xui"
-RmDir /r "$INSTDIR\skins\textures"
-Delete "$INSTDIR\skins\*.txt"
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Remove any releasenotes files.
-;;; We are no longer including release notes with the viewer. This will delete
-;;; any that were left behind by an older installer. Delete will not fail if
-;;; the files do not exist
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveOldReleaseNotes
-
-;; remove releasenotes.txt file from application directory, and the shortcut
-;; from the start menu.
-Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
-Delete "$INSTDIR\releasenotes.txt"
-
-FunctionEnd
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Delete files in Documents and Settings\<user>\SecondLife
-; Delete files in Documents and Settings\All Users\SecondLife
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.DocumentsAndSettingsFolder
-
-; Delete files in Documents and Settings\<user>\SecondLife
-Push $0
-Push $1
-Push $2
-
- DetailPrint "Deleting files in Documents and Settings folder"
-
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- ; If uninstalling a normal install remove everything
- ; Otherwise (preview/dmz etc) just remove cache
- StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
- RM_ALL:
- RMDir /r "$2\Application Data\SecondLife"
- RM_CACHE:
- # Local Settings directory is the cache, there is no "cache" subdir
- RMDir /r "$2\Local Settings\Application Data\SecondLife"
- # Vista version of the same
- RMDir /r "$2\AppData\Local\SecondLife"
- Delete "$2\Application Data\SecondLife\user_settings\settings_windlight.xml"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-
-Pop $2
-Pop $1
-Pop $0
-
-; Delete files in Documents and Settings\All Users\SecondLife
-Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- RMDir /r "$0\SecondLife"
-Pop $0
-
-; Delete filse in C:\Windows\Application Data\SecondLife
-; If the user is running on a pre-NT system, Application Data lives here instead of
-; in Documents and Settings.
-RMDir /r "$WINDIR\Application Data\SecondLife"
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Close the program, if running. Modifies no variables.
-; Allows user to bail out of uninstall process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CloseSecondLife
- Push $0
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
-
- CANCEL_UNINSTALL:
- Quit
-
- CLOSE:
- DetailPrint $(CloseSecondLifeUnInstDP)
- SendMessage $0 16 0 0
-
- LOOP:
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- Sleep 500
- Goto LOOP
-
- DONE:
- Pop $0
- Return
-FunctionEnd
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; Delete the stored password for the current Windows user
-; DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
-;
-Function un.RemovePassword
-
-DetailPrint "Removing Second Life password"
-
-SetShellVarContext current
-Delete "$APPDATA\SecondLife\user_settings\password.dat"
-SetShellVarContext all
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Delete the installed files
-;;; This deletes the uninstall executable, but it works
-;;; because it is copied to temp directory before running
-;;;
-;;; Note: You must list all files here, because we only
-;;; want to delete our files, not things users left in the
-;;; application directories.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.ProgramFiles
-
-;; Remove mozilla file first so recursive directory deletion doesn't get hung up
-Delete "$INSTDIR\app_settings\mozilla\components"
-
-;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
-%%DELETE_FILES%%
-
-;; Optional/obsolete files. Delete won't fail if they don't exist.
-Delete "$INSTDIR\dronesettings.ini"
-Delete "$INSTDIR\message_template.msg"
-Delete "$INSTDIR\newview.pdb"
-Delete "$INSTDIR\newview.map"
-Delete "$INSTDIR\SecondLife.pdb"
-Delete "$INSTDIR\SecondLife.map"
-Delete "$INSTDIR\comm.dat"
-Delete "$INSTDIR\*.glsl"
-Delete "$INSTDIR\motions\*.lla"
-Delete "$INSTDIR\trial\*.html"
-Delete "$INSTDIR\newview.exe"
-;; Remove entire help directory
-Delete "$INSTDIR\help\Advanced\*"
-RMDir "$INSTDIR\help\Advanced"
-Delete "$INSTDIR\help\basics\*"
-RMDir "$INSTDIR\help\basics"
-Delete "$INSTDIR\help\Concepts\*"
-RMDir "$INSTDIR\help\Concepts"
-Delete "$INSTDIR\help\welcome\*"
-RMDir "$INSTDIR\help\welcome"
-Delete "$INSTDIR\help\*"
-RMDir "$INSTDIR\help"
-
-Delete "$INSTDIR\uninst.exe"
-RMDir "$INSTDIR"
-
-IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
-
-FOLDERFOUND:
- ; Silent uninstall always removes all files (/SD IDYES)
- MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
- RMDir /r "$INSTDIR"
-
-NOFOLDER:
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Uninstall settings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-UninstallText $(UninstallTextMsg)
-ShowUninstDetails show
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Uninstall section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Section Uninstall
-
-; Start with some default values.
-StrCpy $INSTFLAGS ""
-StrCpy $INSTPROG "${INSTNAME}"
-StrCpy $INSTEXE "${INSTEXE}"
-StrCpy $INSTSHORTCUT "${SHORTCUT}"
-Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
-
-; uninstall for all users (if you change this, change it in the install as well)
-SetShellVarContext all
-
-; Make sure we're not running
-Call un.CloseSecondLife
-
-; Clean up registry keys and subkeys (these should all be !defines somewhere)
-DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
-DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
-
-; Clean up shortcuts
-Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
-RMDir "$SMPROGRAMS\$INSTSHORTCUT"
-
-Delete "$DESKTOP\$INSTSHORTCUT.lnk"
-Delete "$INSTDIR\$INSTSHORTCUT.lnk"
-Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
-
-; Clean up cache and log files.
-; Leave them in-place for non AGNI installs.
-
-!ifdef UNINSTALL_SETTINGS
-Call un.DocumentsAndSettingsFolder
-!endif
-
-; remove stored password on uninstall
-Call un.RemovePassword
-
-Call un.ProgramFiles
-
-SectionEnd ; end of uninstall section
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; (From the NSIS documentation, JC)
-; GetWindowsVersion
-;
-; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
-; Updated by Joost Verburg
-;
-; Returns on top of stack
-;
-; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
-; or
-; '' (Unknown Windows Version)
-;
-; Usage:
-; Call GetWindowsVersion
-; Pop $R0
-; ; at this point $R0 is "NT 4.0" or whatnot
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function GetWindowsVersion
-
- Push $R0
- Push $R1
-
- ReadRegStr $R0 HKLM \
- "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-
- IfErrors 0 lbl_winnt
-
- ; we are not NT
- ReadRegStr $R0 HKLM \
- "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
-
- StrCpy $R1 $R0 1
- StrCmp $R1 '4' 0 lbl_error
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '4.0' lbl_win32_95
- StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
-
- lbl_win32_95:
- StrCpy $R0 '95'
- Goto lbl_done
-
- lbl_win32_98:
- StrCpy $R0 '98'
- Goto lbl_done
-
- lbl_win32_ME:
- StrCpy $R0 'ME'
- Goto lbl_done
-
- lbl_winnt:
-
- StrCpy $R1 $R0 1
-
- StrCmp $R1 '3' lbl_winnt_x
- StrCmp $R1 '4' lbl_winnt_x
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '5.0' lbl_winnt_2000
- StrCmp $R1 '5.1' lbl_winnt_XP
- StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
-
- lbl_winnt_x:
- StrCpy $R0 "NT $R0" 6
- Goto lbl_done
-
- lbl_winnt_2000:
- Strcpy $R0 '2000'
- Goto lbl_done
-
- lbl_winnt_XP:
- Strcpy $R0 'XP'
- Goto lbl_done
-
- lbl_winnt_2003:
- Strcpy $R0 '2003'
- Goto lbl_done
-
- lbl_error:
- Strcpy $R0 ''
- lbl_done:
-
- Pop $R1
- Exch $R0
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Note: to add new languages, add a language file include to the list
-;; at the top of this file, add an entry to the menu and then add an
-;; entry to the language ID selector below
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function .onInit
- Push $0
- ${GetParameters} $COMMANDLINE ; get our command line
-
- ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0
- IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
- StrCpy $SKIP_DIALOGS "true"
-
- ${GetOptions} $COMMANDLINE "/LANGID=" $0 ; /LANGID=1033 implies US English
- ; If no language (error), then proceed
- IfErrors lbl_configure_default_lang
- ; No error means we got a language, so use it
- StrCpy $LANGUAGE $0
- Goto lbl_return
-
-lbl_configure_default_lang:
- ; If we currently have a version of SL installed, default to the language of that install
- ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
- IfErrors +2 0 ; If error skip the copy instruction
- StrCpy $LANGUAGE $0
-
- ; For silent installs, no language prompt, use default
- IfSilent lbl_return
- StrCmp $SKIP_DIALOGS "true" lbl_return
-
-lbl_build_menu:
- Push ""
- # Use separate file so labels can be UTF-16 but we can still merge changes
- # into this ASCII file. JC
- !include "%%SOURCE%%\installers\windows\language_menu.nsi"
-
- Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
- LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
- Pop $0
- StrCmp $0 "cancel" 0 +2
- Abort
- StrCpy $LANGUAGE $0
-
- ; save language in registry
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
-lbl_return:
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.onInit
- ; read language from registry and set for uninstaller
- ; Key will be removed on successful uninstall
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
- IfErrors lbl_end
- StrCpy $LANGUAGE $0
-lbl_end:
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; MAIN SECTION
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Section "" ; (default section)
-
-SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
-
-; Start with some default values.
-StrCpy $INSTFLAGS "${INSTFLAGS}"
-StrCpy $INSTPROG "${INSTNAME}"
-StrCpy $INSTEXE "${INSTEXE}"
-StrCpy $INSTSHORTCUT "${SHORTCUT}"
-
-Call CheckWindowsVersion ; warn if on Windows 98/ME
-Call CheckCPUFlags ; Make sure we have SSE2 support
-Call CheckIfAdministrator ; Make sure the user can install/uninstall
-Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
-Call CloseSecondLife ; Make sure we're not running
-Call CheckNetworkConnection ; ping secondlife.com
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
-;Call RemoveCacheFiles ; Installing over removes potentially corrupted
- ; VFS and cache files.
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Need to clean out shader files from previous installs to fix DEV-5663
-Call RemoveOldShaders
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Need to clean out old XUI files that predate skinning
-Call RemoveOldXUI
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Clear out old releasenotes.txt files. These are now on the public wiki.
-Call RemoveOldReleaseNotes
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Files
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
-%%INSTALL_FILES%%
-
-# Pass the installer's language to the client to use as a default
-StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Shortcuts in start menu
-CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
-SetOutPath "$INSTDIR"
-CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-
-
-WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
- "InternetShortcut" "URL" \
- "http://join.secondlife.com/"
-WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
- "InternetShortcut" "URL" \
- "http://www.secondlife.com/account/"
-WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
- "InternetShortcut" "URL" \
- "http://wiki.secondlife.com/wiki/LSL_Portal"
-CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
- '"$INSTDIR\uninst.exe"' ''
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Other shortcuts
-SetOutPath "$INSTDIR"
-CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
- '"$INSTDIR\uninst.exe"' ''
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Write registry
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
-WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
-WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Write URL registry info
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
-;; URL param must be last item passed to viewer, it ignores subsequent params
-;; to avoid parameter injection attacks.
-WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
-;; URL param must be last item passed to viewer, it ignores subsequent params
-;; to avoid parameter injection attacks.
-WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
-
-; write out uninstaller
-WriteUninstaller "$INSTDIR\uninst.exe"
-
-; end of default section
-SectionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; secondlife setup.nsi
+;; Copyright 2004-2010, Linden Research, Inc.
+;;
+;; NSIS Unicode 2.38.1 or higher required
+;; http://www.scratchpaper.com/
+;;
+;; Author: James Cook, Don Kjer, Callum Prentice
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Compiler flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+SetOverwrite on ; overwrite files
+SetCompress auto ; compress iff saves space
+SetCompressor /solid lzma ; compress whole installer as one block
+SetDatablockOptimize off ; only saves us 0.1%, not worth it
+XPStyle on ; add an XP manifest to the installer
+RequestExecutionLevel admin ; on Vista we must be admin because we write to Program Files
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Project flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%%VERSION%%
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; - language files - one for each language (or flavor thereof)
+;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
+;; application directory so we have to add a path to these include files)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!include "%%SOURCE%%\installers\windows\lang_da.nsi"
+!include "%%SOURCE%%\installers\windows\lang_de.nsi"
+!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
+!include "%%SOURCE%%\installers\windows\lang_es.nsi"
+!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
+!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
+!include "%%SOURCE%%\installers\windows\lang_it.nsi"
+!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
+!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
+!include "%%SOURCE%%\installers\windows\lang_pl.nsi"
+!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
+!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
+
+# *TODO: Move these into the language files themselves
+LangString LanguageCode ${LANG_DANISH} "da"
+LangString LanguageCode ${LANG_GERMAN} "de"
+LangString LanguageCode ${LANG_ENGLISH} "en"
+LangString LanguageCode ${LANG_SPANISH} "es"
+LangString LanguageCode ${LANG_FRENCH} "fr"
+LangString LanguageCode ${LANG_JAPANESE} "ja"
+LangString LanguageCode ${LANG_ITALIAN} "it"
+LangString LanguageCode ${LANG_KOREAN} "ko"
+LangString LanguageCode ${LANG_DUTCH} "nl"
+LangString LanguageCode ${LANG_POLISH} "pl"
+LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
+LangString LanguageCode ${LANG_SIMPCHINESE} "zh"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
+;; For example:
+;; !define INSTFLAGS "%(flags)s"
+;; !define INSTNAME "SecondLife%(grid_caps)s"
+;; !define SHORTCUT "Second Life (%(grid_caps)s)"
+;; !define URLNAME "secondlife%(grid)s"
+;; !define UNINSTALL_SETTINGS 1
+
+%%GRID_VARS%%
+
+Name ${INSTNAME}
+
+SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
+
+BrandingText " " ; bottom of window text
+Icon %%SOURCE%%\installers\windows\install_icon.ico
+UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
+WindowIcon on ; show our icon in left corner
+BGGradient off ; no big background window
+CRCCheck on ; make sure CRC is OK
+InstProgressFlags smooth colored ; new colored smooth look
+ShowInstDetails nevershow ; no details, no "show" button
+SetOverwrite on ; stomp files by default
+AutoCloseWindow true ; after all files install, close window
+
+InstallDir "$PROGRAMFILES\${INSTNAME}"
+InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
+DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
+Page directory dirPre
+Page instfiles
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Var INSTPROG
+Var INSTEXE
+Var INSTFLAGS
+Var INSTSHORTCUT
+Var COMMANDLINE ; command line passed to this installer, set in .onInit
+Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
+Var SKIP_DIALOGS ; set from command line in .onInit. autoinstall
+ ; GUI and the defaults.
+
+;;; Function definitions should go before file includes, because calls to
+;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
+;;; the end of this script NSIS has to decompress the whole installer before
+;;; it can call the DLL function. JC
+
+!include "FileFunc.nsh" ; For GetParameters, GetOptions
+!insertmacro GetParameters
+!insertmacro GetOptions
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; After install completes, launch app
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInstSuccess
+ Push $R0 # Option value, unused
+
+ StrCmp $SKIP_DIALOGS "true" label_launch
+
+ ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
+ # If parameter was there (no error) just launch
+ # Otherwise ask
+ IfErrors label_ask_launch label_launch
+
+label_ask_launch:
+ # Don't launch by default when silent
+ IfSilent label_no_launch
+ MessageBox MB_YESNO $(InstSuccesssQuestion) \
+ IDYES label_launch IDNO label_no_launch
+
+label_launch:
+ # Assumes SetOutPath $INSTDIR
+ Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
+label_no_launch:
+ Pop $R0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Pre-directory page callback
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function dirPre
+ StrCmp $SKIP_DIALOGS "true" 0 +2
+ Abort
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Make sure we're not on Windows 98 / ME
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckWindowsVersion
+ DetailPrint "Checking Windows version..."
+ Call GetWindowsVersion
+ Pop $R0
+ ; Just get first two characters, ignore 4.0 part of "NT 4.0"
+ StrCpy $R0 $R0 2
+ ; Blacklist certain OS versions
+ StrCmp $R0 "95" win_ver_bad
+ StrCmp $R0 "98" win_ver_bad
+ StrCmp $R0 "ME" win_ver_bad
+ StrCmp $R0 "NT" win_ver_bad
+ Return
+win_ver_bad:
+ StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
+ MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
+ Return
+win_ver_abort:
+ Quit
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Make sure the user can install/uninstall
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckIfAdministrator
+ DetailPrint $(CheckAdministratorInstDP)
+ UserInfo::GetAccountType
+ Pop $R0
+ StrCmp $R0 "Admin" lbl_is_admin
+ MessageBox MB_OK $(CheckAdministratorInstMB)
+ Quit
+lbl_is_admin:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CheckIfAdministrator
+ DetailPrint $(CheckAdministratorUnInstDP)
+ UserInfo::GetAccountType
+ Pop $R0
+ StrCmp $R0 "Admin" lbl_is_admin
+ MessageBox MB_OK $(CheckAdministratorUnInstMB)
+ Quit
+lbl_is_admin:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Checks to see if the current version has already been installed (according to the registry).
+; If it has, allow user to bail out of install process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckIfAlreadyCurrent
+ Push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
+ StrCmp $0 ${VERSION_LONG} 0 continue_install
+ StrCmp $SKIP_DIALOGS "true" continue_install
+ MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
+ Quit
+continue_install:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Checks for CPU valid (must have SSE2 support)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckCPUFlags
+ Call GetWindowsVersion
+ Pop $R0
+ StrCmp $R0 "2000" OK_SSE ; sse check not available on win2k.
+
+ Push $1
+ System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
+ IntCmp $1 1 OK_SSE
+ MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE
+ Quit
+
+ OK_SSE:
+ Pop $1
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Close the program, if running. Modifies no variables.
+; Allows user to bail out of install process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CloseSecondLife
+ Push $0
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+
+ StrCmp $SKIP_DIALOGS "true" CLOSE
+ MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
+
+ CANCEL_INSTALL:
+ Quit
+
+ CLOSE:
+ DetailPrint $(CloseSecondLifeInstDP)
+ SendMessage $0 16 0 0
+
+ LOOP:
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ Sleep 500
+ Goto LOOP
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Test our connection to secondlife.com
+; Also allows us to count attempted installs by examining web logs.
+; *TODO: Return current SL version info and have installer check
+; if it is up to date.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckNetworkConnection
+ Push $0
+ Push $1
+ Push $2 # Option value for GetOptions
+ DetailPrint $(CheckNetworkConnectionDP)
+ ; Look for a tag value from the stub installer, used for statistics
+ ; to correlate installs. Default to "" if not found on command line.
+ StrCpy $2 ""
+ ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
+ GetTempFileName $0
+ !define HTTP_TIMEOUT 5000 ; milliseconds
+ ; Don't show secondary progress bar, this will be quick.
+ NSISdl::download_quiet \
+ /TIMEOUT=${HTTP_TIMEOUT} \
+ "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
+ $0
+ Pop $1 ; Return value, either "success", "cancel" or an error message
+ ; MessageBox MB_OK "Download result: $1"
+ ; Result ignored for now
+ ; StrCmp $1 "success" +2
+ ; DetailPrint "Connection failed: $1"
+ Delete $0 ; temporary file
+ Pop $2
+ Pop $1
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Delete files in Documents and Settings\<user>\SecondLife\cache
+; Delete files in Documents and Settings\All Users\SecondLife\cache
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;Function RemoveCacheFiles
+;
+;; Delete files in Documents and Settings\<user>\SecondLife
+;Push $0
+;Push $1
+;Push $2
+; DetailPrint $(RemoveCacheFilesDP)
+;
+; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+;
+; LOOP:
+; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+; StrCmp $1 "" DONE ; no more users
+;
+; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+;
+; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+; ExpandEnvStrings $2 $2
+;
+; ; When explicitly uninstalling, everything goes away
+; RMDir /r "$2\Application Data\SecondLife\cache"
+;
+; CONTINUE:
+; IntOp $0 $0 + 1
+; Goto LOOP
+; DONE:
+;Pop $2
+;Pop $1
+;Pop $0
+;
+;; Delete files in Documents and Settings\All Users\SecondLife
+;Push $0
+; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+; StrCmp $0 "" +2
+; RMDir /r "$0\SecondLife\cache"
+;Pop $0
+;
+;; Delete filse in C:\Windows\Application Data\SecondLife
+;; If the user is running on a pre-NT system, Application Data lives here instead of
+;; in Documents and Settings.
+;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
+;
+;FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed shader files
+;;; Since shaders are in active development, we'll likely need to shuffle them
+;;; around a bit from build to build. This ensures that shaders that we move
+;;; or rename in the dev tree don't get left behind in the install.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveOldShaders
+
+;; Remove old shader files first so fallbacks will work. see DEV-5663
+RMDir /r "$INSTDIR\app_settings\shaders\*"
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed XUI files
+;;; We've changed the directory hierarchy for skins, putting all XUI and texture
+;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
+;;; to skins/xui/en-us. Need to clean up the old path when upgrading
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveOldXUI
+
+;; remove old XUI and texture files
+RmDir /r "$INSTDIR\skins\html"
+RmDir /r "$INSTDIR\skins\xui"
+RmDir /r "$INSTDIR\skins\textures"
+Delete "$INSTDIR\skins\*.txt"
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Remove any releasenotes files.
+;;; We are no longer including release notes with the viewer. This will delete
+;;; any that were left behind by an older installer. Delete will not fail if
+;;; the files do not exist
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveOldReleaseNotes
+
+;; remove releasenotes.txt file from application directory, and the shortcut
+;; from the start menu.
+Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
+Delete "$INSTDIR\releasenotes.txt"
+
+FunctionEnd
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Delete files in Documents and Settings\<user>\SecondLife
+; Delete files in Documents and Settings\All Users\SecondLife
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.DocumentsAndSettingsFolder
+
+; Delete files in Documents and Settings\<user>\SecondLife
+Push $0
+Push $1
+Push $2
+
+ DetailPrint "Deleting files in Documents and Settings folder"
+
+ StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+
+ LOOP:
+ EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+ StrCmp $1 "" DONE ; no more users
+
+ ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+ StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+
+ ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+ ExpandEnvStrings $2 $2
+
+ ; If uninstalling a normal install remove everything
+ ; Otherwise (preview/dmz etc) just remove cache
+ StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
+ RM_ALL:
+ RMDir /r "$2\Application Data\SecondLife"
+ RM_CACHE:
+ # Local Settings directory is the cache, there is no "cache" subdir
+ RMDir /r "$2\Local Settings\Application Data\SecondLife"
+ # Vista version of the same
+ RMDir /r "$2\AppData\Local\SecondLife"
+ Delete "$2\Application Data\SecondLife\user_settings\settings_windlight.xml"
+
+ CONTINUE:
+ IntOp $0 $0 + 1
+ Goto LOOP
+ DONE:
+
+Pop $2
+Pop $1
+Pop $0
+
+; Delete files in Documents and Settings\All Users\SecondLife
+Push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+ StrCmp $0 "" +2
+ RMDir /r "$0\SecondLife"
+Pop $0
+
+; Delete filse in C:\Windows\Application Data\SecondLife
+; If the user is running on a pre-NT system, Application Data lives here instead of
+; in Documents and Settings.
+RMDir /r "$WINDIR\Application Data\SecondLife"
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Close the program, if running. Modifies no variables.
+; Allows user to bail out of uninstall process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CloseSecondLife
+ Push $0
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
+
+ CANCEL_UNINSTALL:
+ Quit
+
+ CLOSE:
+ DetailPrint $(CloseSecondLifeUnInstDP)
+ SendMessage $0 16 0 0
+
+ LOOP:
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ Sleep 500
+ Goto LOOP
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; Delete the stored password for the current Windows user
+; DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
+;
+Function un.RemovePassword
+
+DetailPrint "Removing Second Life password"
+
+SetShellVarContext current
+Delete "$APPDATA\SecondLife\user_settings\password.dat"
+SetShellVarContext all
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed files
+;;; This deletes the uninstall executable, but it works
+;;; because it is copied to temp directory before running
+;;;
+;;; Note: You must list all files here, because we only
+;;; want to delete our files, not things users left in the
+;;; application directories.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.ProgramFiles
+
+;; Remove mozilla file first so recursive directory deletion doesn't get hung up
+Delete "$INSTDIR\app_settings\mozilla\components"
+
+;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
+%%DELETE_FILES%%
+
+;; Optional/obsolete files. Delete won't fail if they don't exist.
+Delete "$INSTDIR\dronesettings.ini"
+Delete "$INSTDIR\message_template.msg"
+Delete "$INSTDIR\newview.pdb"
+Delete "$INSTDIR\newview.map"
+Delete "$INSTDIR\SecondLife.pdb"
+Delete "$INSTDIR\SecondLife.map"
+Delete "$INSTDIR\comm.dat"
+Delete "$INSTDIR\*.glsl"
+Delete "$INSTDIR\motions\*.lla"
+Delete "$INSTDIR\trial\*.html"
+Delete "$INSTDIR\newview.exe"
+;; Remove entire help directory
+Delete "$INSTDIR\help\Advanced\*"
+RMDir "$INSTDIR\help\Advanced"
+Delete "$INSTDIR\help\basics\*"
+RMDir "$INSTDIR\help\basics"
+Delete "$INSTDIR\help\Concepts\*"
+RMDir "$INSTDIR\help\Concepts"
+Delete "$INSTDIR\help\welcome\*"
+RMDir "$INSTDIR\help\welcome"
+Delete "$INSTDIR\help\*"
+RMDir "$INSTDIR\help"
+
+Delete "$INSTDIR\uninst.exe"
+RMDir "$INSTDIR"
+
+IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
+
+FOLDERFOUND:
+ ; Silent uninstall always removes all files (/SD IDYES)
+ MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
+ RMDir /r "$INSTDIR"
+
+NOFOLDER:
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Uninstall settings
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+UninstallText $(UninstallTextMsg)
+ShowUninstDetails show
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Uninstall section
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section Uninstall
+
+; Start with some default values.
+StrCpy $INSTFLAGS ""
+StrCpy $INSTPROG "${INSTNAME}"
+StrCpy $INSTEXE "${INSTEXE}"
+StrCpy $INSTSHORTCUT "${SHORTCUT}"
+Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
+
+; uninstall for all users (if you change this, change it in the install as well)
+SetShellVarContext all
+
+; Make sure we're not running
+Call un.CloseSecondLife
+
+; Clean up registry keys and subkeys (these should all be !defines somewhere)
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
+
+; Clean up shortcuts
+Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
+RMDir "$SMPROGRAMS\$INSTSHORTCUT"
+
+Delete "$DESKTOP\$INSTSHORTCUT.lnk"
+Delete "$INSTDIR\$INSTSHORTCUT.lnk"
+Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
+
+; Clean up cache and log files.
+; Leave them in-place for non AGNI installs.
+
+!ifdef UNINSTALL_SETTINGS
+Call un.DocumentsAndSettingsFolder
+!endif
+
+; remove stored password on uninstall
+Call un.RemovePassword
+
+Call un.ProgramFiles
+
+SectionEnd ; end of uninstall section
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; (From the NSIS documentation, JC)
+; GetWindowsVersion
+;
+; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
+; Updated by Joost Verburg
+;
+; Returns on top of stack
+;
+; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
+; or
+; '' (Unknown Windows Version)
+;
+; Usage:
+; Call GetWindowsVersion
+; Pop $R0
+; ; at this point $R0 is "NT 4.0" or whatnot
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function GetWindowsVersion
+
+ Push $R0
+ Push $R1
+
+ ReadRegStr $R0 HKLM \
+ "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+
+ IfErrors 0 lbl_winnt
+
+ ; we are not NT
+ ReadRegStr $R0 HKLM \
+ "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
+
+ StrCpy $R1 $R0 1
+ StrCmp $R1 '4' 0 lbl_error
+
+ StrCpy $R1 $R0 3
+
+ StrCmp $R1 '4.0' lbl_win32_95
+ StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
+
+ lbl_win32_95:
+ StrCpy $R0 '95'
+ Goto lbl_done
+
+ lbl_win32_98:
+ StrCpy $R0 '98'
+ Goto lbl_done
+
+ lbl_win32_ME:
+ StrCpy $R0 'ME'
+ Goto lbl_done
+
+ lbl_winnt:
+
+ StrCpy $R1 $R0 1
+
+ StrCmp $R1 '3' lbl_winnt_x
+ StrCmp $R1 '4' lbl_winnt_x
+
+ StrCpy $R1 $R0 3
+
+ StrCmp $R1 '5.0' lbl_winnt_2000
+ StrCmp $R1 '5.1' lbl_winnt_XP
+ StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
+
+ lbl_winnt_x:
+ StrCpy $R0 "NT $R0" 6
+ Goto lbl_done
+
+ lbl_winnt_2000:
+ Strcpy $R0 '2000'
+ Goto lbl_done
+
+ lbl_winnt_XP:
+ Strcpy $R0 'XP'
+ Goto lbl_done
+
+ lbl_winnt_2003:
+ Strcpy $R0 '2003'
+ Goto lbl_done
+
+ lbl_error:
+ Strcpy $R0 ''
+ lbl_done:
+
+ Pop $R1
+ Exch $R0
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Note: to add new languages, add a language file include to the list
+;; at the top of this file, add an entry to the menu and then add an
+;; entry to the language ID selector below
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInit
+ Push $0
+ ${GetParameters} $COMMANDLINE ; get our command line
+
+ ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0
+ IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
+ StrCpy $SKIP_DIALOGS "true"
+
+ ${GetOptions} $COMMANDLINE "/LANGID=" $0 ; /LANGID=1033 implies US English
+ ; If no language (error), then proceed
+ IfErrors lbl_configure_default_lang
+ ; No error means we got a language, so use it
+ StrCpy $LANGUAGE $0
+ Goto lbl_return
+
+lbl_configure_default_lang:
+ ; If we currently have a version of SL installed, default to the language of that install
+ ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+ IfErrors +2 0 ; If error skip the copy instruction
+ StrCpy $LANGUAGE $0
+
+ ; For silent installs, no language prompt, use default
+ IfSilent lbl_return
+ StrCmp $SKIP_DIALOGS "true" lbl_return
+
+lbl_build_menu:
+ Push ""
+ # Use separate file so labels can be UTF-16 but we can still merge changes
+ # into this ASCII file. JC
+ !include "%%SOURCE%%\installers\windows\language_menu.nsi"
+
+ Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
+ LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
+ Pop $0
+ StrCmp $0 "cancel" 0 +2
+ Abort
+ StrCpy $LANGUAGE $0
+
+ ; save language in registry
+ WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
+lbl_return:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.onInit
+ ; read language from registry and set for uninstaller
+ ; Key will be removed on successful uninstall
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+ IfErrors lbl_end
+ StrCpy $LANGUAGE $0
+lbl_end:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; MAIN SECTION
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section "" ; (default section)
+
+SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
+
+; Start with some default values.
+StrCpy $INSTFLAGS "${INSTFLAGS}"
+StrCpy $INSTPROG "${INSTNAME}"
+StrCpy $INSTEXE "${INSTEXE}"
+StrCpy $INSTSHORTCUT "${SHORTCUT}"
+
+Call CheckWindowsVersion ; warn if on Windows 98/ME
+Call CheckCPUFlags ; Make sure we have SSE2 support
+Call CheckIfAdministrator ; Make sure the user can install/uninstall
+Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
+Call CloseSecondLife ; Make sure we're not running
+Call CheckNetworkConnection ; ping secondlife.com
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
+;Call RemoveCacheFiles ; Installing over removes potentially corrupted
+ ; VFS and cache files.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Need to clean out shader files from previous installs to fix DEV-5663
+Call RemoveOldShaders
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Need to clean out old XUI files that predate skinning
+Call RemoveOldXUI
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Clear out old releasenotes.txt files. These are now on the public wiki.
+Call RemoveOldReleaseNotes
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Files
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
+%%INSTALL_FILES%%
+
+# Pass the installer's language to the client to use as a default
+StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Shortcuts in start menu
+CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
+SetOutPath "$INSTDIR"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+
+
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
+ "InternetShortcut" "URL" \
+ "http://join.secondlife.com/"
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
+ "InternetShortcut" "URL" \
+ "http://www.secondlife.com/account/"
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
+ "InternetShortcut" "URL" \
+ "http://wiki.secondlife.com/wiki/LSL_Portal"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
+ '"$INSTDIR\uninst.exe"' ''
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Other shortcuts
+SetOutPath "$INSTDIR"
+CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
+ '"$INSTDIR\uninst.exe"' ''
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Write registry
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Write URL registry info
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
+;; URL param must be last item passed to viewer, it ignores subsequent params
+;; to avoid parameter injection attacks.
+WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
+WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
+WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
+WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
+;; URL param must be last item passed to viewer, it ignores subsequent params
+;; to avoid parameter injection attacks.
+WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
+
+; write out uninstaller
+WriteUninstaller "$INSTDIR\uninst.exe"
+
+; end of default section
+SectionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 446ded8096..642a1907f0 100644..100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -41,6 +41,7 @@
#include "llcapabilitylistener.h"
#include "llchannelmanager.h"
#include "llconsole.h"
+#include "llenvmanager.h"
#include "llfirstuse.h"
#include "llfloatercamera.h"
#include "llfloaterreg.h"
@@ -84,6 +85,7 @@
#include "llwindow.h"
#include "llworld.h"
#include "llworldmap.h"
+#include "stringize.h"
using namespace LLVOAvatarDefines;
@@ -575,7 +577,10 @@ void LLAgent::setFlying(BOOL fly)
// static
void LLAgent::toggleFlying()
{
- LLToolPie::instance().stopClickToWalk();
+ if ( gAgent.mAutoPilot )
+ {
+ LLToolPie::instance().stopClickToWalk();
+ }
BOOL fly = !gAgent.getFlying();
@@ -608,6 +613,8 @@ void LLAgent::standUp()
//-----------------------------------------------------------------------------
void LLAgent::setRegion(LLViewerRegion *regionp)
{
+ bool teleport = true;
+
llassert(regionp);
if (mRegionp != regionp)
{
@@ -645,6 +652,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
gSky.mVOGroundp->setRegion(regionp);
}
+ // Notify windlight managers
+ teleport = (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE);
}
else
{
@@ -685,6 +694,15 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
LLSelectMgr::getInstance()->updateSelectionCenter();
LLFloaterMove::sUpdateFlyingStatus();
+
+ if (teleport)
+ {
+ LLEnvManagerNew::instance().onTeleport();
+ }
+ else
+ {
+ LLEnvManagerNew::instance().onRegionCrossing();
+ }
}
@@ -3335,8 +3353,11 @@ bool LLAgent::teleportCore(bool is_local)
// hide land floater too - it'll be out of date
LLFloaterReg::hideInstance("about_land");
- // hide the search floater (EXT-8276)
- LLFloaterReg::hideInstance("search");
+ // hide the Region/Estate floater
+ LLFloaterReg::hideInstance("region_info");
+
+ // minimize the Search floater (STORM-1474)
+ LLFloaterReg::getInstance("search")->setMinimized(TRUE);
LLViewerParcelMgr::getInstance()->deselectLand();
LLViewerMediaFocus::getInstance()->clearFocus();
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index c30d3b9aa3..f195c985c0 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -393,8 +393,6 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
LLVector3 object_extents = object->getScale();
- const LLVector4a* oe4 = object->mDrawable->getSpatialExtents();
- object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] );
// make sure they object extents are non-zero
object_extents.clamp(0.001f, F32_MAX);
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index d426afb17c..b9125ec8d3 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -33,7 +33,6 @@
#include "llagentwearablesfetch.h"
#include "llappearancemgr.h"
#include "llcallbacklist.h"
-#include "llfolderview.h"
#include "llgesturemgr.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
@@ -45,6 +44,7 @@
#include "llsidepanelappearance.h"
#include "llsidetray.h"
#include "lltexlayer.h"
+#include "lltooldraganddrop.h"
#include "llviewerregion.h"
#include "llvoavatarself.h"
#include "llwearable.h"
@@ -1692,37 +1692,6 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty
}
}
-// 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 3ef50f14da..252b812c27 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -165,7 +165,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
@@ -211,7 +210,6 @@ public:
public:
static void userRemoveWearable(const LLWearableType::EType &type, const U32 &index);
static void userRemoveWearablesOfType(const LLWearableType::EType &type);
- static void userRemoveAllClothes();
typedef std::vector<LLViewerObject*> llvo_vec_t;
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 1388d9aee0..a0af94ba77 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2285,7 +2285,9 @@ void LLAppearanceMgr::autopopulateOutfits()
void LLAppearanceMgr::onFirstFullyVisible()
{
gAgentAvatarp->debugAvatarVisible();
- autopopulateOutfits();
+ // The auto-populate is failing at the point of generating outfits
+ // folders, so don't do the library copy until that is resolved.
+ // autopopulateOutfits();
}
bool LLAppearanceMgr::updateBaseOutfit()
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index d2582d524d..7e597fe5dc 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1,4 +1,4 @@
- /**
+/**
* @file llappviewer.cpp
* @brief The LLAppViewer class definitions
*
@@ -56,6 +56,7 @@
#include "llallocator.h"
#include "llares.h"
#include "llcurl.h"
+#include "llcalc.h"
#include "lltexturestats.h"
#include "lltexturestats.h"
#include "llviewerwindow.h"
@@ -136,6 +137,7 @@
#include "lltoolmgr.h"
#include "llassetstorage.h"
#include "llpolymesh.h"
+#include "llproxy.h"
#include "llaudioengine.h"
#include "llstreamingaudio.h"
#include "llviewermenu.h"
@@ -320,6 +322,41 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
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<LLDeferredTaskList>
+{
+ LOG_CLASS(LLDeferredTaskList);
+
+ friend class LLAppViewer;
+ typedef boost::signals2::signal<void()> 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
@@ -468,18 +505,6 @@ void request_initial_instant_messages()
}
}
-// A settings system callback for CrashSubmitBehavior
-bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)
-{
- S32 cb = newvalue.asInteger();
- const S32 NEVER_SUBMIT_REPORT = 2;
- if(cb == NEVER_SUBMIT_REPORT)
- {
- LLAppViewer::instance()->destroyMainloopTimeout();
- }
- return true;
-}
-
// Use these strictly for things that are constructed at startup,
// or for things that are performance critical. JC
static void settings_to_globals()
@@ -611,9 +636,6 @@ bool LLAppViewer::sendURLToOtherInstance(const std::string& url)
// Static members.
// The single viewer app.
LLAppViewer* LLAppViewer::sInstance = NULL;
-
-const std::string LLAppViewer::sGlobalSettingsName = "Global";
-
LLTextureCache* LLAppViewer::sTextureCache = NULL;
LLImageDecodeThread* LLAppViewer::sImageDecodeThread = NULL;
LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
@@ -664,7 +686,7 @@ LLAppViewer::~LLAppViewer()
}
bool LLAppViewer::init()
-{
+{
//
// Start of the application
//
@@ -697,6 +719,11 @@ bool LLAppViewer::init()
LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ;
+ //set the max heap size.
+ initMaxHeapSize() ;
+
+ LLPrivateMemoryPoolManager::initClass((BOOL)gSavedSettings.getBOOL("MemoryPrivatePoolEnabled")) ;
+
// write Google Breakpad minidump files to our log directory
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
logdir += gDirUtilp->getDirDelimiter();
@@ -722,7 +749,7 @@ bool LLAppViewer::init()
// *NOTE:Mani - LLCurl::initClass is not thread safe.
// Called before threads are created.
- LLCurl::initClass();
+ LLCurl::initClass(gSavedSettings.getBOOL("CurlUseMultipleThreads"));
LL_INFOS("InitInfo") << "LLCurl initialized." << LL_ENDL ;
LLMachineID::init();
@@ -745,6 +772,23 @@ 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 ;
+
+ LLNotifications::instance();
+ LL_INFOS("InitInfo") << "Notifications initialized." << LL_ENDL ;
+
writeSystemInfo();
// Initialize updater service (now that we have an io pump)
@@ -771,16 +815,6 @@ bool LLAppViewer::init()
LL_INFOS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;
LL_INFOS("InitInfo") << "libcurl version is: " << LLCurl::getVersionString() << LL_ENDL;
- // Get the single value from the crash settings file, if it exists
- std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- gCrashSettings.loadFromFile(crash_settings_filename);
- if(gSavedSettings.getBOOL("IgnoreAllNotifications"))
- {
- gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ALWAYS_SEND);
- gCrashSettings.saveToFile(crash_settings_filename, FALSE);
- }
- LL_INFOS("InitInfo") << "Crash settings done." << LL_ENDL ;
-
/////////////////////////////////////////////////
// OS-specific login dialogs
/////////////////////////////////////////////////
@@ -796,19 +830,8 @@ 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);
@@ -1055,7 +1078,7 @@ bool LLAppViewer::init()
//EXT-7013 - On windows for some locale (Japanese) standard
//datetime formatting functions didn't support some parameters such as "weekday".
//Names for days and months localized in xml are also useful for Polish locale(STORM-107).
- std::string language = LLControlGroup::getInstance(sGlobalSettingsName)->getString("Language");
+ std::string language = gSavedSettings.getString("Language");
if(language == "ja" || language == "pl")
{
LLStringOps::setupWeekDaysNames(LLTrans::getString("dateTimeWeekdaysNames"));
@@ -1070,9 +1093,97 @@ bool LLAppViewer::init()
LLAgentLanguage::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
+ const static U32 MAX_SIZE_CHECKED_MEMORY_BLOCK = 64 * 1024 * 1024 ; //64 MB
+ //static F32 force_quit_timer = MAX_QUIT_WAIT_TIME + MEMORY_CHECK_INTERVAL ;
+ static void* last_reserved_address = NULL ;
- return true;
+ if(MEMORY_CHECK_INTERVAL > mMemCheckTimer.getElapsedTimeF32())
+ {
+ return ;
+ }
+ mMemCheckTimer.reset() ;
+
+ if(gGLManager.mDebugGPU)
+ {
+ //update the availability of memory
+ LLMemory::updateMemoryInfo() ;
+ }
+
+ //check the virtual address space fragmentation
+ 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) ;
+ }
+ }
+
+ S32 is_low = !last_reserved_address || LLMemory::isMemoryPoolLow() ;
+
+ //if(is_low < 0) //to force quit
+ //{
+ // if(force_quit_timer > MAX_QUIT_WAIT_TIME) //just hit the limit for the first time
+ // {
+ // //send out the notification to tell the viewer is about to quit in 30 seconds.
+ // LLNotification::Params params("ForceQuitDueToLowMemory");
+ // LLNotifications::instance().add(params);
+
+ // force_quit_timer = MAX_QUIT_WAIT_TIME - MEMORY_CHECK_INTERVAL ;
+ // }
+ // else
+ // {
+ // force_quit_timer -= MEMORY_CHECK_INTERVAL ;
+ // if(force_quit_timer < 0.f)
+ // {
+ // forceQuit() ; //quit
+ // }
+ // }
+ //}
+ //else
+ //{
+ // force_quit_timer = MAX_QUIT_WAIT_TIME + MEMORY_CHECK_INTERVAL ;
+ //}
+
+ LLPipeline::throttleNewMemoryAllocation(!is_low ? FALSE : TRUE) ;
+
+ if(is_low)
+ {
+ LLMemory::logMemoryInfo() ;
+ }
}
static LLFastTimer::DeclareTimer FTM_MESSAGES("System Messages");
@@ -1100,7 +1211,7 @@ bool LLAppViewer::mainLoop()
//-------------------------------------------
// Create IO Pump to use for HTTP Requests.
- gServicePump = new LLPumpIO(gAPRPoolp);
+ gServicePump = new LLPumpIO;
LLHTTPClient::setPump(*gServicePump);
LLCurl::setCAFile(gDirUtilp->getCAFile());
@@ -1110,7 +1221,6 @@ bool LLAppViewer::mainLoop()
LLVoiceClient::getInstance()->init(gServicePump);
LLTimer frameTimer,idleTimer;
LLTimer debugTime;
- LLFrameTimer memCheckTimer;
LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
joystick->setNeedsReset(true);
@@ -1121,7 +1231,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())
@@ -1132,18 +1244,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");
@@ -1307,7 +1409,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;
@@ -1375,15 +1477,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 =
@@ -1476,16 +1570,16 @@ bool LLAppViewer::cleanup()
}
// *TODO - generalize this and move DSO wrangling to a helper class -brad
- std::set<struct apr_dso_handle_t *>::const_iterator i;
- for(i = mPlugins.begin(); i != mPlugins.end(); ++i)
+ for(std::map<apr_dso_handle_t*, boost::shared_ptr<LLAPRPool> >::iterator plugin = mPlugins.begin();
+ plugin != mPlugins.end(); ++plugin)
{
int (*ll_plugin_stop_func)(void) = NULL;
- apr_status_t rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_stop_func, *i, "ll_plugin_stop");
+ apr_status_t rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_stop_func, plugin->first, "ll_plugin_stop");
ll_plugin_stop_func();
- rv = apr_dso_unload(*i);
+ rv = apr_dso_unload(plugin->first);
}
- mPlugins.clear();
+ mPlugins.clear(); // Forget handles and destroy all memory pools.
//flag all elements as needing to be destroyed immediately
// to ensure shutdown order
@@ -1543,7 +1637,9 @@ bool LLAppViewer::cleanup()
// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be deleted.
LLWorldMap::getInstance()->reset(); // release any images
-
+
+ LLCalc::cleanUp();
+
llinfos << "Global stuff deleted" << llendflush;
if (gAudiop)
@@ -1640,9 +1736,7 @@ bool LLAppViewer::cleanup()
llinfos << "Cleaning up Objects" << llendflush;
LLViewerObject::cleanupVOClasses();
-
- LLWaterParamManager::cleanupClass();
- LLWLParamManager::cleanupClass();
+
LLPostProcess::cleanupClass();
LLTracker::cleanupInstance();
@@ -1708,10 +1802,6 @@ bool LLAppViewer::cleanup()
llinfos << "Saved settings" << llendflush;
}
- std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- // save all settings, even if equals defaults
- gCrashSettings.saveToFile(crash_settings_filename, FALSE);
-
std::string warnings_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFilename("Default", "Warnings"));
gWarningSettings.saveToFile(warnings_settings_filename, TRUE);
@@ -1841,7 +1931,6 @@ bool LLAppViewer::cleanup()
gSavedSettings.cleanup();
LLUIColorTable::instance().clear();
- gCrashSettings.cleanup();
LLWatchdog::getInstance()->cleanup();
@@ -1869,9 +1958,14 @@ bool LLAppViewer::cleanup()
LLWeb::loadURLExternal( gLaunchFileOnQuit, false );
llinfos << "File launched." << llendflush;
}
+ llinfos << "Cleaning up LLProxy." << llendl;
+ LLProxy::cleanupClass();
LLMainLoopRepeater::instance().stop();
+ //release all private memory pools.
+ LLPrivateMemoryPoolManager::destroyClass() ;
+
ll_close_fail_log();
MEM_TRACK_RELEASE
@@ -1923,7 +2017,7 @@ bool LLAppViewer::initThreads()
if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
{
- LLFastTimer::sLogLock = new LLMutex(NULL);
+ LLFastTimer::sLogLock = new LLMutex;
mFastTimerLogThread = new LLFastTimerLogThread(LLFastTimer::sLogName);
mFastTimerLogThread->start();
}
@@ -1984,7 +2078,6 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
llerrs << "Invalid settings location list" << llendl;
}
- LLControlGroup* global_settings = LLControlGroup::getInstance(sGlobalSettingsName);
for(LLInitParam::ParamIterator<SettingsGroup>::const_iterator it = mSettingsLocationList->groups.begin(), end_it = mSettingsLocationList->groups.end();
it != end_it;
++it)
@@ -2017,11 +2110,15 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
std::string full_settings_path;
if (file_it->file_name_setting.isProvided()
- && global_settings->controlExists(file_it->file_name_setting))
+ && gSavedSettings.controlExists(file_it->file_name_setting))
{
// try to find filename stored in file_name_setting control
- full_settings_path = global_settings->getString(file_it->file_name_setting);
- if (!gDirUtilp->fileExists(full_settings_path))
+ full_settings_path = gSavedSettings.getString(file_it->file_name_setting);
+ if (full_settings_path.empty())
+ {
+ continue;
+ }
+ else if (!gDirUtilp->fileExists(full_settings_path))
{
// search in default path
full_settings_path = gDirUtilp->getExpandedFilename((ELLPath)path_index, full_settings_path);
@@ -2167,8 +2264,6 @@ bool LLAppViewer::initConfiguration()
gSavedSettings.setS32("WatchdogEnabled", 0);
#endif
- gCrashSettings.getControl(CRASH_BEHAVIOR_SETTING)->getSignal()->connect(boost::bind(&handleCrashSubmitBehaviorChanged, _2));
-
// These are warnings that appear on the first experience of that condition.
// They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
// for disable/reset ability
@@ -2299,15 +2394,33 @@ bool LLAppViewer::initConfiguration()
{
const std::string& name = *itr;
const std::string& value = *(++itr);
- LLControlVariable* c = LLControlGroup::getInstance(sGlobalSettingsName)->getControl(name);
- if(c)
+ std::string name_part;
+ std::string group_part;
+ LLControlVariable* control = NULL;
+
+ // Name can be further split into ControlGroup.Name, with the default control group being Global
+ size_t pos = name.find('.');
+ if (pos != std::string::npos)
+ {
+ group_part = name.substr(0, pos);
+ name_part = name.substr(pos+1);
+ llinfos << "Setting " << group_part << "." << name_part << " to " << value << llendl;
+ LLControlGroup* g = LLControlGroup::getInstance(group_part);
+ if (g) control = g->getControl(name_part);
+ }
+ else
+ {
+ llinfos << "Setting Global." << name << " to " << value << llendl;
+ control = gSavedSettings.getControl(name);
+ }
+
+ if (control)
{
- c->setValue(value, false);
+ control->setValue(value, false);
}
else
{
- llwarns << "'--set' specified with unknown setting: '"
- << name << "'." << llendl;
+ llwarns << "Failed --set " << name << ": setting name unknown." << llendl;
}
}
}
@@ -2764,7 +2877,8 @@ void LLAppViewer::checkForCrash(void)
// Pop up a freeze or crash warning dialog
//
S32 choice;
- if(gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) == CRASH_BEHAVIOR_ASK)
+ const S32 cb = gCrashSettings.getS32("CrashSubmitBehavior");
+ if(cb == CRASH_BEHAVIOR_ASK)
{
std::ostringstream msg;
msg << LLTrans::getString("MBFrozenCrashed");
@@ -2773,7 +2887,7 @@ void LLAppViewer::checkForCrash(void)
alert,
OSMB_YESNO);
}
- else if(gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) == CRASH_BEHAVIOR_NEVER_SEND)
+ else if(cb == CRASH_BEHAVIOR_NEVER_SEND)
{
choice = OSBTN_NO;
}
@@ -2830,10 +2944,9 @@ bool LLAppViewer::initWindow()
LL_INFOS("AppInit") << "gViewerwindow created." << LL_ENDL;
// Need to load feature table before cheking to start watchdog.
- const S32 NEVER_SUBMIT_REPORT = 2;
bool use_watchdog = false;
int watchdog_enabled_setting = gSavedSettings.getS32("WatchdogEnabled");
- if(watchdog_enabled_setting == -1)
+ if (watchdog_enabled_setting == -1)
{
use_watchdog = !LLFeatureManager::getInstance()->isFeatureAvailable("WatchdogDisabled");
}
@@ -2843,8 +2956,7 @@ bool LLAppViewer::initWindow()
use_watchdog = bool(watchdog_enabled_setting);
}
- bool send_reports = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) != NEVER_SUBMIT_REPORT;
- if(use_watchdog && send_reports)
+ if (use_watchdog)
{
LLWatchdog::getInstance()->init(watchdog_killer_callback);
}
@@ -3153,8 +3265,7 @@ void LLAppViewer::handleViewerCrash()
else crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,ERROR_MARKER_FILE_NAME);
llinfos << "Creating crash marker file " << crash_file_name << llendl;
- LLAPRFile crash_file ;
- crash_file.open(crash_file_name, LL_APR_W);
+ LLAPRFile crash_file(crash_file_name, LL_APR_W);
if (crash_file.getFileHandle())
{
LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL;
@@ -3218,11 +3329,10 @@ bool LLAppViewer::anotherInstanceRunning()
LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
//Freeze case checks
- if (LLAPRFile::isExist(marker_file, NULL, LL_APR_RB))
+ if (LLAPRFile::isExist(marker_file, LL_APR_RB))
{
// File exists, try opening with write permissions
- LLAPRFile outfile ;
- outfile.open(marker_file, LL_APR_WB);
+ LLAPRFile outfile(marker_file, LL_APR_WB);
apr_file_t* fMarker = outfile.getFileHandle() ;
if (!fMarker)
{
@@ -3261,25 +3371,25 @@ void LLAppViewer::initMarkerFile()
std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME);
std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME);
- if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB) && !anotherInstanceRunning())
+ if (LLAPRFile::isExist(mMarkerFileName, LL_APR_RB) && !anotherInstanceRunning())
{
gLastExecEvent = LAST_EXEC_FROZE;
LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
}
- if(LLAPRFile::isExist(logout_marker_file, NULL, LL_APR_RB))
+ if(LLAPRFile::isExist(logout_marker_file, LL_APR_RB))
{
gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
LLAPRFile::remove(logout_marker_file);
}
- if(LLAPRFile::isExist(llerror_marker_file, NULL, LL_APR_RB))
+ if(LLAPRFile::isExist(llerror_marker_file, LL_APR_RB))
{
if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
else gLastExecEvent = LAST_EXEC_LLERROR_CRASH;
LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
LLAPRFile::remove(llerror_marker_file);
}
- if(LLAPRFile::isExist(error_marker_file, NULL, LL_APR_RB))
+ if(LLAPRFile::isExist(error_marker_file, LL_APR_RB))
{
if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
else gLastExecEvent = LAST_EXEC_OTHER_CRASH;
@@ -3295,7 +3405,7 @@ void LLAppViewer::initMarkerFile()
// Create the marker file for this execution & lock it
apr_status_t s;
- s = mMarkerFile.open(mMarkerFileName, LL_APR_W, TRUE);
+ s = mMarkerFile.open(mMarkerFileName, LL_APR_W, LLAPRFile::long_lived);
if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
{
@@ -3831,6 +3941,11 @@ bool LLAppViewer::initCache()
}
}
+void LLAppViewer::addOnIdleCallback(const boost::function<void()>& cb)
+{
+ LLDeferredTaskList::instance().addTask(cb);
+}
+
void LLAppViewer::purgeCache()
{
LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << LL_ENDL;
@@ -4014,6 +4129,8 @@ public:
static LLFastTimer::DeclareTimer FTM_AUDIO_UPDATE("Update Audio");
static LLFastTimer::DeclareTimer FTM_CLEANUP("Cleanup");
+static LLFastTimer::DeclareTimer FTM_CLEANUP_DRAWABLES("Drawables");
+static LLFastTimer::DeclareTimer FTM_CLEANUP_OBJECTS("Objects");
static LLFastTimer::DeclareTimer FTM_IDLE_CB("Idle Callbacks");
static LLFastTimer::DeclareTimer FTM_LOD_UPDATE("Update LOD");
static LLFastTimer::DeclareTimer FTM_OBJECTLIST_UPDATE("Update Objectlist");
@@ -4290,8 +4407,14 @@ void LLAppViewer::idle()
{
LLFastTimer t(FTM_CLEANUP);
- gObjectList.cleanDeadObjects();
- LLDrawable::cleanupDeadDrawables();
+ {
+ LLFastTimer t(FTM_CLEANUP_OBJECTS);
+ gObjectList.cleanDeadObjects();
+ }
+ {
+ LLFastTimer t(FTM_CLEANUP_DRAWABLES);
+ LLDrawable::cleanupDeadDrawables();
+ }
}
//
@@ -4341,7 +4464,6 @@ void LLAppViewer::idle()
//
// Update weather effects
//
- LLWorld::getInstance()->updateClouds(gFrameDTClamped);
gSky.propagateHeavenlyBodies(gFrameDTClamped); // moves sun, moon, and planets
// Update wind vector
@@ -4357,9 +4479,6 @@ void LLAppViewer::idle()
// Compute average wind and use to drive motion of water
average_wind = regionp->mWind.getAverage();
- F32 cloud_density = regionp->mCloudLayer.getDensityRegion(wind_position_region);
-
- gSky.setCloudDensityAtAgent(cloud_density);
gSky.setWind(average_wind);
//LLVOWater::setWind(average_wind);
}
@@ -4420,6 +4539,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,
@@ -4519,7 +4641,7 @@ void LLAppViewer::idleShutdown()
void LLAppViewer::sendLogoutRequest()
{
- if(!mLogoutRequestSent)
+ if(!mLogoutRequestSent && gMessageSystem)
{
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_LogoutRequest);
@@ -4541,8 +4663,7 @@ void LLAppViewer::sendLogoutRequest()
gLogoutInProgress = TRUE;
mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME);
- LLAPRFile outfile ;
- outfile.open(mLogoutMarkerFileName, LL_APR_W);
+ LLAPRFile outfile(mLogoutMarkerFileName, LL_APR_W);
mLogoutMarkerFile = outfile.getFileHandle() ;
if (mLogoutMarkerFile)
{
@@ -4994,14 +5115,15 @@ void LLAppViewer::loadEventHostModule(S32 listen_port)
}
#endif // LL_WINDOWS
- apr_dso_handle_t * eventhost_dso_handle = NULL;
- apr_pool_t * eventhost_dso_memory_pool = NULL;
+ boost::shared_ptr<LLAPRPool> eventhost_dso_memory_pool_ptr(new LLAPRPool);
+ LLAPRPool& eventhost_dso_memory_pool(*eventhost_dso_memory_pool_ptr);
+ apr_dso_handle_t* eventhost_dso_handle = NULL;
//attempt to load the shared library
- apr_pool_create(&eventhost_dso_memory_pool, NULL);
+ eventhost_dso_memory_pool.create();
apr_status_t rv = apr_dso_load(&eventhost_dso_handle,
dso_path.c_str(),
- eventhost_dso_memory_pool);
+ eventhost_dso_memory_pool());
llassert_always(! ll_apr_warn_status(rv, eventhost_dso_handle));
llassert_always(eventhost_dso_handle != NULL);
@@ -5021,7 +5143,8 @@ void LLAppViewer::loadEventHostModule(S32 listen_port)
llerrs << "problem loading eventhost plugin, status: " << status << llendl;
}
- mPlugins.insert(eventhost_dso_handle);
+ // Store the handle and link it to the pool that was used to allocate it.
+ mPlugins[eventhost_dso_handle] = eventhost_dso_memory_pool_ptr;
}
void LLAppViewer::launchUpdater()
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 61ee6a7cf1..168aaf5d94 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 addOnIdleCallback(const boost::function<void()>& 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.
@@ -267,10 +270,9 @@ private:
LLAllocator mAlloc;
- std::set<struct apr_dso_handle_t*> mPlugins;
+ std::map<apr_dso_handle_t*, boost::shared_ptr<LLAPRPool> > mPlugins;
- U32 mAvailPhysicalMemInKB ;
- U32 mAvailVirtualMemInKB ;
+ LLFrameTimer mMemCheckTimer;
boost::scoped_ptr<LLUpdaterService> mUpdater;
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 714e0e6163..db11462fcb 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -111,6 +111,7 @@ int main( int argc, char **argv )
}
delete viewer_app_ptr;
viewer_app_ptr = NULL;
+
return 0;
}
@@ -361,46 +362,35 @@ void LLAppViewerLinux::handleCrashReporting(bool reportFreeze)
}
else
{
- const S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
-
- // Always generate the report, have the logger do the asking, and
- // don't wait for the logger before exiting (-> total cleanup).
- if (CRASH_BEHAVIOR_NEVER_SEND != cb)
- {
- // launch the actual crash logger
- const char* ask_dialog = "-dialog";
- if (CRASH_BEHAVIOR_ASK != cb)
- ask_dialog = ""; // omit '-dialog' option
- const char * cmdargv[] =
- {cmd.c_str(),
- ask_dialog,
- "-user",
- (char*)LLGridManager::getInstance()->getGridLabel().c_str(),
- "-name",
- LLAppViewer::instance()->getSecondLifeTitle().c_str(),
- NULL};
- fflush(NULL);
- pid_t pid = fork();
- if (pid == 0)
- { // child
- execv(cmd.c_str(), (char* const*) cmdargv); /* Flawfinder: ignore */
- llwarns << "execv failure when trying to start " << cmd << llendl;
- _exit(1); // avoid atexit()
+ // launch the actual crash logger
+ const char * cmdargv[] =
+ {cmd.c_str(),
+ "-user",
+ (char*)LLGridManager::getInstance()->getGridLabel().c_str(),
+ "-name",
+ LLAppViewer::instance()->getSecondLifeTitle().c_str(),
+ NULL};
+ fflush(NULL);
+ pid_t pid = fork();
+ if (pid == 0)
+ { // child
+ execv(cmd.c_str(), (char* const*) cmdargv); /* Flawfinder: ignore */
+ llwarns << "execv failure when trying to start " << cmd << llendl;
+ _exit(1); // avoid atexit()
+ }
+ else
+ {
+ if (pid > 0)
+ {
+ // DO NOT wait for child proc to die; we want
+ // the logger to outlive us while we quit to
+ // free up the screen/keyboard/etc.
+ ////int childExitStatus;
+ ////waitpid(pid, &childExitStatus, 0);
}
else
{
- if (pid > 0)
- {
- // DO NOT wait for child proc to die; we want
- // the logger to outlive us while we quit to
- // free up the screen/keyboard/etc.
- ////int childExitStatus;
- ////waitpid(pid, &childExitStatus, 0);
- }
- else
- {
- llwarns << "fork failure." << llendl;
- }
+ llwarns << "fork failure." << llendl;
}
}
// Sometimes signals don't seem to quit the viewer. Also, we may
diff --git a/indra/newview/llappviewerlinux_api_dbus.cpp b/indra/newview/llappviewerlinux_api_dbus.cpp
index 32e7e0a83d..1ae469dfcf 100644
--- a/indra/newview/llappviewerlinux_api_dbus.cpp
+++ b/indra/newview/llappviewerlinux_api_dbus.cpp
@@ -27,11 +27,11 @@
#if LL_DBUS_ENABLED
#include "linden_common.h"
+#include "llaprpool.h"
extern "C" {
#include <dbus/dbus-glib.h>
-#include "apr_pools.h"
#include "apr_dso.h"
}
@@ -44,7 +44,7 @@ extern "C" {
#undef LL_DBUS_SYM
static bool sSymsGrabbed = false;
-static apr_pool_t *sSymDBUSDSOMemoryPool = NULL;
+static LLAPRPool sSymDBUSDSOMemoryPool;
static apr_dso_handle_t *sSymDBUSDSOHandleG = NULL;
bool grab_dbus_syms(std::string dbus_dso_name)
@@ -63,11 +63,11 @@ bool grab_dbus_syms(std::string dbus_dso_name)
#define LL_DBUS_SYM(REQUIRED, DBUSSYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##DBUSSYM, sSymDBUSDSOHandle, #DBUSSYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #DBUSSYM); if (REQUIRED) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #DBUSSYM, (void*)ll##DBUSSYM);}while(0)
//attempt to load the shared library
- apr_pool_create(&sSymDBUSDSOMemoryPool, NULL);
+ sSymDBUSDSOMemoryPool.create();
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymDBUSDSOHandle,
dbus_dso_name.c_str(),
- sSymDBUSDSOMemoryPool) ))
+ sSymDBUSDSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", dbus_dso_name.c_str());
@@ -109,11 +109,7 @@ void ungrab_dbus_syms()
sSymDBUSDSOHandleG = NULL;
}
- if ( sSymDBUSDSOMemoryPool )
- {
- apr_pool_destroy(sSymDBUSDSOMemoryPool);
- sSymDBUSDSOMemoryPool = NULL;
- }
+ sSymDBUSDSOMemoryPool.destroy();
// NULL-out all of the symbols we'd grabbed
#define LL_DBUS_SYM(REQUIRED, DBUSSYM, RTN, ...) do{ll##DBUSSYM = NULL;}while(0)
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index c2916717bd..8929c0c1a4 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -113,6 +113,7 @@ int main( int argc, char **argv )
}
delete viewer_app_ptr;
viewer_app_ptr = NULL;
+
return 0;
}
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index 445bd208ef..f94c843ad9 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -518,11 +518,7 @@ void LLAppViewerWin32::handleCrashReporting(bool reportFreeze)
}
else
{
- S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
- if(cb != CRASH_BEHAVIOR_NEVER_SEND)
- {
- _spawnl(_P_NOWAIT, exe_path.c_str(), arg_str, NULL);
- }
+ _spawnl(_P_NOWAIT, exe_path.c_str(), arg_str, NULL);
}
}
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index d7ba4ea470..966f5b941e 100644..100755
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -127,6 +127,15 @@ void on_new_single_inventory_upload_complete(
group_perms,
next_owner_perms);
+ U32 inventory_item_flags = 0;
+ if (server_response.has("inventory_flags"))
+ {
+ inventory_item_flags = (U32) server_response["inventory_flags"].asInteger();
+ if (inventory_item_flags != 0)
+ {
+ llinfos << "inventory_item_flags " << inventory_item_flags << llendl;
+ }
+ }
S32 creation_date_now = time_corrected();
LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem(
server_response["new_inventory_item"].asUUID(),
@@ -138,7 +147,7 @@ void on_new_single_inventory_upload_complete(
item_name,
item_description,
LLSaleInfo::DEFAULT,
- LLInventoryItemFlags::II_FLAGS_NONE,
+ inventory_item_flags,
creation_date_now);
gInventory.updateItem(item);
@@ -449,7 +458,7 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
std::string result = content["state"];
LLUUID new_id = content["new_asset"];
- llinfos << "result: " << result << "new_id:" << new_id << llendl;
+ llinfos << "result: " << result << " new_id: " << new_id << llendl;
if (result == "complete"
&& mBakedUploadData != NULL)
{ // Invoke
diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h
index 70871b62e2..381b919c4a 100644
--- a/indra/newview/llassetuploadresponders.h
+++ b/indra/newview/llassetuploadresponders.h
@@ -112,6 +112,7 @@ private:
struct LLBakedUploadData;
class LLSendTexLayerResponder : public LLAssetUploadResponder
{
+ LOG_CLASS(LLSendTexLayerResponder);
public:
LLSendTexLayerResponder(const LLSD& post_data,
const LLUUID& vfile_id,
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index cbbdcb2983..4cdfcea64e 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -49,6 +49,7 @@
#include "llfloaterpay.h"
#include "llfloaterwebcontent.h"
#include "llfloaterworldmap.h"
+#include "llfolderview.h"
#include "llgiveinventory.h"
#include "llinventorybridge.h"
#include "llinventorymodel.h" // for gInventory.findCategoryUUIDForType
@@ -69,6 +70,7 @@
#include "lltrans.h"
#include "llcallingcard.h"
#include "llslurl.h" // IDEVO
+#include "llsidepanelinventory.h"
// static
void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name)
@@ -312,7 +314,14 @@ static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarNa
std::string url = getProfileURL(username);
// PROFILES: open in webkit window
- LLWeb::loadWebURLInternal(url, "", agent_id.asString());
+ const bool show_chrome = false;
+ static LLCachedControl<LLRect> profile_rect(gSavedSettings, "WebProfileRect");
+ LLFloaterWebContent::create(LLFloaterWebContent::Params().
+ url(url).
+ id(agent_id.asString()).
+ show_chrome(show_chrome).
+ window_class("profile").
+ preferred_media_size(profile_rect));
}
// static
@@ -327,7 +336,9 @@ void LLAvatarActions::showProfile(const LLUUID& id)
//static
bool LLAvatarActions::profileVisible(const LLUUID& id)
{
- LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", id.asString()));
+ LLSD sd;
+ sd["id"] = id;
+ LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", sd));
return browser && browser->isShown();
}
@@ -335,7 +346,9 @@ bool LLAvatarActions::profileVisible(const LLUUID& id)
//static
void LLAvatarActions::hideProfile(const LLUUID& id)
{
- LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", id.asString()));
+ LLSD sd;
+ sd["id"] = id;
+ LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", sd));
if (browser)
{
browser->closeFloater();
@@ -444,8 +457,6 @@ void LLAvatarActions::share(const LLUUID& id)
namespace action_give_inventory
{
- typedef std::set<LLUUID> uuid_set_t;
-
/**
* Returns a pointer to 'Add More' inventory panel of Edit Outfit SP.
*/
@@ -475,18 +486,16 @@ namespace action_give_inventory
/**
* Checks My Inventory visibility.
*/
+
static bool is_give_inventory_acceptable()
{
- LLInventoryPanel* active_panel = get_active_inventory_panel();
- if (!active_panel) return false;
-
// check selection in the panel
- const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
if (inventory_selected_uuids.empty()) return false; // nothing selected
bool acceptable = false;
- uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
- const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+ std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+ const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
for (; it != it_end; ++it)
{
LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
@@ -529,12 +538,12 @@ namespace action_give_inventory
}
}
- static void build_items_string(const uuid_set_t& inventory_selected_uuids , std::string& items_string)
+ static void build_items_string(const std::set<LLUUID>& inventory_selected_uuids , std::string& items_string)
{
llassert(inventory_selected_uuids.size() > 0);
const std::string& separator = LLTrans::getString("words_separator");
- for (uuid_set_t::const_iterator it = inventory_selected_uuids.begin(); ; )
+ for (std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin(); ; )
{
LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
if (NULL != inv_cat)
@@ -570,10 +579,7 @@ namespace action_give_inventory
return;
}
- LLInventoryPanel* active_panel = get_active_inventory_panel();
- if (!active_panel) return;
-
- const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
if (inventory_selected_uuids.empty())
{
return;
@@ -590,8 +596,8 @@ namespace action_give_inventory
// We souldn't open IM session, just calculate session ID for logging purpose. See EXT-6710
const LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, avatar_uuid);
- uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
- const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+ std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+ const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
const std::string& separator = LLTrans::getString("words_separator");
std::string noncopy_item_names;
@@ -654,10 +660,7 @@ namespace action_give_inventory
{
llassert(avatar_names.size() == avatar_uuids.size());
- LLInventoryPanel* active_panel = get_active_inventory_panel();
- if (!active_panel) return;
-
- const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
if (inventory_selected_uuids.empty())
{
return;
@@ -678,6 +681,29 @@ namespace action_give_inventory
}
}
+
+
+//static
+std::set<LLUUID> LLAvatarActions::getInventorySelectedUUIDs()
+{
+ std::set<LLUUID> inventory_selected_uuids;
+
+ LLInventoryPanel* active_panel = action_give_inventory::get_active_inventory_panel();
+ if (active_panel)
+ {
+ inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ }
+
+ if (inventory_selected_uuids.empty())
+ {
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ inventory_selected_uuids = sidepanel_inventory->getInboxOrOutboxSelectionList();
+ }
+
+ return inventory_selected_uuids;
+}
+
//static
void LLAvatarActions::shareWithAvatars()
{
@@ -705,12 +731,12 @@ bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NUL
// check selection in the panel
LLFolderView* root_folder = inv_panel->getRootFolder();
- const uuid_set_t inventory_selected_uuids = root_folder->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = root_folder->getSelectionList();
if (inventory_selected_uuids.empty()) return false; // nothing selected
bool can_share = true;
- uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
- const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+ std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+ const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
for (; it != it_end; ++it)
{
LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
@@ -773,6 +799,10 @@ bool LLAvatarActions::canOfferTeleport(const LLUUID& id)
// static
bool LLAvatarActions::canOfferTeleport(const uuid_vec_t& ids)
{
+ // We can't send more than 250 lures in a single message, so disable this
+ // button when there are too many id's selected.
+ if(ids.size() > 250) return false;
+
bool result = true;
for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
{
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 956fed7461..fbfd815f41 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -36,6 +36,7 @@
class LLInventoryPanel;
+
/**
* Friend-related actions (add, remove, offer teleport, etc)
*/
@@ -196,6 +197,8 @@ public:
*/
static bool canShareSelectedItems(LLInventoryPanel* inv_panel = NULL);
+ static std::set<LLUUID> getInventorySelectedUUIDs();
+
private:
static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
static bool handleRemove(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 01d19c5ba0..79e6c7b66b 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -386,6 +386,7 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b
{
bool voice_status = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
getChild<LLButton>("speak_flyout_btn")->setEnabled(voice_status);
+ gMenuBarView->getChild<LLView>("Nearby Voice")->setEnabled(voice_status);
if (voice_status)
{
LLFirstUse::speak(true);
@@ -570,7 +571,7 @@ BOOL LLBottomTray::postBuild()
// it takes some time between logging in to world and connecting to voice channel.
getChild<LLButton>("speak_btn")->setEnabled(false);
getChild<LLButton>("speak_flyout_btn")->setEnabled(false);
-
+ gMenuBarView->getChild<LLView>("Nearby Voice")->setEnabled(false);
// Registering Chat Bar to receive Voice client status change notifications.
LLVoiceClient::getInstance()->addObserver(this);
diff --git a/indra/newview/llcloud.cpp b/indra/newview/llcloud.cpp
deleted file mode 100644
index cda0f6e4a2..0000000000
--- a/indra/newview/llcloud.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/**
- * @file llcloud.cpp
- * @brief Implementation of viewer LLCloudLayer class
- *
- * $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 "llmath.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v4math.h"
-#include "llquaternion.h"
-#include "llrand.h"
-#include "v4color.h"
-
-#include "llwind.h"
-#include "llcloud.h"
-#include "llgl.h"
-#include "llviewerobjectlist.h"
-#include "llvoclouds.h"
-#include "llvosky.h"
-#include "llsky.h"
-#include "llviewerregion.h"
-#include "patch_dct.h"
-#include "patch_code.h"
-#include "llglheaders.h"
-#include "pipeline.h"
-#include "lldrawpool.h"
-#include "llworld.h"
-
-extern LLPipeline gPipeline;
-
-const F32 CLOUD_UPDATE_RATE = 1.0f; // Global time dilation for clouds
-const F32 CLOUD_GROW_RATE = 0.05f;
-const F32 CLOUD_DECAY_RATE = -0.05f;
-const F32 CLOUD_VELOCITY_SCALE = 0.01f;
-const F32 CLOUD_DENSITY = 25.f;
-const S32 CLOUD_COUNT_MAX = 20;
-const F32 CLOUD_HEIGHT_RANGE = 48.f;
-const F32 CLOUD_HEIGHT_MEAN = 192.f;
-
-enum
-{
- LL_PUFF_GROWING = 0,
- LL_PUFF_DYING = 1
-};
-
-// Used for patch decoder
-S32 gBuffer[16*16];
-
-
-//static
-S32 LLCloudPuff::sPuffCount = 0;
-
-LLCloudPuff::LLCloudPuff() :
- mAlpha(0.01f),
- mRate(CLOUD_GROW_RATE*CLOUD_UPDATE_RATE),
- mLifeState(LL_PUFF_GROWING)
-{
-}
-
-LLCloudGroup::LLCloudGroup() :
- mCloudLayerp(NULL),
- mDensity(0.f),
- mTargetPuffCount(0),
- mVOCloudsp(NULL)
-{
-}
-
-void LLCloudGroup::cleanup()
-{
- if (mVOCloudsp)
- {
- if (!mVOCloudsp->isDead())
- {
- gObjectList.killObject(mVOCloudsp);
- }
- mVOCloudsp = NULL;
- }
-}
-
-void LLCloudGroup::setCenterRegion(const LLVector3 &center)
-{
- mCenterRegion = center;
-}
-
-void LLCloudGroup::updatePuffs(const F32 dt)
-{
- mDensity = mCloudLayerp->getDensityRegion(mCenterRegion);
-
- if (!mVOCloudsp)
- {
- mVOCloudsp = (LLVOClouds *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_CLOUDS, mCloudLayerp->getRegion());
- mVOCloudsp->setCloudGroup(this);
- mVOCloudsp->setPositionRegion(mCenterRegion);
- mVOCloudsp->setScale(LLVector3(256.f/CLOUD_GROUPS_PER_EDGE + CLOUD_PUFF_WIDTH,
- 256.f/CLOUD_GROUPS_PER_EDGE + CLOUD_PUFF_WIDTH,
- CLOUD_HEIGHT_RANGE + CLOUD_PUFF_HEIGHT)*0.5f);
- gPipeline.createObject(mVOCloudsp);
- }
-
- LLVector3 velocity;
- LLVector3d vel_d;
- // Update the positions of all of the clouds
- for (U32 i = 0; i < mCloudPuffs.size(); i++)
- {
- LLCloudPuff &puff = mCloudPuffs[i];
- velocity = mCloudLayerp->getRegion()->mWind.getCloudVelocity(mCloudLayerp->getRegion()->getPosRegionFromGlobal(puff.mPositionGlobal));
- velocity *= CLOUD_VELOCITY_SCALE*CLOUD_UPDATE_RATE;
- vel_d.setVec(velocity);
- mCloudPuffs[i].mPositionGlobal += vel_d;
- mCloudPuffs[i].mAlpha += mCloudPuffs[i].mRate * dt;
- mCloudPuffs[i].mAlpha = llmin(1.f, mCloudPuffs[i].mAlpha);
- mCloudPuffs[i].mAlpha = llmax(0.f, mCloudPuffs[i].mAlpha);
- }
-}
-
-void LLCloudGroup::updatePuffOwnership()
-{
- U32 i = 0;
- while (i < mCloudPuffs.size())
- {
- if (mCloudPuffs[i].getLifeState() == LL_PUFF_DYING)
- {
- i++;
- continue;
- }
- if (inGroup(mCloudPuffs[i]))
- {
- i++;
- continue;
- }
-
- //llinfos << "Cloud moving to new group" << llendl;
- LLCloudGroup *new_cgp = LLWorld::getInstance()->findCloudGroup(mCloudPuffs[i]);
- if (!new_cgp)
- {
- //llinfos << "Killing puff not in group" << llendl;
- mCloudPuffs[i].setLifeState(LL_PUFF_DYING);
- mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE;
- i++;
- continue;
- }
- //llinfos << "Puff handed off!" << llendl;
- LLCloudPuff puff;
- puff.mPositionGlobal = mCloudPuffs[i].mPositionGlobal;
- puff.mAlpha = mCloudPuffs[i].mAlpha;
- mCloudPuffs.erase(mCloudPuffs.begin() + i);
- new_cgp->mCloudPuffs.push_back(puff);
- }
-
- //llinfos << "Puff count: " << LLCloudPuff::sPuffCount << llendl;
-}
-
-void LLCloudGroup::updatePuffCount()
-{
- if (!mVOCloudsp)
- {
- return;
- }
- S32 i;
- S32 target_puff_count = llround(CLOUD_DENSITY * mDensity);
- target_puff_count = llmax(0, target_puff_count);
- target_puff_count = llmin(CLOUD_COUNT_MAX, target_puff_count);
- S32 current_puff_count = (S32) mCloudPuffs.size();
- // Create a new cloud if we need one
- if (current_puff_count < target_puff_count)
- {
- LLVector3d puff_pos_global;
- mCloudPuffs.resize(target_puff_count);
- for (i = current_puff_count; i < target_puff_count; i++)
- {
- puff_pos_global = mVOCloudsp->getPositionGlobal();
- F32 x = ll_frand(256.f/CLOUD_GROUPS_PER_EDGE) - 128.f/CLOUD_GROUPS_PER_EDGE;
- F32 y = ll_frand(256.f/CLOUD_GROUPS_PER_EDGE) - 128.f/CLOUD_GROUPS_PER_EDGE;
- F32 z = ll_frand(CLOUD_HEIGHT_RANGE) - 0.5f*CLOUD_HEIGHT_RANGE;
- puff_pos_global += LLVector3d(x, y, z);
- mCloudPuffs[i].mPositionGlobal = puff_pos_global;
- mCloudPuffs[i].mAlpha = 0.01f;
- LLCloudPuff::sPuffCount++;
- }
- }
-
- // Count the number of live puffs
- S32 live_puff_count = 0;
- for (i = 0; i < (S32) mCloudPuffs.size(); i++)
- {
- if (mCloudPuffs[i].getLifeState() != LL_PUFF_DYING)
- {
- live_puff_count++;
- }
- }
-
-
- // Start killing enough puffs so the live puff count == target puff count
- S32 new_dying_count = llmax(0, live_puff_count - target_puff_count);
- i = 0;
- while (new_dying_count > 0)
- {
- if (mCloudPuffs[i].getLifeState() != LL_PUFF_DYING)
- {
- //llinfos << "Killing extra live cloud" << llendl;
- mCloudPuffs[i].setLifeState(LL_PUFF_DYING);
- mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE;
- new_dying_count--;
- }
- i++;
- }
-
- // Remove fully dead puffs
- i = 0;
- while (i < (S32) mCloudPuffs.size())
- {
- if (mCloudPuffs[i].isDead())
- {
- //llinfos << "Removing dead puff!" << llendl;
- mCloudPuffs.erase(mCloudPuffs.begin() + i);
- LLCloudPuff::sPuffCount--;
- }
- else
- {
- i++;
- }
- }
-}
-
-BOOL LLCloudGroup::inGroup(const LLCloudPuff &puff) const
-{
- // Do min/max check on center of the cloud puff
- F32 min_x, min_y, max_x, max_y;
- F32 delta = 128.f/CLOUD_GROUPS_PER_EDGE;
- min_x = mCenterRegion.mV[VX] - delta;
- min_y = mCenterRegion.mV[VY] - delta;
- max_x = mCenterRegion.mV[VX] + delta;
- max_y = mCenterRegion.mV[VY] + delta;
-
- LLVector3 pos_region = mCloudLayerp->getRegion()->getPosRegionFromGlobal(puff.getPositionGlobal());
-
- if ((pos_region.mV[VX] < min_x)
- || (pos_region.mV[VY] < min_y)
- || (pos_region.mV[VX] > max_x)
- || (pos_region.mV[VY] > max_y))
- {
- return FALSE;
- }
- return TRUE;
-}
-
-LLCloudLayer::LLCloudLayer()
-: mOriginGlobal(0.0f, 0.0f, 0.0f),
- mMetersPerEdge(1.0f),
- mMetersPerGrid(1.0f),
- mWindp(NULL),
- mDensityp(NULL)
-{
- S32 i, j;
- for (i = 0; i < 4; i++)
- {
- mNeighbors[i] = NULL;
- }
-
- F32 x, y;
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- y = (0.5f + i)*(256.f/CLOUD_GROUPS_PER_EDGE);
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- x = (0.5f + j)*(256.f/CLOUD_GROUPS_PER_EDGE);
-
- mCloudGroups[i][j].setCloudLayerp(this);
- mCloudGroups[i][j].setCenterRegion(LLVector3(x, y, CLOUD_HEIGHT_MEAN));
- }
- }
-}
-
-
-
-LLCloudLayer::~LLCloudLayer()
-{
- destroy();
-}
-
-
-void LLCloudLayer::create(LLViewerRegion *regionp)
-{
- llassert(regionp);
-
- mRegionp = regionp;
- mDensityp = new F32 [CLOUD_GRIDS_PER_EDGE * CLOUD_GRIDS_PER_EDGE];
-
- U32 i;
- for (i = 0; i < CLOUD_GRIDS_PER_EDGE*CLOUD_GRIDS_PER_EDGE; i++)
- {
- mDensityp[i] = 0.f;
- }
-}
-
-void LLCloudLayer::setRegion(LLViewerRegion *regionp)
-{
- mRegionp = regionp;
-}
-
-void LLCloudLayer::destroy()
-{
- reset();
-
- delete [] mDensityp;
- mDensityp = NULL;
- mWindp = NULL;
-}
-
-
-void LLCloudLayer::reset()
-{
- // Kill all of the existing puffs
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].cleanup();
- }
- }
-}
-
-void LLCloudLayer::setWindPointer(LLWind *windp)
-{
- if (mWindp)
- {
- mWindp->setCloudDensityPointer(NULL);
- }
- mWindp = windp;
- if (mWindp)
- {
- mWindp->setCloudDensityPointer(mDensityp);
- }
-}
-
-
-void LLCloudLayer::setWidth(F32 width)
-{
- mMetersPerEdge = width;
- mMetersPerGrid = width / CLOUD_GRIDS_PER_EDGE;
-}
-
-
-F32 LLCloudLayer::getDensityRegion(const LLVector3 &pos_region)
-{
- // "position" is region-local
- S32 i, j, ii, jj;
-
- i = lltrunc(pos_region.mV[VX] / mMetersPerGrid);
- j = lltrunc(pos_region.mV[VY] / mMetersPerGrid);
- ii = i + 1;
- jj = j + 1;
-
-
- // clamp
- if (i >= (S32)CLOUD_GRIDS_PER_EDGE)
- {
- i = CLOUD_GRIDS_PER_EDGE - 1;
- ii = i;
- }
- else if (i < 0)
- {
- i = 0;
- ii = i;
- }
- else if (ii >= (S32)CLOUD_GRIDS_PER_EDGE || ii < 0)
- {
- ii = i;
- }
-
- if (j >= (S32)CLOUD_GRIDS_PER_EDGE)
- {
- j = CLOUD_GRIDS_PER_EDGE - 1;
- jj = j;
- }
- else if (j < 0)
- {
- j = 0;
- jj = j;
- }
- else if (jj >= (S32)CLOUD_GRIDS_PER_EDGE || jj < 0)
- {
- jj = j;
- }
-
- F32 dx = (pos_region.mV[VX] - (F32) i * mMetersPerGrid) / mMetersPerGrid;
- F32 dy = (pos_region.mV[VY] - (F32) j * mMetersPerGrid) / mMetersPerGrid;
- F32 omdx = 1.0f - dx;
- F32 omdy = 1.0f - dy;
-
- F32 density = dx * dy * *(mDensityp + ii + jj * CLOUD_GRIDS_PER_EDGE) +
- dx * omdy * *(mDensityp + i + jj * CLOUD_GRIDS_PER_EDGE) +
- omdx * dy * *(mDensityp + ii + j * CLOUD_GRIDS_PER_EDGE) +
- omdx * omdy * *(mDensityp + i + j * CLOUD_GRIDS_PER_EDGE);
-
- return density;
-}
-
-void LLCloudLayer::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp)
-{
- LLPatchHeader patch_header;
-
- init_patch_decompressor(group_headerp->patch_size);
-
- // Don't use the packed group_header stride because the strides used on
- // simulator and viewer are not equal.
- group_headerp->stride = group_headerp->patch_size; // offset required to step up one row
- set_group_of_patch_header(group_headerp);
-
- decode_patch_header(bitpack, &patch_header);
- decode_patch(bitpack, gBuffer);
- decompress_patch(mDensityp, gBuffer, &patch_header);
-}
-
-void LLCloudLayer::updatePuffs(const F32 dt)
-{
- // We want to iterate through all of the cloud groups
- // and update their density targets
-
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].updatePuffs(dt);
- }
- }
-}
-
-void LLCloudLayer::updatePuffOwnership()
-{
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].updatePuffOwnership();
- }
- }
-}
-
-void LLCloudLayer::updatePuffCount()
-{
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].updatePuffCount();
- }
- }
-}
-
-LLCloudGroup *LLCloudLayer::findCloudGroup(const LLCloudPuff &puff)
-{
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- if (mCloudGroups[i][j].inGroup(puff))
- {
- return &(mCloudGroups[i][j]);
- }
- }
- }
- return NULL;
-}
-
-
-
-void LLCloudLayer::connectNeighbor(LLCloudLayer *cloudp, U32 direction)
-{
- if (direction >= 4)
- {
- // Only care about cardinal 4 directions.
- return;
- }
-
- mNeighbors[direction] = cloudp;
- if (cloudp)
- mNeighbors[direction]->mNeighbors[gDirOpposite[direction]] = this;
-}
-
-
-void LLCloudLayer::disconnectNeighbor(U32 direction)
-{
- if (direction >= 4)
- {
- // Only care about cardinal 4 directions.
- return;
- }
-
- if (mNeighbors[direction])
- {
- mNeighbors[direction]->mNeighbors[gDirOpposite[direction]] = NULL;
- mNeighbors[direction] = NULL;
- }
-}
-
-
-void LLCloudLayer::disconnectAllNeighbors()
-{
- S32 i;
- for (i = 0; i < 4; i++)
- {
- disconnectNeighbor(i);
- }
-}
diff --git a/indra/newview/llcloud.h b/indra/newview/llcloud.h
deleted file mode 100644
index 0435ba1ece..0000000000
--- a/indra/newview/llcloud.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- * @file llcloud.h
- * @brief Description of viewer LLCloudLayer class
- *
- * $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$
- */
-
-#ifndef LL_LLCLOUD_H
-#define LL_LLCLOUD_H
-
-// Some ideas on how clouds should work
-//
-// Each region has a cloud layer
-// Each cloud layer has pre-allocated space for N clouds
-// The LLSky class knows the max number of clouds to render M.
-// All clouds use the same texture, but the tex-coords can take on 8 configurations
-// (four rotations, front and back)
-//
-// The sky's part
-// --------------
-// The sky knows that A clouds have been assigned to regions and there are B left over.
-// Divide B by number of active regions to get C.
-// Ask each region to add C more clouds and return total number D.
-// Add up all the D's to get a new A.
-//
-// The cloud layer's part
-// ----------------------
-// The cloud layer is a grid of possibility. Each grid's value represents the probablility
-// (0.0 to 1.0) that a cloud placement query will succeed.
-//
-// The sky asks the region to add C more clouds.
-// The cloud layer tries a total of E times to place clouds and returns total cloud count.
-//
-// Clouds move according to local wind velocity.
-// If a cloud moves out of region then it's location is sent to neighbor region
-// or it is allowed to drift and decay.
-//
-// The clouds in non-visible regions do not propagate every frame.
-// Each frame one non-visible region is allowed to propagate it's clouds
-// (might have to check to see if incoming cloud was already visible or not).
-//
-//
-
-#include "llmath.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v3dmath.h"
-#include "v4math.h"
-#include "v4color.h"
-#include "llpointer.h"
-#include "lldarray.h"
-
-#include "llframetimer.h"
-
-const U32 CLOUD_GRIDS_PER_EDGE = 16;
-
-const F32 CLOUD_PUFF_WIDTH = 64.f;
-const F32 CLOUD_PUFF_HEIGHT = 48.f;
-
-class LLWind;
-class LLVOClouds;
-class LLViewerRegion;
-class LLCloudLayer;
-class LLBitPack;
-class LLGroupHeader;
-
-const S32 CLOUD_GROUPS_PER_EDGE = 4;
-
-class LLCloudPuff
-{
-public:
- LLCloudPuff();
-
- const LLVector3d &getPositionGlobal() const { return mPositionGlobal; }
- friend class LLCloudGroup;
-
- void updatePuffs(const F32 dt);
- void updatePuffOwnership();
-
- F32 getAlpha() const { return mAlpha; }
- U32 getLifeState() const { return mLifeState; }
- void setLifeState(const U32 state) { mLifeState = state; }
- BOOL isDead() const { return mAlpha <= 0.f; }
-
-
- static S32 sPuffCount;
-protected:
- F32 mAlpha;
- F32 mRate;
- LLVector3d mPositionGlobal;
-
- BOOL mLifeState;
-};
-
-class LLCloudGroup
-{
-public:
- LLCloudGroup();
-
- void cleanup();
-
- void setCloudLayerp(LLCloudLayer *clp) { mCloudLayerp = clp; }
- void setCenterRegion(const LLVector3 &center);
-
- void updatePuffs(const F32 dt);
- void updatePuffOwnership();
- void updatePuffCount();
-
- BOOL inGroup(const LLCloudPuff &puff) const;
-
- F32 getDensity() const { return mDensity; }
- S32 getNumPuffs() const { return (S32) mCloudPuffs.size(); }
- const LLCloudPuff &getPuff(const S32 i) { return mCloudPuffs[i]; }
-protected:
- LLCloudLayer *mCloudLayerp;
- LLVector3 mCenterRegion;
- F32 mDensity;
- S32 mTargetPuffCount;
-
- std::vector<LLCloudPuff> mCloudPuffs;
- LLPointer<LLVOClouds> mVOCloudsp;
-};
-
-
-class LLCloudLayer
-{
-public:
- LLCloudLayer();
- ~LLCloudLayer();
-
- void create(LLViewerRegion *regionp);
- void destroy();
-
- void reset(); // Clears all active cloud puffs
-
-
- void updatePuffs(const F32 dt);
- void updatePuffOwnership();
- void updatePuffCount();
-
- LLCloudGroup *findCloudGroup(const LLCloudPuff &puff);
-
- void setRegion(LLViewerRegion *regionp);
- LLViewerRegion* getRegion() const { return mRegionp; }
- void setWindPointer(LLWind *windp);
- void setOriginGlobal(const LLVector3d &origin_global) { mOriginGlobal = origin_global; }
- void setWidth(F32 width);
-
- void setBrightness(F32 brightness);
- void setSunColor(const LLColor4 &color);
-
- F32 getDensityRegion(const LLVector3 &pos_region); // "position" is in local coordinates
-
- void decompress(LLBitPack &bitpack, LLGroupHeader *group_header);
-
- LLCloudLayer* getNeighbor(const S32 n) const { return mNeighbors[n]; }
-
- void connectNeighbor(LLCloudLayer *cloudp, U32 direction);
- void disconnectNeighbor(U32 direction);
- void disconnectAllNeighbors();
-
-public:
- LLVector3d mOriginGlobal;
- F32 mMetersPerEdge;
- F32 mMetersPerGrid;
-
-
- F32 mMaxAlpha; // The max cloud puff _render_ alpha
-
-protected:
- LLCloudLayer *mNeighbors[4];
- LLWind *mWindp;
- LLViewerRegion *mRegionp;
- F32 *mDensityp; // the probability density grid
-
- LLCloudGroup mCloudGroups[CLOUD_GROUPS_PER_EDGE][CLOUD_GROUPS_PER_EDGE];
-};
-
-
-#endif
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 18ae6107e7..c7fc45f61e 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -27,10 +27,16 @@
#include "lldateutil.h"
+#include <boost/date_time/gregorian/gregorian.hpp>
+#include <boost/date_time/posix_time/ptime.hpp>
+
// Linden libraries
#include "lltrans.h"
#include "llui.h"
+using namespace boost::gregorian;
+using namespace boost::posix_time;
+
static S32 DAYS_PER_MONTH_NOLEAP[] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static S32 DAYS_PER_MONTH_LEAP[] =
@@ -186,3 +192,24 @@ std::string LLDateUtil::ageFromDate(const std::string& date_string)
//{
// return ageFromDateISO(date_string, LLDate::now());
//}
+
+S32 LLDateUtil::secondsSinceEpochFromString(const std::string& format, const std::string& str)
+{
+ date_input_facet *facet = new date_input_facet(format);
+
+ std::stringstream ss;
+ ss << str;
+ ss.imbue(std::locale(ss.getloc(), facet));
+
+ date d;
+ ss >> d;
+
+ ptime time_t_date(d);
+ ptime time_t_epoch(date(1970,1,1));
+
+ // We assume that the date defined by str is in UTC, so the difference
+ // is calculated with no time zone corrections.
+ time_duration diff = time_t_date - time_t_epoch;
+
+ return diff.total_seconds();
+}
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
index 2843a357c9..f027d360f7 100644
--- a/indra/newview/lldateutil.h
+++ b/indra/newview/lldateutil.h
@@ -69,6 +69,20 @@ namespace LLDateUtil
//std::string ageFromDateISO(const std::string& date_string);
//std::string ageFromDate(S32 born_year, S32 born_month, S32 born_day, const LLDate& now);
+
+ /**
+ * Convert a string of a specified date format into seconds since the Epoch.
+ *
+ * Many of the format flags are those used by strftime(...), but not all.
+ * For the full list of supported time format specifiers
+ * see http://www.boost.org/doc/libs/1_47_0/doc/html/date_time/date_time_io.html#date_time.format_flags
+ *
+ * @param format Format characters string. Example: "%A %b %d, %Y"
+ * @param str Date string containing the time in specified format.
+ *
+ * @return Number of seconds since 01/01/1970 UTC.
+ */
+ S32 secondsSinceEpochFromString(const std::string& format, const std::string& str);
}
#endif
diff --git a/indra/newview/lldaycyclemanager.cpp b/indra/newview/lldaycyclemanager.cpp
new file mode 100644
index 0000000000..347a467a8b
--- /dev/null
+++ b/indra/newview/lldaycyclemanager.cpp
@@ -0,0 +1,230 @@
+/**
+ * @file lldaycyclemanager.cpp
+ * @brief Implementation for the LLDayCycleManager class.
+ *
+ * $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 "lldaycyclemanager.h"
+
+#include "lldiriterator.h"
+
+void LLDayCycleManager::getPresetNames(preset_name_list_t& names) const
+{
+ names.clear();
+
+ for (dc_map_t::const_iterator it = mDayCycleMap.begin(); it != mDayCycleMap.end(); ++it)
+ {
+ names.push_back(it->first);
+ }
+}
+
+void LLDayCycleManager::getPresetNames(preset_name_list_t& user, preset_name_list_t& sys) const
+{
+ user.clear();
+ sys.clear();
+
+ for (dc_map_t::const_iterator it = mDayCycleMap.begin(); it != mDayCycleMap.end(); ++it)
+ {
+ const std::string& name = it->first;
+
+ if (isSystemPreset(name))
+ {
+ sys.push_back(name);
+ }
+ else
+ {
+ user.push_back(name);
+ }
+ }
+}
+
+void LLDayCycleManager::getUserPresetNames(preset_name_list_t& user) const
+{
+ preset_name_list_t sys; // unused
+ getPresetNames(user, sys);
+}
+
+bool LLDayCycleManager::getPreset(const std::string name, LLWLDayCycle& day_cycle) const
+{
+ dc_map_t::const_iterator it = mDayCycleMap.find(name);
+ if (it == mDayCycleMap.end())
+ {
+ return false;
+ }
+
+ day_cycle = it->second;
+ return true;
+}
+
+bool LLDayCycleManager::getPreset(const std::string name, LLSD& day_cycle) const
+{
+ LLWLDayCycle dc;
+ if (!getPreset(name, dc))
+ {
+ return false;
+ }
+
+ day_cycle = dc.asLLSD();
+ return true;
+}
+
+bool LLDayCycleManager::presetExists(const std::string name) const
+{
+ LLWLDayCycle dummy;
+ return getPreset(name, dummy);
+}
+
+bool LLDayCycleManager::isSystemPreset(const std::string& name) const
+{
+ return gDirUtilp->fileExists(getSysDir() + LLURI::escape(name) + ".xml");
+}
+
+bool LLDayCycleManager::savePreset(const std::string& name, const LLSD& data)
+{
+ // Save given preset.
+ LLWLDayCycle day;
+ day.loadDayCycle(data, LLEnvKey::SCOPE_LOCAL);
+ day.save(getUserDir() + LLURI::escape(name) + ".xml");
+
+ // Add it to our map.
+ addPreset(name, data);
+ mModifySignal();
+ return true;
+}
+
+bool LLDayCycleManager::deletePreset(const std::string& name)
+{
+ // Remove it from the map.
+ dc_map_t::iterator it = mDayCycleMap.find(name);
+ if (it == mDayCycleMap.end())
+ {
+ LL_WARNS("Windlight") << "No day cycle named " << name << LL_ENDL;
+ return false;
+ }
+ mDayCycleMap.erase(it);
+
+ // Remove from the filesystem.
+ std::string filename = LLURI::escape(name) + ".xml";
+ if (gDirUtilp->fileExists(getUserDir() + filename))
+ {
+ gDirUtilp->deleteFilesInDir(getUserDir(), filename);
+ }
+
+ // Signal interested parties.
+ mModifySignal();
+ return true;
+}
+
+bool LLDayCycleManager::isSkyPresetReferenced(const std::string& preset_name) const
+{
+ // We're traversing local day cycles, they can only reference local skies.
+ LLWLParamKey key(preset_name, LLEnvKey::SCOPE_LOCAL);
+
+ for (dc_map_t::const_iterator it = mDayCycleMap.begin(); it != mDayCycleMap.end(); ++it)
+ {
+ if (it->second.hasReferencesTo(key))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+boost::signals2::connection LLDayCycleManager::setModifyCallback(const modify_signal_t::slot_type& cb)
+{
+ return mModifySignal.connect(cb);
+}
+
+// virtual
+void LLDayCycleManager::initSingleton()
+{
+ LL_DEBUGS("Windlight") << "Loading all day cycles" << LL_ENDL;
+ loadAllPresets();
+}
+
+void LLDayCycleManager::loadAllPresets()
+{
+ mDayCycleMap.clear();
+
+ // First, load system (coming out of the box) day cycles.
+ loadPresets(getSysDir());
+
+ // Then load user presets. Note that user day cycles will modify any system ones already loaded.
+ loadPresets(getUserDir());
+}
+
+void LLDayCycleManager::loadPresets(const std::string& dir)
+{
+ LLDirIterator dir_iter(dir, "*.xml");
+
+ while (1)
+ {
+ std::string file;
+ if (!dir_iter.next(file)) break; // no more files
+ loadPreset(dir + file);
+ }
+}
+
+bool LLDayCycleManager::loadPreset(const std::string& path)
+{
+ LLSD data = LLWLDayCycle::loadDayCycleFromPath(path);
+ if (data.isUndefined())
+ {
+ llwarns << "Error loading day cycle from " << path << llendl;
+ return false;
+ }
+
+ std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
+ addPreset(name, data);
+
+ return true;
+}
+
+bool LLDayCycleManager::addPreset(const std::string& name, const LLSD& data)
+{
+ if (name.empty())
+ {
+ llassert(name.empty());
+ return false;
+ }
+
+ LLWLDayCycle day;
+ day.loadDayCycle(data, LLEnvKey::SCOPE_LOCAL);
+ mDayCycleMap[name] = day;
+ return true;
+}
+
+// static
+std::string LLDayCycleManager::getSysDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", "");
+}
+
+// static
+std::string LLDayCycleManager::getUserDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "windlight/days", "");
+}
diff --git a/indra/newview/lldaycyclemanager.h b/indra/newview/lldaycyclemanager.h
new file mode 100644
index 0000000000..3d2144960d
--- /dev/null
+++ b/indra/newview/lldaycyclemanager.h
@@ -0,0 +1,84 @@
+/**
+ * @file lldaycyclemanager.h
+ * @brief Implementation for the LLDayCycleManager class.
+ *
+ * $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_LLDAYCYCLEMANAGER_H
+#define LL_LLDAYCYCLEMANAGER_H
+
+#include <map>
+#include <string>
+
+#include "llwldaycycle.h"
+#include "llwlparammanager.h"
+
+/**
+ * WindLight day cycles manager class
+ *
+ * Provides interface for accessing, loading and saving day cycles.
+ */
+class LLDayCycleManager : public LLSingleton<LLDayCycleManager>
+{
+ LOG_CLASS(LLDayCycleManager);
+
+public:
+ typedef std::list<std::string> preset_name_list_t;
+
+ typedef std::map<std::string, LLWLDayCycle> dc_map_t;
+ typedef boost::signals2::signal<void()> modify_signal_t;
+
+ void getPresetNames(preset_name_list_t& names) const;
+ void getPresetNames(preset_name_list_t& user, preset_name_list_t& sys) const;
+ void getUserPresetNames(preset_name_list_t& user) const;
+
+ bool getPreset(const std::string name, LLWLDayCycle& day_cycle) const;
+ bool getPreset(const std::string name, LLSD& day_cycle) const;
+ bool presetExists(const std::string name) const;
+ bool isSystemPreset(const std::string& name) const;
+ bool savePreset(const std::string& name, const LLSD& data);
+ bool deletePreset(const std::string& name);
+
+ /// @return true if there is a day cycle that refers to the sky preset.
+ bool isSkyPresetReferenced(const std::string& preset_name) const;
+
+ /// Emitted when a preset gets added or deleted.
+ boost::signals2::connection setModifyCallback(const modify_signal_t::slot_type& cb);
+
+private:
+ friend class LLSingleton<LLDayCycleManager>;
+ /*virtual*/ void initSingleton();
+
+ void loadAllPresets();
+ void loadPresets(const std::string& dir);
+ bool loadPreset(const std::string& path);
+ bool addPreset(const std::string& name, const LLSD& data);
+
+ static std::string getSysDir();
+ static std::string getUserDir();
+
+ dc_map_t mDayCycleMap;
+ modify_signal_t mModifySignal;
+};
+
+#endif // LL_LLDAYCYCLEMANAGER_H
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index b6d67899f8..216cc66ef8 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -62,7 +62,8 @@ void LLDebugView::init()
LLRect r;
LLRect rect = getLocalRect();
- r.set(10, rect.getHeight() - 100, rect.getWidth()/2, 100);
+ // Rectangle to draw debug data in (full height, 3/4 width)
+ r.set(10, rect.getHeight() - 100, ((rect.getWidth()*3)/4), 100);
LLConsole::Params cp;
cp.name("debug console");
cp.max_lines(20);
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index ad3710843c..debac9dcbf 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -387,7 +387,6 @@ void LLDrawable::makeActive()
pcode == LLViewerObject::LL_VO_SURFACE_PATCH ||
pcode == LLViewerObject::LL_VO_PART_GROUP ||
pcode == LLViewerObject::LL_VO_HUD_PART_GROUP ||
- pcode == LLViewerObject::LL_VO_CLOUDS ||
pcode == LLViewerObject::LL_VO_GROUND ||
pcode == LLViewerObject::LL_VO_SKY)
{
@@ -1519,10 +1518,6 @@ BOOL LLDrawable::isAnimating() const
{
return TRUE;
}
- if (mVObjp->getPCode() == LLViewerObject::LL_VO_CLOUDS)
- {
- return TRUE;
- }
if (!isRoot() && !mVObjp->getAngularVelocity().isExactlyZero())
{
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index f5483d969d..286284f828 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -35,7 +35,6 @@
#include "lldrawpoolalpha.h"
#include "lldrawpoolavatar.h"
#include "lldrawpoolbump.h"
-#include "lldrawpoolclouds.h"
#include "lldrawpoolground.h"
#include "lldrawpoolsimple.h"
#include "lldrawpoolsky.h"
@@ -191,15 +190,16 @@ void LLDrawPool::renderPostDeferred(S32 pass)
//virtual
void LLDrawPool::endRenderPass( S32 pass )
{
- for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++)
+ /*for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++)
{ //dummy cleanup of any currently bound textures
if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE)
{
gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType());
gGL.getTexUnit(i)->disable();
}
- }
+ }*/
+ //make sure channel 0 is active channel
gGL.getTexUnit(0)->activate();
}
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 8d46133912..9719140a37 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -88,16 +88,13 @@ void LLDrawPoolAlpha::endDeferredPass(S32 pass)
void LLDrawPoolAlpha::renderDeferred(S32 pass)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
- {
- LLFastTimer t(FTM_RENDER_GRASS);
- gDeferredTreeProgram.bind();
- LLGLEnable test(GL_ALPHA_TEST);
- //render alpha masked objects
- LLRenderPass::renderTexture(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask());
- gDeferredTreeProgram.unbind();
- }
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ LLFastTimer t(FTM_RENDER_GRASS);
+ gDeferredDiffuseAlphaMaskProgram.bind();
+ gDeferredDiffuseAlphaMaskProgram.setAlphaRange(0.33f, 1.f);
+
+ //render alpha masked objects
+ LLRenderPass::pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+ gDeferredDiffuseAlphaMaskProgram.unbind();
}
@@ -124,7 +121,7 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
if (pass == 0)
{
simple_shader = &gDeferredAlphaProgram;
- fullbright_shader = &gObjectFullbrightProgram;
+ fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
//prime simple shader (loads shadow relevant uniforms)
gPipeline.bindDeferredShader(*simple_shader);
@@ -138,6 +135,8 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
gPipeline.mDeferredDepth.bindTarget();
simple_shader = NULL;
fullbright_shader = NULL;
+ gObjectFullbrightAlphaMaskProgram.bind();
+ gObjectFullbrightAlphaMaskProgram.setAlphaRange(0.33f, 1.f);
}
deferred_render = TRUE;
@@ -156,6 +155,7 @@ void LLDrawPoolAlpha::endPostDeferredPass(S32 pass)
{
gPipeline.mDeferredDepth.flush();
gPipeline.mScreen.bindTarget();
+ gObjectFullbrightAlphaMaskProgram.unbind();
}
deferred_render = FALSE;
@@ -173,13 +173,13 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
if (LLPipeline::sUnderWaterRender)
{
- simple_shader = &gObjectSimpleWaterProgram;
- fullbright_shader = &gObjectFullbrightWaterProgram;
+ simple_shader = &gObjectSimpleWaterAlphaMaskProgram;
+ fullbright_shader = &gObjectFullbrightWaterAlphaMaskProgram;
}
else
{
- simple_shader = &gObjectSimpleProgram;
- fullbright_shader = &gObjectFullbrightProgram;
+ simple_shader = &gObjectSimpleAlphaMaskProgram;
+ fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
}
if (mVertexShaderLevel > 0)
@@ -225,29 +225,32 @@ void LLDrawPoolAlpha::render(S32 pass)
mAlphaDFactor = LLRender::BF_ZERO; // block (zero-out) glow where the alpha test succeeds
gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f);
if (mVertexShaderLevel > 0)
{
- if (!LLPipeline::sRenderDeferred)
+ if (!LLPipeline::sRenderDeferred || !deferred_render)
{
simple_shader->bind();
+ simple_shader->setAlphaRange(0.33f, 1.f);
+
pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
}
if (fullbright_shader)
{
fullbright_shader->bind();
+ fullbright_shader->setAlphaRange(0.33f, 1.f);
}
pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
- LLGLSLShader::bindNoShader();
+ //LLGLSLShader::bindNoShader();
}
else
{
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f); //OK
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask());
gPipeline.enableLightsDynamic();
pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask());
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
}
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
LLGLDepthTest depth(GL_TRUE, LLDrawPoolWater::sSkipScreenCopy ||
@@ -255,7 +258,6 @@ void LLDrawPoolAlpha::render(S32 pass)
if (deferred_render && pass == 1)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f);
gGL.blendFunc(LLRender::BF_SOURCE_ALPHA, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
}
else
@@ -266,13 +268,33 @@ void LLDrawPoolAlpha::render(S32 pass)
mAlphaDFactor = LLRender::BF_ONE_MINUS_SOURCE_ALPHA; // }
gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
- if (LLPipeline::sImpostorRender)
+ if (mVertexShaderLevel > 0)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
+ if (LLPipeline::sImpostorRender)
+ {
+ fullbright_shader->bind();
+ fullbright_shader->setAlphaRange(0.5f, 1.f);
+ simple_shader->bind();
+ simple_shader->setAlphaRange(0.5f, 1.f);
+ }
+ else
+ {
+ fullbright_shader->bind();
+ fullbright_shader->setAlphaRange(0.f, 1.f);
+ simple_shader->bind();
+ simple_shader->setAlphaRange(0.f, 1.f);
+ }
}
else
{
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ if (LLPipeline::sImpostorRender)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); //OK
+ }
+ else
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
+ }
}
}
@@ -289,22 +311,29 @@ void LLDrawPoolAlpha::render(S32 pass)
if (deferred_render && pass == 1)
{
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
if (sShowDebugAlpha)
{
- if(gPipeline.canUseWindLightShaders())
+ BOOL shaders = gPipeline.canUseVertexShaders();
+ if(shaders)
+ {
+ gObjectFullbrightNonIndexedProgram.bind();
+ }
+ else
{
- LLGLSLShader::bindNoShader();
+ gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
}
- gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
glColor4f(1,0,0,1);
LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f);
gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ;
renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_TEXCOORD0);
+ if(shaders)
+ {
+ gObjectFullbrightNonIndexedProgram.unbind();
+ }
}
}
@@ -359,7 +388,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow.
// All particle systems seem to come off the wire with texture entries which claim that they glow. This is probably a bug in the data. Suppress.
group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_PARTICLE &&
- group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_CLOUD &&
group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD_PARTICLE;
LLSpatialGroup::drawmap_elem_t& draw_info = group->mDrawMap[LLRenderPass::PASS_ALPHA];
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 9f790d03fe..28e464b60d 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -258,7 +258,6 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha()
sSkipOpaque = TRUE;
sShaderLevel = mVertexShaderLevel;
sVertexProgram = &gDeferredAvatarAlphaProgram;
-
sRenderingSkinned = TRUE;
gPipeline.bindDeferredShader(*sVertexProgram);
@@ -361,7 +360,7 @@ void LLDrawPoolAvatar::beginShadowPass(S32 pass)
{
gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
}
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
+ //gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
glColor4f(1,1,1,1);
@@ -590,12 +589,22 @@ void LLDrawPoolAvatar::beginImpostor()
LLVOAvatar::sNumVisibleAvatars = 0;
}
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gImpostorProgram.bind();
+ gImpostorProgram.setAlphaRange(0.01f, 1.f);
+ }
+
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
sDiffuseChannel = 0;
}
void LLDrawPoolAvatar::endImpostor()
{
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gImpostorProgram.unbind();
+ }
gPipeline.enableLightsDynamic();
}
@@ -605,16 +614,17 @@ void LLDrawPoolAvatar::beginRigid()
{
if (LLPipeline::sUnderWaterRender)
{
- sVertexProgram = &gObjectSimpleNonIndexedWaterProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- sVertexProgram = &gObjectSimpleNonIndexedProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedProgram;
}
if (sVertexProgram != NULL)
{ //eyeballs render with the specular shader
sVertexProgram->bind();
+ sVertexProgram->setAlphaRange(0.2f, 1.f);
}
}
else
@@ -647,6 +657,7 @@ void LLDrawPoolAvatar::beginDeferredImpostor()
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
sVertexProgram->bind();
+ sVertexProgram->setAlphaRange(0.01f, 1.f);
}
void LLDrawPoolAvatar::endDeferredImpostor()
@@ -692,11 +703,11 @@ void LLDrawPoolAvatar::beginSkinned()
{
if (LLPipeline::sUnderWaterRender)
{
- sVertexProgram = &gObjectSimpleNonIndexedWaterProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- sVertexProgram = &gObjectSimpleNonIndexedProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedProgram;
}
}
@@ -728,6 +739,11 @@ void LLDrawPoolAvatar::beginSkinned()
sVertexProgram->bind();
}
}
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ sVertexProgram->setAlphaRange(0.2f, 1.f);
+ }
}
void LLDrawPoolAvatar::endSkinned()
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 813b3820ee..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++;
}
@@ -464,11 +465,15 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
}
}
}
- gGL.getTexUnit(diffuse_channel)->disable();
- gGL.getTexUnit(cube_channel)->disable();
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (!LLGLSLShader::sNoFixedFunction)
+ {
+ gGL.getTexUnit(diffuse_channel)->disable();
+ gGL.getTexUnit(cube_channel)->disable();
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
void LLDrawPoolBump::endShiny(bool invisible)
@@ -583,19 +588,19 @@ void LLDrawPoolBump::endFullbrightShiny()
cube_map->disable();
cube_map->restoreMatrix();
- if (diffuse_channel != 0)
+ /*if (diffuse_channel != 0)
{
shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
}
gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);*/
shader->unbind();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
diffuse_channel = -1;
cube_channel = 0;
@@ -706,36 +711,44 @@ void LLDrawPoolBump::beginBump(U32 pass)
// Optional second pass: emboss bump map
stop_glerror();
- // TEXTURE UNIT 0
- // Output.rgb = texture at texture coord 0
- gGL.getTexUnit(0)->activate();
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gObjectBumpProgram.bind();
+ }
+ else
+ {
+ // TEXTURE UNIT 0
+ // Output.rgb = texture at texture coord 0
+ gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
- gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
- // TEXTURE UNIT 1
- gGL.getTexUnit(1)->activate();
+ // TEXTURE UNIT 1
+ gGL.getTexUnit(1)->activate();
- gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
+
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
- gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
- gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ // src = tex0 + (1 - tex1) - 0.5
+ // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
+ // = (1 + bump0 - bump1) / 2
- // src = tex0 + (1 - tex1) - 0.5
- // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
- // = (1 + bump0 - bump1) / 2
+ // Blend: src * dst + dst * src
+ // = 2 * src * dst
+ // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
+ // = (1 + bump0 - bump1) * dst.rgb
+ // = dst.rgb + dst.rgb * (bump0 - bump1)
+
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
+ }
- // Blend: src * dst + dst * src
- // = 2 * src * dst
- // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
- // = (1 + bump0 - bump1) * dst.rgb
- // = dst.rgb + dst.rgb * (bump0 - bump1)
gGL.setSceneBlendType(LLRender::BT_MULT_X2);
- gGL.getTexUnit(0)->activate();
stop_glerror();
-
- gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
}
//static
@@ -765,14 +778,21 @@ void LLDrawPoolBump::endBump(U32 pass)
return;
}
- // Disable texture unit 1
- gGL.getTexUnit(1)->activate();
- gGL.getTexUnit(1)->disable();
- gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gObjectBumpProgram.unbind();
+ }
+ else
+ {
+ // Disable texture blending on unit 1
+ gGL.getTexUnit(1)->activate();
+ //gGL.getTexUnit(1)->disable();
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
- // Disable texture unit 0
- gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ // Disable texture blending on unit 0
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
@@ -1054,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) ;
}
}
}
@@ -1407,6 +1428,11 @@ void LLDrawPoolInvisible::render(S32 pass)
{ //render invisiprims
LLFastTimer t(FTM_RENDER_INVISIBLE);
+ if (gPipeline.canUseVertexShaders())
+ {
+ gOcclusionProgram.bind();
+ }
+
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
glStencilMask(0);
gGL.setColorMask(false, false);
@@ -1414,6 +1440,11 @@ void LLDrawPoolInvisible::render(S32 pass)
gGL.setColorMask(true, false);
glStencilMask(0xFFFFFFFF);
+ if (gPipeline.canUseVertexShaders())
+ {
+ gOcclusionProgram.unbind();
+ }
+
if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
{
beginShiny(true);
diff --git a/indra/newview/lldrawpoolclouds.cpp b/indra/newview/lldrawpoolclouds.cpp
deleted file mode 100644
index 5db1d8cfed..0000000000
--- a/indra/newview/lldrawpoolclouds.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * @file lldrawpoolclouds.cpp
- * @brief LLDrawPoolClouds class implementation
- *
- * $LicenseInfo:firstyear=2006&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 "lldrawpoolclouds.h"
-
-#include "llface.h"
-#include "llsky.h"
-#include "llviewercamera.h"
-#include "llvoclouds.h"
-#include "pipeline.h"
-
-LLDrawPoolClouds::LLDrawPoolClouds() :
- LLDrawPool(POOL_CLOUDS)
-{
-}
-
-LLDrawPool *LLDrawPoolClouds::instancePool()
-{
- return new LLDrawPoolClouds();
-}
-
-BOOL LLDrawPoolClouds::addFace(LLFace* face)
-{
- llerrs << "WTF?" << llendl;
- return FALSE;
-}
-
-void LLDrawPoolClouds::enqueue(LLFace *facep)
-{
- mDrawFace.push_back(facep);
- facep->mDistance = (facep->mCenterAgent - gCamera->getOrigin()) * gCamera->getAtAxis();
-}
-
-void LLDrawPoolClouds::beginRenderPass(S32 pass)
-{
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
-}
-
-void LLDrawPoolClouds::prerender()
-{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
-}
-
-void LLDrawPoolClouds::render(S32 pass)
-{
- LLFastTimer ftm(LLFastTimer::FTM_RENDER_CLOUDS);
- if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
- {
- return;
- }
-
- if (mDrawFace.empty())
- {
- return;
- }
-
- LLGLSPipelineAlpha gls_pipeline_alpha;
- LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
- glAlphaFunc(GL_GREATER,0.01f);
-
- gPipeline.enableLightsFullbright(LLColor4(1.f,1.f,1.f));
-
- mDrawFace[0]->bindTexture();
-
- std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
-
- drawLoop();
-}
-
-
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index 5dbb27cabb..eec4ee6bac 100644
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -49,6 +49,8 @@ void LLDrawPoolGlow::beginPostDeferredPass(S32 pass)
gDeferredFullbrightProgram.bind();
}
+static LLFastTimer::DeclareTimer FTM_RENDER_GLOW_PUSH("Glow Push");
+
void LLDrawPoolGlow::renderPostDeferred(S32 pass)
{
LLFastTimer t(FTM_RENDER_GLOW);
@@ -62,7 +64,11 @@ void LLDrawPoolGlow::renderPostDeferred(S32 pass)
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
gGL.setColorMask(false, true);
- pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+
+ {
+ LLFastTimer t(FTM_RENDER_GLOW_PUSH);
+ pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+ }
gGL.setColorMask(true, false);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
@@ -176,7 +182,6 @@ void LLDrawPoolSimple::endRenderPass(S32 pass)
void LLDrawPoolSimple::render(S32 pass)
{
LLGLDisable blend(GL_BLEND);
- LLGLDisable alpha_test(GL_ALPHA_TEST);
{ //render simple
LLFastTimer t(FTM_RENDER_SIMPLE);
@@ -196,6 +201,7 @@ void LLDrawPoolSimple::render(S32 pass)
}
else
{
+ LLGLDisable alpha_test(GL_ALPHA_TEST);
renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask());
}
@@ -250,19 +256,21 @@ void LLDrawPoolGrass::beginRenderPass(S32 pass)
if (LLPipeline::sUnderWaterRender)
{
- simple_shader = &gObjectSimpleNonIndexedWaterProgram;
+ simple_shader = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- simple_shader = &gObjectSimpleNonIndexedProgram;
+ simple_shader = &gObjectAlphaMaskNonIndexedProgram;
}
if (mVertexShaderLevel > 0)
{
simple_shader->bind();
+ simple_shader->setAlphaRange(0.5f, 1.f);
}
else
{
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
// don't use shaders!
if (gGLManager.mHasShaderObjects)
{
@@ -280,22 +288,23 @@ void LLDrawPoolGrass::endRenderPass(S32 pass)
{
simple_shader->unbind();
}
+ else
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
}
void LLDrawPoolGrass::render(S32 pass)
{
LLGLDisable blend(GL_BLEND);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
-
+
{
LLFastTimer t(FTM_RENDER_GRASS);
LLGLEnable test(GL_ALPHA_TEST);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
//render grass
LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
- }
-
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
}
void LLDrawPoolGrass::beginDeferredPass(S32 pass)
@@ -310,17 +319,13 @@ void LLDrawPoolGrass::endDeferredPass(S32 pass)
void LLDrawPoolGrass::renderDeferred(S32 pass)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
-
{
LLFastTimer t(FTM_RENDER_GRASS_DEFERRED);
- gDeferredTreeProgram.bind();
- LLGLEnable test(GL_ALPHA_TEST);
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.bind();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.setAlphaRange(0.5f, 1.f);
//render grass
LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
}
-
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
@@ -374,10 +379,14 @@ void LLDrawPoolFullbright::endRenderPass(S32 pass)
LLFastTimer t(FTM_RENDER_FULLBRIGHT);
LLRenderPass::endRenderPass(pass);
+ stop_glerror();
+
if (mVertexShaderLevel > 0)
{
fullbright_shader->unbind();
}
+
+ stop_glerror();
}
void LLDrawPoolFullbright::render(S32 pass)
@@ -385,6 +394,8 @@ void LLDrawPoolFullbright::render(S32 pass)
LLFastTimer t(FTM_RENDER_FULLBRIGHT);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
+ stop_glerror();
+
if (mVertexShaderLevel > 0)
{
fullbright_shader->bind();
@@ -398,6 +409,8 @@ void LLDrawPoolFullbright::render(S32 pass)
U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR;
renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
}
+
+ stop_glerror();
}
S32 LLDrawPoolFullbright::getNumPasses()
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 030d6e1110..efffb2df9e 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -82,6 +82,10 @@ void LLDrawPoolSky::render(S32 pass)
mShader = &gObjectFullbrightWaterProgram;
mShader->bind();
}
+ else if (LLGLSLShader::sNoFixedFunction)
+ { //just use the UI shader (generic single texture no lighting)
+ gUIProgram.bind();
+ }
else
{
// don't use shaders!
@@ -139,6 +143,7 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
if (LLSkyTex::doInterpolate())
{
+
LLGLEnable blend(GL_BLEND);
mSkyTex[side].bindTexture(FALSE);
glColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 84eeace9c6..3daa0f8261 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -143,7 +143,7 @@ void LLDrawPoolTerrain::beginRenderPass( S32 pass )
void LLDrawPoolTerrain::endRenderPass( S32 pass )
{
LLFastTimer t(FTM_RENDER_TERRAIN);
- LLFacePool::endRenderPass(pass);
+ //LLFacePool::endRenderPass(pass);
if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) {
sShader->unbind();
@@ -215,8 +215,10 @@ void LLDrawPoolTerrain::render(S32 pass)
{ //use fullbright shader for highlighting
LLGLSLShader* old_shader = sShader;
sShader->unbind();
- sShader = &gObjectFullbrightProgram;
+ sShader = &gObjectFullbrightNonIndexedProgram;
sShader->bind();
+ LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
+ glPolygonOffset(-1.0f, -1.0f);
renderOwnership();
sShader = old_shader;
sShader->bind();
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 81c796b146..a6e0151114 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -62,24 +62,25 @@ void LLDrawPoolTree::prerender()
void LLDrawPoolTree::beginRenderPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
-
+
if (LLPipeline::sUnderWaterRender)
{
- shader = &gObjectSimpleNonIndexedWaterProgram;
+ shader = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- shader = &gObjectSimpleNonIndexedProgram;
+ shader = &gObjectAlphaMaskNonIndexedProgram;
}
- if (gPipeline.canUseWindLightShadersOnObjects())
+ if (gPipeline.canUseVertexShaders())
{
shader->bind();
+ shader->setAlphaRange(0.5f, 1.f);
}
else
{
gPipeline.enableLightsDynamic();
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
}
@@ -92,7 +93,7 @@ void LLDrawPoolTree::render(S32 pass)
return;
}
- LLGLEnable test(GL_ALPHA_TEST);
+ LLGLState test(GL_ALPHA_TEST, LLGLSLShader::sNoFixedFunction ? 0 : 1);
LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f);
if (gSavedSettings.getBOOL("RenderAnimateTrees"))
@@ -121,12 +122,16 @@ void LLDrawPoolTree::render(S32 pass)
void LLDrawPoolTree::endRenderPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
if (gPipeline.canUseWindLightShadersOnObjects())
{
shader->unbind();
}
+
+ if (mVertexShaderLevel <= 0)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
}
//============================================
@@ -135,10 +140,10 @@ void LLDrawPoolTree::endRenderPass(S32 pass)
void LLDrawPoolTree::beginDeferredPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
- shader = &gDeferredTreeProgram;
+ shader = &gDeferredNonIndexedDiffuseAlphaMaskProgram;
shader->bind();
+ shader->setAlphaRange(0.5f, 1.f);
}
void LLDrawPoolTree::renderDeferred(S32 pass)
@@ -149,8 +154,7 @@ void LLDrawPoolTree::renderDeferred(S32 pass)
void LLDrawPoolTree::endDeferredPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
shader->unbind();
}
@@ -160,11 +164,12 @@ void LLDrawPoolTree::endDeferredPass(S32 pass)
void LLDrawPoolTree::beginShadowPass(S32 pass)
{
LLFastTimer t(FTM_SHADOW_TREE);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
+
glPolygonOffset(gSavedSettings.getF32("RenderDeferredTreeShadowOffset"),
gSavedSettings.getF32("RenderDeferredTreeShadowBias"));
- gDeferredShadowProgram.bind();
+ gDeferredShadowAlphaMaskProgram.bind();
+ gDeferredShadowAlphaMaskProgram.setAlphaRange(0.5f, 1.f);
}
void LLDrawPoolTree::renderShadow(S32 pass)
@@ -175,12 +180,9 @@ void LLDrawPoolTree::renderShadow(S32 pass)
void LLDrawPoolTree::endShadowPass(S32 pass)
{
LLFastTimer t(FTM_SHADOW_TREE);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
glPolygonOffset(gSavedSettings.getF32("RenderDeferredSpotShadowOffset"),
gSavedSettings.getF32("RenderDeferredSpotShadowBias"));
-
- //gDeferredShadowProgram.unbind();
}
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index dc94924da4..31c14361b5 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -108,7 +108,7 @@ void LLDrawPoolWater::prerender()
// got rid of modulation by light color since it got a little too
// green at sunset and sl-57047 (underwater turns black at 8:00)
- sWaterFogColor = LLWaterParamManager::instance()->getFogColor();
+ sWaterFogColor = LLWaterParamManager::instance().getFogColor();
sWaterFogColor.mV[3] = 0;
}
@@ -527,7 +527,7 @@ void LLDrawPoolWater::shade()
//bind normal map
S32 bumpTex = shader->enableTexture(LLViewerShaderMgr::BUMP_MAP);
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
+ LLWaterParamManager * param_mgr = &LLWaterParamManager::instance();
// change mWaterNormp if needed
if (mWaterNormp->getID() != param_mgr->getNormalMapID())
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index 409b18d522..79a835fd14 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -34,6 +34,8 @@
#include "llviewercamera.h"
#include "llimage.h"
#include "llwlparammanager.h"
+#include "llviewershadermgr.h"
+#include "llglslshader.h"
#include "llsky.h"
#include "llvowlsky.h"
#include "llviewerregion.h"
@@ -60,15 +62,26 @@ LLDrawPoolWLSky::LLDrawPoolWLSky(void) :
llerrs << "Error: Failed to load cloud noise image " << cloudNoiseFilename << llendl;
}
- cloudNoiseFile->load(cloudNoiseFilename);
-
- sCloudNoiseRawImage = new LLImageRaw();
+ if(cloudNoiseFile->load(cloudNoiseFilename))
+ {
+ sCloudNoiseRawImage = new LLImageRaw();
- cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f);
+ if(cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f))
+ {
+ //debug use
+ lldebugs << "cloud noise raw image width: " << sCloudNoiseRawImage->getWidth() << " : height: " << sCloudNoiseRawImage->getHeight() << " : components: " <<
+ (S32)sCloudNoiseRawImage->getComponents() << " : data size: " << sCloudNoiseRawImage->getDataSize() << llendl ;
+ llassert_always(sCloudNoiseRawImage->getData()) ;
- sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ }
+ else
+ {
+ sCloudNoiseRawImage = NULL ;
+ }
+ }
- LLWLParamManager::instance()->propagateParameters();
+ LLWLParamManager::getInstance()->propagateParameters();
}
LLDrawPoolWLSky::~LLDrawPoolWLSky()
@@ -178,7 +191,7 @@ void LLDrawPoolWLSky::renderStars(void) const
// clamping and allow the star_alpha param to brighten the stars.
bool error;
LLColor4 star_alpha(LLColor4::black);
- star_alpha.mV[3] = LLWLParamManager::instance()->mCurParams.getFloat("star_brightness", error) / 2.f;
+ star_alpha.mV[3] = LLWLParamManager::getInstance()->mCurParams.getFloat("star_brightness", error) / 2.f;
llassert_always(!error);
gGL.getTexUnit(0)->bind(gSky.mVOSkyp->getBloomTex());
@@ -187,26 +200,40 @@ void LLDrawPoolWLSky::renderStars(void) const
glRotatef(gFrameTimeSeconds*0.01f, 0.f, 0.f, 1.f);
// gl_FragColor.rgb = gl_Color.rgb;
// gl_FragColor.a = gl_Color.a * star_alpha.a;
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
- gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_CONST_ALPHA, LLTexUnit::TBS_TEX_ALPHA);
- glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gCustomAlphaProgram.bind();
+ gCustomAlphaProgram.uniform1f("custom_alpha", star_alpha.mV[3]);
+ }
+ else
+ {
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_CONST_ALPHA, LLTexUnit::TBS_TEX_ALPHA);
+ glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
+ }
gSky.mVOWLSkyp->drawStars();
gGL.popMatrix();
-
- // and disable the combiner states
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gCustomAlphaProgram.unbind();
+ }
+ else
+ {
+ // and disable the combiner states
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
{
- if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS))
+ if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && sCloudNoiseTexture.notNull())
{
LLGLEnable blend(GL_BLEND);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
gGL.getTexUnit(0)->bind(sCloudNoiseTexture);
cloud_shader->bind();
@@ -240,6 +267,10 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
if (gSky.mVOSkyp->getMoon().getDraw() && face->getGeomCount())
{
+ if (gPipeline.canUseVertexShaders())
+ {
+ gUIProgram.bind();
+ }
// *NOTE: even though we already bound this texture above for the
// stars register combiners, we bind again here for defensive reasons,
// since LLImageGL::bind detects that it's a noop, and optimizes it out.
@@ -255,6 +286,11 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
LLFacePool::LLOverrideFaceColor color_override(this, color);
face->renderIndexed();
+
+ if (gPipeline.canUseVertexShaders())
+ {
+ gUIProgram.unbind();
+ }
}
}
@@ -266,7 +302,7 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
}
LLFastTimer ftm(FTM_RENDER_WL_SKY);
- const F32 camHeightLocal = LLWLParamManager::instance()->getDomeOffset() * LLWLParamManager::instance()->getDomeRadius();
+ const F32 camHeightLocal = LLWLParamManager::getInstance()->getDomeOffset() * LLWLParamManager::getInstance()->getDomeRadius();
LLGLSNoFog disableFog;
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
@@ -313,7 +349,7 @@ void LLDrawPoolWLSky::render(S32 pass)
}
LLFastTimer ftm(FTM_RENDER_WL_SKY);
- const F32 camHeightLocal = LLWLParamManager::instance()->getDomeOffset() * LLWLParamManager::instance()->getDomeRadius();
+ const F32 camHeightLocal = LLWLParamManager::getInstance()->getDomeOffset() * LLWLParamManager::getInstance()->getDomeRadius();
LLGLSNoFog disableFog;
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
@@ -373,5 +409,8 @@ void LLDrawPoolWLSky::cleanupGL()
//static
void LLDrawPoolWLSky::restoreGL()
{
- sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ if(sCloudNoiseRawImage.notNull())
+ {
+ sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ }
}
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/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
new file mode 100644
index 0000000000..86fe6754dc
--- /dev/null
+++ b/indra/newview/llenvmanager.cpp
@@ -0,0 +1,678 @@
+/**
+ * @file llenvmanager.cpp
+ * @brief Implementation of classes managing WindLight and water settings.
+ *
+ * $LicenseInfo:firstyear=2009&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 "llenvmanager.h"
+
+#include "llagent.h"
+#include "lldaycyclemanager.h"
+#include "llviewercontrol.h" // for gSavedSettings
+#include "llviewerregion.h"
+#include "llwaterparammanager.h"
+#include "llwlhandlers.h"
+#include "llwlparammanager.h"
+
+std::string LLEnvPrefs::getWaterPresetName() const
+{
+ if (mWaterPresetName.empty())
+ {
+ llwarns << "Water preset name is empty" << llendl;
+ }
+
+ return mWaterPresetName;
+}
+
+std::string LLEnvPrefs::getSkyPresetName() const
+{
+ if (mSkyPresetName.empty())
+ {
+ llwarns << "Sky preset name is empty" << llendl;
+ }
+
+ return mSkyPresetName;
+}
+
+std::string LLEnvPrefs::getDayCycleName() const
+{
+ if (mDayCycleName.empty())
+ {
+ llwarns << "Day cycle name is empty" << llendl;
+ }
+
+ return mDayCycleName;
+}
+
+void LLEnvPrefs::setUseRegionSettings(bool val)
+{
+ mUseRegionSettings = val;
+}
+
+void LLEnvPrefs::setUseWaterPreset(const std::string& name)
+{
+ mUseRegionSettings = false;
+ mWaterPresetName = name;
+}
+
+void LLEnvPrefs::setUseSkyPreset(const std::string& name)
+{
+ mUseRegionSettings = false;
+ mUseDayCycle = false;
+ mSkyPresetName = name;
+}
+
+void LLEnvPrefs::setUseDayCycle(const std::string& name)
+{
+ mUseRegionSettings = false;
+ mUseDayCycle = true;
+ mDayCycleName = name;
+}
+
+//=============================================================================
+LLEnvManagerNew::LLEnvManagerNew()
+{
+ mInterpNextChangeMessage = true;
+
+ // Set default environment settings.
+ mUserPrefs.mUseRegionSettings = true;
+ mUserPrefs.mUseDayCycle = true;
+ mUserPrefs.mWaterPresetName = "Default";
+ mUserPrefs.mSkyPresetName = "Default";
+ mUserPrefs.mDayCycleName = "Default";
+}
+
+bool LLEnvManagerNew::getUseRegionSettings() const
+{
+ return mUserPrefs.getUseRegionSettings();
+}
+
+bool LLEnvManagerNew::getUseDayCycle() const
+{
+ return mUserPrefs.getUseDayCycle();
+}
+
+bool LLEnvManagerNew::getUseFixedSky() const
+{
+ return mUserPrefs.getUseFixedSky();
+}
+
+std::string LLEnvManagerNew::getWaterPresetName() const
+{
+ return mUserPrefs.getWaterPresetName();
+}
+
+std::string LLEnvManagerNew::getSkyPresetName() const
+{
+ return mUserPrefs.getSkyPresetName();
+}
+
+std::string LLEnvManagerNew::getDayCycleName() const
+{
+ return mUserPrefs.getDayCycleName();
+}
+
+const LLEnvironmentSettings& LLEnvManagerNew::getRegionSettings() const
+{
+ return !mNewRegionPrefs.isEmpty() ? mNewRegionPrefs : mCachedRegionPrefs;
+}
+
+void LLEnvManagerNew::setRegionSettings(const LLEnvironmentSettings& new_settings)
+{
+ // Set region settings override that will be used locally
+ // until user either uploads the changes or goes to another region.
+ mNewRegionPrefs = new_settings;
+}
+
+bool LLEnvManagerNew::usePrefs()
+{
+ LL_DEBUGS("Windlight") << "Displaying preferred environment" << LL_ENDL;
+ updateManagersFromPrefs(false);
+ return true;
+}
+
+bool LLEnvManagerNew::useDefaults()
+{
+ bool rslt;
+
+ rslt = useDefaultWater();
+ rslt &= useDefaultSky();
+
+ return rslt;
+}
+
+bool LLEnvManagerNew::useRegionSettings()
+{
+ bool rslt;
+
+ rslt = useRegionSky();
+ rslt &= useRegionWater();
+
+ return rslt;
+}
+
+bool LLEnvManagerNew::useWaterPreset(const std::string& name)
+{
+ LL_DEBUGS("Windlight") << "Displaying water preset " << name << LL_ENDL;
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ bool rslt = water_mgr.getParamSet(name, water_mgr.mCurParams);
+ llassert(rslt == true);
+ return rslt;
+}
+
+bool LLEnvManagerNew::useWaterParams(const LLSD& params)
+{
+ LL_DEBUGS("Windlight") << "Displaying water params" << LL_ENDL;
+ LLWaterParamManager::instance().mCurParams.setAll(params);
+ return true;
+}
+
+bool LLEnvManagerNew::useSkyPreset(const std::string& name)
+{
+ LLWLParamManager& sky_mgr = LLWLParamManager::instance();
+ LLWLParamSet param_set;
+
+ if (!sky_mgr.getParamSet(LLWLParamKey(name, LLEnvKey::SCOPE_LOCAL), param_set))
+ {
+ llwarns << "No sky preset named " << name << llendl;
+ return false;
+ }
+
+ LL_DEBUGS("Windlight") << "Displaying sky preset " << name << LL_ENDL;
+ sky_mgr.applySkyParams(param_set.getAll());
+ return true;
+}
+
+bool LLEnvManagerNew::useSkyParams(const LLSD& params)
+{
+ LL_DEBUGS("Windlight") << "Displaying sky params" << LL_ENDL;
+ LLWLParamManager::instance().applySkyParams(params);
+ return true;
+}
+
+bool LLEnvManagerNew::useDayCycle(const std::string& name, LLEnvKey::EScope scope)
+{
+ LLSD params;
+
+ if (scope == LLEnvKey::SCOPE_REGION)
+ {
+ LL_DEBUGS("Windlight") << "Displaying region day cycle " << name << LL_ENDL;
+ params = getRegionSettings().getWLDayCycle();
+ }
+ else
+ {
+ LL_DEBUGS("Windlight") << "Displaying local day cycle " << name << LL_ENDL;
+
+ if (!LLDayCycleManager::instance().getPreset(name, params))
+ {
+ llwarns << "No day cycle named " << name << llendl;
+ return false;
+ }
+ }
+
+ bool rslt = LLWLParamManager::instance().applyDayCycleParams(params, scope);
+ llassert(rslt == true);
+ return rslt;
+}
+
+bool LLEnvManagerNew::useDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time /* = 0.5*/)
+{
+ LL_DEBUGS("Windlight") << "Displaying day cycle params" << LL_ENDL;
+ return LLWLParamManager::instance().applyDayCycleParams(params, scope);
+}
+
+void LLEnvManagerNew::setUseRegionSettings(bool val)
+{
+ mUserPrefs.setUseRegionSettings(val);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::setUseWaterPreset(const std::string& name)
+{
+ // *TODO: make sure the preset exists.
+ if (name.empty())
+ {
+ llwarns << "Empty water preset name passed" << llendl;
+ return;
+ }
+
+ mUserPrefs.setUseWaterPreset(name);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::setUseSkyPreset(const std::string& name)
+{
+ // *TODO: make sure the preset exists.
+ if (name.empty())
+ {
+ llwarns << "Empty sky preset name passed" << llendl;
+ return;
+ }
+
+ mUserPrefs.setUseSkyPreset(name);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::setUseDayCycle(const std::string& name)
+{
+ if (!LLDayCycleManager::instance().presetExists(name))
+ {
+ llwarns << "Invalid day cycle name passed" << llendl;
+ return;
+ }
+
+ mUserPrefs.setUseDayCycle(name);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::loadUserPrefs()
+{
+ // operate on members directly to avoid side effects
+ mUserPrefs.mWaterPresetName = gSavedSettings.getString("WaterPresetName");
+ mUserPrefs.mSkyPresetName = gSavedSettings.getString("SkyPresetName");
+ mUserPrefs.mDayCycleName = gSavedSettings.getString("DayCycleName");
+
+ mUserPrefs.mUseRegionSettings = gSavedSettings.getBOOL("UseEnvironmentFromRegion");
+ mUserPrefs.mUseDayCycle = gSavedSettings.getBOOL("UseDayCycle");
+}
+
+void LLEnvManagerNew::saveUserPrefs()
+{
+ gSavedSettings.setString("WaterPresetName", getWaterPresetName());
+ gSavedSettings.setString("SkyPresetName", getSkyPresetName());
+ gSavedSettings.setString("DayCycleName", getDayCycleName());
+
+ gSavedSettings.setBOOL("UseEnvironmentFromRegion", getUseRegionSettings());
+ gSavedSettings.setBOOL("UseDayCycle", getUseDayCycle());
+
+ mUsePrefsChangeSignal();
+}
+
+void LLEnvManagerNew::setUserPrefs(
+ const std::string& water_preset,
+ const std::string& sky_preset,
+ const std::string& day_cycle_preset,
+ bool use_fixed_sky,
+ bool use_region_settings)
+{
+ // operate on members directly to avoid side effects
+ mUserPrefs.mWaterPresetName = water_preset;
+ mUserPrefs.mSkyPresetName = sky_preset;
+ mUserPrefs.mDayCycleName = day_cycle_preset;
+
+ mUserPrefs.mUseRegionSettings = use_region_settings;
+ mUserPrefs.mUseDayCycle = !use_fixed_sky;
+
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::dumpUserPrefs()
+{
+ LL_DEBUGS("Windlight") << "WaterPresetName: " << gSavedSettings.getString("WaterPresetName") << LL_ENDL;
+ LL_DEBUGS("Windlight") << "SkyPresetName: " << gSavedSettings.getString("SkyPresetName") << LL_ENDL;
+ LL_DEBUGS("Windlight") << "DayCycleName: " << gSavedSettings.getString("DayCycleName") << LL_ENDL;
+
+ LL_DEBUGS("Windlight") << "UseEnvironmentFromRegion: " << gSavedSettings.getBOOL("UseEnvironmentFromRegion") << LL_ENDL;
+ LL_DEBUGS("Windlight") << "UseDayCycle: " << gSavedSettings.getBOOL("UseDayCycle") << LL_ENDL;
+}
+
+void LLEnvManagerNew::dumpPresets()
+{
+ const LLEnvironmentSettings& region_settings = getRegionSettings();
+ std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : "Unknown region";
+
+ // Dump water presets.
+ LL_DEBUGS("Windlight") << "Waters:" << LL_ENDL;
+ if (region_settings.getWaterParams().size() != 0)
+ {
+ LL_DEBUGS("Windlight") << " - " << region_name << LL_ENDL;
+ }
+ LLWaterParamManager::preset_name_list_t water_presets;
+ LLWaterParamManager::instance().getPresetNames(water_presets);
+ for (LLWaterParamManager::preset_name_list_t::const_iterator it = water_presets.begin(); it != water_presets.end(); ++it)
+ {
+ LL_DEBUGS("Windlight") << " - " << *it << LL_ENDL;
+ }
+
+ // Dump sky presets.
+ LL_DEBUGS("Windlight") << "Skies:" << LL_ENDL;
+ LLWLParamManager::preset_key_list_t sky_preset_keys;
+ LLWLParamManager::instance().getPresetKeys(sky_preset_keys);
+ for (LLWLParamManager::preset_key_list_t::const_iterator it = sky_preset_keys.begin(); it != sky_preset_keys.end(); ++it)
+ {
+ std::string preset_name = it->name;
+ std::string item_title;
+
+ if (it->scope == LLEnvKey::SCOPE_LOCAL) // local preset
+ {
+ item_title = preset_name;
+ }
+ else // region preset
+ {
+ item_title = preset_name + " (" + region_name + ")";
+ }
+ LL_DEBUGS("Windlight") << " - " << item_title << LL_ENDL;
+ }
+
+ // Dump day cycles.
+ LL_DEBUGS("Windlight") << "Days:" << LL_ENDL;
+ const LLSD& cur_region_dc = region_settings.getWLDayCycle();
+ if (cur_region_dc.size() != 0)
+ {
+ LL_DEBUGS("Windlight") << " - " << region_name << LL_ENDL;
+ }
+ LLDayCycleManager::preset_name_list_t days;
+ LLDayCycleManager::instance().getPresetNames(days);
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = days.begin(); it != days.end(); ++it)
+ {
+ LL_DEBUGS("Windlight") << " - " << *it << LL_ENDL;
+ }
+}
+
+void LLEnvManagerNew::requestRegionSettings()
+{
+ LLEnvironmentRequest::initiate();
+}
+
+bool LLEnvManagerNew::sendRegionSettings(const LLEnvironmentSettings& new_settings)
+{
+ LLSD metadata;
+
+ metadata["regionID"] = gAgent.getRegion()->getRegionID();
+ // add last received update ID to outbound message so simulator can handle concurrent updates
+ metadata["messageID"] = mLastReceivedID;
+
+ return LLEnvironmentApply::initiateRequest(new_settings.makePacket(metadata));
+}
+
+boost::signals2::connection LLEnvManagerNew::setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb)
+{
+ return mUsePrefsChangeSignal.connect(cb);
+}
+
+boost::signals2::connection LLEnvManagerNew::setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb)
+{
+ return mRegionSettingsChangeSignal.connect(cb);
+}
+
+boost::signals2::connection LLEnvManagerNew::setRegionChangeCallback(const region_change_signal_t::slot_type& cb)
+{
+ return mRegionChangeSignal.connect(cb);
+}
+
+boost::signals2::connection LLEnvManagerNew::setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb)
+{
+ return mRegionSettingsAppliedSignal.connect(cb);
+}
+
+// static
+bool LLEnvManagerNew::canEditRegionSettings()
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ BOOL owner_or_god = gAgent.isGodlike() || (region && region->getOwner() == gAgent.getID());
+ BOOL owner_or_god_or_manager = owner_or_god || (region && region->isEstateManager());
+
+ LL_DEBUGS("Windlight") << "Can edit region settings: " << (bool) owner_or_god_or_manager << LL_ENDL;
+ return owner_or_god_or_manager;
+}
+
+// static
+const std::string LLEnvManagerNew::getScopeString(LLEnvKey::EScope scope)
+{
+ switch(scope)
+ {
+ case LLEnvKey::SCOPE_LOCAL:
+ return LLTrans::getString("LocalSettings");
+ case LLEnvKey::SCOPE_REGION:
+ return LLTrans::getString("RegionSettings");
+ default:
+ return " (?)";
+ }
+}
+
+void LLEnvManagerNew::onRegionCrossing()
+{
+ LL_DEBUGS("Windlight") << "Crossed region" << LL_ENDL;
+ onRegionChange(true);
+}
+
+void LLEnvManagerNew::onTeleport()
+{
+ LL_DEBUGS("Windlight") << "Teleported" << LL_ENDL;
+ onRegionChange(false);
+}
+
+void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
+{
+ // If the message was valid, grab the UUID from it and save it for next outbound update message.
+ mLastReceivedID = content[0]["messageID"].asUUID();
+
+ // Refresh cached region settings.
+ LL_DEBUGS("Windlight") << "Caching region environment settings: " << content << LL_ENDL;
+ F32 sun_hour = 0; // *TODO
+ LLEnvironmentSettings new_settings(content[1], content[2], content[3], sun_hour);
+ mCachedRegionPrefs = new_settings;
+
+ // Load region sky presets.
+ LLWLParamManager::instance().refreshRegionPresets();
+
+ // If using server settings, update managers.
+ if (getUseRegionSettings())
+ {
+ updateManagersFromPrefs(mInterpNextChangeMessage);
+ }
+
+ // Let interested parties know about the region settings update.
+ mRegionSettingsChangeSignal();
+
+ // reset
+ mInterpNextChangeMessage = false;
+}
+
+void LLEnvManagerNew::onRegionSettingsApplyResponse(bool ok)
+{
+ LL_DEBUGS("Windlight") << "Applying region settings " << (ok ? "succeeded" : "failed") << LL_ENDL;
+
+ // Clear locally modified region settings because they have just been uploaded.
+ mNewRegionPrefs.clear();
+
+ mRegionSettingsAppliedSignal(ok);
+}
+
+//-- private methods ----------------------------------------------------------
+
+// virtual
+void LLEnvManagerNew::initSingleton()
+{
+ LL_DEBUGS("Windlight") << "Initializing LLEnvManagerNew" << LL_ENDL;
+
+ loadUserPrefs();
+}
+
+void LLEnvManagerNew::updateSkyFromPrefs()
+{
+ bool success = true;
+
+ // Sync sky with user prefs.
+ if (getUseRegionSettings()) // apply region-wide settings
+ {
+ success = useRegionSky();
+ }
+ else // apply user-specified settings
+ {
+ if (getUseDayCycle())
+ {
+ success = useDayCycle(getDayCycleName(), LLEnvKey::SCOPE_LOCAL);
+ }
+ else
+ {
+ success = useSkyPreset(getSkyPresetName());
+ }
+ }
+
+ // If something went wrong, fall back to defaults.
+ if (!success)
+ {
+ // *TODO: fix user prefs
+ useDefaultSky();
+ }
+}
+
+void LLEnvManagerNew::updateWaterFromPrefs(bool interpolate)
+{
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ LLSD target_water_params;
+
+ // Determine new water settings based on user prefs.
+
+ {
+ // Fall back to default water.
+ LLWaterParamSet default_water;
+ water_mgr.getParamSet("Default", default_water);
+ target_water_params = default_water.getAll();
+ }
+
+ if (getUseRegionSettings())
+ {
+ // *TODO: make sure whether region settings belong to the current region?
+ const LLSD& region_water_params = getRegionSettings().getWaterParams();
+ if (region_water_params.size() != 0) // region has no water settings
+ {
+ LL_DEBUGS("Windlight") << "Applying region water" << LL_ENDL;
+ target_water_params = region_water_params;
+ }
+ else
+ {
+ LL_DEBUGS("Windlight") << "Applying default water" << LL_ENDL;
+ }
+ }
+ else
+ {
+ std::string water = getWaterPresetName();
+ LL_DEBUGS("Windlight") << "Applying water preset [" << water << "]" << LL_ENDL;
+ LLWaterParamSet params;
+ if (!water_mgr.getParamSet(water, params))
+ {
+ llwarns << "No water preset named " << water << ", falling back to defaults" << llendl;
+ water_mgr.getParamSet("Default", params);
+
+ // *TODO: Fix user preferences accordingly.
+ }
+ target_water_params = params.getAll();
+ }
+
+ // Sync water with user prefs.
+ water_mgr.applyParams(target_water_params, interpolate);
+}
+
+void LLEnvManagerNew::updateManagersFromPrefs(bool interpolate)
+{
+ // Apply water settings.
+ updateWaterFromPrefs(interpolate);
+
+ // Apply sky settings.
+ updateSkyFromPrefs();
+}
+
+bool LLEnvManagerNew::useRegionSky()
+{
+ const LLEnvironmentSettings& region_settings = getRegionSettings();
+
+ // If region is set to defaults,
+ if (region_settings.getSkyMap().size() == 0)
+ {
+ // well... apply the default sky settings.
+ useDefaultSky();
+ return true;
+ }
+
+ // *TODO: Support fixed sky from region.
+
+ // Otherwise apply region day cycle.
+ LL_DEBUGS("Windlight") << "Applying region sky" << LL_ENDL;
+ return useDayCycleParams(
+ region_settings.getWLDayCycle(),
+ LLEnvKey::SCOPE_REGION,
+ region_settings.getDayTime());
+}
+
+bool LLEnvManagerNew::useRegionWater()
+{
+ const LLEnvironmentSettings& region_settings = getRegionSettings();
+ const LLSD& region_water = region_settings.getWaterParams();
+
+ // If region is set to defaults,
+ if (region_water.size() == 0)
+ {
+ // well... apply the default water settings.
+ return useDefaultWater();
+ }
+
+ // Otherwise apply region water.
+ LL_DEBUGS("Windlight") << "Applying region sky" << LL_ENDL;
+ return useWaterParams(region_water);
+}
+
+bool LLEnvManagerNew::useDefaultSky()
+{
+ return useDayCycle("Default", LLEnvKey::SCOPE_LOCAL);
+}
+
+bool LLEnvManagerNew::useDefaultWater()
+{
+ return useWaterPreset("Default");
+}
+
+
+void LLEnvManagerNew::onRegionChange(bool interpolate)
+{
+ // Avoid duplicating region setting requests
+ // by checking whether the region is actually changing.
+ LLViewerRegion* regionp = gAgent.getRegion();
+ LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null;
+ if (region_uuid == mCurRegionUUID)
+ {
+ return;
+ }
+
+ // Clear locally modified region settings.
+ mNewRegionPrefs.clear();
+
+ // *TODO: clear environment settings of the previous region?
+
+ // Request environment settings of the new region.
+ LL_DEBUGS("Windlight") << "New viewer region: " << region_uuid << LL_ENDL;
+ mCurRegionUUID = region_uuid;
+ mInterpNextChangeMessage = interpolate;
+ requestRegionSettings();
+
+ // Let interested parties know agent region has been changed.
+ mRegionChangeSignal();
+}
diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h
new file mode 100644
index 0000000000..ad56761bc7
--- /dev/null
+++ b/indra/newview/llenvmanager.h
@@ -0,0 +1,277 @@
+/**
+ * @file llenvmanager.h
+ * @brief Declaration of classes managing WindLight and water settings.
+ *
+ * $LicenseInfo:firstyear=2009&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_LLENVMANAGER_H
+#define LL_LLENVMANAGER_H
+
+#include "llmemory.h"
+#include "llsd.h"
+
+class LLWLParamManager;
+class LLWaterParamManager;
+class LLWLAnimator;
+
+// generic key
+struct LLEnvKey
+{
+public:
+ // Note: enum ordering is important; for example, a region-level floater (1) will see local and region (all values that are <=)
+ typedef enum e_scope
+ {
+ SCOPE_LOCAL, // 0
+ SCOPE_REGION//, // 1
+ // SCOPE_ESTATE, // 2
+ // etc.
+ } EScope;
+};
+
+class LLEnvironmentSettings
+{
+public:
+ LLEnvironmentSettings() :
+ mWLDayCycle(LLSD::emptyMap()),
+ mSkyMap(LLSD::emptyMap()),
+ mWaterParams(LLSD::emptyMap()),
+ mDayTime(0.f)
+ {}
+ LLEnvironmentSettings(const LLSD& dayCycle, const LLSD& skyMap, const LLSD& waterParams, F64 dayTime) :
+ mWLDayCycle(dayCycle),
+ mSkyMap(skyMap),
+ mWaterParams(waterParams),
+ mDayTime(dayTime)
+ {}
+ ~LLEnvironmentSettings() {}
+
+ void saveParams(const LLSD& dayCycle, const LLSD& skyMap, const LLSD& waterParams, F64 dayTime)
+ {
+ mWLDayCycle = dayCycle;
+ mSkyMap = skyMap;
+ mWaterParams = waterParams;
+ mDayTime = dayTime;
+ }
+
+ const LLSD& getWLDayCycle() const
+ {
+ return mWLDayCycle;
+ }
+
+ const LLSD& getWaterParams() const
+ {
+ return mWaterParams;
+ }
+
+ const LLSD& getSkyMap() const
+ {
+ return mSkyMap;
+ }
+
+ F64 getDayTime() const
+ {
+ return mDayTime;
+ }
+
+ bool isEmpty() const
+ {
+ return mWLDayCycle.size() == 0;
+ }
+
+ void clear()
+ {
+ *this = LLEnvironmentSettings();
+ }
+
+ LLSD makePacket(const LLSD& metadata) const
+ {
+ LLSD full_packet = LLSD::emptyArray();
+
+ // 0: metadata
+ full_packet.append(metadata);
+
+ // 1: day cycle
+ full_packet.append(mWLDayCycle);
+
+ // 2: map of sky setting names to sky settings (as LLSD)
+ full_packet.append(mSkyMap);
+
+ // 3: water params
+ full_packet.append(mWaterParams);
+
+ return full_packet;
+ }
+
+private:
+ LLSD mWLDayCycle, mWaterParams, mSkyMap;
+ F64 mDayTime;
+};
+
+/**
+ * User environment preferences.
+ */
+class LLEnvPrefs
+{
+public:
+ LLEnvPrefs() : mUseRegionSettings(true), mUseDayCycle(true) {}
+
+ bool getUseRegionSettings() const { return mUseRegionSettings; }
+ bool getUseDayCycle() const { return mUseDayCycle; }
+ bool getUseFixedSky() const { return !getUseDayCycle(); }
+
+ std::string getWaterPresetName() const;
+ std::string getSkyPresetName() const;
+ std::string getDayCycleName() const;
+
+ void setUseRegionSettings(bool val);
+ void setUseWaterPreset(const std::string& name);
+ void setUseSkyPreset(const std::string& name);
+ void setUseDayCycle(const std::string& name);
+
+ bool mUseRegionSettings;
+ bool mUseDayCycle;
+ std::string mWaterPresetName;
+ std::string mSkyPresetName;
+ std::string mDayCycleName;
+};
+
+/**
+ * Setting:
+ * 1. Use region settings.
+ * 2. Use my setting: <water preset> + <fixed_sky>|<day_cycle>
+ */
+class LLEnvManagerNew : public LLSingleton<LLEnvManagerNew>
+{
+ LOG_CLASS(LLEnvManagerNew);
+public:
+ typedef boost::signals2::signal<void()> prefs_change_signal_t;
+ typedef boost::signals2::signal<void()> region_settings_change_signal_t;
+ typedef boost::signals2::signal<void()> region_change_signal_t;
+ typedef boost::signals2::signal<void(bool)> region_settings_applied_signal_t;
+
+ LLEnvManagerNew();
+
+ // getters to access user env. preferences
+ bool getUseRegionSettings() const;
+ bool getUseDayCycle() const;
+ bool getUseFixedSky() const;
+ std::string getWaterPresetName() const;
+ std::string getSkyPresetName() const;
+ std::string getDayCycleName() const;
+
+ /// @return cached env. settings of the current region.
+ const LLEnvironmentSettings& getRegionSettings() const;
+
+ /**
+ * Set new region settings without uploading them to the region.
+ *
+ * The override will be reset when the changes are applied to the region (=uploaded)
+ * or user teleports to another region.
+ */
+ void setRegionSettings(const LLEnvironmentSettings& new_settings);
+
+ // Change environment w/o changing user preferences.
+ bool usePrefs();
+ bool useDefaults();
+ bool useRegionSettings();
+ bool useWaterPreset(const std::string& name);
+ bool useWaterParams(const LLSD& params);
+ bool useSkyPreset(const std::string& name);
+ bool useSkyParams(const LLSD& params);
+ bool useDayCycle(const std::string& name, LLEnvKey::EScope scope);
+ bool useDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time = 0.5);
+
+ // setters for user env. preferences
+ void setUseRegionSettings(bool val);
+ void setUseWaterPreset(const std::string& name);
+ void setUseSkyPreset(const std::string& name);
+ void setUseDayCycle(const std::string& name);
+ void setUserPrefs(
+ const std::string& water_preset,
+ const std::string& sky_preset,
+ const std::string& day_cycle_preset,
+ bool use_fixed_sky,
+ bool use_region_settings);
+
+ // debugging methods
+ void dumpUserPrefs();
+ void dumpPresets();
+
+ // Misc.
+ void requestRegionSettings();
+ bool sendRegionSettings(const LLEnvironmentSettings& new_settings);
+ boost::signals2::connection setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb);
+ boost::signals2::connection setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb);
+ boost::signals2::connection setRegionChangeCallback(const region_change_signal_t::slot_type& cb);
+ boost::signals2::connection setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb);
+
+ static bool canEditRegionSettings(); /// @return true if we have access to editing region environment
+ static const std::string getScopeString(LLEnvKey::EScope scope);
+
+ // Public callbacks.
+ void onRegionCrossing();
+ void onTeleport();
+ void onRegionSettingsResponse(const LLSD& content);
+ void onRegionSettingsApplyResponse(bool ok);
+
+private:
+ friend class LLSingleton<LLEnvManagerNew>;
+ /*virtual*/ void initSingleton();
+
+ void loadUserPrefs();
+ void saveUserPrefs();
+
+ void updateSkyFromPrefs();
+ void updateWaterFromPrefs(bool interpolate);
+ void updateManagersFromPrefs(bool interpolate);
+
+ bool useRegionSky();
+ bool useRegionWater();
+
+ bool useDefaultSky();
+ bool useDefaultWater();
+
+ void onRegionChange(bool interpolate);
+
+ /// Emitted when user environment preferences change.
+ prefs_change_signal_t mUsePrefsChangeSignal;
+
+ /// Emitted when region environment settings update comes.
+ region_settings_change_signal_t mRegionSettingsChangeSignal;
+
+ /// Emitted when agent region changes. Move to LLAgent?
+ region_change_signal_t mRegionChangeSignal;
+
+ /// Emitted when agent region changes. Move to LLAgent?
+ region_settings_applied_signal_t mRegionSettingsAppliedSignal;
+
+ LLEnvPrefs mUserPrefs; /// User environment preferences.
+ LLEnvironmentSettings mCachedRegionPrefs; /// Cached region environment settings.
+ LLEnvironmentSettings mNewRegionPrefs; /// Not-yet-uploaded modified region env. settings.
+ bool mInterpNextChangeMessage; /// Interpolate env. settings on next region change.
+ LLUUID mCurRegionUUID; /// To avoid duplicated region env. settings requests.
+ LLUUID mLastReceivedID; /// Id of last received region env. settings.
+};
+
+#endif // LL_LLENVMANAGER_H
+
diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp
new file mode 100644
index 0000000000..7ed22d68f6
--- /dev/null
+++ b/indra/newview/llestateinfomodel.cpp
@@ -0,0 +1,230 @@
+/**
+ * @file llestateinfomodel.cpp
+ * @brief Estate info model
+ *
+ * $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 "llestateinfomodel.h"
+
+// libs
+#include "llhttpclient.h"
+#include "llregionflags.h"
+#include "message.h"
+
+// viewer
+#include "llagent.h"
+#include "llfloaterregioninfo.h" // for invoice id
+#include "llviewerregion.h"
+
+LLEstateInfoModel::LLEstateInfoModel()
+: mID(0)
+, mFlags(0)
+, mSunHour(0)
+{
+}
+
+boost::signals2::connection LLEstateInfoModel::setUpdateCallback(const update_signal_t::slot_type& cb)
+{
+ return mUpdateSignal.connect(cb);
+}
+
+boost::signals2::connection LLEstateInfoModel::setCommitCallback(const update_signal_t::slot_type& cb)
+{
+ return mCommitSignal.connect(cb);
+}
+
+void LLEstateInfoModel::sendEstateInfo()
+{
+ if (!commitEstateInfoCaps())
+ {
+ // the caps method failed, try the old way
+ LLFloaterRegionInfo::nextInvoice();
+ commitEstateInfoDataserver();
+ }
+}
+
+bool LLEstateInfoModel::getUseFixedSun() const { return mFlags & REGION_FLAGS_SUN_FIXED; }
+bool LLEstateInfoModel::getIsExternallyVisible() const { return mFlags & REGION_FLAGS_EXTERNALLY_VISIBLE; }
+bool LLEstateInfoModel::getAllowDirectTeleport() const { return mFlags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT; }
+bool LLEstateInfoModel::getDenyAnonymous() const { return mFlags & REGION_FLAGS_DENY_ANONYMOUS; }
+bool LLEstateInfoModel::getDenyAgeUnverified() const { return mFlags & REGION_FLAGS_DENY_AGEUNVERIFIED; }
+bool LLEstateInfoModel::getAllowVoiceChat() const { return mFlags & REGION_FLAGS_ALLOW_VOICE; }
+
+void LLEstateInfoModel::setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); }
+void LLEstateInfoModel::setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); }
+void LLEstateInfoModel::setAllowDirectTeleport(bool val) { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); }
+void LLEstateInfoModel::setDenyAnonymous(bool val) { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); }
+void LLEstateInfoModel::setDenyAgeUnverified(bool val) { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); }
+void LLEstateInfoModel::setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); }
+
+void LLEstateInfoModel::update(const strings_t& strings)
+{
+ // NOTE: LLDispatcher extracts strings with an extra \0 at the
+ // end. If we pass the std::string direct to the UI/renderer
+ // it draws with a weird character at the end of the string.
+ mName = strings[0].c_str();
+ mOwnerID = LLUUID(strings[1].c_str());
+ mID = strtoul(strings[2].c_str(), NULL, 10);
+ mFlags = strtoul(strings[3].c_str(), NULL, 10);
+ mSunHour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
+
+ LL_DEBUGS("Windlight Sync") << "Received estate info: "
+ << "is_sun_fixed = " << getUseFixedSun()
+ << ", sun_hour = " << getSunHour() << LL_ENDL;
+ lldebugs << getInfoDump() << llendl;
+
+ // Update region owner.
+ LLViewerRegion* regionp = gAgent.getRegion();
+ regionp->setOwner(mOwnerID);
+
+ // Let interested parties know that estate info has been updated.
+ mUpdateSignal();
+}
+
+void LLEstateInfoModel::notifyCommit()
+{
+ mCommitSignal();
+}
+
+//== PRIVATE STUFF ============================================================
+
+class LLEstateChangeInfoResponder : public LLHTTPClient::Responder
+{
+public:
+
+ // if we get a normal response, handle it here
+ virtual void result(const LLSD& content)
+ {
+ llinfos << "Committed estate info" << llendl;
+ LLEstateInfoModel::instance().notifyCommit();
+ }
+
+ // if we get an error response
+ virtual void error(U32 status, const std::string& reason)
+ {
+ llwarns << "Failed to commit estate info (" << status << "): " << reason << llendl;
+ }
+};
+
+// tries to send estate info using a cap; returns true if it succeeded
+bool LLEstateInfoModel::commitEstateInfoCaps()
+{
+ std::string url = gAgent.getRegion()->getCapability("EstateChangeInfo");
+
+ if (url.empty())
+ {
+ // whoops, couldn't find the cap, so bail out
+ return false;
+ }
+
+ LLSD body;
+ body["estate_name" ] = getName();
+ body["sun_hour" ] = getSunHour();
+
+ body["is_sun_fixed" ] = getUseFixedSun();
+ body["is_externally_visible"] = getIsExternallyVisible();
+ body["allow_direct_teleport"] = getAllowDirectTeleport();
+ body["deny_anonymous" ] = getDenyAnonymous();
+ body["deny_age_unverified" ] = getDenyAgeUnverified();
+ body["allow_voice_chat" ] = getAllowVoiceChat();
+
+ body["invoice" ] = LLFloaterRegionInfo::getLastInvoice();
+
+ LL_DEBUGS("Windlight Sync") << "Sending estate caps: "
+ << "is_sun_fixed = " << getUseFixedSun()
+ << ", sun_hour = " << getSunHour() << LL_ENDL;
+ lldebugs << body << LL_ENDL;
+
+ // we use a responder so that we can re-get the data after committing to the database
+ LLHTTPClient::post(url, body, new LLEstateChangeInfoResponder);
+ return true;
+}
+
+/* This is the old way of doing things, is deprecated, and should be
+ deleted when the dataserver model can be removed */
+// key = "estatechangeinfo"
+// strings[0] = str(estate_id) (added by simulator before relay - not here)
+// strings[1] = estate_name
+// strings[2] = str(estate_flags)
+// strings[3] = str((S32)(sun_hour * 1024.f))
+void LLEstateInfoModel::commitEstateInfoDataserver()
+{
+ LL_DEBUGS("Windlight Sync") << "Sending estate info: "
+ << "is_sun_fixed = " << getUseFixedSun()
+ << ", sun_hour = " << getSunHour() << LL_ENDL;
+ lldebugs << getInfoDump() << LL_ENDL;
+
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessage("EstateOwnerMessage");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+
+ msg->nextBlock("MethodData");
+ msg->addString("Method", "estatechangeinfo");
+ msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
+
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", getName());
+
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", llformat("%u", getFlags()));
+
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", llformat("%d", (S32) (getSunHour() * 1024.0f)));
+
+ gAgent.sendMessage();
+}
+
+void LLEstateInfoModel::setFlag(U32 flag, bool val)
+{
+ if (val)
+ {
+ mFlags |= flag;
+ }
+ else
+ {
+ mFlags &= ~flag;
+ }
+}
+
+std::string LLEstateInfoModel::getInfoDump()
+{
+ LLSD dump;
+ dump["estate_name" ] = getName();
+ dump["sun_hour" ] = getSunHour();
+
+ dump["is_sun_fixed" ] = getUseFixedSun();
+ dump["is_externally_visible"] = getIsExternallyVisible();
+ dump["allow_direct_teleport"] = getAllowDirectTeleport();
+ dump["deny_anonymous" ] = getDenyAnonymous();
+ dump["deny_age_unverified" ] = getDenyAgeUnverified();
+ dump["allow_voice_chat" ] = getAllowVoiceChat();
+
+ std::stringstream dump_str;
+ dump_str << dump;
+ return dump_str.str();
+}
diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h
new file mode 100644
index 0000000000..56391eda91
--- /dev/null
+++ b/indra/newview/llestateinfomodel.h
@@ -0,0 +1,103 @@
+/**
+ * @file llestateinfomodel.h
+ * @brief Estate info model
+ *
+ * $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_LLESTATEINFOMODEL_H
+#define LL_LLESTATEINFOMODEL_H
+
+class LLMessageSystem;
+
+#include "llsingleton.h"
+
+/**
+ * Contains estate info, notifies interested parties of its changes.
+ */
+class LLEstateInfoModel : public LLSingleton<LLEstateInfoModel>
+{
+ LOG_CLASS(LLEstateInfoModel);
+
+public:
+ typedef boost::signals2::signal<void()> update_signal_t;
+ boost::signals2::connection setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
+ boost::signals2::connection setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
+
+ void sendEstateInfo(); /// send estate info to the simulator
+
+ // getters
+ bool getUseFixedSun() const;
+ bool getIsExternallyVisible() const;
+ bool getAllowDirectTeleport() const;
+ bool getDenyAnonymous() const;
+ bool getDenyAgeUnverified() const;
+ bool getAllowVoiceChat() const;
+
+ const std::string& getName() const { return mName; }
+ const LLUUID& getOwnerID() const { return mOwnerID; }
+ U32 getID() const { return mID; }
+ F32 getSunHour() const { return getUseFixedSun() ? mSunHour : 0.f; }
+
+ // setters
+ void setUseFixedSun(bool val);
+ void setIsExternallyVisible(bool val);
+ void setAllowDirectTeleport(bool val);
+ void setDenyAnonymous(bool val);
+ void setDenyAgeUnverified(bool val);
+ void setAllowVoiceChat(bool val);
+
+ void setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
+
+protected:
+ typedef std::vector<std::string> strings_t;
+
+ friend class LLSingleton<LLEstateInfoModel>;
+ friend class LLDispatchEstateUpdateInfo;
+ friend class LLEstateChangeInfoResponder;
+
+ LLEstateInfoModel();
+
+ /// refresh model with data from the incoming server message
+ void update(const strings_t& strings);
+
+ void notifyCommit();
+
+private:
+ bool commitEstateInfoCaps();
+ void commitEstateInfoDataserver();
+ U32 getFlags() const { return mFlags; }
+ void setFlag(U32 flag, bool val);
+ std::string getInfoDump();
+
+ // estate info
+ std::string mName; /// estate name
+ LLUUID mOwnerID; /// estate owner id
+ U32 mID; /// estate id
+ U32 mFlags; /// estate flags
+ F32 mSunHour; /// estate sun hour
+
+ update_signal_t mUpdateSignal; /// emitted when we receive update from sim
+ update_signal_t mCommitSignal; /// emitted when our update gets applied to sim
+};
+
+#endif // LL_LLESTATEINFOMODEL_H
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 5501b8c2ac..2abfbf37ca 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -415,6 +415,15 @@ void LLExpandableTextBox::onTopLost()
LLUICtrl::onTopLost();
}
+void LLExpandableTextBox::updateTextShape()
+{
+ // I guess this should be done on every reshape(),
+ // but adding this code to reshape() currently triggers bug VWR-26455,
+ // which makes the text virtually unreadable.
+ llassert(!mExpanded);
+ updateTextBoxRect();
+}
+
void LLExpandableTextBox::setValue(const LLSD& value)
{
collapseTextBox();
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index f75ef954ff..399e48bea2 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -143,6 +143,10 @@ public:
*/
/*virtual*/ void onTopLost();
+ /**
+ * *HACK: Update the inner textbox shape.
+ */
+ void updateTextShape();
/**
* Draws text box, collapses text box if its expanded and its parent's position changed
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index b6566fcbd0..432e61f6d8 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -1051,6 +1051,13 @@ bool LLFace::canRenderAsMask()
static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_POSITION("Position");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_NORMAL("Normal");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_TEXTURE("Texture");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_COLOR("Color");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_WEIGHTS("Weights");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_BINORMAL("Binormal");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX("Index");
BOOL LLFace::getGeometryVolume(const LLVolume& volume,
const S32 &f,
@@ -1064,6 +1071,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
S32 num_vertices = (S32)vf.mNumVertices;
S32 num_indices = (S32) vf.mNumIndices;
+ bool map_range = gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange;
+
if (mVertexBuffer.notNull())
{
if (num_indices + (S32) mIndicesIndex > mVertexBuffer->getNumIndices())
@@ -1182,7 +1191,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
// INDICES
if (full_rebuild)
{
- mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_INDEX);
+ mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, map_range);
__m128i* dst = (__m128i*) indicesp.get();
__m128i* src = (__m128i*) vf.mIndices;
@@ -1201,7 +1211,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
indicesp[i] = vf.mIndices[i]+index_offset;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
LLMatrix4a mat_normal;
@@ -1215,6 +1228,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_tcoord)
{
+ LLFastTimer t(FTM_FACE_GEOM_TEXTURE);
bool do_xform;
if (tep)
@@ -1422,11 +1436,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
}
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
else
{ //either bump mapped or in atlas, just do the whole expensive loop
- mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, true);
+ mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, map_range);
std::vector<LLVector2> bump_tc;
@@ -1566,12 +1583,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
}
}
- mVertexBuffer->setBuffer(0);
-
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
if (do_bump)
{
- mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, true);
+ mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, map_range);
for (S32 i = 0; i < num_vertices; i++)
{
@@ -1601,14 +1620,20 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
*tex_coords2++ = tc;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
}
}
if (rebuild_pos)
{
- mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_POSITION);
+ llassert(num_vertices > 0);
+
+ mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, map_range);
vertices = (LLVector4a*) vert.get();
LLMatrix4a mat_vert;
@@ -1636,13 +1661,25 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
index_dst += 4;
}
while (index_dst < index_end);
-
- mVertexBuffer->setBuffer(0);
+
+ S32 aligned_pad_vertices = mGeomCount - num_vertices;
+ LLVector4a* last_vec = end - 1;
+ while (aligned_pad_vertices > 0)
+ {
+ --aligned_pad_vertices;
+ *dst++ = *last_vec;
+ }
+
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_normal)
{
- mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_NORMAL);
+ mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, map_range);
normals = (LLVector4a*) norm.get();
for (S32 i = 0; i < num_vertices; i++)
@@ -1653,12 +1690,16 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
normals[i] = normal;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_binormal)
{
- mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_BINORMAL);
+ mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, map_range);
binormals = (LLVector4a*) binorm.get();
for (S32 i = 0; i < num_vertices; i++)
@@ -1669,20 +1710,28 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
binormals[i] = binormal;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_weights && vf.mWeights)
{
- mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_WEIGHTS);
+ mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, map_range);
weights = (LLVector4a*) wght.get();
LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4*sizeof(F32));
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_color)
{
- mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_COLOR);
+ mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, map_range);
LLVector4a src;
@@ -1703,7 +1752,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
dst[i] = src;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_tcoord)
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 35712163eb..366154302c 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -252,7 +252,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],
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 83844048d1..db9a0424c0 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -106,7 +106,7 @@ BOOL LLFeatureList::isFeatureAvailable(const std::string& name)
return mFeatures[name].mAvailable;
}
- LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
+ LL_WARNS_ONCE("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
// changing this to TRUE so you have to explicitly disable
// something for it to be disabled
@@ -120,7 +120,7 @@ F32 LLFeatureList::getRecommendedValue(const std::string& name)
return mFeatures[name].mRecommendedLevel;
}
- LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
+ LL_WARNS_ONCE("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
return 0;
}
@@ -769,6 +769,10 @@ void LLFeatureManager::applyBaseMasks()
{
maskFeatures("TexUnit8orLess");
}
+ if (gGLManager.mHasMapBufferRange)
+ {
+ maskFeatures("MapBufferRange");
+ }
// now mask by gpu string
// Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces
diff --git a/indra/newview/llfilteredwearablelist.cpp b/indra/newview/llfilteredwearablelist.cpp
index cd5e779c4d..a29ccf2b6d 100644
--- a/indra/newview/llfilteredwearablelist.cpp
+++ b/indra/newview/llfilteredwearablelist.cpp
@@ -31,6 +31,7 @@
#include "llinventoryfunctions.h"
#include "llinventoryitemslist.h"
#include "llinventorymodel.h"
+#include "llviewerinventory.h"
LLFilteredWearableListManager::LLFilteredWearableListManager(LLInventoryItemsList* list, LLInventoryCollectFunctor* collector)
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 2873bc0059..849826bb6b 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -26,6 +26,8 @@
*/
#include "llviewerprecompiledheaders.h"
+#include <iostream>
+#include <fstream>
#include "llfloaterabout.h"
@@ -108,8 +110,14 @@ BOOL LLFloaterAbout::postBuild()
LLViewerTextEditor *support_widget =
getChild<LLViewerTextEditor>("support_editor", true);
- LLViewerTextEditor *credits_widget =
- getChild<LLViewerTextEditor>("credits_editor", true);
+ LLViewerTextEditor *linden_names_widget =
+ getChild<LLViewerTextEditor>("linden_names", true);
+
+ LLViewerTextEditor *contrib_names_widget =
+ getChild<LLViewerTextEditor>("contrib_names", true);
+
+ LLViewerTextEditor *trans_names_widget =
+ getChild<LLViewerTextEditor>("trans_names", true);
getChild<LLUICtrl>("copy_btn")->setCommitCallback(
boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this));
@@ -190,8 +198,59 @@ BOOL LLFloaterAbout::postBuild()
support_widget->setEnabled(FALSE);
support_widget->startOfDoc();
- credits_widget->setEnabled(FALSE);
- credits_widget->startOfDoc();
+ // Get the names of Lindens, added by viewer_manifest.py at build time
+ std::string lindens_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"lindens.txt");
+ llifstream linden_file;
+ std::string lindens;
+ linden_file.open(lindens_path); /* Flawfinder: ignore */
+ if (linden_file.is_open())
+ {
+ std::getline(linden_file, lindens); // all names are on a single line
+ linden_file.close();
+ linden_names_widget->setText(lindens);
+ }
+ else
+ {
+ LL_INFOS("AboutInit") << "Could not read lindens file at " << lindens_path << LL_ENDL;
+ }
+ linden_names_widget->setEnabled(FALSE);
+ linden_names_widget->startOfDoc();
+
+ // Get the names of contributors, extracted from .../doc/contributions.txt by viewer_manifest.py at build time
+ std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt");
+ llifstream contrib_file;
+ std::string contributors;
+ contrib_file.open(contributors_path); /* Flawfinder: ignore */
+ if (contrib_file.is_open())
+ {
+ std::getline(contrib_file, contributors); // all names are on a single line
+ contrib_file.close();
+ }
+ else
+ {
+ LL_WARNS("AboutInit") << "Could not read contributors file at " << contributors_path << LL_ENDL;
+ }
+ contrib_names_widget->setText(contributors);
+ contrib_names_widget->setEnabled(FALSE);
+ contrib_names_widget->startOfDoc();
+
+ // Get the names of translators, extracted from .../doc/tranlations.txt by viewer_manifest.py at build time
+ std::string translators_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"translators.txt");
+ llifstream trans_file;
+ std::string translators;
+ trans_file.open(translators_path); /* Flawfinder: ignore */
+ if (trans_file.is_open())
+ {
+ std::getline(trans_file, translators); // all names are on a single line
+ trans_file.close();
+ }
+ else
+ {
+ LL_WARNS("AboutInit") << "Could not read translators file at " << translators_path << LL_ENDL;
+ }
+ trans_names_widget->setText(translators);
+ trans_names_widget->setEnabled(FALSE);
+ trans_names_widget->startOfDoc();
return TRUE;
}
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 1f334815d6..9f0218a95e 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -223,8 +223,7 @@ BOOL LLFloaterAnimPreview::postBuild()
// now load bvh file
S32 file_size;
- LLAPRFile infile ;
- infile.open(mFilenameAndPath, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(mFilenameAndPath, LL_APR_RB, &file_size);
if (!infile.getFileHandle())
{
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index c95b046707..2939d31087 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -27,7 +27,6 @@
#include "llviewerprecompiledheaders.h"
#include "llfloaterauction.h"
-#include "llfloaterregioninfo.h"
#include "llgl.h"
#include "llimagej2c.h"
@@ -40,6 +39,7 @@
#include "llagent.h"
#include "llcombobox.h"
+#include "llestateinfomodel.h"
#include "llmimetypes.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
@@ -55,6 +55,7 @@
#include "llrender.h"
#include "llsdutil.h"
#include "llsdutil_math.h"
+#include "lltrans.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
@@ -113,16 +114,9 @@ void LLFloaterAuction::initialize()
getChildView("reset_parcel_btn")->setEnabled(TRUE);
getChildView("start_auction_btn")->setEnabled(TRUE);
- LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
- if (panel)
- { // Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet
- U32 estate_id = panel->getEstateID();
- getChildView("sell_to_anyone_btn")->setEnabled((estate_id == ESTATE_TEEN || estate_id == 0));
- }
- else
- { // Don't have the panel up, so don't know if we're on the teen grid or not. Default to enabling it
- getChildView("sell_to_anyone_btn")->setEnabled(TRUE);
- }
+ U32 estate_id = LLEstateInfoModel::instance().getID();
+ // Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet
+ getChildView("sell_to_anyone_btn")->setEnabled(estate_id == ESTATE_TEEN || estate_id == 0);
}
else
{
@@ -457,7 +451,7 @@ void LLFloaterAuction::onClickSellToAnyone(void* data)
LLSD args;
args["LAND_SIZE"] = llformat("%d", area);
args["SALE_PRICE"] = llformat("%d", sale_price);
- args["NAME"] = "Anyone";
+ args["NAME"] = LLTrans::getString("Anyone");
LLNotification::Params params("ConfirmLandSaleChange"); // Re-use existing dialog
params.substitutions(args)
diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp
index 4b6fe4a115..86c1bf0534 100644
--- a/indra/newview/llfloaterbuildoptions.cpp
+++ b/indra/newview/llfloaterbuildoptions.cpp
@@ -34,15 +34,81 @@
#include "llfloaterbuildoptions.h"
#include "lluictrlfactory.h"
+#include "llcombobox.h"
+#include "llselectmgr.h"
+
//
// Methods
//
+
+void commit_grid_mode(LLUICtrl *);
+
LLFloaterBuildOptions::LLFloaterBuildOptions(const LLSD& key)
- : LLFloater(key)
+ : LLFloater(key),
+ mComboGridMode(NULL)
{
+ mCommitCallbackRegistrar.add("GridOptions.gridMode", boost::bind(&commit_grid_mode,_1));
}
LLFloaterBuildOptions::~LLFloaterBuildOptions()
+{}
+
+BOOL LLFloaterBuildOptions::postBuild()
+{
+ mComboGridMode = getChild<LLComboBox>("combobox grid mode");
+
+ return TRUE;
+}
+
+void LLFloaterBuildOptions::setGridMode(EGridMode mode)
+{
+ mComboGridMode->setCurrentByIndex((S32)mode);
+}
+
+void LLFloaterBuildOptions::updateGridMode()
{
+ if (mComboGridMode)
+ {
+ S32 index = mComboGridMode->getCurrentIndex();
+ mComboGridMode->removeall();
+
+ switch (mObjectSelection->getSelectType())
+ {
+ case SELECT_TYPE_HUD:
+ mComboGridMode->add(getString("grid_screen_text"));
+ mComboGridMode->add(getString("grid_local_text"));
+ break;
+ case SELECT_TYPE_WORLD:
+ mComboGridMode->add(getString("grid_world_text"));
+ mComboGridMode->add(getString("grid_local_text"));
+ mComboGridMode->add(getString("grid_reference_text"));
+ break;
+ case SELECT_TYPE_ATTACHMENT:
+ mComboGridMode->add(getString("grid_attachment_text"));
+ mComboGridMode->add(getString("grid_local_text"));
+ mComboGridMode->add(getString("grid_reference_text"));
+ break;
+ }
+
+ mComboGridMode->setCurrentByIndex(index);
+ }
+}
+
+// virtual
+void LLFloaterBuildOptions::onOpen(const LLSD& key)
+{
+ mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
}
+// virtual
+void LLFloaterBuildOptions::onClose(bool app_quitting)
+{
+ mObjectSelection = NULL;
+}
+
+void commit_grid_mode(LLUICtrl *ctrl)
+{
+ LLComboBox* combo = (LLComboBox*)ctrl;
+
+ LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex());
+}
diff --git a/indra/newview/llfloaterbuildoptions.h b/indra/newview/llfloaterbuildoptions.h
index 164944d7bc..7f3811bf1c 100644
--- a/indra/newview/llfloaterbuildoptions.h
+++ b/indra/newview/llfloaterbuildoptions.h
@@ -33,15 +33,34 @@
#define LL_LLFLOATERBUILDOPTIONS_H
#include "llfloater.h"
+#include "llselectmgr.h"
+class LLComboBox;
+class LLObjectSelection;
+
+typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
class LLFloaterBuildOptions
: public LLFloater
{
- friend class LLFloaterReg;
+public:
+
+ virtual BOOL postBuild();
+
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+
+ void setGridMode(EGridMode mode);
+ void updateGridMode();
+
private:
+
+ friend class LLFloaterReg;
+
LLFloaterBuildOptions(const LLSD& key);
~LLFloaterBuildOptions();
-};
+ LLComboBox* mComboGridMode;
+ LLObjectSelectionHandle mObjectSelection;
+};
#endif
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 610142b5a9..8223e89b64 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -508,7 +508,9 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
LLIconCtrl* rating_icon = getChild<LLIconCtrl>("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)
@@ -529,7 +531,8 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
LLTextBox* region_type = getChild<LLTextBox>("region_type_text");
if (region_type)
{
- region_type->setText(region->getSimProductName());
+ region_type->setText(region->getLocalizedSimProductName());
+ region_type->setToolTip(region->getLocalizedSimProductName());
}
LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
@@ -619,7 +622,8 @@ void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, co
void LLFloaterBuyLandUI::updateFloaterEstateName(const std::string& name)
{
LLTextBox* box = getChild<LLTextBox>("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/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
deleted file mode 100644
index 22816ee802..0000000000
--- a/indra/newview/llfloaterdaycycle.cpp
+++ /dev/null
@@ -1,531 +0,0 @@
-/**
- * @file llfloaterdaycycle.cpp
- * @brief LLFloaterDayCycle class definition
- *
- * $LicenseInfo:firstyear=2007&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 "llfloaterdaycycle.h"
-
-#include "pipeline.h"
-#include "llsky.h"
-
-#include "llsliderctrl.h"
-#include "llmultislider.h"
-#include "llmultisliderctrl.h"
-#include "llspinctrl.h"
-#include "llcheckboxctrl.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
-#include "llcombobox.h"
-#include "lllineeditor.h"
-#include "llwlanimator.h"
-
-#include "v4math.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-
-#include "llwlparamset.h"
-#include "llwlparammanager.h"
-#include "llpostprocess.h"
-#include "llfloaterwindlight.h"
-
-
-std::map<std::string, LLWLSkyKey> LLFloaterDayCycle::sSliderToKey;
-const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f;
-
-LLFloaterDayCycle::LLFloaterDayCycle(const LLSD& key)
-: LLFloater(key)
-{
-}
-
-BOOL LLFloaterDayCycle::postBuild()
-{
- // add the combo boxes
- LLComboBox* keyCombo = getChild<LLComboBox>("WLKeyPresets");
-
- if(keyCombo != NULL)
- {
- keyCombo->removeall();
- std::map<std::string, LLWLParamSet>::iterator mIt =
- LLWLParamManager::instance()->mParamList.begin();
- for(; mIt != LLWLParamManager::instance()->mParamList.end(); mIt++)
- {
- keyCombo->add(std::string(mIt->first));
- }
-
- // set defaults on combo boxes
- keyCombo->selectFirstItem();
- }
-
- // add the time slider
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
-
- sldr->addSlider();
-
- // load it up
- initCallbacks();
-
- syncMenu();
- syncSliderTrack();
-
- return TRUE;
-}
-
-LLFloaterDayCycle::~LLFloaterDayCycle()
-{
-}
-
-void LLFloaterDayCycle::initCallbacks(void)
-{
- // WL Day Cycle
- getChild<LLUICtrl>("WLTimeSlider")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeSliderMoved, this, _1));
- getChild<LLUICtrl>("WLDayCycleKeys")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeMoved, this, _1));
- getChild<LLUICtrl>("WLCurKeyHour")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeChanged, this, _1));
- getChild<LLUICtrl>("WLCurKeyMin")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeChanged, this, _1));
- getChild<LLUICtrl>("WLKeyPresets")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyPresetChanged, this, _1));
-
- getChild<LLUICtrl>("WLLengthOfDayHour")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeRateChanged, this, _1));
- getChild<LLUICtrl>("WLLengthOfDayMin")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeRateChanged, this, _1));
- getChild<LLUICtrl>("WLLengthOfDaySec")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeRateChanged, this, _1));
- getChild<LLUICtrl>("WLUseLindenTime")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onUseLindenTime, this, _1));
- getChild<LLUICtrl>("WLAnimSky")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onRunAnimSky, this, _1));
- getChild<LLUICtrl>("WLStopAnimSky")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onStopAnimSky, this, _1));
-
- getChild<LLUICtrl>("WLLoadDayCycle")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onLoadDayCycle, this, _1));
- getChild<LLUICtrl>("WLSaveDayCycle")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onSaveDayCycle, this, _1));
-
- getChild<LLUICtrl>("WLAddKey")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onAddKey, this, _1));
- getChild<LLUICtrl>("WLDeleteKey")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onDeleteKey, this, _1));
-}
-
-void LLFloaterDayCycle::syncMenu()
-{
-// std::map<std::string, LLVector4> & currentParams = LLWLParamManager::instance()->mCurParams.mParamValues;
-
- // set time
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
- sldr->setCurSliderValue((F32)LLWLParamManager::instance()->mAnimator.getDayTime() * sHoursPerDay);
-
- LLSpinCtrl* secSpin = getChild<LLSpinCtrl>("WLLengthOfDaySec");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>("WLLengthOfDayMin");
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>("WLLengthOfDayHour");
-
- F32 curRate;
- F32 hours, min, sec;
-
- // get the current rate
- curRate = LLWLParamManager::instance()->mDay.mDayRate;
- hours = (F32)((int)(curRate / 60 / 60));
- curRate -= (hours * 60 * 60);
- min = (F32)((int)(curRate / 60));
- curRate -= (min * 60);
- sec = curRate;
-
- hourSpin->setValue(hours);
- minSpin->setValue(min);
- secSpin->setValue(sec);
-
- // turn off Use Estate Time button if it's already being used
- if( LLWLParamManager::instance()->mAnimator.mUseLindenTime == true)
- {
- getChildView("WLUseLindenTime")->setEnabled(FALSE);
- }
- else
- {
- getChildView("WLUseLindenTime")->setEnabled(TRUE);
- }
-}
-
-void LLFloaterDayCycle::syncSliderTrack()
-{
- // clear the slider
- LLMultiSliderCtrl* kSldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
-
- kSldr->clear();
- sSliderToKey.clear();
-
- // add sliders
- std::map<F32, std::string>::iterator mIt =
- LLWLParamManager::instance()->mDay.mTimeMap.begin();
- for(; mIt != LLWLParamManager::instance()->mDay.mTimeMap.end(); mIt++)
- {
- addSliderKey(mIt->first * sHoursPerDay, mIt->second);
- }
-}
-
-void LLFloaterDayCycle::syncTrack()
-{
- // if no keys, do nothing
- if(sSliderToKey.size() == 0)
- {
- return;
- }
-
- LLMultiSliderCtrl* sldr;
- sldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
- llassert_always(sSliderToKey.size() == sldr->getValue().size());
-
- LLMultiSliderCtrl* tSldr;
- tSldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
-
- // create a new animation track
- LLWLParamManager::instance()->mDay.clearKeys();
-
- // add the keys one by one
- std::map<std::string, LLWLSkyKey>::iterator mIt = sSliderToKey.begin();
- for(; mIt != sSliderToKey.end(); mIt++)
- {
- LLWLParamManager::instance()->mDay.addKey(mIt->second.time / sHoursPerDay,
- mIt->second.presetName);
- }
-
- // set the param manager's track to the new one
- LLWLParamManager::instance()->resetAnimator(
- tSldr->getCurSliderValue() / sHoursPerDay, false);
-
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterDayCycle::onRunAnimSky(LLUICtrl* ctrl)
-{
- // if no keys, do nothing
- if(sSliderToKey.size() == 0)
- {
- return;
- }
-
- LLMultiSliderCtrl* sldr;
- sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
- llassert_always(sSliderToKey.size() == sldr->getValue().size());
-
- LLMultiSliderCtrl* tSldr;
- tSldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
-
- // turn off linden time
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // set the param manager's track to the new one
- LLWLParamManager::instance()->resetAnimator(
- tSldr->getCurSliderValue() / sHoursPerDay, true);
-
- llassert_always(LLWLParamManager::instance()->mAnimator.mTimeTrack.size() == sldr->getValue().size());
-}
-
-void LLFloaterDayCycle::onStopAnimSky(LLUICtrl* ctrl)
-{
- // if no keys, do nothing
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- // turn off animation and using linden time
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-}
-
-void LLFloaterDayCycle::onUseLindenTime(LLUICtrl* ctrl)
-{
- LLComboBox* box = getChild<LLComboBox>("WLPresetsCombo");
- box->selectByValue("");
-
- LLWLParamManager::instance()->mAnimator.mIsRunning = true;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
-}
-
-void LLFloaterDayCycle::onLoadDayCycle(LLUICtrl* ctrl)
-{
- LLWLParamManager::instance()->mDay.loadDayCycle("Default.xml");
-
- // sync it all up
- syncSliderTrack();
- syncMenu();
-
- // set the param manager's track to the new one
- LLMultiSliderCtrl* tSldr;
- tSldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
- LLWLParamManager::instance()->resetAnimator(
- tSldr->getCurSliderValue() / sHoursPerDay, false);
-
- // and draw it
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterDayCycle::onSaveDayCycle(LLUICtrl* ctrl)
-{
- LLWLParamManager::instance()->mDay.saveDayCycle("Default.xml");
-}
-
-
-void LLFloaterDayCycle::onTimeSliderMoved(LLUICtrl* ctrl)
-{
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
-
- /// get the slider value
- F32 val = sldr->getCurSliderValue() / sHoursPerDay;
-
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime((F64)val);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterDayCycle::onKeyTimeMoved(LLUICtrl* ctrl)
-{
- LLComboBox* comboBox = getChild<LLComboBox>("WLKeyPresets");
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>("WLCurKeyHour");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>("WLCurKeyMin");
-
- if(sldr->getValue().size() == 0) {
- return;
- }
-
- // make sure we have a slider
- const std::string& curSldr = sldr->getCurSlider();
- if(curSldr == "") {
- return;
- }
-
- F32 time = sldr->getCurSliderValue();
-
- // check to see if a key exists
- std::string presetName = sSliderToKey[curSldr].presetName;
- sSliderToKey[curSldr].time = time;
-
- // if it exists, turn on check box
- comboBox->selectByValue(presetName);
-
- // now set the spinners
- F32 hour = (F32)((S32)time);
- F32 min = (time - hour) * 60;
-
- // handle imprecision
- if(min >= 59) {
- min = 0;
- hour += 1;
- }
-
- hourSpin->set(hour);
- minSpin->set(min);
-
- syncTrack();
-
-}
-
-void LLFloaterDayCycle::onKeyTimeChanged(LLUICtrl* ctrl)
-{
- // if no keys, skipped
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>(
- "WLCurKeyHour");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>(
- "WLCurKeyMin");
-
- F32 hour = hourSpin->get();
- F32 min = minSpin->get();
- F32 val = hour + min / 60.0f;
-
- const std::string& curSldr = sldr->getCurSlider();
- sldr->setCurSliderValue(val, TRUE);
- F32 time = sldr->getCurSliderValue() / sHoursPerDay;
-
- // now set the key's time in the sliderToKey map
- std::string presetName = sSliderToKey[curSldr].presetName;
- sSliderToKey[curSldr].time = time;
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::onKeyPresetChanged(LLUICtrl* ctrl)
-{
- // get the time
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLKeyPresets");
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
-
- // do nothing if no sliders
- if(sldr->getValue().size() == 0) {
- return;
- }
-
- // change the map
- std::string newPreset(comboBox->getSelectedValue().asString());
- const std::string& curSldr = sldr->getCurSlider();
-
- // if null, don't use
- if(curSldr == "") {
- return;
- }
-
- sSliderToKey[curSldr].presetName = newPreset;
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::onTimeRateChanged(LLUICtrl* ctrl)
-{
- // get the time
- LLSpinCtrl* secSpin = getChild<LLSpinCtrl>(
- "WLLengthOfDaySec");
-
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>(
- "WLLengthOfDayMin");
-
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>(
- "WLLengthOfDayHour");
-
- F32 hour;
- hour = (F32)hourSpin->getValue().asReal();
- F32 min;
- min = (F32)minSpin->getValue().asReal();
- F32 sec;
- sec = (F32)secSpin->getValue().asReal();
-
- F32 time = 60.0f * 60.0f * hour + 60.0f * min + sec;
- if(time <= 0) {
- time = 1;
- }
- LLWLParamManager::instance()->mDay.mDayRate = time;
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::onAddKey(LLUICtrl* ctrl)
-{
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLKeyPresets");
- LLMultiSliderCtrl* kSldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
- LLMultiSliderCtrl* tSldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
-
- llassert_always(sSliderToKey.size() == kSldr->getValue().size());
-
- // get the values
- std::string newPreset(comboBox->getSelectedValue().asString());
-
- // add the slider key
- addSliderKey(tSldr->getCurSliderValue(), newPreset);
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::addSliderKey(F32 time, const std::string & presetName)
-{
- LLMultiSliderCtrl* kSldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
-
- // make a slider
- const std::string& sldrName = kSldr->addSlider(time);
- if(sldrName == "") {
- return;
- }
-
- // set the key
- LLWLSkyKey newKey;
- newKey.presetName = presetName;
- newKey.time = kSldr->getCurSliderValue();
-
- llassert_always(sldrName != LLStringUtil::null);
-
- // add to map
- sSliderToKey.insert(std::pair<std::string, LLWLSkyKey>(sldrName, newKey));
-
- llassert_always(sSliderToKey.size() == kSldr->getValue().size());
-
-}
-
-void LLFloaterDayCycle::deletePreset(std::string& presetName)
-{
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
-
- /// delete any reference
- std::map<std::string, LLWLSkyKey>::iterator curr_preset, next_preset;
- for(curr_preset = sSliderToKey.begin(); curr_preset != sSliderToKey.end(); curr_preset = next_preset)
- {
- next_preset = curr_preset;
- ++next_preset;
- if (curr_preset->second.presetName == presetName)
- {
- sldr->deleteSlider(curr_preset->first);
- sSliderToKey.erase(curr_preset);
- }
- }
-}
-
-void LLFloaterDayCycle::onDeleteKey(LLUICtrl* ctrl)
-{
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLKeyPresets");
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
-
- // delete from map
- const std::string& sldrName = sldr->getCurSlider();
- std::map<std::string, LLWLSkyKey>::iterator mIt = sSliderToKey.find(sldrName);
- sSliderToKey.erase(mIt);
-
- sldr->deleteCurSlider();
-
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- const std::string& name = sldr->getCurSlider();
- comboBox->selectByValue(sSliderToKey[name].presetName);
- F32 time = sSliderToKey[name].time;
-
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>("WLCurKeyHour");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>("WLCurKeyMin");
-
- // now set the spinners
- F32 hour = (F32)((S32)time);
- F32 min = (time - hour) / 60;
- hourSpin->set(hour);
- minSpin->set(min);
-
- syncTrack();
-
-}
diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h
deleted file mode 100644
index 993ddb8f07..0000000000
--- a/indra/newview/llfloaterdaycycle.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * @file llfloaterdaycycle.h
- * @brief LLFloaterDayCycle class definition
- *
- * $LicenseInfo:firstyear=2007&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_LLFLOATERDAYCYCLE_H
-#define LL_LLFLOATERDAYCYCLE_H
-
-#include "llfloater.h"
-
-#include <vector>
-#include "llwlparamset.h"
-#include "llwlanimator.h"
-
-struct WLColorControl;
-struct WLFloatControl;
-
-/// convenience class for holding keys mapped to sliders
-struct LLWLSkyKey
-{
-public:
- std::string presetName;
- F32 time;
-};
-
-/// Menu for all of windlight's functionality.
-/// Menuing system for adjusting the atmospheric settings of the world.
-class LLFloaterDayCycle : public LLFloater
-{
-public:
-
- LLFloaterDayCycle(const LLSD& key);
- virtual ~LLFloaterDayCycle();
- /*virtual*/ BOOL postBuild();
-
- /// initialize all
- void initCallbacks(void);
-
- /// on time slider moved
- void onTimeSliderMoved(LLUICtrl* ctrl);
-
- /// what happens when you move the key frame
- void onKeyTimeMoved(LLUICtrl* ctrl);
-
- /// what happens when you change the key frame's time
- void onKeyTimeChanged(LLUICtrl* ctrl);
-
- /// if you change the combo box, change the frame
- void onKeyPresetChanged(LLUICtrl* ctrl);
-
- /// run this when user says to run the sky animation
- void onRunAnimSky(LLUICtrl* ctrl);
-
- /// run this when user says to stop the sky animation
- void onStopAnimSky(LLUICtrl* ctrl);
-
- /// if you change the combo box, change the frame
- void onTimeRateChanged(LLUICtrl* ctrl);
-
- /// add a new key on slider
- void onAddKey(LLUICtrl* ctrl);
-
- /// delete any and all reference to a preset
- void deletePreset(std::string& presetName);
-
- /// delete a key frame
- void onDeleteKey(LLUICtrl* ctrl);
-
- /// button to load day
- void onLoadDayCycle(LLUICtrl* ctrl);
-
- /// button to save day
- void onSaveDayCycle(LLUICtrl* ctrl);
-
- /// toggle for Linden time
- void onUseLindenTime(LLUICtrl* ctrl);
-
- /// sync up sliders with day cycle structure
- void syncMenu();
-
- // makes sure key slider has what's in day cycle
- void syncSliderTrack();
-
- /// makes sure day cycle data structure has what's in menu
- void syncTrack();
-
- /// add a slider to the track
- void addSliderKey(F32 time, const std::string& presetName);
-
-private:
-
- // map of sliders to parameters
- static std::map<std::string, LLWLSkyKey> sSliderToKey;
-
- static const F32 sHoursPerDay;
-};
-
-
-#endif
diff --git a/indra/newview/llfloaterdeleteenvpreset.cpp b/indra/newview/llfloaterdeleteenvpreset.cpp
new file mode 100644
index 0000000000..d08aa81cfe
--- /dev/null
+++ b/indra/newview/llfloaterdeleteenvpreset.cpp
@@ -0,0 +1,285 @@
+/**
+ * @file llfloaterdeleteenvpreset.cpp
+ * @brief Floater to delete a water / sky / day cycle preset.
+ *
+ * $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 "llfloaterdeleteenvpreset.h"
+
+// libs
+#include "llbutton.h"
+#include "llcombobox.h"
+#include "llnotificationsutil.h"
+
+// newview
+#include "lldaycyclemanager.h"
+#include "llwaterparammanager.h"
+
+static bool confirmation_callback(const LLSD& notification, const LLSD& response, boost::function<void()> cb)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option == 0)
+ {
+ cb();
+ }
+ return false;
+
+}
+
+LLFloaterDeleteEnvPreset::LLFloaterDeleteEnvPreset(const LLSD &key)
+: LLFloater(key)
+, mPresetCombo(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterDeleteEnvPreset::postBuild()
+{
+ mPresetCombo = getChild<LLComboBox>("preset_combo");
+ mPresetCombo->setCommitCallback(boost::bind(&LLFloaterDeleteEnvPreset::postPopulate, this));
+
+ getChild<LLButton>("delete")->setCommitCallback(boost::bind(&LLFloaterDeleteEnvPreset::onBtnDelete, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeleteEnvPreset::onBtnCancel, this));
+
+ // Listen to user preferences change, in which case we need to rebuild the presets list
+ // to disable the [new] current preset.
+ LLEnvManagerNew::instance().setPreferencesChangeCallback(boost::bind(&LLFloaterDeleteEnvPreset::populatePresetsList, this));
+
+ // Listen to presets addition/removal.
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterDeleteEnvPreset::populateDayCyclesList, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeleteEnvPreset::populateSkyPresetsList, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeleteEnvPreset::populateWaterPresetsList, this));
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterDeleteEnvPreset::onOpen(const LLSD& key)
+{
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string combo_label = getString(std::string("label_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the combobox label.
+ getChild<LLUICtrl>("label")->setValue(combo_label);
+
+ // Populate the combobox.
+ populatePresetsList();
+}
+
+void LLFloaterDeleteEnvPreset::onBtnDelete()
+{
+ std::string param = mKey.asString();
+ std::string preset_name = mPresetCombo->getValue().asString();
+ boost::function<void()> confirm_cb;
+
+ if (param == "water")
+ {
+ // Don't allow deleting system presets.
+ if (LLWaterParamManager::instance().isSystemPreset(preset_name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ confirm_cb = boost::bind(&LLFloaterDeleteEnvPreset::onDeleteWaterPresetConfirmation, this);
+ }
+ else if (param == "sky")
+ {
+ // Don't allow deleting presets referenced by local day cycles.
+ if (LLDayCycleManager::instance().isSkyPresetReferenced(preset_name))
+ {
+ LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", getString("msg_sky_is_referenced")));
+ return;
+ }
+
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+
+ // Don't allow deleting system presets.
+ if (wl_mgr.isSystemPreset(preset_name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ confirm_cb = boost::bind(&LLFloaterDeleteEnvPreset::onDeleteSkyPresetConfirmation, this);
+ }
+ else if (param == "day_cycle")
+ {
+ LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
+
+ // Don't allow deleting system presets.
+ if (day_mgr.isSystemPreset(preset_name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ confirm_cb = boost::bind(&LLFloaterDeleteEnvPreset::onDeleteDayCycleConfirmation, this);
+ }
+ else
+ {
+ llwarns << "Unrecognized key" << llendl;
+ }
+
+ LLSD args;
+ args["MESSAGE"] = getString("msg_confirm_deletion");
+ LLNotificationsUtil::add("GenericAlertYesCancel", args, LLSD(),
+ boost::bind(&confirmation_callback, _1, _2, confirm_cb));
+}
+
+void LLFloaterDeleteEnvPreset::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterDeleteEnvPreset::populatePresetsList()
+{
+ std::string param = mKey.asString();
+
+ if (param == "water")
+ {
+ populateWaterPresetsList();
+ }
+ else if (param == "sky")
+ {
+ populateSkyPresetsList();
+ }
+ else if (param == "day_cycle")
+ {
+ populateDayCyclesList();
+ }
+ else
+ {
+ llwarns << "Unrecognized key" << llendl;
+ }
+}
+
+void LLFloaterDeleteEnvPreset::populateWaterPresetsList()
+{
+ if (mKey.asString() != "water") return;
+
+ mPresetCombo->removeall();
+
+ std::string cur_preset;
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (!env_mgr.getUseRegionSettings())
+ {
+ cur_preset = env_mgr.getWaterPresetName();
+ }
+
+ LLWaterParamManager::preset_name_list_t presets;
+ LLWaterParamManager::instance().getUserPresetNames(presets); // list only user presets
+ for (LLWaterParamManager::preset_name_list_t::const_iterator it = presets.begin(); it != presets.end(); ++it)
+ {
+ std::string name = *it;
+
+ bool enabled = (name != cur_preset); // don't allow deleting current preset
+ mPresetCombo->add(name, ADD_BOTTOM, enabled);
+ }
+
+ postPopulate();
+}
+
+void LLFloaterDeleteEnvPreset::populateSkyPresetsList()
+{
+ if (mKey.asString() != "sky") return;
+
+ mPresetCombo->removeall();
+
+ std::string cur_preset;
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (!env_mgr.getUseRegionSettings() && env_mgr.getUseFixedSky())
+ {
+ cur_preset = env_mgr.getSkyPresetName();
+ }
+
+ LLWLParamManager::preset_name_list_t user_presets;
+ LLWLParamManager::instance().getUserPresetNames(user_presets);
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ const std::string& name = *it;
+ mPresetCombo->add(name, ADD_BOTTOM, /*enabled = */ name != cur_preset);
+ }
+
+ postPopulate();
+}
+
+void LLFloaterDeleteEnvPreset::populateDayCyclesList()
+{
+ if (mKey.asString() != "day_cycle") return;
+
+ mPresetCombo->removeall();
+
+ std::string cur_day;
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (!env_mgr.getUseRegionSettings() && env_mgr.getUseDayCycle())
+ {
+ cur_day = env_mgr.getDayCycleName();
+ }
+
+ LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
+ LLDayCycleManager::preset_name_list_t user_days;
+ day_mgr.getUserPresetNames(user_days); // list only user presets
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ const std::string& name = *it;
+ mPresetCombo->add(name, ADD_BOTTOM, name != cur_day);
+ }
+
+ postPopulate();
+}
+
+void LLFloaterDeleteEnvPreset::postPopulate()
+{
+ // Handle empty list and empty selection.
+ bool has_selection = mPresetCombo->getItemCount() > 0 && mPresetCombo->getSelectedValue().isDefined();
+
+ if (!has_selection)
+ {
+ mPresetCombo->setLabel(getString("combo_label"));
+ }
+
+ getChild<LLButton>("delete")->setEnabled(has_selection);
+}
+
+void LLFloaterDeleteEnvPreset::onDeleteDayCycleConfirmation()
+{
+ LLDayCycleManager::instance().deletePreset(mPresetCombo->getValue().asString());
+}
+
+void LLFloaterDeleteEnvPreset::onDeleteSkyPresetConfirmation()
+{
+ LLWLParamKey key(mPresetCombo->getValue().asString(), LLEnvKey::SCOPE_LOCAL);
+ LLWLParamManager::instance().removeParamSet(key, true);
+}
+
+void LLFloaterDeleteEnvPreset::onDeleteWaterPresetConfirmation()
+{
+ LLWaterParamManager::instance().removeParamSet(mPresetCombo->getValue().asString(), true);
+}
diff --git a/indra/newview/llfloaterdeleteenvpreset.h b/indra/newview/llfloaterdeleteenvpreset.h
new file mode 100644
index 0000000000..1211505273
--- /dev/null
+++ b/indra/newview/llfloaterdeleteenvpreset.h
@@ -0,0 +1,62 @@
+/**
+ * @file llfloaterdeleteenvpreset.h
+ * @brief Floater to delete a water / sky / day cycle preset.
+ *
+ * $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_LLFLOATERDELETEENVPRESET_H
+#define LL_LLFLOATERDELETEENVPRESET_H
+
+#include "llfloater.h"
+
+class LLComboBox;
+
+class LLFloaterDeleteEnvPreset : public LLFloater
+{
+ LOG_CLASS(LLFloaterDeleteEnvPreset);
+
+public:
+ LLFloaterDeleteEnvPreset(const LLSD &key);
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ void onBtnDelete();
+ void onBtnCancel();
+
+private:
+ void populatePresetsList();
+ void populateWaterPresetsList();
+ void populateSkyPresetsList();
+ void populateDayCyclesList();
+
+ void postPopulate();
+
+ void onDeleteDayCycleConfirmation();
+ void onDeleteSkyPresetConfirmation();
+ void onDeleteWaterPresetConfirmation();
+
+ LLComboBox* mPresetCombo;
+};
+
+#endif // LL_LLFLOATERDELETEENVPRESET_H
diff --git a/indra/newview/llfloatereditdaycycle.cpp b/indra/newview/llfloatereditdaycycle.cpp
new file mode 100644
index 0000000000..b63677b258
--- /dev/null
+++ b/indra/newview/llfloatereditdaycycle.cpp
@@ -0,0 +1,825 @@
+/**
+ * @file llfloatereditdaycycle.cpp
+ * @brief Floater to create or edit a day cycle
+ *
+ * $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 "llfloatereditdaycycle.h"
+
+// libs
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llloadingindicator.h"
+#include "llmultisliderctrl.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llspinctrl.h"
+#include "lltimectrl.h"
+
+// newview
+#include "llagent.h"
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
+#include "llregioninfomodel.h"
+#include "llviewerregion.h"
+#include "llwlparammanager.h"
+
+const F32 LLFloaterEditDayCycle::sHoursPerDay = 24.0f;
+
+LLFloaterEditDayCycle::LLFloaterEditDayCycle(const LLSD &key)
+: LLFloater(key)
+, mDayCycleNameEditor(NULL)
+, mDayCyclesCombo(NULL)
+, mTimeSlider(NULL)
+, mKeysSlider(NULL)
+, mSkyPresetsCombo(NULL)
+, mTimeCtrl(NULL)
+, mMakeDefaultCheckBox(NULL)
+, mSaveButton(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEditDayCycle::postBuild()
+{
+ mDayCycleNameEditor = getChild<LLLineEditor>("day_cycle_name");
+ mDayCyclesCombo = getChild<LLComboBox>("day_cycle_combo");
+
+ mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
+ mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
+ mSkyPresetsCombo = getChild<LLComboBox>("WLSkyPresets");
+ mTimeCtrl = getChild<LLTimeCtrl>("time");
+ mSaveButton = getChild<LLButton>("save");
+ mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+
+ initCallbacks();
+
+ // add the time slider
+ mTimeSlider->addSlider();
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEditDayCycle::onOpen(const LLSD& key)
+{
+ bool new_day = isNewDay();
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string hint = getString(std::string("hint_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the hint at the top.
+ getChild<LLUICtrl>("hint")->setValue(hint);
+
+ // Hide the hint to the right of the combo if we're invoked to create a new preset.
+ getChildView("note")->setVisible(!new_day);
+
+ // Switch between the day cycle presets combobox and day cycle name input field.
+ mDayCyclesCombo->setVisible(!new_day);
+ mDayCycleNameEditor->setVisible(new_day);
+
+ // TODO: Make sure only one instance of the floater exists?
+
+ reset();
+}
+
+// virtual
+void LLFloaterEditDayCycle::onClose(bool app_quitting)
+{
+ if (!app_quitting) // there's no point to change environment if we're quitting
+ {
+ LLEnvManagerNew::instance().usePrefs(); // revert changes made to current day cycle
+ }
+}
+
+// virtual
+void LLFloaterEditDayCycle::draw()
+{
+ syncTimeSlider();
+ LLFloater::draw();
+}
+
+void LLFloaterEditDayCycle::initCallbacks(void)
+{
+ mDayCycleNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleNameEdited, this), NULL);
+ mDayCyclesCombo->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleSelected, this));
+ mDayCyclesCombo->setTextEntryCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleNameEdited, this));
+ mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onTimeSliderMoved, this));
+ mKeysSlider->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onKeyTimeMoved, this));
+ mTimeCtrl->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onKeyTimeChanged, this));
+ mSkyPresetsCombo->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onKeyPresetChanged, this));
+
+ getChild<LLButton>("WLAddKey")->setClickedCallback(boost::bind(&LLFloaterEditDayCycle::onAddKey, this));
+ getChild<LLButton>("WLDeleteKey")->setClickedCallback(boost::bind(&LLFloaterEditDayCycle::onDeleteKey, this));
+
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onBtnSave, this));
+ mSaveButton->setRightMouseDownCallback(boost::bind(&LLFloaterEditDayCycle::dumpTrack, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onBtnCancel, this));
+
+ // Connect to env manager events.
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ env_mgr.setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsChange, this));
+ env_mgr.setRegionChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionChange, this));
+ env_mgr.setRegionSettingsAppliedCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsApplied, this, _1));
+
+ // Connect to day cycle manager events.
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleListChange, this));
+
+ // Connect to sky preset list changes.
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditDayCycle::onSkyPresetListChange, this));
+
+ // Connect to region info updates.
+ LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditDayCycle::onRegionInfoUpdate, this));
+}
+
+void LLFloaterEditDayCycle::syncTimeSlider()
+{
+ // set time
+ mTimeSlider->setCurSliderValue((F32)LLWLParamManager::getInstance()->mAnimator.getDayTime() * sHoursPerDay);
+}
+
+void LLFloaterEditDayCycle::loadTrack()
+{
+ // clear the slider
+ mKeysSlider->clear();
+ mSliderToKey.clear();
+
+ // add sliders
+
+ lldebugs << "Adding " << LLWLParamManager::getInstance()->mDay.mTimeMap.size() << " keys to slider" << llendl;
+
+ LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay;
+ for (std::map<F32, LLWLParamKey>::iterator it = cur_dayp.mTimeMap.begin(); it != cur_dayp.mTimeMap.end(); ++it)
+ {
+ addSliderKey(it->first * sHoursPerDay, it->second);
+ }
+
+ // set drop-down menu to match preset of currently-selected keyframe (one is automatically selected initially)
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+ if (strlen(cur_sldr.c_str()) > 0) // only do this if there is a curSldr, otherwise we put an invalid entry into the map
+ {
+ mSkyPresetsCombo->selectByValue(mSliderToKey[cur_sldr].keyframe.toStringVal());
+ }
+
+ syncTimeSlider();
+}
+
+void LLFloaterEditDayCycle::applyTrack()
+{
+ lldebugs << "Applying track (" << mSliderToKey.size() << ")" << llendl;
+
+ // if no keys, do nothing
+ if (mSliderToKey.size() == 0)
+ {
+ lldebugs << "No keys, not syncing" << llendl;
+ return;
+ }
+
+ llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+
+ // create a new animation track
+ LLWLParamManager::getInstance()->mDay.clearKeyframes();
+
+ // add the keys one by one
+ for (std::map<std::string, SliderKey>::iterator it = mSliderToKey.begin();
+ it != mSliderToKey.end(); ++it)
+ {
+ LLWLParamManager::getInstance()->mDay.addKeyframe(it->second.time / sHoursPerDay,
+ it->second.keyframe);
+ }
+
+ // set the param manager's track to the new one
+ LLWLParamManager::getInstance()->resetAnimator(
+ mTimeSlider->getCurSliderValue() / sHoursPerDay, false);
+
+ LLWLParamManager::getInstance()->mAnimator.update(
+ LLWLParamManager::getInstance()->mCurParams);
+}
+
+void LLFloaterEditDayCycle::refreshSkyPresetsList()
+{
+ // Don't allow selecting region skies for a local day cycle,
+ // because thus we may end up with invalid day cycle.
+ bool include_region_skies = getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION;
+
+ mSkyPresetsCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets;
+ LLWLParamManager::preset_name_list_t user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+ if (include_region_skies)
+ {
+ // Add region presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
+ {
+ std::string preset_name = *it;
+ std::string item_title = preset_name + " (" + getRegionName() + ")";
+ mSkyPresetsCombo->add(preset_name, LLWLParamKey(*it, LLEnvKey::SCOPE_REGION).toStringVal());
+ }
+
+ if (!region_presets.empty())
+ {
+ mSkyPresetsCombo->addSeparator();
+ }
+ }
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetsCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ if (!user_presets.empty())
+ {
+ mSkyPresetsCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetsCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ // set defaults on combo boxes
+ mSkyPresetsCombo->selectFirstItem();
+}
+
+void LLFloaterEditDayCycle::refreshDayCyclesList()
+{
+ llassert(isNewDay() == false);
+
+ mDayCyclesCombo->removeall();
+
+#if 0 // Disable editing existing day cycle until the workflow is clear enough.
+ const LLSD& region_day = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+ if (region_day.size() > 0)
+ {
+ LLWLParamKey key(getRegionName(), LLEnvKey::SCOPE_REGION);
+ mDayCyclesCombo->add(key.name, key.toLLSD());
+ mDayCyclesCombo->addSeparator();
+ }
+#endif
+
+ LLDayCycleManager::preset_name_list_t user_days, sys_days;
+ LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+
+ // Add user days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ if (user_days.size() > 0)
+ {
+ mDayCyclesCombo->addSeparator();
+ }
+
+ // Add system days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+ {
+ mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ mDayCyclesCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditDayCycle::onTimeSliderMoved()
+{
+ /// get the slider value
+ F32 val = mTimeSlider->getCurSliderValue() / sHoursPerDay;
+
+ // set the value, turn off animation
+ LLWLParamManager::getInstance()->mAnimator.setDayTime((F64)val);
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ // then call update once
+ LLWLParamManager::getInstance()->mAnimator.update(
+ LLWLParamManager::getInstance()->mCurParams);
+}
+
+void LLFloaterEditDayCycle::onKeyTimeMoved()
+{
+ if (mKeysSlider->getValue().size() == 0)
+ {
+ return;
+ }
+
+ // make sure we have a slider
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+ if (cur_sldr == "")
+ {
+ return;
+ }
+
+ F32 time24 = mKeysSlider->getCurSliderValue();
+
+ // check to see if a key exists
+ LLWLParamKey key = mSliderToKey[cur_sldr].keyframe;
+ lldebugs << "Setting key time: " << time24 << LL_ENDL;
+ mSliderToKey[cur_sldr].time = time24;
+
+ // if it exists, turn on check box
+ mSkyPresetsCombo->selectByValue(key.toStringVal());
+
+ mTimeCtrl->setTime24(time24);
+
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onKeyTimeChanged()
+{
+ // if no keys, skipped
+ if (mSliderToKey.size() == 0)
+ {
+ return;
+ }
+
+ F32 time24 = mTimeCtrl->getTime24();
+
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+ mKeysSlider->setCurSliderValue(time24, TRUE);
+ F32 time = mKeysSlider->getCurSliderValue() / sHoursPerDay;
+
+ // now set the key's time in the sliderToKey map
+ lldebugs << "Setting key time: " << time << LL_ENDL;
+ mSliderToKey[cur_sldr].time = time;
+
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onKeyPresetChanged()
+{
+ // do nothing if no sliders
+ if (mKeysSlider->getValue().size() == 0)
+ {
+ return;
+ }
+
+ // change the map
+
+ std::string stringVal = mSkyPresetsCombo->getSelectedValue().asString();
+ LLWLParamKey new_key(stringVal);
+ llassert(!new_key.name.empty());
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+
+ // if null, don't use
+ if (cur_sldr == "")
+ {
+ return;
+ }
+
+ mSliderToKey[cur_sldr].keyframe = new_key;
+
+ // Apply changes to current day cycle.
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onAddKey()
+{
+ llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+
+ S32 max_sliders;
+ LLEnvKey::EScope scope = LLEnvKey::SCOPE_LOCAL; // *TODO: editing region day cycle
+ switch (scope)
+ {
+ case LLEnvKey::SCOPE_LOCAL:
+ max_sliders = 20; // *HACK this should be LLWLPacketScrubber::MAX_LOCAL_KEY_FRAMES;
+ break;
+ case LLEnvKey::SCOPE_REGION:
+ max_sliders = 12; // *HACK this should be LLWLPacketScrubber::MAX_REGION_KEY_FRAMES;
+ break;
+ default:
+ max_sliders = (S32) mKeysSlider->getMaxValue();
+ break;
+ }
+
+ if ((S32)mSliderToKey.size() >= max_sliders)
+ {
+ LLSD args;
+ args["SCOPE"] = LLEnvManagerNew::getScopeString(scope);
+ args["MAX"] = max_sliders;
+ LLNotificationsUtil::add("DayCycleTooManyKeyframes", args, LLSD(), LLNotificationFunctorRegistry::instance().DONOTHING);
+ return;
+ }
+
+ // add the slider key
+ std::string key_val = mSkyPresetsCombo->getSelectedValue().asString();
+ LLWLParamKey sky_params(key_val);
+ llassert(!sky_params.name.empty());
+
+ F32 time = mTimeSlider->getCurSliderValue();
+ addSliderKey(time, sky_params);
+
+ // apply the change to current day cycles
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::addSliderKey(F32 time, LLWLParamKey keyframe)
+{
+ // make a slider
+ const std::string& sldr_name = mKeysSlider->addSlider(time);
+ if (sldr_name.empty())
+ {
+ return;
+ }
+
+ // set the key
+ SliderKey newKey(keyframe, mKeysSlider->getCurSliderValue());
+
+ llassert_always(sldr_name != LLStringUtil::null);
+
+ // add to map
+ mSliderToKey.insert(std::pair<std::string, SliderKey>(sldr_name, newKey));
+
+ llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+}
+
+LLWLParamKey LLFloaterEditDayCycle::getSelectedDayCycle()
+{
+ LLWLParamKey dc_key;
+
+ if (mDayCycleNameEditor->getVisible())
+ {
+ dc_key.name = mDayCycleNameEditor->getText();
+ dc_key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ LLSD combo_val = mDayCyclesCombo->getValue();
+
+ if (!combo_val.isArray()) // manually typed text
+ {
+ dc_key.name = combo_val.asString();
+ dc_key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ dc_key.fromLLSD(combo_val);
+ }
+ }
+
+ return dc_key;
+}
+
+bool LLFloaterEditDayCycle::isNewDay() const
+{
+ return mKey.asString() == "new";
+}
+
+void LLFloaterEditDayCycle::dumpTrack()
+{
+ LL_DEBUGS("Windlight") << "Dumping day cycle" << LL_ENDL;
+
+ LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay;
+ for (std::map<F32, LLWLParamKey>::iterator it = cur_dayp.mTimeMap.begin(); it != cur_dayp.mTimeMap.end(); ++it)
+ {
+ F32 time = it->first * 24.0f;
+ S32 h = (S32) time;
+ S32 m = (S32) ((time - h) * 60.0f);
+ LL_DEBUGS("Windlight") << llformat("(%.3f) %02d:%02d", time, h, m) << " => " << it->second.name << LL_ENDL;
+ }
+}
+
+void LLFloaterEditDayCycle::enableEditing(bool enable)
+{
+ mSkyPresetsCombo->setEnabled(enable);
+ mTimeCtrl->setEnabled(enable);
+ getChild<LLPanel>("day_cycle_slider_panel")->setCtrlsEnabled(enable);
+ mSaveButton->setEnabled(enable);
+ mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditDayCycle::reset()
+{
+ // clear the slider
+ mKeysSlider->clear();
+ mSliderToKey.clear();
+
+ refreshSkyPresetsList();
+
+ if (isNewDay())
+ {
+ mDayCycleNameEditor->setValue(LLSD());
+ F32 time = 0.5f * sHoursPerDay;
+ mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+ mTimeSlider->setCurSliderValue(time);
+
+ addSliderKey(time, LLWLParamKey("Default", LLEnvKey::SCOPE_LOCAL));
+ onKeyTimeMoved(); // update the time control and sky sky combo
+
+ applyTrack();
+ }
+ else
+ {
+ refreshDayCyclesList();
+
+ // Disable controls until a day cycle to edit is selected.
+ enableEditing(false);
+ }
+}
+
+void LLFloaterEditDayCycle::saveRegionDayCycle()
+{
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay; // the day cycle being edited
+
+ // Get current day cycle and the sky preset it references.
+ LLSD day_cycle = cur_dayp.asLLSD();
+ LLSD sky_map;
+ cur_dayp.getSkyMap(sky_map);
+
+ // Apply it to the region.
+ LLEnvironmentSettings new_region_settings;
+ new_region_settings.saveParams(day_cycle, sky_map, env_mgr.getRegionSettings().getWaterParams(), 0.0f);
+
+#if 1
+ LLEnvManagerNew::instance().setRegionSettings(new_region_settings);
+#else // Temporary disabled ability to upload new region settings from the Day Cycle Editor.
+ if (!LLEnvManagerNew::instance().sendRegionSettings(new_region_settings))
+ {
+ llwarns << "Error applying region environment settings" << llendl;
+ return;
+ }
+
+ setApplyProgress(true);
+#endif
+}
+
+void LLFloaterEditDayCycle::setApplyProgress(bool started)
+{
+ LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
+
+ indicator->setVisible(started);
+
+ if (started)
+ {
+ indicator->start();
+ }
+ else
+ {
+ indicator->stop();
+ }
+}
+
+bool LLFloaterEditDayCycle::getApplyProgress() const
+{
+ return getChild<LLLoadingIndicator>("progress_indicator")->getVisible();
+}
+
+void LLFloaterEditDayCycle::onDeleteKey()
+{
+ if (mSliderToKey.size() == 0)
+ {
+ return;
+ }
+ else if (mSliderToKey.size() == 1)
+ {
+ LLNotifications::instance().add("EnvCannotDeleteLastDayCycleKey", LLSD(), LLSD());
+ return;
+ }
+
+ // delete from map
+ const std::string& sldr_name = mKeysSlider->getCurSlider();
+ std::map<std::string, SliderKey>::iterator mIt = mSliderToKey.find(sldr_name);
+ mSliderToKey.erase(mIt);
+
+ mKeysSlider->deleteCurSlider();
+
+ if (mSliderToKey.size() == 0)
+ {
+ return;
+ }
+
+ const std::string& name = mKeysSlider->getCurSlider();
+ mSkyPresetsCombo->selectByValue(mSliderToKey[name].keyframe.toStringVal());
+ F32 time24 = mSliderToKey[name].time;
+
+ mTimeCtrl->setTime24(time24);
+
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onRegionSettingsChange()
+{
+ LL_DEBUGS("Windlight") << "Region settings changed" << LL_ENDL;
+
+ if (getApplyProgress()) // our region settings have being applied
+ {
+ setApplyProgress(false);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << "Changed environment preference to region settings" << llendl;
+ LLEnvManagerNew::instance().setUseRegionSettings(true);
+ }
+
+ closeFloater();
+ }
+}
+
+void LLFloaterEditDayCycle::onRegionChange()
+{
+ LL_DEBUGS("Windlight") << "Region changed" << LL_ENDL;
+
+ // If we're editing the region day cycle
+ if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
+ {
+ reset(); // undoes all unsaved changes
+ }
+}
+
+void LLFloaterEditDayCycle::onRegionSettingsApplied(bool success)
+{
+ LL_DEBUGS("Windlight") << "Region settings applied: " << success << LL_ENDL;
+
+ if (!success)
+ {
+ // stop progress indicator
+ setApplyProgress(false);
+ }
+}
+
+void LLFloaterEditDayCycle::onRegionInfoUpdate()
+{
+ LL_DEBUGS("Windlight") << "Region info updated" << LL_ENDL;
+ bool can_edit = true;
+
+ // If we've selected the region day cycle for editing.
+ if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
+ {
+ // check whether we have the access
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ enableEditing(can_edit);
+}
+
+void LLFloaterEditDayCycle::onDayCycleNameEdited()
+{
+ // Disable saving a day cycle having empty name.
+ LLWLParamKey key = getSelectedDayCycle();
+ mSaveButton->setEnabled(!key.name.empty());
+}
+
+void LLFloaterEditDayCycle::onDayCycleSelected()
+{
+ LLSD day_data;
+ LLWLParamKey dc_key = getSelectedDayCycle();
+ bool can_edit = true;
+
+ if (dc_key.scope == LLEnvKey::SCOPE_LOCAL)
+ {
+ if (!LLDayCycleManager::instance().getPreset(dc_key.name, day_data))
+ {
+ llwarns << "No day cycle named " << dc_key.name << llendl;
+ return;
+ }
+ }
+ else
+ {
+ day_data = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+ if (day_data.size() == 0)
+ {
+ llwarns << "Empty region day cycle" << llendl;
+ llassert(day_data.size() > 0);
+ return;
+ }
+
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ // We may need to add or remove region skies from the list.
+ refreshSkyPresetsList();
+
+ F32 slider_time = mTimeSlider->getCurSliderValue() / sHoursPerDay;
+ LLWLParamManager::instance().applyDayCycleParams(day_data, dc_key.scope, slider_time);
+ loadTrack();
+
+ enableEditing(can_edit);
+}
+
+void LLFloaterEditDayCycle::onBtnSave()
+{
+ LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
+ LLWLParamKey selected_day = getSelectedDayCycle();
+
+ if (selected_day.scope == LLEnvKey::SCOPE_REGION)
+ {
+ saveRegionDayCycle();
+ closeFloater();
+ return;
+ }
+
+ std::string name = selected_day.name;
+ if (name.empty())
+ {
+ // *TODO: show an alert
+ llwarns << "Empty day cycle name" << llendl;
+ return;
+ }
+
+ // Don't allow overwriting system presets.
+ if (day_mgr.isSystemPreset(name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ // Save, ask for confirmation for overwriting an existing preset.
+ if (day_mgr.presetExists(name))
+ {
+ LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditDayCycle::onSaveAnswer, this, _1, _2));
+ }
+ else
+ {
+ // new preset, hence no confirmation needed
+ onSaveConfirmed();
+ }
+}
+
+void LLFloaterEditDayCycle::onBtnCancel()
+{
+ closeFloater();
+}
+
+bool LLFloaterEditDayCycle::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ // If they choose save, do it. Otherwise, don't do anything
+ if (option == 0)
+ {
+ onSaveConfirmed();
+ }
+
+ return false;
+}
+
+void LLFloaterEditDayCycle::onSaveConfirmed()
+{
+ std::string name = getSelectedDayCycle().name;
+
+ // Save preset.
+ LLSD data = LLWLParamManager::instance().mDay.asLLSD();
+ LL_DEBUGS("Windlight") << "Saving day cycle " << name << ": " << data << LL_ENDL;
+ LLDayCycleManager::instance().savePreset(name, data);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << name << " is now the new preferred day cycle" << llendl;
+ LLEnvManagerNew::instance().setUseDayCycle(name);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterEditDayCycle::onDayCycleListChange()
+{
+ if (!isNewDay())
+ {
+ refreshDayCyclesList();
+ }
+}
+
+void LLFloaterEditDayCycle::onSkyPresetListChange()
+{
+ refreshSkyPresetsList();
+
+ // Refresh sliders from the currently visible day cycle.
+ loadTrack();
+}
+
+// static
+std::string LLFloaterEditDayCycle::getRegionName()
+{
+ return gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+}
diff --git a/indra/newview/llfloatereditdaycycle.h b/indra/newview/llfloatereditdaycycle.h
new file mode 100644
index 0000000000..e6e4fe39c1
--- /dev/null
+++ b/indra/newview/llfloatereditdaycycle.h
@@ -0,0 +1,137 @@
+/**
+ * @file llfloatereditdaycycle.h
+ * @brief Floater to create or edit a day cycle
+ *
+ * $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_LLFLOATEREDITDAYCYCLE_H
+#define LL_LLFLOATEREDITDAYCYCLE_H
+
+#include "llfloater.h"
+
+#include "llwlparammanager.h" // for LLWLParamKey
+
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
+class LLMultiSliderCtrl;
+class LLTimeCtrl;
+
+/**
+ * Floater for creating or editing a day cycle.
+ */
+class LLFloaterEditDayCycle : public LLFloater
+{
+ LOG_CLASS(LLFloaterEditDayCycle);
+
+public:
+ LLFloaterEditDayCycle(const LLSD &key);
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void draw();
+
+private:
+
+ /// sync the time slider with day cycle structure
+ void syncTimeSlider();
+
+ // makes sure key slider has what's in day cycle
+ void loadTrack();
+
+ /// makes sure day cycle data structure has what's in menu
+ void applyTrack();
+
+ /// refresh the sky presets combobox
+ void refreshSkyPresetsList();
+
+ /// refresh the day cycle combobox
+ void refreshDayCyclesList();
+
+ /// add a slider to the track
+ void addSliderKey(F32 time, LLWLParamKey keyframe);
+
+ void initCallbacks();
+ LLWLParamKey getSelectedDayCycle();
+ bool isNewDay() const;
+ void dumpTrack();
+ void enableEditing(bool enable);
+ void reset();
+ void saveRegionDayCycle();
+
+ void setApplyProgress(bool started);
+ bool getApplyProgress() const;
+
+ void onTimeSliderMoved(); /// time slider moved
+ void onKeyTimeMoved(); /// a key frame moved
+ void onKeyTimeChanged(); /// a key frame's time changed
+ void onKeyPresetChanged(); /// sky preset selected
+ void onAddKey(); /// new key added on slider
+ void onDeleteKey(); /// a key frame deleted
+
+ void onRegionSettingsChange();
+ void onRegionChange();
+ void onRegionSettingsApplied(bool success);
+ void onRegionInfoUpdate();
+
+ void onDayCycleNameEdited();
+ void onDayCycleSelected();
+ void onBtnSave();
+ void onBtnCancel();
+
+ bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+ void onSaveConfirmed();
+
+ void onDayCycleListChange();
+ void onSkyPresetListChange();
+
+ static std::string getRegionName();
+
+ /// convenience class for holding keyframes mapped to sliders
+ struct SliderKey
+ {
+ public:
+ SliderKey(LLWLParamKey kf, F32 t) : keyframe(kf), time(t) {}
+ SliderKey() : keyframe(), time(0.f) {} // Don't use this default constructor
+
+ LLWLParamKey keyframe;
+ F32 time;
+ };
+
+ static const F32 sHoursPerDay;
+
+ LLLineEditor* mDayCycleNameEditor;
+ LLComboBox* mDayCyclesCombo;
+ LLMultiSliderCtrl* mTimeSlider;
+ LLMultiSliderCtrl* mKeysSlider;
+ LLComboBox* mSkyPresetsCombo;
+ LLTimeCtrl* mTimeCtrl;
+ LLCheckBoxCtrl* mMakeDefaultCheckBox;
+ LLButton* mSaveButton;
+
+ // map of sliders to parameters
+ std::map<std::string, SliderKey> mSliderToKey;
+};
+
+#endif // LL_LLFLOATEREDITDAYCYCLE_H
diff --git a/indra/newview/llfloatereditsky.cpp b/indra/newview/llfloatereditsky.cpp
new file mode 100644
index 0000000000..abee7b5dc9
--- /dev/null
+++ b/indra/newview/llfloatereditsky.cpp
@@ -0,0 +1,923 @@
+/**
+ * @file llfloatereditsky.cpp
+ * @brief Floater to create or edit a sky preset
+ *
+ * $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 "llfloatereditsky.h"
+
+// libs
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llmultisliderctrl.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llsliderctrl.h"
+#include "lltabcontainer.h"
+#include "lltimectrl.h"
+
+// newview
+#include "llagent.h"
+#include "llcolorswatch.h"
+#include "llregioninfomodel.h"
+#include "llviewerregion.h"
+
+static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
+static const F32 WL_BLUE_HORIZON_DENSITY_SCALE = 2.0f;
+static const F32 WL_CLOUD_SLIDER_SCALE = 1.0f;
+
+static F32 sun_pos_to_time24(F32 sun_pos)
+{
+ return fmodf(sun_pos * 24.0f + 6, 24.0f);
+}
+
+static F32 time24_to_sun_pos(F32 time24)
+{
+ F32 sun_pos = fmodf((time24 - 6) / 24.0f, 1.0f);
+ if (sun_pos < 0) ++sun_pos;
+ return sun_pos;
+}
+
+LLFloaterEditSky::LLFloaterEditSky(const LLSD &key)
+: LLFloater(key)
+, mSkyPresetNameEditor(NULL)
+, mSkyPresetCombo(NULL)
+, mMakeDefaultCheckBox(NULL)
+, mSaveButton(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEditSky::postBuild()
+{
+ mSkyPresetNameEditor = getChild<LLLineEditor>("sky_preset_name");
+ mSkyPresetCombo = getChild<LLComboBox>("sky_preset_combo");
+ mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+ mSaveButton = getChild<LLButton>("save");
+
+ initCallbacks();
+
+ // Create the sun position scrubber on the slider.
+ getChild<LLMultiSliderCtrl>("WLSunPos")->addSlider(12.f);
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEditSky::onOpen(const LLSD& key)
+{
+ bool new_preset = isNewPreset();
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string hint = getString(std::string("hint_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the hint at the top.
+ getChild<LLUICtrl>("hint")->setValue(hint);
+
+ // Hide the hint to the right of the combo if we're invoked to create a new preset.
+ getChildView("note")->setVisible(!new_preset);
+
+ // Switch between the sky presets combobox and preset name input field.
+ mSkyPresetCombo->setVisible(!new_preset);
+ mSkyPresetNameEditor->setVisible(new_preset);
+
+ reset();
+}
+
+// virtual
+void LLFloaterEditSky::onClose(bool app_quitting)
+{
+ if (!app_quitting) // there's no point to change environment if we're quitting
+ {
+ LLEnvManagerNew::instance().usePrefs(); // revert changes made to current environment
+ }
+}
+
+// virtual
+void LLFloaterEditSky::draw()
+{
+ syncControls();
+ LLFloater::draw();
+}
+
+void LLFloaterEditSky::initCallbacks(void)
+{
+ // *TODO: warn user if a region environment update comes while we're editing a region sky preset.
+
+ mSkyPresetNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditSky::onSkyPresetNameEdited, this), NULL);
+ mSkyPresetCombo->setCommitCallback(boost::bind(&LLFloaterEditSky::onSkyPresetSelected, this));
+ mSkyPresetCombo->setTextEntryCallback(boost::bind(&LLFloaterEditSky::onSkyPresetNameEdited, this));
+
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditSky::onBtnSave, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditSky::onBtnCancel, this));
+
+ LLEnvManagerNew::instance().setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditSky::onRegionSettingsChange, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditSky::onSkyPresetListChange, this));
+
+ // Connect to region info updates.
+ LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditSky::onRegionInfoUpdate, this));
+
+ //-------------------------------------------------------------------------
+
+ LLWLParamManager& param_mgr = LLWLParamManager::instance();
+
+ // blue horizon
+ getChild<LLUICtrl>("WLBlueHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mBlueHorizon));
+
+ // haze density, horizon, mult, and altitude
+ getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mHazeDensity));
+ getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mHazeHorizon));
+ getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mDensityMult));
+ getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mMaxAlt));
+
+ // blue density
+ getChild<LLUICtrl>("WLBlueDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mBlueDensity));
+
+ // Lighting
+
+ // sunlight
+ getChild<LLUICtrl>("WLSunlight")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mSunlight));
+
+ // glow
+ getChild<LLUICtrl>("WLGlowR")->setCommitCallback(boost::bind(&LLFloaterEditSky::onGlowRMoved, this, _1, &param_mgr.mGlow));
+ getChild<LLUICtrl>("WLGlowB")->setCommitCallback(boost::bind(&LLFloaterEditSky::onGlowBMoved, this, _1, &param_mgr.mGlow));
+
+ // ambient
+ getChild<LLUICtrl>("WLAmbient")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mAmbient));
+
+ // time of day
+ getChild<LLUICtrl>("WLSunPos")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunMoved, this, _1, &param_mgr.mLightnorm)); // multi-slider
+ getChild<LLTimeCtrl>("WLDayTime")->setCommitCallback(boost::bind(&LLFloaterEditSky::onTimeChanged, this)); // time ctrl
+ getChild<LLUICtrl>("WLEastAngle")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunMoved, this, _1, &param_mgr.mLightnorm));
+
+ // Clouds
+
+ // Cloud Color
+ getChild<LLUICtrl>("WLCloudColor")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mCloudColor));
+
+ // Cloud
+ getChild<LLUICtrl>("WLCloudX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mCloudMain));
+ getChild<LLUICtrl>("WLCloudY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlGMoved, this, _1, &param_mgr.mCloudMain));
+ getChild<LLUICtrl>("WLCloudDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlBMoved, this, _1, &param_mgr.mCloudMain));
+
+ // Cloud Detail
+ getChild<LLUICtrl>("WLCloudDetailX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mCloudDetail));
+ getChild<LLUICtrl>("WLCloudDetailY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlGMoved, this, _1, &param_mgr.mCloudDetail));
+ getChild<LLUICtrl>("WLCloudDetailDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlBMoved, this, _1, &param_mgr.mCloudDetail));
+
+ // Cloud extras
+ getChild<LLUICtrl>("WLCloudCoverage")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mCloudCoverage));
+ getChild<LLUICtrl>("WLCloudScale")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mCloudScale));
+ getChild<LLUICtrl>("WLCloudLockX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollXToggled, this, _1));
+ getChild<LLUICtrl>("WLCloudLockY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollYToggled, this, _1));
+ getChild<LLUICtrl>("WLCloudScrollX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollXMoved, this, _1));
+ getChild<LLUICtrl>("WLCloudScrollY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollYMoved, this, _1));
+ getChild<LLUICtrl>("WLDistanceMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mDistanceMult));
+
+ // Dome
+ getChild<LLUICtrl>("WLGamma")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mWLGamma));
+ getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterEditSky::onStarAlphaMoved, this, _1));
+}
+
+//=================================================================================================
+
+void LLFloaterEditSky::syncControls()
+{
+ bool err;
+
+ LLWLParamManager * param_mgr = LLWLParamManager::getInstance();
+
+ LLWLParamSet& cur_params = param_mgr->mCurParams;
+
+ // blue horizon
+ param_mgr->mBlueHorizon = cur_params.getVector(param_mgr->mBlueHorizon.mName, err);
+ setColorSwatch("WLBlueHorizon", param_mgr->mBlueHorizon, WL_BLUE_HORIZON_DENSITY_SCALE);
+
+ // haze density, horizon, mult, and altitude
+ param_mgr->mHazeDensity = cur_params.getVector(param_mgr->mHazeDensity.mName, err);
+ childSetValue("WLHazeDensity", param_mgr->mHazeDensity.r);
+ param_mgr->mHazeHorizon = cur_params.getVector(param_mgr->mHazeHorizon.mName, err);
+ childSetValue("WLHazeHorizon", param_mgr->mHazeHorizon.r);
+ param_mgr->mDensityMult = cur_params.getVector(param_mgr->mDensityMult.mName, err);
+ childSetValue("WLDensityMult", param_mgr->mDensityMult.x *
+ param_mgr->mDensityMult.mult);
+ param_mgr->mMaxAlt = cur_params.getVector(param_mgr->mMaxAlt.mName, err);
+ childSetValue("WLMaxAltitude", param_mgr->mMaxAlt.x);
+
+ // blue density
+ param_mgr->mBlueDensity = cur_params.getVector(param_mgr->mBlueDensity.mName, err);
+ setColorSwatch("WLBlueDensity", param_mgr->mBlueDensity, WL_BLUE_HORIZON_DENSITY_SCALE);
+
+ // Lighting
+
+ // sunlight
+ param_mgr->mSunlight = cur_params.getVector(param_mgr->mSunlight.mName, err);
+ setColorSwatch("WLSunlight", param_mgr->mSunlight, WL_SUN_AMBIENT_SLIDER_SCALE);
+
+ // glow
+ param_mgr->mGlow = cur_params.getVector(param_mgr->mGlow.mName, err);
+ childSetValue("WLGlowR", 2 - param_mgr->mGlow.r / 20.0f);
+ childSetValue("WLGlowB", -param_mgr->mGlow.b / 5.0f);
+
+ // ambient
+ param_mgr->mAmbient = cur_params.getVector(param_mgr->mAmbient.mName, err);
+ setColorSwatch("WLAmbient", param_mgr->mAmbient, WL_SUN_AMBIENT_SLIDER_SCALE);
+
+ F32 time24 = sun_pos_to_time24(param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI);
+ getChild<LLMultiSliderCtrl>("WLSunPos")->setCurSliderValue(time24, TRUE);
+ getChild<LLTimeCtrl>("WLDayTime")->setTime24(time24);
+ childSetValue("WLEastAngle", param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI);
+
+ // Clouds
+
+ // Cloud Color
+ param_mgr->mCloudColor = cur_params.getVector(param_mgr->mCloudColor.mName, err);
+ setColorSwatch("WLCloudColor", param_mgr->mCloudColor, WL_CLOUD_SLIDER_SCALE);
+
+ // Cloud
+ param_mgr->mCloudMain = cur_params.getVector(param_mgr->mCloudMain.mName, err);
+ childSetValue("WLCloudX", param_mgr->mCloudMain.r);
+ childSetValue("WLCloudY", param_mgr->mCloudMain.g);
+ childSetValue("WLCloudDensity", param_mgr->mCloudMain.b);
+
+ // Cloud Detail
+ param_mgr->mCloudDetail = cur_params.getVector(param_mgr->mCloudDetail.mName, err);
+ childSetValue("WLCloudDetailX", param_mgr->mCloudDetail.r);
+ childSetValue("WLCloudDetailY", param_mgr->mCloudDetail.g);
+ childSetValue("WLCloudDetailDensity", param_mgr->mCloudDetail.b);
+
+ // Cloud extras
+ param_mgr->mCloudCoverage = cur_params.getVector(param_mgr->mCloudCoverage.mName, err);
+ param_mgr->mCloudScale = cur_params.getVector(param_mgr->mCloudScale.mName, err);
+ childSetValue("WLCloudCoverage", param_mgr->mCloudCoverage.x);
+ childSetValue("WLCloudScale", param_mgr->mCloudScale.x);
+
+ // cloud scrolling
+ bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX();
+ bool lockY = !param_mgr->mCurParams.getEnableCloudScrollY();
+ childSetValue("WLCloudLockX", lockX);
+ childSetValue("WLCloudLockY", lockY);
+
+ // disable if locked, enable if not
+ if (lockX)
+ {
+ childDisable("WLCloudScrollX");
+ }
+ else
+ {
+ childEnable("WLCloudScrollX");
+ }
+ if (lockY)
+ {
+ childDisable("WLCloudScrollY");
+ }
+ else
+ {
+ childEnable("WLCloudScrollY");
+ }
+
+ // *HACK cloud scrolling is off my an additive of 10
+ childSetValue("WLCloudScrollX", param_mgr->mCurParams.getCloudScrollX() - 10.0f);
+ childSetValue("WLCloudScrollY", param_mgr->mCurParams.getCloudScrollY() - 10.0f);
+
+ param_mgr->mDistanceMult = cur_params.getVector(param_mgr->mDistanceMult.mName, err);
+ childSetValue("WLDistanceMult", param_mgr->mDistanceMult.x);
+
+ // Tweak extras
+
+ param_mgr->mWLGamma = cur_params.getVector(param_mgr->mWLGamma.mName, err);
+ childSetValue("WLGamma", param_mgr->mWLGamma.x);
+
+ childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness());
+}
+
+void LLFloaterEditSky::setColorSwatch(const std::string& name, const WLColorControl& from_ctrl, F32 k)
+{
+ // Set the value, dividing it by <k> first.
+ LLVector4 color_vec = from_ctrl;
+ getChild<LLColorSwatchCtrl>(name)->set(LLColor4(color_vec / k));
+}
+
+// color control callbacks
+void LLFloaterEditSky::onColorControlMoved(LLUICtrl* ctrl, WLColorControl* color_ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
+ LLVector4 color_vec(swatch->get().mV);
+
+ // Set intensity to maximum of the RGB values.
+ color_vec.mV[3] = llmax(color_vec.mV[0], llmax(color_vec.mV[1], color_vec.mV[2]));
+
+ // Multiply RGB values by the appropriate factor.
+ F32 k = WL_CLOUD_SLIDER_SCALE;
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ k = WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ k = WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ color_vec *= k; // intensity isn't affected by the multiplication
+
+ // Apply the new RGBI value.
+ *color_ctrl = color_vec;
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onColorControlRMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ color_ctrl->r = sldr_ctrl->getValueF32();
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ color_ctrl->r *= WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ color_ctrl->r *= WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ // move i if it's the max
+ if (color_ctrl->r >= color_ctrl->g && color_ctrl->r >= color_ctrl->b && color_ctrl->hasSliderName)
+ {
+ color_ctrl->i = color_ctrl->r;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ childSetValue(name, color_ctrl->r / WL_SUN_AMBIENT_SLIDER_SCALE);
+ }
+ else if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ childSetValue(name, color_ctrl->r / WL_BLUE_HORIZON_DENSITY_SCALE);
+ }
+ else
+ {
+ childSetValue(name, color_ctrl->r);
+ }
+ }
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onColorControlGMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ color_ctrl->g = sldr_ctrl->getValueF32();
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ color_ctrl->g *= WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ color_ctrl->g *= WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ // move i if it's the max
+ if (color_ctrl->g >= color_ctrl->r && color_ctrl->g >= color_ctrl->b && color_ctrl->hasSliderName)
+ {
+ color_ctrl->i = color_ctrl->g;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ childSetValue(name, color_ctrl->g / WL_SUN_AMBIENT_SLIDER_SCALE);
+ }
+ else if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ childSetValue(name, color_ctrl->g / WL_BLUE_HORIZON_DENSITY_SCALE);
+ }
+ else
+ {
+ childSetValue(name, color_ctrl->g);
+ }
+ }
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onColorControlBMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ color_ctrl->b = sldr_ctrl->getValueF32();
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ color_ctrl->b *= WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ color_ctrl->b *= WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ // move i if it's the max
+ if (color_ctrl->b >= color_ctrl->r && color_ctrl->b >= color_ctrl->g && color_ctrl->hasSliderName)
+ {
+ color_ctrl->i = color_ctrl->b;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ childSetValue(name, color_ctrl->b / WL_SUN_AMBIENT_SLIDER_SCALE);
+ }
+ else if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ childSetValue(name, color_ctrl->b / WL_BLUE_HORIZON_DENSITY_SCALE);
+ }
+ else
+ {
+ childSetValue(name, color_ctrl->b);
+ }
+ }
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+/// GLOW SPECIFIC CODE
+void LLFloaterEditSky::onGlowRMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ // scaled by 20
+ color_ctrl->r = (2 - sldr_ctrl->getValueF32()) * 20;
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+/// \NOTE that we want NEGATIVE (-) B
+void LLFloaterEditSky::onGlowBMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ /// \NOTE that we want NEGATIVE (-) B and NOT by 20 as 20 is too big
+ color_ctrl->b = -sldr_ctrl->getValueF32() * 5;
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onFloatControlMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLFloatControl * floatControl = static_cast<WLFloatControl *>(userdata);
+
+ floatControl->x = sldr_ctrl->getValueF32() / floatControl->mult;
+
+ floatControl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+
+// Lighting callbacks
+
+// time of day
+void LLFloaterEditSky::onSunMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLMultiSliderCtrl* sun_msldr = getChild<LLMultiSliderCtrl>("WLSunPos");
+ LLSliderCtrl* east_sldr = getChild<LLSliderCtrl>("WLEastAngle");
+ LLTimeCtrl* time_ctrl = getChild<LLTimeCtrl>("WLDayTime");
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ F32 time24 = sun_msldr->getCurSliderValue();
+ time_ctrl->setTime24(time24); // sync the time ctrl with the new sun position
+
+ // get the two angles
+ LLWLParamManager * param_mgr = LLWLParamManager::getInstance();
+
+ param_mgr->mCurParams.setSunAngle(F_TWO_PI * time24_to_sun_pos(time24));
+ param_mgr->mCurParams.setEastAngle(F_TWO_PI * east_sldr->getValueF32());
+
+ // set the sun vector
+ color_ctrl->r = -sin(param_mgr->mCurParams.getEastAngle()) *
+ cos(param_mgr->mCurParams.getSunAngle());
+ color_ctrl->g = sin(param_mgr->mCurParams.getSunAngle());
+ color_ctrl->b = cos(param_mgr->mCurParams.getEastAngle()) *
+ cos(param_mgr->mCurParams.getSunAngle());
+ color_ctrl->i = 1.f;
+
+ color_ctrl->update(param_mgr->mCurParams);
+ param_mgr->propagateParameters();
+}
+
+void LLFloaterEditSky::onTimeChanged()
+{
+ F32 time24 = getChild<LLTimeCtrl>("WLDayTime")->getTime24();
+ getChild<LLMultiSliderCtrl>("WLSunPos")->setCurSliderValue(time24, TRUE);
+ onSunMoved(getChild<LLUICtrl>("WLSunPos"), &LLWLParamManager::instance().mLightnorm);
+}
+
+void LLFloaterEditSky::onStarAlphaMoved(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ LLWLParamManager::getInstance()->mCurParams.setStarBrightness(sldr_ctrl->getValueF32());
+}
+
+// Clouds
+void LLFloaterEditSky::onCloudScrollXMoved(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ // *HACK all cloud scrolling is off by an additive of 10.
+ LLWLParamManager::getInstance()->mCurParams.setCloudScrollX(sldr_ctrl->getValueF32() + 10.0f);
+}
+
+void LLFloaterEditSky::onCloudScrollYMoved(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ // *HACK all cloud scrolling is off by an additive of 10.
+ LLWLParamManager::getInstance()->mCurParams.setCloudScrollY(sldr_ctrl->getValueF32() + 10.0f);
+}
+
+void LLFloaterEditSky::onCloudScrollXToggled(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLCheckBoxCtrl* cb_ctrl = static_cast<LLCheckBoxCtrl*>(ctrl);
+
+ bool lock = cb_ctrl->get();
+ LLWLParamManager::getInstance()->mCurParams.setEnableCloudScrollX(!lock);
+
+ LLSliderCtrl* sldr = getChild<LLSliderCtrl>("WLCloudScrollX");
+
+ if (cb_ctrl->get())
+ {
+ sldr->setEnabled(false);
+ }
+ else
+ {
+ sldr->setEnabled(true);
+ }
+
+}
+
+void LLFloaterEditSky::onCloudScrollYToggled(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLCheckBoxCtrl* cb_ctrl = static_cast<LLCheckBoxCtrl*>(ctrl);
+ bool lock = cb_ctrl->get();
+ LLWLParamManager::getInstance()->mCurParams.setEnableCloudScrollY(!lock);
+
+ LLSliderCtrl* sldr = getChild<LLSliderCtrl>("WLCloudScrollY");
+
+ if (cb_ctrl->get())
+ {
+ sldr->setEnabled(false);
+ }
+ else
+ {
+ sldr->setEnabled(true);
+ }
+}
+
+//=================================================================================================
+
+void LLFloaterEditSky::reset()
+{
+ if (isNewPreset())
+ {
+ mSkyPresetNameEditor->setValue(LLSD());
+ mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+ }
+ else
+ {
+ refreshSkyPresetsList();
+
+ // Disable controls until a sky preset to edit is selected.
+ enableEditing(false);
+ }
+}
+
+bool LLFloaterEditSky::isNewPreset() const
+{
+ return mKey.asString() == "new";
+}
+
+void LLFloaterEditSky::refreshSkyPresetsList()
+{
+ mSkyPresetCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets, user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+#if 0 // Disable editing region skies until the workflow is clear enough.
+ // Add region presets.
+ std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
+ {
+ std::string item_title = *it + " (" + region_name + ")";
+ mSkyPresetCombo->add(item_title, LLWLParamKey(*it, LLEnvKey::SCOPE_REGION).toLLSD());
+ }
+ if (region_presets.size() > 0)
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+#endif
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+ if (user_presets.size() > 0)
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ mSkyPresetCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditSky::enableEditing(bool enable)
+{
+ // Enable/disable the tab and their contents.
+ LLTabContainer* tab_container = getChild<LLTabContainer>("WindLight Tabs");
+ tab_container->setEnabled(enable);
+ for (S32 i = 0; i < tab_container->getTabCount(); ++i)
+ {
+ tab_container->enableTabButton(i, enable);
+ tab_container->getPanelByIndex(i)->setCtrlsEnabled(enable);
+ }
+
+ // Enable/disable saving.
+ mSaveButton->setEnabled(enable);
+ mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditSky::saveRegionSky()
+{
+ LLWLParamKey key(getSelectedSkyPreset());
+ llassert(key.scope == LLEnvKey::SCOPE_REGION);
+
+ LL_DEBUGS("Windlight") << "Saving region sky preset: " << key.name << llendl;
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+ wl_mgr.mCurParams.mName = key.name;
+ wl_mgr.setParamSet(key, wl_mgr.mCurParams);
+
+ // *TODO: save to cached region settings.
+ LL_WARNS("Windlight") << "Saving region sky is not fully implemented yet" << LL_ENDL;
+}
+
+LLWLParamKey LLFloaterEditSky::getSelectedSkyPreset()
+{
+ LLWLParamKey key;
+
+ if (mSkyPresetNameEditor->getVisible())
+ {
+ key.name = mSkyPresetNameEditor->getText();
+ key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ LLSD combo_val = mSkyPresetCombo->getValue();
+
+ if (!combo_val.isArray()) // manually typed text
+ {
+ key.name = combo_val.asString();
+ key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ key.fromLLSD(combo_val);
+ }
+ }
+
+ return key;
+}
+
+void LLFloaterEditSky::onSkyPresetNameEdited()
+{
+ // Disable saving a sky preset having empty name.
+ LLWLParamKey key = getSelectedSkyPreset();
+ mSaveButton->setEnabled(!key.name.empty());
+}
+
+void LLFloaterEditSky::onSkyPresetSelected()
+{
+ LLWLParamKey key = getSelectedSkyPreset();
+ LLWLParamSet sky_params;
+
+ if (!LLWLParamManager::instance().getParamSet(key, sky_params))
+ {
+ // Manually entered string?
+ LL_WARNS("Windlight") << "No sky preset named " << key.toString() << LL_ENDL;
+ return;
+ }
+
+ LLEnvManagerNew::instance().useSkyParams(sky_params.getAll());
+ //syncControls();
+
+ bool can_edit = (key.scope == LLEnvKey::SCOPE_LOCAL || LLEnvManagerNew::canEditRegionSettings());
+ enableEditing(can_edit);
+
+ mMakeDefaultCheckBox->setEnabled(key.scope == LLEnvKey::SCOPE_LOCAL);
+}
+
+bool LLFloaterEditSky::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ // If they choose save, do it. Otherwise, don't do anything
+ if (option == 0)
+ {
+ onSaveConfirmed();
+ }
+
+ return false;
+}
+
+void LLFloaterEditSky::onSaveConfirmed()
+{
+ // Save current params to the selected preset.
+ LLWLParamKey key(getSelectedSkyPreset());
+
+ LL_DEBUGS("Windlight") << "Saving sky preset " << key.name << LL_ENDL;
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+ if (wl_mgr.hasParamSet(key))
+ {
+ wl_mgr.setParamSet(key, wl_mgr.mCurParams);
+ }
+ else
+ {
+ wl_mgr.addParamSet(key, wl_mgr.mCurParams);
+ }
+
+ wl_mgr.savePreset(key);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << key.name << " is now the new preferred sky preset" << llendl;
+ LLEnvManagerNew::instance().setUseSkyPreset(key.name);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterEditSky::onBtnSave()
+{
+ LLWLParamKey selected_sky = getSelectedSkyPreset();
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+
+ if (selected_sky.scope == LLEnvKey::SCOPE_REGION)
+ {
+ saveRegionSky();
+ closeFloater();
+ return;
+ }
+
+ std::string name = selected_sky.name;
+ if (name.empty())
+ {
+ // *TODO: show an alert
+ llwarns << "Empty sky preset name" << llendl;
+ return;
+ }
+
+ // Don't allow overwriting system presets.
+ if (wl_mgr.isSystemPreset(name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ // Save, ask for confirmation for overwriting an existing preset.
+ if (wl_mgr.hasParamSet(selected_sky))
+ {
+ LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditSky::onSaveAnswer, this, _1, _2));
+ }
+ else
+ {
+ // new preset, hence no confirmation needed
+ onSaveConfirmed();
+ }
+}
+
+void LLFloaterEditSky::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterEditSky::onSkyPresetListChange()
+{
+ LLWLParamKey key = getSelectedSkyPreset(); // preset being edited
+ if (!LLWLParamManager::instance().hasParamSet(key))
+ {
+ // Preset we've been editing doesn't exist anymore. Close the floater.
+ closeFloater(false);
+ }
+ else
+ {
+ // A new preset has been added.
+ // Refresh the presets list, though it may not make sense as the floater is about to be closed.
+ refreshSkyPresetsList();
+ }
+}
+
+void LLFloaterEditSky::onRegionSettingsChange()
+{
+ // If creating a new sky, don't bother.
+ if (isNewPreset())
+ {
+ return;
+ }
+
+ if (getSelectedSkyPreset().scope == LLEnvKey::SCOPE_REGION) // if editing a region sky
+ {
+ // reset the floater to its initial state
+ reset();
+
+ // *TODO: Notify user?
+ }
+ else // editing a local sky
+ {
+ refreshSkyPresetsList();
+ }
+}
+
+void LLFloaterEditSky::onRegionInfoUpdate()
+{
+ bool can_edit = true;
+
+ // If we've selected a region sky preset for editing.
+ if (getSelectedSkyPreset().scope == LLEnvKey::SCOPE_REGION)
+ {
+ // check whether we have the access
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ enableEditing(can_edit);
+}
diff --git a/indra/newview/llfloatereditsky.h b/indra/newview/llfloatereditsky.h
new file mode 100644
index 0000000000..a06c4fc5fa
--- /dev/null
+++ b/indra/newview/llfloatereditsky.h
@@ -0,0 +1,113 @@
+/**
+ * @file llfloatereditsky.h
+ * @brief Floater to create or edit a sky preset
+ *
+ * $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_LLFLOATEREDITSKY_H
+#define LL_LLFLOATEREDITSKY_H
+
+#include "llfloater.h"
+#include "llwlparammanager.h"
+
+class LLButton;
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
+
+/**
+ * Floater for creating or editing a sky preset.
+ */
+class LLFloaterEditSky : public LLFloater
+{
+ LOG_CLASS(LLFloaterEditSky);
+
+public:
+ LLFloaterEditSky(const LLSD &key);
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void draw();
+
+private:
+ void initCallbacks(void);
+
+ //-- WL stuff begins ------------------------------------------------------
+
+ void syncControls(); /// sync up sliders with parameters
+
+ void setColorSwatch(const std::string& name, const WLColorControl& from_ctrl, F32 k);
+
+ // general purpose callbacks for dealing with color controllers
+ void onColorControlMoved(LLUICtrl* ctrl, WLColorControl* color_ctrl);
+ void onColorControlRMoved(LLUICtrl* ctrl, void* userdata);
+ void onColorControlGMoved(LLUICtrl* ctrl, void* userdata);
+ void onColorControlBMoved(LLUICtrl* ctrl, void* userdata);
+ void onFloatControlMoved(LLUICtrl* ctrl, void* userdata);
+
+ // lighting callbacks for glow
+ void onGlowRMoved(LLUICtrl* ctrl, void* userdata);
+ void onGlowBMoved(LLUICtrl* ctrl, void* userdata);
+
+ // lighting callbacks for sun
+ void onSunMoved(LLUICtrl* ctrl, void* userdata);
+ void onTimeChanged();
+
+ // for handling when the star slider is moved to adjust the alpha
+ void onStarAlphaMoved(LLUICtrl* ctrl);
+
+ // handle cloud scrolling
+ void onCloudScrollXMoved(LLUICtrl* ctrl);
+ void onCloudScrollYMoved(LLUICtrl* ctrl);
+ void onCloudScrollXToggled(LLUICtrl* ctrl);
+ void onCloudScrollYToggled(LLUICtrl* ctrl);
+
+ //-- WL stuff ends --------------------------------------------------------
+
+ void reset(); /// reset the floater to its initial state
+ bool isNewPreset() const;
+ void refreshSkyPresetsList();
+ void enableEditing(bool enable);
+ void saveRegionSky();
+ LLWLParamKey getSelectedSkyPreset();
+
+ void onSkyPresetNameEdited();
+ void onSkyPresetSelected();
+ bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+ void onSaveConfirmed();
+
+ void onBtnSave();
+ void onBtnCancel();
+
+ void onSkyPresetListChange();
+ void onRegionSettingsChange();
+ void onRegionInfoUpdate();
+
+ LLLineEditor* mSkyPresetNameEditor;
+ LLComboBox* mSkyPresetCombo;
+ LLCheckBoxCtrl* mMakeDefaultCheckBox;
+ LLButton* mSaveButton;
+};
+
+#endif // LL_LLFLOATEREDITSKY_H
diff --git a/indra/newview/llfloatereditwater.cpp b/indra/newview/llfloatereditwater.cpp
new file mode 100644
index 0000000000..64cfc4054f
--- /dev/null
+++ b/indra/newview/llfloatereditwater.cpp
@@ -0,0 +1,772 @@
+/**
+ * @file llfloatereditwater.cpp
+ * @brief Floater to create or edit a water preset
+ *
+ * $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 "llfloatereditwater.h"
+
+// libs
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcolorswatch.h"
+#include "llcombobox.h"
+//#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llsliderctrl.h"
+#include "lltexturectrl.h"
+
+// newview
+#include "llagent.h"
+#include "llregioninfomodel.h"
+#include "llviewerregion.h"
+#include "llwaterparammanager.h"
+
+#undef max // Fixes a Windows compiler error
+
+LLFloaterEditWater::LLFloaterEditWater(const LLSD &key)
+: LLFloater(key)
+, mWaterPresetNameEditor(NULL)
+, mWaterPresetCombo(NULL)
+, mMakeDefaultCheckBox(NULL)
+, mSaveButton(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEditWater::postBuild()
+{
+ mWaterPresetNameEditor = getChild<LLLineEditor>("water_preset_name");
+ mWaterPresetCombo = getChild<LLComboBox>("water_preset_combo");
+ mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+ mSaveButton = getChild<LLButton>("save");
+
+ initCallbacks();
+ refreshWaterPresetsList();
+ syncControls();
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEditWater::onOpen(const LLSD& key)
+{
+ bool new_preset = isNewPreset();
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string hint = getString(std::string("hint_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the hint at the top.
+ getChild<LLUICtrl>("hint")->setValue(hint);
+
+ // Hide the hint to the right of the combo if we're invoked to create a new preset.
+ getChildView("note")->setVisible(!new_preset);
+
+ // Switch between the water presets combobox and preset name input field.
+ mWaterPresetCombo->setVisible(!new_preset);
+ mWaterPresetNameEditor->setVisible(new_preset);
+
+ reset();
+}
+
+// virtual
+void LLFloaterEditWater::onClose(bool app_quitting)
+{
+ if (!app_quitting) // there's no point to change environment if we're quitting
+ {
+ LLEnvManagerNew::instance().usePrefs(); // revert changes made to current environment
+ }
+}
+
+// virtual
+void LLFloaterEditWater::draw()
+{
+ syncControls();
+ LLFloater::draw();
+}
+
+void LLFloaterEditWater::initCallbacks(void)
+{
+ mWaterPresetNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditWater::onWaterPresetNameEdited, this), NULL);
+ mWaterPresetCombo->setCommitCallback(boost::bind(&LLFloaterEditWater::onWaterPresetSelected, this));
+ mWaterPresetCombo->setTextEntryCallback(boost::bind(&LLFloaterEditWater::onWaterPresetNameEdited, this));
+
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditWater::onBtnSave, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditWater::onBtnCancel, this));
+
+ LLEnvManagerNew::instance().setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditWater::onRegionSettingsChange, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditWater::onWaterPresetListChange, this));
+
+ // Connect to region info updates.
+ LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditWater::onRegionInfoUpdate, this));
+
+ //-------------------------------------------------------------------------
+
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+
+ getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterEditWater::onWaterFogColorMoved, this, _1, &water_mgr.mFogColor));
+ //getChild<LLUICtrl>("WaterGlow")->setCommitCallback(boost::bind(&LLFloaterEditWater::onColorControlAMoved, this, _1, &water_mgr.mFogColor));
+
+ // fog density
+ getChild<LLUICtrl>("WaterFogDensity")->setCommitCallback(boost::bind(&LLFloaterEditWater::onExpFloatControlMoved, this, _1, &water_mgr.mFogDensity));
+ getChild<LLUICtrl>("WaterUnderWaterFogMod")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mUnderWaterFogMod));
+
+ // blue density
+ getChild<LLUICtrl>("WaterNormalScaleX")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector3ControlXMoved, this, _1, &water_mgr.mNormalScale));
+ getChild<LLUICtrl>("WaterNormalScaleY")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector3ControlYMoved, this, _1, &water_mgr.mNormalScale));
+ getChild<LLUICtrl>("WaterNormalScaleZ")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector3ControlZMoved, this, _1, &water_mgr.mNormalScale));
+
+ // fresnel
+ getChild<LLUICtrl>("WaterFresnelScale")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mFresnelScale));
+ getChild<LLUICtrl>("WaterFresnelOffset")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mFresnelOffset));
+
+ // scale above/below
+ getChild<LLUICtrl>("WaterScaleAbove")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mScaleAbove));
+ getChild<LLUICtrl>("WaterScaleBelow")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mScaleBelow));
+
+ // blur mult
+ getChild<LLUICtrl>("WaterBlurMult")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mBlurMultiplier));
+
+ // wave direction
+ getChild<LLUICtrl>("WaterWave1DirX")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlXMoved, this, _1, &water_mgr.mWave1Dir));
+ getChild<LLUICtrl>("WaterWave1DirY")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlYMoved, this, _1, &water_mgr.mWave1Dir));
+ getChild<LLUICtrl>("WaterWave2DirX")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlXMoved, this, _1, &water_mgr.mWave2Dir));
+ getChild<LLUICtrl>("WaterWave2DirY")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlYMoved, this, _1, &water_mgr.mWave2Dir));
+
+ LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("WaterNormalMap");
+ texture_ctrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL);
+ texture_ctrl->setCommitCallback(boost::bind(&LLFloaterEditWater::onNormalMapPicked, this, _1));
+}
+
+//=============================================================================
+
+void LLFloaterEditWater::syncControls()
+{
+ // *TODO: Eliminate slow getChild() calls.
+
+ bool err;
+
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+
+ LLWaterParamSet& current_params = water_mgr.mCurParams;
+
+ // blue horizon
+ water_mgr.mFogColor = current_params.getVector4(water_mgr.mFogColor.mName, err);
+
+ LLColor4 col = water_mgr.getFogColor();
+ //getChild<LLUICtrl>("WaterGlow")->setValue(col.mV[3]);
+ col.mV[3] = 1.0f;
+ getChild<LLColorSwatchCtrl>("WaterFogColor")->set(col);
+
+ // fog and wavelets
+ water_mgr.mFogDensity.mExp =
+ log(current_params.getFloat(water_mgr.mFogDensity.mName, err)) /
+ log(water_mgr.mFogDensity.mBase);
+ water_mgr.setDensitySliderValue(water_mgr.mFogDensity.mExp);
+ getChild<LLUICtrl>("WaterFogDensity")->setValue(water_mgr.mFogDensity.mExp);
+
+ water_mgr.mUnderWaterFogMod.mX =
+ current_params.getFloat(water_mgr.mUnderWaterFogMod.mName, err);
+ getChild<LLUICtrl>("WaterUnderWaterFogMod")->setValue(water_mgr.mUnderWaterFogMod.mX);
+
+ water_mgr.mNormalScale = current_params.getVector3(water_mgr.mNormalScale.mName, err);
+ getChild<LLUICtrl>("WaterNormalScaleX")->setValue(water_mgr.mNormalScale.mX);
+ getChild<LLUICtrl>("WaterNormalScaleY")->setValue(water_mgr.mNormalScale.mY);
+ getChild<LLUICtrl>("WaterNormalScaleZ")->setValue(water_mgr.mNormalScale.mZ);
+
+ // Fresnel
+ water_mgr.mFresnelScale.mX = current_params.getFloat(water_mgr.mFresnelScale.mName, err);
+ getChild<LLUICtrl>("WaterFresnelScale")->setValue(water_mgr.mFresnelScale.mX);
+ water_mgr.mFresnelOffset.mX = current_params.getFloat(water_mgr.mFresnelOffset.mName, err);
+ getChild<LLUICtrl>("WaterFresnelOffset")->setValue(water_mgr.mFresnelOffset.mX);
+
+ // Scale Above/Below
+ water_mgr.mScaleAbove.mX = current_params.getFloat(water_mgr.mScaleAbove.mName, err);
+ getChild<LLUICtrl>("WaterScaleAbove")->setValue(water_mgr.mScaleAbove.mX);
+ water_mgr.mScaleBelow.mX = current_params.getFloat(water_mgr.mScaleBelow.mName, err);
+ getChild<LLUICtrl>("WaterScaleBelow")->setValue(water_mgr.mScaleBelow.mX);
+
+ // blur mult
+ water_mgr.mBlurMultiplier.mX = current_params.getFloat(water_mgr.mBlurMultiplier.mName, err);
+ getChild<LLUICtrl>("WaterBlurMult")->setValue(water_mgr.mBlurMultiplier.mX);
+
+ // wave directions
+ water_mgr.mWave1Dir = current_params.getVector2(water_mgr.mWave1Dir.mName, err);
+ getChild<LLUICtrl>("WaterWave1DirX")->setValue(water_mgr.mWave1Dir.mX);
+ getChild<LLUICtrl>("WaterWave1DirY")->setValue(water_mgr.mWave1Dir.mY);
+
+ water_mgr.mWave2Dir = current_params.getVector2(water_mgr.mWave2Dir.mName, err);
+ getChild<LLUICtrl>("WaterWave2DirX")->setValue(water_mgr.mWave2Dir.mX);
+ getChild<LLUICtrl>("WaterWave2DirY")->setValue(water_mgr.mWave2Dir.mY);
+
+ LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
+ textCtrl->setImageAssetID(water_mgr.getNormalMapID());
+}
+
+// color control callbacks
+void LLFloaterEditWater::onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mR = sldr_ctrl->getValueF32();
+
+ // move i if it's the max
+ if (color_ctrl->mR >= color_ctrl->mG
+ && color_ctrl->mR >= color_ctrl->mB
+ && color_ctrl->mHasSliderName)
+ {
+ color_ctrl->mI = color_ctrl->mR;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ getChild<LLUICtrl>(name)->setValue(color_ctrl->mR);
+ }
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mG = sldr_ctrl->getValueF32();
+
+ // move i if it's the max
+ if (color_ctrl->mG >= color_ctrl->mR
+ && color_ctrl->mG >= color_ctrl->mB
+ && color_ctrl->mHasSliderName)
+ {
+ color_ctrl->mI = color_ctrl->mG;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ getChild<LLUICtrl>(name)->setValue(color_ctrl->mG);
+
+ }
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mB = sldr_ctrl->getValueF32();
+
+ // move i if it's the max
+ if (color_ctrl->mB >= color_ctrl->mR
+ && color_ctrl->mB >= color_ctrl->mG
+ && color_ctrl->mHasSliderName)
+ {
+ color_ctrl->mI = color_ctrl->mB;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ getChild<LLUICtrl>(name)->setValue(color_ctrl->mB);
+ }
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mA = sldr_ctrl->getValueF32();
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+
+void LLFloaterEditWater::onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mI = sldr_ctrl->getValueF32();
+
+ // only for sliders where we pass a name
+ if (color_ctrl->mHasSliderName)
+ {
+ // set it to the top
+ F32 maxVal = std::max(std::max(color_ctrl->mR, color_ctrl->mG), color_ctrl->mB);
+ F32 iVal;
+
+ iVal = color_ctrl->mI;
+
+ // get the names of the other sliders
+ std::string rName = color_ctrl->mSliderName;
+ rName.append("R");
+ std::string gName = color_ctrl->mSliderName;
+ gName.append("G");
+ std::string bName = color_ctrl->mSliderName;
+ bName.append("B");
+
+ // handle if at 0
+ if (iVal == 0)
+ {
+ color_ctrl->mR = 0;
+ color_ctrl->mG = 0;
+ color_ctrl->mB = 0;
+
+ // if all at the start
+ // set them all to the intensity
+ }
+ else if (maxVal == 0)
+ {
+ color_ctrl->mR = iVal;
+ color_ctrl->mG = iVal;
+ color_ctrl->mB = iVal;
+ }
+ else
+ {
+ // add delta amounts to each
+ F32 delta = (iVal - maxVal) / maxVal;
+ color_ctrl->mR *= (1.0f + delta);
+ color_ctrl->mG *= (1.0f + delta);
+ color_ctrl->mB *= (1.0f + delta);
+ }
+
+ // set the sliders to the new vals
+ getChild<LLUICtrl>(rName)->setValue(color_ctrl->mR);
+ getChild<LLUICtrl>(gName)->setValue(color_ctrl->mG);
+ getChild<LLUICtrl>(bName)->setValue(color_ctrl->mB);
+ }
+
+ // now update the current parameters and send them to shaders
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mX = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mY = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mZ = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+
+// vector control callbacks
+void LLFloaterEditWater::onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mX = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mY = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onFloatControlMoved(LLUICtrl* ctrl, WaterFloatControl* floatControl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ floatControl->mX = sldr_ctrl->getValueF32() / floatControl->mMult;
+
+ floatControl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onExpFloatControlMoved(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ F32 val = sldr_ctrl->getValueF32();
+ expFloatControl->mExp = val;
+ LLWaterParamManager::getInstance()->setDensitySliderValue(val);
+
+ expFloatControl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
+ *color_ctrl = swatch->get();
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onNormalMapPicked(LLUICtrl* ctrl)
+{
+ LLTextureCtrl* textCtrl = static_cast<LLTextureCtrl*>(ctrl);
+ LLUUID textID = textCtrl->getImageAssetID();
+ LLWaterParamManager::getInstance()->setNormalMapID(textID);
+}
+
+//=============================================================================
+
+void LLFloaterEditWater::reset()
+{
+ if (isNewPreset())
+ {
+ mWaterPresetNameEditor->setValue(LLSD());
+ mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+ }
+ else
+ {
+ refreshWaterPresetsList();
+
+ // Disable controls until a water preset to edit is selected.
+ enableEditing(false);
+ }
+}
+
+bool LLFloaterEditWater::isNewPreset() const
+{
+ return mKey.asString() == "new";
+}
+
+void LLFloaterEditWater::refreshWaterPresetsList()
+{
+ mWaterPresetCombo->removeall();
+
+#if 0 // *TODO: enable when we have a clear workflow to edit existing region environment
+ // If the region already has water params, add them to the list.
+ const LLEnvironmentSettings& region_settings = LLEnvManagerNew::instance().getRegionSettings();
+ if (region_settings.getWaterParams().size() != 0)
+ {
+ const std::string& region_name = gAgent.getRegion()->getName();
+ mWaterPresetCombo->add(region_name, LLSD().with(0, region_name).with(1, LLEnvKey::SCOPE_REGION));
+ mWaterPresetCombo->addSeparator();
+ }
+#endif
+
+ std::list<std::string> user_presets, system_presets;
+ LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
+
+ // Add local user presets first.
+ for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ const std::string& name = *it;
+ mWaterPresetCombo->add(name, LLSD().with(0, name).with(1, LLEnvKey::SCOPE_LOCAL)); // [<name>, <scope>]
+ }
+
+ if (user_presets.size() > 0)
+ {
+ mWaterPresetCombo->addSeparator();
+ }
+
+ // Add local system presets.
+ for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
+ {
+ const std::string& name = *it;
+ mWaterPresetCombo->add(name, LLSD().with(0, name).with(1, LLEnvKey::SCOPE_LOCAL)); // [<name>, <scope>]
+ }
+
+ mWaterPresetCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditWater::enableEditing(bool enable)
+{
+ // Enable/disable water controls.
+ getChild<LLPanel>("panel_water_preset")->setCtrlsEnabled(enable);
+
+ // Enable/disable saving.
+ mSaveButton->setEnabled(enable);
+ mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditWater::saveRegionWater()
+{
+ llassert(getCurrentScope() == LLEnvKey::SCOPE_REGION); // make sure we're editing region water
+
+ LL_DEBUGS("Windlight") << "Saving region water preset" << llendl;
+
+ //LLWaterParamSet region_water = water_mgr.mCurParams;
+
+ // *TODO: save to cached region settings.
+ LL_WARNS("Windlight") << "Saving region water is not fully implemented yet" << LL_ENDL;
+}
+
+std::string LLFloaterEditWater::getCurrentPresetName() const
+{
+ std::string name;
+ LLEnvKey::EScope scope;
+ getSelectedPreset(name, scope);
+ return name;
+}
+
+LLEnvKey::EScope LLFloaterEditWater::getCurrentScope() const
+{
+ std::string name;
+ LLEnvKey::EScope scope;
+ getSelectedPreset(name, scope);
+ return scope;
+}
+
+void LLFloaterEditWater::getSelectedPreset(std::string& name, LLEnvKey::EScope& scope) const
+{
+ if (mWaterPresetNameEditor->getVisible())
+ {
+ name = mWaterPresetNameEditor->getText();
+ scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ LLSD combo_val = mWaterPresetCombo->getValue();
+
+ if (!combo_val.isArray()) // manually typed text
+ {
+ name = combo_val.asString();
+ scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ name = combo_val[0].asString();
+ scope = (LLEnvKey::EScope) combo_val[1].asInteger();
+ }
+ }
+}
+
+void LLFloaterEditWater::onWaterPresetNameEdited()
+{
+ // Disable saving a water preset having empty name.
+ mSaveButton->setEnabled(!getCurrentPresetName().empty());
+}
+
+void LLFloaterEditWater::onWaterPresetSelected()
+{
+ LLWaterParamSet water_params;
+ std::string name;
+ LLEnvKey::EScope scope;
+
+ getSelectedPreset(name, scope);
+
+ // Display selected preset.
+ if (scope == LLEnvKey::SCOPE_REGION)
+ {
+ water_params.setAll(LLEnvManagerNew::instance().getRegionSettings().getWaterParams());
+ }
+ else // local preset selected
+ {
+ if (!LLWaterParamManager::instance().getParamSet(name, water_params))
+ {
+ // Manually entered string?
+ LL_WARNS("Windlight") << "No water preset named " << name << LL_ENDL;
+ return;
+ }
+ }
+
+ LLEnvManagerNew::instance().useWaterParams(water_params.getAll());
+
+ bool can_edit = (scope == LLEnvKey::SCOPE_LOCAL || LLEnvManagerNew::canEditRegionSettings());
+ enableEditing(can_edit);
+
+ mMakeDefaultCheckBox->setEnabled(scope == LLEnvKey::SCOPE_LOCAL);
+}
+
+bool LLFloaterEditWater::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ // If they choose save, do it. Otherwise, don't do anything
+ if (option == 0)
+ {
+ onSaveConfirmed();
+ }
+
+ return false;
+}
+
+void LLFloaterEditWater::onSaveConfirmed()
+{
+ // Save currently displayed water params to the selected preset.
+ std::string name = getCurrentPresetName();
+
+ LL_DEBUGS("Windlight") << "Saving sky preset " << name << LL_ENDL;
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ if (water_mgr.hasParamSet(name))
+ {
+ water_mgr.setParamSet(name, water_mgr.mCurParams);
+ }
+ else
+ {
+ water_mgr.addParamSet(name, water_mgr.mCurParams);
+ }
+
+ water_mgr.savePreset(name);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getEnabled() && mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << name << " is now the new preferred water preset" << llendl;
+ LLEnvManagerNew::instance().setUseWaterPreset(name);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterEditWater::onBtnSave()
+{
+ LLEnvKey::EScope scope;
+ std::string name;
+ getSelectedPreset(name, scope);
+
+ if (scope == LLEnvKey::SCOPE_REGION)
+ {
+ saveRegionWater();
+ closeFloater();
+ return;
+ }
+
+ if (name.empty())
+ {
+ // *TODO: show an alert
+ llwarns << "Empty water preset name" << llendl;
+ return;
+ }
+
+ // Don't allow overwriting system presets.
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ if (water_mgr.isSystemPreset(name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ // Save, ask for confirmation for overwriting an existing preset.
+ if (water_mgr.hasParamSet(name))
+ {
+ LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditWater::onSaveAnswer, this, _1, _2));
+ }
+ else
+ {
+ // new preset, hence no confirmation needed
+ onSaveConfirmed();
+ }
+}
+
+void LLFloaterEditWater::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterEditWater::onWaterPresetListChange()
+{
+ std::string name;
+ LLEnvKey::EScope scope;
+ getSelectedPreset(name, scope); // preset being edited
+
+ if (scope == LLEnvKey::SCOPE_LOCAL && !LLWaterParamManager::instance().hasParamSet(name))
+ {
+ // Preset we've been editing doesn't exist anymore. Close the floater.
+ closeFloater(false);
+ }
+ else
+ {
+ // A new preset has been added.
+ // Refresh the presets list, though it may not make sense as the floater is about to be closed.
+ refreshWaterPresetsList();
+ }
+}
+
+void LLFloaterEditWater::onRegionSettingsChange()
+{
+ // If creating a new preset, don't bother.
+ if (isNewPreset())
+ {
+ return;
+ }
+
+ if (getCurrentScope() == LLEnvKey::SCOPE_REGION) // if editing region water
+ {
+ // reset the floater to its initial state
+ reset();
+
+ // *TODO: Notify user?
+ }
+ else // editing a local preset
+ {
+ refreshWaterPresetsList();
+ }
+}
+
+void LLFloaterEditWater::onRegionInfoUpdate()
+{
+ bool can_edit = true;
+
+ // If we've selected the region water for editing.
+ if (getCurrentScope() == LLEnvKey::SCOPE_REGION)
+ {
+ // check whether we have the access
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ enableEditing(can_edit);
+}
diff --git a/indra/newview/llfloaterwater.h b/indra/newview/llfloatereditwater.h
index e3db91e80d..2211bca59f 100644
--- a/indra/newview/llfloaterwater.h
+++ b/indra/newview/llfloatereditwater.h
@@ -1,10 +1,10 @@
/**
- * @file llfloaterwindlight.h
- * @brief LLFloaterWater class definition
+ * @file llfloatereditwater.h
+ * @brief Floater to create or edit a water preset
*
- * $LicenseInfo:firstyear=2007&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
@@ -24,17 +24,16 @@
* $/LicenseInfo$
*/
-/*
- * Menu for adjusting the atmospheric settings of the world
- */
-
-#ifndef LL_LLFLOATER_WATER_H
-#define LL_LLFLOATER_WATER_H
+#ifndef LL_LLFLOATEREDITWATER_H
+#define LL_LLFLOATEREDITWATER_H
#include "llfloater.h"
+#include "llenvmanager.h" // for LLEnvKey
-#include <vector>
-#include "llwlparamset.h"
+class LLButton;
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
struct WaterVector2Control;
struct WaterVector3Control;
@@ -42,66 +41,75 @@ struct WaterColorControl;
struct WaterFloatControl;
struct WaterExpFloatControl;
-/// Menuing system for all of windlight's functionality
-class LLFloaterWater : public LLFloater
+class LLFloaterEditWater : public LLFloater
{
+ LOG_CLASS(LLFloaterEditWater);
+
public:
+ LLFloaterEditWater(const LLSD &key);
- LLFloaterWater(const LLSD& key);
- virtual ~LLFloaterWater();
/*virtual*/ BOOL postBuild();
- /// initialize all
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void draw();
+
+private:
void initCallbacks(void);
- bool newPromptCallback(const LLSD& notification, const LLSD& response);
+ //-- WL stuff begins ------------------------------------------------------
- /// general purpose callbacks for dealing with color controllers
- void onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
+ void syncControls(); /// sync up sliders with parameters
- void onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl);
- void onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl);
- void onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl);
+ // general purpose callbacks for dealing with color controllers
+ void onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+
+ void onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl);
+ void onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl);
+ void onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl);
+
+ void onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl);
+ void onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl);
- void onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl);
- void onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl);
-
void onFloatControlMoved(LLUICtrl* ctrl, WaterFloatControl* floatControl);
void onExpFloatControlMoved(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl);
- void onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
-
- /// handle if they choose a new normal map
- void onNormalMapPicked(LLUICtrl* ctrl);
+ void onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
- /// when user hits the load preset button
- void onNewPreset();
+ void onNormalMapPicked(LLUICtrl* ctrl); /// handle if they choose a new normal map
- /// when user hits the save preset button
- void onSavePreset();
+ //-- WL stuff ends --------------------------------------------------------
- /// prompts a user when overwriting a preset
- bool saveAlertCallback(const LLSD& notification, const LLSD& response);
+ void reset();
+ bool isNewPreset() const;
+ void refreshWaterPresetsList();
+ void enableEditing(bool enable);
+ void saveRegionWater();
- /// when user hits the save preset button
- void onDeletePreset();
+ std::string getCurrentPresetName() const;
+ LLEnvKey::EScope getCurrentScope() const;
+ void getSelectedPreset(std::string& name, LLEnvKey::EScope& scope) const;
- /// prompts a user when overwriting a preset
- bool deleteAlertCallback(const LLSD& notification, const LLSD& response);
+ void onWaterPresetNameEdited();
+ void onWaterPresetSelected();
+ bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+ void onSaveConfirmed();
- /// what to do when you change the preset name
- void onChangePresetName(LLUICtrl* ctrl);
+ void onBtnSave();
+ void onBtnCancel();
- /// sync up sliders with parameters
- void syncMenu();
+ void onWaterPresetListChange();
+ void onRegionSettingsChange();
+ void onRegionInfoUpdate();
-private:
- static std::set<std::string> sDefaultPresets;
+ LLLineEditor* mWaterPresetNameEditor;
+ LLComboBox* mWaterPresetCombo;
+ LLCheckBoxCtrl* mMakeDefaultCheckBox;
+ LLButton* mSaveButton;
};
-
-#endif
+#endif // LL_LLFLOATEREDITWATER_H
diff --git a/indra/newview/llfloaterenvironmentsettings.cpp b/indra/newview/llfloaterenvironmentsettings.cpp
new file mode 100644
index 0000000000..4dbc8cdee0
--- /dev/null
+++ b/indra/newview/llfloaterenvironmentsettings.cpp
@@ -0,0 +1,282 @@
+/**
+ * @file llfloaterenvironmentsettings.cpp
+ * @brief LLFloaterEnvironmentSettings class definition
+ *
+ * $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 "llfloaterenvironmentsettings.h"
+
+#include "llcombobox.h"
+#include "llradiogroup.h"
+
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
+#include "llwaterparammanager.h"
+#include "llwlparamset.h"
+#include "llwlparammanager.h"
+
+LLFloaterEnvironmentSettings::LLFloaterEnvironmentSettings(const LLSD &key)
+: LLFloater(key)
+ ,mRegionSettingsRadioGroup(NULL)
+ ,mDayCycleSettingsRadioGroup(NULL)
+ ,mWaterPresetCombo(NULL)
+ ,mSkyPresetCombo(NULL)
+ ,mDayCyclePresetCombo(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEnvironmentSettings::postBuild()
+{
+ mRegionSettingsRadioGroup = getChild<LLRadioGroup>("region_settings_radio_group");
+ mRegionSettingsRadioGroup->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSwitchRegionSettings, this));
+
+ mDayCycleSettingsRadioGroup = getChild<LLRadioGroup>("sky_dayc_settings_radio_group");
+ mDayCycleSettingsRadioGroup->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSwitchDayCycle, this));
+
+ mWaterPresetCombo = getChild<LLComboBox>("water_settings_preset_combo");
+ mWaterPresetCombo->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSelectWaterPreset, this));
+
+ mSkyPresetCombo = getChild<LLComboBox>("sky_settings_preset_combo");
+ mSkyPresetCombo->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSelectSkyPreset, this));
+
+ mDayCyclePresetCombo = getChild<LLComboBox>("dayc_settings_preset_combo");
+ mDayCyclePresetCombo->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSelectDayCyclePreset, this));
+
+ childSetCommitCallback("ok_btn", boost::bind(&LLFloaterEnvironmentSettings::onBtnOK, this), NULL);
+ getChild<LLUICtrl>("ok_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpUserPrefs, LLEnvManagerNew::getInstance()));
+ childSetCommitCallback("cancel_btn", boost::bind(&LLFloaterEnvironmentSettings::onBtnCancel, this), NULL);
+ getChild<LLUICtrl>("cancel_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpPresets, LLEnvManagerNew::getInstance()));
+
+ setCloseCallback(boost::bind(&LLFloaterEnvironmentSettings::cancel, this));
+
+ LLEnvManagerNew::instance().setPreferencesChangeCallback(boost::bind(&LLFloaterEnvironmentSettings::refresh, this));
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterEnvironmentSettings::populateDayCyclePresetsList, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEnvironmentSettings::populateSkyPresetsList, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEnvironmentSettings::populateWaterPresetsList, this));
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEnvironmentSettings::onOpen(const LLSD& key)
+{
+ refresh();
+}
+
+void LLFloaterEnvironmentSettings::onSwitchRegionSettings()
+{
+ getChild<LLView>("user_environment_settings")->setEnabled(mRegionSettingsRadioGroup->getSelectedIndex() != 0);
+
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSwitchDayCycle()
+{
+ bool is_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+
+ mSkyPresetCombo->setEnabled(is_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!is_fixed_sky);
+
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSelectWaterPreset()
+{
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSelectSkyPreset()
+{
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSelectDayCyclePreset()
+{
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onBtnOK()
+{
+ // Save and apply new user preferences.
+ bool use_region_settings = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ bool use_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+ std::string water_preset = mWaterPresetCombo->getValue().asString();
+ std::string sky_preset = mSkyPresetCombo->getValue().asString();
+ std::string day_cycle = mDayCyclePresetCombo->getValue().asString();
+
+ LLEnvManagerNew::instance().setUserPrefs(
+ water_preset,
+ sky_preset,
+ day_cycle,
+ use_fixed_sky,
+ use_region_settings);
+
+ // *TODO: This triggers applying user preferences again, which is suboptimal.
+ closeFloater();
+}
+
+void LLFloaterEnvironmentSettings::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterEnvironmentSettings::refresh()
+{
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+
+ bool use_region_settings = env_mgr.getUseRegionSettings();
+ bool use_fixed_sky = env_mgr.getUseFixedSky();
+
+ // Set up radio buttons according to user preferences.
+ mRegionSettingsRadioGroup->setSelectedIndex(use_region_settings ? 0 : 1);
+ mDayCycleSettingsRadioGroup->setSelectedIndex(use_fixed_sky ? 0 : 1);
+
+ // Populate the combo boxes with appropriate lists of available presets.
+ populateWaterPresetsList();
+ populateSkyPresetsList();
+ populateDayCyclePresetsList();
+
+ // Enable/disable other controls based on user preferences.
+ getChild<LLView>("user_environment_settings")->setEnabled(!use_region_settings);
+ mSkyPresetCombo->setEnabled(use_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!use_fixed_sky);
+
+ // Select the current presets in combo boxes.
+ mWaterPresetCombo->selectByValue(env_mgr.getWaterPresetName());
+ mSkyPresetCombo->selectByValue(env_mgr.getSkyPresetName());
+ mDayCyclePresetCombo->selectByValue(env_mgr.getDayCycleName());
+}
+
+void LLFloaterEnvironmentSettings::apply()
+{
+ // Update environment with the user choice.
+ bool use_region_settings = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ bool use_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+ std::string water_preset = mWaterPresetCombo->getValue().asString();
+ std::string sky_preset = mSkyPresetCombo->getValue().asString();
+ std::string day_cycle = mDayCyclePresetCombo->getValue().asString();
+
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (use_region_settings)
+ {
+ env_mgr.useRegionSettings();
+ }
+ else
+ {
+ if (use_fixed_sky)
+ {
+ env_mgr.useSkyPreset(sky_preset);
+ }
+ else
+ {
+ env_mgr.useDayCycle(day_cycle, LLEnvKey::SCOPE_LOCAL);
+ }
+
+ env_mgr.useWaterPreset(water_preset);
+ }
+}
+
+void LLFloaterEnvironmentSettings::cancel()
+{
+ // Revert environment to user preferences.
+ LLEnvManagerNew::instance().usePrefs();
+}
+
+void LLFloaterEnvironmentSettings::populateWaterPresetsList()
+{
+ mWaterPresetCombo->removeall();
+
+ std::list<std::string> user_presets, system_presets;
+ LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
+
+ // Add user presets first.
+ for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it);
+ }
+
+ if (user_presets.size() > 0)
+ {
+ mWaterPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it);
+ }
+}
+
+void LLFloaterEnvironmentSettings::populateSkyPresetsList()
+{
+ mSkyPresetCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets; // unused as we don't list region presets here
+ LLWLParamManager::preset_name_list_t user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it);
+ }
+
+ if (!user_presets.empty())
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it);
+ }
+}
+
+void LLFloaterEnvironmentSettings::populateDayCyclePresetsList()
+{
+ mDayCyclePresetCombo->removeall();
+
+ LLDayCycleManager::preset_name_list_t user_days, sys_days;
+ LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+
+ // Add user days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it);
+ }
+
+ if (user_days.size() > 0)
+ {
+ mDayCyclePresetCombo->addSeparator();
+ }
+
+ // Add system days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it);
+ }
+}
diff --git a/indra/newview/llfloaterenvironmentsettings.h b/indra/newview/llfloaterenvironmentsettings.h
new file mode 100644
index 0000000000..0ab458a0f6
--- /dev/null
+++ b/indra/newview/llfloaterenvironmentsettings.h
@@ -0,0 +1,71 @@
+/**
+ * @file llfloaterenvironmentsettings.h
+ * @brief LLFloaterEnvironmentSettings class definition
+ *
+ * $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_LLFLOATERENVIRONMENTSETTINGS_H
+#define LL_LLFLOATERENVIRONMENTSETTINGS_H
+
+#include "llfloater.h"
+
+class LLComboBox;
+class LLRadioGroup;
+
+class LLFloaterEnvironmentSettings : public LLFloater
+{
+ LOG_CLASS(LLFloaterEnvironmentSettings);
+
+public:
+ LLFloaterEnvironmentSettings(const LLSD &key);
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+private:
+ void onSwitchRegionSettings();
+ void onSwitchDayCycle();
+
+ void onSelectWaterPreset();
+ void onSelectSkyPreset();
+ void onSelectDayCyclePreset();
+
+ void onBtnOK();
+ void onBtnCancel();
+
+ void refresh(); /// update controls with user prefs
+ void apply();
+ void cancel();
+
+ void populateWaterPresetsList();
+ void populateSkyPresetsList();
+ void populateDayCyclePresetsList();
+
+ LLRadioGroup* mRegionSettingsRadioGroup;
+ LLRadioGroup* mDayCycleSettingsRadioGroup;
+
+ LLComboBox* mWaterPresetCombo;
+ LLComboBox* mSkyPresetCombo;
+ LLComboBox* mDayCyclePresetCombo;
+};
+
+#endif // LL_LLFLOATERENVIRONMENTSETTINGS_H
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
deleted file mode 100644
index fcaef1f34b..0000000000
--- a/indra/newview/llfloaterenvsettings.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * @file llfloaterenvsettings.cpp
- * @brief LLFloaterEnvSettings class definition
- *
- * $LicenseInfo:firstyear=2007&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 "llfloaterenvsettings.h"
-
-#include "llfloaterreg.h"
-#include "llfloaterwindlight.h"
-#include "llfloaterwater.h"
-#include "lluictrlfactory.h"
-#include "llsliderctrl.h"
-#include "llcombobox.h"
-#include "llcolorswatch.h"
-#include "llwlanimator.h"
-
-#include "llwlparamset.h"
-#include "llwlparammanager.h"
-#include "llwaterparammanager.h"
-#include "llmath.h"
-#include "llviewerwindow.h"
-
-#include "pipeline.h"
-
-#include <sstream>
-
-LLFloaterEnvSettings::LLFloaterEnvSettings(const LLSD& key)
- : LLFloater(key)
-{
-}
-// virtual
-LLFloaterEnvSettings::~LLFloaterEnvSettings()
-{
-}
-// virtual
-BOOL LLFloaterEnvSettings::postBuild()
-{
- // load it up
- initCallbacks();
- syncMenu();
- return TRUE;
-}
-
-void LLFloaterEnvSettings::initCallbacks(void)
-{
- // our three sliders
- getChild<LLUICtrl>("EnvTimeSlider")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeDayTime, this, _1));
- getChild<LLUICtrl>("EnvCloudSlider")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeCloudCoverage, this, _1));
- getChild<LLUICtrl>("EnvWaterFogSlider")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeWaterFogDensity, this, _1, &LLWaterParamManager::instance()->mFogDensity));
-
- // color picker
- getChild<LLUICtrl>("EnvWaterColor")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeWaterColor, this, _1, &LLWaterParamManager::instance()->mFogColor));
-
- // WL Top
- getChild<LLUICtrl>("EnvAdvancedSkyButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedSky, this));
- getChild<LLUICtrl>("EnvAdvancedWaterButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedWater, this));
- getChild<LLUICtrl>("EnvUseEstateTimeButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onUseEstateTime, this));
-}
-
-// menu maintenance functions
-
-void LLFloaterEnvSettings::syncMenu()
-{
- LLSliderCtrl* sldr;
- sldr = getChild<LLSliderCtrl>("EnvTimeSlider");
-
- // sync the clock
- F32 val = (F32)LLWLParamManager::instance()->mAnimator.getDayTime();
- std::string timeStr = timeToString(val);
-
- LLTextBox* textBox;
- textBox = getChild<LLTextBox>("EnvTimeText");
-
- textBox->setValue(timeStr);
-
- // sync time slider which starts at 6 AM
- val -= 0.25;
- if(val < 0)
- {
- val++;
- }
- sldr->setValue(val);
-
- // sync cloud coverage
- bool err;
- getChild<LLUICtrl>("EnvCloudSlider")->setValue(LLWLParamManager::instance()->mCurParams.getFloat("cloud_shadow", err));
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
- // sync water params
- LLColor4 col = param_mgr->getFogColor();
- LLColorSwatchCtrl* colCtrl = getChild<LLColorSwatchCtrl>("EnvWaterColor");
- col.mV[3] = 1.0f;
- colCtrl->set(col);
-
- getChild<LLUICtrl>("EnvWaterFogSlider")->setValue(param_mgr->mFogDensity.mExp);
- param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
-
- // turn off Use Estate Time button if it's already being used
- if(LLWLParamManager::instance()->mAnimator.mUseLindenTime)
- {
- getChildView("EnvUseEstateTimeButton")->setEnabled(FALSE);
- } else {
- getChildView("EnvUseEstateTimeButton")->setEnabled(TRUE);
- }
-
- if(!gPipeline.canUseVertexShaders())
- {
- getChildView("EnvWaterColor")->setEnabled(FALSE);
- getChildView("EnvWaterColorText")->setEnabled(FALSE);
- //getChildView("EnvAdvancedWaterButton")->setEnabled(FALSE);
- }
- else
- {
- getChildView("EnvWaterColor")->setEnabled(TRUE);
- getChildView("EnvWaterColorText")->setEnabled(TRUE);
- //getChildView("EnvAdvancedWaterButton")->setEnabled(TRUE);
- }
-
- // only allow access to these if they are using windlight
- if(!gPipeline.canUseWindLightShaders())
- {
-
- getChildView("EnvCloudSlider")->setEnabled(FALSE);
- getChildView("EnvCloudText")->setEnabled(FALSE);
- //getChildView("EnvAdvancedSkyButton")->setEnabled(FALSE);
- }
- else
- {
- getChildView("EnvCloudSlider")->setEnabled(TRUE);
- getChildView("EnvCloudText")->setEnabled(TRUE);
- //getChildView("EnvAdvancedSkyButton")->setEnabled(TRUE);
- }
-}
-
-void LLFloaterEnvSettings::onChangeDayTime(LLUICtrl* ctrl)
-{
- LLSliderCtrl* sldr = static_cast<LLSliderCtrl*>(ctrl);
-
- // deactivate animator
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- F32 val = sldr->getValueF32() + 0.25f;
- if(val > 1.0)
- {
- val--;
- }
-
- LLWLParamManager::instance()->mAnimator.setDayTime((F64)val);
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterEnvSettings::onChangeCloudCoverage(LLUICtrl* ctrl)
-{
- LLSliderCtrl* sldr = static_cast<LLSliderCtrl*>(ctrl);
-
- // deactivate animator
- //LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- //LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- F32 val = sldr->getValueF32();
- LLWLParamManager::instance()->mCurParams.set("cloud_shadow", val);
-}
-
-void LLFloaterEnvSettings::onChangeWaterFogDensity(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl)
-{
- LLSliderCtrl* sldr;
- sldr = getChild<LLSliderCtrl>("EnvWaterFogSlider");
-
- F32 val = sldr->getValueF32();
- expFloatControl->mExp = val;
- LLWaterParamManager::instance()->setDensitySliderValue(val);
-
- expFloatControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterEnvSettings::onChangeWaterColor(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
- *colorControl = swatch->get();
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-
-void LLFloaterEnvSettings::onOpenAdvancedSky()
-{
- LLFloaterReg::showInstance("env_windlight");
-}
-
-void LLFloaterEnvSettings::onOpenAdvancedWater()
-{
- LLFloaterReg::showInstance("env_water");
-}
-
-
-void LLFloaterEnvSettings::onUseEstateTime()
-{
- LLFloaterWindLight* wl = LLFloaterReg::findTypedInstance<LLFloaterWindLight>("env_windlight");
- if(wl)
- {
- LLComboBox* box = wl->getChild<LLComboBox>("WLPresetsCombo");
- box->selectByValue("");
- }
-
- LLWLParamManager::instance()->mAnimator.mIsRunning = true;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
-}
-
-std::string LLFloaterEnvSettings::timeToString(F32 curTime)
-{
- S32 hours;
- S32 min;
-
- // get hours and minutes
- hours = (S32) (24.0 * curTime);
- curTime -= ((F32) hours / 24.0f);
- min = llround(24.0f * 60.0f * curTime);
-
- // handle case where it's 60
- if(min == 60)
- {
- hours++;
- min = 0;
- }
-
- std::string newTime = getString("timeStr");
- struct tm * timeT;
- time_t secT = time(0);
- timeT = gmtime (&secT);
-
- timeT->tm_hour = hours;
- timeT->tm_min = min;
- secT = mktime (timeT);
- secT -= LLStringOps::getLocalTimeOffset ();
-
- LLSD substitution;
- substitution["datetime"] = (S32) secT;
-
- LLStringUtil::format (newTime, substitution);
- return newTime;
-}
diff --git a/indra/newview/llfloaterenvsettings.h b/indra/newview/llfloaterenvsettings.h
deleted file mode 100644
index a6280cfb97..0000000000
--- a/indra/newview/llfloaterenvsettings.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * @file llfloaterskysettings.h
- * @brief LLFloaterEnvSettings class definition
- *
- * $LicenseInfo:firstyear=2007&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$
- */
-
-/*
- * Simple menu for adjusting the atmospheric settings of the world
- */
-
-#ifndef LL_LLFLOATERENVSETTINGS_H
-#define LL_LLFLOATERENVSETTINGS_H
-
-#include "llfloater.h"
-
-struct WaterColorControl;
-struct WaterExpFloatControl;
-
-/// Menuing system for all of windlight's functionality
-class LLFloaterEnvSettings : public LLFloater
-{
-public:
-
- LLFloaterEnvSettings(const LLSD& key);
- /*virtual*/ ~LLFloaterEnvSettings();
- /*virtual*/ BOOL postBuild();
- /// initialize all the callbacks for the menu
- void initCallbacks(void);
-
- /// handle if time of day is changed
- void onChangeDayTime(LLUICtrl* ctrl);
-
- /// handle if cloud coverage is changed
- void onChangeCloudCoverage(LLUICtrl* ctrl);
-
- /// handle change in water fog density
- void onChangeWaterFogDensity(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl);
-
- /// handle change in water fog color
- void onChangeWaterColor(LLUICtrl* ctrl, WaterColorControl* colorControl);
-
- /// open the advanced sky settings menu
- void onOpenAdvancedSky();
-
- /// open the advanced water settings menu
- void onOpenAdvancedWater();
-
- /// sync time with the server
- void onUseEstateTime();
-
- //// menu management
-
- /// sync up sliders with parameters
- void syncMenu();
-
- /// convert the present time to a digital clock time
- std::string timeToString(F32 curTime);
-
-private:
-};
-
-
-#endif
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index ef3c8b764e..d495f20a9a 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -365,6 +365,8 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
element["columns"][3]["font"]["style"] = font_style;
}
+ LL_DEBUGS("Gesture") << "Added gesture [" << item_name << "]" << LL_ENDL;
+
LLScrollListItem* sl_item = list->addElement(element, ADD_BOTTOM);
if(sl_item)
{
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
index 627defd006..3012638d44 100644
--- a/indra/newview/llfloaterhelpbrowser.cpp
+++ b/indra/newview/llfloaterhelpbrowser.cpp
@@ -71,9 +71,18 @@ void LLFloaterHelpBrowser::buildURLHistory()
}
}
+void LLFloaterHelpBrowser::onOpen(const LLSD& key)
+{
+ gSavedSettings.setBOOL("HelpFloaterOpen", TRUE);
+}
+
//virtual
void LLFloaterHelpBrowser::onClose(bool app_quitting)
{
+ if (!app_quitting)
+ {
+ gSavedSettings.setBOOL("HelpFloaterOpen", FALSE);
+ }
// really really destroy the help browser when it's closed, it'll be recreated.
destroy(); // really destroy this dialog on closure, it's relatively heavyweight.
}
diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h
index 2731c81b9c..afe0f4df69 100644
--- a/indra/newview/llfloaterhelpbrowser.h
+++ b/indra/newview/llfloaterhelpbrowser.h
@@ -42,6 +42,7 @@ class LLFloaterHelpBrowser :
/*virtual*/ BOOL postBuild();
/*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void onOpen(const LLSD& key);
// inherited from LLViewerMediaObserver
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 0d0c1f594d..4746f93009 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -566,10 +566,7 @@ void LLPanelLandGeneral::refresh()
if (regionp)
{
insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
-
- std::string land_type;
- bool is_land_type_localized = LLTrans::findString(land_type, regionp->getSimProductName());
- mLandType->setText(is_land_type_localized ? land_type : regionp->getSimProductName());
+ mLandType->setText(regionp->getLocalizedSimProductName());
}
// estate owner/manager cannot edit other parts of the parcel
@@ -1818,6 +1815,7 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
mClearBtn(NULL),
mMatureCtrl(NULL),
mPushRestrictionCtrl(NULL),
+ mSeeAvatarsCtrl(NULL),
mParcel(parcel)
{
}
@@ -1860,6 +1858,9 @@ BOOL LLPanelLandOptions::postBuild()
mPushRestrictionCtrl = getChild<LLCheckBoxCtrl>( "PushRestrictCheck");
childSetCommitCallback("PushRestrictCheck", onCommitAny, this);
+ mSeeAvatarsCtrl = getChild<LLCheckBoxCtrl>( "SeeAvatarsCheck");
+ childSetCommitCallback("SeeAvatarsCheck", onCommitAny, this);
+
mCheckShowDirectory = getChild<LLCheckBoxCtrl>( "ShowDirectoryCheck");
childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this);
@@ -1952,7 +1953,7 @@ void LLPanelLandOptions::refresh()
mCheckEditLand ->set(FALSE);
mCheckEditLand ->setEnabled(FALSE);
-
+
mCheckSafe ->set(FALSE);
mCheckSafe ->setEnabled(FALSE);
@@ -1968,6 +1969,9 @@ void LLPanelLandOptions::refresh()
mPushRestrictionCtrl->set(FALSE);
mPushRestrictionCtrl->setEnabled(FALSE);
+ mSeeAvatarsCtrl->set(TRUE);
+ mSeeAvatarsCtrl->setEnabled(FALSE);
+
mLandingTypeCombo->setCurrentByIndex(0);
mLandingTypeCombo->setEnabled(FALSE);
@@ -2001,7 +2005,7 @@ void LLPanelLandOptions::refresh()
BOOL can_change_terraform = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_EDIT);
mCheckEditLand ->set( parcel->getAllowTerraform() );
mCheckEditLand ->setEnabled( can_change_terraform );
-
+
mCheckSafe ->set( !parcel->getAllowDamage() );
mCheckSafe ->setEnabled( can_change_options );
@@ -2027,6 +2031,10 @@ void LLPanelLandOptions::refresh()
mPushRestrictionCtrl->setEnabled(can_change_options);
}
+ mSeeAvatarsCtrl->set(parcel->getSeeAVs());
+ mSeeAvatarsCtrl->setLabel(getString("see_avs_text"));
+ mSeeAvatarsCtrl->setEnabled(can_change_options && parcel->getHaveNewParcelLimitData());
+
BOOL can_change_landing_point = LLViewerParcelMgr::isParcelModifiableByAgent(parcel,
GP_LAND_SET_LANDING_POINT);
mLandingTypeCombo->setCurrentByIndex((S32)parcel->getLandingType());
@@ -2231,6 +2239,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
BOOL allow_publish = FALSE;
BOOL mature_publish = self->mMatureCtrl->get();
BOOL push_restriction = self->mPushRestrictionCtrl->get();
+ BOOL see_avs = self->mSeeAvatarsCtrl->get();
BOOL show_directory = self->mCheckShowDirectory->get();
// we have to get the index from a lookup, not from the position in the dropdown!
S32 category_index = LLParcel::getCategoryFromString(self->mCategoryCombo->getSelectedValue());
@@ -2264,6 +2273,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
parcel->setCategory((LLParcel::ECategory)category_index);
parcel->setLandingType((LLParcel::ELandingType)landing_type_index);
parcel->setSnapshotID(snapshot_id);
+ parcel->setSeeAVs(see_avs);
// Send current parcel data upstream to server
LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
@@ -2870,13 +2880,7 @@ void LLPanelLandCovenant::refresh()
}
LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
- if (region_landtype)
- {
- std::string land_type;
- bool is_land_type_localized = LLTrans::findString(land_type, region->getSimProductName());
-
- region_landtype->setText(is_land_type_localized ? land_type : region->getSimProductName());
- }
+ region_landtype->setText(region->getLocalizedSimProductName());
LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
if (region_maturity)
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 8a70fa24d8..6fceca1acd 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -348,6 +348,7 @@ private:
LLCheckBoxCtrl *mMatureCtrl;
LLCheckBoxCtrl *mPushRestrictionCtrl;
+ LLCheckBoxCtrl *mSeeAvatarsCtrl;
LLSafeHandle<LLParcelSelection>& mParcel;
};
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
index ab6753b4be..2510f43aa7 100644..100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -71,6 +71,7 @@
#include "llmatrix4a.h"
#include "llmenubutton.h"
#include "llmeshrepository.h"
+#include "llnotificationsutil.h"
#include "llsdutil_math.h"
#include "lltextbox.h"
#include "lltoolmgr.h"
@@ -100,7 +101,12 @@
#include "llcallbacklist.h"
#include "llviewerobjectlist.h"
#include "llanimationstates.h"
+#include "llviewernetwork.h"
#include "glod/glod.h"
+#include <boost/algorithm/string.hpp>
+
+
+const S32 SLM_SUPPORTED_VERSION = 2;
//static
S32 LLFloaterModelPreview::sUploadAmount = 10;
@@ -353,13 +359,16 @@ void LLMeshFilePicker::notify(const std::string& filename)
// LLFloaterModelPreview()
//-----------------------------------------------------------------------------
LLFloaterModelPreview::LLFloaterModelPreview(const LLSD& key) :
-LLFloater(key)
+LLFloaterModelUploadBase(key),
+mUploadBtn(NULL),
+mCalculateBtn(NULL)
{
sInstance = this;
mLastMouseX = 0;
mLastMouseY = 0;
mGLName = 0;
- mStatusLock = new LLMutex(NULL);
+ mStatusLock = new LLMutex();
+ mModelPreview = NULL;
mLODMode[LLModel::LOD_HIGH] = 0;
for (U32 i = 0; i < LLModel::LOD_HIGH; i++)
@@ -394,16 +403,17 @@ BOOL LLFloaterModelPreview::postBuild()
childSetCommitCallback("border_mode", onLODParamCommit, this);
childSetCommitCallback("share_tolerance", onLODParamCommit, this);
+ childSetCommitCallback("upload_skin", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
+ childSetCommitCallback("upload_joints", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
+ childSetCommitCallback("upload_textures", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
+
childSetTextArg("status", "[STATUS]", getString("status_idle"));
- //childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",sUploadAmount));
childSetAction("ok_btn", onUpload, this);
childDisable("ok_btn");
childSetAction("reset_btn", onReset, this);
- childSetAction("clear_materials", onClearMaterials, this);
-
childSetCommitCallback("preview_lod_combo", onPreviewLODCommit, this);
childSetCommitCallback("upload_skin", onUploadSkinCommit, this);
@@ -422,8 +432,6 @@ BOOL LLFloaterModelPreview::postBuild()
childDisable("ok_btn");
- childSetCommitCallback("confirm_checkbox", refresh, this);
-
mViewOptionMenuButton = getChild<LLMenuButton>("options_gear_btn");
mCommitCallbackRegistrar.add("ModelImport.ViewOption.Action", boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _2));
@@ -441,9 +449,7 @@ BOOL LLFloaterModelPreview::postBuild()
mPreviewRect = preview_panel->getRect();
- mModelPreview = new LLModelPreview(512, 512, this );
- mModelPreview->setPreviewTarget(16.f);
- mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelPreview::setDetails, this, _1, _2, _3, _4, _5));
+ initModelPreview();
//set callbacks for left click on line editor rows
for (U32 i = 0; i <= LLModel::LOD_HIGH; i++)
@@ -472,6 +478,25 @@ BOOL LLFloaterModelPreview::postBuild()
text->setMouseDownCallback(boost::bind(&LLModelPreview::setPreviewLOD, mModelPreview, i));
}
}
+ std::string current_grid = LLGridManager::getInstance()->getGridLabel();
+ std::transform(current_grid.begin(),current_grid.end(),current_grid.begin(),::tolower);
+ std::string validate_url;
+ if (current_grid == "agni")
+ {
+ validate_url = "http://secondlife.com/my/account/mesh.php";
+ }
+ else
+ {
+ validate_url = llformat("http://secondlife.%s.lindenlab.com/my/account/mesh.php",current_grid.c_str());
+ }
+ getChild<LLTextBox>("warning_message")->setTextArg("[VURL]", validate_url);
+
+ mUploadBtn = getChild<LLButton>("ok_btn");
+ mCalculateBtn = getChild<LLButton>("calculate_btn");
+
+ mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this));
+
+ toggleCalculateButton(true);
return TRUE;
}
@@ -497,6 +522,19 @@ LLFloaterModelPreview::~LLFloaterModelPreview()
mStatusLock = NULL;
}
+void LLFloaterModelPreview::initModelPreview()
+{
+ if (mModelPreview)
+ {
+ delete mModelPreview;
+ }
+
+ mModelPreview = new LLModelPreview(512, 512, this );
+ mModelPreview->setPreviewTarget(16.f);
+ mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelPreview::setDetails, this, _1, _2, _3, _4, _5));
+ mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this, _1));
+}
+
void LLFloaterModelPreview::onViewOptionChecked(const LLSD& userdata)
{
if (mModelPreview)
@@ -544,6 +582,30 @@ void LLFloaterModelPreview::loadModel(S32 lod)
(new LLMeshFilePicker(mModelPreview, lod))->getFile();
}
+void LLFloaterModelPreview::loadModel(S32 lod, const std::string& file_name, bool force_disable_slm)
+{
+ mModelPreview->mLoading = true;
+
+ mModelPreview->loadModel(file_name, lod, force_disable_slm);
+}
+
+void LLFloaterModelPreview::onClickCalculateBtn()
+{
+ mModelPreview->rebuildUploadData();
+
+ bool upload_skinweights = childGetValue("upload_skin").asBoolean();
+ bool upload_joint_positions = childGetValue("upload_joints").asBoolean();
+
+ mUploadModelUrl.clear();
+
+ gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
+ childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mUploadModelUrl, false,
+ getWholeModelFeeObserverHandle());
+
+ toggleCalculateButton(false);
+ mUploadBtn->setEnabled(false);
+}
+
//static
void LLFloaterModelPreview::onImportScaleCommit(LLUICtrl*,void* userdata)
{
@@ -554,7 +616,10 @@ void LLFloaterModelPreview::onImportScaleCommit(LLUICtrl*,void* userdata)
return;
}
- fp->mModelPreview->calcResourceCost();
+ fp->mModelPreview->mDirty = true;
+
+ fp->toggleCalculateButton(true);
+
fp->mModelPreview->refresh();
}
//static
@@ -566,7 +631,11 @@ void LLFloaterModelPreview::onPelvisOffsetCommit( LLUICtrl*, void* userdata )
{
return;
}
- fp->mModelPreview->calcResourceCost();
+
+ fp->mModelPreview->mDirty = true;
+
+ fp->toggleCalculateButton(true);
+
fp->mModelPreview->refresh();
}
@@ -615,8 +684,6 @@ void LLFloaterModelPreview::onUploadSkinCommit(LLUICtrl*,void* userdata)
{
return;
}
-
- fp->mModelPreview->calcResourceCost();
fp->mModelPreview->refresh();
fp->mModelPreview->resetPreviewTarget();
fp->mModelPreview->clearBuffers();
@@ -669,6 +736,7 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata)
void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata)
{
LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata;
+
fp->mModelPreview->onLODParamCommit(false);
}
@@ -707,31 +775,11 @@ 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()));
- if (!mCurRequest.empty())
- {
- LLMutexLock lock(mStatusLock);
- childSetTextArg("status", "[STATUS]", mStatusMessage);
- }
- else
- {
- childSetVisible("Simplify", true);
- childSetVisible("simplify_cancel", false);
- childSetVisible("Decompose", true);
- childSetVisible("decompose_cancel", false);
- }
-
- U32 resource_cost = mModelPreview->mResourceCost*10;
-
- if (childGetValue("upload_textures").asBoolean())
- {
- resource_cost += mModelPreview->mTextureSet.size()*10;
- }
-
- childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", resource_cost));
-
if (mModelPreview)
{
gGL.color3f(1.f, 1.f, 1.f);
@@ -864,6 +912,12 @@ BOOL LLFloaterModelPreview::handleScrollWheel(S32 x, S32 y, S32 clicks)
return TRUE;
}
+/*virtual*/
+void LLFloaterModelPreview::onOpen(const LLSD& key)
+{
+ requestAgentUploadPermissions();
+}
+
//static
void LLFloaterModelPreview::onPhysicsParamCommit(LLUICtrl* ctrl, void* data)
{
@@ -925,12 +979,14 @@ void LLFloaterModelPreview::onPhysicsStageExecute(LLUICtrl* ctrl, void* data)
sInstance->setStatusMessage(sInstance->getString("decomposing"));
sInstance->childSetVisible("Decompose", false);
sInstance->childSetVisible("decompose_cancel", true);
+ sInstance->childDisable("Simplify");
}
else if (stage == "Simplify")
{
sInstance->setStatusMessage(sInstance->getString("simplifying"));
sInstance->childSetVisible("Simplify", false);
sInstance->childSetVisible("simplify_cancel", true);
+ sInstance->childDisable("Decompose");
}
}
}
@@ -1883,8 +1939,11 @@ bool LLModelLoader::doLoadModel()
mesh_scale *= transformation;
transformation = mesh_scale;
- std::vector<LLImportMaterial> materials;
- materials.resize(model->getNumVolumeFaces());
+ std::map<std::string, LLImportMaterial> materials;
+ for (U32 i = 0; i < model->mMaterialList.size(); ++i)
+ {
+ materials[model->mMaterialList[i]] = LLImportMaterial();
+ }
mScene[transformation].push_back(LLModelInstance(model, model->mLabel, transformation, materials));
stretch_extents(model, transformation, mExtents[0], mExtents[1], mFirstTransform);
}
@@ -1946,6 +2005,11 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
//build model list for each LoD
model_list model[LLModel::NUM_LODS];
+ if (data["version"].asInteger() != SLM_SUPPORTED_VERSION)
+ { //unsupported version
+ return false;
+ }
+
LLSD& mesh = data["mesh"];
LLVolumeParams volume_params;
@@ -1968,10 +2032,6 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
mPreview->critiqueRigForUploadApplicability( loaded_model->mSkinInfo.mJointNames );
}
}
- else
- {
- llassert(model[lod].empty());
- }
}
}
@@ -2267,14 +2327,17 @@ void LLModelLoader::loadTextures()
{
for(U32 i = 0 ; i < iter->second.size(); i++)
{
- for(U32 j = 0 ; j < iter->second[i].mMaterial.size() ; j++)
+ for(std::map<std::string, LLImportMaterial>::iterator j = iter->second[i].mMaterial.begin();
+ j != iter->second[i].mMaterial.end(); ++j)
{
- if(!iter->second[i].mMaterial[j].mDiffuseMapFilename.empty())
+ LLImportMaterial& material = j->second;
+
+ if(!material.mDiffuseMapFilename.empty())
{
- iter->second[i].mMaterial[j].mDiffuseMap =
- LLViewerTextureManager::getFetchedTextureFromUrl("file://" + iter->second[i].mMaterial[j].mDiffuseMapFilename, TRUE, LLViewerTexture::BOOST_PREVIEW);
- iter->second[i].mMaterial[j].mDiffuseMap->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, mPreview, NULL, FALSE);
- iter->second[i].mMaterial[j].mDiffuseMap->forceToSaveRawImage(0, F32_MAX);
+ material.mDiffuseMap =
+ LLViewerTextureManager::getFetchedTextureFromUrl("file://" + material.mDiffuseMapFilename, TRUE, LLViewerTexture::BOOST_PREVIEW);
+ material.mDiffuseMap->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, mPreview, NULL, FALSE);
+ material.mDiffuseMap->forceToSaveRawImage(0, F32_MAX);
mNumOfFetchingTextures++ ;
}
}
@@ -2574,7 +2637,7 @@ void LLModelLoader::processElement( daeElement* element, bool& badElement )
{
LLMatrix4 transformation = mTransform;
- std::vector<LLImportMaterial> materials = getMaterials(model, instance_geo);
+ std::map<std::string, LLImportMaterial> materials = getMaterials(model, instance_geo);
// adjust the transformation to compensate for mesh normalization
LLVector3 mesh_scale_vector;
@@ -2630,9 +2693,9 @@ void LLModelLoader::processElement( daeElement* element, bool& badElement )
}
}
-std::vector<LLImportMaterial> LLModelLoader::getMaterials(LLModel* model, domInstance_geometry* instance_geo)
+std::map<std::string, LLImportMaterial> LLModelLoader::getMaterials(LLModel* model, domInstance_geometry* instance_geo)
{
- std::vector<LLImportMaterial> materials;
+ std::map<std::string, LLImportMaterial> materials;
for (int i = 0; i < model->mMaterialList.size(); i++)
{
LLImportMaterial import_material;
@@ -2679,7 +2742,8 @@ std::vector<LLImportMaterial> LLModelLoader::getMaterials(LLModel* model, domIns
}
}
- materials.push_back(import_material);
+ import_material.mBinding = model->mMaterialList[i];
+ materials[model->mMaterialList[i]] = import_material;
}
return materials;
@@ -2814,7 +2878,7 @@ LLColor4 LLModelLoader::getDaeColor(daeElement* element)
//-----------------------------------------------------------------------------
LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
-: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex(NULL)
+: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex()
, mPelvisZOffset( 0.0f )
, mLegacyRigValid( false )
, mRigValidJointUpload( false )
@@ -2919,8 +2983,7 @@ U32 LLModelPreview::calcResourceCost()
if (mFMP && mModelLoader)
{
- const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean();
- if ( getLoadState() < LLModelLoader::ERROR_PARSING && confirmed_checkbox )
+ if ( getLoadState() < LLModelLoader::ERROR_PARSING)
{
mFMP->childEnable("ok_btn");
}
@@ -2942,7 +3005,6 @@ U32 LLModelPreview::calcResourceCost()
//ok_btn should not have been changed unless something was wrong with joint list
}
- U32 cost = 0;
std::set<LLModel*> accounted;
U32 num_points = 0;
U32 num_hulls = 0;
@@ -2990,8 +3052,7 @@ U32 LLModelPreview::calcResourceCost()
mFMP->childGetValue("upload_skin").asBoolean(),
mFMP->childGetValue("upload_joints").asBoolean(),
TRUE);
- cost += gMeshRepo.calcResourceCost(ret);
-
+
num_hulls += decomp.mHull.size();
for (U32 i = 0; i < decomp.mHull.size(); ++i)
{
@@ -3011,7 +3072,7 @@ U32 LLModelPreview::calcResourceCost()
F32 z_length = z_transformed.normalize();
LLVector3 scale = LLVector3(x_length, y_length, z_length);
- F32 radius = scale.length()*debug_scale;
+ F32 radius = scale.length()*0.5f*debug_scale;
streaming_cost += LLMeshRepository::getStreamingCost(ret, radius);
}
@@ -3023,7 +3084,7 @@ U32 LLModelPreview::calcResourceCost()
updateStatusMessages();
- return cost;
+ return (U32) streaming_cost;
}
void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)
@@ -3031,8 +3092,6 @@ void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost,
childSetTextArg("import_dimensions", "[X]", llformat("%.3f", x));
childSetTextArg("import_dimensions", "[Y]", llformat("%.3f", y));
childSetTextArg("import_dimensions", "[Z]", llformat("%.3f", z));
- childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost));
- childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));
}
@@ -3062,12 +3121,24 @@ void LLModelPreview::rebuildUploadData()
F32 max_scale = 0.f;
- const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean();
- if ( mBaseScene.size() > 0 && confirmed_checkbox )
+ if ( mBaseScene.size() > 0)
{
mFMP->childEnable("ok_btn");
}
+ //reorder materials to match mBaseModel
+ for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ {
+ if (mBaseModel.size() == mModel[i].size())
+ {
+ for (U32 j = 0; j < mBaseModel.size(); ++j)
+ {
+ mModel[i][j]->matchMaterialOrder(mBaseModel[j]);
+ llassert(mModel[i][j]->mMaterialList == mBaseModel[j]->mMaterialList);
+ }
+ }
+ }
+
for (LLModelLoader::scene::iterator iter = mBaseScene.begin(); iter != mBaseScene.end(); ++iter)
{ //for each transform in scene
LLMatrix4 mat = iter->first;
@@ -3107,18 +3178,20 @@ void LLModelPreview::rebuildUploadData()
}
}
- for (U32 i = 0; i < LLModel::NUM_LODS; i++)
- { //fill LOD slots based on reference model index
- if (!mModel[i].empty())
- {
- instance.mLOD[i] = mModel[i][idx];
- }
- else
- {
- instance.mLOD[i] = NULL;
+ if(idx < mBaseModel.size())
+ {
+ for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ { //fill LOD slots based on reference model index
+ if (mModel[i].size() > idx)
+ {
+ instance.mLOD[i] = mModel[i][idx];
+ }
+ else
+ {
+ instance.mLOD[i] = NULL;
+ }
}
}
-
instance.mTransform = mat;
mUploadData.push_back(instance);
}
@@ -3164,6 +3237,8 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
LLSD data;
+ data["version"] = SLM_SUPPORTED_VERSION;
+
S32 mesh_id = 0;
//build list of unique models and initialize local id
@@ -3190,7 +3265,7 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
instance.mLOD[LLModel::LOD_LOW],
instance.mLOD[LLModel::LOD_IMPOSTOR],
decomp,
- save_skinweights, save_joint_positions);
+ save_skinweights, save_joint_positions, FALSE, TRUE);
data["mesh"][instance.mModel->mLocalID] = str.str();
@@ -3217,7 +3292,7 @@ void LLModelPreview::clearModel(S32 lod)
mScene[lod].clear();
}
-void LLModelPreview::loadModel(std::string filename, S32 lod)
+void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable_slm)
{
assert_main_thread();
@@ -3254,6 +3329,11 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
mModelLoader = new LLModelLoader(filename, lod, this, mJointTransformMap, mJointsFromNode );
+ if (force_disable_slm)
+ {
+ mModelLoader->mTrySLM = false;
+ }
+
mModelLoader->start();
mFMP->childSetTextArg("status", "[STATUS]", mFMP->getString("status_reading_file"));
@@ -3468,7 +3548,17 @@ void LLModelPreview::loadModelCallback(S32 lod)
mLoading = false;
if (mFMP)
+ {
mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE);
+ if (!mBaseModel.empty())
+ {
+ if (mFMP->getChild<LLUICtrl>("description_form")->getValue().asString().empty())
+ {
+ const std::string& model_name = mBaseModel[0]->getName();
+ mFMP->getChild<LLUICtrl>("description_form")->setValue(model_name);
+ }
+ }
+ }
refresh();
mModelLoadedSignal();
@@ -3524,43 +3614,6 @@ void LLModelPreview::generateNormals()
updateStatusMessages();
}
-void LLModelPreview::clearMaterials()
-{
- for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter)
- { //for each transform in current scene
- for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter)
- { //for each instance with that transform
- LLModelInstance& source_instance = *model_iter;
- LLModel* source = source_instance.mModel;
-
- for (S32 i = 0; i < source->getNumVolumeFaces(); ++i)
- { //for each face in instance
- LLImportMaterial& source_material = source_instance.mMaterial[i];
-
- //clear material info
- source_material.mDiffuseColor = LLColor4(1,1,1,1);
- source_material.mDiffuseMap = NULL;
- source_material.mDiffuseMapFilename.clear();
- source_material.mDiffuseMapLabel.clear();
- source_material.mFullbright = false;
- }
- }
- }
-
- mVertexBuffer[mPreviewLOD].clear();
-
- if (mPreviewLOD == LLModel::LOD_HIGH)
- {
- mBaseScene = mScene[mPreviewLOD];
- mBaseModel = mModel[mPreviewLOD];
- clearGLODGroup();
- mVertexBuffer[5].clear();
- }
-
- mResourceCost = calcResourceCost();
- refresh();
-}
-
void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit)
{
if (mBaseModel.empty())
@@ -3734,7 +3787,9 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
U32 tri_count = 0;
for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i)
{
- mVertexBuffer[5][mdl][i]->setBuffer(type_mask);
+ LLVertexBuffer* buff = mVertexBuffer[5][mdl][i];
+ buff->setBuffer(type_mask & buff->getTypeMask());
+
U32 num_indices = mVertexBuffer[5][mdl][i]->getNumIndices();
if (num_indices > 2)
{
@@ -3856,6 +3911,8 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
for (GLint i = 0; i < patch_count; ++i)
{
+ type_mask = mVertexBuffer[5][base][i]->getTypeMask();
+
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(type_mask, 0);
if (sizes[i*2+1] > 0 && sizes[i*2] > 0)
@@ -3880,8 +3937,15 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
LLStrider<U16> index;
buff->getVertexStrider(pos);
- buff->getNormalStrider(norm);
- buff->getTexCoord0Strider(tc);
+ if (type_mask & LLVertexBuffer::MAP_NORMAL)
+ {
+ buff->getNormalStrider(norm);
+ }
+ if (type_mask & LLVertexBuffer::MAP_TEXCOORD0)
+ {
+ buff->getTexCoord0Strider(tc);
+ }
+
buff->getIndexStrider(index);
target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices());
@@ -4087,18 +4151,20 @@ void LLModelPreview::updateStatusMessages()
}
else if (!verts[lod].empty())
{
+ S32 sum_verts_higher_lod = 0;
+ S32 sum_verts_this_lod = 0;
for (U32 i = 0; i < verts[lod].size(); ++i)
{
- S32 max_verts = i < verts[lod+1].size() ? verts[lod+1][i] : 0;
+ sum_verts_higher_lod += ((i < verts[lod+1].size()) ? verts[lod+1][i] : 0);
+ sum_verts_this_lod += verts[lod][i];
+ }
- if (max_verts > 0)
- {
- if (verts[lod][i] > max_verts)
- { //too many vertices in this lod
- message = "mesh_status_too_many_vertices";
- upload_status[lod] = 2;
- }
- }
+ if ((sum_verts_higher_lod > 0) &&
+ (sum_verts_this_lod > sum_verts_higher_lod))
+ {
+ //too many vertices in this lod
+ message = "mesh_status_too_many_vertices";
+ upload_status[lod] = 2;
}
}
}
@@ -4163,8 +4229,7 @@ void LLModelPreview::updateStatusMessages()
}
}
- const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean();
- if ( upload_ok && !errorStateFromLoader && skinAndRigOk && !has_degenerate && confirmed_checkbox)
+ if ( upload_ok && !errorStateFromLoader && skinAndRigOk && !has_degenerate)
{
mFMP->childEnable("ok_btn");
}
@@ -4269,6 +4334,24 @@ void LLModelPreview::updateStatusMessages()
child->setEnabled(enable);
child = panel->findNextSibling(child);
}
+
+ if (fmp->mCurRequest.empty())
+ {
+ fmp->childSetVisible("Simplify", true);
+ fmp->childSetVisible("simplify_cancel", false);
+ fmp->childSetVisible("Decompose", true);
+ fmp->childSetVisible("decompose_cancel", false);
+
+ if (phys_hulls > 0)
+ {
+ fmp->childEnable("Simplify");
+ }
+
+ if (phys_tris || phys_hulls > 0)
+ {
+ fmp->childEnable("Decompose");
+ }
+ }
}
const char* lod_controls[] =
@@ -4412,6 +4495,8 @@ void LLModelPreview::updateStatusMessages()
crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]);
}
+ mModelUpdatedSignal(true);
+
}
void LLModelPreview::setPreviewTarget(F32 distance)
@@ -4485,7 +4570,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
bool skinned = include_skin_weights && !mdl->mSkinWeights.empty();
- U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0;
+ U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0 ;
if (skinned)
{
@@ -4503,8 +4588,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
LLStrider<LLVector4> weights_strider;
vb->getVertexStrider(vertex_strider);
- vb->getNormalStrider(normal_strider);
- vb->getTexCoord0Strider(tc_strider);
vb->getIndexStrider(index_strider);
if (skinned)
@@ -4513,8 +4596,18 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
}
LLVector4a::memcpyNonAliased16((F32*) vertex_strider.get(), (F32*) vf.mPositions, num_vertices*4*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) normal_strider.get(), (F32*) vf.mNormals, num_vertices*4*sizeof(F32));
+
+ if (vf.mTexCoords)
+ {
+ vb->getTexCoord0Strider(tc_strider);
+ LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32));
+ }
+
+ if (vf.mNormals)
+ {
+ vb->getNormalStrider(normal_strider);
+ LLVector4a::memcpyNonAliased16((F32*) normal_strider.get(), (F32*) vf.mNormals, num_vertices*4*sizeof(F32));
+ }
if (skinned)
{
@@ -4728,7 +4821,18 @@ BOOL LLModelPreview::render()
glClear(GL_DEPTH_BUFFER_BIT);
- LLRect preview_rect = mFMP->getChildView("preview_panel")->getRect();
+ LLRect preview_rect;
+
+ LLFloaterModelWizard* floater_wizard = dynamic_cast<LLFloaterModelWizard*>(mFMP);
+ if (floater_wizard)
+ {
+ preview_rect = floater_wizard->getPreviewRect();
+ }
+ else
+ {
+ preview_rect = mFMP->getChildView("preview_panel")->getRect();
+ }
+
F32 aspect = (F32) preview_rect.getWidth()/preview_rect.getHeight();
LLViewerCamera::getInstance()->setAspect(aspect);
@@ -4773,6 +4877,8 @@ BOOL LLModelPreview::render()
const F32 BRIGHTNESS = 0.9f;
gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
+ const U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0;
+
LLGLEnable normalize(GL_NORMALIZE);
if (!mBaseModel.empty() && mVertexBuffer[5].empty())
@@ -4795,6 +4901,19 @@ BOOL LLModelPreview::render()
}
}
+ //make sure material lists all match
+ for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ {
+ if (mBaseModel.size() == mModel[i].size())
+ {
+ for (U32 j = 0; j < mBaseModel.size(); ++j)
+ {
+ mModel[i][j]->matchMaterialOrder(mBaseModel[j]);
+ llassert(mModel[i][j]->mMaterialList == mBaseModel[j]->mMaterialList);
+ }
+ }
+ }
+
if (regen)
{
genBuffers(mPreviewLOD, skin_weight);
@@ -4821,18 +4940,23 @@ BOOL LLModelPreview::render()
for (U32 i = 0; i < mVertexBuffer[mPreviewLOD][model].size(); ++i)
{
LLVertexBuffer* buffer = mVertexBuffer[mPreviewLOD][model][i];
-
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
+
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
if (textures)
{
- glColor4fv(instance.mMaterial[i].mDiffuseColor.mV);
- if (i < instance.mMaterial.size() && instance.mMaterial[i].mDiffuseMap.notNull())
+ 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())
{
- if (instance.mMaterial[i].mDiffuseMap->getDiscardLevel() > -1)
+ if (material.mDiffuseMap->getDiscardLevel() > -1)
{
- gGL.getTexUnit(0)->bind(instance.mMaterial[i].mDiffuseMap, true);
- mTextureSet.insert(instance.mMaterial[i].mDiffuseMap.get());
+ gGL.getTexUnit(0)->bind(material.mDiffuseMap, true);
+ mTextureSet.insert(material.mDiffuseMap.get());
}
}
}
@@ -4941,7 +5065,7 @@ BOOL LLModelPreview::render()
{
LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i];
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
@@ -5007,7 +5131,7 @@ BOOL LLModelPreview::render()
{
LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i];
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
LLStrider<LLVector3> pos_strider;
buffer->getVertexStrider(pos_strider, 0);
@@ -5132,8 +5256,10 @@ BOOL LLModelPreview::render()
position[j] = v;
}
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
- glColor4fv(instance.mMaterial[i].mDiffuseColor.mV);
+ const std::string& binding = instance.mModel->mMaterialList[i];
+ const LLImportMaterial& material = instance.mMaterial[binding];
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
+ glColor4fv(material.mDiffuseColor.mV);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0);
glColor3f(0.4f, 0.4f, 0.4f);
@@ -5253,7 +5379,12 @@ void LLFloaterModelPreview::onReset(void* user_data)
LLFloaterModelPreview* fmp = (LLFloaterModelPreview*) user_data;
LLModelPreview* mp = fmp->mModelPreview;
std::string filename = mp->mLODFile[3];
- mp->loadModel(filename,3);
+
+ //reset model preview
+ fmp->initModelPreview();
+
+ mp = fmp->mModelPreview;
+ mp->loadModel(filename,3,true);
}
//static
@@ -5271,31 +5402,18 @@ void LLFloaterModelPreview::onUpload(void* user_data)
mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
- mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions);
-
- mp->closeFloater(false);
+ mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mp->mUploadModelUrl,
+ true, LLHandle<LLWholeModelFeeObserver>(), mp->getWholeModelUploadObserverHandle());
}
//static
-void LLFloaterModelPreview::onClearMaterials(void* user_data)
-{
- LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data;
- mp->mModelPreview->clearMaterials();
-}
-
-//static
void LLFloaterModelPreview::refresh(LLUICtrl* ctrl, void* user_data)
{
+ sInstance->toggleCalculateButton(true);
sInstance->mModelPreview->mDirty = true;
}
-void LLFloaterModelPreview::updateResourceCost()
-{
- U32 cost = mModelPreview->mResourceCost;
- childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",cost));
-}
-
//static
void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata )
{
@@ -5339,6 +5457,97 @@ void LLFloaterModelPreview::setStatusMessage(const std::string& msg)
mStatusMessage = msg;
}
+void LLFloaterModelPreview::toggleCalculateButton()
+{
+ toggleCalculateButton(true);
+}
+
+void LLFloaterModelPreview::toggleCalculateButton(bool visible)
+{
+ mCalculateBtn->setVisible(visible);
+
+ bool uploadingSkin = childGetValue("upload_skin").asBoolean();
+ bool uploadingJointPositions = childGetValue("upload_joints").asBoolean();
+ if ( uploadingSkin )
+ {
+ //Disable the calculate button *if* the rig is invalid - which is determined during the critiquing process
+ if ( uploadingJointPositions && !mModelPreview->isRigValidForJointPositionUpload() )
+ {
+ mCalculateBtn->setVisible( false );
+ }
+ else
+ if ( !mModelPreview->isLegacyRigValid() )
+ {
+ mCalculateBtn->setVisible( false );
+ }
+ }
+
+ mUploadBtn->setVisible(!visible);
+ mUploadBtn->setEnabled(mHasUploadPerm && !mUploadModelUrl.empty());
+
+ if (visible)
+ {
+ std::string tbd = getString("tbd");
+ childSetTextArg("weights", "[EQ]", tbd);
+ childSetTextArg("weights", "[ST]", tbd);
+ childSetTextArg("weights", "[SIM]", tbd);
+ childSetTextArg("weights", "[PH]", tbd);
+ childSetTextArg("upload_fee", "[FEE]", tbd);
+ childSetTextArg("price_breakdown", "[STREAMING]", tbd);
+ childSetTextArg("price_breakdown", "[PHYSICS]", tbd);
+ childSetTextArg("price_breakdown", "[INSTANCES]", tbd);
+ childSetTextArg("price_breakdown", "[TEXTURES]", tbd);
+ childSetTextArg("price_breakdown", "[MODEL]", tbd);
+ }
+}
+
+void LLFloaterModelPreview::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url)
+{
+ mModelPhysicsFee = result;
+ mModelPhysicsFee["url"] = upload_url;
+
+ doOnIdleOneTime(boost::bind(&LLFloaterModelPreview::handleModelPhysicsFeeReceived,this));
+}
+
+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("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());
+}
+
+void LLFloaterModelPreview::setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason)
+{
+ toggleCalculateButton(true);
+ llwarns << "LLFloaterModelPreview::setModelPhysicsFeeErrorStatus(" << status << " : " << reason << ")" << llendl;
+}
+
+/*virtual*/
+void LLFloaterModelPreview::onModelUploadSuccess()
+{
+ closeFloater(false);
+}
+
+/*virtual*/
+void LLFloaterModelPreview::onModelUploadFailure()
+{
+ toggleCalculateButton(true);
+}
+
S32 LLFloaterModelPreview::DecompRequest::statusCallback(const char* status, S32 p1, S32 p2)
{
if (mContinue)
@@ -5378,3 +5587,25 @@ void LLFloaterModelPreview::DecompRequest::completed()
llassert(sInstance->mCurRequest.find(this) == sInstance->mCurRequest.end());
}
}
+
+void dump_llsd_to_file(const LLSD& content, std::string filename);
+
+void LLFloaterModelPreview::onPermissionsReceived(const LLSD& result)
+{
+ dump_llsd_to_file(result,"perm_received.xml");
+ std::string upload_status = result["mesh_upload_status"].asString();
+ // BAP HACK: handle "" for case that MeshUploadFlag cap is broken.
+ mHasUploadPerm = (("" == upload_status) || ("valid" == upload_status));
+
+ //mUploadBtn->setEnabled(mHasUploadPerm);
+ mUploadBtn->setEnabled(mHasUploadPerm && !mUploadModelUrl.empty());
+ getChild<LLTextBox>("warning_title")->setVisible(!mHasUploadPerm);
+ getChild<LLTextBox>("warning_message")->setVisible(!mHasUploadPerm);
+}
+
+void LLFloaterModelPreview::setPermissonsErrorStatus(U32 status, const std::string& reason)
+{
+ llwarns << "LLFloaterModelPreview::setPermissonsErrorStatus(" << status << " : " << reason << ")" << llendl;
+
+ LLNotificationsUtil::add("MeshUploadPermError");
+}
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index d4f6b4d293..3a5f7602fe 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -109,7 +109,7 @@ public:
void loadTextures() ; //called in the main thread.
void processElement(daeElement* element, bool& badElement);
- std::vector<LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo);
+ std::map<std::string, LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo);
LLImportMaterial profileToMaterial(domProfile_COMMON* material);
std::string getElementLabel(daeElement *element);
LLColor4 getDaeColor(daeElement* element);
@@ -140,7 +140,7 @@ private:
static bool isAlive(LLModelLoader* loader) ;
};
-class LLFloaterModelPreview : public LLFloater
+class LLFloaterModelPreview : public LLFloaterModelUploadBase
{
public:
@@ -162,11 +162,15 @@ public:
virtual BOOL postBuild();
+ void initModelPreview();
+
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
BOOL handleMouseUp(S32 x, S32 y, MASK mask);
BOOL handleHover(S32 x, S32 y, MASK mask);
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ /*virtual*/ void onOpen(const LLSD& key);
+
static void onMouseCaptureLostModelPreview(LLMouseHandler*);
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
@@ -178,13 +182,10 @@ public:
static void onUpload(void* data);
- static void onClearMaterials(void* data);
-
static void refresh(LLUICtrl* ctrl, void* data);
- void updateResourceCost();
-
void loadModel(S32 lod);
+ void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
void onViewOptionChecked(const LLSD& userdata);
bool isViewOptionChecked(const LLSD& userdata);
@@ -193,6 +194,20 @@ public:
void enableViewOption(const std::string& option);
void disableViewOption(const std::string& option);
+ // shows warning message if agent has no permissions to upload model
+ /*virtual*/ void onPermissionsReceived(const LLSD& result);
+
+ // called when error occurs during permissions request
+ /*virtual*/ void setPermissonsErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url);
+ void handleModelPhysicsFeeReceived();
+ /*virtual*/ void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelUploadSuccess();
+
+ /*virtual*/ void onModelUploadFailure();
+
protected:
friend class LLModelPreview;
friend class LLMeshFilePicker;
@@ -258,6 +273,17 @@ protected:
LLToggleableMenu* mViewOptionMenu;
LLMutex* mStatusLock;
+ LLSD mModelPhysicsFee;
+
+private:
+ void onClickCalculateBtn();
+ void toggleCalculateButton();
+
+ // Toggles between "Calculate weights & fee" and "Upload" buttons.
+ void toggleCalculateButton(bool visible);
+
+ LLButton* mUploadBtn;
+ LLButton* mCalculateBtn;
};
class LLMeshFilePicker : public LLFilePickerThread
@@ -276,6 +302,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
{
typedef boost::signals2::signal<void (F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)> details_signal_t;
typedef boost::signals2::signal<void (void)> model_loaded_signal_t;
+ typedef boost::signals2::signal<void (bool)> model_updated_signal_t;
public:
LLModelPreview(S32 width, S32 height, LLFloater* fmp);
@@ -297,11 +324,10 @@ public:
virtual BOOL needsRender() { return mNeedsUpdate; }
void setPreviewLOD(S32 lod);
void clearModel(S32 lod);
- void loadModel(std::string filename, S32 lod);
+ void loadModel(std::string filename, S32 lod, bool force_disable_slm = false);
void loadModelCallback(S32 lod);
void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
void generateNormals();
- void clearMaterials();
U32 calcResourceCost();
void rebuildUploadData();
void saveUploadData(bool save_skinweights, bool save_joint_poisitions);
@@ -335,6 +361,7 @@ public:
boost::signals2::connection setDetailsCallback( const details_signal_t::slot_type& cb ){ return mDetailsSignal.connect(cb); }
boost::signals2::connection setModelLoadedCallback( const model_loaded_signal_t::slot_type& cb ){ return mModelLoadedSignal.connect(cb); }
+ boost::signals2::connection setModelUpdatedCallback( const model_updated_signal_t::slot_type& cb ){ return mModelUpdatedSignal.connect(cb); }
void setLoadState( U32 state ) { mLoadState = state; }
U32 getLoadState() { return mLoadState; }
@@ -420,6 +447,7 @@ private:
details_signal_t mDetailsSignal;
model_loaded_signal_t mModelLoadedSignal;
+ model_updated_signal_t mModelUpdatedSignal;
LLVector3 mModelPivot;
bool mHasPivot;
diff --git a/indra/newview/llfloatermodeluploadbase.cpp b/indra/newview/llfloatermodeluploadbase.cpp
new file mode 100644
index 0000000000..6d3800bfa4
--- /dev/null
+++ b/indra/newview/llfloatermodeluploadbase.cpp
@@ -0,0 +1,58 @@
+/**
+ * @file llfloatermodeluploadbase.cpp
+ * @brief LLFloaterUploadModelBase class definition
+ *
+ * $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 "llfloatermodeluploadbase.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "llnotificationsutil.h"
+
+LLFloaterModelUploadBase::LLFloaterModelUploadBase(const LLSD& key)
+:LLFloater(key),
+ mHasUploadPerm(false)
+{
+}
+
+void LLFloaterModelUploadBase::requestAgentUploadPermissions()
+{
+ std::string capability = "MeshUploadFlag";
+ std::string url = gAgent.getRegion()->getCapability(capability);
+
+ if (!url.empty())
+ {
+ llinfos<< typeid(*this).name() <<"::requestAgentUploadPermissions() requesting for upload model permissions from: "<< url <<llendl;
+ LLHTTPClient::get(url, new LLUploadModelPremissionsResponder(getPermObserverHandle()));
+ }
+ else
+ {
+ LLSD args;
+ args["CAPABILITY"] = capability;
+ LLNotificationsUtil::add("RegionCapabilityRequestError", args);
+ // BAP HACK avoid being blocked by broken server side stuff
+ mHasUploadPerm = true;
+ }
+}
diff --git a/indra/newview/llfloatermodeluploadbase.h b/indra/newview/llfloatermodeluploadbase.h
new file mode 100644
index 0000000000..a52bc28687
--- /dev/null
+++ b/indra/newview/llfloatermodeluploadbase.h
@@ -0,0 +1,61 @@
+/**
+ * @file llfloatermodeluploadbase.h
+ * @brief LLFloaterUploadModelBase class declaration
+ *
+ * $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_LLFLOATERMODELUPLOADBASE_H
+#define LL_LLFLOATERMODELUPLOADBASE_H
+
+#include "lluploadfloaterobservers.h"
+
+class LLFloaterModelUploadBase : public LLFloater, public LLUploadPermissionsObserver, public LLWholeModelFeeObserver, public LLWholeModelUploadObserver
+{
+public:
+
+ LLFloaterModelUploadBase(const LLSD& key);
+
+ virtual ~LLFloaterModelUploadBase(){};
+
+ virtual void setPermissonsErrorStatus(U32 status, const std::string& reason) = 0;
+
+ virtual void onPermissionsReceived(const LLSD& result) = 0;
+
+ virtual void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url) = 0;
+
+ virtual void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason) = 0;
+
+ virtual void onModelUploadSuccess() {};
+
+ virtual void onModelUploadFailure() {};
+
+protected:
+
+ // requests agent's permissions to upload model
+ void requestAgentUploadPermissions();
+
+ std::string mUploadModelUrl;
+ bool mHasUploadPerm;
+};
+
+#endif /* LL_LLFLOATERMODELUPLOADBASE_H */
diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp
index 707c8288df..b517b78e5a 100644
--- a/indra/newview/llfloatermodelwizard.cpp
+++ b/indra/newview/llfloatermodelwizard.cpp
@@ -46,12 +46,21 @@ static const std::string stateNames[]={
"choose_file",
"optimize",
"physics",
- "physics2",
"review",
"upload"};
+static void swap_controls(LLUICtrl* first_ctrl, LLUICtrl* second_ctrl, bool first_ctr_visible);
+
LLFloaterModelWizard::LLFloaterModelWizard(const LLSD& key)
- : LLFloater(key)
+ : LLFloaterModelUploadBase(key)
+ ,mRecalculateGeometryBtn(NULL)
+ ,mRecalculatePhysicsBtn(NULL)
+ ,mRecalculatingPhysicsBtn(NULL)
+ ,mCalculateWeightsBtn(NULL)
+ ,mCalculatingWeightsBtn(NULL)
+ ,mChooseFilePreviewPanel(NULL)
+ ,mOptimizePreviewPanel(NULL)
+ ,mPhysicsPreviewPanel(NULL)
{
mLastEnabledState = CHOOSE_FILE;
sInstance = this;
@@ -59,7 +68,6 @@ LLFloaterModelWizard::LLFloaterModelWizard(const LLSD& key)
mCommitCallbackRegistrar.add("Wizard.Choose", boost::bind(&LLFloaterModelWizard::setState, this, CHOOSE_FILE));
mCommitCallbackRegistrar.add("Wizard.Optimize", boost::bind(&LLFloaterModelWizard::setState, this, OPTIMIZE));
mCommitCallbackRegistrar.add("Wizard.Physics", boost::bind(&LLFloaterModelWizard::setState, this, PHYSICS));
- mCommitCallbackRegistrar.add("Wizard.Physics2", boost::bind(&LLFloaterModelWizard::setState, this, PHYSICS2));
mCommitCallbackRegistrar.add("Wizard.Review", boost::bind(&LLFloaterModelWizard::setState, this, REVIEW));
mCommitCallbackRegistrar.add("Wizard.Upload", boost::bind(&LLFloaterModelWizard::setState, this, UPLOAD));
}
@@ -81,16 +89,22 @@ void LLFloaterModelWizard::setState(int state)
}
}
+ LLView* current_preview_panel = NULL;
+
if (state == CHOOSE_FILE)
{
mModelPreview->mViewOption["show_physics"] = false;
+ current_preview_panel = mChooseFilePreviewPanel;
+
getChildView("close")->setVisible(false);
getChildView("back")->setVisible(true);
getChildView("back")->setEnabled(false);
getChildView("next")->setVisible(true);
getChildView("upload")->setVisible(false);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == OPTIMIZE)
@@ -102,12 +116,16 @@ void LLFloaterModelWizard::setState(int state)
mModelPreview->mViewOption["show_physics"] = false;
+ current_preview_panel = mOptimizePreviewPanel;
+
getChildView("back")->setVisible(true);
getChildView("back")->setEnabled(true);
getChildView("close")->setVisible(false);
getChildView("next")->setVisible(true);
getChildView("upload")->setVisible(false);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == PHYSICS)
@@ -115,34 +133,24 @@ void LLFloaterModelWizard::setState(int state)
if (mLastEnabledState < state)
{
mModelPreview->setPhysicsFromLOD(1);
- }
- mModelPreview->mViewOption["show_physics"] = true;
-
- getChildView("next")->setVisible(true);
- getChildView("upload")->setVisible(false);
- getChildView("close")->setVisible(false);
- getChildView("back")->setVisible(true);
- getChildView("back")->setEnabled(true);
- getChildView("cancel")->setVisible(true);
- }
-
- if (state == PHYSICS2)
- {
- if (mLastEnabledState < state)
- {
- executePhysicsStage("Decompose");
+ // Trigger the recalculate physics when first entering
+ // the Physics step.
+ onClickRecalculatePhysics();
}
mModelPreview->mViewOption["show_physics"] = true;
- getChildView("next")->setVisible(true);
- getChildView("next")->setEnabled(true);
+ current_preview_panel = mPhysicsPreviewPanel;
+
+ getChildView("next")->setVisible(false);
getChildView("upload")->setVisible(false);
getChildView("close")->setVisible(false);
getChildView("back")->setVisible(true);
getChildView("back")->setEnabled(true);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(true);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == REVIEW)
@@ -156,6 +164,8 @@ void LLFloaterModelWizard::setState(int state)
getChildView("back")->setEnabled(true);
getChildView("upload")->setVisible(true);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == UPLOAD)
@@ -165,8 +175,24 @@ void LLFloaterModelWizard::setState(int state)
getChildView("back")->setVisible(false);
getChildView("upload")->setVisible(false);
getChildView("cancel")->setVisible(false);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
+ if (current_preview_panel)
+ {
+ LLRect rect;
+ current_preview_panel->localRectToOtherView(current_preview_panel->getLocalRect(), &rect, this);
+
+ // Reduce the preview rect by 1 px to fit the borders
+ rect.stretch(-1);
+
+ if (rect != mPreviewRect)
+ {
+ mPreviewRect = rect;
+ mModelPreview->refresh();
+ }
+ }
updateButtons();
}
@@ -198,18 +224,60 @@ void LLFloaterModelWizard::updateButtons()
button->setEnabled(FALSE);
}
}
+}
- LLButton *physics_button = getChild<LLButton>(stateNames[PHYSICS]+"_btn");
-
- if (mState == PHYSICS2)
+void LLFloaterModelWizard::onClickSwitchToAdvanced()
+{
+ LLFloaterModelPreview* floater_preview = LLFloaterReg::getTypedInstance<LLFloaterModelPreview>("upload_model");
+ if (!floater_preview)
{
- physics_button->setVisible(false);
+ llwarns << "FLoater model preview not found." << llendl;
+ return;
}
- else
+
+ // Open floater model preview
+ floater_preview->openFloater();
+
+ // Close the wizard
+ closeFloater();
+
+ std::string filename = getChild<LLUICtrl>("lod_file")->getValue().asString();
+ if (!filename.empty())
{
- physics_button->setVisible(true);
+ // Re-load the model to the floater model preview if it has been loaded
+ // into the wizard.
+ floater_preview->loadModel(3, filename);
}
+}
+
+void LLFloaterModelWizard::onClickRecalculateGeometry()
+{
+ S32 val = getChild<LLUICtrl>("accuracy_slider")->getValue().asInteger();
+
+ mModelPreview->genLODs(-1, NUM_LOD - val);
+
+ mModelPreview->refresh();
+}
+
+void LLFloaterModelWizard::onClickRecalculatePhysics()
+{
+ // Hide the "Recalculate physics" button and show the "Recalculating..."
+ // button instead.
+ swap_controls(mRecalculatePhysicsBtn, mRecalculatingPhysicsBtn, false);
+
+ executePhysicsStage("Decompose");
+}
+void LLFloaterModelWizard::onClickCalculateUploadFee()
+{
+ swap_controls(mCalculateWeightsBtn, mCalculatingWeightsBtn, false);
+
+ mModelPreview->rebuildUploadData();
+
+ mUploadModelUrl.clear();
+
+ gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
+ true, false, false, mUploadModelUrl, false, getWholeModelFeeObserverHandle());
}
void LLFloaterModelWizard::loadModel()
@@ -344,6 +412,7 @@ BOOL LLFloaterModelWizard::handleScrollWheel(S32 x, S32 y, S32 clicks)
return TRUE;
}
+
void LLFloaterModelWizard::initDecompControls()
{
LLSD key;
@@ -401,12 +470,83 @@ void LLFloaterModelWizard::initDecompControls()
mDecompParams["Simplify Method"] = 0; // set it to retain %
}
+/*virtual*/
+void LLFloaterModelWizard::onPermissionsReceived(const LLSD& result)
+{
+ std::string upload_status = result["mesh_upload_status"].asString();
+ // BAP HACK: handle "" for case that MeshUploadFlag cap is broken.
+ mHasUploadPerm = (("" == upload_status) || ("valid" == upload_status));
+
+ getChildView("warning_label")->setVisible(!mHasUploadPerm);
+ getChildView("warning_text")->setVisible(!mHasUploadPerm);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::setPermissonsErrorStatus(U32 status, const std::string& reason)
+{
+ llwarns << "LLFloaterModelWizard::setPermissonsErrorStatus(" << status << " : " << reason << ")" << llendl;
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url)
+{
+ swap_controls(mCalculateWeightsBtn, mCalculatingWeightsBtn, true);
+
+ // Enable the "Upload" buton if we have calculated the upload fee
+ // and have the permission to upload.
+ getChildView("upload")->setEnabled(mHasUploadPerm);
+
+ mUploadModelUrl = upload_url;
+
+ S32 fee = result["upload_price"].asInteger();
+ childSetTextArg("review_fee", "[FEE]", llformat("%d", fee));
+ childSetTextArg("charged_fee", "[FEE]", llformat("%d", fee));
+
+ setState(REVIEW);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason)
+{
+ swap_controls(mCalculateWeightsBtn, mCalculatingWeightsBtn, true);
+
+ // Disable the "Review" step if it has been previously enabled.
+ modelChangedCallback();
+
+ llwarns << "LLFloaterModelWizard::setModelPhysicsFeeErrorStatus(" << status << " : " << reason << ")" << llendl;
+
+ setState(PHYSICS);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelUploadSuccess()
+{
+ // success!
+ setState(UPLOAD);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelUploadFailure()
+{
+ // Failure. Make the user recalculate fees
+ setState(PHYSICS);
+ // Disable the "Review" step if it has been previously enabled.
+ if (mLastEnabledState > PHYSICS)
+ {
+ mLastEnabledState = PHYSICS;
+ }
+
+ updateButtons();
+}
+
//static
void LLFloaterModelWizard::executePhysicsStage(std::string stage_name)
{
if (sInstance)
{
- F64 physics_accuracy = sInstance->getChild<LLSliderCtrl>("physics_slider")->getValue().asReal();
+ // Invert the slider value so that "performance" end is giving the least detailed physics,
+ // and the "accuracy" end is giving the most detailed physics
+ F64 physics_accuracy = 1 - sInstance->getChild<LLSliderCtrl>("physics_slider")->getValue().asReal();
sInstance->mDecompParams["Retain%"] = physics_accuracy;
@@ -471,13 +611,16 @@ void LLFloaterModelWizard::DecompRequest::completed()
{
executePhysicsStage("Simplify");
}
+ else
+ {
+ // Decomp request is complete so we can enable the "Recalculate physics" button again.
+ swap_controls(sInstance->mRecalculatePhysicsBtn, sInstance->mRecalculatingPhysicsBtn, true);
+ }
}
BOOL LLFloaterModelWizard::postBuild()
{
- LLView* preview_panel = getChildView("preview_panel");
-
childSetValue("import_scale", (F32) 0.67335826);
getChild<LLUICtrl>("browse")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this));
@@ -488,23 +631,36 @@ BOOL LLFloaterModelWizard::postBuild()
getChild<LLUICtrl>("next")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickNext, this));
getChild<LLUICtrl>("preview_lod_combo")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));
getChild<LLUICtrl>("preview_lod_combo2")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));
- getChild<LLUICtrl>("preview_lod_combo3")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));
- getChild<LLUICtrl>("accuracy_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onAccuracyPerformance, this, _2));
getChild<LLUICtrl>("upload")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onUpload, this));
- getChild<LLUICtrl>("physics_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPhysicsChanged, this));
+ getChild<LLUICtrl>("switch_to_advanced")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickSwitchToAdvanced, this));
+
+ mRecalculateGeometryBtn = getChild<LLButton>("recalculate_geometry_btn");
+ mRecalculateGeometryBtn->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickRecalculateGeometry, this));
+
+ mRecalculatePhysicsBtn = getChild<LLButton>("recalculate_physics_btn");
+ mRecalculatePhysicsBtn->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickRecalculatePhysics, this));
+
+ mRecalculatingPhysicsBtn = getChild<LLButton>("recalculating_physics_btn");
+
+ mCalculateWeightsBtn = getChild<LLButton>("calculate");
+ mCalculateWeightsBtn->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCalculateUploadFee, this));
+
+ mCalculatingWeightsBtn = getChild<LLButton>("calculating");
+
+ mChooseFilePreviewPanel = getChild<LLView>("choose_file_preview_panel");
+ mOptimizePreviewPanel = getChild<LLView>("optimize_preview_panel");
+ mPhysicsPreviewPanel = getChild<LLView>("physics_preview_panel");
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
enable_registrar.add("Next.OnEnable", boost::bind(&LLFloaterModelWizard::onEnableNext, this));
enable_registrar.add("Back.OnEnable", boost::bind(&LLFloaterModelWizard::onEnableBack, this));
-
-
- mPreviewRect = preview_panel->getRect();
mModelPreview = new LLModelPreview(512, 512, this);
mModelPreview->setPreviewTarget(16.f);
mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelWizard::setDetails, this, _1, _2, _3, _4, _5));
mModelPreview->setModelLoadedCallback(boost::bind(&LLFloaterModelWizard::modelLoadedCallback, this));
+ mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelWizard::modelChangedCallback, this));
mModelPreview->mViewOption["show_textures"] = true;
center();
@@ -517,6 +673,8 @@ BOOL LLFloaterModelWizard::postBuild()
initDecompControls();
+ requestAgentUploadPermissions();
+
return TRUE;
}
@@ -532,22 +690,29 @@ void LLFloaterModelWizard::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F
panel->childSetText("dimension_x", llformat("%.1f", x));
panel->childSetText("dimension_y", llformat("%.1f", y));
panel->childSetText("dimension_z", llformat("%.1f", z));
- panel->childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost));
- panel->childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));
}
}
+
+ childSetTextArg("review_prim_equiv", "[EQUIV]", llformat("%d", mModelPreview->mResourceCost));
}
void LLFloaterModelWizard::modelLoadedCallback()
{
mLastEnabledState = CHOOSE_FILE;
- getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE);
updateButtons();
}
-void LLFloaterModelWizard::onPhysicsChanged()
+void LLFloaterModelWizard::modelChangedCallback()
{
- mLastEnabledState = PHYSICS;
+ // Don't allow to proceed to the "Review" step if the model has changed
+ // but the new upload fee hasn't been calculated yet.
+ if (mLastEnabledState > PHYSICS)
+ {
+ mLastEnabledState = PHYSICS;
+ }
+
+ getChildView("upload")->setEnabled(false);
+
updateButtons();
}
@@ -556,22 +721,10 @@ void LLFloaterModelWizard::onUpload()
mModelPreview->rebuildUploadData();
gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
- true, false, false);
-
- setState(UPLOAD);
-
-}
-
-void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)
-{
- int val = (int) data.asInteger();
-
- mModelPreview->genLODs(-1, NUM_LOD-val);
-
- mModelPreview->refresh();
+ true, false, false, mUploadModelUrl, true,
+ LLHandle<LLWholeModelFeeObserver>(), getWholeModelUploadObserverHandle());
}
-
void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl)
{
if (!mModelPreview)
@@ -601,11 +754,6 @@ void LLFloaterModelWizard::refresh()
getChildView("next")->setEnabled(model_loaded);
}
- if (mState == REVIEW)
- {
- getChildView("upload")->setEnabled(getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean());
- }
-
}
void LLFloaterModelWizard::draw()
@@ -613,42 +761,35 @@ void LLFloaterModelWizard::draw()
refresh();
LLFloater::draw();
- LLRect r = getRect();
-
- mModelPreview->update();
- if (mModelPreview)
+ if (mModelPreview && mState < REVIEW)
{
+ mModelPreview->update();
+
gGL.color3f(1.f, 1.f, 1.f);
gGL.getTexUnit(0)->bind(mModelPreview);
- LLView *view = getChildView(stateNames[mState]+"_panel");
- LLView* preview_panel = view->getChildView("preview_panel");
-
- LLRect rect = preview_panel->getRect();
- if (rect != mPreviewRect)
- {
- mModelPreview->refresh();
- mPreviewRect = preview_panel->getRect();
- }
-
- LLRect item_rect;
- preview_panel->localRectToOtherView(preview_panel->getLocalRect(), &item_rect, this);
-
gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(0.f, 1.f);
- gGL.vertex2i(item_rect.mLeft, item_rect.mTop-1);
+ gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
gGL.texCoord2f(0.f, 0.f);
- gGL.vertex2i(item_rect.mLeft, item_rect.mBottom);
+ gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 0.f);
- gGL.vertex2i(item_rect.mRight-1, item_rect.mBottom);
+ gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 1.f);
- gGL.vertex2i(item_rect.mRight-1, item_rect.mTop-1);
+ gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop);
}
gGL.end();
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
+
+// static
+void swap_controls(LLUICtrl* first_ctrl, LLUICtrl* second_ctrl, bool first_ctr_visible)
+{
+ first_ctrl->setVisible(first_ctr_visible);
+ second_ctrl->setVisible(!first_ctr_visible);
+}
diff --git a/indra/newview/llfloatermodelwizard.h b/indra/newview/llfloatermodelwizard.h
index b166d26295..db9b605777 100644
--- a/indra/newview/llfloatermodelwizard.h
+++ b/indra/newview/llfloatermodelwizard.h
@@ -30,12 +30,13 @@
#include "llmeshrepository.h"
#include "llmodel.h"
#include "llthread.h"
+#include "llfloatermodeluploadbase.h"
class LLModelPreview;
-class LLFloaterModelWizard : public LLFloater
+class LLFloaterModelWizard : public LLFloaterModelUploadBase
{
public:
@@ -62,13 +63,29 @@ public:
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
BOOL handleMouseUp(S32 x, S32 y, MASK mask);
BOOL handleHover(S32 x, S32 y, MASK mask);
- BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
void modelLoadedCallback();
- void onPhysicsChanged();
+ void modelChangedCallback();
void initDecompControls();
+ // shows warning message if agent has no permissions to upload model
+ /*virtual*/ void onPermissionsReceived(const LLSD& result);
+
+ // called when error occurs during permissions request
+ /*virtual*/ void setPermissonsErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url);
+
+ /*virtual*/ void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelUploadSuccess();
+
+ /*virtual*/ void onModelUploadFailure();
+
+ const LLRect& getPreviewRect() const { return mPreviewRect; }
+
LLPhysicsDecomp::decomp_params mDecompParams;
std::set<LLPointer<DecompRequest> > mCurRequest;
std::string mStatusMessage;
@@ -80,13 +97,16 @@ private:
CHOOSE_FILE = 0,
OPTIMIZE,
PHYSICS,
- PHYSICS2,
REVIEW,
UPLOAD
};
void setState(int state);
void updateButtons();
+ void onClickSwitchToAdvanced();
+ void onClickRecalculateGeometry();
+ void onClickRecalculatePhysics();
+ void onClickCalculateUploadFee();
void onClickCancel();
void onClickBack();
void onClickNext();
@@ -94,7 +114,6 @@ private:
bool onEnableBack();
void loadModel();
void onPreviewLODCommit(LLUICtrl*);
- void onAccuracyPerformance(const LLSD& data);
void onUpload();
LLModelPreview* mModelPreview;
@@ -106,7 +125,15 @@ private:
U32 mLastEnabledState;
+ LLButton* mRecalculateGeometryBtn;
+ LLButton* mRecalculatePhysicsBtn;
+ LLButton* mRecalculatingPhysicsBtn;
+ LLButton* mCalculateWeightsBtn;
+ LLButton* mCalculatingWeightsBtn;
+ LLView* mChooseFilePreviewPanel;
+ LLView* mOptimizePreviewPanel;
+ LLView* mPhysicsPreviewPanel;
};
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 7848484ac6..d65928e385 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -105,6 +105,7 @@
#include "llviewermedia.h"
#include "llpluginclassmedia.h"
#include "llteleporthistorystorage.h"
+#include "llproxy.h"
#include "lllogininstance.h" // to check if logged in yet
#include "llsdserialize.h"
@@ -158,7 +159,7 @@ BOOL LLVoiceSetKeyDialog::handleKeyHere(KEY key, MASK mask)
{
BOOL result = TRUE;
- if(key == 'Q' && mask == MASK_CONTROL)
+ if (key == 'Q' && mask == MASK_CONTROL)
{
result = FALSE;
}
@@ -333,16 +334,17 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.ClickEnablePopup", boost::bind(&LLFloaterPreference::onClickEnablePopup, this));
mCommitCallbackRegistrar.add("Pref.ClickDisablePopup", boost::bind(&LLFloaterPreference::onClickDisablePopup, this));
mCommitCallbackRegistrar.add("Pref.LogPath", boost::bind(&LLFloaterPreference::onClickLogPath, this));
- mCommitCallbackRegistrar.add("Pref.HardwareSettings", boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));
- mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this));
- mCommitCallbackRegistrar.add("Pref.VertexShaderEnable", boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));
- mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
- mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
- mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
+ mCommitCallbackRegistrar.add("Pref.HardwareSettings", boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));
+ mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this));
+ mCommitCallbackRegistrar.add("Pref.VertexShaderEnable", boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));
+ mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
+ mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
+ mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this));
mCommitCallbackRegistrar.add("Pref.BlockList", boost::bind(&LLFloaterPreference::onClickBlockList, this));
+ mCommitCallbackRegistrar.add("Pref.Proxy", boost::bind(&LLFloaterPreference::onClickProxySettings, this));
sSkin = gSavedSettings.getString("SkinCurrent");
@@ -457,7 +459,7 @@ BOOL LLFloaterPreference::postBuild()
void LLFloaterPreference::onBusyResponseChanged()
{
// set "BusyResponseChanged" TRUE if user edited message differs from default, FALSE otherwise
- if(LLTrans::getString("BusyModeResponseDefault") != getChild<LLUICtrl>("busy_response")->getValue().asString())
+ if (LLTrans::getString("BusyModeResponseDefault") != getChild<LLUICtrl>("busy_response")->getValue().asString())
{
gSavedPerAccountSettings.setBOOL("BusyResponseChanged", TRUE );
}
@@ -539,7 +541,7 @@ void LLFloaterPreference::apply()
LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
- if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
+ if (hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
{
bool proxy_enable = getChild<LLUICtrl>("web_proxy_enabled")->getValue();
std::string proxy_address = getChild<LLUICtrl>("web_proxy_editor")->getValue();
@@ -552,13 +554,13 @@ void LLFloaterPreference::apply()
gSavedSettings.setBOOL("PlainTextChatHistory", getChild<LLUICtrl>("plain_text_chat_history")->getValue().asBoolean());
- if(mGotPersonalInfo)
+ if (mGotPersonalInfo)
{
// gSavedSettings.setString("BusyModeResponse2", std::string(wstring_to_utf8str(busy_response)));
bool new_im_via_email = getChild<LLUICtrl>("send_im_to_email")->getValue().asBoolean();
bool new_hide_online = getChild<LLUICtrl>("online_visibility")->getValue().asBoolean();
- if((new_im_via_email != mOriginalIMViaEmail)
+ if ((new_im_via_email != mOriginalIMViaEmail)
||(new_hide_online != mOriginalHideOnlineStatus))
{
// This hack is because we are representing several different
@@ -566,13 +568,13 @@ void LLFloaterPreference::apply()
// can only select between 2 values, we represent it as a
// checkbox. This breaks down a little bit for liaisons, but
// works out in the end.
- if(new_hide_online != mOriginalHideOnlineStatus)
- {
- if(new_hide_online) mDirectoryVisibility = VISIBILITY_HIDDEN;
+ if (new_hide_online != mOriginalHideOnlineStatus)
+ {
+ if (new_hide_online) mDirectoryVisibility = VISIBILITY_HIDDEN;
else mDirectoryVisibility = VISIBILITY_DEFAULT;
//Update showonline value, otherwise multiple applys won't work
mOriginalHideOnlineStatus = new_hide_online;
- }
+ }
gAgent.sendAgentUpdateUserInfo(new_im_via_email,mDirectoryVisibility);
}
}
@@ -616,6 +618,11 @@ void LLFloaterPreference::cancel()
updateDoubleClickControls();
mDoubleClickActionDirty = false;
}
+ LLFloaterPreferenceProxy * advanced_proxy_settings = LLFloaterReg::findTypedInstance<LLFloaterPreferenceProxy>("prefs_proxy");
+ if (advanced_proxy_settings)
+ {
+ advanced_proxy_settings->cancel();
+ }
}
void LLFloaterPreference::onOpen(const LLSD& key)
@@ -751,10 +758,7 @@ void LLFloaterPreference::onBtnOK()
closeFloater(false);
LLUIColorTable::instance().saveUserSettings();
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
- std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- // save all settings, even if equals defaults
- gCrashSettings.saveToFile(crash_settings_filename, FALSE);
+ gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
}
else
{
@@ -802,7 +806,7 @@ void LLFloaterPreference::onBtnCancel()
void LLFloaterPreference::updateUserInfo(const std::string& visibility, bool im_via_email, const std::string& email)
{
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
- if(instance)
+ if (instance)
{
instance->setPersonalInfo(visibility, im_via_email, email);
}
@@ -812,7 +816,7 @@ void LLFloaterPreference::updateUserInfo(const std::string& visibility, bool im_
void LLFloaterPreference::refreshEnabledGraphics()
{
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
- if(instance)
+ if (instance)
{
instance->refresh();
//instance->refreshEnabledState();
@@ -1099,7 +1103,7 @@ void LLFloaterPreference::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
// if vertex shaders off, disable all shader related products
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
{
ctrl_shader_enable->setEnabled(FALSE);
ctrl_shader_enable->setValue(FALSE);
@@ -1130,7 +1134,7 @@ void LLFloaterPreference::disableUnavailableSettings()
}
// disabled windlight
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
{
ctrl_wind_light->setEnabled(FALSE);
ctrl_wind_light->setValue(FALSE);
@@ -1167,28 +1171,28 @@ void LLFloaterPreference::disableUnavailableSettings()
}
// disabled deferred SSAO
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
{
ctrl_ssao->setEnabled(FALSE);
ctrl_ssao->setValue(FALSE);
}
// disabled deferred shadows
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
{
ctrl_shadows->setEnabled(FALSE);
ctrl_shadows->setValue(0);
}
// disabled reflections
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
{
ctrl_reflections->setEnabled(FALSE);
ctrl_reflections->setValue(FALSE);
}
// disabled av
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"))
{
ctrl_avatar_vp->setEnabled(FALSE);
ctrl_avatar_vp->setValue(FALSE);
@@ -1211,14 +1215,14 @@ void LLFloaterPreference::disableUnavailableSettings()
}
// disabled cloth
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
{
ctrl_avatar_cloth->setEnabled(FALSE);
ctrl_avatar_cloth->setValue(FALSE);
}
// disabled impostors
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
{
ctrl_avatar_impostors->setEnabled(FALSE);
ctrl_avatar_impostors->setValue(FALSE);
@@ -1384,12 +1388,12 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
mOriginalIMViaEmail = im_via_email;
mDirectoryVisibility = visibility;
- if(visibility == VISIBILITY_DEFAULT)
+ if (visibility == VISIBILITY_DEFAULT)
{
mOriginalHideOnlineStatus = false;
getChildView("online_visibility")->setEnabled(TRUE);
}
- else if(visibility == VISIBILITY_HIDDEN)
+ else if (visibility == VISIBILITY_HIDDEN)
{
mOriginalHideOnlineStatus = true;
getChildView("online_visibility")->setEnabled(TRUE);
@@ -1437,7 +1441,7 @@ void LLFloaterPreference::onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name)
{
std::string ctrl_name = name.asString();
- if((ctrl_name =="" )|| !hasChild(ctrl_name, true))
+ if ((ctrl_name =="" )|| !hasChild(ctrl_name, true))
return;
LLTextBox* text_box = getChild<LLTextBox>(name.asString());
@@ -1447,7 +1451,7 @@ void LLFloaterPreference::onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name)
void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box)
{
- if(text_box == NULL || ctrl== NULL)
+ if (text_box == NULL || ctrl== NULL)
return;
// get range and points when text should change
@@ -1460,7 +1464,7 @@ void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_b
F32 highPoint = min + (2.0f * range / 3.0f);
// choose the right text
- if(value < midPoint)
+ if (value < midPoint)
{
text_box->setText(LLTrans::getString("GraphicsQualityLow"));
}
@@ -1544,6 +1548,11 @@ void LLFloaterPreference::updateDoubleClickSettings()
}
}
+void LLFloaterPreference::onClickProxySettings()
+{
+ LLFloaterReg::showInstance("prefs_proxy");
+}
+
void LLFloaterPreference::updateDoubleClickControls()
{
// check is one of double-click actions settings enabled
@@ -1640,7 +1649,7 @@ BOOL LLPanelPreference::postBuild()
{
////////////////////// PanelVoice ///////////////////
- if(hasChild("voice_unavailable"))
+ if (hasChild("voice_unavailable"))
{
BOOL voice_disabled = gSavedSettings.getBOOL("CmdLineDisableVoice");
getChildView("voice_unavailable")->setVisible( voice_disabled);
@@ -1662,7 +1671,7 @@ BOOL LLPanelPreference::postBuild()
}
- if(hasChild("online_visibility") && hasChild("send_im_to_email"))
+ if (hasChild("online_visibility") && hasChild("send_im_to_email"))
{
getChild<LLUICtrl>("email_address")->setValue(getString("log_in_to_change") );
// getChild<LLUICtrl>("busy_response")->setValue(getString("log_in_to_change"));
@@ -1791,7 +1800,7 @@ void LLPanelPreference::cancel()
iter != mSavedColors.end(); ++iter)
{
LLColorSwatchCtrl* color_swatch = findChild<LLColorSwatchCtrl>(iter->first);
- if(color_swatch)
+ if (color_swatch)
{
color_swatch->set(iter->second);
color_swatch->onCommit();
@@ -1835,7 +1844,7 @@ void LLPanelPreferenceGraphics::draw()
LLButton* button_apply = findChild<LLButton>("Apply");
- if(button_apply && button_apply->getVisible())
+ if (button_apply && button_apply->getVisible())
{
bool enable = hasDirtyChilds();
@@ -1855,7 +1864,7 @@ bool LLPanelPreferenceGraphics::hasDirtyChilds()
LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(curview);
if (ctrl)
{
- if(ctrl->isDirty())
+ if (ctrl->isDirty())
return true;
}
// Push children onto the end of the work stack
@@ -1911,3 +1920,188 @@ void LLPanelPreferenceGraphics::setHardwareDefaults()
resetDirtyChilds();
LLPanelPreference::setHardwareDefaults();
}
+
+LLFloaterPreferenceProxy::LLFloaterPreferenceProxy(const LLSD& key)
+ : LLFloater(key),
+ mSocksSettingsDirty(false)
+{
+ mCommitCallbackRegistrar.add("Proxy.OK", boost::bind(&LLFloaterPreferenceProxy::onBtnOk, this));
+ mCommitCallbackRegistrar.add("Proxy.Cancel", boost::bind(&LLFloaterPreferenceProxy::onBtnCancel, this));
+ mCommitCallbackRegistrar.add("Proxy.Change", boost::bind(&LLFloaterPreferenceProxy::onChangeSocksSettings, this));
+}
+
+LLFloaterPreferenceProxy::~LLFloaterPreferenceProxy()
+{
+}
+
+BOOL LLFloaterPreferenceProxy::postBuild()
+{
+ LLRadioGroup* socksAuth = getChild<LLRadioGroup>("socks5_auth_type");
+ if (!socksAuth)
+ {
+ return FALSE;
+ }
+ if (socksAuth->getSelectedValue().asString() == "None")
+ {
+ getChild<LLLineEditor>("socks5_username")->setEnabled(false);
+ getChild<LLLineEditor>("socks5_password")->setEnabled(false);
+ }
+ else
+ {
+ // Populate the SOCKS 5 credential fields with protected values.
+ LLPointer<LLCredential> socks_cred = gSecAPIHandler->loadCredential("SOCKS5");
+ getChild<LLLineEditor>("socks5_username")->setValue(socks_cred->getIdentifier()["username"].asString());
+ getChild<LLLineEditor>("socks5_password")->setValue(socks_cred->getAuthenticator()["creds"].asString());
+ }
+
+ center();
+ return TRUE;
+}
+
+void LLFloaterPreferenceProxy::onOpen(const LLSD& key)
+{
+ saveSettings();
+}
+
+void LLFloaterPreferenceProxy::onClose(bool app_quitting)
+{
+ if (mSocksSettingsDirty)
+ {
+
+ // If the user plays with the Socks proxy settings after login, it's only fair we let them know
+ // it will not be updated until next restart.
+ if (LLStartUp::getStartupState()>STATE_LOGIN_WAIT)
+ {
+ LLNotifications::instance().add("ChangeProxySettings", LLSD(), LLSD());
+ mSocksSettingsDirty = false; // we have notified the user now be quiet again
+ }
+ }
+}
+
+void LLFloaterPreferenceProxy::saveSettings()
+{
+ // Save the value of all controls in the hierarchy
+ mSavedValues.clear();
+ std::list<LLView*> view_stack;
+ view_stack.push_back(this);
+ while(!view_stack.empty())
+ {
+ // Process view on top of the stack
+ LLView* curview = view_stack.front();
+ view_stack.pop_front();
+
+ LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(curview);
+ if (ctrl)
+ {
+ LLControlVariable* control = ctrl->getControlVariable();
+ if (control)
+ {
+ mSavedValues[control] = control->getValue();
+ }
+ }
+
+ // Push children onto the end of the work stack
+ for (child_list_t::const_iterator iter = curview->getChildList()->begin();
+ iter != curview->getChildList()->end(); ++iter)
+ {
+ view_stack.push_back(*iter);
+ }
+ }
+}
+
+void LLFloaterPreferenceProxy::onBtnOk()
+{
+ // commit any outstanding text entry
+ if (hasFocus())
+ {
+ LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
+ if (cur_focus && cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ }
+
+ // Save SOCKS proxy credentials securely if password auth is enabled
+ LLRadioGroup* socksAuth = getChild<LLRadioGroup>("socks5_auth_type");
+ if (socksAuth->getSelectedValue().asString() == "UserPass")
+ {
+ LLSD socks_id = LLSD::emptyMap();
+ socks_id["type"] = "SOCKS5";
+ socks_id["username"] = getChild<LLLineEditor>("socks5_username")->getValue().asString();
+
+ LLSD socks_authenticator = LLSD::emptyMap();
+ socks_authenticator["type"] = "SOCKS5";
+ socks_authenticator["creds"] = getChild<LLLineEditor>("socks5_password")->getValue().asString();
+
+ // Using "SOCKS5" as the "grid" argument since the same proxy
+ // settings will be used for all grids and because there is no
+ // way to specify the type of credential.
+ LLPointer<LLCredential> socks_cred = gSecAPIHandler->createCredential("SOCKS5", socks_id, socks_authenticator);
+ gSecAPIHandler->saveCredential(socks_cred, true);
+ }
+ else
+ {
+ // Clear SOCKS5 credentials since they are no longer needed.
+ LLPointer<LLCredential> socks_cred = new LLCredential("SOCKS5");
+ gSecAPIHandler->deleteCredential(socks_cred);
+ }
+
+ closeFloater(false);
+}
+
+void LLFloaterPreferenceProxy::onBtnCancel()
+{
+ if (hasFocus())
+ {
+ LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
+ if (cur_focus && cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ refresh();
+ }
+
+ cancel();
+}
+
+void LLFloaterPreferenceProxy::cancel()
+{
+
+ for (control_values_map_t::iterator iter = mSavedValues.begin();
+ iter != mSavedValues.end(); ++iter)
+ {
+ LLControlVariable* control = iter->first;
+ LLSD ctrl_value = iter->second;
+ control->set(ctrl_value);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterPreferenceProxy::onChangeSocksSettings()
+{
+ mSocksSettingsDirty = true;
+
+ LLRadioGroup* socksAuth = getChild<LLRadioGroup>("socks5_auth_type");
+ if (socksAuth->getSelectedValue().asString() == "None")
+ {
+ getChild<LLLineEditor>("socks5_username")->setEnabled(false);
+ getChild<LLLineEditor>("socks5_password")->setEnabled(false);
+ }
+ else
+ {
+ getChild<LLLineEditor>("socks5_username")->setEnabled(true);
+ getChild<LLLineEditor>("socks5_password")->setEnabled(true);
+ }
+
+ // Check for invalid states for the other HTTP proxy radio
+ LLRadioGroup* otherHttpProxy = getChild<LLRadioGroup>("other_http_proxy_type");
+ if ((otherHttpProxy->getSelectedValue().asString() == "Socks" &&
+ getChild<LLCheckBoxCtrl>("socks_proxy_enabled")->get() == FALSE )||(
+ otherHttpProxy->getSelectedValue().asString() == "Web" &&
+ getChild<LLCheckBoxCtrl>("web_proxy_enabled")->get() == FALSE ) )
+ {
+ otherHttpProxy->selectFirstItem();
+ }
+
+};
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 61f2c78640..ef9bc2dd53 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -156,6 +156,7 @@ public:
void applyResolution();
void onChangeMaturity();
void onClickBlockList();
+ void onClickProxySettings();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
@@ -229,4 +230,33 @@ protected:
};
+class LLFloaterPreferenceProxy : public LLFloater
+{
+public:
+ LLFloaterPreferenceProxy(const LLSD& key);
+ ~LLFloaterPreferenceProxy();
+
+ /// show off our menu
+ static void show();
+ void cancel();
+
+protected:
+ BOOL postBuild();
+ void onOpen(const LLSD& key);
+ void onClose(bool app_quitting);
+ void saveSettings();
+ void onBtnOk();
+ void onBtnCancel();
+
+ void onChangeSocksSettings();
+
+private:
+
+ bool mSocksSettingsDirty;
+ typedef std::map<LLControlVariable*, LLSD> control_values_map_t;
+ control_values_map_t mSavedValues;
+
+};
+
+
#endif // LL_LLPREFERENCEFLOATER_H
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index dd12fa64d3..3f00ba39c7 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -887,18 +887,14 @@ void LLFloaterProperties::dirtyAll()
LLMultiProperties::LLMultiProperties()
: LLMultiFloater(LLSD())
{
- // *TODO: There should be a .xml file for this
- const LLRect& nextrect = LLFloaterReg::getFloaterRect("properties"); // place where the next properties should show up
- if (nextrect.getWidth() > 0)
- {
- setRect(nextrect);
- }
- else
- {
- // start with a small rect in the top-left corner ; will get resized
- LLRect rect;
- rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 20, 20);
- setRect(rect);
+ // start with a small rect in the top-left corner ; will get resized
+ LLRect rect;
+ rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 20, 20);
+ setRect(rect);
+ LLFloater* last_floater = LLFloaterReg::getLastFloaterInGroup("properties");
+ if (last_floater)
+ {
+ stackWith(*last_floater);
}
setTitle(LLTrans::getString("MultiPropertiesTitle"));
buildTabContainer();
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 6b3e3088d5..9a99417e93 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -40,6 +40,10 @@
#include "llxfermanager.h"
#include "indra_constants.h"
#include "message.h"
+#include "llloadingindicator.h"
+#include "llradiogroup.h"
+#include "llsd.h"
+#include "llsdserialize.h"
#include "llagent.h"
#include "llappviewer.h"
@@ -48,6 +52,9 @@
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llcombobox.h"
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
+#include "llestateinfomodel.h"
#include "llfilepicker.h"
#include "llfloatergodtools.h" // for send_sim_wide_deletes()
#include "llfloatertopobjects.h" // added to fix SL-32336
@@ -55,12 +62,12 @@
#include "llfloaterreg.h"
#include "llfloaterregiondebugconsole.h"
#include "llfloatertelehub.h"
-#include "llfloaterwindlight.h"
#include "llinventorymodel.h"
#include "lllineeditor.h"
#include "llnamelistctrl.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
+#include "llregioninfomodel.h"
#include "llscrolllistitem.h"
#include "llsliderctrl.h"
#include "llslurl.h"
@@ -80,6 +87,7 @@
#include "llviewertexteditor.h"
#include "llviewerwindow.h"
#include "llvlcomposition.h"
+#include "llwaterparammanager.h"
#include "lltrans.h"
#include "llagentui.h"
#include "llmeshrepository.h"
@@ -87,6 +95,8 @@
const S32 TERRAIN_TEXTURE_COUNT = 4;
const S32 CORNER_COUNT = 4;
+#define TMP_DISABLE_WLES // STORM-1180
+
///----------------------------------------------------------------------------
/// Local class declaration
///----------------------------------------------------------------------------
@@ -190,24 +200,24 @@ LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
BOOL LLFloaterRegionInfo::postBuild()
{
mTab = getChild<LLTabContainer>("region_panels");
+ mTab->setCommitCallback(boost::bind(&LLFloaterRegionInfo::onTabSelected, this, _2));
// contruct the panels
LLPanelRegionInfo* panel;
- panel = new LLPanelRegionGeneralInfo;
+ panel = new LLPanelEstateInfo;
mInfoPanels.push_back(panel);
- panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
-
- panel->buildFromFile("panel_region_general.xml");
+ panel->buildFromFile("panel_region_estate.xml");
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
- panel = new LLPanelRegionDebugInfo;
+ panel = new LLPanelEstateCovenant;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_debug.xml");
+ panel->buildFromFile("panel_region_covenant.xml");
mTab->addTabPanel(panel);
- panel = new LLPanelRegionTextureInfo;
+ panel = new LLPanelRegionGeneralInfo;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_texture.xml");
+ panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
+ panel->buildFromFile("panel_region_general.xml");
mTab->addTabPanel(panel);
panel = new LLPanelRegionTerrainInfo;
@@ -215,20 +225,23 @@ BOOL LLFloaterRegionInfo::postBuild()
panel->buildFromFile("panel_region_terrain.xml");
mTab->addTabPanel(panel);
- panel = new LLPanelEstateInfo;
+ panel = new LLPanelEnvironmentInfo;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_estate.xml");
+ panel->buildFromFile("panel_region_environment.xml");
mTab->addTabPanel(panel);
- panel = new LLPanelEstateCovenant;
+ panel = new LLPanelRegionDebugInfo;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_covenant.xml");
+ panel->buildFromFile("panel_region_debug.xml");
mTab->addTabPanel(panel);
gMessageSystem->setHandlerFunc(
"EstateOwnerMessage",
&processEstateOwnerRequest);
+ // Request region info when agent region changes.
+ LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this));
+
return TRUE;
}
@@ -307,17 +320,25 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
{
LLPanel* panel;
LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
- llinfos << "LLFloaterRegionInfo::processRegionInfo" << llendl;
if(!floater)
{
return;
}
+
+ // We need to re-request environment setting here,
+ // otherwise after we apply (send) updated region settings we won't get them back,
+ // so our environment won't be updated.
+ // This is also the way to know about externally changed region environment.
+ LLEnvManagerNew::instance().requestRegionSettings();
LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
LLViewerRegion* region = gAgent.getRegion();
BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
+ // *TODO: Replace parsing msg with accessing the region info model.
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+
// extract message
std::string sim_name;
std::string sim_type = LLTrans::getString("land_type_unknown");
@@ -347,6 +368,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
msg->getSize("RegionInfo2", "ProductName") > 0)
{
msg->getString("RegionInfo2", "ProductName", sim_type);
+ LLTrans::findString(sim_type, sim_type); // try localizing sim product name
}
// GENERAL PANEL
@@ -389,15 +411,10 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
panel = tab->getChild<LLPanel>("Terrain");
panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name));
- panel->getChild<LLUICtrl>("water_height_spin")->setValue(LLSD(water_height));
- panel->getChild<LLUICtrl>("terrain_raise_spin")->setValue(LLSD(terrain_raise_limit));
- panel->getChild<LLUICtrl>("terrain_lower_spin")->setValue(LLSD(terrain_lower_limit));
- panel->getChild<LLUICtrl>("use_estate_sun_check")->setValue(LLSD(use_estate_sun));
-
- panel->getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED)));
- panel->getChildView("fixed_sun_check")->setEnabled(allow_modify && !use_estate_sun);
- panel->getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour));
- panel->getChildView("sun_hour_slider")->setEnabled(allow_modify && !use_estate_sun);
+ panel->getChild<LLUICtrl>("water_height_spin")->setValue(region_info.mWaterHeight);
+ panel->getChild<LLUICtrl>("terrain_raise_spin")->setValue(region_info.mTerrainRaiseLimit);
+ panel->getChild<LLUICtrl>("terrain_lower_spin")->setValue(region_info.mTerrainLowerLimit);
+
panel->setCtrlsEnabled(allow_modify);
floater->refreshFromRegion( gAgent.getRegion() );
@@ -423,6 +440,29 @@ LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
return panel;
}
+// static
+LLPanelRegionTerrainInfo* LLFloaterRegionInfo::getPanelRegionTerrain()
+{
+ LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+ if (!floater)
+ {
+ llassert(floater);
+ return NULL;
+ }
+
+ LLTabContainer* tab_container = floater->getChild<LLTabContainer>("region_panels");
+ LLPanelRegionTerrainInfo* panel =
+ dynamic_cast<LLPanelRegionTerrainInfo*>(tab_container->getChild<LLPanel>("Terrain"));
+ llassert(panel);
+ return panel;
+}
+
+void LLFloaterRegionInfo::onTabSelected(const LLSD& param)
+{
+ LLPanel* active_panel = getChild<LLPanel>(param.asString());
+ active_panel->onOpen(LLSD());
+}
+
void LLFloaterRegionInfo::refreshFromRegion(LLViewerRegion* region)
{
if (!region)
@@ -503,8 +543,13 @@ void LLPanelRegionInfo::onChangeText(LLLineEditor* caller, void* user_data)
// virtual
BOOL LLPanelRegionInfo::postBuild()
{
- getChild<LLUICtrl>("apply_btn")->setCommitCallback(boost::bind(&LLPanelRegionInfo::onBtnSet, this));
- getChildView("apply_btn")->setEnabled(FALSE);
+ // If the panel has an Apply button, set a callback for it.
+ LLUICtrl* apply_btn = findChild<LLUICtrl>("apply_btn");
+ if (apply_btn)
+ {
+ apply_btn->setCommitCallback(boost::bind(&LLPanelRegionInfo::onBtnSet, this));
+ }
+
refresh();
return TRUE;
}
@@ -556,12 +601,14 @@ void LLPanelRegionInfo::sendEstateOwnerMessage(
void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable)
{
- getChildView(btn_name)->setEnabled(enable);
+ LLView* button = findChildView(btn_name);
+ if (button) button->setEnabled(enable);
}
void LLPanelRegionInfo::disableButton(const std::string& btn_name)
{
- getChildView(btn_name)->setEnabled(FALSE);
+ LLView* button = findChildView(btn_name);
+ if (button) button->setEnabled(FALSE);
}
void LLPanelRegionInfo::initCtrl(const std::string& name)
@@ -1052,131 +1099,7 @@ void LLPanelRegionDebugInfo::onClickCancelRestart(void* data)
}
-/////////////////////////////////////////////////////////////////////////////
-// LLPanelRegionTextureInfo
-//
-LLPanelRegionTextureInfo::LLPanelRegionTextureInfo() : LLPanelRegionInfo()
-{
- // nothing.
-}
-
-bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
-{
- BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
- setCtrlsEnabled(allow_modify);
- getChildView("apply_btn")->setEnabled(FALSE);
-
- if (region)
- {
- getChild<LLUICtrl>("region_text")->setValue(LLSD(region->getName()));
- }
- else
- {
- getChild<LLUICtrl>("region_text")->setValue(LLSD(""));
- }
-
- if (!region) return LLPanelRegionInfo::refreshFromRegion(region);
-
- LLVLComposition* compp = region->getComposition();
- LLTextureCtrl* texture_ctrl;
- std::string buffer;
- for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
- {
- buffer = llformat("texture_detail_%d", i);
- texture_ctrl = getChild<LLTextureCtrl>(buffer);
- if(texture_ctrl)
- {
- lldebugs << "Detail Texture " << i << ": "
- << compp->getDetailTextureID(i) << llendl;
- LLUUID tmp_id(compp->getDetailTextureID(i));
- texture_ctrl->setImageAssetID(tmp_id);
- }
- }
-
- for(S32 i = 0; i < CORNER_COUNT; ++i)
- {
- buffer = llformat("height_start_spin_%d", i);
- getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getStartHeight(i)));
- buffer = llformat("height_range_spin_%d", i);
- getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getHeightRange(i)));
- }
-
- // Call the parent for common book-keeping
- return LLPanelRegionInfo::refreshFromRegion(region);
-}
-
-
-BOOL LLPanelRegionTextureInfo::postBuild()
-{
- LLPanelRegionInfo::postBuild();
- std::string buffer;
- for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
- {
- buffer = llformat("texture_detail_%d", i);
- initCtrl(buffer);
- }
-
- for(S32 i = 0; i < CORNER_COUNT; ++i)
- {
- buffer = llformat("height_start_spin_%d", i);
- initCtrl(buffer);
- buffer = llformat("height_range_spin_%d", i);
- initCtrl(buffer);
- }
-
-// LLButton* btn = ("dump", LLRect(0, 20, 100, 0), "", onClickDump, this);
-// btn->setFollows(FOLLOWS_TOP|FOLLOWS_LEFT);
-// addChild(btn);
-
- return LLPanelRegionInfo::postBuild();
-}
-
-BOOL LLPanelRegionTextureInfo::sendUpdate()
-{
- llinfos << "LLPanelRegionTextureInfo::sendUpdate()" << llendl;
-
- // Make sure user hasn't chosen wacky textures.
- if (!validateTextureSizes())
- {
- return FALSE;
- }
-
- LLTextureCtrl* texture_ctrl;
- std::string buffer;
- std::string id_str;
- LLMessageSystem* msg = gMessageSystem;
- strings_t strings;
-
- LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
-
- for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
- {
- buffer = llformat("texture_detail_%d", i);
- texture_ctrl = getChild<LLTextureCtrl>(buffer);
- if(texture_ctrl)
- {
- LLUUID tmp_id(texture_ctrl->getImageAssetID());
- tmp_id.toString(id_str);
- buffer = llformat("%d %s", i, id_str.c_str());
- strings.push_back(buffer);
- }
- }
- sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
- strings.clear();
- for(S32 i = 0; i < CORNER_COUNT; ++i)
- {
- buffer = llformat("height_start_spin_%d", i);
- std::string buffer2 = llformat("height_range_spin_%d", i);
- std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
- strings.push_back(buffer3);
- }
- sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
- strings.clear();
- sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
- return TRUE;
-}
-
-BOOL LLPanelRegionTextureInfo::validateTextureSizes()
+BOOL LLPanelRegionTerrainInfo::validateTextureSizes()
{
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
@@ -1219,49 +1142,86 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes()
return TRUE;
}
-
-// static
-void LLPanelRegionTextureInfo::onClickDump(void* data)
-{
- llinfos << "LLPanelRegionTextureInfo::onClickDump()" << llendl;
-}
-
-
/////////////////////////////////////////////////////////////////////////////
// LLPanelRegionTerrainInfo
/////////////////////////////////////////////////////////////////////////////
+// Initialize statics
+
BOOL LLPanelRegionTerrainInfo::postBuild()
{
LLPanelRegionInfo::postBuild();
-
+
initCtrl("water_height_spin");
initCtrl("terrain_raise_spin");
initCtrl("terrain_lower_spin");
- initCtrl("fixed_sun_check");
- getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelRegionTerrainInfo::onChangeFixedSun, this));
- getChild<LLUICtrl>("use_estate_sun_check")->setCommitCallback(boost::bind(&LLPanelRegionTerrainInfo::onChangeUseEstateTime, this));
- getChild<LLUICtrl>("sun_hour_slider")->setCommitCallback(boost::bind(&LLPanelRegionTerrainInfo::onChangeSunHour, this));
+ std::string buffer;
+ for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
+ {
+ buffer = llformat("texture_detail_%d", i);
+ initCtrl(buffer);
+ }
+
+ for(S32 i = 0; i < CORNER_COUNT; ++i)
+ {
+ buffer = llformat("height_start_spin_%d", i);
+ initCtrl(buffer);
+ buffer = llformat("height_range_spin_%d", i);
+ initCtrl(buffer);
+ }
childSetAction("download_raw_btn", onClickDownloadRaw, this);
childSetAction("upload_raw_btn", onClickUploadRaw, this);
childSetAction("bake_terrain_btn", onClickBakeTerrain, this);
- return TRUE;
+ return LLPanelRegionInfo::postBuild();
}
// virtual
bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
{
- llinfos << "LLPanelRegionTerrainInfo::refreshFromRegion" << llendl;
-
BOOL owner_or_god = gAgent.isGodlike()
|| (region && (region->getOwner() == gAgent.getID()));
BOOL owner_or_god_or_manager = owner_or_god
|| (region && region->isEstateManager());
setCtrlsEnabled(owner_or_god_or_manager);
+
getChildView("apply_btn")->setEnabled(FALSE);
+ if (region)
+ {
+ getChild<LLUICtrl>("region_text")->setValue(LLSD(region->getName()));
+
+ LLVLComposition* compp = region->getComposition();
+ LLTextureCtrl* texture_ctrl;
+ std::string buffer;
+ for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
+ {
+ buffer = llformat("texture_detail_%d", i);
+ texture_ctrl = getChild<LLTextureCtrl>(buffer);
+ if(texture_ctrl)
+ {
+ lldebugs << "Detail Texture " << i << ": "
+ << compp->getDetailTextureID(i) << llendl;
+ LLUUID tmp_id(compp->getDetailTextureID(i));
+ texture_ctrl->setImageAssetID(tmp_id);
+ }
+ }
+
+ for(S32 i = 0; i < CORNER_COUNT; ++i)
+ {
+ buffer = llformat("height_start_spin_%d", i);
+ getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getStartHeight(i)));
+ buffer = llformat("height_range_spin_%d", i);
+ getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getHeightRange(i)));
+ }
+ }
+ else
+ {
+ lldebugs << "no region set" << llendl;
+ getChild<LLUICtrl>("region_text")->setValue(LLSD(""));
+ }
+
getChildView("download_raw_btn")->setEnabled(owner_or_god);
getChildView("upload_raw_btn")->setEnabled(owner_or_god);
getChildView("bake_terrain_btn")->setEnabled(owner_or_god);
@@ -1269,6 +1229,7 @@ bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
return LLPanelRegionInfo::refreshFromRegion(region);
}
+
// virtual
BOOL LLPanelRegionTerrainInfo::sendUpdate()
{
@@ -1277,76 +1238,62 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
strings_t strings;
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("water_height_spin")->getValue().asReal());
- strings.push_back(buffer);
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_raise_spin")->getValue().asReal());
- strings.push_back(buffer);
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal());
- strings.push_back(buffer);
- buffer = llformat("%s", (getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean() ? "Y" : "N"));
- strings.push_back(buffer);
- buffer = llformat("%s", (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean() ? "Y" : "N"));
- strings.push_back(buffer);
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal() );
- strings.push_back(buffer);
-
- // Grab estate information in case the user decided to set the
- // region back to estate time. JC
- LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
- if (!floater) return true;
-
- LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
- if (!tab) return true;
+ // update the model
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+ region_info.mWaterHeight = (F32) getChild<LLUICtrl>("water_height_spin")->getValue().asReal();
+ region_info.mTerrainRaiseLimit = (F32) getChild<LLUICtrl>("terrain_raise_spin")->getValue().asReal();
+ region_info.mTerrainLowerLimit = (F32) getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal();
- LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
- if (!panel) return true;
+ // and sync the region with it
+ region_info.sendRegionTerrain(invoice);
+
+ // =======================================
+ // Assemble and send texturedetail message
- BOOL estate_global_time = panel->getGlobalTime();
- BOOL estate_fixed_sun = panel->getFixedSun();
- F32 estate_sun_hour;
- if (estate_global_time)
+ // Make sure user hasn't chosen wacky textures.
+ if (!validateTextureSizes())
{
- estate_sun_hour = 0.f;
+ return FALSE;
}
- else
+
+ LLTextureCtrl* texture_ctrl;
+ std::string id_str;
+ LLMessageSystem* msg = gMessageSystem;
+
+ for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
- estate_sun_hour = panel->getSunHour();
+ buffer = llformat("texture_detail_%d", i);
+ texture_ctrl = getChild<LLTextureCtrl>(buffer);
+ if(texture_ctrl)
+ {
+ LLUUID tmp_id(texture_ctrl->getImageAssetID());
+ tmp_id.toString(id_str);
+ buffer = llformat("%d %s", i, id_str.c_str());
+ strings.push_back(buffer);
+ }
}
+ sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
+ strings.clear();
- buffer = llformat("%s", (estate_global_time ? "Y" : "N") );
- strings.push_back(buffer);
- buffer = llformat("%s", (estate_fixed_sun ? "Y" : "N") );
- strings.push_back(buffer);
- buffer = llformat("%f", estate_sun_hour);
- strings.push_back(buffer);
-
- sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings);
- return TRUE;
-}
+ // ========================================
+ // Assemble and send textureheights message
-void LLPanelRegionTerrainInfo::onChangeUseEstateTime()
-{
- BOOL use_estate_sun = getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean();
- getChildView("fixed_sun_check")->setEnabled(!use_estate_sun);
- getChildView("sun_hour_slider")->setEnabled(!use_estate_sun);
- if (use_estate_sun)
+ for(S32 i = 0; i < CORNER_COUNT; ++i)
{
- getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE));
- getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f));
+ buffer = llformat("height_start_spin_%d", i);
+ std::string buffer2 = llformat("height_range_spin_%d", i);
+ std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
+ strings.push_back(buffer3);
}
- getChildView("apply_btn")->setEnabled(TRUE);
-}
+ sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
+ strings.clear();
-void LLPanelRegionTerrainInfo::onChangeFixedSun()
-{
- // Just enable the apply button. We let the sun-hour slider be enabled
- // for both fixed-sun and non-fixed-sun. JC
- getChildView("apply_btn")->setEnabled(TRUE);
-}
+ // ========================================
+ // Send texturecommit message
-void LLPanelRegionTerrainInfo::onChangeSunHour()
-{
- getChildView("apply_btn")->setEnabled(TRUE);
+ sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
+
+ return TRUE;
}
// static
@@ -1406,6 +1353,7 @@ bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, con
strings.push_back("bake");
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
+
return false;
}
@@ -1417,6 +1365,9 @@ LLPanelEstateInfo::LLPanelEstateInfo()
: LLPanelRegionInfo(),
mEstateID(0) // invalid
{
+ LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+ estate_info.setCommitCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
+ estate_info.setUpdateCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
}
// static
@@ -1439,41 +1390,9 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch)
estate_dispatch_initialized = true;
}
-// Disables the sun-hour slider and the use fixed time check if the use global time is check
-void LLPanelEstateInfo::onChangeUseGlobalTime()
-{
- bool enabled = !getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean();
- getChildView("sun_hour_slider")->setEnabled(enabled);
- getChildView("fixed_sun_check")->setEnabled(enabled);
- getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE));
- enableButton("apply_btn");
-}
-
-// Enables the sun-hour slider if the fixed-sun checkbox is set
-void LLPanelEstateInfo::onChangeFixedSun()
-{
- bool enabled = !getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
- getChildView("use_global_time_check")->setEnabled(enabled);
- getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(FALSE));
- enableButton("apply_btn");
-}
-
-
-
-
//---------------------------------------------------------------------------
// Add/Remove estate access button callbacks
//---------------------------------------------------------------------------
-void LLPanelEstateInfo::onClickEditSky()
-{
- LLFloaterReg::showInstance("env_windlight");
-}
-
-void LLPanelEstateInfo::onClickEditDayCycle()
-{
- LLFloaterReg::showInstance("env_day_cycle");
-}
-
void LLPanelEstateInfo::onClickAddAllowedAgent()
{
LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list");
@@ -1673,10 +1592,7 @@ std::string all_estates_text()
// static
bool LLPanelEstateInfo::isLindenEstate()
{
- LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
- if (!panel) return false;
-
- U32 estate_id = panel->getEstateID();
+ U32 estate_id = LLEstateInfoModel::instance().getID();
return (estate_id <= ESTATE_LAST_LINDEN);
}
@@ -2030,7 +1946,6 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
BOOL manager = (region && region->isEstateManager());
setCtrlsEnabled(god || owner || manager);
- getChildView("apply_btn")->setEnabled(FALSE);
getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager);
getChildView("remove_allowed_avatar_btn")->setEnabled(god || owner || manager);
getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager);
@@ -2039,7 +1954,7 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
// Can't ban people from mainland, orientation islands, etc. because this
// creates much network traffic and server load.
// Disable their accounts in CSR tool instead.
- bool linden_estate = (getEstateID() <= ESTATE_LAST_LINDEN);
+ bool linden_estate = isLindenEstate();
bool enable_ban = (god || owner || manager) && !linden_estate;
getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
getChildView("remove_banned_avatar_btn")->setEnabled(enable_ban);
@@ -2051,6 +1966,8 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
getChildView("add_estate_manager_btn")->setEnabled(god || owner);
getChildView("remove_estate_manager_btn")->setEnabled(god || owner);
getChildView("estate_manager_name_list")->setEnabled(god || owner);
+
+ refresh();
}
bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
@@ -2088,10 +2005,6 @@ void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl)
{
// do nothing
}
- else if (checkSunHourSlider(child_ctrl))
- {
- // do nothing
- }
}
bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg)
@@ -2105,18 +2018,11 @@ BOOL LLPanelEstateInfo::postBuild()
{
// set up the callbacks for the generic controls
initCtrl("externally_visible_check");
- initCtrl("use_global_time_check");
- initCtrl("fixed_sun_check");
initCtrl("allow_direct_teleport");
initCtrl("limit_payment");
initCtrl("limit_age_verified");
initCtrl("voice_chat_check");
- // set up the use global time checkbox
- getChild<LLUICtrl>("use_global_time_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeUseGlobalTime, this));
- getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeFixedSun, this));
- getChild<LLUICtrl>("sun_hour_slider")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
-
getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
if (avatar_name_list)
@@ -2163,18 +2069,18 @@ BOOL LLPanelEstateInfo::postBuild()
childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this));
childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this));
- childSetAction("WLEditSky", boost::bind(&LLPanelEstateInfo::onClickEditSky, this));
- childSetAction("WLEditDayCycle", boost::bind(&LLPanelEstateInfo::onClickEditDayCycle, this));
-
return LLPanelRegionInfo::postBuild();
}
void LLPanelEstateInfo::refresh()
{
+ // Disable access restriction controls if they make no sense.
bool public_access = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean();
+
getChildView("Only Allow")->setEnabled(public_access);
getChildView("limit_payment")->setEnabled(public_access);
getChildView("limit_age_verified")->setEnabled(public_access);
+
// if this is set to false, then the limit fields are meaningless and should be turned off
if (public_access == false)
{
@@ -2183,6 +2089,39 @@ void LLPanelEstateInfo::refresh()
}
}
+void LLPanelEstateInfo::refreshFromEstate()
+{
+ const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+
+ getChild<LLUICtrl>("estate_name")->setValue(estate_info.getName());
+ setOwnerName(LLSLURL("agent", estate_info.getOwnerID(), "inspect").getSLURLString());
+
+ getChild<LLUICtrl>("externally_visible_check")->setValue(estate_info.getIsExternallyVisible());
+ getChild<LLUICtrl>("voice_chat_check")->setValue(estate_info.getAllowVoiceChat());
+ getChild<LLUICtrl>("allow_direct_teleport")->setValue(estate_info.getAllowDirectTeleport());
+ getChild<LLUICtrl>("limit_payment")->setValue(estate_info.getDenyAnonymous());
+ getChild<LLUICtrl>("limit_age_verified")->setValue(estate_info.getDenyAgeUnverified());
+
+ // If visible from mainland, disable the access allowed
+ // UI, as anyone can teleport there.
+ // However, gods need to be able to edit the access list for
+ // linden estates, regardless of visibility, to allow object
+ // and L$ transfers.
+ {
+ bool visible_from_mainland = estate_info.getIsExternallyVisible();
+ bool god = gAgent.isGodlike();
+ bool linden_estate = isLindenEstate();
+
+ bool enable_agent = (!visible_from_mainland || (god && linden_estate));
+ bool enable_group = enable_agent;
+ bool enable_ban = !linden_estate;
+
+ setAccessAllowedEnabled(enable_agent, enable_group, enable_ban);
+ }
+
+ refresh();
+}
+
BOOL LLPanelEstateInfo::sendUpdate()
{
llinfos << "LLPanelEsateInfo::sendUpdate()" << llendl;
@@ -2190,7 +2129,7 @@ BOOL LLPanelEstateInfo::sendUpdate()
LLNotification::Params params("ChangeLindenEstate");
params.functor.function(boost::bind(&LLPanelEstateInfo::callbackChangeLindenEstate, this, _1, _2));
- if (getEstateID() <= ESTATE_LAST_LINDEN)
+ if (isLindenEstate())
{
// trying to change reserved estate, warn
LLNotifications::instance().add(params);
@@ -2209,13 +2148,21 @@ bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, con
switch(option)
{
case 0:
- // send the update
- if (!commitEstateInfoCaps())
{
- // the caps method failed, try the old way
- LLFloaterRegionInfo::nextInvoice();
- commitEstateInfoDataserver();
+ LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+
+ // update model
+ estate_info.setUseFixedSun(false); // we don't support fixed sun estates anymore
+ estate_info.setIsExternallyVisible(getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean());
+ estate_info.setAllowDirectTeleport(getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean());
+ estate_info.setDenyAnonymous(getChild<LLUICtrl>("limit_payment")->getValue().asBoolean());
+ estate_info.setDenyAgeUnverified(getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean());
+ estate_info.setAllowVoiceChat(getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean());
+
+ // send the update to sim
+ estate_info.sendEstateInfo();
}
+
// we don't want to do this because we'll get it automatically from the sim
// after the spaceserver processes it
// else
@@ -2272,6 +2219,8 @@ public:
// if we get a normal response, handle it here
virtual void result(const LLSD& content)
{
+ LL_INFOS("Windlight") << "Successfully committed estate info" << llendl;
+
// refresh the panel from the database
LLPanelEstateInfo* panel = dynamic_cast<LLPanelEstateInfo*>(mpPanel.get());
if (panel)
@@ -2288,185 +2237,6 @@ private:
LLHandle<LLPanel> mpPanel;
};
-// tries to send estate info using a cap; returns true if it succeeded
-bool LLPanelEstateInfo::commitEstateInfoCaps()
-{
- std::string url = gAgent.getRegion()->getCapability("EstateChangeInfo");
-
- if (url.empty())
- {
- // whoops, couldn't find the cap, so bail out
- return false;
- }
-
- LLSD body;
- body["estate_name"] = getEstateName();
-
- body["is_externally_visible"] = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean();
- body["allow_direct_teleport"] = getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean();
- body["is_sun_fixed" ] = getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
- body["deny_anonymous" ] = getChild<LLUICtrl>("limit_payment")->getValue().asBoolean();
- body["deny_age_unverified" ] = getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean();
- body["allow_voice_chat" ] = getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean();
- body["invoice" ] = LLFloaterRegionInfo::getLastInvoice();
-
- // block fly is in estate database but not in estate UI, so we're not supporting it
- //body["block_fly" ] = getChild<LLUICtrl>("")->getValue().asBoolean();
-
- F32 sun_hour = getSunHour();
- if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean())
- {
- sun_hour = 0.f; // 0 = global time
- }
- body["sun_hour"] = sun_hour;
-
- // we use a responder so that we can re-get the data after committing to the database
- LLHTTPClient::post(url, body, new LLEstateChangeInfoResponder(this));
- return true;
-}
-
-/* This is the old way of doing things, is deprecated, and should be
- deleted when the dataserver model can be removed */
-// key = "estatechangeinfo"
-// strings[0] = str(estate_id) (added by simulator before relay - not here)
-// strings[1] = estate_name
-// strings[2] = str(estate_flags)
-// strings[3] = str((S32)(sun_hour * 1024.f))
-void LLPanelEstateInfo::commitEstateInfoDataserver()
-{
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("EstateOwnerMessage");
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
-
- msg->nextBlock("MethodData");
- msg->addString("Method", "estatechangeinfo");
- msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
-
- msg->nextBlock("ParamList");
- msg->addString("Parameter", getEstateName());
-
- std::string buffer;
- buffer = llformat("%u", computeEstateFlags());
- msg->nextBlock("ParamList");
- msg->addString("Parameter", buffer);
-
- F32 sun_hour = getSunHour();
- if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean())
- {
- sun_hour = 0.f; // 0 = global time
- }
-
- buffer = llformat("%d", (S32)(sun_hour*1024.0f));
- msg->nextBlock("ParamList");
- msg->addString("Parameter", buffer);
-
- gAgent.sendMessage();
-}
-
-void LLPanelEstateInfo::setEstateFlags(U32 flags)
-{
- getChild<LLUICtrl>("externally_visible_check")->setValue(LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) );
- getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) );
- getChild<LLUICtrl>("voice_chat_check")->setValue(
- LLSD(flags & REGION_FLAGS_ALLOW_VOICE ? TRUE : FALSE));
- getChild<LLUICtrl>("allow_direct_teleport")->setValue(LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) );
- getChild<LLUICtrl>("limit_payment")->setValue(LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) );
- getChild<LLUICtrl>("limit_age_verified")->setValue(LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) );
-
- refresh();
-}
-
-U32 LLPanelEstateInfo::computeEstateFlags()
-{
- U32 flags = 0;
-
- if (getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
- }
-
- if ( getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean() )
- {
- flags |= REGION_FLAGS_ALLOW_VOICE;
- }
-
- if (getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_ALLOW_DIRECT_TELEPORT;
- }
-
- if (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_SUN_FIXED;
- }
-
- if (getChild<LLUICtrl>("limit_payment")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_DENY_ANONYMOUS;
- }
-
- if (getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_DENY_AGEUNVERIFIED;
- }
-
-
- return flags;
-}
-
-BOOL LLPanelEstateInfo::getGlobalTime()
-{
- return getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean();
-}
-
-void LLPanelEstateInfo::setGlobalTime(bool b)
-{
- getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(b));
- getChildView("fixed_sun_check")->setEnabled(LLSD(!b));
- getChildView("sun_hour_slider")->setEnabled(LLSD(!b));
- if (b)
- {
- getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f));
- }
-}
-
-
-BOOL LLPanelEstateInfo::getFixedSun()
-{
- return getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
-}
-
-void LLPanelEstateInfo::setSunHour(F32 sun_hour)
-{
- if(sun_hour < 6.0f)
- {
- sun_hour = 24.0f + sun_hour;
- }
- getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour));
-}
-
-F32 LLPanelEstateInfo::getSunHour()
-{
- if (getChildView("sun_hour_slider")->getEnabled())
- {
- return (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal();
- }
- return 0.f;
-}
-
-const std::string LLPanelEstateInfo::getEstateName() const
-{
- return getChild<LLUICtrl>("estate_name")->getValue().asString();
-}
-
-void LLPanelEstateInfo::setEstateName(const std::string& name)
-{
- getChild<LLUICtrl>("estate_name")->setValue(LLSD(name));
-}
-
const std::string LLPanelEstateInfo::getOwnerName() const
{
return getChild<LLUICtrl>("estate_owner")->getValue().asString();
@@ -2566,17 +2336,6 @@ BOOL LLPanelEstateInfo::checkRemovalButton(std::string name)
return (btn_name != "");
}
-BOOL LLPanelEstateInfo::checkSunHourSlider(LLUICtrl* child_ctrl)
-{
- BOOL found_child_ctrl = FALSE;
- if (child_ctrl->getName() == "sun_hour_slider")
- {
- enableButton("apply_btn");
- found_child_ctrl = TRUE;
- }
- return found_child_ctrl;
-}
-
// static
void LLPanelEstateInfo::onClickMessageEstate(void* userdata)
{
@@ -2651,11 +2410,7 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
}
LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
- if (region_landtype)
- {
- region_landtype->setText(region->getSimProductName());
- }
-
+ region_landtype->setText(region->getLocalizedSimProductName());
// let the parent class handle the general data collection.
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
@@ -2978,53 +2733,12 @@ bool LLDispatchEstateUpdateInfo::operator()(
const LLUUID& invoice,
const sparam_t& strings)
{
- LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
- if (!panel) return true;
+ lldebugs << "Received estate update" << llendl;
- // NOTE: LLDispatcher extracts strings with an extra \0 at the
- // end. If we pass the std::string direct to the UI/renderer
- // it draws with a weird character at the end of the string.
- std::string estate_name = strings[0].c_str(); // preserve c_str() call!
- panel->setEstateName(estate_name);
-
- LLViewerRegion* regionp = gAgent.getRegion();
-
- LLUUID owner_id(strings[1]);
- regionp->setOwner(owner_id);
- // Update estate owner name in UI
- std::string owner_name = LLSLURL("agent", owner_id, "inspect").getSLURLString();
- panel->setOwnerName(owner_name);
-
- U32 estate_id = strtoul(strings[2].c_str(), NULL, 10);
- panel->setEstateID(estate_id);
-
- U32 flags = strtoul(strings[3].c_str(), NULL, 10);
- panel->setEstateFlags(flags);
-
- F32 sun_hour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
- if(sun_hour == 0 && (flags & REGION_FLAGS_SUN_FIXED ? FALSE : TRUE))
- {
- panel->setGlobalTime(TRUE);
- }
- else
- {
- panel->setGlobalTime(FALSE);
- panel->setSunHour(sun_hour);
- }
-
- bool visible_from_mainland = (bool)(flags & REGION_FLAGS_EXTERNALLY_VISIBLE);
- bool god = gAgent.isGodlike();
- bool linden_estate = (estate_id <= ESTATE_LAST_LINDEN);
-
- // If visible from mainland, disable the access allowed
- // UI, as anyone can teleport there.
- // However, gods need to be able to edit the access list for
- // linden estates, regardless of visibility, to allow object
- // and L$ transfers.
- bool enable_agent = (!visible_from_mainland || (god && linden_estate));
- bool enable_group = enable_agent;
- bool enable_ban = !linden_estate;
- panel->setAccessAllowedEnabled(enable_agent, enable_group, enable_ban);
+ // Update estate info model.
+ // This will call LLPanelEstateInfo::refreshFromEstate().
+ // *TODO: Move estate message handling stuff to llestateinfomodel.cpp.
+ LLEstateInfoModel::instance().update(strings);
return true;
}
@@ -3198,3 +2912,595 @@ bool LLDispatchSetEstateAccess::operator()(
return true;
}
+
+LLPanelEnvironmentInfo::LLPanelEnvironmentInfo()
+: mEnableEditing(false),
+ mRegionSettingsRadioGroup(NULL),
+ mDayCycleSettingsRadioGroup(NULL),
+ mWaterPresetCombo(NULL),
+ mSkyPresetCombo(NULL),
+ mDayCyclePresetCombo(NULL)
+{
+}
+
+// virtual
+BOOL LLPanelEnvironmentInfo::postBuild()
+{
+ mRegionSettingsRadioGroup = getChild<LLRadioGroup>("region_settings_radio_group");
+ mRegionSettingsRadioGroup->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSwitchRegionSettings, this));
+
+ mDayCycleSettingsRadioGroup = getChild<LLRadioGroup>("sky_dayc_settings_radio_group");
+ mDayCycleSettingsRadioGroup->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSwitchDayCycle, this));
+
+ mWaterPresetCombo = getChild<LLComboBox>("water_settings_preset_combo");
+ mWaterPresetCombo->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSelectWaterPreset, this));
+
+ mSkyPresetCombo = getChild<LLComboBox>("sky_settings_preset_combo");
+ mSkyPresetCombo->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSelectSkyPreset, this));
+
+ mDayCyclePresetCombo = getChild<LLComboBox>("dayc_settings_preset_combo");
+ mDayCyclePresetCombo->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSelectDayCycle, this));
+
+ childSetCommitCallback("apply_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnApply, this), NULL);
+ getChild<LLButton>("apply_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpUserPrefs, LLEnvManagerNew::getInstance()));
+ childSetCommitCallback("cancel_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnCancel, this), NULL);
+ getChild<LLButton>("cancel_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpPresets, LLEnvManagerNew::getInstance()));
+
+ LLEnvManagerNew::instance().setRegionSettingsChangeCallback(boost::bind(&LLPanelEnvironmentInfo::onRegionSettingschange, this));
+ LLEnvManagerNew::instance().setRegionSettingsAppliedCallback(boost::bind(&LLPanelEnvironmentInfo::onRegionSettingsApplied, this, _1));
+
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLPanelEnvironmentInfo::populateDayCyclesList, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLPanelEnvironmentInfo::populateSkyPresetsList, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLPanelEnvironmentInfo::populateWaterPresetsList, this));
+
+ return TRUE;
+}
+
+// virtual
+void LLPanelEnvironmentInfo::onOpen(const LLSD& key)
+{
+ LL_DEBUGS("Windlight") << "Panel opened, refreshing" << LL_ENDL;
+ refresh();
+}
+
+// virtual
+void LLPanelEnvironmentInfo::handleVisibilityChange(BOOL new_visibility)
+{
+ // If hiding (user switched to another tab or closed the floater),
+ // display user's preferred environment.
+ if (!new_visibility)
+ {
+ LLEnvManagerNew::instance().usePrefs();
+ }
+}
+
+// virtual
+bool LLPanelEnvironmentInfo::refreshFromRegion(LLViewerRegion* region)
+{
+ LL_DEBUGS("Windlight") << "Region updated, enabling/disabling controls" << LL_ENDL;
+ BOOL owner_or_god = gAgent.isGodlike() || (region && (region->getOwner() == gAgent.getID()));
+ BOOL owner_or_god_or_manager = owner_or_god || (region && region->isEstateManager());
+
+ // Don't refresh from region settings to avoid flicker after applying new region settings.
+ mEnableEditing = owner_or_god_or_manager;
+ setControlsEnabled(mEnableEditing);
+
+ return LLPanelRegionInfo::refreshFromRegion(region);
+}
+
+void LLPanelEnvironmentInfo::refresh()
+{
+ populateWaterPresetsList();
+ populateSkyPresetsList();
+ populateDayCyclesList();
+
+ // Init radio groups.
+ const LLEnvironmentSettings& settings = LLEnvManagerNew::instance().getRegionSettings();
+ const LLSD& dc = settings.getWLDayCycle();
+ LLSD::Real first_frame_time = dc.size() > 0 ? dc[0][0].asReal() : 0.0f;
+ const bool use_fixed_sky = dc.size() == 1 && first_frame_time < 0;
+ mRegionSettingsRadioGroup->setSelectedIndex(settings.getSkyMap().size() == 0 ? 0 : 1);
+ mDayCycleSettingsRadioGroup->setSelectedIndex(use_fixed_sky ? 0 : 1);
+
+ setControlsEnabled(mEnableEditing);
+
+ setDirty(false);
+}
+
+void LLPanelEnvironmentInfo::setControlsEnabled(bool enabled)
+{
+ mRegionSettingsRadioGroup->setEnabled(enabled);
+ mDayCycleSettingsRadioGroup->setEnabled(enabled);
+
+ mWaterPresetCombo->setEnabled(enabled);
+ mSkyPresetCombo->setEnabled(enabled);
+ mDayCyclePresetCombo->setEnabled(enabled);
+
+ getChildView("apply_btn")->setEnabled(enabled);
+ getChildView("cancel_btn")->setEnabled(enabled);
+
+ if (enabled)
+ {
+ // Enable/disable some controls based on currently selected radio buttons.
+ bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ getChild<LLView>("user_environment_settings")->setEnabled(!use_defaults);
+
+ bool is_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+ mSkyPresetCombo->setEnabled(is_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!is_fixed_sky);
+ }
+}
+
+void LLPanelEnvironmentInfo::setApplyProgress(bool started)
+{
+ LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
+
+ indicator->setVisible(started);
+
+ if (started)
+ {
+ indicator->start();
+ }
+ else
+ {
+ indicator->stop();
+ }
+}
+
+void LLPanelEnvironmentInfo::setDirty(bool dirty)
+{
+ getChildView("apply_btn")->setEnabled(dirty);
+ getChildView("cancel_btn")->setEnabled(dirty);
+}
+
+void LLPanelEnvironmentInfo::sendRegionSunUpdate()
+{
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+
+ // If the region is being switched to fixed sky,
+ // change the region's sun hour according to the (fixed) sun position.
+ // This is needed for llGetSunDirection() LSL function to work properly (STORM-1330).
+ const LLSD& sky_map = mNewRegionSettings.getSkyMap();
+ bool region_use_fixed_sky = sky_map.size() == 1;
+ if (region_use_fixed_sky)
+ {
+ LLWLParamSet param_set;
+ llassert(sky_map.isMap());
+ param_set.setAll(sky_map.beginMap()->second);
+ F32 sun_angle = param_set.getSunAngle();
+
+ LL_DEBUGS("Windlight Sync") << "Old sun hour: " << region_info.mSunHour << LL_ENDL;
+ // convert value range from 0..2pi to 6..30
+ region_info.mSunHour = fmodf((sun_angle / F_TWO_PI) * 24.f, 24.f) + 6.f;
+ }
+
+ region_info.setUseFixedSun(region_use_fixed_sky);
+ region_info.mUseEstateSun = !region_use_fixed_sky;
+ LL_DEBUGS("Windlight Sync") << "Sun hour: " << region_info.mSunHour << LL_ENDL;
+
+ region_info.sendRegionTerrain(LLFloaterRegionInfo::getLastInvoice());
+}
+
+void LLPanelEnvironmentInfo::fixEstateSun()
+{
+ // We don't support fixed sun estates anymore and need to fix
+ // such estates for region day cycle to take effect.
+ // *NOTE: Assuming that current estate settings have arrived already.
+ LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+ if (estate_info.getUseFixedSun())
+ {
+ llinfos << "Switching estate to global sun" << llendl;
+ estate_info.setUseFixedSun(false);
+ estate_info.sendEstateInfo();
+ }
+}
+
+void LLPanelEnvironmentInfo::populateWaterPresetsList()
+{
+ mWaterPresetCombo->removeall();
+
+ // If the region already has water params, add them to the list.
+ const LLEnvironmentSettings& region_settings = LLEnvManagerNew::instance().getRegionSettings();
+ if (region_settings.getWaterParams().size() != 0)
+ {
+ const std::string& region_name = gAgent.getRegion()->getName();
+ mWaterPresetCombo->add(region_name, LLWLParamKey(region_name, LLEnvKey::SCOPE_REGION).toLLSD());
+ mWaterPresetCombo->addSeparator();
+ }
+
+ std::list<std::string> user_presets, system_presets;
+ LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
+
+ // Add local user presets first.
+ for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ if (user_presets.size() > 0)
+ {
+ mWaterPresetCombo->addSeparator();
+ }
+
+ // Add local system presets.
+ for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ // There's no way to select current preset because its name is not stored on server.
+}
+
+void LLPanelEnvironmentInfo::populateSkyPresetsList()
+{
+ mSkyPresetCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets;
+ LLWLParamManager::preset_name_list_t user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+ // Add region presets.
+ std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
+ {
+ std::string preset_name = *it;
+ std::string item_title = preset_name + " (" + region_name + ")";
+ mSkyPresetCombo->add(item_title, LLWLParamKey(preset_name, LLEnvKey::SCOPE_REGION).toStringVal());
+ }
+
+ if (!region_presets.empty())
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ if (!user_presets.empty())
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ // Select current preset.
+ LLSD sky_map = LLEnvManagerNew::instance().getRegionSettings().getSkyMap();
+ if (sky_map.size() == 1) // if the region is set to fixed sky
+ {
+ std::string preset_name = sky_map.beginMap()->first;
+ mSkyPresetCombo->selectByValue(LLWLParamKey(preset_name, LLEnvKey::SCOPE_REGION).toStringVal());
+ }
+}
+
+void LLPanelEnvironmentInfo::populateDayCyclesList()
+{
+ mDayCyclePresetCombo->removeall();
+
+ // If the region already has env. settings, add its day cycle to the list.
+ const LLSD& cur_region_dc = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+ if (cur_region_dc.size() != 0)
+ {
+ LLViewerRegion* region = gAgent.getRegion();
+ llassert(region != NULL);
+
+ LLWLParamKey key(region->getName(), LLEnvKey::SCOPE_REGION);
+ mDayCyclePresetCombo->add(region->getName(), key.toStringVal());
+ mDayCyclePresetCombo->addSeparator();
+ }
+
+ // Add local user day cycles.
+ LLDayCycleManager::preset_name_list_t user_days, sys_days;
+ LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ if (user_days.size() > 0)
+ {
+ mDayCyclePresetCombo->addSeparator();
+ }
+
+ // Add local system day cycles.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ // Current day cycle is already selected.
+}
+
+bool LLPanelEnvironmentInfo::getSelectedWaterParams(LLSD& water_params)
+{
+ LLWLParamKey water_key(mWaterPresetCombo->getSelectedValue());
+
+ if (water_key.scope == LLEnvKey::SCOPE_REGION)
+ {
+ water_params = LLEnvManagerNew::instance().getRegionSettings().getWaterParams();
+ }
+ else
+ {
+ LLWaterParamSet param_set;
+ if (!LLWaterParamManager::instance().getParamSet(water_key.name, param_set))
+ {
+ llwarns << "Error getting water preset: " << water_key.name << llendl;
+ return false;
+ }
+
+ water_params = param_set.getAll();
+ }
+
+ return true;
+}
+
+bool LLPanelEnvironmentInfo::getSelectedSkyParams(LLSD& sky_params, std::string& preset_name)
+{
+ std::string preset_key(mSkyPresetCombo->getValue().asString());
+ LLWLParamKey preset(preset_key);
+
+ // Get the preset sky params.
+ LLWLParamSet param_set;
+ if (!LLWLParamManager::instance().getParamSet(preset, param_set))
+ {
+ llwarns << "Error getting sky params: " << preset.toLLSD() << llendl;
+ return false;
+ }
+
+ sky_params = param_set.getAll();
+ preset_name = preset.name;
+ return true;
+}
+
+bool LLPanelEnvironmentInfo::getSelectedDayCycleParams(LLSD& day_cycle, LLSD& sky_map, short& scope)
+{
+ std::string preset_key(mDayCyclePresetCombo->getValue().asString());
+ LLWLParamKey dc(preset_key);
+ LL_DEBUGS("Windlight") << "Use day cycle: " << dc.toLLSD() << LL_ENDL;
+
+ if (dc.scope == LLEnvKey::SCOPE_REGION) // current region day cycle
+ {
+ const LLEnvironmentSettings& cur_region_settings = LLEnvManagerNew::instance().getRegionSettings();
+ day_cycle = cur_region_settings.getWLDayCycle();
+ sky_map = cur_region_settings.getSkyMap();
+ }
+ else // a local day cycle
+ {
+ if (!LLDayCycleManager::instance().getPreset(dc.name, day_cycle))
+ {
+ llwarns << "Error getting day cycle " << dc.name << llendl;
+ return false;
+ }
+
+ // Create sky map from the day cycle.
+ {
+ LLWLDayCycle tmp_day;
+ tmp_day.loadDayCycle(day_cycle, dc.scope);
+ tmp_day.getSkyMap(sky_map);
+ }
+ }
+
+ scope = dc.scope;
+
+ return true;
+}
+void LLPanelEnvironmentInfo::onSwitchRegionSettings()
+{
+ bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ getChild<LLView>("user_environment_settings")->setEnabled(!use_defaults);
+
+ if (use_defaults)
+ {
+ LLEnvManagerNew::instance().useDefaults();
+ }
+ else
+ {
+ onSelectWaterPreset();
+ onSwitchDayCycle();
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSwitchDayCycle()
+{
+ bool is_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+
+ mSkyPresetCombo->setEnabled(is_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!is_fixed_sky);
+
+ if (is_fixed_sky)
+ {
+ onSelectSkyPreset();
+ }
+ else
+ {
+ onSelectDayCycle();
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSelectWaterPreset()
+{
+ LLSD water_params;
+
+ if (getSelectedWaterParams(water_params))
+ {
+ LLEnvManagerNew::instance().useWaterParams(water_params);
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSelectSkyPreset()
+{
+ LLSD params;
+ std::string dummy;
+
+ if (getSelectedSkyParams(params, dummy))
+ {
+ LLEnvManagerNew::instance().useSkyParams(params);
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSelectDayCycle()
+{
+ LLSD day_cycle;
+ LLSD sky_map; // unused
+ short scope;
+
+ if (getSelectedDayCycleParams(day_cycle, sky_map, scope))
+ {
+ LLEnvManagerNew::instance().useDayCycleParams(day_cycle, (LLEnvKey::EScope) scope);
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onBtnApply()
+{
+ const bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ const bool use_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+
+ LLSD day_cycle;
+ LLSD sky_map;
+ LLSD water_params;
+
+ if (use_defaults)
+ {
+ // settings will be empty
+ LL_DEBUGS("Windlight") << "Defaults" << LL_ENDL;
+ }
+ else // use custom region settings
+ {
+ if (use_fixed_sky)
+ {
+ LL_DEBUGS("Windlight") << "Use fixed sky" << LL_ENDL;
+
+ // Get selected sky params.
+ LLSD params;
+ std::string preset_name;
+ if (!getSelectedSkyParams(params, preset_name))
+ {
+ return;
+ }
+
+ // Create a day cycle consisting of a single sky preset.
+ LLSD key(LLSD::emptyArray());
+ key.append(-1.0f); // indicate that user preference is actually fixed sky, not a day cycle
+ key.append(preset_name);
+ day_cycle.append(key);
+
+ // Create a sky map consisting of only the sky preset.
+ std::map<LLWLParamKey, LLWLParamSet> refs;
+ LLWLParamSet param_set;
+ param_set.setAll(params);
+ refs[LLWLParamKey(preset_name, LLEnvKey::SCOPE_LOCAL)] = param_set; // scope doesn't matter here
+ sky_map = LLWLParamManager::createSkyMap(refs);
+ }
+ else // use day cycle
+ {
+ LL_DEBUGS("Windlight") << "Use day cycle" << LL_ENDL;
+
+ short scope; // unused
+ if (!getSelectedDayCycleParams(day_cycle, sky_map, scope))
+ {
+ return;
+ }
+
+ // If it's a special single-preset day cycle meaning using a fixed sky,
+ // reset the frame time to a non-negative value,
+ // so that the region setting is displayed in the floater as
+ // a day cycle, not a preset. (STORM-1289)
+ if (day_cycle.size() == 1 && day_cycle[0][0].asReal() < 0.0f)
+ {
+ LL_DEBUGS("Windlight") << "Fixing negative time" << LL_ENDL;
+ day_cycle[0][0] = 0.0f;
+ }
+ }
+
+ // Get water params.
+ if (!getSelectedWaterParams(water_params))
+ {
+ // *TODO: show a notification?
+ return;
+ }
+ }
+
+ // Send settings apply request.
+ LLEnvironmentSettings new_region_settings;
+ new_region_settings.saveParams(day_cycle, sky_map, water_params, 0.0f);
+ if (!LLEnvManagerNew::instance().sendRegionSettings(new_region_settings))
+ {
+ llwarns << "Error applying region environment settings" << llendl;
+ return;
+ }
+
+ // When the settings get applied, we'll also send the region sun position update.
+ // To determine the sun angle we're going to need the new settings.
+ mNewRegionSettings = new_region_settings;
+
+ // Start spinning the progress indicator.
+ setApplyProgress(true);
+}
+
+void LLPanelEnvironmentInfo::onBtnCancel()
+{
+ // Reload last saved region settings.
+ refresh();
+
+ // Apply them.
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ const LLEnvironmentSettings& cur_settings = env_mgr.getRegionSettings();
+ const LLSD& region_day_cycle = cur_settings.getWLDayCycle();
+ const LLSD& region_water = cur_settings.getWaterParams();
+ env_mgr.useWaterParams(region_water);
+ env_mgr.useDayCycleParams(region_day_cycle, LLEnvKey::SCOPE_REGION);
+}
+
+void LLPanelEnvironmentInfo::onRegionSettingschange()
+{
+ LL_DEBUGS("Windlight") << "Region settings changed, refreshing" << LL_ENDL;
+ refresh();
+
+ // Stop applying progress indicator (it may be running if it's us who initiated settings update).
+ setApplyProgress(false);
+}
+
+void LLPanelEnvironmentInfo::onRegionSettingsApplied(bool ok)
+{
+ // If applying new settings has failed, stop the indicator right away.
+ // Otherwise it will be stopped when we receive the updated settings from server.
+ if (ok)
+ {
+ // Set the region sun phase/flags according to the chosen new preferences.
+ //
+ // If we do this earlier we may get jerky transition from fixed sky to a day cycle (STORM-1481).
+ // That is caused by the simulator re-sending the region info, which in turn makes us
+ // re-request and display old region environment settings while the new ones haven't been applied yet.
+ sendRegionSunUpdate();
+
+ // Switch estate to not using fixed sun for the region day cycle to work properly (STORM-1506).
+ fixEstateSun();
+ }
+ else
+ {
+ setApplyProgress(false);
+
+ // We need to re-request environment setting here,
+ // otherwise our subsequent attempts to change region settings will fail with the following error:
+ // "Unable to update environment settings because the last update your viewer saw was not the same
+ // as the last update sent from the simulator. Try sending your update again, and if this
+ // does not work, try leaving and returning to the region."
+ LLEnvManagerNew::instance().requestRegionSettings();
+ }
+}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 2b87c27fcf..c1fef57ac9 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -34,6 +34,8 @@
#include "llhost.h"
#include "llpanel.h"
+#include "llenvmanager.h" // for LLEnvironmentSettings
+
class LLAvatarName;
class LLDispatcher;
class LLLineEditor;
@@ -46,6 +48,7 @@ class LLInventoryItem;
class LLCheckBoxCtrl;
class LLComboBox;
class LLNameListCtrl;
+class LLRadioGroup;
class LLSliderCtrl;
class LLSpinCtrl;
class LLTextBox;
@@ -53,11 +56,17 @@ class LLVFS;
class LLPanelRegionGeneralInfo;
class LLPanelRegionDebugInfo;
-class LLPanelRegionTextureInfo;
class LLPanelRegionTerrainInfo;
class LLPanelEstateInfo;
class LLPanelEstateCovenant;
+class LLEventTimer;
+class LLEnvironmentSettings;
+class LLWLParamManager;
+class LLWaterParamManager;
+class LLWLParamSet;
+class LLWaterParamSet;
+
class LLFloaterRegionInfo : public LLFloater
{
friend class LLFloaterReg;
@@ -79,6 +88,7 @@ public:
static LLPanelEstateInfo* getPanelEstate();
static LLPanelEstateCovenant* getPanelCovenant();
+ static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
// from LLPanel
virtual void refresh();
@@ -96,6 +106,7 @@ private:
boost::signals2::connection mConsoleReplySignalConnection;;
protected:
+ void onTabSelected(const LLSD& param);
void refreshFromRegion(LLViewerRegion* region);
// member data
@@ -208,44 +219,25 @@ private:
/////////////////////////////////////////////////////////////////////////////
-class LLPanelRegionTextureInfo : public LLPanelRegionInfo
+class LLPanelRegionTerrainInfo : public LLPanelRegionInfo
{
+ LOG_CLASS(LLPanelRegionTerrainInfo);
+
public:
- LLPanelRegionTextureInfo();
- ~LLPanelRegionTextureInfo() {}
-
- virtual bool refreshFromRegion(LLViewerRegion* region);
-
- // LLPanel && LLView
- virtual BOOL postBuild();
+ LLPanelRegionTerrainInfo() : LLPanelRegionInfo() {}
+ ~LLPanelRegionTerrainInfo() {}
-protected:
- virtual BOOL sendUpdate();
+ virtual BOOL postBuild(); // LLPanel
- static void onClickDump(void* data);
- BOOL validateTextureSizes();
-};
+ virtual bool refreshFromRegion(LLViewerRegion* region); // refresh local settings from region update from simulator
+ void setEnvControls(bool available); // Whether environment settings are available for this region
-/////////////////////////////////////////////////////////////////////////////
+ BOOL validateTextureSizes();
-class LLPanelRegionTerrainInfo : public LLPanelRegionInfo
-{
-public:
- LLPanelRegionTerrainInfo()
- : LLPanelRegionInfo() {}
- ~LLPanelRegionTerrainInfo() {}
- // LLPanel
- virtual BOOL postBuild();
-
- virtual bool refreshFromRegion(LLViewerRegion* region);
+ //static void onChangeAnything(LLUICtrl* ctrl, void* userData); // callback for any change, to enable commit button
-protected:
virtual BOOL sendUpdate();
- void onChangeUseEstateTime();
- void onChangeFixedSun();
- void onChangeSunHour();
-
static void onClickDownloadRaw(void*);
static void onClickUploadRaw(void*);
static void onClickBakeTerrain(void*);
@@ -312,23 +304,9 @@ public:
virtual BOOL postBuild();
virtual void updateChild(LLUICtrl* child_ctrl);
virtual void refresh();
-
- U32 computeEstateFlags();
- void setEstateFlags(U32 flags);
-
- BOOL getGlobalTime();
- void setGlobalTime(bool b);
-
- BOOL getFixedSun();
- F32 getSunHour();
- void setSunHour(F32 sun_hour);
+ void refreshFromEstate();
- const std::string getEstateName() const;
- void setEstateName(const std::string& name);
-
- U32 getEstateID() const { return mEstateID; }
- void setEstateID(U32 estate_id) { mEstateID = estate_id; }
static bool isLindenEstate();
const std::string getOwnerName() const;
@@ -337,14 +315,11 @@ public:
// If visible from mainland, allowed agent and allowed groups
// are ignored, so must disable UI.
void setAccessAllowedEnabled(bool enable_agent, bool enable_group, bool enable_ban);
-
protected:
virtual BOOL sendUpdate();
// confirmation dialog callback
bool callbackChangeLindenEstate(const LLSD& notification, const LLSD& response);
- void commitEstateInfoDataserver();
- bool commitEstateInfoCaps();
void commitEstateAccess();
void commitEstateManagers();
@@ -417,4 +392,66 @@ protected:
EAssetStatus mAssetStatus;
};
+/////////////////////////////////////////////////////////////////////////////
+
+class LLPanelEnvironmentInfo : public LLPanelRegionInfo
+{
+ LOG_CLASS(LLPanelEnvironmentInfo);
+
+public:
+ LLPanelEnvironmentInfo();
+
+ // LLPanel
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ // LLView
+ /*virtual*/ void handleVisibilityChange(BOOL new_visibility);
+
+ // LLPanelRegionInfo
+ /*virtual*/ bool refreshFromRegion(LLViewerRegion* region);
+
+private:
+ void refresh();
+ void setControlsEnabled(bool enabled);
+ void setApplyProgress(bool started);
+ void setDirty(bool dirty);
+
+ void sendRegionSunUpdate();
+ void fixEstateSun();
+
+ void populateWaterPresetsList();
+ void populateSkyPresetsList();
+ void populateDayCyclesList();
+
+ bool getSelectedWaterParams(LLSD& water_params);
+ bool getSelectedSkyParams(LLSD& sky_params, std::string& preset_name);
+ bool getSelectedDayCycleParams(LLSD& day_cycle, LLSD& sky_map, short& scope);
+
+ void onSwitchRegionSettings();
+ void onSwitchDayCycle();
+
+ void onSelectWaterPreset();
+ void onSelectSkyPreset();
+ void onSelectDayCycle();
+
+ void onBtnApply();
+ void onBtnCancel();
+
+ void onRegionSettingschange();
+ void onRegionSettingsApplied(bool ok);
+
+ /// New environment settings that are being applied to the region.
+ LLEnvironmentSettings mNewRegionSettings;
+
+ bool mEnableEditing;
+
+ LLRadioGroup* mRegionSettingsRadioGroup;
+ LLRadioGroup* mDayCycleSettingsRadioGroup;
+
+ LLComboBox* mWaterPresetCombo;
+ LLComboBox* mSkyPresetCombo;
+ LLComboBox* mDayCyclePresetCombo;
+};
+
#endif
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index d5806e375c..23cc23376f 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -27,16 +27,26 @@
#include "llviewerprecompiledheaders.h"
+#include "llappviewer.h"
+#include "llbase64.h"
#include "llcommandhandler.h"
#include "llfloaterreg.h"
#include "llfloatersearch.h"
#include "llmediactrl.h"
#include "llnotificationsutil.h"
+#include "llparcel.h"
+#include "llplugincookiestore.h"
#include "lllogininstance.h"
#include "lluri.h"
#include "llagent.h"
+#include "llsdserialize.h"
#include "llui.h"
#include "llviewercontrol.h"
+#include "llviewerregion.h"
+#include "llversioninfo.h"
+#include "llviewermedia.h"
+#include "llviewernetwork.h"
+#include "llviewerparcelmgr.h"
#include "llweb.h"
// support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps
@@ -70,21 +80,24 @@ public:
}
// create the LLSD arguments for the search floater
- LLSD args;
- args["category"] = category;
- args["id"] = LLURI::unescape(search_text);
+ LLFloaterSearch::Params p;
+ p.search.category = category;
+ p.search.query = LLURI::unescape(search_text);
// open the search floater and perform the requested search
- LLFloaterReg::showInstance("search", args);
+ LLFloaterReg::showInstance("search", p);
return true;
}
};
LLSearchHandler gSearchHandler;
-LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
- LLFloater(key),
- LLViewerMediaObserver(),
- mBrowser(NULL),
+LLFloaterSearch::SearchQuery::SearchQuery()
+: category("category", ""),
+ query("query")
+{}
+
+LLFloaterSearch::LLFloaterSearch(const Params& key) :
+ LLFloaterWebContent(key),
mSearchGodLevel(0)
{
// declare a map that transforms a category name into
@@ -102,53 +115,45 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
BOOL LLFloaterSearch::postBuild()
{
- mBrowser = getChild<LLMediaCtrl>("browser");
- mBrowser->addObserver(this);
+ LLFloaterWebContent::postBuild();
+ mWebBrowser->addObserver(this);
return TRUE;
}
void LLFloaterSearch::onOpen(const LLSD& key)
{
- search(key);
+ Params p(key);
+ p.trusted_content = true;
+ p.allow_address_entry = false;
+
+ LLFloaterWebContent::onOpen(p);
+ search(p.search);
}
void LLFloaterSearch::onClose(bool app_quitting)
{
+ LLFloaterWebContent::onClose(app_quitting);
// tear down the web view so we don't show the previous search
// result when the floater is opened next time
destroy();
}
-void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)
-{
- switch (event)
- {
- case MEDIA_EVENT_NAVIGATE_BEGIN:
- getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
- break;
-
- case MEDIA_EVENT_NAVIGATE_COMPLETE:
- getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
- break;
-
- default:
- break;
- }
-}
-
void LLFloaterSearch::godLevelChanged(U8 godlevel)
{
// search results can change based upon god level - if the user
// changes god level, then give them a warning (we don't refresh
// the search as this might undo any page navigation or
// AJAX-driven changes since the last search).
- getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
+
+ //FIXME: set status bar text
+
+ //getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
}
-void LLFloaterSearch::search(const LLSD &key)
+void LLFloaterSearch::search(const SearchQuery &p)
{
- if (! mBrowser)
+ if (! mWebBrowser || !p.validateBlock())
{
return;
}
@@ -159,10 +164,9 @@ void LLFloaterSearch::search(const LLSD &key)
// work out the subdir to use based on the requested category
LLSD subs;
- std::string category = key.has("category") ? key["category"].asString() : "";
- if (mCategoryPaths.has(category))
+ if (mCategoryPaths.has(p.category))
{
- subs["CATEGORY"] = mCategoryPaths[category].asString();
+ subs["CATEGORY"] = mCategoryPaths[p.category].asString();
}
else
{
@@ -170,17 +174,18 @@ void LLFloaterSearch::search(const LLSD &key)
}
// add the search query string
- std::string search_text = key.has("id") ? key["id"].asString() : "";
- subs["QUERY"] = LLURI::escape(search_text);
+ subs["QUERY"] = LLURI::escape(p.query);
// add the permissions token that login.cgi gave us
// We use "search_token", and fallback to "auth_token" if not present.
+ LLSD search_cookie;
+
LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
if (search_token.asString().empty())
{
search_token = LLLoginInstance::getInstance()->getResponse("auth_token");
}
- subs["AUTH_TOKEN"] = search_token.asString();
+ search_cookie["AUTH_TOKEN"] = search_token.asString();
// add the user's preferred maturity (can be changed via prefs)
std::string maturity;
@@ -196,10 +201,57 @@ void LLFloaterSearch::search(const LLSD &key)
{
maturity = "13"; // PG
}
- subs["MATURITY"] = maturity;
+ search_cookie["MATURITY"] = maturity;
// add the user's god status
- subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+ search_cookie["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+ search_cookie["VERSION"] = LLVersionInfo::getVersion();
+ search_cookie["VERSION_MAJOR"] = LLVersionInfo::getMajor();
+ search_cookie["VERSION_MINOR"] = LLVersionInfo::getMinor();
+ search_cookie["VERSION_PATCH"] = LLVersionInfo::getPatch();
+ search_cookie["VERSION_BUILD"] = LLVersionInfo::getBuild();
+ search_cookie["CHANNEL"] = LLVersionInfo::getChannel();
+ search_cookie["GRID"] = LLGridManager::getInstance()->getGridLabel();
+ search_cookie["OS"] = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
+ search_cookie["SESSION_ID"] = gAgent.getSessionID();
+ search_cookie["FIRST_LOGIN"] = gAgent.isFirstLogin();
+
+ std::string lang = LLUI::getLanguage();
+ if (lang == "en-us")
+ {
+ lang = "en";
+ }
+ search_cookie["LANGUAGE"] = lang;
+
+ // find the region ID
+ LLUUID region_id;
+ LLViewerRegion *region = gAgent.getRegion();
+ if (region)
+ {
+ region_id = region->getRegionID();
+ }
+ search_cookie["REGION_ID"] = region_id;
+
+ // find the parcel local ID
+ S32 parcel_id = 0;
+ LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+ if (parcel)
+ {
+ parcel_id = parcel->getLocalID();
+ }
+ search_cookie["PARCEL_ID"] = llformat("%d", parcel_id);
+
+ std::stringstream cookie_string_stream;
+ LLSDSerialize::toXML(search_cookie, cookie_string_stream);
+ std::string cookie_string = cookie_string_stream.str();
+
+ U8* cookie_string_buffer = (U8*)cookie_string.c_str();
+ std::string cookie_value = LLBase64::encode(cookie_string_buffer, cookie_string.size());
+
+ // for staging services
+ LLViewerMedia::getCookieStore()->setCookiesFromHost(std::string("viewer_session_info=") + cookie_value, ".lindenlab.com");
+ // for live services
+ LLViewerMedia::getCookieStore()->setCookiesFromHost(std::string("viewer_session_info=") + cookie_value, ".secondlife.com");
// get the search URL and expand all of the substitutions
// (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
@@ -207,5 +259,5 @@ void LLFloaterSearch::search(const LLSD &key)
url = LLWeb::expandURLSubstitutions(url, subs);
// and load the URL in the web view
- mBrowser->navigateTo(url, "text/html");
+ mWebBrowser->navigateTo(url, "text/html");
}
diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h
index ba4dc4c0fa..35b268e1b2 100644
--- a/indra/newview/llfloatersearch.h
+++ b/indra/newview/llfloatersearch.h
@@ -28,7 +28,7 @@
#ifndef LL_LLFLOATERSEARCH_H
#define LL_LLFLOATERSEARCH_H
-#include "llfloater.h"
+#include "llfloaterwebcontent.h"
#include "llviewermediaobserver.h"
#include <string>
@@ -43,11 +43,25 @@ class LLMediaCtrl;
/// so that the user can click on teleport links in search results.
///
class LLFloaterSearch :
- public LLFloater,
- public LLViewerMediaObserver
+ public LLFloaterWebContent
{
public:
- LLFloaterSearch(const LLSD& key);
+ struct SearchQuery : public LLInitParam::Block<SearchQuery>
+ {
+ Optional<std::string> category;
+ Optional<std::string> query;
+
+ SearchQuery();
+ };
+
+ struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params>
+ {
+ Optional<SearchQuery> search;
+ };
+
+ typedef LLSDParamAdapter<_Params> Params;
+
+ LLFloaterSearch(const Params& key);
/// show the search floater with a new search
/// see search() for details on the key parameter.
@@ -60,7 +74,7 @@ public:
/// - "id": specifies the text phrase to search for
/// - "category": one of "all" (default), "people", "places",
/// "events", "groups", "wiki", "destinations", "classifieds"
- void search(const LLSD &key);
+ void search(const SearchQuery &query);
/// changing godmode can affect the search results that are
/// returned by the search website - use this method to tell the
@@ -70,10 +84,6 @@ public:
private:
/*virtual*/ BOOL postBuild();
- // inherited from LLViewerMediaObserver
- /*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event);
-
- LLMediaCtrl *mBrowser;
LLSD mCategoryPaths;
U8 mSearchGodLevel;
};
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index 8558a1277c..3434841d09 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -41,6 +41,7 @@
#include "llviewerparcelmgr.h"
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
+#include "lltrans.h"
class LLAvatarName;
@@ -451,7 +452,7 @@ void LLFloaterSellLandUI::doSellLand(void *userdata)
// Do a confirmation
S32 sale_price = self->getChild<LLUICtrl>("price")->getValue();
S32 area = parcel->getArea();
- std::string authorizedBuyerName = "Anyone";
+ std::string authorizedBuyerName = LLTrans::getString("Anyone");
bool sell_to_anyone = true;
if ("user" == self->getChild<LLUICtrl>("sell_to")->getValue().asString())
{
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 0d798afdcc..84fb8bd9e7 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -36,7 +36,6 @@
#include "llagentcamera.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
-#include "llcombobox.h"
#include "lldraghandle.h"
#include "llerror.h"
#include "llfloaterbuildoptions.h"
@@ -101,6 +100,7 @@ const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =
std::string("Content"), // PANEL_CONTENTS,
};
+
// Local prototypes
void commit_select_component(void *data);
void click_show_more(void*);
@@ -116,7 +116,6 @@ void commit_radio_group_focus(LLUICtrl* ctrl);
void commit_radio_group_move(LLUICtrl* ctrl);
void commit_radio_group_edit(LLUICtrl* ctrl);
void commit_radio_group_land(LLUICtrl* ctrl);
-void commit_grid_mode(LLUICtrl *);
void commit_slider_zoom(LLUICtrl *ctrl);
@@ -234,7 +233,6 @@ BOOL LLFloaterTools::postBuild()
getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform"));
mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures");
getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures"));
- mComboGridMode = getChild<LLComboBox>("combobox grid mode");
mCheckStretchUniformLabel = getChild<LLTextBox>("checkbox uniform label");
//
@@ -269,6 +267,8 @@ BOOL LLFloaterTools::postBuild()
// the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here
getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce")));
+ mCostTextBorder = getChild<LLViewBorder>("cost_text_border");
+
mTab = getChild<LLTabContainer>("Object Info Tabs");
if(mTab)
{
@@ -311,7 +311,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCheckSnapToGrid(NULL),
mBtnGridOptions(NULL),
mTitleMedia(NULL),
- mComboGridMode(NULL),
mCheckStretchUniform(NULL),
mCheckStretchTexture(NULL),
mCheckStretchUniformLabel(NULL),
@@ -344,6 +343,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mPanelFace(NULL),
mPanelLandInfo(NULL),
+ mCostTextBorder(NULL),
mTabLand(NULL),
mDirty(TRUE),
mNeedMediaTitle(TRUE)
@@ -367,7 +367,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCommitCallbackRegistrar.add("BuildTool.selectComponent", boost::bind(&commit_select_component, this));
mCommitCallbackRegistrar.add("BuildTool.gridOptions", boost::bind(&LLFloaterTools::onClickGridOptions,this));
mCommitCallbackRegistrar.add("BuildTool.applyToSelection", boost::bind(&click_apply_to_selection, this));
- mCommitCallbackRegistrar.add("BuildTool.gridMode", boost::bind(&commit_grid_mode,_1));
mCommitCallbackRegistrar.add("BuildTool.commitRadioLand", boost::bind(&commit_radio_group_land,_1));
mCommitCallbackRegistrar.add("BuildTool.LandBrushForce", boost::bind(&commit_slider_dozer_force,_1));
mCommitCallbackRegistrar.add("BuildTool.AddMedia", boost::bind(&LLFloaterTools::onClickBtnAddMedia,this));
@@ -423,16 +422,15 @@ void LLFloaterTools::refresh()
// Refresh object and prim count labels
LLLocale locale(LLLocale::USER_LOCALE);
-
#if 0
- if (gMeshRepo.meshRezEnabled())
+ if (!gMeshRepo.meshRezEnabled())
{
std::string obj_count_string;
LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
- getChild<LLUICtrl>("obj_count")->setTextArg("[COUNT]", obj_count_string);
+ getChild<LLUICtrl>("selection_count")->setTextArg("[OBJ_COUNT]", obj_count_string);
std::string prim_count_string;
LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
- getChild<LLUICtrl>("prim_count")->setTextArg("[COUNT]", prim_count_string);
+ getChild<LLUICtrl>("selection_count")->setTextArg("[PRIM_COUNT]", prim_count_string);
// calculate selection rendering cost
if (sShowObjectCost)
@@ -451,55 +449,50 @@ void LLFloaterTools::refresh()
else
#endif
{
- // Get the number of objects selected
- std::string root_object_count_string;
- std::string object_count_string;
-
- LLResMgr::getInstance()->getIntegerString(
- root_object_count_string,
- LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
- LLResMgr::getInstance()->getIntegerString(
- object_count_string,
- LLSelectMgr::getInstance()->getSelection()->getObjectCount());
-
- F32 obj_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedObjectCost();
- F32 link_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost();
- F32 obj_physics_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedPhysicsCost();
- F32 link_physics_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetPhysicsCost();
-
- // Update the text for the counts
- childSetTextArg(
- "linked_set_count",
- "[COUNT]",
- root_object_count_string);
- childSetTextArg("object_count", "[COUNT]", object_count_string);
-
- // Update the text for the resource costs
- childSetTextArg("linked_set_cost","[COST]",llformat("%.1f", link_cost));
- childSetTextArg("object_cost", "[COST]", llformat("%.1f", obj_cost));
- childSetTextArg("linked_set_cost","[PHYSICS]",llformat("%.1f", link_physics_cost));
- childSetTextArg("object_cost", "[PHYSICS]", llformat("%.1f", obj_physics_cost));
-
- // Display rendering cost if needed
- if (sShowObjectCost)
+ 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();
+
+ LLStringUtil::format_map_t selection_args;
+ selection_args["OBJ_COUNT"] = llformat("%.1d", link_count);
+ selection_args["PRIM_COUNT"] = llformat("%.1d", prim_count);
+
+ std::ostringstream selection_info;
+
+ bool show_adv_weight = gSavedSettings.getBOOL("ShowAdvancedBuilderOptions");
+ bool show_mesh_cost = gMeshRepo.meshRezEnabled();
+
+ if (show_mesh_cost)
{
- std::string prim_cost_string;
- LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost());
- getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string);
+ 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);
- // disable the object and prim counts if nothing selected
- bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
- childSetEnabled("linked_set_count", have_selection);
- childSetEnabled("object_count", have_selection);
- childSetEnabled("linked_set_cost", have_selection);
- childSetEnabled("object_cost", have_selection);
- getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost);
+ 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<LLTextBox>("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("selection_empty", !have_selection);
}
@@ -664,33 +657,6 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mRadioGroupEdit->setValue("radio select face");
}
- if (mComboGridMode)
- {
- mComboGridMode->setVisible( edit_visible );
- S32 index = mComboGridMode->getCurrentIndex();
- mComboGridMode->removeall();
-
- switch (mObjectSelection->getSelectType())
- {
- case SELECT_TYPE_HUD:
- mComboGridMode->add(getString("grid_screen_text"));
- mComboGridMode->add(getString("grid_local_text"));
- //mComboGridMode->add(getString("grid_reference_text"));
- break;
- case SELECT_TYPE_WORLD:
- mComboGridMode->add(getString("grid_world_text"));
- mComboGridMode->add(getString("grid_local_text"));
- mComboGridMode->add(getString("grid_reference_text"));
- break;
- case SELECT_TYPE_ATTACHMENT:
- mComboGridMode->add(getString("grid_attachment_text"));
- mComboGridMode->add(getString("grid_local_text"));
- mComboGridMode->add(getString("grid_reference_text"));
- break;
- }
-
- mComboGridMode->setCurrentByIndex(index);
- }
// Snap to grid disabled for grab tool - very confusing
if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );
if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );
@@ -739,6 +705,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
// Land buttons
BOOL land_visible = (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance() );
+ mCostTextBorder->setVisible(!land_visible);
+
if (mBtnLand) mBtnLand ->setToggleState( land_visible );
mRadioGroupLand->setVisible( land_visible );
@@ -791,15 +759,11 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
getChildView("Strength:")->setVisible( land_visible);
}
- bool show_mesh_cost = gMeshRepo.meshRezEnabled();
+ bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
- getChildView("obj_count")->setVisible( !land_visible && !show_mesh_cost);
- getChildView("prim_count")->setVisible( !land_visible && !show_mesh_cost);
- getChildView("linked_set_count")->setVisible( !land_visible && show_mesh_cost);
- getChildView("linked_set_cost")->setVisible( !land_visible && show_mesh_cost);
- getChildView("object_count")->setVisible( !land_visible && show_mesh_cost);
- getChildView("object_cost")->setVisible( !land_visible && show_mesh_cost);
- getChildView("RenderingCost")->setVisible( !land_visible && sShowObjectCost);
+ getChildView("selection_count")->setVisible(!land_visible && have_selection);
+ getChildView("selection_weight")->setVisible(!land_visible && have_selection && gSavedSettings.getBOOL("ShowAdvancedBuilderOptions"));
+ getChildView("selection_empty")->setVisible(!land_visible && !have_selection);
mTab->setVisible(!land_visible);
mPanelLandInfo->setVisible(land_visible);
@@ -1032,13 +996,6 @@ void commit_select_component(void *data)
}
}
-void commit_grid_mode(LLUICtrl *ctrl)
-{
- LLComboBox* combo = (LLComboBox*)ctrl;
-
- LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex());
-}
-
// static
void LLFloaterTools::setObjectType( LLPCode pcode )
{
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index fd81a75397..69636190fc 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -32,7 +32,6 @@
#include "llparcelselection.h"
class LLButton;
-class LLComboBox;
class LLCheckBoxCtrl;
class LLPanelPermissions;
class LLPanelObject;
@@ -140,7 +139,6 @@ public:
LLCheckBoxCtrl* mCheckSnapToGrid;
LLButton* mBtnGridOptions;
- LLComboBox* mComboGridMode;
LLCheckBoxCtrl* mCheckStretchUniform;
LLCheckBoxCtrl* mCheckStretchTexture;
@@ -179,6 +177,8 @@ public:
LLPanelFace *mPanelFace;
LLPanelLandInfo *mPanelLandInfo;
+ LLViewBorder* mCostTextBorder;
+
LLTabContainer* mTabLand;
LLParcelSelectionHandle mParcelSelection;
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/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
deleted file mode 100644
index be4b144f41..0000000000
--- a/indra/newview/llfloaterwater.cpp
+++ /dev/null
@@ -1,625 +0,0 @@
-/**
- * @file llfloaterwater.cpp
- * @brief LLFloaterWater class definition
- *
- * $LicenseInfo:firstyear=2007&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 "llfloaterwater.h"
-
-#include "pipeline.h"
-#include "llsky.h"
-
-#include "llfloaterreg.h"
-#include "llsliderctrl.h"
-#include "llspinctrl.h"
-#include "llcolorswatch.h"
-#include "llcheckboxctrl.h"
-#include "lltexturectrl.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
-#include "llcombobox.h"
-#include "lllineeditor.h"
-#include "llnotificationsutil.h"
-#include "llfloaterdaycycle.h"
-#include "llboost.h"
-#include "llmultisliderctrl.h"
-
-#include "v4math.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-#include "llsavedsettingsglue.h"
-
-#include "llwaterparamset.h"
-#include "llwaterparammanager.h"
-#include "llpostprocess.h"
-
-#undef max
-
-std::set<std::string> LLFloaterWater::sDefaultPresets;
-
-LLFloaterWater::LLFloaterWater(const LLSD& key)
- : LLFloater(key)
-{
-}
-
-LLFloaterWater::~LLFloaterWater()
-{
-}
-BOOL LLFloaterWater::postBuild()
-{
-
- std::string def_water = getString("WLDefaultWaterNames");
-
- // no editing or deleting of the blank string
- sDefaultPresets.insert("");
- boost_tokenizer tokens(def_water, boost::char_separator<char>(":"));
- for (boost_tokenizer::iterator token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
- {
- std::string tok(*token_iter);
- sDefaultPresets.insert(tok);
- }
-
- // add the combo boxes
- LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
-
- if(comboBox != NULL) {
-
- std::map<std::string, LLWaterParamSet>::iterator mIt =
- LLWaterParamManager::instance()->mParamList.begin();
- for(; mIt != LLWaterParamManager::instance()->mParamList.end(); mIt++)
- {
- comboBox->add(mIt->first);
- }
-
- // set defaults on combo boxes
- comboBox->selectByValue(LLSD("Default"));
- }
- // load it up
- initCallbacks();
- syncMenu();
- return TRUE;
-}
-void LLFloaterWater::initCallbacks(void) {
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterWater::onWaterFogColorMoved, this, _1, &param_mgr->mFogColor));
-
- //
- getChild<LLUICtrl>("WaterGlow")->setCommitCallback(boost::bind(&LLFloaterWater::onColorControlAMoved, this, _1, &param_mgr->mFogColor));
-
- // fog density
- getChild<LLUICtrl>("WaterFogDensity")->setCommitCallback(boost::bind(&LLFloaterWater::onExpFloatControlMoved, this, _1, &param_mgr->mFogDensity));
- getChild<LLUICtrl>("WaterUnderWaterFogMod")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mUnderWaterFogMod));
-
- // blue density
- getChild<LLUICtrl>("WaterNormalScaleX")->setCommitCallback(boost::bind(&LLFloaterWater::onVector3ControlXMoved, this, _1, &param_mgr->mNormalScale));
- getChild<LLUICtrl>("WaterNormalScaleY")->setCommitCallback(boost::bind(&LLFloaterWater::onVector3ControlYMoved, this, _1, &param_mgr->mNormalScale));
- getChild<LLUICtrl>("WaterNormalScaleZ")->setCommitCallback(boost::bind(&LLFloaterWater::onVector3ControlZMoved, this, _1, &param_mgr->mNormalScale));
-
- // fresnel
- getChild<LLUICtrl>("WaterFresnelScale")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mFresnelScale));
- getChild<LLUICtrl>("WaterFresnelOffset")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mFresnelOffset));
-
- // scale above/below
- getChild<LLUICtrl>("WaterScaleAbove")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mScaleAbove));
- getChild<LLUICtrl>("WaterScaleBelow")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mScaleBelow));
-
- // blur mult
- getChild<LLUICtrl>("WaterBlurMult")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mBlurMultiplier));
-
- // Load/save
-// getChild<LLUICtrl>("WaterLoadPreset")->setCommitCallback(boost::bind(&LLFloaterWater::onLoadPreset, this));
- getChild<LLUICtrl>("WaterNewPreset")->setCommitCallback(boost::bind(&LLFloaterWater::onNewPreset, this));
- getChild<LLUICtrl>("WaterSavePreset")->setCommitCallback(boost::bind(&LLFloaterWater::onSavePreset, this));
- getChild<LLUICtrl>("WaterDeletePreset")->setCommitCallback(boost::bind(&LLFloaterWater::onDeletePreset, this));
-
- // wave direction
- getChild<LLUICtrl>("WaterWave1DirX")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlXMoved, this, _1, &param_mgr->mWave1Dir));
- getChild<LLUICtrl>("WaterWave1DirY")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlYMoved, this, _1, &param_mgr->mWave1Dir));
- getChild<LLUICtrl>("WaterWave2DirX")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlXMoved, this, _1, &param_mgr->mWave2Dir));
- getChild<LLUICtrl>("WaterWave2DirY")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlYMoved, this, _1, &param_mgr->mWave2Dir));
-
- getChild<LLUICtrl>("WaterPresetsCombo")->setCommitCallback(boost::bind(&LLFloaterWater::onChangePresetName, this, _1));
-
- LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
- textCtrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL);
- getChild<LLUICtrl>("WaterNormalMap")->setCommitCallback(boost::bind(&LLFloaterWater::onNormalMapPicked, this, _1));
-}
-
-bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& response)
-{
- std::string text = response["message"].asString();
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- if(text == "")
- {
- return false;
- }
-
- if(option == 0) {
- LLComboBox* comboBox = getChild<LLComboBox>( "WaterPresetsCombo");
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- // add the current parameters to the list
- // see if it's there first
- std::map<std::string, LLWaterParamSet>::iterator mIt =
- param_mgr->mParamList.find(text);
-
- // if not there, add a new one
- if(mIt == param_mgr->mParamList.end())
- {
- param_mgr->addParamSet(text, param_mgr->mCurParams);
- comboBox->add(text);
- comboBox->sortByName();
-
- comboBox->setSelectedByValue(text, true);
-
- param_mgr->savePreset(text);
-
- // otherwise, send a message to the user
- }
- else
- {
- LLNotificationsUtil::add("ExistsWaterPresetAlert");
- }
- }
- return false;
-}
-
-void LLFloaterWater::syncMenu()
-{
- bool err;
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- LLWaterParamSet & current_params = param_mgr->mCurParams;
-
- // blue horizon
- param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err);
-
- LLColor4 col = param_mgr->getFogColor();
- getChild<LLUICtrl>("WaterGlow")->setValue(col.mV[3]);
- col.mV[3] = 1.0f;
- LLColorSwatchCtrl* colCtrl = getChild<LLColorSwatchCtrl>("WaterFogColor");
-
- colCtrl->set(col);
-
- // fog and wavelets
- param_mgr->mFogDensity.mExp =
- log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) /
- log(param_mgr->mFogDensity.mBase);
- param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
- getChild<LLUICtrl>("WaterFogDensity")->setValue(param_mgr->mFogDensity.mExp);
-
- param_mgr->mUnderWaterFogMod.mX =
- current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err);
- getChild<LLUICtrl>("WaterUnderWaterFogMod")->setValue(param_mgr->mUnderWaterFogMod.mX);
-
- param_mgr->mNormalScale = current_params.getVector3(param_mgr->mNormalScale.mName, err);
- getChild<LLUICtrl>("WaterNormalScaleX")->setValue(param_mgr->mNormalScale.mX);
- getChild<LLUICtrl>("WaterNormalScaleY")->setValue(param_mgr->mNormalScale.mY);
- getChild<LLUICtrl>("WaterNormalScaleZ")->setValue(param_mgr->mNormalScale.mZ);
-
- // Fresnel
- param_mgr->mFresnelScale.mX = current_params.getFloat(param_mgr->mFresnelScale.mName, err);
- getChild<LLUICtrl>("WaterFresnelScale")->setValue(param_mgr->mFresnelScale.mX);
- param_mgr->mFresnelOffset.mX = current_params.getFloat(param_mgr->mFresnelOffset.mName, err);
- getChild<LLUICtrl>("WaterFresnelOffset")->setValue(param_mgr->mFresnelOffset.mX);
-
- // Scale Above/Below
- param_mgr->mScaleAbove.mX = current_params.getFloat(param_mgr->mScaleAbove.mName, err);
- getChild<LLUICtrl>("WaterScaleAbove")->setValue(param_mgr->mScaleAbove.mX);
- param_mgr->mScaleBelow.mX = current_params.getFloat(param_mgr->mScaleBelow.mName, err);
- getChild<LLUICtrl>("WaterScaleBelow")->setValue(param_mgr->mScaleBelow.mX);
-
- // blur mult
- param_mgr->mBlurMultiplier.mX = current_params.getFloat(param_mgr->mBlurMultiplier.mName, err);
- getChild<LLUICtrl>("WaterBlurMult")->setValue(param_mgr->mBlurMultiplier.mX);
-
- // wave directions
- param_mgr->mWave1Dir = current_params.getVector2(param_mgr->mWave1Dir.mName, err);
- getChild<LLUICtrl>("WaterWave1DirX")->setValue(param_mgr->mWave1Dir.mX);
- getChild<LLUICtrl>("WaterWave1DirY")->setValue(param_mgr->mWave1Dir.mY);
-
- param_mgr->mWave2Dir = current_params.getVector2(param_mgr->mWave2Dir.mName, err);
- getChild<LLUICtrl>("WaterWave2DirX")->setValue(param_mgr->mWave2Dir.mX);
- getChild<LLUICtrl>("WaterWave2DirY")->setValue(param_mgr->mWave2Dir.mY);
-
- LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
- textCtrl->setImageAssetID(param_mgr->getNormalMapID());
-}
-
-
-// vector control callbacks
-void LLFloaterWater::onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mX = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// vector control callbacks
-void LLFloaterWater::onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mY = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// vector control callbacks
-void LLFloaterWater::onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mZ = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-
-// vector control callbacks
-void LLFloaterWater::onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mX = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// vector control callbacks
-void LLFloaterWater::onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mY = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// color control callbacks
-void LLFloaterWater::onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mR = sldrCtrl->getValueF32();
-
- // move i if it's the max
- if(colorControl->mR >= colorControl->mG
- && colorControl->mR >= colorControl->mB
- && colorControl->mHasSliderName)
- {
- colorControl->mI = colorControl->mR;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- getChild<LLUICtrl>(name)->setValue(colorControl->mR);
- }
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mG = sldrCtrl->getValueF32();
-
- // move i if it's the max
- if(colorControl->mG >= colorControl->mR
- && colorControl->mG >= colorControl->mB
- && colorControl->mHasSliderName)
- {
- colorControl->mI = colorControl->mG;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- getChild<LLUICtrl>(name)->setValue(colorControl->mG);
-
- }
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mB = sldrCtrl->getValueF32();
-
- // move i if it's the max
- if(colorControl->mB >= colorControl->mR
- && colorControl->mB >= colorControl->mG
- && colorControl->mHasSliderName)
- {
- colorControl->mI = colorControl->mB;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- getChild<LLUICtrl>(name)->setValue(colorControl->mB);
- }
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mA = sldrCtrl->getValueF32();
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-
-void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mI = sldrCtrl->getValueF32();
-
- // only for sliders where we pass a name
- if(colorControl->mHasSliderName)
- {
- // set it to the top
- F32 maxVal = std::max(std::max(colorControl->mR, colorControl->mG), colorControl->mB);
- F32 iVal;
-
- iVal = colorControl->mI;
-
- // get the names of the other sliders
- std::string rName = colorControl->mSliderName;
- rName.append("R");
- std::string gName = colorControl->mSliderName;
- gName.append("G");
- std::string bName = colorControl->mSliderName;
- bName.append("B");
-
- // handle if at 0
- if(iVal == 0)
- {
- colorControl->mR = 0;
- colorControl->mG = 0;
- colorControl->mB = 0;
-
- // if all at the start
- // set them all to the intensity
- }
- else if (maxVal == 0)
- {
- colorControl->mR = iVal;
- colorControl->mG = iVal;
- colorControl->mB = iVal;
- }
- else
- {
- // add delta amounts to each
- F32 delta = (iVal - maxVal) / maxVal;
- colorControl->mR *= (1.0f + delta);
- colorControl->mG *= (1.0f + delta);
- colorControl->mB *= (1.0f + delta);
- }
-
- // set the sliders to the new vals
- getChild<LLUICtrl>(rName)->setValue(colorControl->mR);
- getChild<LLUICtrl>(gName)->setValue(colorControl->mG);
- getChild<LLUICtrl>(bName)->setValue(colorControl->mB);
- }
-
- // now update the current parameters and send them to shaders
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onExpFloatControlMoved(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- F32 val = sldrCtrl->getValueF32();
- expFloatControl->mExp = val;
- LLWaterParamManager::instance()->setDensitySliderValue(val);
-
- expFloatControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onFloatControlMoved(LLUICtrl* ctrl, WaterFloatControl* floatControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- floatControl->mX = sldrCtrl->getValueF32() / floatControl->mMult;
-
- floatControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-void LLFloaterWater::onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
- *colorControl = swatch->get();
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onNormalMapPicked(LLUICtrl* ctrl)
-{
- LLTextureCtrl* textCtrl = static_cast<LLTextureCtrl*>(ctrl);
- LLUUID textID = textCtrl->getImageAssetID();
- LLWaterParamManager::instance()->setNormalMapID(textID);
-}
-
-void LLFloaterWater::onNewPreset()
-{
- LLNotificationsUtil::add("NewWaterPreset", LLSD(), LLSD(), boost::bind(&LLFloaterWater::newPromptCallback, this, _1, _2));
-}
-
-void LLFloaterWater::onSavePreset()
-{
- // get the name
- LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
-
- // don't save the empty name
- if(comboBox->getSelectedItemLabel() == "")
- {
- return;
- }
-
- LLWaterParamManager::instance()->mCurParams.mName =
- comboBox->getSelectedItemLabel();
-
- // check to see if it's a default and shouldn't be overwritten
- std::set<std::string>::iterator sIt = sDefaultPresets.find(
- comboBox->getSelectedItemLabel());
- if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("WaterEditPresets"))
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return;
- }
-
- LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterWater::saveAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWater::saveAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- // if they choose save, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- param_mgr->setParamSet(
- param_mgr->mCurParams.mName,
- param_mgr->mCurParams);
-
- // comment this back in to save to file
- param_mgr->savePreset(param_mgr->mCurParams.mName);
- }
- return false;
-}
-
-void LLFloaterWater::onDeletePreset()
-{
- LLComboBox* combo_box = getChild<LLComboBox>("WaterPresetsCombo");
-
- if(combo_box->getSelectedValue().asString() == "")
- {
- return;
- }
-
- LLSD args;
- args["SKY"] = combo_box->getSelectedValue().asString();
- LLNotificationsUtil::add("WLDeletePresetAlert", args, LLSD(), boost::bind(&LLFloaterWater::deleteAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- // if they choose delete, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLComboBox* combo_box = getChild<LLComboBox>("WaterPresetsCombo");
- LLFloaterDayCycle* day_cycle = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- LLComboBox* key_combo = NULL;
-
- if (day_cycle)
- {
- key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
- }
-
- std::string name = combo_box->getSelectedValue().asString();
-
- // check to see if it's a default and shouldn't be deleted
- std::set<std::string>::iterator sIt = sDefaultPresets.find(name);
- if(sIt != sDefaultPresets.end())
- {
- LLNotificationsUtil::add("WaterNoEditDefault");
- return false;
- }
-
- LLWaterParamManager::instance()->removeParamSet(name, true);
-
- // remove and choose another
- S32 new_index = combo_box->getCurrentIndex();
-
- combo_box->remove(name);
-
- if(key_combo != NULL)
- {
- key_combo->remove(name);
-
- // remove from slider, as well
- day_cycle->deletePreset(name);
- }
-
- // pick the previously selected index after delete
- if(new_index > 0)
- {
- new_index--;
- }
-
- if(combo_box->getItemCount() > 0)
- {
- combo_box->setCurrentByIndex(new_index);
- }
- }
- return false;
-}
-
-
-void LLFloaterWater::onChangePresetName(LLUICtrl* ctrl)
-{
- std::string data = ctrl->getValue().asString();
- if(!data.empty())
- {
- LLWaterParamManager::instance()->loadPreset(data);
- syncMenu();
- }
-}
-
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index 058567492b..2c9a736aff 100644
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -40,8 +40,21 @@
#include "llfloaterwebcontent.h"
-LLFloaterWebContent::LLFloaterWebContent( const LLSD& key )
- : LLFloater( key )
+LLFloaterWebContent::_Params::_Params()
+: url("url"),
+ target("target"),
+ id("id"),
+ window_class("window_class", "web_content"),
+ show_chrome("show_chrome", true),
+ allow_address_entry("allow_address_entry", true),
+ preferred_media_size("preferred_media_size"),
+ trusted_content("trusted_content", false)
+{}
+
+LLFloaterWebContent::LLFloaterWebContent( const Params& params )
+: LLFloater( params ),
+ LLInstanceTracker<LLFloaterWebContent, std::string>(params.id()),
+ mUUID(params.id())
{
mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));
mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this ));
@@ -54,9 +67,9 @@ LLFloaterWebContent::LLFloaterWebContent( const LLSD& key )
BOOL LLFloaterWebContent::postBuild()
{
// these are used in a bunch of places so cache them
- mWebBrowser = getChild< LLMediaCtrl >( "webbrowser" );
- mAddressCombo = getChild< LLComboBox >( "address" );
- mStatusBarText = getChild< LLTextBox >( "statusbartext" );
+ mWebBrowser = getChild< LLMediaCtrl >( "webbrowser" );
+ mAddressCombo = getChild< LLComboBox >( "address" );
+ mStatusBarText = getChild< LLTextBox >( "statusbartext" );
mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress" );
// observe browser events
@@ -75,6 +88,20 @@ BOOL LLFloaterWebContent::postBuild()
return TRUE;
}
+bool LLFloaterWebContent::matchesKey(const LLSD& key)
+{
+ LLUUID id = key["id"];
+ if (id.notNull())
+ {
+ return id == mKey["id"].asUUID();
+ }
+ else
+ {
+ return key["target"].asString() == mKey["target"].asString();
+ }
+}
+
+
void LLFloaterWebContent::initializeURLHistory()
{
// start with an empty list
@@ -86,10 +113,8 @@ void LLFloaterWebContent::initializeURLHistory()
// Get all of the entries in the "browser" collection
LLSD browser_history = LLURLHistory::getURLHistory("browser");
- LLSD::array_iterator iter_history =
- browser_history.beginArray();
- LLSD::array_iterator end_history =
- browser_history.endArray();
+ LLSD::array_iterator iter_history = browser_history.beginArray();
+ LLSD::array_iterator end_history = browser_history.endArray();
for(; iter_history != end_history; ++iter_history)
{
std::string url = (*iter_history).asString();
@@ -99,30 +124,25 @@ void LLFloaterWebContent::initializeURLHistory()
}
//static
-void LLFloaterWebContent::create( const std::string &url, const std::string& target, const std::string& uuid )
+LLFloater* LLFloaterWebContent::create( Params p)
{
- lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
+ lldebugs << "url = " << p.url() << ", target = " << p.target() << ", uuid = " << p.id() << llendl;
- std::string tag = target;
+ if (!p.id.isProvided())
+ {
+ p.id = LLUUID::generateNewID().asString();
+ }
- if(target.empty() || target == "_blank")
+ if(p.target().empty() || p.target() == "_blank")
{
- if(!uuid.empty())
- {
- tag = uuid;
- }
- else
- {
- // create a unique tag for this instance
- LLUUID id;
- id.generate();
- tag = id.asString();
- }
+ p.target = p.id();
}
S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit");
- if(LLFloaterReg::findInstance("web_content", tag) != NULL)
+ LLSD sd;
+ sd["target"] = p.target;
+ if(LLFloaterReg::findInstance(p.window_class, sd) != NULL)
{
// There's already a web browser for this tag, so we won't be opening a new window.
}
@@ -131,12 +151,12 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar
// showInstance will open a new window. Figure out how many web browsers are already open,
// and close the least recently opened one if this will put us over the limit.
- LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("web_content");
+ LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList(p.window_class);
lldebugs << "total instance count is " << instances.size() << llendl;
for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
{
- lldebugs << " " << (*iter)->getKey() << llendl;
+ lldebugs << " " << (*iter)->getKey()["target"] << llendl;
}
if(instances.size() >= (size_t)browser_window_limit)
@@ -146,49 +166,26 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar
}
}
- LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::showInstance("web_content", tag));
- llassert(browser);
- if(browser)
- {
- browser->mUUID = uuid;
-
- // tell the browser instance to load the specified URL
- browser->open_media(url, target);
- LLViewerMedia::proxyWindowOpened(target, uuid);
- }
+ return LLFloaterReg::showInstance(p.window_class, p);
}
//static
void LLFloaterWebContent::closeRequest(const std::string &uuid)
{
- LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content");
- lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
- for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+ LLFloaterWebContent* floaterp = getInstance(uuid);
+ if (floaterp)
{
- LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter);
- lldebugs << " " << i->mUUID << llendl;
- if (i && i->mUUID == uuid)
- {
- i->closeFloater(false);
- return;
- }
- }
+ floaterp->closeFloater(false);
+ }
}
//static
void LLFloaterWebContent::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
{
- LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content");
- lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
- for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+ LLFloaterWebContent* floaterp = getInstance(uuid);
+ if (floaterp)
{
- LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter);
- lldebugs << " " << i->mUUID << llendl;
- if (i && i->mUUID == uuid)
- {
- i->geometryChanged(x, y, width, height);
- return;
- }
+ floaterp->geometryChanged(x, y, width, height);
}
}
@@ -202,24 +199,75 @@ void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height)
getWindow()->getSize(&window_size);
// Adjust width and height for the size of the chrome on the web Browser window.
- width += getRect().getWidth() - mWebBrowser->getRect().getWidth();
- height += getRect().getHeight() - mWebBrowser->getRect().getHeight();
+ LLRect browser_rect;
+ mWebBrowser->localRectToOtherView(mWebBrowser->getLocalRect(), &browser_rect, this);
+ S32 requested_browser_bottom = window_size.mY - (y + height);
LLRect geom;
- geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
+ geom.setOriginAndSize(x - browser_rect.mLeft,
+ requested_browser_bottom - browser_rect.mBottom,
+ width + getRect().getWidth() - browser_rect.getWidth(),
+ height + getRect().getHeight() - browser_rect.getHeight());
lldebugs << "geometry change: " << geom << llendl;
-
- handleReshape(geom,false);
+
+ LLRect new_rect;
+ getParent()->screenRectToLocal(geom, &new_rect);
+ setShape(new_rect);
}
-void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target)
+void LLFloaterWebContent::open_media(const Params& p)
{
// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
- mWebBrowser->setHomePageUrl(web_url, "text/html");
- mWebBrowser->setTarget(target);
- mWebBrowser->navigateTo(web_url, "text/html");
- set_current_url(web_url);
+ LLViewerMedia::proxyWindowOpened(p.target(), p.id());
+ mWebBrowser->setHomePageUrl(p.url, "text/html");
+ mWebBrowser->setTarget(p.target);
+ mWebBrowser->navigateTo(p.url, "text/html");
+
+ set_current_url(p.url);
+
+ getChild<LLLayoutPanel>("status_bar")->setVisible(p.show_chrome);
+ getChild<LLLayoutPanel>("nav_controls")->setVisible(p.show_chrome);
+ bool address_entry_enabled = p.allow_address_entry && !p.trusted_content;
+ getChildView("address")->setEnabled(address_entry_enabled);
+ getChildView("popexternal")->setEnabled(address_entry_enabled);
+
+ if (!address_entry_enabled)
+ {
+ mWebBrowser->setFocus(TRUE);
+ }
+
+ if (!p.show_chrome)
+ {
+ setResizeLimits(100, 100);
+ }
+
+ if (!p.preferred_media_size().isEmpty())
+ {
+ LLLayoutStack::updateClass();
+ LLRect browser_rect = mWebBrowser->calcScreenRect();
+ LLCoordWindow window_size;
+ getWindow()->getSize(&window_size);
+
+ geometryChanged(browser_rect.mLeft, window_size.mY - browser_rect.mTop, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight());
+ }
+
+}
+
+void LLFloaterWebContent::onOpen(const LLSD& key)
+{
+ Params params(key);
+
+ if (!params.validateBlock())
+ {
+ closeFloater();
+ return;
+ }
+
+ mWebBrowser->setTrustedContent(params.trusted_content);
+
+ // tell the browser instance to load the specified URL
+ open_media(params);
}
//virtual
@@ -232,7 +280,7 @@ void LLFloaterWebContent::onClose(bool app_quitting)
// virtual
void LLFloaterWebContent::draw()
{
- // this is asychronous so we need to keep checking
+ // this is asynchronous so we need to keep checking
getChildView( "back" )->setEnabled( mWebBrowser->canNavigateBack() );
getChildView( "forward" )->setEnabled( mWebBrowser->canNavigateForward() );
@@ -374,7 +422,7 @@ void LLFloaterWebContent::onClickStop()
// still should happen when we catch the navigate complete event
// but sometimes (don't know why) that event isn't sent from Qt
- // and we getto a point where the stop button stays active.
+ // and we ghetto a point where the stop button stays active.
getChildView("reload")->setVisible( true );
getChildView("stop")->setVisible( false );
}
diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h
index ecc7e970d8..36e214b7a9 100644
--- a/indra/newview/llfloaterwebcontent.h
+++ b/indra/newview/llfloaterwebcontent.h
@@ -29,6 +29,7 @@
#include "llfloater.h"
#include "llmediactrl.h"
+#include "llsdparam.h"
class LLMediaCtrl;
class LLComboBox;
@@ -38,24 +39,45 @@ class LLIconCtrl;
class LLFloaterWebContent :
public LLFloater,
- public LLViewerMediaObserver
+ public LLViewerMediaObserver,
+ public LLInstanceTracker<LLFloaterWebContent, std::string>
{
public:
LOG_CLASS(LLFloaterWebContent);
- LLFloaterWebContent(const LLSD& key);
+
+ struct _Params : public LLInitParam::Block<_Params>
+ {
+ Optional<std::string> url,
+ target,
+ window_class,
+ id;
+ Optional<bool> show_chrome,
+ allow_address_entry,
+ trusted_content;
+ Optional<LLRect> preferred_media_size;
+
+ _Params();
+ };
+
+ typedef LLSDParamAdapter<_Params> Params;
+
+ LLFloaterWebContent(const Params& params);
void initializeURLHistory();
- static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
+ static LLFloater* create(Params);
static void closeRequest(const std::string &uuid);
static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
void geometryChanged(S32 x, S32 y, S32 width, S32 height);
/* virtual */ BOOL postBuild();
+ /* virtual */ void onOpen(const LLSD& key);
+ /* virtual */ bool matchesKey(const LLSD& key);
/* virtual */ void onClose(bool app_quitting);
/* virtual */ void draw();
+protected:
// inherited from LLViewerMediaObserver
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
@@ -66,8 +88,7 @@ public:
void onEnterAddress();
void onPopExternal();
-private:
- void open_media(const std::string& media_url, const std::string& target);
+ void open_media(const Params& );
void set_current_url(const std::string& url);
LLMediaCtrl* mWebBrowser;
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
deleted file mode 100644
index ae98b2cf99..0000000000
--- a/indra/newview/llfloaterwindlight.cpp
+++ /dev/null
@@ -1,875 +0,0 @@
-/**
- * @file llfloaterwindlight.cpp
- * @brief LLFloaterWindLight class definition
- *
- * $LicenseInfo:firstyear=2007&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 "llfloaterwindlight.h"
-
-#include "pipeline.h"
-#include "llsky.h"
-
-#include "llfloaterreg.h"
-#include "llsliderctrl.h"
-#include "llmultislider.h"
-#include "llmultisliderctrl.h"
-#include "llnotificationsutil.h"
-#include "llspinctrl.h"
-#include "llcheckboxctrl.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
-#include "llcombobox.h"
-#include "lllineeditor.h"
-#include "llfloaterdaycycle.h"
-#include "llboost.h"
-
-#include "v4math.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-#include "llsavedsettingsglue.h"
-
-#include "llwlparamset.h"
-#include "llwlparammanager.h"
-#include "llpostprocess.h"
-#include "lltabcontainer.h"
-
-
-#undef max
-
-std::set<std::string> LLFloaterWindLight::sDefaultPresets;
-
-static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
-
-LLFloaterWindLight::LLFloaterWindLight(const LLSD& key)
- : LLFloater(key)
-{
-}
-
-LLFloaterWindLight::~LLFloaterWindLight()
-{
-}
-
-BOOL LLFloaterWindLight::postBuild()
-{
- // add the list of presets
- std::string def_days = getString("WLDefaultSkyNames");
-
- // no editing or deleting of the blank string
- sDefaultPresets.insert("");
- boost_tokenizer tokens(def_days, boost::char_separator<char>(":"));
- for (boost_tokenizer::iterator token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
- {
- std::string tok(*token_iter);
- sDefaultPresets.insert(tok);
- }
-
- // add the combo boxes
- LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
-
- if(comboBox != NULL) {
-
- std::map<std::string, LLWLParamSet>::iterator mIt =
- LLWLParamManager::instance()->mParamList.begin();
- for(; mIt != LLWLParamManager::instance()->mParamList.end(); mIt++)
- {
- comboBox->add(mIt->first);
- }
-
- // entry for when we're in estate time
- comboBox->add(LLStringUtil::null);
-
- // set defaults on combo boxes
- comboBox->selectByValue(LLSD("Default"));
- }
- // load it up
- initCallbacks();
-
- syncMenu();
-
- return TRUE;
-}
-void LLFloaterWindLight::initCallbacks(void) {
-
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- // blue horizon
- getChild<LLUICtrl>("WLBlueHorizonR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mBlueHorizon));
- getChild<LLUICtrl>("WLBlueHorizonG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mBlueHorizon));
- getChild<LLUICtrl>("WLBlueHorizonB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mBlueHorizon));
- getChild<LLUICtrl>("WLBlueHorizonI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mBlueHorizon));
-
- // haze density, horizon, mult, and altitude
- getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mHazeDensity));
- getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mHazeHorizon));
- getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mDensityMult));
- getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mMaxAlt));
-
- // blue density
- getChild<LLUICtrl>("WLBlueDensityR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mBlueDensity));
- getChild<LLUICtrl>("WLBlueDensityG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mBlueDensity));
- getChild<LLUICtrl>("WLBlueDensityB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mBlueDensity));
- getChild<LLUICtrl>("WLBlueDensityI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mBlueDensity));
-
- // Lighting
-
- // sunlight
- getChild<LLUICtrl>("WLSunlightR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mSunlight));
- getChild<LLUICtrl>("WLSunlightG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mSunlight));
- getChild<LLUICtrl>("WLSunlightB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mSunlight));
- getChild<LLUICtrl>("WLSunlightI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mSunlight));
-
- // glow
- getChild<LLUICtrl>("WLGlowR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onGlowRMoved, this, _1, &param_mgr->mGlow));
- getChild<LLUICtrl>("WLGlowB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onGlowBMoved, this, _1, &param_mgr->mGlow));
-
- // ambient
- getChild<LLUICtrl>("WLAmbientR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mAmbient));
- getChild<LLUICtrl>("WLAmbientG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mAmbient));
- getChild<LLUICtrl>("WLAmbientB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mAmbient));
- getChild<LLUICtrl>("WLAmbientI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mAmbient));
-
- // time of day
- getChild<LLUICtrl>("WLSunAngle")->setCommitCallback(boost::bind(&LLFloaterWindLight::onSunMoved, this, _1, &param_mgr->mLightnorm));
- getChild<LLUICtrl>("WLEastAngle")->setCommitCallback(boost::bind(&LLFloaterWindLight::onSunMoved, this, _1, &param_mgr->mLightnorm));
-
- // Clouds
-
- // Cloud Color
- getChild<LLUICtrl>("WLCloudColorR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mCloudColor));
- getChild<LLUICtrl>("WLCloudColorG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mCloudColor));
- getChild<LLUICtrl>("WLCloudColorB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mCloudColor));
- getChild<LLUICtrl>("WLCloudColorI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mCloudColor));
-
- // Cloud
- getChild<LLUICtrl>("WLCloudX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mCloudMain));
- getChild<LLUICtrl>("WLCloudY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mCloudMain));
- getChild<LLUICtrl>("WLCloudDensity")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mCloudMain));
-
- // Cloud Detail
- getChild<LLUICtrl>("WLCloudDetailX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mCloudDetail));
- getChild<LLUICtrl>("WLCloudDetailY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mCloudDetail));
- getChild<LLUICtrl>("WLCloudDetailDensity")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mCloudDetail));
-
- // Cloud extras
- getChild<LLUICtrl>("WLCloudCoverage")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mCloudCoverage));
- getChild<LLUICtrl>("WLCloudScale")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mCloudScale));
- getChild<LLUICtrl>("WLCloudLockX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollXToggled, this, _1));
- getChild<LLUICtrl>("WLCloudLockY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollYToggled, this, _1));
- getChild<LLUICtrl>("WLCloudScrollX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollXMoved, this, _1));
- getChild<LLUICtrl>("WLCloudScrollY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollYMoved, this, _1));
- getChild<LLUICtrl>("WLDistanceMult")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mDistanceMult));
- getChild<LLUICtrl>("DrawClassicClouds")->setCommitCallback(boost::bind(LLSavedSettingsGlue::setBOOL, _1, "SkyUseClassicClouds"));
-
- // WL Top
- getChild<LLUICtrl>("WLDayCycleMenuButton")->setCommitCallback(boost::bind(&LLFloaterWindLight::onOpenDayCycle, this));
- // Load/save
- LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
-
- //childSetAction("WLLoadPreset", onLoadPreset, comboBox);
- getChild<LLUICtrl>("WLNewPreset")->setCommitCallback(boost::bind(&LLFloaterWindLight::onNewPreset, this));
- getChild<LLUICtrl>("WLSavePreset")->setCommitCallback(boost::bind(&LLFloaterWindLight::onSavePreset, this));
- getChild<LLUICtrl>("WLDeletePreset")->setCommitCallback(boost::bind(&LLFloaterWindLight::onDeletePreset, this));
-
- comboBox->setCommitCallback(boost::bind(&LLFloaterWindLight::onChangePresetName, this, _1));
-
-
- // Dome
- getChild<LLUICtrl>("WLGamma")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mWLGamma));
- getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterWindLight::onStarAlphaMoved, this, _1));
-}
-
-bool LLFloaterWindLight::newPromptCallback(const LLSD& notification, const LLSD& response)
-{
- std::string text = response["message"].asString();
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- if(text == "")
- {
- return false;
- }
-
- if(option == 0) {
- LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
-
- LLFloaterDayCycle* day_cycle = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- LLComboBox* keyCombo = NULL;
- if(day_cycle)
- {
- keyCombo = day_cycle->getChild<LLComboBox>("WLKeyPresets");
- }
-
- // add the current parameters to the list
- // see if it's there first
- std::map<std::string, LLWLParamSet>::iterator mIt =
- LLWLParamManager::instance()->mParamList.find(text);
-
- // if not there, add a new one
- if(mIt == LLWLParamManager::instance()->mParamList.end())
- {
- LLWLParamManager::instance()->addParamSet(text,
- LLWLParamManager::instance()->mCurParams);
- comboBox->add(text);
- comboBox->sortByName();
-
- // add a blank to the bottom
- comboBox->selectFirstItem();
- if(comboBox->getSimple() == "")
- {
- comboBox->remove(0);
- }
- comboBox->add(LLStringUtil::null);
-
- comboBox->setSelectedByValue(text, true);
- if(keyCombo)
- {
- keyCombo->add(text);
- keyCombo->sortByName();
- }
- LLWLParamManager::instance()->savePreset(text);
-
- // otherwise, send a message to the user
- }
- else
- {
- LLNotificationsUtil::add("ExistsSkyPresetAlert");
- }
- }
- return false;
-}
-
-void LLFloaterWindLight::syncMenu()
-{
- bool err;
-
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- LLWLParamSet& currentParams = param_mgr->mCurParams;
- //std::map<std::string, LLVector4> & currentParams = param_mgr->mCurParams.mParamValues;
-
- // blue horizon
- param_mgr->mBlueHorizon = currentParams.getVector(param_mgr->mBlueHorizon.mName, err);
- getChild<LLUICtrl>("WLBlueHorizonR")->setValue(param_mgr->mBlueHorizon.r / 2.0);
- getChild<LLUICtrl>("WLBlueHorizonG")->setValue(param_mgr->mBlueHorizon.g / 2.0);
- getChild<LLUICtrl>("WLBlueHorizonB")->setValue(param_mgr->mBlueHorizon.b / 2.0);
- getChild<LLUICtrl>("WLBlueHorizonI")->setValue(
- std::max(param_mgr->mBlueHorizon.r / 2.0,
- std::max(param_mgr->mBlueHorizon.g / 2.0,
- param_mgr->mBlueHorizon.b / 2.0)));
-
- // haze density, horizon, mult, and altitude
- param_mgr->mHazeDensity = currentParams.getVector(param_mgr->mHazeDensity.mName, err);
- getChild<LLUICtrl>("WLHazeDensity")->setValue(param_mgr->mHazeDensity.r);
- param_mgr->mHazeHorizon = currentParams.getVector(param_mgr->mHazeHorizon.mName, err);
- getChild<LLUICtrl>("WLHazeHorizon")->setValue(param_mgr->mHazeHorizon.r);
- param_mgr->mDensityMult = currentParams.getVector(param_mgr->mDensityMult.mName, err);
- getChild<LLUICtrl>("WLDensityMult")->setValue(param_mgr->mDensityMult.x *
- param_mgr->mDensityMult.mult);
- param_mgr->mMaxAlt = currentParams.getVector(param_mgr->mMaxAlt.mName, err);
- getChild<LLUICtrl>("WLMaxAltitude")->setValue(param_mgr->mMaxAlt.x);
-
- // blue density
- param_mgr->mBlueDensity = currentParams.getVector(param_mgr->mBlueDensity.mName, err);
- getChild<LLUICtrl>("WLBlueDensityR")->setValue(param_mgr->mBlueDensity.r / 2.0);
- getChild<LLUICtrl>("WLBlueDensityG")->setValue(param_mgr->mBlueDensity.g / 2.0);
- getChild<LLUICtrl>("WLBlueDensityB")->setValue(param_mgr->mBlueDensity.b / 2.0);
- getChild<LLUICtrl>("WLBlueDensityI")->setValue(
- std::max(param_mgr->mBlueDensity.r / 2.0,
- std::max(param_mgr->mBlueDensity.g / 2.0, param_mgr->mBlueDensity.b / 2.0)));
-
- // Lighting
-
- // sunlight
- param_mgr->mSunlight = currentParams.getVector(param_mgr->mSunlight.mName, err);
- getChild<LLUICtrl>("WLSunlightR")->setValue(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLSunlightG")->setValue(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLSunlightB")->setValue(param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLSunlightI")->setValue(
- std::max(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE,
- std::max(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE)));
-
- // glow
- param_mgr->mGlow = currentParams.getVector(param_mgr->mGlow.mName, err);
- getChild<LLUICtrl>("WLGlowR")->setValue(2 - param_mgr->mGlow.r / 20.0f);
- getChild<LLUICtrl>("WLGlowB")->setValue(-param_mgr->mGlow.b / 5.0f);
-
- // ambient
- param_mgr->mAmbient = currentParams.getVector(param_mgr->mAmbient.mName, err);
- getChild<LLUICtrl>("WLAmbientR")->setValue(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLAmbientG")->setValue(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLAmbientB")->setValue(param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLAmbientI")->setValue(
- std::max(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE,
- std::max(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE)));
-
- getChild<LLUICtrl>("WLSunAngle")->setValue(param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI);
- getChild<LLUICtrl>("WLEastAngle")->setValue(param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI);
-
- // Clouds
-
- // Cloud Color
- param_mgr->mCloudColor = currentParams.getVector(param_mgr->mCloudColor.mName, err);
- getChild<LLUICtrl>("WLCloudColorR")->setValue(param_mgr->mCloudColor.r);
- getChild<LLUICtrl>("WLCloudColorG")->setValue(param_mgr->mCloudColor.g);
- getChild<LLUICtrl>("WLCloudColorB")->setValue(param_mgr->mCloudColor.b);
- getChild<LLUICtrl>("WLCloudColorI")->setValue(
- std::max(param_mgr->mCloudColor.r,
- std::max(param_mgr->mCloudColor.g, param_mgr->mCloudColor.b)));
-
- // Cloud
- param_mgr->mCloudMain = currentParams.getVector(param_mgr->mCloudMain.mName, err);
- getChild<LLUICtrl>("WLCloudX")->setValue(param_mgr->mCloudMain.r);
- getChild<LLUICtrl>("WLCloudY")->setValue(param_mgr->mCloudMain.g);
- getChild<LLUICtrl>("WLCloudDensity")->setValue(param_mgr->mCloudMain.b);
-
- // Cloud Detail
- param_mgr->mCloudDetail = currentParams.getVector(param_mgr->mCloudDetail.mName, err);
- getChild<LLUICtrl>("WLCloudDetailX")->setValue(param_mgr->mCloudDetail.r);
- getChild<LLUICtrl>("WLCloudDetailY")->setValue(param_mgr->mCloudDetail.g);
- getChild<LLUICtrl>("WLCloudDetailDensity")->setValue(param_mgr->mCloudDetail.b);
-
- // Cloud extras
- param_mgr->mCloudCoverage = currentParams.getVector(param_mgr->mCloudCoverage.mName, err);
- param_mgr->mCloudScale = currentParams.getVector(param_mgr->mCloudScale.mName, err);
- getChild<LLUICtrl>("WLCloudCoverage")->setValue(param_mgr->mCloudCoverage.x);
- getChild<LLUICtrl>("WLCloudScale")->setValue(param_mgr->mCloudScale.x);
-
- // cloud scrolling
- bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX();
- bool lockY = !param_mgr->mCurParams.getEnableCloudScrollY();
- getChild<LLUICtrl>("WLCloudLockX")->setValue(lockX);
- getChild<LLUICtrl>("WLCloudLockY")->setValue(lockY);
- getChild<LLUICtrl>("DrawClassicClouds")->setValue(gSavedSettings.getBOOL("SkyUseClassicClouds"));
-
- // disable if locked, enable if not
- if(lockX)
- {
- getChildView("WLCloudScrollX")->setEnabled(FALSE);
- } else {
- getChildView("WLCloudScrollX")->setEnabled(TRUE);
- }
- if(lockY)
- {
- getChildView("WLCloudScrollY")->setEnabled(FALSE);
- } else {
- getChildView("WLCloudScrollY")->setEnabled(TRUE);
- }
-
- // *HACK cloud scrolling is off my an additive of 10
- getChild<LLUICtrl>("WLCloudScrollX")->setValue(param_mgr->mCurParams.getCloudScrollX() - 10.0f);
- getChild<LLUICtrl>("WLCloudScrollY")->setValue(param_mgr->mCurParams.getCloudScrollY() - 10.0f);
-
- param_mgr->mDistanceMult = currentParams.getVector(param_mgr->mDistanceMult.mName, err);
- getChild<LLUICtrl>("WLDistanceMult")->setValue(param_mgr->mDistanceMult.x);
-
- // Tweak extras
-
- param_mgr->mWLGamma = currentParams.getVector(param_mgr->mWLGamma.mName, err);
- getChild<LLUICtrl>("WLGamma")->setValue(param_mgr->mWLGamma.x);
-
- getChild<LLUICtrl>("WLStarAlpha")->setValue(param_mgr->mCurParams.getStarBrightness());
-
- LLTabContainer* tab = getChild<LLTabContainer>("WindLight Tabs");
- LLPanel* panel = getChild<LLPanel>("Scattering");
-
- tab->enableTabButton(tab->getIndexForPanel(panel), gSavedSettings.getBOOL("RenderDeferredGI"));
-}
-
-
-// color control callbacks
-void LLFloaterWindLight::onColorControlRMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->r = sldrCtrl->getValueF32();
- if(colorControl->isSunOrAmbientColor) {
- colorControl->r *= 3;
- }
- if(colorControl->isBlueHorizonOrDensity) {
- colorControl->r *= 2;
- }
-
- // move i if it's the max
- if(colorControl->r >= colorControl->g && colorControl->r >= colorControl->b
- && colorControl->hasSliderName) {
- colorControl->i = colorControl->r;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- if(colorControl->isSunOrAmbientColor) {
- getChild<LLUICtrl>(name)->setValue(colorControl->r / 3);
- } else if(colorControl->isBlueHorizonOrDensity) {
- getChild<LLUICtrl>(name)->setValue(colorControl->r / 2);
- } else {
- getChild<LLUICtrl>(name)->setValue(colorControl->r);
- }
- }
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
-
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onColorControlGMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->g = sldrCtrl->getValueF32();
- if(colorControl->isSunOrAmbientColor) {
- colorControl->g *= 3;
- }
- if(colorControl->isBlueHorizonOrDensity) {
- colorControl->g *= 2;
- }
-
- // move i if it's the max
- if(colorControl->g >= colorControl->r && colorControl->g >= colorControl->b
- && colorControl->hasSliderName) {
- colorControl->i = colorControl->g;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- if(colorControl->isSunOrAmbientColor) {
- getChild<LLUICtrl>(name)->setValue(colorControl->g / 3);
- } else if(colorControl->isBlueHorizonOrDensity) {
- getChild<LLUICtrl>(name)->setValue(colorControl->g / 2);
- } else {
- getChild<LLUICtrl>(name)->setValue(colorControl->g);
- }
- }
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
-
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onColorControlBMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->b = sldrCtrl->getValueF32();
- if(colorControl->isSunOrAmbientColor) {
- colorControl->b *= 3;
- }
- if(colorControl->isBlueHorizonOrDensity) {
- colorControl->b *= 2;
- }
-
- // move i if it's the max
- if(colorControl->b >= colorControl->r && colorControl->b >= colorControl->g
- && colorControl->hasSliderName) {
- colorControl->i = colorControl->b;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- if(colorControl->isSunOrAmbientColor) {
- getChild<LLUICtrl>(name)->setValue(colorControl->b / 3);
- } else if(colorControl->isBlueHorizonOrDensity) {
- getChild<LLUICtrl>(name)->setValue(colorControl->b / 2);
- } else {
- getChild<LLUICtrl>(name)->setValue(colorControl->b);
- }
- }
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
-
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onColorControlIMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->i = sldrCtrl->getValueF32();
-
- // only for sliders where we pass a name
- if(colorControl->hasSliderName) {
-
- // set it to the top
- F32 maxVal = std::max(std::max(colorControl->r, colorControl->g), colorControl->b);
- F32 iVal;
-
- if(colorControl->isSunOrAmbientColor)
- {
- iVal = colorControl->i * 3;
- }
- else if(colorControl->isBlueHorizonOrDensity)
- {
- iVal = colorControl->i * 2;
- }
- else
- {
- iVal = colorControl->i;
- }
-
- // get the names of the other sliders
- std::string rName = colorControl->mSliderName;
- rName.append("R");
- std::string gName = colorControl->mSliderName;
- gName.append("G");
- std::string bName = colorControl->mSliderName;
- bName.append("B");
-
- // handle if at 0
- if(iVal == 0) {
- colorControl->r = 0;
- colorControl->g = 0;
- colorControl->b = 0;
-
- // if all at the start
- // set them all to the intensity
- } else if (maxVal == 0) {
- colorControl->r = iVal;
- colorControl->g = iVal;
- colorControl->b = iVal;
-
- } else {
-
- // add delta amounts to each
- F32 delta = (iVal - maxVal) / maxVal;
- colorControl->r *= (1.0f + delta);
- colorControl->g *= (1.0f + delta);
- colorControl->b *= (1.0f + delta);
- }
-
- // divide sun color vals by three
- if(colorControl->isSunOrAmbientColor)
- {
- getChild<LLUICtrl>(rName)->setValue(colorControl->r/3);
- getChild<LLUICtrl>(gName)->setValue(colorControl->g/3);
- getChild<LLUICtrl>(bName)->setValue(colorControl->b/3);
-
- }
- else if(colorControl->isBlueHorizonOrDensity)
- {
- getChild<LLUICtrl>(rName)->setValue(colorControl->r/2);
- getChild<LLUICtrl>(gName)->setValue(colorControl->g/2);
- getChild<LLUICtrl>(bName)->setValue(colorControl->b/2);
-
- }
- else
- {
- // set the sliders to the new vals
- getChild<LLUICtrl>(rName)->setValue(colorControl->r);
- getChild<LLUICtrl>(gName)->setValue(colorControl->g);
- getChild<LLUICtrl>(bName)->setValue(colorControl->b);
- }
- }
-
- // now update the current parameters and send them to shaders
- colorControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-/// GLOW SPECIFIC CODE
-void LLFloaterWindLight::onGlowRMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- // scaled by 20
- colorControl->r = (2 - sldrCtrl->getValueF32()) * 20;
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-/// \NOTE that we want NEGATIVE (-) B
-void LLFloaterWindLight::onGlowBMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- /// \NOTE that we want NEGATIVE (-) B and NOT by 20 as 20 is too big
- colorControl->b = -sldrCtrl->getValueF32() * 5;
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onFloatControlMoved(LLUICtrl* ctrl, WLFloatControl* floatControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- floatControl->x = sldrCtrl->getValueF32() / floatControl->mult;
-
- floatControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-// Lighting callbacks
-
-// time of day
-void LLFloaterWindLight::onSunMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sunSldr = getChild<LLSliderCtrl>("WLSunAngle");
- LLSliderCtrl* eastSldr = getChild<LLSliderCtrl>("WLEastAngle");
-
- // get the two angles
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- param_mgr->mCurParams.setSunAngle(F_TWO_PI * sunSldr->getValueF32());
- param_mgr->mCurParams.setEastAngle(F_TWO_PI * eastSldr->getValueF32());
-
- // set the sun vector
- colorControl->r = -sin(param_mgr->mCurParams.getEastAngle()) *
- cos(param_mgr->mCurParams.getSunAngle());
- colorControl->g = sin(param_mgr->mCurParams.getSunAngle());
- colorControl->b = cos(param_mgr->mCurParams.getEastAngle()) *
- cos(param_mgr->mCurParams.getSunAngle());
- colorControl->i = 1.f;
-
- colorControl->update(param_mgr->mCurParams);
- param_mgr->propagateParameters();
-}
-
-void LLFloaterWindLight::onStarAlphaMoved(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- LLWLParamManager::instance()->mCurParams.setStarBrightness(sldrCtrl->getValueF32());
-}
-
-void LLFloaterWindLight::onNewPreset()
-{
- LLNotificationsUtil::add("NewSkyPreset", LLSD(), LLSD(), boost::bind(&LLFloaterWindLight::newPromptCallback, this, _1, _2));
-}
-
-void LLFloaterWindLight::onSavePreset()
-{
- // get the name
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLPresetsCombo");
-
- // don't save the empty name
- if(comboBox->getSelectedItemLabel() == "")
- {
- return;
- }
-
- // check to see if it's a default and shouldn't be overwritten
- std::set<std::string>::iterator sIt = sDefaultPresets.find(
- comboBox->getSelectedItemLabel());
- if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("SkyEditPresets"))
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return;
- }
-
- LLWLParamManager::instance()->mCurParams.mName =
- comboBox->getSelectedItemLabel();
-
- LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterWindLight::saveAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWindLight::saveAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- // if they choose save, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- param_mgr->setParamSet(param_mgr->mCurParams.mName, param_mgr->mCurParams);
-
- // comment this back in to save to file
- param_mgr->savePreset(param_mgr->mCurParams.mName);
- }
- return false;
-}
-
-void LLFloaterWindLight::onDeletePreset()
-{
- LLComboBox* combo_box = getChild<LLComboBox>(
- "WLPresetsCombo");
-
- if(combo_box->getSelectedValue().asString() == "")
- {
- return;
- }
-
- LLSD args;
- args["SKY"] = combo_box->getSelectedValue().asString();
- LLNotificationsUtil::add("WLDeletePresetAlert", args, LLSD(),
- boost::bind(&LLFloaterWindLight::deleteAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- // if they choose delete, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLComboBox* combo_box = getChild<LLComboBox>("WLPresetsCombo");
- LLFloaterDayCycle* day_cycle = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- LLComboBox* key_combo = NULL;
-
- if (day_cycle)
- {
- key_combo = day_cycle->getChild<LLComboBox>("WLKeyPresets");
- }
-
- std::string name(combo_box->getSelectedValue().asString());
-
- // check to see if it's a default and shouldn't be deleted
- std::set<std::string>::iterator sIt = sDefaultPresets.find(name);
- if(sIt != sDefaultPresets.end())
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return false;
- }
-
- LLWLParamManager::instance()->removeParamSet(name, true);
-
- // remove and choose another
- S32 new_index = combo_box->getCurrentIndex();
-
- combo_box->remove(name);
- if(key_combo != NULL)
- {
- key_combo->remove(name);
-
- // remove from slider, as well
- day_cycle->deletePreset(name);
- }
-
- // pick the previously selected index after delete
- if(new_index > 0)
- {
- new_index--;
- }
-
- if(combo_box->getItemCount() > 0)
- {
- combo_box->setCurrentByIndex(new_index);
- }
- }
- return false;
-}
-
-
-void LLFloaterWindLight::onChangePresetName(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- std::string data = ctrl->getValue().asString();
- if(!data.empty())
- {
- LLWLParamManager::instance()->loadPreset( data);
- syncMenu();
- }
-}
-
-void LLFloaterWindLight::onOpenDayCycle()
-{
- LLFloaterReg::showInstance("env_day_cycle");
-}
-
-// Clouds
-void LLFloaterWindLight::onCloudScrollXMoved(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
- // *HACK all cloud scrolling is off by an additive of 10.
- LLWLParamManager::instance()->mCurParams.setCloudScrollX(sldrCtrl->getValueF32() + 10.0f);
-}
-
-void LLFloaterWindLight::onCloudScrollYMoved(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- // *HACK all cloud scrolling is off by an additive of 10.
- LLWLParamManager::instance()->mCurParams.setCloudScrollY(sldrCtrl->getValueF32() + 10.0f);
-}
-
-void LLFloaterWindLight::onCloudScrollXToggled(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLCheckBoxCtrl* cbCtrl = static_cast<LLCheckBoxCtrl*>(ctrl);
-
- bool lock = cbCtrl->get();
- LLWLParamManager::instance()->mCurParams.setEnableCloudScrollX(!lock);
-
- LLSliderCtrl* sldr = getChild<LLSliderCtrl>(
- "WLCloudScrollX");
-
- if(cbCtrl->get())
- {
- sldr->setEnabled(false);
- }
- else
- {
- sldr->setEnabled(true);
- }
-
-}
-
-void LLFloaterWindLight::onCloudScrollYToggled(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLCheckBoxCtrl* cbCtrl = static_cast<LLCheckBoxCtrl*>(ctrl);
- bool lock = cbCtrl->get();
- LLWLParamManager::instance()->mCurParams.setEnableCloudScrollY(!lock);
-
- LLSliderCtrl* sldr = getChild<LLSliderCtrl>(
- "WLCloudScrollY");
-
- if(cbCtrl->get())
- {
- sldr->setEnabled(false);
- }
- else
- {
- sldr->setEnabled(true);
- }
-}
-
-void LLFloaterWindLight::deactivateAnimator()
-{
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-}
diff --git a/indra/newview/llfloaterwindlight.h b/indra/newview/llfloaterwindlight.h
deleted file mode 100644
index b43edc2c11..0000000000
--- a/indra/newview/llfloaterwindlight.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * @file llfloaterwindlight.h
- * @brief LLFloaterWindLight class definition
- *
- * $LicenseInfo:firstyear=2007&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$
- */
-
-/*
- * Menu for adjusting the atmospheric settings of the world
- */
-
-#ifndef LL_LLFLOATERWINDLIGHT_H
-#define LL_LLFLOATERWINDLIGHT_H
-
-#include "llfloater.h"
-
-#include <vector>
-#include "llwlparamset.h"
-
-struct WLColorControl;
-struct WLFloatControl;
-
-
-/// Menuing system for all of windlight's functionality
-class LLFloaterWindLight : public LLFloater
-{
-public:
-
- LLFloaterWindLight(const LLSD& key);
- virtual ~LLFloaterWindLight();
- /*virtual*/ BOOL postBuild();
- /// initialize all
- void initCallbacks(void);
-
- bool newPromptCallback(const LLSD& notification, const LLSD& response);
-
- /// general purpose callbacks for dealing with color controllers
- void onColorControlRMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onColorControlGMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onColorControlBMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onColorControlIMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onFloatControlMoved(LLUICtrl* ctrl, WLFloatControl* userData);
-
- /// lighting callbacks for glow
- void onGlowRMoved(LLUICtrl* ctrl, WLColorControl* userData);
- //static void onGlowGMoved(LLUICtrl* ctrl, void* userData);
- void onGlowBMoved(LLUICtrl* ctrl, WLColorControl* userData);
-
- /// lighting callbacks for sun
- void onSunMoved(LLUICtrl* ctrl, WLColorControl* userData);
-
- /// for handling when the star slider is moved to adjust the alpha
- void onStarAlphaMoved(LLUICtrl* ctrl);
-
- /// when user hits the load preset button
- void onNewPreset();
-
- /// when user hits the save preset button
- void onSavePreset();
-
- /// prompts a user when overwriting a preset
- bool saveAlertCallback(const LLSD& notification, const LLSD& response);
-
- /// when user hits the save preset button
- void onDeletePreset();
-
- /// prompts a user when overwriting a preset
- bool deleteAlertCallback(const LLSD& notification, const LLSD& response);
-
- /// what to do when you change the preset name
- void onChangePresetName(LLUICtrl* ctrl);
-
- /// when user hits the save preset button
- void onOpenDayCycle();
-
- /// handle cloud scrolling
- void onCloudScrollXMoved(LLUICtrl* ctrl);
- void onCloudScrollYMoved(LLUICtrl* ctrl);
- void onCloudScrollXToggled(LLUICtrl* ctrl);
- void onCloudScrollYToggled(LLUICtrl* ctrl);
-
- /// sync up sliders with parameters
- void syncMenu();
-
- /// turn off animated skies
- static void deactivateAnimator();
-
-private:
- static std::set<std::string> sDefaultPresets;
-};
-
-
-#endif
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index f8a4ce7ad0..137b5446cf 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -70,7 +70,7 @@
#include "llappviewer.h"
#include "llmapimagetype.h"
#include "llweb.h"
-#include "llslider.h"
+#include "llsliderctrl.h"
#include "message.h"
#include "llwindow.h" // copyTextToClipboard()
#include <algorithm>
@@ -237,16 +237,19 @@ const LLUUID LLFloaterWorldMap::sHomeID( "10000000-0000-0000-0000-000000000001"
LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
: LLFloater(key),
-mInventory(NULL),
-mInventoryObserver(NULL),
-mFriendObserver(NULL),
-mCompletingRegionName(),
-mCompletingRegionPos(),
-mWaitingForTracker(FALSE),
-mIsClosing(FALSE),
-mSetToUserPosition(TRUE),
-mTrackedLocation(0,0,0),
-mTrackedStatus(LLTracker::TRACKING_NOTHING)
+ mInventory(NULL),
+ mInventoryObserver(NULL),
+ mFriendObserver(NULL),
+ mCompletingRegionName(),
+ mCompletingRegionPos(),
+ mWaitingForTracker(FALSE),
+ mIsClosing(FALSE),
+ mSetToUserPosition(TRUE),
+ mTrackedLocation(0,0,0),
+ mTrackedStatus(LLTracker::TRACKING_NOTHING),
+ mListFriendCombo(NULL),
+ mListLandmarkCombo(NULL),
+ mListSearchResults(NULL)
{
gFloaterWorldMap = this;
@@ -281,17 +284,20 @@ BOOL LLFloaterWorldMap::postBuild()
avatar_combo->selectFirstItem();
avatar_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboPrearrange, this) );
avatar_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
+ mListFriendCombo = dynamic_cast<LLCtrlListInterface *>(avatar_combo);
LLSearchEditor *location_editor = getChild<LLSearchEditor>("location");
location_editor->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1));
location_editor->setKeystrokeCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this));
getChild<LLScrollListCtrl>("search_results")->setDoubleClickCallback( boost::bind(&LLFloaterWorldMap::onClickTeleportBtn, this));
+ mListSearchResults = childGetListInterface("search_results");
LLComboBox *landmark_combo = getChild<LLComboBox>( "landmark combo");
landmark_combo->selectFirstItem();
landmark_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onLandmarkComboPrearrange, this) );
landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
+ mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo);
mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale);
@@ -864,7 +870,7 @@ void LLFloaterWorldMap::friendsChanged()
// No longer really builds a list. Instead, just updates mAvatarCombo.
void LLFloaterWorldMap::buildAvatarIDList()
{
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (!list) return;
// Delete all but the "None" entry
@@ -894,7 +900,7 @@ void LLFloaterWorldMap::buildAvatarIDList()
void LLFloaterWorldMap::buildLandmarkIDLists()
{
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (!list) return;
// Delete all but the "None" entry
@@ -955,7 +961,7 @@ F32 LLFloaterWorldMap::getDistanceToDestination(const LLVector3d &destination,
void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
{
- LLCtrlListInterface *list = childGetListInterface("search_results");
+ LLCtrlListInterface *list = mListSearchResults;
if (list)
{
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
@@ -969,7 +975,7 @@ void LLFloaterWorldMap::clearLandmarkSelection(BOOL clear_ui)
{
if (clear_ui || !childHasKeyboardFocus("landmark combo"))
{
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (list)
{
list->selectByValue( "None" );
@@ -983,7 +989,7 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui)
if (clear_ui || !childHasKeyboardFocus("friend combo"))
{
mTrackedStatus = LLTracker::TRACKING_NOTHING;
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (list)
{
list->selectByValue( "None" );
@@ -1029,7 +1035,7 @@ void LLFloaterWorldMap::adjustZoomSliderBounds()
F32 min_power = log(pixels_per_region/256.f)/log(2.f);
- getChild<LLSlider>("zoom slider")->setMinValue(min_power);
+ getChild<LLSliderCtrl>("zoom slider")->setMinValue(min_power);
}
@@ -1051,7 +1057,7 @@ void LLFloaterWorldMap::onLandmarkComboPrearrange( )
return;
}
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (!list) return;
LLUUID current_choice = list->getCurrentID();
@@ -1070,7 +1076,7 @@ void LLFloaterWorldMap::onComboTextEntry()
// Reset the tracking whenever we start typing into any of the search fields,
// so that hitting <enter> does an auto-complete versus teleporting us to the
// previously selected landmark/friend.
- LLTracker::clearFocus();
+ LLTracker::stopTracking(NULL);
}
void LLFloaterWorldMap::onSearchTextEntry( )
@@ -1087,7 +1093,7 @@ void LLFloaterWorldMap::onLandmarkComboCommit()
return;
}
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (!list) return;
LLUUID asset_id;
@@ -1134,7 +1140,7 @@ void LLFloaterWorldMap::onAvatarComboPrearrange( )
return;
}
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (!list) return;
LLUUID current_choice;
@@ -1159,7 +1165,7 @@ void LLFloaterWorldMap::onAvatarComboCommit()
return;
}
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (!list) return;
const LLUUID& new_avatar_id = list->getCurrentID();
@@ -1221,6 +1227,12 @@ void LLFloaterWorldMap::onLocationCommit()
{ // Set the value in the UI if any spaces were removed
getChild<LLUICtrl>("location")->setValue(str);
}
+
+ // Don't try completing empty name (STORM-1427).
+ if (str.empty())
+ {
+ return;
+ }
LLStringUtil::toLower(str);
mCompletingRegionName = str;
@@ -1527,17 +1539,24 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
mCompletingRegionName = "";
}
- // if match found, highlight it and go
- if (!match.isUndefined())
+ if (num_results > 0)
{
- list->selectByValue(match);
+ // if match found, highlight it and go
+ if (!match.isUndefined())
+ {
+ list->selectByValue(match);
+ }
+ // else select first found item
+ else
+ {
+ list->selectFirstItem();
+ }
getChild<LLUICtrl>("search_results")->setFocus(TRUE);
onCommitSearchResult();
}
-
- // if we found nothing, say "none"
- if (num_results == 0)
+ else
{
+ // if we found nothing, say "none"
list->setCommentText(LLTrans::getString("worldmap_results_none_found"));
list->operateOnAll(LLCtrlListInterface::OP_DESELECT);
}
@@ -1546,7 +1565,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
void LLFloaterWorldMap::onCommitSearchResult()
{
- LLCtrlListInterface *list = childGetListInterface("search_results");
+ LLCtrlListInterface *list = mListSearchResults;
if (!list) return;
LLSD selected_value = list->getSelectedValue();
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 783d9f4819..e3b83b2579 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -39,6 +39,7 @@
#include "lltracker.h"
#include "llslurl.h"
+class LLCtrlListInterface;
class LLFriendObserver;
class LLInventoryModel;
class LLInventoryObserver;
@@ -190,6 +191,10 @@ private:
std::string mTrackedSimName;
std::string mTrackedAvatarName;
LLSLURL mSLURL;
+
+ LLCtrlListInterface * mListFriendCombo;
+ LLCtrlListInterface * mListLandmarkCombo;
+ LLCtrlListInterface * mListSearchResults;
};
extern LLFloaterWorldMap* gFloaterWorldMap;
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 3884b94b60..e4bd2049fa 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -167,13 +167,24 @@ void LLCloseAllFoldersFunctor::doItem(LLFolderViewItem* item)
///----------------------------------------------------------------------------
/// Class LLFolderView
///----------------------------------------------------------------------------
+LLFolderView::Params::Params()
+: task_id("task_id"),
+ title("title"),
+ use_label_suffix("use_label_suffix"),
+ allow_multiselect("allow_multiselect", true),
+ show_load_status("show_load_status", true),
+ use_ellipses("use_ellipses", false)
+{
+}
+
// Default constructor
LLFolderView::LLFolderView(const Params& p)
: LLFolderViewFolder(p),
+ mRunningHeight(0),
mScrollContainer( NULL ),
mPopupMenuHandle(),
- mAllowMultiSelect(TRUE),
+ mAllowMultiSelect(p.allow_multiselect),
mShowFolderHierarchy(FALSE),
mSourceID(p.task_id),
mRenameItem( NULL ),
@@ -194,10 +205,14 @@ LLFolderView::LLFolderView(const Params& p)
mDragAndDropThisFrame(FALSE),
mCallbackRegistrar(NULL),
mParentPanel(p.parent_panel),
- mUseEllipses(false),
+ mUseEllipses(p.use_ellipses),
mDraggingOverItem(NULL),
mStatusTextBox(NULL)
{
+ mRoot = this;
+
+ mShowLoadStatus = p.show_load_status();
+
LLRect rect = p.rect;
LLRect new_rect(rect.mLeft, rect.mBottom + getRect().getHeight(), rect.mLeft + getRect().getWidth(), rect.mBottom);
setRect( rect );
@@ -263,6 +278,7 @@ LLFolderView::LLFolderView(const Params& p)
menu->setBackgroundColor(LLUIColorTable::instance().getColor("MenuPopupBgColor"));
mPopupMenuHandle = menu->getHandle();
+ mListener->openItem();
}
// Destroys the object
@@ -308,15 +324,10 @@ void LLFolderView::setSortOrder(U32 order)
if (order != mSortOrder)
{
LLFastTimer t(FTM_SORT);
+
mSortOrder = order;
- for (folders_t::iterator iter = mFolders.begin();
- iter != mFolders.end();)
- {
- folders_t::iterator fit = iter++;
- (*fit)->sortBy(order);
- }
-
+ sortBy(order);
arrangeAll();
}
}
@@ -342,7 +353,7 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
{
recursiveIncrementNumDescendantsSelected(folder->numSelected());
}
- folder->setShowLoadStatus(true);
+ folder->setShowLoadStatus(mShowLoadStatus);
folder->setOrigin(0, 0);
folder->reshape(getRect().getWidth(), 0);
folder->setVisible(FALSE);
@@ -359,16 +370,6 @@ void LLFolderView::closeAllFolders()
arrangeAll();
}
-void LLFolderView::openFolder(const std::string& foldername)
-{
- LLFolderViewFolder* inv = findChild<LLFolderViewFolder>(foldername);
- if (inv)
- {
- setSelection(inv, FALSE, FALSE);
- inv->setOpen(TRUE);
- }
-}
-
void LLFolderView::openTopLevelFolders()
{
for (folders_t::iterator iter = mFolders.begin();
@@ -392,6 +393,16 @@ static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange");
// This view grows and shinks to enclose all of its children items and folders.
S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_generation )
{
+ if (getListener()->getUUID().notNull())
+ {
+ if (mNeedsSort)
+ {
+ mFolders.sort(mSortFunction);
+ mItems.sort(mSortFunction);
+ mNeedsSort = false;
+ }
+ }
+
LLFastTimer t2(FTM_ARRANGE);
filter_generation = mFilter->getMinRequiredGeneration();
@@ -424,11 +435,7 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
(folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
}
- // Need to call arrange regardless of visibility, since children's visibility
- // might need to be changed too (e.g. even though a folder is invisible, its
- // children also need to be set invisible for state-tracking purposes, e.g.
- // llfolderviewitem::filter).
- // if (folderp->getVisible())
+ if (folderp->getVisible())
{
S32 child_height = 0;
S32 child_width = 0;
@@ -473,6 +480,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 );
@@ -518,9 +526,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)
@@ -704,8 +714,10 @@ void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem
mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS;
}
+static LLFastTimer::DeclareTimer FTM_SANITIZE_SELECTION("Sanitize Selection");
void LLFolderView::sanitizeSelection()
{
+ LLFastTimer _(FTM_SANITIZE_SELECTION);
// store off current item in case it is automatically deselected
// and we want to preserve context
LLFolderViewItem* original_selected_item = getCurSelectedItem();
@@ -764,7 +776,7 @@ void LLFolderView::sanitizeSelection()
}
// Don't allow invisible items (such as root folders) to be selected.
- if (item->getHidden())
+ if (item == getRoot())
{
items_to_remove.push_back(item);
}
@@ -787,7 +799,7 @@ void LLFolderView::sanitizeSelection()
parent_folder;
parent_folder = parent_folder->getParentFolder())
{
- if (parent_folder->potentiallyVisible() && !parent_folder->getHidden())
+ if (parent_folder->potentiallyVisible())
{
// give initial selection to first ancestor folder that potentially passes the filter
if (!new_selection)
@@ -806,13 +818,7 @@ void LLFolderView::sanitizeSelection()
}
else
{
- // nothing selected to start with, so pick "My Inventory" as best guess
- new_selection = getItemByID(gInventory.getRootFolderID());
- // ... except if it's hidden from the UI.
- if (new_selection && new_selection->getHidden())
- {
- new_selection = NULL;
- }
+ new_selection = NULL;
}
if (new_selection)
@@ -931,14 +937,15 @@ void LLFolderView::draw()
if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration())
{
mStatusText = LLTrans::getString("Searching");
- //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
}
else
{
- LLStringUtil::format_map_t args;
- args["[SEARCH_TERM]"] = LLURI::escape(getFilter()->getFilterSubStringOrig());
- mStatusText = LLTrans::getString(getFilter()->getEmptyLookupMessage(), args);
- //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
+ if (getFilter())
+ {
+ LLStringUtil::format_map_t args;
+ args["[SEARCH_TERM]"] = LLURI::escape(getFilter()->getFilterSubStringOrig());
+ mStatusText = LLTrans::getString(getFilter()->getEmptyLookupMessage(), args);
+ }
}
mStatusTextBox->setValue(mStatusText);
mStatusTextBox->setVisible( TRUE );
@@ -962,7 +969,9 @@ void LLFolderView::draw()
}
- LLFolderViewFolder::draw();
+ // skip over LLFolderViewFolder::draw since we don't want the folder icon, label,
+ // and arrow for the root folder
+ LLView::draw();
mDragAndDropThisFrame = FALSE;
}
@@ -1642,11 +1651,7 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
LLFolderViewItem* parent_folder = last_selected->getParentFolder();
if (!last_selected->isOpen() && parent_folder && parent_folder->getParentFolder())
{
- // Don't change selectin to hidden folder. See EXT-5328.
- if (!parent_folder->getHidden())
- {
- setSelection(parent_folder, FALSE, TRUE);
- }
+ setSelection(parent_folder, FALSE, TRUE);
}
else
{
@@ -1904,14 +1909,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)
{
- handled = mFolders.front()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg);
+ if (getListener()->getUUID().notNull())
+ {
+ LLFolderViewFolder::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+ }
+ else
+ {
+ 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)
@@ -1927,8 +1944,11 @@ void LLFolderView::deleteAllChildren()
closeRenamer();
LLView::deleteViewByHandle(mPopupMenuHandle);
mPopupMenuHandle = LLHandle<LLView>();
- mRenamer = NULL;
+ mScrollContainer = NULL;
mRenameItem = NULL;
+ mRenamer = NULL;
+ mStatusTextBox = NULL;
+
clearSelection();
LLView::deleteAllChildren();
}
@@ -2029,9 +2049,11 @@ 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)
{
- if (id.isNull())
+ LLFastTimer _(FTM_GET_ITEM_BY_ID);
+ if (id == getListener()->getUUID())
{
return this;
}
@@ -2048,7 +2070,7 @@ LLFolderViewItem* LLFolderView::getItemByID(const LLUUID& id)
LLFolderViewFolder* LLFolderView::getFolderByID(const LLUUID& id)
{
- if (id.isNull())
+ if (id == getListener()->getUUID())
{
return this;
}
@@ -2173,7 +2195,7 @@ void LLFolderView::doIdle()
// filter to determine visiblity before arranging
filterFromRoot();
- // automatically show matching items, and select first one
+ // automatically show matching items, and select first one if we had a selection
// do this every frame until user puts keyboard focus into the inventory window
// signaling the end of the automatic update
// only do this when mNeedsFilter is set, meaning filtered items have
@@ -2183,7 +2205,7 @@ void LLFolderView::doIdle()
LLFastTimer t3(FTM_AUTO_SELECT);
// select new item only if a filtered item not currently selected
LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back();
- if ((!selected_itemp || !selected_itemp->getFiltered()) && !mAutoSelectOverride)
+ if ((selected_itemp && !selected_itemp->getFiltered()) && !mAutoSelectOverride)
{
// select first filtered item
LLSelectFirstFilteredItem filter;
@@ -2496,11 +2518,6 @@ BOOL LLFolderView::isFilterModified()
return mFilter->isNotDefault();
}
-BOOL LLFolderView::getAllowMultiSelect()
-{
- return mAllowMultiSelect;
-}
-
void delete_selected_item(void* user_data)
{
if(user_data)
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 1464a058d8..8af01e9102 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -59,22 +59,6 @@ class LLUICtrl;
class LLTextBox;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLFolderViewFunctor
-//
-// Simple abstract base class for applying a functor to folders and
-// items in a folder view hierarchy. This is suboptimal for algorithms
-// that only work folders or only work on items, but I'll worry about
-// that later when it's determined to be too slow.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLFolderViewFunctor
-{
-public:
- virtual ~LLFolderViewFunctor() {}
- virtual void doFolder(LLFolderViewFolder* folder) = 0;
- virtual void doItem(LLFolderViewItem* item) = 0;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLFolderView
//
// Th LLFolderView represents the root level folder view object. It
@@ -89,7 +73,12 @@ public:
Mandatory<LLPanel*> parent_panel;
Optional<LLUUID> task_id;
Optional<std::string> title;
- Optional<bool> use_label_suffix;
+ Optional<bool> use_label_suffix,
+ allow_multiselect,
+ show_load_status,
+ use_ellipses;
+
+ Params();
};
LLFolderView(const Params&);
virtual ~LLFolderView( void );
@@ -102,7 +91,6 @@ public:
// and resort the items if necessary.
void setSortOrder(U32 order);
void setFilterPermMask(PermissionMask filter_perm_mask);
- void setAllowMultiSelect(BOOL allow) { mAllowMultiSelect = allow; }
typedef boost::signals2::signal<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)> signal_t;
void setSelectCallback(const signal_t::slot_type& cb) { mSelectSignal.connect(cb); }
@@ -117,11 +105,9 @@ public:
//LLInventoryFilter::EFolderShow getShowFolderState();
U32 getSortOrder() const;
BOOL isFilterModified();
- BOOL getAllowMultiSelect();
// Close all folders in the view
void closeAllFolders();
- void openFolder(const std::string& foldername);
void openTopLevelFolders();
virtual void toggleOpen() {};
@@ -238,7 +224,6 @@ public:
void setShowSingleSelection(BOOL show);
BOOL getShowSingleSelection() { return mShowSingleSelection; }
F32 getSelectionFadeElapsedTime() { return mMultiSelectionFadeTimer.getElapsedTimeF32(); }
- void setUseEllipses(bool use_ellipses) { mUseEllipses = use_ellipses; }
bool getUseEllipses() { return mUseEllipses; }
void addItemID(const LLUUID& id, LLFolderViewItem* itemp);
@@ -329,6 +314,7 @@ protected:
signal_t mReshapeSignal;
S32 mSignalSelectCallback;
S32 mMinWidth;
+ S32 mRunningHeight;
std::map<LLUUID, LLFolderViewItem*> mItemMap;
BOOL mDragAndDropThisFrame;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index e9d1ad3a9e..e2b7c45eab 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -30,8 +30,10 @@
// viewer includes
#include "llfolderview.h" // Items depend extensively on LLFolderViews
#include "llfoldervieweventlistener.h"
+#include "llviewerfoldertype.h"
#include "llinventorybridge.h" // for LLItemBridge in LLInventorySort::operator()
#include "llinventoryfilter.h"
+#include "llinventoryfunctions.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llpanel.h"
#include "llviewercontrol.h" // gSavedSettings
@@ -130,10 +132,14 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
mIconOpen(p.icon_open),
mIconOverlay(p.icon_overlay),
mListener(p.listener),
- mHidden(false),
mShowLoadStatus(false)
{
+}
+
+BOOL LLFolderViewItem::postBuild()
+{
refresh();
+ return TRUE;
}
// Destroys the object
@@ -195,7 +201,7 @@ LLFolderViewItem* LLFolderViewItem::getPreviousOpenNode(BOOL include_children)
LLFolderViewItem* itemp = mParentFolder->getPreviousFromChild( this, include_children );
// Skip over items that are invisible or are hidden from the UI.
- while(itemp && (!itemp->getVisible() || itemp->getHidden()))
+ while(itemp && !itemp->getVisible())
{
LLFolderViewItem* next_itemp = itemp->mParentFolder->getPreviousFromChild( itemp, include_children );
if (itemp == next_itemp)
@@ -280,7 +286,7 @@ void LLFolderViewItem::refreshFromListener()
time_t creation_date = mListener->getCreationDate();
if (mCreationDate != creation_date)
{
- mCreationDate = mListener->getCreationDate();
+ setCreationDate(mListener->getCreationDate());
dirtyFilter();
}
if (mRoot->useLabelSuffix())
@@ -351,7 +357,10 @@ void LLFolderViewItem::arrangeAndSet(BOOL set_selection,
BOOL take_keyboard_focus)
{
LLFolderView* root = getRoot();
+ if (getParentFolder())
+ {
getParentFolder()->requestArrange();
+ }
if(set_selection)
{
setSelectionFromRoot(this, TRUE, take_keyboard_focus);
@@ -442,23 +451,20 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)
S32 LLFolderViewItem::getItemHeight()
{
- if (getHidden()) return 0;
-
return mItemHeight;
}
void LLFolderViewItem::filter( LLInventoryFilter& filter)
{
const BOOL previous_passed_filter = mPassedFilter;
- const BOOL passed_filter = mListener && filter.check(this);
+ const BOOL passed_filter = filter.check(this);
// If our visibility will change as a result of this filter, then
// we need to be rearranged in our parent folder
if (mParentFolder)
{
- if (getVisible() != passed_filter)
- mParentFolder->requestArrange();
- if (passed_filter != previous_passed_filter)
+ if (getVisible() != passed_filter
+ || previous_passed_filter != passed_filter )
mParentFolder->requestArrange();
}
@@ -863,11 +869,6 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
void LLFolderViewItem::draw()
{
- if (getHidden())
- {
- return;
- }
-
static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE);
@@ -891,8 +892,8 @@ void LLFolderViewItem::draw()
// Draw open folder arrow
//
const bool up_to_date = mListener && mListener->isUpToDate();
- const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) || // we fetched our children and some of them have passed the filter...
- (!up_to_date && mListener && mListener->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter)
+ const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) // we fetched our children and some of them have passed the filter...
+ || (!up_to_date && mListener && mListener->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter)
if (possibly_has_children)
{
LLUIImage* arrow_image = default_params.folder_arrow_image;
@@ -1054,8 +1055,11 @@ void LLFolderViewItem::draw()
{
root_is_loading = LLInventoryModelBackgroundFetch::instance().libraryFetchInProgress();
}
- if ((mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime")) ||
- (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && root_is_loading && (mShowLoadStatus || mHidden)))
+ if ((mIsLoading
+ && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime"))
+ || (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive()
+ && root_is_loading
+ && mShowLoadStatus))
{
std::string load_string = " ( " + LLTrans::getString("LoadingData") + " ) ";
font->renderUTF8(load_string, 0, right_x, y, sSearchStatusColor,
@@ -1119,7 +1123,8 @@ LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):
mLastCalculatedWidth(0),
mCompletedFilterGeneration(-1),
mMostFilteredDescendantGeneration(-1),
- mNeedsSort(false)
+ mNeedsSort(false),
+ mPassedFolderFilter(FALSE)
{
}
@@ -1131,6 +1136,17 @@ LLFolderViewFolder::~LLFolderViewFolder( void )
gFocusMgr.releaseFocusIfNeeded( this ); // calls onCommit()
}
+void LLFolderViewFolder::setFilteredFolder(bool filtered, S32 filter_generation)
+{
+ mPassedFolderFilter = filtered;
+ mLastFilterGeneration = filter_generation;
+}
+
+bool LLFolderViewFolder::getFilteredFolder(S32 filter_generation)
+{
+ return mPassedFolderFilter && mLastFilterGeneration >= getRoot()->getFilter()->getMinRequiredGeneration();
+}
+
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
BOOL LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder, LLFolderView* root)
{
@@ -1157,8 +1173,6 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
mHasVisibleChildren = hasFilteredDescendants(filter_generation);
- LLInventoryFilter::EFolderShow show_folder_state = getRoot()->getFilter()->getShowFolderState();
-
// calculate height as a single item (without any children), and reshapes rectangle to match
LLFolderViewItem::arrange( width, height, filter_generation );
@@ -1190,8 +1204,10 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
}
else
{
- folderp->setVisible(show_folder_state == LLInventoryFilter::SHOW_ALL_FOLDERS || // always show folders?
- (folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
+ folderp->setVisible( folderp->getListener()
+ && (folderp->getFiltered(filter_generation)
+ || (folderp->getFilteredFolder(filter_generation)
+ && folderp->hasFilteredDescendants(filter_generation)))); // passed filter or has descendants that passed filter
}
if (folderp->getVisible())
@@ -1311,7 +1327,9 @@ void LLFolderViewFolder::setCompletedFilterGeneration(S32 generation, BOOL recur
mMostFilteredDescendantGeneration = llmin(mMostFilteredDescendantGeneration, generation);
mCompletedFilterGeneration = generation;
// only aggregate up if we are a lower (older) value
- if (recurse_up && mParentFolder && generation < mParentFolder->getCompletedFilterGeneration())
+ if (recurse_up
+ && mParentFolder
+ && generation < mParentFolder->getCompletedFilterGeneration())
{
mParentFolder->setCompletedFilterGeneration(generation, TRUE);
}
@@ -1336,21 +1354,19 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
// filter folder itself
if (getLastFilterGeneration() < filter_generation)
{
- if (getLastFilterGeneration() >= must_pass_generation && // folder has been compared to a valid precursor filter
- !mPassedFilter) // and did not pass the filter
+ if (getLastFilterGeneration() >= must_pass_generation // folder has been compared to a valid precursor filter
+ && !mPassedFilter) // and did not pass the filter
{
// go ahead and flag this folder as done
mLastFilterGeneration = filter_generation;
}
- else
+ else // filter self only on first pass through
{
- // filter self only on first pass through
+ // filter against folder rules
+ filterFolder(filter);
+ // and then item rules
LLFolderViewItem::filter( filter );
}
- if (mHidden)
- {
- setOpen();
- }
}
if (getRoot()->getDebugFilters())
@@ -1377,7 +1393,10 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
}
// when applying a filter, matching folders get their contents downloaded first
- if (filter.isNotDefault() && getFiltered(filter.getMinRequiredGeneration()) && (mListener && !gInventory.isCategoryComplete(mListener->getUUID())))
+ if (filter.isNotDefault()
+ && getFiltered(filter.getMinRequiredGeneration())
+ && (mListener
+ && !gInventory.isCategoryComplete(mListener->getUUID())))
{
LLInventoryModelBackgroundFetch::instance().start(mListener->getUUID());
}
@@ -1403,6 +1422,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (folder->getFiltered() || folder->hasFilteredDescendants(filter.getMinRequiredGeneration()))
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
}
// just skip it, it has already been filtered
continue;
@@ -1415,6 +1435,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (folder->getFiltered() || folder->hasFilteredDescendants(filter_generation))
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
if (getRoot()->needsAutoSelect() && autoopen_folders)
{
folder->setOpenArrangeRecursively(TRUE);
@@ -1436,6 +1457,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (item->getFiltered())
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
}
continue;
}
@@ -1454,6 +1476,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (item->getFiltered(filter.getMinRequiredGeneration()))
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
}
}
@@ -1467,6 +1490,31 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
}
}
+void LLFolderViewFolder::filterFolder(LLInventoryFilter& filter)
+{
+ const BOOL previous_passed_filter = mPassedFolderFilter;
+ const BOOL passed_filter = filter.checkFolder(this);
+
+ // If our visibility will change as a result of this filter, then
+ // we need to be rearranged in our parent folder
+ if (mParentFolder)
+ {
+ if (getVisible() != passed_filter
+ || previous_passed_filter != passed_filter )
+ {
+ mParentFolder->requestArrange();
+ }
+ }
+
+ setFilteredFolder(passed_filter, filter.getCurrentGeneration());
+ filter.decrementFilterCount();
+
+ if (getRoot()->getDebugFilters())
+ {
+ mStatusText = llformat("%d", mLastFilterGeneration);
+ }
+}
+
void LLFolderViewFolder::setFiltered(BOOL filtered, S32 filter_generation)
{
// if this folder is now filtered, but wasn't before
@@ -1488,6 +1536,23 @@ void LLFolderViewFolder::dirtyFilter()
LLFolderViewItem::dirtyFilter();
}
+BOOL LLFolderViewFolder::getFiltered()
+{
+ return getFilteredFolder(getRoot()->getFilter()->getMinRequiredGeneration())
+ && LLFolderViewItem::getFiltered();
+}
+
+BOOL LLFolderViewFolder::getFiltered(S32 filter_generation)
+{
+ return getFilteredFolder(filter_generation) && LLFolderViewItem::getFiltered(filter_generation);
+}
+
+BOOL LLFolderViewFolder::hasFilteredDescendants(S32 filter_generation)
+{
+ return mMostFilteredDescendantGeneration >= filter_generation;
+}
+
+
BOOL LLFolderViewFolder::hasFilteredDescendants()
{
return mMostFilteredDescendantGeneration >= getRoot()->getFilter()->getCurrentGeneration();
@@ -1743,7 +1808,7 @@ void LLFolderViewFolder::destroyView()
folderp->destroyView(); // removes entry from mFolders
}
- deleteAllChildren();
+ //deleteAllChildren();
if (mParentFolder)
{
@@ -1843,8 +1908,12 @@ void LLFolderViewFolder::sortBy(U32 order)
(*fit)->sortBy(order);
}
- mFolders.sort(mSortFunction);
- mItems.sort(mSortFunction);
+ // Don't sort the topmost folders (My Inventory and Library)
+ if (mListener->getUUID().notNull())
+ {
+ mFolders.sort(mSortFunction);
+ mItems.sort(mSortFunction);
+ }
if (order & LLInventoryFilter::SO_DATE)
{
@@ -1981,6 +2050,13 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
item->dirtyFilter();
requestArrange();
requestSort();
+ LLFolderViewFolder* parentp = getParentFolder();
+ while (parentp && parentp->mSortFunction.isByDate())
+ {
+ // parent folder doesn't have a time stamp yet, so get it from us
+ parentp->requestSort();
+ parentp = parentp->getParentFolder();
+ }
return TRUE;
}
@@ -2000,6 +2076,13 @@ BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
// rearrange all descendants too, as our indentation level might have changed
folder->requestArrange(TRUE);
requestSort();
+ LLFolderViewFolder* parentp = getParentFolder();
+ while (parentp && !parentp->mSortFunction.isByDate())
+ {
+ // parent folder doesn't have a time stamp yet, so get it from us
+ parentp->requestSort();
+ parentp = parentp->getParentFolder();
+ }
return TRUE;
}
@@ -2059,7 +2142,9 @@ void LLFolderViewFolder::setOpenArrangeRecursively(BOOL openitem, ERecurseType r
(*fit)->setOpenArrangeRecursively(openitem, RECURSE_DOWN); /* Flawfinder: ignore */
}
}
- if (mParentFolder && (recurse == RECURSE_UP || recurse == RECURSE_UP_DOWN))
+ if (mParentFolder
+ && (recurse == RECURSE_UP
+ || recurse == RECURSE_UP_DOWN))
{
mParentFolder->setOpenArrangeRecursively(openitem, RECURSE_UP);
}
@@ -2301,13 +2386,16 @@ void LLFolderViewFolder::draw()
bool possibly_has_children = false;
bool up_to_date = mListener && mListener->isUpToDate();
- if(!up_to_date && mListener && mListener->hasChildren()) // we know we have children but haven't fetched them (doesn't obey filter)
+ if(!up_to_date
+ && mListener->hasChildren()) // we know we have children but haven't fetched them (doesn't obey filter)
{
possibly_has_children = true;
}
- BOOL loading = ( mIsOpen && possibly_has_children && !up_to_date );
+ BOOL loading = (mIsOpen
+ && possibly_has_children
+ && !up_to_date );
if ( loading && !mIsLoading )
{
@@ -2330,6 +2418,41 @@ 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<time_t>(mCreationDate, mSubtreeCreationDate);
}
@@ -2573,7 +2696,8 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde
{
// ignore sort order for landmarks in the Favorites folder.
// they should be always sorted as in Favorites bar. See EXT-719
- if (a->getSortGroup() == SG_ITEM && b->getSortGroup() == SG_ITEM
+ if (a->getSortGroup() == SG_ITEM
+ && b->getSortGroup() == SG_ITEM
&& a->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK
&& b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index fc941510ab..dac0c3032c 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -66,6 +66,7 @@ public:
// Returns true if order has changed
bool updateSort(U32 order);
U32 getSort() { return mSortOrder; }
+ bool isByDate() { return mByDate; }
bool operator()(const LLFolderViewItem* const& a, const LLFolderViewItem* const& b);
private:
@@ -94,7 +95,7 @@ public:
Optional<LLUIImage*> icon_open; // used for folders
Optional<LLUIImage*> icon_overlay; // for links
Optional<LLFolderView*> root;
- Optional<LLFolderViewEventListener*> listener;
+ Mandatory<LLFolderViewEventListener*> listener;
Optional<LLUIImage*> folder_arrow_image;
Optional<S32> folder_indentation; // pixels
@@ -135,7 +136,7 @@ protected:
std::string mSearchableLabel;
S32 mLabelWidth;
bool mLabelWidthDirty;
- time_t mCreationDate;
+ mutable time_t mCreationDate;
LLFolderViewFolder* mParentFolder;
LLFolderViewEventListener* mListener;
BOOL mIsCurSelection;
@@ -157,7 +158,6 @@ protected:
BOOL mDragAndDropTarget;
BOOL mIsLoading;
LLTimer mTimeSinceRequestStart;
- bool mHidden;
bool mShowLoadStatus;
// helper function to change the selection from the root.
@@ -167,13 +167,17 @@ protected:
void extendSelectionFromRoot(LLFolderViewItem* selection);
// this is an internal method used for adding items to folders. A
- // no-op at this leve, but reimplemented in derived classes.
+ // no-op at this level, but reimplemented in derived classes.
virtual BOOL addItem(LLFolderViewItem*) { return FALSE; }
virtual BOOL addFolder(LLFolderViewFolder*) { return FALSE; }
static LLFontGL* getLabelFontForStyle(U8 style);
+ virtual void setCreationDate(time_t creation_date_utc) const { mCreationDate = creation_date_utc; }
+
public:
+ BOOL postBuild();
+
// This function clears the currently selected item, and records
// the specified selected item appropriately for display and use
// in the UI. If open is TRUE, then folders are opened up along
@@ -202,11 +206,6 @@ public:
virtual S32 arrange( S32* width, S32* height, S32 filter_generation );
virtual S32 getItemHeight();
- // Hide the folder from the UI, such as if you want to hide the root
- // folder in an inventory panel.
- void setHidden(bool hidden) { mHidden = hidden; }
- bool getHidden() const { return mHidden; }
-
// applies filters to control visibility of inventory items
virtual void filter( LLInventoryFilter& filter);
@@ -231,7 +230,7 @@ public:
void deselectItem();
// this method is used to select this element
- void selectItem();
+ virtual void selectItem();
// gets multiple-element selection
virtual std::set<LLUUID> getSelectionList() const;
@@ -329,6 +328,8 @@ public:
virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
+ virtual LLView* findChildView(const std::string& name, BOOL recurse) const { return NULL; }
+
// virtual void handleDropped();
virtual void draw();
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
@@ -366,6 +367,9 @@ public:
UNKNOWN, TRASH, NOT_TRASH
} ETrash;
+ typedef std::list<LLFolderViewItem*> items_t;
+ typedef std::list<LLFolderViewFolder*> folders_t;
+
private:
S32 mNumDescendantsSelected;
@@ -374,8 +378,6 @@ public: // Accessed needed by LLFolderViewItem
S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); }
protected:
- typedef std::list<LLFolderViewItem*> items_t;
- typedef std::list<LLFolderViewFolder*> folders_t;
items_t mItems;
folders_t mFolders;
LLInventorySort mSortFunction;
@@ -392,6 +394,8 @@ protected:
S32 mCompletedFilterGeneration;
S32 mMostFilteredDescendantGeneration;
bool mNeedsSort;
+ bool mPassedFolderFilter;
+
public:
typedef enum e_recurse_type
{
@@ -425,13 +429,21 @@ public:
virtual void setCompletedFilterGeneration(S32 generation, BOOL recurse_up);
virtual S32 getCompletedFilterGeneration() { return mCompletedFilterGeneration; }
- BOOL hasFilteredDescendants(S32 filter_generation) { return mMostFilteredDescendantGeneration >= filter_generation; }
+ BOOL hasFilteredDescendants(S32 filter_generation);
BOOL hasFilteredDescendants();
// applies filters to control visibility of inventory items
virtual void filter( LLInventoryFilter& filter);
virtual void setFiltered(BOOL filtered, S32 filter_generation);
+ virtual BOOL getFiltered();
+ virtual BOOL getFiltered(S32 filter_generation);
+
virtual void dirtyFilter();
+
+ // folder-specific filtering (filter status propagates top down instead of bottom up)
+ void filterFolder(LLInventoryFilter& filter);
+ void setFilteredFolder(bool filtered, S32 filter_generation);
+ bool getFilteredFolder(S32 filter_generation);
// Passes selection information on to children and record
// selection information if necessary.
@@ -537,6 +549,10 @@ public:
time_t getCreationDate() const;
bool isTrash() const;
S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; }
+
+ folders_t::const_iterator getFoldersBegin() const { return mFolders.begin(); }
+ folders_t::const_iterator getFoldersEnd() const { return mFolders.end(); }
+ folders_t::size_type getFoldersCount() const { return mFolders.size(); }
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 842911ecc0..fa3f546157 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -620,7 +620,7 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
F32 pos_y = pos.mV[VY];
LLGLSUIDefault gls_ui;
- LLGLDepthTest gls_depth(GL_TRUE);
+ LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
LLGLDisable cull(GL_CULL_FACE);
if (mCollisionBanned == BA_BANNED)
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index ce936a9924..efffd0f98e 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -857,7 +857,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
- llwarns << "Got group properties reply for another agent!" << llendl;
+ llwarns << "Got group members reply for another agent!" << llendl;
return;
}
@@ -867,10 +867,10 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
LLUUID request_id;
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
- LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
- if (group_datap->mMemberRequestID != request_id)
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mMemberRequestID != request_id))
{
- llwarns << "processGroupMembersReply: Received incorrect (stale?) request id" << llendl;
+ llwarns << "processGroupMembersReply: Received incorrect (stale?) group or request id" << llendl;
return;
}
@@ -1028,7 +1028,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
- llwarns << "Got group properties reply for another agent!" << llendl;
+ llwarns << "Got group role data reply for another agent!" << llendl;
return;
}
@@ -1038,14 +1038,14 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
LLUUID request_id;
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
- if (group_data->mRoleDataRequestID != request_id)
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mRoleDataRequestID != request_id))
{
- llwarns << "processGroupRoleDataReply: Received incorrect (stale?) request id" << llendl;
+ llwarns << "processGroupPropertiesReply: Received incorrect (stale?) group or request id" << llendl;
return;
}
- msg->getS32(_PREHASH_GroupData, "RoleCount", group_data->mRoleCount );
+ msg->getS32(_PREHASH_GroupData, "RoleCount", group_datap->mRoleCount );
std::string name;
std::string title;
@@ -1086,22 +1086,22 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
lldebugs << "Adding role data: " << name << " {" << role_id << "}" << llendl;
LLGroupRoleData* rd = new LLGroupRoleData(role_id,name,title,desc,powers,member_count);
- group_data->mRoles[role_id] = rd;
+ group_datap->mRoles[role_id] = rd;
}
- if (group_data->mRoles.size() == (U32)group_data->mRoleCount)
+ if (group_datap->mRoles.size() == (U32)group_datap->mRoleCount)
{
- group_data->mRoleDataComplete = TRUE;
- group_data->mRoleDataRequestID.setNull();
+ group_datap->mRoleDataComplete = TRUE;
+ group_datap->mRoleDataRequestID.setNull();
// We don't want to make role-member data requests until we have all the role data
- if (group_data->mPendingRoleMemberRequest)
+ if (group_datap->mPendingRoleMemberRequest)
{
- group_data->mPendingRoleMemberRequest = FALSE;
- LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_data->mID);
+ group_datap->mPendingRoleMemberRequest = FALSE;
+ LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_datap->mID);
}
}
- group_data->mChanged = TRUE;
+ group_datap->mChanged = TRUE;
LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_DATA);
}
@@ -1113,7 +1113,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
- llwarns << "Got group properties reply for another agent!" << llendl;
+ llwarns << "Got group role members reply for another agent!" << llendl;
return;
}
@@ -1126,11 +1126,10 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
U32 total_pairs;
msg->getU32(_PREHASH_AgentData, "TotalPairs", total_pairs);
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
-
- if (group_data->mRoleMembersRequestID != request_id)
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mRoleMembersRequestID != request_id))
{
- llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) role member request id" << llendl;
+ llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) group or request id" << llendl;
return;
}
@@ -1155,15 +1154,15 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
if (role_id.notNull() && member_id.notNull() )
{
rd = NULL;
- ri = group_data->mRoles.find(role_id);
- if (ri != group_data->mRoles.end())
+ ri = group_datap->mRoles.find(role_id);
+ if (ri != group_datap->mRoles.end())
{
rd = ri->second;
}
md = NULL;
- mi = group_data->mMembers.find(member_id);
- if (mi != group_data->mMembers.end())
+ mi = group_datap->mMembers.find(member_id);
+ if (mi != group_datap->mMembers.end())
{
md = mi->second;
}
@@ -1182,21 +1181,21 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
}
}
- group_data->mReceivedRoleMemberPairs += num_blocks;
+ group_datap->mReceivedRoleMemberPairs += num_blocks;
}
- if (group_data->mReceivedRoleMemberPairs == total_pairs)
+ if (group_datap->mReceivedRoleMemberPairs == total_pairs)
{
// Add role data for the 'everyone' role to all members
- LLGroupRoleData* everyone = group_data->mRoles[LLUUID::null];
+ LLGroupRoleData* everyone = group_datap->mRoles[LLUUID::null];
if (!everyone)
{
llwarns << "Everyone role not found!" << llendl;
}
else
{
- for (LLGroupMgrGroupData::member_list_t::iterator mi = group_data->mMembers.begin();
- mi != group_data->mMembers.end(); ++mi)
+ for (LLGroupMgrGroupData::member_list_t::iterator mi = group_datap->mMembers.begin();
+ mi != group_datap->mMembers.end(); ++mi)
{
LLGroupMemberData* data = mi->second;
if (data)
@@ -1206,11 +1205,11 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
}
}
- group_data->mRoleMemberDataComplete = TRUE;
- group_data->mRoleMembersRequestID.setNull();
+ group_datap->mRoleMemberDataComplete = TRUE;
+ group_datap->mRoleMembersRequestID.setNull();
}
- group_data->mChanged = TRUE;
+ group_datap->mChanged = TRUE;
LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_MEMBER_DATA);
}
@@ -1228,15 +1227,13 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
LLUUID group_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_GroupID, group_id );
-
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
-
LLUUID request_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_RequestID, request_id);
-
- if (group_data->mTitlesRequestID != request_id)
+
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mTitlesRequestID != request_id))
{
- llwarns << "processGroupTitlesReply: Received incorrect (stale?) title request id" << llendl;
+ llwarns << "processGroupTitlesReply: Received incorrect (stale?) group" << llendl;
return;
}
@@ -1253,11 +1250,11 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
if (!title.mTitle.empty())
{
lldebugs << "LLGroupMgr adding title: " << title.mTitle << ", " << title.mRoleID << ", " << (title.mSelected ? 'Y' : 'N') << llendl;
- group_data->mTitles.push_back(title);
+ group_datap->mTitles.push_back(title);
}
}
- group_data->mChanged = TRUE;
+ group_datap->mChanged = TRUE;
LLGroupMgr::getInstance()->notifyObservers(GC_TITLES);
}
diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 82e1f2dfb5..482294c8a6 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -477,7 +477,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
// Render label
{
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
segment_iter != mLabelSegments.end(); ++segment_iter )
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 86c8a1a9b5..f0fc710f3d 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -40,6 +40,7 @@
#include "llfloateropenobject.h"
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
+#include "llfolderview.h"
#include "llfriendcard.h"
#include "llgesturemgr.h"
#include "llgiveinventory.h"
@@ -571,8 +572,8 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
}
}
- // Don't allow items to be pasted directly into the COF.
- if (!isCOFFolder())
+ // Don't allow items to be pasted directly into the COF or the inbox
+ if (!isCOFFolder() && !isInboxFolder())
{
items.push_back(std::string("Paste"));
}
@@ -781,6 +782,18 @@ BOOL LLInvFVBridge::isCOFFolder() const
return LLAppearanceMgr::instance().getIsInCOF(mUUID);
}
+BOOL LLInvFVBridge::isInboxFolder() const
+{
+ const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false);
+
+ if (inbox_id.isNull())
+ {
+ return FALSE;
+ }
+
+ return gInventory.isObjectDescendentOf(mUUID, inbox_id);
+}
+
BOOL LLInvFVBridge::isItemPermissive() const
{
return FALSE;
@@ -1786,6 +1799,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
else
{
+ if (gInventory.isObjectDescendentOf(inv_cat->getUUID(), gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false)))
+ {
+ set_dad_inbox_object(inv_cat->getUUID());
+ }
// Reparent the folder and restamp children if it's moving
// into trash.
@@ -2466,8 +2483,6 @@ void LLFolderBridge::staticFolderOptionsMenu()
void LLFolderBridge::folderOptionsMenu()
{
- menuentry_vec_t disabled_items;
-
LLInventoryModel* model = getInventoryModel();
if(!model) return;
@@ -2497,6 +2512,11 @@ void LLFolderBridge::folderOptionsMenu()
}
}
+ if (!isItemRemovable())
+ {
+ mDisabledItems.push_back(std::string("Delete"));
+ }
+
#ifndef LL_RELEASE_FOR_DOWNLOAD
if (LLFolderType::lookupIsProtectedType(type))
{
@@ -2525,6 +2545,7 @@ void LLFolderBridge::folderOptionsMenu()
{
mItems.push_back(std::string("Add To Outfit"));
}
+
mItems.push_back(std::string("Replace Outfit"));
}
if (is_ensemble)
@@ -2534,18 +2555,18 @@ void LLFolderBridge::folderOptionsMenu()
mItems.push_back(std::string("Remove From Outfit"));
if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID))
{
- disabled_items.push_back(std::string("Remove From Outfit"));
+ mDisabledItems.push_back(std::string("Remove From Outfit"));
}
if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))
{
- disabled_items.push_back(std::string("Replace Outfit"));
+ mDisabledItems.push_back(std::string("Replace Outfit"));
}
mItems.push_back(std::string("Outfit Separator"));
}
LLMenuGL* menup = dynamic_cast<LLMenuGL*>(mMenu.get());
if (menup)
{
- hide_context_entries(*menup, mItems, disabled_items, TRUE);
+ hide_context_entries(*menup, mItems, mDisabledItems, TRUE);
// Reposition the menu, in case we're adding items to an existing menu.
menup->needsArrange();
@@ -2614,15 +2635,17 @@ 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))
{
- // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
- if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
- mItems.push_back(std::string("New Folder"));
- mItems.push_back(std::string("New Script"));
- mItems.push_back(std::string("New Note"));
- mItems.push_back(std::string("New Gesture"));
- mItems.push_back(std::string("New Clothes"));
- mItems.push_back(std::string("New Body Parts"));
-
+ if (!isInboxFolder()) // 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))
+ mItems.push_back(std::string("New Folder"));
+ mItems.push_back(std::string("New Script"));
+ mItems.push_back(std::string("New Note"));
+ mItems.push_back(std::string("New Gesture"));
+ mItems.push_back(std::string("New Clothes"));
+ mItems.push_back(std::string("New Body Parts"));
+ }
#if SUPPORT_ENSEMBLES
// Changing folder types is an unfinished unsupported feature
// and can lead to unexpected behavior if enabled.
@@ -3161,6 +3184,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// (move the item, restamp if into trash)
else
{
+ // set up observer to select item once drag and drop from inbox is complete
+ if (gInventory.isObjectDescendentOf(inv_item->getUUID(), gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false)))
+ {
+ set_dad_inbox_object(inv_item->getUUID());
+ }
+
LLInvFVBridge::changeItemParent(
model,
(LLViewerInventoryItem*)inv_item,
@@ -4896,31 +4925,22 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
// 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;
+ // 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);
- for (S32 index = gAgentWearables.getWearableCount(itype)-1; index >= 0 ; --index)
- {
- LLViewerInventoryItem *item = dynamic_cast<LLViewerInventoryItem*>(
- 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;
-
- // Find and remove this item from the COF.
- LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false);
- }
+ // Take them off by removing from COF.
+ for (LLInventoryModel::item_array_t::const_iterator it = clothing_items.begin(); it != clothing_items.end(); ++it)
+ {
+ LLAppearanceMgr::instance().removeItemFromAvatar((*it)->getUUID());
}
- gInventory.notifyObservers();
-
- // Remove wearables from gAgentWearables
- LLAgentWearables::userRemoveAllClothes();
}
// static
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 1e849c8812..15629c0c75 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -139,6 +139,7 @@ protected:
BOOL isAgentInventory() const; // false if lost or in the inventory library
BOOL isCOFFolder() const; // true if COF or descendent of
+ BOOL isInboxFolder() const; // true if COF or descendent of marketplace inbox
virtual BOOL isItemPermissive() const;
static void changeItemParent(LLInventoryModel* model,
LLViewerInventoryItem* item,
@@ -584,6 +585,9 @@ protected:
};
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Recent Inventory Panel related classes
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Overridden version of the Inventory-Folder-View-Bridge for Folders
class LLRecentItemsFolderBridge : public LLFolderBridge
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index dee15a1efd..d6278a5fda 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -107,6 +107,32 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
return passed;
}
+bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder)
+{
+ // we're showing all folders, overriding filter
+ if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
+ {
+ return true;
+ }
+
+ const LLFolderViewEventListener* listener = folder->getListener();
+ const LLUUID folder_id = listener->getUUID();
+
+ if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
+ {
+ // Can only filter categories for items in your inventory
+ // (e.g. versus in-world object contents).
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id);
+ if (!cat)
+ return false;
+ LLFolderType::EType cat_type = cat->getPreferredType();
+ if (cat_type != LLFolderType::FT_NONE && (1LL << cat_type & mFilterOps.mFilterCategoryTypes) == U64(0))
+ return false;
+ }
+
+ return true;
+}
+
BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) const
{
const LLFolderViewEventListener* listener = item->getListener();
@@ -137,30 +163,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
}
}
-
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_CATEGORY
- // Pass if this item is a category of the filter type, or
- // if its parent is a category of the filter type.
- if (filterTypes & FILTERTYPE_CATEGORY)
- {
- // Can only filter categories for items in your inventory
- // (e.g. versus in-world object contents).
- if (!object) return FALSE;
-
- LLUUID cat_id = object_id;
- if (listener->getInventoryType() != LLInventoryType::IT_CATEGORY)
- {
- cat_id = object->getParentUUID();
- }
- const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
- if (!cat)
- return FALSE;
- if ((1LL << cat->getPreferredType() & mFilterOps.mFilterCategoryTypes) == U64(0))
- return FALSE;
- }
-
-
////////////////////////////////////////////////////////////////////////////////
// FILTERTYPE_UUID
// Pass if this item is the target UUID or if it links to the target UUID
@@ -172,7 +174,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
return FALSE;
}
-
////////////////////////////////////////////////////////////////////////////////
// FILTERTYPE_DATE
// Pass if this item is within the date range.
@@ -293,15 +294,15 @@ BOOL LLInventoryFilter::isModifiedAndClear()
return ret;
}
-void LLInventoryFilter::setFilterObjectTypes(U64 types)
+void LLInventoryFilter::updateFilterTypes(U64 types, U64& current_types)
{
- if (mFilterOps.mFilterObjectTypes != types)
+ if (current_types != types)
{
// keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterObjectTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterObjectTypes & types);
+ bool fewer_bits_set = (current_types & ~types) != 0;
+ bool more_bits_set = (~current_types & types) != 0;
- mFilterOps.mFilterObjectTypes = types;
+ current_types = types;
if (more_bits_set && fewer_bits_set)
{
// neither less or more restrive, both simultaneously
@@ -318,62 +319,23 @@ void LLInventoryFilter::setFilterObjectTypes(U64 types)
setModified(FILTER_MORE_RESTRICTIVE);
}
}
+}
+
+void LLInventoryFilter::setFilterObjectTypes(U64 types)
+{
+ updateFilterTypes(types, mFilterOps.mFilterObjectTypes);
mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
}
void LLInventoryFilter::setFilterCategoryTypes(U64 types)
{
- if (mFilterOps.mFilterCategoryTypes != types)
- {
- // keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterCategoryTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterCategoryTypes & types);
-
- mFilterOps.mFilterCategoryTypes = types;
- if (more_bits_set && fewer_bits_set)
- {
- // neither less or more restrive, both simultaneously
- // so we need to filter from scratch
- setModified(FILTER_RESTART);
- }
- else if (more_bits_set)
- {
- // target is only one of all requested types so more type bits == less restrictive
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else if (fewer_bits_set)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- }
- mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
+ updateFilterTypes(types, mFilterOps.mFilterCategoryTypes);
+ mFilterOps.mFilterTypes |= FILTERTYPE_CATEGORY;
}
void LLInventoryFilter::setFilterWearableTypes(U64 types)
{
- if (mFilterOps.mFilterWearableTypes != types)
- {
- // keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterWearableTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterWearableTypes & types);
-
- mFilterOps.mFilterWearableTypes = types;
- if (more_bits_set && fewer_bits_set)
- {
- // neither less or more restrive, both simultaneously
- // so we need to filter from scratch
- setModified(FILTER_RESTART);
- }
- else if (more_bits_set)
- {
- // target is only one of all requested types so more type bits == less restrictive
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else if (fewer_bits_set)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- }
+ updateFilterTypes(types, mFilterOps.mFilterWearableTypes);
mFilterOps.mFilterTypes |= FILTERTYPE_WEARABLE;
}
@@ -898,11 +860,16 @@ void LLInventoryFilter::fromLLSD(LLSD& data)
}
}
-U32 LLInventoryFilter::getFilterObjectTypes() const
+U64 LLInventoryFilter::getFilterObjectTypes() const
{
return mFilterOps.mFilterObjectTypes;
}
+U64 LLInventoryFilter::getFilterCategoryTypes() const
+{
+ return mFilterOps.mFilterCategoryTypes;
+}
+
BOOL LLInventoryFilter::hasFilterString() const
{
return mFilterSubString.size() > 0;
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index 39e6f797a2..f9460822f7 100644
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -31,6 +31,7 @@
#include "llpermissionsflags.h"
class LLFolderViewItem;
+class LLFolderViewFolder;
class LLInventoryFilter
{
@@ -81,11 +82,13 @@ public:
// + Parameters
// +-------------------------------------------------------------------+
void setFilterObjectTypes(U64 types);
- U32 getFilterObjectTypes() const;
+ U64 getFilterObjectTypes() const;
+ U64 getFilterCategoryTypes() const;
BOOL isFilterObjectTypesWith(LLInventoryType::EType t) const;
void setFilterCategoryTypes(U64 types);
void setFilterUUID(const LLUUID &object_id);
void setFilterWearableTypes(U64 types);
+ void updateFilterTypes(U64 types, U64& current_types);
void setFilterSubString(const std::string& string);
const std::string& getFilterSubString(BOOL trim = FALSE) const;
@@ -110,6 +113,7 @@ public:
// + Execution And Results
// +-------------------------------------------------------------------+
BOOL check(const LLFolderViewItem* item);
+ bool checkFolder(const LLFolderViewFolder* folder);
BOOL checkAgainstFilterType(const LLFolderViewItem* item) const;
BOOL checkAgainstPermissions(const LLFolderViewItem* item) const;
BOOL checkAgainstFilterLinks(const LLFolderViewItem* item) const;
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index cfe1747fd4..2016b92666 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -28,9 +28,9 @@
#ifndef LL_LLINVENTORYFUNCTIONS_H
#define LL_LLINVENTORYFUNCTIONS_H
-#include "llinventorytype.h"
-#include "llfolderview.h"
-#include "llfolderviewitem.h"
+#include "llinventorymodel.h"
+#include "llinventory.h"
+#include "llwearabletype.h"
/********************************************************************************
** **
@@ -417,6 +417,24 @@ public:
/** Inventory Collector Functions
** **
*******************************************************************************/
+class LLFolderViewItem;
+class LLFolderViewFolder;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLFolderViewFunctor
+//
+// Simple abstract base class for applying a functor to folders and
+// items in a folder view hierarchy. This is suboptimal for algorithms
+// that only work folders or only work on items, but I'll worry about
+// that later when it's determined to be too slow.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLFolderViewFunctor
+{
+public:
+ virtual ~LLFolderViewFunctor() {}
+ virtual void doFolder(LLFolderViewFolder* folder) = 0;
+ virtual void doItem(LLFolderViewItem* item) = 0;
+};
class LLInventoryState
{
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 318beafe65..e86c427ae2 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -2168,6 +2168,9 @@ void LLInventoryModel::registerCallbacks(LLMessageSystem* msg)
msg->setHandlerFuncFast(_PREHASH_RemoveInventoryFolder,
processRemoveInventoryFolder,
NULL);
+ msg->setHandlerFuncFast(_PREHASH_RemoveInventoryObjects,
+ processRemoveInventoryObjects,
+ NULL);
//msg->setHandlerFuncFast(_PREHASH_ExchangeCallingCard,
// processExchangeCallingcard,
// NULL);
@@ -2284,26 +2287,21 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
}
// static
-void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
+void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg, const char* msg_label)
{
- lldebugs << "LLInventoryModel::processRemoveInventoryItem()" << llendl;
- LLUUID agent_id, item_id;
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- if(agent_id != gAgent.getID())
- {
- llwarns << "Got a RemoveInventoryItem for the wrong agent."
- << llendl;
- return;
- }
- S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
+ LLUUID item_id;
+ S32 count = msg->getNumberOfBlocksFast(msg_label);
+ lldebugs << "Message has " << count << " item blocks" << llendl;
uuid_vec_t item_ids;
update_map_t update;
for(S32 i = 0; i < count; ++i)
{
- msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id, i);
+ msg->getUUIDFast(msg_label, _PREHASH_ItemID, item_id, i);
+ lldebugs << "Checking for item-to-be-removed " << item_id << llendl;
LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
if(itemp)
{
+ lldebugs << "Item will be removed " << item_id << llendl;
// we only bother with the delete and account if we found
// the item - this is usually a back-up for permissions,
// so frequently the item will already be gone.
@@ -2314,8 +2312,24 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
gInventory.accountForUpdate(update);
for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it)
{
+ lldebugs << "Calling deleteObject " << *it << llendl;
gInventory.deleteObject(*it);
}
+}
+
+// static
+void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
+{
+ lldebugs << "LLInventoryModel::processRemoveInventoryItem()" << llendl;
+ LLUUID agent_id, item_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+ if(agent_id != gAgent.getID())
+ {
+ llwarns << "Got a RemoveInventoryItem for the wrong agent."
+ << llendl;
+ return;
+ }
+ LLInventoryModel::removeInventoryItem(agent_id, msg, _PREHASH_InventoryData);
gInventory.notifyObservers();
}
@@ -2380,18 +2394,10 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
}
// static
-void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
- void**)
+void LLInventoryModel::removeInventoryFolder(LLUUID agent_id,
+ LLMessageSystem* msg)
{
- lldebugs << "LLInventoryModel::processRemoveInventoryFolder()" << llendl;
- LLUUID agent_id, folder_id;
- msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_AgentID, agent_id);
- if(agent_id != gAgent.getID())
- {
- llwarns << "Got a RemoveInventoryFolder for the wrong agent."
- << llendl;
- return;
- }
+ LLUUID folder_id;
uuid_vec_t folder_ids;
update_map_t update;
S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
@@ -2410,6 +2416,42 @@ void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
{
gInventory.deleteObject(*it);
}
+}
+
+// static
+void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
+ void**)
+{
+ lldebugs << "LLInventoryModel::processRemoveInventoryFolder()" << llendl;
+ LLUUID agent_id, session_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
+ if(agent_id != gAgent.getID())
+ {
+ llwarns << "Got a RemoveInventoryFolder for the wrong agent."
+ << llendl;
+ return;
+ }
+ LLInventoryModel::removeInventoryFolder( agent_id, msg );
+ gInventory.notifyObservers();
+}
+
+// static
+void LLInventoryModel::processRemoveInventoryObjects(LLMessageSystem* msg,
+ void**)
+{
+ lldebugs << "LLInventoryModel::processRemoveInventoryObjects()" << llendl;
+ LLUUID agent_id, session_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
+ if(agent_id != gAgent.getID())
+ {
+ llwarns << "Got a RemoveInventoryObjects for the wrong agent."
+ << llendl;
+ return;
+ }
+ LLInventoryModel::removeInventoryFolder( agent_id, msg );
+ LLInventoryModel::removeInventoryItem( agent_id, msg, _PREHASH_ItemData );
gInventory.notifyObservers();
}
@@ -2589,7 +2631,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
LLInventoryState::sWearNewClothing = FALSE;
}
- if (tid == LLInventoryState::sWearNewClothingTransactionID)
+ if (tid.notNull() && tid == LLInventoryState::sWearNewClothingTransactionID)
{
count = wearable_ids.size();
for (i = 0; i < count; ++i)
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 15da09990f..e0e81f1006 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -492,9 +492,12 @@ protected:
//--------------------------------------------------------------------
public:
static void processUpdateCreateInventoryItem(LLMessageSystem* msg, void**);
+ static void removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg, const char* msg_label);
static void processRemoveInventoryItem(LLMessageSystem* msg, void**);
static void processUpdateInventoryFolder(LLMessageSystem* msg, void**);
+ static void removeInventoryFolder(LLUUID agent_id, LLMessageSystem* msg);
static void processRemoveInventoryFolder(LLMessageSystem* msg, void**);
+ static void processRemoveInventoryObjects(LLMessageSystem* msg, void**);
static void processSaveAssetIntoInventory(LLMessageSystem* msg, void**);
static void processBulkUpdateInventory(LLMessageSystem* msg, void**);
static void processInventoryDescendents(LLMessageSystem* msg, void**);
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
index 7b1ff102e7..91fdd67806 100644
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -31,7 +31,9 @@
#include "llappviewer.h"
#include "llcallbacklist.h"
#include "llinventorypanel.h"
+#include "llinventorymodel.h"
#include "llviewercontrol.h"
+#include "llviewerinventory.h"
#include "llviewermessage.h"
#include "llviewerregion.h"
#include "llviewerwindow.h"
@@ -103,7 +105,7 @@ BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive() const
void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id, BOOL recursive)
{
- if (!mAllFoldersFetched)
+ if (!mAllFoldersFetched || cat_id.notNull())
{
LL_DEBUGS("InventoryFetch") << "Start fetching category: " << cat_id << ", recursive: " << recursive << LL_ENDL;
@@ -209,7 +211,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// Double timeouts on failure.
mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f);
mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f);
- llinfos << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
+ lldebugs << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
// fetch is no longer considered "timely" although we will wait for full time-out.
mTimelyFetchPending = FALSE;
}
@@ -278,7 +280,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// Shrink timeouts based on success.
mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f);
mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f);
- //llinfos << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
+ lldebugs << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
}
mTimelyFetchPending = FALSE;
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 6bf19e346d..ceba4a0191 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -601,6 +601,34 @@ void LLInventoryAddedObserver::changed(U32 mask)
}
}
+void LLInventoryCategoryAddedObserver::changed(U32 mask)
+{
+ if (!(mask & LLInventoryObserver::ADD))
+ {
+ return;
+ }
+
+ const LLInventoryModel::changed_items_t& changed_ids = gInventory.getChangedIDs();
+
+ for (LLInventoryModel::changed_items_t::const_iterator cit = changed_ids.begin(); cit != changed_ids.end(); ++cit)
+ {
+ LLViewerInventoryCategory* cat = gInventory.getCategory(*cit);
+
+ if (cat)
+ {
+ mAddedCategories.push_back(cat);
+ }
+ }
+
+ if (!mAddedCategories.empty())
+ {
+ done();
+
+ mAddedCategories.clear();
+ }
+}
+
+
LLInventoryTransactionObserver::LLInventoryTransactionObserver(const LLTransactionID& transaction_id) :
mTransactionID(transaction_id)
{
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 2d9021961e..aa1eae84d7 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -219,6 +219,28 @@ protected:
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInventoryCategoryAddedObserver
+//
+// Base class for doing something when a new category is created in the
+// inventory.
+// It does not watch for a certain UUID, rather it acts when anything is added
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLInventoryCategoryAddedObserver : public LLInventoryObserver
+{
+public:
+
+ typedef std::vector<LLViewerInventoryCategory*> cat_vec_t;
+
+ LLInventoryCategoryAddedObserver() : mAddedCategories() {}
+ /*virtual*/ void changed(U32 mask);
+
+protected:
+ virtual void done() = 0;
+
+ cat_vec_t mAddedCategories;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryTransactionObserver
//
// Base class for doing something when an inventory transaction completes.
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 1dcb91ad4d..1aa402802e 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -35,6 +35,7 @@
#include "llavataractions.h"
#include "llfloaterinventory.h"
#include "llfloaterreg.h"
+#include "llfolderview.h"
#include "llimfloater.h"
#include "llimview.h"
#include "llinventorybridge.h"
@@ -42,7 +43,6 @@
#include "llinventorymodelbackgroundfetch.h"
#include "llsidepanelinventory.h"
#include "llsidetray.h"
-#include "llscrollcontainer.h"
#include "llviewerattachmenu.h"
#include "llviewerfoldertype.h"
#include "llvoavatarself.h"
@@ -131,9 +131,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
mInventory(p.inventory),
mAllowMultiSelect(p.allow_multi_select),
mShowItemLinkOverlays(p.show_item_link_overlays),
+ mShowLoadStatus(p.show_load_status),
mViewsInitialized(false),
- mStartFolderString(p.start_folder),
- mBuildDefaultHierarchy(true),
mInvFVBridgeBuilder(NULL)
{
mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
@@ -146,11 +145,88 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
mCommitCallbackRegistrar.add("Inventory.Share", boost::bind(&LLAvatarActions::shareWithAvatars));
+
+}
+
+void LLInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
+{
+ // Determine the root folder in case specified, and
+ // build the views starting with that folder.
+
+ std::string start_folder_name(params.start_folder());
+
+ const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(start_folder_name);
+
+ LLUUID root_id;
+
+ if ("LIBRARY" == params.start_folder())
+ {
+ 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)
+ ? gInventory.findCategoryUUIDForType(preferred_type, false, false)
+ : LLUUID::null;
+ }
- if (mStartFolderString != "")
+ if ((root_id == LLUUID::null) && !start_folder_name.empty())
{
- mBuildDefaultHierarchy = false;
+ llwarns << "No category found that matches start_folder: " << start_folder_name << 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());
}
void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
@@ -159,22 +235,7 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
- // Create root folder
- {
- LLRect folder_rect(0,
- 0,
- getRect().getWidth(),
- 0);
- LLFolderView::Params p;
- p.name = getName();
- p.title = getLabel();
- p.rect = folder_rect;
- p.parent_panel = this;
- p.tool_tip = p.name;
- p.use_label_suffix = params.use_label_suffix;
- mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p);
- mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);
- }
+ buildFolderView(params);
mCommitCallbackRegistrar.popScope();
@@ -184,13 +245,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
{
LLRect scroller_view_rect = getRect();
scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
- LLScrollContainer::Params p;
- p.name("Inventory Scroller");
- p.rect(scroller_view_rect);
- p.follows.flags(FOLLOWS_ALL);
- p.reserve_scroll_corner(true);
- p.tab_stop(true);
- mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+ LLScrollContainer::Params scroller_params(params.scroll());
+ scroller_params.rect(scroller_view_rect);
+ mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroller_params);
addChild(mScroller);
mScroller->addChild(mFolderRoot);
mFolderRoot->setScrollContainer(mScroller);
@@ -206,7 +263,7 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
// Build view of inventory if we need default full hierarchy and inventory ready,
// otherwise wait for idle callback.
- if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mViewsInitialized)
+ if (mInventory->isInventoryUsable() && !mViewsInitialized)
{
initializeViews();
}
@@ -222,6 +279,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
}
mFolderRoot->setSortOrder(getFilter()->getSortOrder());
+ // hide inbox
+ getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX));
+
// Initialize base class params.
LLPanel::initFromParams(params);
}
@@ -264,6 +324,15 @@ LLInventoryFilter* LLInventoryPanel::getFilter()
return NULL;
}
+const LLInventoryFilter* LLInventoryPanel::getFilter() const
+{
+ if (mFolderRoot)
+ {
+ return mFolderRoot->getFilter();
+ }
+ return NULL;
+}
+
void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType filter_type)
{
if (filter_type == LLInventoryFilter::FILTERTYPE_OBJECT)
@@ -272,6 +341,17 @@ void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType
getFilter()->setFilterCategoryTypes(types);
}
+U32 LLInventoryPanel::getFilterObjectTypes() const
+{
+ return mFolderRoot->getFilterObjectTypes();
+}
+
+U32 LLInventoryPanel::getFilterPermMask() const
+{
+ return mFolderRoot->getFilterPermissions();
+}
+
+
void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
{
getFilter()->setFilterPermissions(filter_perm_mask);
@@ -287,6 +367,12 @@ void LLInventoryPanel::setFilterSubString(const std::string& string)
getFilter()->setFilterSubString(string);
}
+const std::string LLInventoryPanel::getFilterSubString()
+{
+ return mFolderRoot->getFilterSubString();
+}
+
+
void LLInventoryPanel::setSortOrder(U32 order)
{
getFilter()->setSortOrder(order);
@@ -298,6 +384,12 @@ void LLInventoryPanel::setSortOrder(U32 order)
}
}
+U32 LLInventoryPanel::getSortOrder() const
+{
+ return mFolderRoot->getSortOrder();
+}
+
+
void LLInventoryPanel::setSinceLogoff(BOOL sl)
{
getFilter()->setDateRangeLastLogoff(sl);
@@ -379,7 +471,8 @@ void LLInventoryPanel::modelChanged(U32 mask)
{
view_item->destroyView();
}
- buildNewViews(item_id);
+ view_item = buildNewViews(item_id);
+ view_folder = dynamic_cast<LLFolderViewFolder *>(view_item);
}
//////////////////////////////
@@ -432,11 +525,10 @@ void LLInventoryPanel::modelChanged(U32 mask)
//////////////////////////////
// STRUCTURE Operation
// This item already exists in both memory and UI. It was probably reparented.
- if (model_item && view_item)
+ else if (model_item && view_item)
{
- // Don't process the item if it's hanging from the root, since its
- // model_item's parent will be NULL.
- if (view_item->getRoot() != view_item->getParent())
+ // Don't process the item if it is the root
+ if (view_item->getRoot() != view_item)
{
LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolderRoot->getItemByID(model_item->getParentUUID());
// Item has been moved.
@@ -461,7 +553,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
//////////////////////////////
// REMOVE Operation
// This item has been removed from memory, but its associated UI element still exists.
- if (!model_item && view_item)
+ else if (!model_item && view_item)
{
// Remove the item's UI.
view_item->destroyView();
@@ -470,6 +562,12 @@ void LLInventoryPanel::modelChanged(U32 mask)
}
}
+LLFolderView* LLInventoryPanel::getRootFolder()
+{
+ return mFolderRoot;
+}
+
+
// static
void LLInventoryPanel::onIdle(void *userdata)
{
@@ -488,23 +586,16 @@ void LLInventoryPanel::onIdle(void *userdata)
}
}
+const LLUUID& LLInventoryPanel::getRootFolderID() const
+{
+ return mFolderRoot->getListener()->getUUID();
+}
+
void LLInventoryPanel::initializeViews()
{
if (!gInventory.isInventoryUsable()) return;
- // Determine the root folder in case specified, and
- // build the views starting with that folder.
- const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
-
- if ("LIBRARY" == mStartFolderString)
- {
- mStartFolderID = gInventory.getLibraryRootFolderID();
- }
- else
- {
- mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
- }
- rebuildViewsFor(mStartFolderID);
+ rebuildViewsFor(getRootFolderID());
mViewsInitialized = true;
@@ -529,132 +620,155 @@ void LLInventoryPanel::initializeViews()
}
}
-void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
+LLFolderViewItem* LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
{
// Destroy the old view for this ID so we can rebuild it.
LLFolderViewItem* old_view = mFolderRoot->getItemByID(id);
- if (old_view && id.notNull())
+ if (old_view)
{
old_view->destroyView();
}
- buildNewViews(id);
+ return buildNewViews(id);
}
-void LLInventoryPanel::buildNewViews(const LLUUID& id)
+LLFolderView * LLInventoryPanel::createFolderView(LLInvFVBridge * bridge, bool useLabelSuffix)
{
- LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
- LLFolderViewItem* itemp = NULL;
- LLInventoryObject* objectp = gInventory.getObject(id);
- if (objectp)
+ LLRect folder_rect(0,
+ 0,
+ getRect().getWidth(),
+ 0);
+
+ LLFolderView::Params p;
+
+ p.name = getName();
+ p.title = getLabel();
+ p.rect = folder_rect;
+ p.parent_panel = this;
+ p.tool_tip = p.name;
+ p.listener = bridge;
+ p.use_label_suffix = useLabelSuffix;
+ p.allow_multiselect = mAllowMultiSelect;
+ p.show_load_status = mShowLoadStatus;
+
+ return LLUICtrlFactory::create<LLFolderView>(p);
+}
+
+LLFolderViewFolder * LLInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge)
+{
+ LLFolderViewFolder::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
{
- const LLUUID &parent_id = objectp->getParentUUID();
- LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id);
- if (id == mStartFolderID)
- {
- parent_folder = mFolderRoot;
- }
- else if ((mStartFolderID != LLUUID::null) && (!gInventory.isObjectDescendentOf(id, mStartFolderID)))
- {
- // This item exists outside the inventory's hierarchy, so don't add it.
- return;
- }
-
- if (objectp->getType() <= LLAssetType::AT_NONE ||
- objectp->getType() >= LLAssetType::AT_COUNT)
- {
- llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : "
- << ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID()
- << llendl;
- return;
- }
-
- if ((objectp->getType() == LLAssetType::AT_CATEGORY) &&
- (objectp->getActualType() != LLAssetType::AT_LINK_FOLDER))
- {
- LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
- objectp->getType(),
- LLInventoryType::IT_CATEGORY,
- this,
- mFolderRoot,
- objectp->getUUID());
- if (new_listener)
- {
- LLFolderViewFolder::Params params;
- params.name = new_listener->getDisplayName();
- params.icon = new_listener->getIcon();
- params.icon_open = new_listener->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 = new_listener;
- params.tool_tip = params.name;
- LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(params);
- folderp->setItemSortOrder(mFolderRoot->getSortOrder());
- itemp = folderp;
-
- // Hide the root folder, so we can show the contents of a folder flat
- // but still have the parent folder present for listener-related operations.
- if (id == mStartFolderID)
- {
- folderp->setHidden(TRUE);
- }
- const LLViewerInventoryCategory *cat = dynamic_cast<LLViewerInventoryCategory *>(objectp);
- if (cat && getIsHiddenFolderType(cat->getPreferredType()))
- {
- folderp->setHidden(TRUE);
- }
- }
- }
- else
- {
- // Build new view for item.
- LLInventoryItem* item = (LLInventoryItem*)objectp;
- LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
- item->getActualType(),
- item->getInventoryType(),
- this,
- mFolderRoot,
- item->getUUID(),
- item->getFlags());
-
- if (new_listener)
- {
- LLFolderViewItem::Params params;
- params.name = new_listener->getDisplayName();
- params.icon = new_listener->getIcon();
- params.icon_open = new_listener->getOpenIcon();
- if (mShowItemLinkOverlays) // if false, then links show up just like normal items
- {
- params.icon_overlay = LLUI::getUIImage("Inv_Link");
- }
- params.creation_date = new_listener->getCreationDate();
- params.root = mFolderRoot;
- params.listener = new_listener;
- params.rect = LLRect (0, 0, 0, 0);
- params.tool_tip = params.name;
- itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
- }
- }
+ params.icon_overlay = LLUI::getUIImage("Inv_Link");
+ }
+
+ params.root = mFolderRoot;
+ params.listener = bridge;
+ params.tool_tip = params.name;
- if (itemp)
- {
- itemp->addToFolder(parent_folder, mFolderRoot);
+ return LLUICtrlFactory::create<LLFolderViewFolder>(params);
+}
- // Don't add children of hidden folders unless this is the panel's root folder.
- if (itemp->getHidden() && (id != mStartFolderID))
- {
- return;
- }
+LLFolderViewItem * LLInventoryPanel::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<LLFolderViewItem>(params);
+}
+
+LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id)
+{
+ LLInventoryObject const* objectp = gInventory.getObject(id);
+ LLUUID root_id = mFolderRoot->getListener()->getUUID();
+ LLFolderViewFolder* parent_folder = NULL;
+ LLFolderViewItem* itemp = NULL;
+
+ if (id == root_id)
+ {
+ parent_folder = mFolderRoot;
+ }
+ else if (objectp)
+ {
+ const LLUUID &parent_id = objectp->getParentUUID();
+ parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id);
+
+ if (parent_folder)
+ {
+ if (objectp->getType() <= LLAssetType::AT_NONE ||
+ objectp->getType() >= LLAssetType::AT_COUNT)
+ {
+ llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : "
+ << ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID()
+ << llendl;
+ return NULL;
+ }
+
+ if ((objectp->getType() == LLAssetType::AT_CATEGORY) &&
+ (objectp->getActualType() != LLAssetType::AT_LINK_FOLDER))
+ {
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
+ objectp->getType(),
+ LLInventoryType::IT_CATEGORY,
+ this,
+ mFolderRoot,
+ objectp->getUUID());
+ if (new_listener)
+ {
+ LLFolderViewFolder* folderp = createFolderViewFolder(new_listener);
+ folderp->setItemSortOrder(mFolderRoot->getSortOrder());
+ itemp = folderp;
+ }
+ }
+ else
+ {
+ // Build new view for item.
+ LLInventoryItem* item = (LLInventoryItem*)objectp;
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
+ item->getActualType(),
+ item->getInventoryType(),
+ this,
+ mFolderRoot,
+ item->getUUID(),
+ item->getFlags());
+
+ if (new_listener)
+ {
+ itemp = createFolderViewItem(new_listener);
+ }
+ }
+
+ if (itemp)
+ {
+ itemp->addToFolder(parent_folder, mFolderRoot);
+ }
}
}
// If this is a folder, add the children of the folder and recursively add any
// child folders.
- if ((id == mStartFolderID) ||
- (objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
+ if (id.isNull()
+ || (objectp
+ && objectp->getType() == LLAssetType::AT_CATEGORY))
{
LLViewerInventoryCategory::cat_array_t* categories;
LLViewerInventoryItem::item_array_t* items;
@@ -671,7 +785,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
}
}
- if(items)
+ if(items && parent_folder)
{
for (LLViewerInventoryItem::item_array_t::const_iterator item_iter = items->begin();
item_iter != items->end();
@@ -683,28 +797,23 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
}
mInventory->unlockDirectDescendentArrays(id);
}
+
+ return itemp;
}
// bit of a hack to make sure the inventory is open.
void LLInventoryPanel::openStartFolderOrMyInventory()
{
- if (mStartFolderString != "")
- {
- mFolderRoot->openFolder(mStartFolderString);
- }
- else
+ // Find My Inventory folder and open it up by name
+ for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child))
{
- // Find My Inventory folder and open it up by name
- for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child))
+ LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
+ if (fchild
+ && fchild->getListener()
+ && fchild->getListener()->getUUID() == gInventory.getRootFolderID())
{
- LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
- if (fchild && fchild->getListener() &&
- (fchild->getListener()->getUUID() == gInventory.getRootFolderID()))
- {
- const std::string& child_name = child->getName();
- mFolderRoot->openFolder(child_name);
- break;
- }
+ fchild->setOpen(TRUE);
+ break;
}
}
}
@@ -723,6 +832,12 @@ void LLInventoryPanel::openSelected()
bridge->openItem();
}
+void LLInventoryPanel::unSelectAll()
+{
+ mFolderRoot->setSelection(NULL, FALSE, FALSE);
+}
+
+
BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
{
BOOL handled = LLView::handleHover(x, y, mask);
@@ -785,6 +900,18 @@ void LLInventoryPanel::onFocusReceived()
LLPanel::onFocusReceived();
}
+bool LLInventoryPanel::addBadge(LLBadge * badge)
+{
+ bool badge_added = false;
+
+ if (acceptsBadge())
+ {
+ badge_added = badge->addToView(mFolderRoot);
+ }
+
+ return badge_added;
+}
+
void LLInventoryPanel::openAllFolders()
{
mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
@@ -802,7 +929,7 @@ void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_foc
mFolderRoot->setSelectionByID(obj_id, take_keyboard_focus);
}
-void LLInventoryPanel::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
+void LLInventoryPanel::setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb)
{
if (mFolderRoot)
{
@@ -1067,15 +1194,12 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)
void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type)
{
- if (!getIsHiddenFolderType(folder_type))
- {
- mHiddenFolderTypes.push_back(folder_type);
- }
+ getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << folder_type));
}
BOOL LLInventoryPanel::getIsHiddenFolderType(LLFolderType::EType folder_type) const
{
- return (std::find(mHiddenFolderTypes.begin(), mHiddenFolderTypes.end(), folder_type) != mHiddenFolderTypes.end());
+ return !(getFilter()->getFilterCategoryTypes() & (1ULL << folder_type));
}
@@ -1092,6 +1216,13 @@ public:
struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
{};
+ void initFromParams(const Params& p)
+ {
+ LLInventoryPanel::initFromParams(p);
+ // turn on inbox for recent items
+ getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() | (1ULL << LLFolderType::FT_INBOX));
+ }
+
protected:
LLInventoryRecentItemsPanel (const Params&);
friend class LLUICtrlFactory;
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 9da9f7d8ba..7676bbb6d7 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -33,11 +33,13 @@
#include "llfloater.h"
#include "llinventory.h"
#include "llinventoryfilter.h"
-#include "llfolderview.h"
#include "llinventorymodel.h"
+#include "llscrollcontainer.h"
#include "lluictrlfactory.h"
#include <set>
+class LLFolderView;
+class LLFolderViewFolder;
class LLFolderViewItem;
class LLInventoryFilter;
class LLInventoryModel;
@@ -46,7 +48,6 @@ class LLInventoryFVBridgeBuilder;
class LLMenuBarGL;
class LLCheckBoxCtrl;
class LLSpinCtrl;
-class LLScrollContainer;
class LLTextBox;
class LLIconCtrl;
class LLSaveFolderState;
@@ -83,6 +84,8 @@ public:
Optional<Filter> filter;
Optional<std::string> start_folder;
Optional<bool> use_label_suffix;
+ Optional<bool> show_load_status;
+ Optional<LLScrollContainer::Params> scroll;
Params()
: sort_order_setting("sort_order_setting"),
@@ -91,7 +94,9 @@ public:
show_item_link_overlays("show_item_link_overlays", false),
filter("filter"),
start_folder("start_folder"),
- use_label_suffix("use_label_suffix", true)
+ use_label_suffix("use_label_suffix", true),
+ show_load_status("show_load_status"),
+ scroll("scroll")
{}
};
@@ -120,19 +125,23 @@ public:
/*virtual*/ void onFocusLost();
/*virtual*/ void onFocusReceived();
+ // LLBadgeHolder methods
+ bool addBadge(LLBadge * badge);
+
// Call this method to set the selection.
void openAllFolders();
void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
- void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
+ void setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb);
void clearSelection();
LLInventoryFilter* getFilter();
+ const LLInventoryFilter* getFilter() const;
void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
- U32 getFilterObjectTypes() const { return mFolderRoot->getFilterObjectTypes(); }
+ U32 getFilterObjectTypes() const;
void setFilterPermMask(PermissionMask filter_perm_mask);
- U32 getFilterPermMask() const { return mFolderRoot->getFilterPermissions(); }
+ U32 getFilterPermMask() const;
void setFilterWearableTypes(U64 filter);
void setFilterSubString(const std::string& string);
- const std::string getFilterSubString() { return mFolderRoot->getFilterSubString(); }
+ const std::string getFilterSubString();
void setSinceLogoff(BOOL sl);
void setHoursAgo(U32 hours);
BOOL getSinceLogoff();
@@ -140,10 +149,9 @@ public:
void setShowFolderState(LLInventoryFilter::EFolderShow show);
LLInventoryFilter::EFolderShow getShowFolderState();
- void setAllowMultiSelect(BOOL allow) { mFolderRoot->setAllowMultiSelect(allow); }
// This method is called when something has changed about the inventory.
void modelChanged(U32 mask);
- LLFolderView* getRootFolder() { return mFolderRoot; }
+ LLFolderView* getRootFolder();
LLScrollContainer* getScrollableContainer() { return mScroller; }
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
@@ -158,7 +166,7 @@ public:
static void dumpSelectionInformation(void* user_data);
void openSelected();
- void unSelectAll() { mFolderRoot->setSelection(NULL, FALSE, FALSE); }
+ void unSelectAll();
static void onIdle(void* user_data);
@@ -175,6 +183,7 @@ protected:
LLInvPanelComplObserver* mCompletionObserver;
BOOL mAllowMultiSelect;
BOOL mShowItemLinkOverlays; // Shows link graphic over inventory item icons
+ BOOL mShowLoadStatus;
LLFolderView* mFolderRoot;
LLScrollContainer* mScroller;
@@ -198,7 +207,7 @@ public:
static const std::string INHERIT_SORT_ORDER;
void setSortOrder(U32 order);
- U32 getSortOrder() const { return mFolderRoot->getSortOrder(); }
+ U32 getSortOrder() const;
private:
std::string mSortOrderSetting;
@@ -207,29 +216,27 @@ private:
//--------------------------------------------------------------------
public:
void addHideFolderType(LLFolderType::EType folder_type);
-protected:
- BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const;
-private:
- std::vector<LLFolderType::EType> mHiddenFolderTypes;
- //--------------------------------------------------------------------
- // Initialization routines for building up the UI ("views")
- //--------------------------------------------------------------------
public:
BOOL getIsViewsInitialized() const { return mViewsInitialized; }
- const LLUUID& getStartFolderID() const { return mStartFolderID; }
- const std::string& getStartFolderString() { return mStartFolderString; }
+ const LLUUID& getRootFolderID() const;
protected:
// Builds the UI. Call this once the inventory is usable.
void initializeViews();
- void rebuildViewsFor(const LLUUID& id); // Given the id and the parent, build all of the folder views.
- virtual void buildNewViews(const LLUUID& id);
+ LLFolderViewItem* rebuildViewsFor(const LLUUID& id); // Given the id and the parent, build all of the folder views.
+
+ virtual void buildFolderView(const LLInventoryPanel::Params& params);
+ LLFolderViewItem* buildNewViews(const LLUUID& id);
+ BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const;
+
+ virtual LLFolderView* createFolderView(LLInvFVBridge * bridge, bool useLabelSuffix);
+ virtual LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge);
+ virtual LLFolderViewItem* createFolderViewItem(LLInvFVBridge * bridge);
private:
BOOL mBuildDefaultHierarchy; // default inventory hierarchy should be created in postBuild()
BOOL mViewsInitialized; // Views have been generated
// UUID of category from which hierarchy should be built. Set with the
// "start_folder" xml property. Default is LLUUID::null that means total Inventory hierarchy.
- std::string mStartFolderString;
LLUUID mStartFolderID;
};
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 5c65dcec34..1c8f6b6c98 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -190,6 +190,7 @@ LLLocationInputCtrl::Params::Params()
scripts_icon("scripts_icon"),
damage_icon("damage_icon"),
damage_text("damage_text"),
+ see_avatars_icon("see_avatars_icon"),
maturity_help_topic("maturity_help_topic")
{
}
@@ -342,6 +343,13 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
addChild(mDamageText);
+ LLIconCtrl::Params see_avatars_icon = p.see_avatars_icon;
+ see_avatars_icon.tool_tip = LLTrans::getString("LocationCtrlSeeAVsTooltip");
+ see_avatars_icon.mouse_opaque = true;
+ mParcelIcon[SEE_AVATARS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(see_avatars_icon);
+ mParcelIcon[SEE_AVATARS_ICON]->setMouseDownCallback(boost::bind(&LLLocationInputCtrl::onParcelIconClick, this, SEE_AVATARS_ICON));
+ addChild(mParcelIcon[SEE_AVATARS_ICON]);
+
// Register callbacks and load the location field context menu (NB: the order matters).
LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Navbar.EnableMenuItem", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemEnabled, this, _2));
@@ -810,6 +818,7 @@ void LLLocationInputCtrl::refreshParcelIcons()
bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel);
bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel);
+ bool see_avs = current_parcel->getSeeAVs();
// Most icons are "block this ability"
mParcelIcon[VOICE_ICON]->setVisible( !allow_voice );
@@ -819,6 +828,7 @@ void LLLocationInputCtrl::refreshParcelIcons()
mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage );
mDamageText->setVisible(allow_damage);
+ mParcelIcon[SEE_AVATARS_ICON]->setVisible( !see_avs );
// Padding goes to left of both landmark star and for sale btn
x -= mAddLandmarkHPad;
@@ -1175,6 +1185,9 @@ void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon)
case DAMAGE_ICON:
LLNotificationsUtil::add("NotSafe");
break;
+ case SEE_AVATARS_ICON:
+ LLNotificationsUtil::add("SeeAvatars");
+ break;
case ICON_COUNT:
break;
// no default to get compiler warning when a new icon gets added
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index 6368bf5cf2..ed47ba73e3 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -77,7 +77,8 @@ public:
push_icon,
build_icon,
scripts_icon,
- damage_icon;
+ damage_icon,
+ see_avatars_icon;
Optional<LLTextBox::Params> damage_text;
Params();
};
@@ -109,12 +110,13 @@ private:
enum EParcelIcon
{
VOICE_ICON = 0,
- FLY_ICON,
- PUSH_ICON,
- BUILD_ICON,
- SCRIPTS_ICON,
- DAMAGE_ICON,
- ICON_COUNT
+ FLY_ICON, // 1
+ PUSH_ICON, // 2
+ BUILD_ICON, // 3
+ SCRIPTS_ICON, // 4
+ DAMAGE_ICON, // 5
+ SEE_AVATARS_ICON, // 6
+ ICON_COUNT // 7 total
};
friend class LLUICtrlFactory;
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 48be251611..9b4f146332 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -30,13 +30,13 @@
// viewer includes
#include "llsecapi.h"
-#include "lllogininstance.h" // to check if logged in yet
-#include "llpanellogin.h" // save_password_to_disk()
+#include "lllogininstance.h" // to check if logged in yet
+#include "llpanellogin.h"
#include "llstartup.h" // getStartupState()
#include "llslurl.h"
#include "llviewercontrol.h" // gSavedSettings
#include "llviewernetwork.h" // EGridInfo
-#include "llviewerwindow.h" // getWindow()
+#include "llviewerwindow.h" // getWindow()
// library includes
#include "llmd5.h"
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<LLCredential> user_credentia
else
{
requested_options.append("basic-mode");
+ //requested_options.append("inventory-basic");
}
#endif
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
index 5c020e6d98..d73048a28b 100644
--- a/indra/newview/llmainlooprepeater.cpp
+++ b/indra/newview/llmainlooprepeater.cpp
@@ -46,7 +46,7 @@ void LLMainLoopRepeater::start(void)
{
if(mQueue != 0) return;
- mQueue = new LLThreadSafeQueue<LLSD>(gAPRPoolp, 1024);
+ mQueue = new LLThreadSafeQueue<LLSD>(1024);
mMainLoopConnection = LLEventPumps::instance().
obtain("mainloop").listen(LLEventPump::inventName(), boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
mRepeaterConnection = LLEventPumps::instance().
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index b3ad9efeb2..5bbef78dd4 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -38,6 +38,7 @@
#include "llviewermedia.h"
#include "llviewertexture.h"
#include "llviewerwindow.h"
+#include "lldebugmessagebox.h"
#include "llweb.h"
#include "llrender.h"
#include "llpluginclassmedia.h"
@@ -318,6 +319,11 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
if (mContextMenu)
{
+ // hide/show debugging options
+ bool media_plugin_debugging_enabled = gSavedSettings.getBOOL("MediaPluginDebugging");
+ mContextMenu->setItemVisible("open_webinspector", media_plugin_debugging_enabled );
+ mContextMenu->setItemVisible("debug_separator", media_plugin_debugging_enabled );
+
mContextMenu->show(x, y);
LLMenuGL::showPopup(this, mContextMenu, x, y);
}
@@ -384,12 +390,22 @@ void LLMediaCtrl::onFocusLost()
//
BOOL LLMediaCtrl::postBuild ()
{
+ LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registar;
+ registar.add("Open.WebInspector", boost::bind(&LLMediaCtrl::onOpenWebInspector, this));
+
mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
"menu_media_ctrl.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
+
return TRUE;
}
+void LLMediaCtrl::onOpenWebInspector()
+{
+ if (mMediaSource && mMediaSource->hasMedia())
+ mMediaSource->getMediaPlugin()->showWebInspector( true );
+}
+
////////////////////////////////////////////////////////////////////////////////
//
BOOL LLMediaCtrl::handleKeyHere( KEY key, MASK mask )
@@ -708,6 +724,8 @@ LLPluginClassMedia* LLMediaCtrl::getMediaPlugin()
//
void LLMediaCtrl::draw()
{
+ F32 alpha = getDrawContext().mAlpha;
+
if ( gRestoreGL == 1 )
{
LLRect r = getRect();
@@ -746,21 +764,11 @@ void LLMediaCtrl::draw()
}
}
-// if(mHidingInitialLoad)
-// {
-// // If we're hiding loading, don't draw at all.
-// draw_media = false;
-// }
-
bool background_visible = isBackgroundVisible();
bool background_opaque = isBackgroundOpaque();
if(draw_media)
{
- // alpha off for this
- LLGLSUIDefault gls_ui;
- LLGLDisable gls_alphaTest( GL_ALPHA_TEST );
-
gGL.pushUIMatrix();
{
if (mIgnoreUIScale)
@@ -775,7 +783,8 @@ void LLMediaCtrl::draw()
// scale texture to fit the space using texture coords
gGL.getTexUnit(0)->bind(media_texture);
- gGL.color4fv( LLColor4::white.mV );
+ LLColor4 media_color = LLColor4::white % alpha;
+ gGL.color4fv( media_color.mV );
F32 max_u = ( F32 )media_plugin->getWidth() / ( F32 )media_plugin->getTextureWidth();
F32 max_v = ( F32 )media_plugin->getHeight() / ( F32 )media_plugin->getTextureHeight();
@@ -827,7 +836,6 @@ void LLMediaCtrl::draw()
}
// draw the browser
- gGL.setSceneBlendType(LLRender::BT_REPLACE);
gGL.begin( LLRender::QUADS );
if (! media_plugin->getTextureCoordsOpenGL())
{
@@ -860,7 +868,6 @@ void LLMediaCtrl::draw()
gGL.vertex2i( x_offset + width, y_offset );
}
gGL.end();
- gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
gGL.popUIMatrix();
@@ -1073,6 +1080,12 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
mHoverTextChanged = true;
};
break;
+
+ case MEDIA_EVENT_DEBUG_MESSAGE:
+ {
+ LL_INFOS("media") << self->getDebugMessageText() << LL_ENDL;
+ };
+ break;
};
// chain all events to any potential observers of this object.
@@ -1172,3 +1185,12 @@ void LLMediaCtrl::hideNotification()
mWindowShade->hide();
}
}
+
+void LLMediaCtrl::setTrustedContent(bool trusted)
+{
+ mTrusted = trusted;
+ if (mMediaSource)
+ {
+ mMediaSource->setTrustedBrowser(trusted);
+ }
+}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 28666e620f..3c0436e27a 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -149,6 +149,8 @@ public:
void showNotification(boost::shared_ptr<class LLNotification> notify);
void hideNotification();
+ void setTrustedContent(bool trusted);
+
// over-rides
virtual BOOL handleKeyHere( KEY key, MASK mask);
virtual void handleVisibilityChange ( BOOL new_visibility );
@@ -164,6 +166,11 @@ public:
// Incoming media event dispatcher
virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+ // right click debugging item
+ void onOpenWebInspector();
+
+ LLUUID getTextureID() {return mMediaTextureID;}
+
protected:
void convertInputCoords(S32& x, S32& y);
@@ -176,7 +183,7 @@ public:
LLViewBorder* mBorder;
bool mFrequentUpdates;
bool mForceUpdate;
- const bool mTrusted;
+ bool mTrusted;
std::string mHomePageUrl;
std::string mHomePageMimeType;
std::string mCurrentNavUrl;
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 6e0722bcf9..fc594841e3 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -34,9 +34,9 @@
#include "llagent.h"
#include "llappviewer.h"
#include "llbufferstream.h"
+#include "llcallbacklist.h"
#include "llcurl.h"
#include "lldatapacker.h"
-#include "llfasttimer.h"
#include "llfloatermodelpreview.h"
#include "llfloaterperms.h"
#include "lleconomy.h"
@@ -49,6 +49,7 @@
#include "llthread.h"
#include "llvfile.h"
#include "llviewercontrol.h"
+#include "llviewerinventory.h"
#include "llviewermenufile.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
@@ -62,6 +63,7 @@
#include "llinventorymodel.h"
#include "llfoldertype.h"
#include "llviewerparcelmgr.h"
+#include "lluploadfloaterobservers.h"
#include "boost/lexical_cast.hpp"
@@ -71,13 +73,18 @@
#include <queue>
-LLFastTimer::DeclareTimer FTM_MESH_UPDATE("Mesh Update");
-LLFastTimer::DeclareTimer FTM_LOAD_MESH("Load Mesh");
-
LLMeshRepository gMeshRepo;
const U32 MAX_MESH_REQUESTS_PER_SECOND = 100;
+// Maximum mesh version to support. Three least significant digits are reserved for the minor version,
+// with major version changes indicating a format change that is not backwards compatible and should not
+// be parsed by viewers that don't specifically support that version. For example, if the integer "1" is
+// present, the version is 0.001. A viewer that can parse version 0.001 can also parse versions up to 0.999,
+// but not 1.0 (integer 1000).
+// See wiki at https://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format
+const S32 MAX_MESH_VERSION = 999;
+
U32 LLMeshRepository::sBytesReceived = 0;
U32 LLMeshRepository::sHTTPRequestCount = 0;
U32 LLMeshRepository::sHTTPRetryCount = 0;
@@ -190,196 +197,6 @@ S32 LLMeshRepoThread::sActiveHeaderRequests = 0;
S32 LLMeshRepoThread::sActiveLODRequests = 0;
U32 LLMeshRepoThread::sMaxConcurrentRequests = 1;
-
-class LLTextureCostResponder : public LLCurl::Responder
-{
-public:
- LLTextureUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLTextureCostResponder(LLTextureUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
-
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingConfirmations--;
- if (isGoodStatus(status))
- {
- mThread->priceResult(mData, content);
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
-
- if (mData.mRetries < MAX_TEXTURE_UPLOAD_RETRIES)
- {
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
-
- if (status == 499 || status == 500)
- {
- mThread->uploadTexture(mData);
- }
- else
- {
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- else
- {
- llwarns << "Giving up after " << mData.mRetries << " retries." << llendl;
- }
- }
- }
-};
-
-class LLTextureUploadResponder : public LLCurl::Responder
-{
-public:
- LLTextureUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLTextureUploadResponder(LLTextureUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingUploads--;
- if (isGoodStatus(status))
- {
- mData.mUUID = content["new_asset"].asUUID();
- gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mData.mPostData, content));
- mThread->onTextureUploaded(mData);
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
-
- if (status == 404)
- {
- mThread->uploadTexture(mData);
- }
- else if (status == 499)
- {
- mThread->mConfirmedTextureQ.push(mData);
- }
- else
- {
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- }
-};
-
-class LLMeshCostResponder : public LLCurl::Responder
-{
-public:
- LLMeshUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLMeshCostResponder(LLMeshUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
-
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingConfirmations--;
-
- if (isGoodStatus(status))
- {
- mThread->priceResult(mData, content);
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
-
- if (status == HTTP_INTERNAL_ERROR)
- {
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
- mThread->uploadModel(mData);
- }
- else if (status == HTTP_BAD_REQUEST)
- {
- llwarns << "Status 400 received from server, giving up." << llendl;
- }
- else if (status == HTTP_NOT_FOUND)
- {
- llwarns <<"Status 404 received, server is disconnected, giving up." << llendl ;
- }
- else
- {
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- }
-};
-
-class LLMeshUploadResponder : public LLCurl::Responder
-{
-public:
- LLMeshUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLMeshUploadResponder(LLMeshUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingUploads--;
- if (isGoodStatus(status))
- {
- mData.mUUID = content["new_asset"].asUUID();
- if (mData.mUUID.isNull())
- {
- LLSD args;
- std::string message = content["error"]["message"];
- std::string identifier = content["error"]["identifier"];
- std::string invalidity_identifier = content["error"]["invalidity_identifier"];
-
- args["MESSAGE"] = message;
- args["IDENTIFIER"] = identifier;
- args["INVALIDITY_IDENTIFIER"] = invalidity_identifier;
- args["LABEL"] = mData.mBaseModel->mLabel;
-
- gMeshRepo.uploadError(args);
- }
- else
- {
- gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mData.mPostData, content));
- mThread->onModelUploaded(mData);
- }
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
-
- if (status == 404)
- {
- mThread->uploadModel(mData);
- }
- else if (status == 499)
- {
- mThread->mConfirmedQ.push(mData);
- }
- else if (status != 500)
- { //drop internal server errors on the floor, otherwise grab
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- }
-};
-
-
class LLMeshHeaderResponder : public LLCurl::Responder
{
public:
@@ -518,38 +335,16 @@ void log_upload_error(S32 status, const LLSD& content, std::string stage, std::s
}
}
-class LLModelObjectUploadResponder: public LLCurl::Responder
-{
- LLSD mObjectAsset;
- LLMeshUploadThread* mThread;
-
-public:
- LLModelObjectUploadResponder(LLMeshUploadThread* thread, const LLSD& object_asset):
- mThread(thread),
- mObjectAsset(object_asset)
- {
- }
-
- virtual void completedRaw(U32 status, const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer)
- {
- assert_main_thread();
-
- llinfos << "completed" << llendl;
- mThread->mPendingUploads--;
- mThread->mFinished = true;
- }
-};
-
class LLWholeModelFeeResponder: public LLCurl::Responder
{
LLMeshUploadThread* mThread;
LLSD mModelData;
+ LLHandle<LLWholeModelFeeObserver> mObserverHandle;
public:
- LLWholeModelFeeResponder(LLMeshUploadThread* thread, LLSD& model_data):
+ LLWholeModelFeeResponder(LLMeshUploadThread* thread, LLSD& model_data, LLHandle<LLWholeModelFeeObserver> observer_handle):
mThread(thread),
- mModelData(model_data)
+ mModelData(model_data),
+ mObserverHandle(observer_handle)
{
}
virtual void completed(U32 status,
@@ -562,20 +357,32 @@ public:
cc = llsd_from_file("fake_upload_error.xml");
}
- llinfos << "completed" << llendl;
mThread->mPendingUploads--;
dump_llsd_to_file(cc,make_dump_name("whole_model_fee_response_",dump_num));
+
+ LLWholeModelFeeObserver* observer = mObserverHandle.get();
+
if (isGoodStatus(status) &&
cc["state"].asString() == "upload")
{
- llinfos << "fee request succeeded" << llendl;
- mThread->mWholeModelUploadURL = cc["uploader"].asString();
+ mThread->mWholeModelUploadURL = cc["uploader"].asString();
+
+ if (observer)
+ {
+ cc["data"]["upload_price"] = cc["upload_price"];
+ observer->onModelPhysicsFeeReceived(cc["data"], mThread->mWholeModelUploadURL);
+ }
}
else
{
llwarns << "fee request failed" << llendl;
log_upload_error(status,cc,"fee",mModelData["name"]);
mThread->mWholeModelUploadURL = "";
+
+ if (observer)
+ {
+ observer->setModelPhysicsFeeErrorStatus(status, reason);
+ }
}
}
@@ -585,11 +392,13 @@ class LLWholeModelUploadResponder: public LLCurl::Responder
{
LLMeshUploadThread* mThread;
LLSD mModelData;
+ LLHandle<LLWholeModelUploadObserver> mObserverHandle;
public:
- LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data):
+ LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data, LLHandle<LLWholeModelUploadObserver> observer_handle):
mThread(thread),
- mModelData(model_data)
+ mModelData(model_data),
+ mObserverHandle(observer_handle)
{
}
virtual void completed(U32 status,
@@ -605,32 +414,43 @@ public:
//assert_main_thread();
mThread->mPendingUploads--;
dump_llsd_to_file(cc,make_dump_name("whole_model_upload_response_",dump_num));
- llinfos << "LLWholeModelUploadResponder content: " << cc << llendl;
+
+ LLWholeModelUploadObserver* observer = mObserverHandle.get();
+
// requested "mesh" asset type isn't actually the type
// of the resultant object, fix it up here.
if (isGoodStatus(status) &&
cc["state"].asString() == "complete")
{
- llinfos << "upload succeeded" << llendl;
mModelData["asset_type"] = "object";
gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mModelData,cc));
+
+ if (observer)
+ {
+ doOnIdleOneTime(boost::bind(&LLWholeModelUploadObserver::onModelUploadSuccess, observer));
+ }
}
else
{
llwarns << "upload failed" << llendl;
std::string model_name = mModelData["name"].asString();
log_upload_error(status,cc,"upload",model_name);
+
+ if (observer)
+ {
+ doOnIdleOneTime(boost::bind(&LLWholeModelUploadObserver::onModelUploadFailure, observer));
+ }
}
}
};
LLMeshRepoThread::LLMeshRepoThread()
-: LLThread("mesh repo", NULL)
+: LLThread("mesh repo")
{
mWaiting = false;
- mMutex = new LLMutex(NULL);
- mHeaderMutex = new LLMutex(NULL);
- mSignal = new LLCondition(NULL);
+ mMutex = new LLMutex();
+ mHeaderMutex = new LLMutex();
+ mSignal = new LLCondition();
}
LLMeshRepoThread::~LLMeshRepoThread()
@@ -840,15 +660,16 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
}
U32 header_size = mMeshHeaderSize[mesh_id];
-
+
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id]["skin"]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id]["skin"]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh skin info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
@@ -859,7 +680,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -915,12 +736,13 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id]["physics_convex"]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id]["physics_convex"]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh skin info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
@@ -931,7 +753,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -987,12 +809,13 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id]["physics_mesh"]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id]["physics_mesh"]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh physics shape info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
@@ -1003,7 +826,7 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -1060,9 +883,9 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
S32 size = file.getSize();
if (size > 0)
- {
- U8 buffer[1024];
- S32 bytes = llmin(size, 1024);
+ { //NOTE -- if the header size is ever more than 4KB, this will break
+ U8 buffer[4096];
+ S32 bytes = llmin(size, 4096);
LLMeshRepository::sCacheBytesRead += bytes;
file.read(buffer, bytes);
if (headerReceived(mesh_params, buffer, bytes))
@@ -1084,6 +907,7 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
retval = true;
//grab first 4KB if we're going to bother with a fetch. Cache will prevent future fetches if a full mesh fits
//within the first 4KB
+ //NOTE -- this will break of headers ever exceed 4KB
LLMeshRepository::sHTTPRequestCount++;
mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params));
}
@@ -1103,10 +927,12 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id][header_lod[lod]]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id][header_lod[lod]]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh asset
@@ -1118,7 +944,7 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -1204,14 +1030,11 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
}
{
- U32 cost = gMeshRepo.calcResourceCost(header);
-
LLUUID mesh_id = mesh_params.getSculptID();
mHeaderMutex->lock();
mMeshHeaderSize[mesh_id] = header_size;
mMeshHeader[mesh_id] = header;
- mMeshResourceCost[mesh_id] = cost;
mHeaderMutex->unlock();
//check for pending requests
@@ -1363,19 +1186,22 @@ bool LLMeshRepoThread::physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32
}
LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints)
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload,
+ LLHandle<LLWholeModelFeeObserver> fee_observer, LLHandle<LLWholeModelUploadObserver> upload_observer)
: LLThread("mesh upload"),
- mDiscarded(FALSE)
+ mDiscarded(FALSE),
+ mDoUpload(do_upload),
+ mWholeModelUploadURL(upload_url),
+ mFeeObserverHandle(fee_observer),
+ mUploadObserverHandle(upload_observer)
{
mInstanceList = data;
mUploadTextures = upload_textures;
mUploadSkin = upload_skin;
mUploadJoints = upload_joints;
- mMutex = new LLMutex(NULL);
+ mMutex = new LLMutex();
mCurlRequest = NULL;
- mPendingConfirmations = 0;
mPendingUploads = 0;
- mPendingCost = 0;
mFinished = false;
mOrigin = gAgent.getPositionAgent();
mHost = gAgent.getRegionHost();
@@ -1383,6 +1209,8 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");
mOrigin += gAgent.getAtAxis() * scale.magVec();
+
+ mMeshUploadTimeOut = gSavedSettings.getS32("MeshUploadTimeOut") ;
}
LLMeshUploadThread::~LLMeshUploadThread()
@@ -1441,7 +1269,14 @@ BOOL LLMeshUploadThread::isDiscarded()
void LLMeshUploadThread::run()
{
- doWholeModelUpload();
+ if (mDoUpload)
+ {
+ doWholeModelUpload();
+ }
+ else
+ {
+ requestWholeModelFee();
+ }
}
void dump_llsd_to_file(const LLSD& content, std::string filename)
@@ -1467,10 +1302,13 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
LLSD res;
result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
+ result["texture_folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE);
result["asset_type"] = "mesh";
result["inventory_type"] = "object";
- result["name"] = "mesh model";
- result["description"] = "your description here";
+ result["description"] = "(No Description)";
+ result["next_owner_mask"] = LLSD::Integer(LLFloaterPerms::getNextOwnerPerms());
+ result["group_mask"] = LLSD::Integer(LLFloaterPerms::getGroupPerms());
+ result["everyone_mask"] = LLSD::Integer(LLFloaterPerms::getEveryonePerms());
res["mesh_list"] = LLSD::emptyArray();
res["texture_list"] = LLSD::emptyArray();
@@ -1482,6 +1320,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
std::map<LLViewerTexture*,S32> texture_index;
std::map<LLModel*,S32> mesh_index;
+ std::string model_name;
S32 instance_num = 0;
@@ -1498,10 +1337,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
if (mesh_index.find(data.mBaseModel) == mesh_index.end())
{
// Have not seen this model before - create a new mesh_list entry for it.
- std::string model_name = data.mBaseModel->getName();
- if (!model_name.empty())
+ if (model_name.empty())
{
- result["name"] = model_name;
+ model_name = data.mBaseModel->getName();
}
std::stringstream ostr;
@@ -1556,24 +1394,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
instance_entry["scale"] = ll_sd_from_vector3(scale);
instance_entry["material"] = LL_MCODE_WOOD;
- LLPermissions perm;
- perm.setOwnerAndGroup(gAgent.getID(), gAgent.getID(), LLUUID::null, false);
- perm.setCreator(gAgent.getID());
-
- perm.initMasks(PERM_ITEM_UNRESTRICTED | PERM_MOVE, //base
- PERM_ITEM_UNRESTRICTED | PERM_MOVE, //owner
- LLFloaterPerms::getEveryonePerms(),
- LLFloaterPerms::getGroupPerms(),
- LLFloaterPerms::getNextOwnerPerms());
- instance_entry["permissions"] = ll_create_sd_from_permissions(perm);
instance_entry["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL);
instance_entry["mesh"] = mesh_index[data.mBaseModel];
instance_entry["face_list"] = LLSD::emptyArray();
- for (S32 face_num = 0; face_num < data.mBaseModel->getNumVolumeFaces(); face_num++)
+ S32 end = llmin((S32)data.mBaseModel->mMaterialList.size(), data.mBaseModel->getNumVolumeFaces()) ;
+ for (S32 face_num = 0; face_num < end; face_num++)
{
- LLImportMaterial& material = instance.mMaterial[face_num];
+ LLImportMaterial& material = instance.mMaterial[data.mBaseModel->mMaterialList[face_num]];
LLSD face_entry = LLSD::emptyMap();
LLViewerFetchedTexture *texture = material.mDiffuseMap.get();
@@ -1624,75 +1453,66 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
}
}
+ if (model_name.empty()) model_name = "mesh model";
+ result["name"] = model_name;
result["asset_resources"] = res;
dump_llsd_to_file(result,make_dump_name("whole_model_",dump_num));
dest = result;
}
-void LLMeshUploadThread::doWholeModelUpload()
+void LLMeshUploadThread::generateHulls()
{
- dump_num++;
-
- mCurlRequest = new LLCurlRequest();
-
- // Queue up models for hull generation (viewer-side)
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++)
{
- data.mModel[i] = instance.mLOD[i];
- }
+ LLMeshUploadData data;
+ data.mBaseModel = iter->first;
- //queue up models for hull generation
- LLModel* physics = NULL;
+ LLModelInstance& instance = *(iter->second.begin());
- if (data.mModel[LLModel::LOD_PHYSICS].notNull())
- {
- physics = data.mModel[LLModel::LOD_PHYSICS];
- }
- else if (data.mModel[LLModel::LOD_MEDIUM].notNull())
- {
- physics = data.mModel[LLModel::LOD_MEDIUM];
- }
- else
- {
- physics = data.mModel[LLModel::LOD_HIGH];
- }
+ for (S32 i = 0; i < 5; i++)
+ {
+ data.mModel[i] = instance.mLOD[i];
+ }
- llassert(physics != NULL);
-
- DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this);
- if(request->isValid())
- {
- gMeshRepo.mDecompThread->submitRequest(request);
- }
- }
+ //queue up models for hull generation
+ LLModel* physics = NULL;
- while (!mPhysicsComplete)
- {
- apr_sleep(100);
- }
+ 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];
+ }
- LLSD model_data;
- wholeModelToLLSD(model_data,false);
- dump_llsd_to_file(model_data,make_dump_name("whole_model_fee_request_",dump_num));
+ llassert(physics != NULL);
- mPendingUploads++;
- LLCurlRequest::headers_t headers;
- mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
- new LLWholeModelFeeResponder(this,model_data));
+ DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this);
+ if(request->isValid())
+ {
+ gMeshRepo.mDecompThread->submitRequest(request);
+ }
+ }
- do
- {
- mCurlRequest->process();
- } while (mCurlRequest->getQueued() > 0);
+ while (!mPhysicsComplete)
+ {
+ apr_sleep(100);
+ }
+}
+void LLMeshUploadThread::doWholeModelUpload()
+{
+ mCurlRequest = new LLCurlRequest();
if (mWholeModelUploadURL.empty())
{
@@ -1700,15 +1520,20 @@ void LLMeshUploadThread::doWholeModelUpload()
}
else
{
+ generateHulls();
+
LLSD full_model_data;
wholeModelToLLSD(full_model_data, true);
LLSD body = full_model_data["asset_resources"];
dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num));
+ LLCurlRequest::headers_t headers;
mCurlRequest->post(mWholeModelUploadURL, headers, body,
- new LLWholeModelUploadResponder(this, model_data));
+ new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle), mMeshUploadTimeOut);
do
{
mCurlRequest->process();
+ //sleep for 10ms to prevent eating a whole core
+ apr_sleep(10000);
} while (mCurlRequest->getQueued() > 0);
}
@@ -1719,22 +1544,36 @@ void LLMeshUploadThread::doWholeModelUpload()
mFinished = true;
}
-void LLMeshUploadThread::uploadModel(LLMeshUploadData& data)
-{ //called from arbitrary thread
- {
- LLMutexLock lock(mMutex);
- mUploadQ.push(data);
- }
-}
+void LLMeshUploadThread::requestWholeModelFee()
+{
+ dump_num++;
-void LLMeshUploadThread::uploadTexture(LLTextureUploadData& data)
-{ //called from mesh upload thread
- mTextureQ.push(data);
-}
+ mCurlRequest = new LLCurlRequest();
+
+ generateHulls();
+
+ LLSD model_data;
+ wholeModelToLLSD(model_data,false);
+ dump_llsd_to_file(model_data,make_dump_name("whole_model_fee_request_",dump_num));
+ mPendingUploads++;
+ LLCurlRequest::headers_t headers;
+ mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
+ new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle), mMeshUploadTimeOut);
-static LLFastTimer::DeclareTimer FTM_NOTIFY_MESH_LOADED("Notify Loaded");
-static LLFastTimer::DeclareTimer FTM_NOTIFY_MESH_UNAVAILABLE("Notify Unavailable");
+ do
+ {
+ mCurlRequest->process();
+ //sleep for 10ms to prevent eating a whole core
+ apr_sleep(10000);
+ } while (mCurlRequest->getQueued() > 0);
+
+ delete mCurlRequest;
+ mCurlRequest = NULL;
+
+ // Currently a no-op.
+ mFinished = true;
+}
void LLMeshRepoThread::notifyLoadedMeshes()
{
@@ -1799,7 +1638,9 @@ S32 LLMeshRepository::getActualMeshLOD(LLSD& header, S32 lod)
{
lod = llclamp(lod, 0, 3);
- if (header.has("404"))
+ S32 version = header["version"];
+
+ if (header.has("404") || version > MAX_MESH_VERSION)
{
return -1;
}
@@ -1832,19 +1673,6 @@ S32 LLMeshRepository::getActualMeshLOD(LLSD& header, S32 lod)
return -1;
}
-U32 LLMeshRepoThread::getResourceCost(const LLUUID& mesh_id)
-{
- LLMutexLock lock(mHeaderMutex);
-
- std::map<LLUUID, U32>::iterator iter = mMeshResourceCost.find(mesh_id);
- if (iter != mMeshResourceCost.end())
- {
- return iter->second;
- }
-
- return 0;
-}
-
void LLMeshRepository::cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header)
{
mThread->mMeshHeader[data.mUUID] = header;
@@ -2135,54 +1963,54 @@ void LLMeshHeaderResponder::completedRaw(U32 status, const std::string& reason,
LLUUID mesh_id = mMeshParams.getSculptID();
LLSD header = gMeshRepo.mThread->mMeshHeader[mesh_id];
- std::stringstream str;
+ S32 version = header["version"].asInteger();
+
+ if (version <= MAX_MESH_VERSION)
+ {
+ std::stringstream str;
- S32 lod_bytes = 0;
+ S32 lod_bytes = 0;
- for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i)
- { //figure out how many bytes we'll need to reserve in the file
- std::string lod_name = header_lod[i];
- lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger());
- }
+ for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i)
+ { //figure out how many bytes we'll need to reserve in the file
+ std::string lod_name = header_lod[i];
+ lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger());
+ }
- //just in case skin info or decomposition is at the end of the file (which it shouldn't be)
- lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger());
- lod_bytes = llmax(lod_bytes, header["physics_convex"]["offset"].asInteger() + header["physics_convex"]["size"].asInteger());
+ //just in case skin info or decomposition is at the end of the file (which it shouldn't be)
+ lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger());
+ lod_bytes = llmax(lod_bytes, header["physics_convex"]["offset"].asInteger() + header["physics_convex"]["size"].asInteger());
- S32 header_bytes = (S32) gMeshRepo.mThread->mMeshHeaderSize[mesh_id];
- S32 bytes = lod_bytes + header_bytes;
+ S32 header_bytes = (S32) gMeshRepo.mThread->mMeshHeaderSize[mesh_id];
+ S32 bytes = lod_bytes + header_bytes;
- //it's possible for the remote asset to have more data than is needed for the local cache
- //only allocate as much space in the VFS as is needed for the local cache
- data_size = llmin(data_size, bytes);
+ //it's possible for the remote asset to have more data than is needed for the local cache
+ //only allocate as much space in the VFS as is needed for the local cache
+ data_size = llmin(data_size, bytes);
- LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
- if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
- {
- LLMeshRepository::sCacheBytesWritten += data_size;
+ LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
+ if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
+ {
+ LLMeshRepository::sCacheBytesWritten += data_size;
- file.write((const U8*) data, data_size);
+ file.write((const U8*) data, data_size);
- //zero out the rest of the file
- U8 block[4096];
- memset(block, 0, 4096);
-
- while (bytes-file.tell() > 4096)
- {
- file.write(block, 4096);
- }
+ //zero out the rest of the file
+ U8 block[4096];
+ memset(block, 0, 4096);
- S32 remaining = bytes-file.tell();
+ while (bytes-file.tell() > 4096)
+ {
+ file.write(block, 4096);
+ }
- if (remaining < 0 || remaining > 4096)
- {
- llerrs << "Bad padding of mesh asset cache entry." << llendl;
- }
+ S32 remaining = bytes-file.tell();
- if (remaining > 0)
- {
- file.write(block, remaining);
+ if (remaining > 0)
+ {
+ file.write(block, remaining);
+ }
}
}
}
@@ -2201,7 +2029,7 @@ LLMeshRepository::LLMeshRepository()
void LLMeshRepository::init()
{
- mMeshMutex = new LLMutex(NULL);
+ mMeshMutex = new LLMutex();
LLConvexDecomposition::getInstance()->initSystem();
@@ -2292,8 +2120,6 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para
return detail;
}
- LLFastTimer t(FTM_LOAD_MESH);
-
{
LLMutexLock lock(mMeshMutex);
//add volume to list of loading meshes
@@ -2369,11 +2195,6 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para
return detail;
}
-static LLFastTimer::DeclareTimer FTM_START_MESH_THREAD("Start Thread");
-static LLFastTimer::DeclareTimer FTM_LOAD_MESH_LOD("Load LOD");
-static LLFastTimer::DeclareTimer FTM_MESH_LOCK1("Lock 1");
-static LLFastTimer::DeclareTimer FTM_MESH_LOCK2("Lock 2");
-
void LLMeshRepository::notifyLoadedMeshes()
{ //called from main thread
@@ -2406,6 +2227,38 @@ void LLMeshRepository::notifyLoadedMeshes()
LLAssetType::EType asset_type = LLAssetType::lookup(data.mPostData["asset_type"].asString());
LLInventoryType::EType inventory_type = LLInventoryType::lookup(data.mPostData["inventory_type"].asString());
+ // Handle addition of texture, if any.
+ if ( data.mResponse.has("new_texture_folder_id") )
+ {
+ const LLUUID& folder_id = data.mResponse["new_texture_folder_id"].asUUID();
+
+ if ( folder_id.notNull() )
+ {
+ LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE);
+
+ std::string name;
+ // Check if the server built a different name for the texture folder
+ if ( data.mResponse.has("new_texture_folder_name") )
+ {
+ name = data.mResponse["new_texture_folder_name"].asString();
+ }
+ else
+ {
+ name = data.mPostData["name"].asString();
+ }
+
+ // Add the category to the internal representation
+ LLPointer<LLViewerInventoryCategory> cat =
+ new LLViewerInventoryCategory(folder_id, parent_id,
+ LLFolderType::FT_NONE, name, gAgent.getID());
+ cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN);
+
+ LLInventoryModel::LLCategoryUpdate update(cat->getParentUUID(), 1);
+ gInventory.accountForUpdate(update);
+ gInventory.updateCategory(cat);
+ }
+ }
+
on_new_single_inventory_upload_complete(
asset_type,
inventory_type,
@@ -2414,7 +2267,8 @@ void LLMeshRepository::notifyLoadedMeshes()
data.mPostData["name"],
data.mPostData["description"],
data.mResponse,
- 0);
+ data.mResponse["upload_price"]);
+ //}
mInventoryQ.pop();
}
@@ -2439,18 +2293,9 @@ void LLMeshRepository::notifyLoadedMeshes()
}
}
- LLFastTimer t(FTM_MESH_UPDATE);
-
- {
- LLFastTimer t(FTM_MESH_LOCK1);
- mMeshMutex->lock();
- }
-
- {
- LLFastTimer t(FTM_MESH_LOCK2);
- mThread->mMutex->lock();
- }
-
+ mMeshMutex->lock();
+ mThread->mMutex->lock();
+
//popup queued error messages from background threads
while (!mUploadErrorQ.empty())
{
@@ -2502,7 +2347,6 @@ void LLMeshRepository::notifyLoadedMeshes()
while (!mPendingRequests.empty() && push_count > 0)
{
- LLFastTimer t(FTM_LOAD_MESH_LOD);
LLMeshRepoThread::LODRequest& request = mPendingRequests.front();
mThread->loadMeshLOD(request.mMeshParams, request.mLOD);
mPendingRequests.erase(mPendingRequests.begin());
@@ -2652,25 +2496,6 @@ S32 LLMeshRepository::getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lo
return mThread->getActualMeshLOD(mesh_params, lod);
}
-U32 LLMeshRepository::calcResourceCost(LLSD& header)
-{
- U32 bytes = 0;
-
- for (U32 i = 0; i < 4; i++)
- {
- bytes += header[header_lod[i]]["size"].asInteger();
- }
-
- bytes += header["skin"]["size"].asInteger();
-
- return bytes/4096 + 1;
-}
-
-U32 LLMeshRepository::getResourceCost(const LLUUID& mesh_id)
-{
- return mThread->getResourceCost(mesh_id);
-}
-
const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj)
{
if (mesh_id.notNull())
@@ -2809,9 +2634,11 @@ LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints)
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload,
+ LLHandle<LLWholeModelFeeObserver> fee_observer, LLHandle<LLWholeModelUploadObserver> upload_observer)
{
- LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints);
+ LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints, upload_url,
+ do_upload, fee_observer, upload_observer);
mUploadWaitList.push_back(thread);
}
@@ -2839,101 +2666,6 @@ S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod)
}
-
-void LLMeshUploadThread::doUploadModel(LLMeshUploadData& data)
-{
- if(isDiscarded())
- {
- return ;
- }
-
- if (!data.mRSVP.empty())
- {
- std::stringstream ostr;
-
- LLModel::Decomposition& decomp =
- data.mModel[LLModel::LOD_PHYSICS].notNull() ?
- data.mModel[LLModel::LOD_PHYSICS]->mPhysics :
- data.mBaseModel->mPhysics;
-
- decomp.mBaseHull = mHullMap[data.mBaseModel];
-
- LLModel::writeModel(
- ostr,
- data.mModel[LLModel::LOD_PHYSICS],
- data.mModel[LLModel::LOD_HIGH],
- data.mModel[LLModel::LOD_MEDIUM],
- data.mModel[LLModel::LOD_LOW],
- data.mModel[LLModel::LOD_IMPOSTOR],
- decomp,
- mUploadSkin,
- mUploadJoints);
-
- data.mAssetData = ostr.str();
-
- LLCurlRequest::headers_t headers;
- mPendingUploads++;
-
- mCurlRequest->post(data.mRSVP, headers, data.mAssetData, new LLMeshUploadResponder(data, this));
- }
-}
-
-void LLMeshUploadThread::doUploadTexture(LLTextureUploadData& data)
-{
- if(isDiscarded())
- {
- return ;
- }
-
- if (!data.mRSVP.empty())
- {
- std::stringstream ostr;
-
- if (!data.mTexture->isRawImageValid())
- {
- data.mTexture->reloadRawImage(data.mTexture->getDiscardLevel());
- }
-
- if(data.mTexture->hasSavedRawImage())
- {
- LLPointer<LLImageJ2C> upload_file = LLViewerTextureList::convertToUploadFile(data.mTexture->getSavedRawImage());
-
- ostr.write((const char*) upload_file->getData(), upload_file->getDataSize());
- }
-
- data.mAssetData = ostr.str();
-
- LLCurlRequest::headers_t headers;
- mPendingUploads++;
-
- mCurlRequest->post(data.mRSVP, headers, data.mAssetData, new LLTextureUploadResponder(data, this));
- }
-}
-
-
-void LLMeshUploadThread::onModelUploaded(LLMeshUploadData& data)
-{
- createObjects(data);
-}
-
-void LLMeshUploadThread::onTextureUploaded(LLTextureUploadData& data)
-{
- mTextureMap[data.mTexture] = data;
-}
-
-
-void LLMeshUploadThread::createObjects(LLMeshUploadData& data)
-{
- instance_list& instances = mInstance[data.mBaseModel];
-
- for (instance_list::iterator iter = instances.begin(); iter != instances.end(); ++iter)
- { //create prims that reference given mesh
- LLModelInstance& instance = *iter;
- instance.mMeshID = data.mUUID;
- mInstanceQ.push(instance);
- }
-}
-
void LLMeshUploadThread::decomposeMeshMatrix(LLMatrix4& transformation,
LLVector3& result_pos,
LLQuaternion& result_rot,
@@ -2974,147 +2706,6 @@ void LLMeshUploadThread::decomposeMeshMatrix(LLMatrix4& transformation,
result_rot = quat_rotation;
}
-
-LLSD LLMeshUploadThread::createObject(LLModelInstance& instance)
-{
- LLMatrix4 transformation = instance.mTransform;
-
- llassert(instance.mMeshID.notNull());
-
- // check for reflection
- BOOL reflected = (transformation.determinant() < 0);
-
- // compute position
- LLVector3 position = LLVector3(0, 0, 0) * transformation;
-
- // compute scale
- LLVector3 x_transformed = LLVector3(1, 0, 0) * transformation - position;
- LLVector3 y_transformed = LLVector3(0, 1, 0) * transformation - position;
- LLVector3 z_transformed = LLVector3(0, 0, 1) * transformation - position;
- F32 x_length = x_transformed.normalize();
- F32 y_length = y_transformed.normalize();
- F32 z_length = z_transformed.normalize();
- LLVector3 scale = LLVector3(x_length, y_length, z_length);
-
- // adjust for "reflected" geometry
- LLVector3 x_transformed_reflected = x_transformed;
- if (reflected)
- {
- x_transformed_reflected *= -1.0;
- }
-
- // compute rotation
- LLMatrix3 rotation_matrix;
- rotation_matrix.setRows(x_transformed_reflected, y_transformed, z_transformed);
- LLQuaternion quat_rotation = rotation_matrix.quaternion();
- quat_rotation.normalize(); // the rotation_matrix might not have been orthoginal. make it so here.
- LLVector3 euler_rotation;
- quat_rotation.getEulerAngles(&euler_rotation.mV[VX], &euler_rotation.mV[VY], &euler_rotation.mV[VZ]);
-
- //
- // build parameter block to construct this prim
- //
-
- LLSD object_params;
-
- // create prim
-
- // set volume params
- U8 sculpt_type = LL_SCULPT_TYPE_MESH;
- if (reflected)
- {
- sculpt_type |= LL_SCULPT_FLAG_MIRROR;
- }
- LLVolumeParams volume_params;
- volume_params.setType( LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE );
- volume_params.setBeginAndEndS( 0.f, 1.f );
- volume_params.setBeginAndEndT( 0.f, 1.f );
- volume_params.setRatio ( 1, 1 );
- volume_params.setShear ( 0, 0 );
- volume_params.setSculptID(instance.mMeshID, sculpt_type);
- object_params["shape"] = volume_params.asLLSD();
-
- object_params["material"] = LL_MCODE_WOOD;
-
- object_params["group-id"] = gAgent.getGroupID();
- object_params["pos"] = ll_sd_from_vector3(position + mOrigin);
- object_params["rotation"] = ll_sd_from_quaternion(quat_rotation);
- object_params["scale"] = ll_sd_from_vector3(scale);
- object_params["name"] = instance.mLabel;
-
- // load material from dae file
- object_params["facelist"] = LLSD::emptyArray();
- for (S32 i = 0; i < instance.mMaterial.size(); i++)
- {
- LLTextureEntry te;
- LLImportMaterial& mat = instance.mMaterial[i];
-
- te.setColor(mat.mDiffuseColor);
-
- LLUUID diffuse_id = mTextureMap[mat.mDiffuseMap].mUUID;
-
- if (diffuse_id.notNull())
- {
- te.setID(diffuse_id);
- }
- else
- {
- te.setID(LLUUID("5748decc-f629-461c-9a36-a35a221fe21f")); // blank texture
- }
-
- te.setFullbright(mat.mFullbright);
-
- object_params["facelist"][i] = te.asLLSD();
- }
-
- // set extra parameters
- LLSculptParams sculpt_params;
- sculpt_params.setSculptTexture(instance.mMeshID);
- sculpt_params.setSculptType(sculpt_type);
- U8 buffer[MAX_OBJECT_PARAMS_SIZE+1];
- LLDataPackerBinaryBuffer dp(buffer, MAX_OBJECT_PARAMS_SIZE);
- sculpt_params.pack(dp);
- std::vector<U8> v(dp.getCurrentSize());
- memcpy(&v[0], buffer, dp.getCurrentSize());
- LLSD extra_parameter;
- extra_parameter["extra_parameter"] = sculpt_params.mType;
- extra_parameter["param_data"] = v;
- object_params["extra_parameters"].append(extra_parameter);
-
- LLPermissions perm;
- perm.setOwnerAndGroup(gAgent.getID(), gAgent.getID(), LLUUID::null, false);
- perm.setCreator(gAgent.getID());
-
- perm.initMasks(PERM_ITEM_UNRESTRICTED | PERM_MOVE, //base
- PERM_ITEM_UNRESTRICTED | PERM_MOVE, //owner
- LLFloaterPerms::getEveryonePerms(),
- LLFloaterPerms::getGroupPerms(),
- LLFloaterPerms::getNextOwnerPerms());
-
- object_params["permissions"] = ll_create_sd_from_permissions(perm);
-
- object_params["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL);
-
- return object_params;
-}
-
-void LLMeshUploadThread::priceResult(LLMeshUploadData& data, const LLSD& content)
-{
- mPendingCost += content["upload_price"].asInteger();
- data.mRSVP = content["rsvp"].asString();
-
- mConfirmedQ.push(data);
-}
-
-void LLMeshUploadThread::priceResult(LLTextureUploadData& data, const LLSD& content)
-{
- mPendingCost += content["upload_price"].asInteger();
- data.mRSVP = content["rsvp"].asString();
-
- mConfirmedTextureQ.push(data);
-}
-
-
bool LLImportMaterial::operator<(const LLImportMaterial &rhs) const
{
if (mDiffuseMap != rhs.mDiffuseMap)
@@ -3137,6 +2728,11 @@ bool LLImportMaterial::operator<(const LLImportMaterial &rhs) const
return mDiffuseColor < rhs.mDiffuseColor;
}
+ if (mBinding != rhs.mBinding)
+ {
+ return mBinding < rhs.mBinding;
+ }
+
return mFullbright < rhs.mFullbright;
}
@@ -3158,55 +2754,66 @@ void LLMeshRepository::uploadError(LLSD& args)
//static
F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod)
{
- F32 dlowest = llmin(radius/0.03f, 256.f);
- F32 dlow = llmin(radius/0.06f, 256.f);
- F32 dmid = llmin(radius/0.24f, 256.f);
-
- F32 bytes_lowest = header["lowest_lod"]["size"].asReal()/1024.f;
- F32 bytes_low = header["low_lod"]["size"].asReal()/1024.f;
- F32 bytes_mid = header["medium_lod"]["size"].asReal()/1024.f;
- F32 bytes_high = header["high_lod"]["size"].asReal()/1024.f;
+ F32 max_distance = 512.f;
- if (bytes)
- {
- *bytes = 0;
- *bytes += header["lowest_lod"]["size"].asInteger();
- *bytes += header["low_lod"]["size"].asInteger();
- *bytes += header["medium_lod"]["size"].asInteger();
- *bytes += header["high_lod"]["size"].asInteger();
- }
+ F32 dlowest = llmin(radius/0.03f, max_distance);
+ F32 dlow = llmin(radius/0.06f, max_distance);
+ F32 dmid = llmin(radius/0.24f, max_distance);
+
+ F32 METADATA_DISCOUNT = (F32) gSavedSettings.getU32("MeshMetaDataDiscount"); //discount 128 bytes to cover the cost of LLSD tags and compression domain overhead
+ F32 MINIMUM_SIZE = (F32) gSavedSettings.getU32("MeshMinimumByteSize"); //make sure nothing is "free"
+ F32 bytes_per_triangle = (F32) gSavedSettings.getU32("MeshBytesPerTriangle");
- if (bytes_visible)
- {
- lod = LLMeshRepository::getActualMeshLOD(header, lod);
- if (lod >= 0 && lod <= 3)
- {
- *bytes_visible = header[header_lod[lod]]["size"].asInteger();
- }
- }
+ S32 bytes_lowest = header["lowest_lod"]["size"].asInteger();
+ S32 bytes_low = header["low_lod"]["size"].asInteger();
+ S32 bytes_mid = header["medium_lod"]["size"].asInteger();
+ S32 bytes_high = header["high_lod"]["size"].asInteger();
- if (bytes_high == 0.f)
+ if (bytes_high == 0)
{
return 0.f;
}
- if (bytes_mid == 0.f)
+ if (bytes_mid == 0)
{
bytes_mid = bytes_high;
}
- if (bytes_low == 0.f)
+ if (bytes_low == 0)
{
bytes_low = bytes_mid;
}
- if (bytes_lowest == 0.f)
+ if (bytes_lowest == 0)
{
bytes_lowest = bytes_low;
}
- F32 max_area = 65536.f;
+ F32 triangles_lowest = llmax((F32) bytes_lowest-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+ F32 triangles_low = llmax((F32) bytes_low-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+ F32 triangles_mid = llmax((F32) bytes_mid-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+ F32 triangles_high = llmax((F32) bytes_high-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+
+ if (bytes)
+ {
+ *bytes = 0;
+ *bytes += header["lowest_lod"]["size"].asInteger();
+ *bytes += header["low_lod"]["size"].asInteger();
+ *bytes += header["medium_lod"]["size"].asInteger();
+ *bytes += header["high_lod"]["size"].asInteger();
+ }
+
+ if (bytes_visible)
+ {
+ lod = LLMeshRepository::getActualMeshLOD(header, lod);
+ if (lod >= 0 && lod <= 3)
+ {
+ *bytes_visible = header[header_lod[lod]]["size"].asInteger();
+ }
+ }
+
+ F32 max_area = 102932.f; //area of circle that encompasses region
F32 min_area = 1.f;
F32 high_area = llmin(F_PI*dmid*dmid, max_area);
@@ -3229,12 +2836,12 @@ F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32
low_area /= total_area;
lowest_area /= total_area;
- F32 weighted_avg = bytes_high*high_area +
- bytes_mid*mid_area +
- bytes_low*low_area +
- bytes_lowest*lowest_area;
+ F32 weighted_avg = triangles_high*high_area +
+ triangles_mid*mid_area +
+ triangles_low*low_area +
+ triangles_lowest*lowest_area;
- return weighted_avg * gSavedSettings.getF32("MeshStreamingCostScaler");
+ return weighted_avg/gSavedSettings.getU32("MeshTriangleBudget")*15000.f;
}
@@ -3245,8 +2852,8 @@ LLPhysicsDecomp::LLPhysicsDecomp()
mQuitting = false;
mDone = false;
- mSignal = new LLCondition(NULL);
- mMutex = new LLMutex(NULL);
+ mSignal = new LLCondition();
+ mMutex = new LLMutex();
}
LLPhysicsDecomp::~LLPhysicsDecomp()
@@ -3291,24 +2898,27 @@ S32 LLPhysicsDecomp::llcdCallback(const char* status, S32 p1, S32 p2)
return 1;
}
-void LLPhysicsDecomp::setMeshData(LLCDMeshData& mesh)
+void LLPhysicsDecomp::setMeshData(LLCDMeshData& mesh, bool vertex_based)
{
mesh.mVertexBase = mCurRequest->mPositions[0].mV;
mesh.mVertexStrideBytes = 12;
mesh.mNumVertices = mCurRequest->mPositions.size();
- mesh.mIndexType = LLCDMeshData::INT_16;
- mesh.mIndexBase = &(mCurRequest->mIndices[0]);
- mesh.mIndexStrideBytes = 6;
+ if(!vertex_based)
+ {
+ mesh.mIndexType = LLCDMeshData::INT_16;
+ mesh.mIndexBase = &(mCurRequest->mIndices[0]);
+ mesh.mIndexStrideBytes = 6;
- mesh.mNumTriangles = mCurRequest->mIndices.size()/3;
+ mesh.mNumTriangles = mCurRequest->mIndices.size()/3;
+ }
- if (mesh.mNumTriangles > 0 && mesh.mNumVertices > 2)
+ if ((vertex_based || mesh.mNumTriangles > 0) && mesh.mNumVertices > 2)
{
LLCDResult ret = LLCD_OK;
if (LLConvexDecomposition::getInstance() != NULL)
{
- ret = LLConvexDecomposition::getInstance()->setMeshData(&mesh);
+ ret = LLConvexDecomposition::getInstance()->setMeshData(&mesh, vertex_based);
}
if (ret)
@@ -3332,7 +2942,7 @@ void LLPhysicsDecomp::doDecomposition()
//load data intoLLCD
if (stage == 0)
{
- setMeshData(mesh);
+ setMeshData(mesh, false);
}
//build parameter map
@@ -3506,11 +3116,54 @@ void make_box(LLPhysicsDecomp::Request * request)
void LLPhysicsDecomp::doDecompositionSingleHull()
{
- LLCDMeshData mesh;
+ LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance();
+
+ if (decomp == NULL)
+ {
+ //stub. do nothing.
+ return;
+ }
- setMeshData(mesh);
+ LLCDMeshData mesh;
+
+#if 1
+ setMeshData(mesh, true);
+
+ LLCDResult ret = decomp->buildSingleHull() ;
+ if(ret)
+ {
+ 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<LLVector3> 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();
-
+#else
+ setMeshData(mesh, false);
+
//set all parameters to default
std::map<std::string, const LLCDParam*> param_map;
@@ -3519,23 +3172,15 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
if (!params)
{
- param_count = LLConvexDecomposition::getInstance()->getParameters(&params);
+ param_count = decomp->getParameters(&params);
}
- LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance();
-
- if (decomp == NULL)
- {
- //stub. do nothing.
- return;
- }
-
for (S32 i = 0; i < param_count; ++i)
{
decomp->setParam(params[i].mName, params[i].mDefault.mIntOrEnumValue);
}
- const S32 STAGE_DECOMPOSE = mStageID["Decompose"];
+ const S32 STAGE_DECOMPOSE = mStageID["Decompose"];
const S32 STAGE_SIMPLIFY = mStageID["Simplify"];
const S32 DECOMP_PREVIEW = 0;
const S32 SIMPLIFY_RETAIN = 0;
@@ -3597,7 +3242,7 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
}
}
}
-
+#endif
{
completeCurrent();
@@ -3760,7 +3405,8 @@ LLModelInstance::LLModelInstance(LLSD& data)
for (U32 i = 0; i < data["material"].size(); ++i)
{
- mMaterial.push_back(LLImportMaterial(data["material"][i]));
+ LLImportMaterial mat(data["material"][i]);
+ mMaterial[mat.mBinding] = mat;
}
}
@@ -3773,9 +3419,10 @@ LLSD LLModelInstance::asLLSD()
ret["label"] = mLabel;
ret["transform"] = mTransform.getValue();
- for (U32 i = 0; i < mMaterial.size(); ++i)
+ U32 i = 0;
+ for (std::map<std::string, LLImportMaterial>::iterator iter = mMaterial.begin(); iter != mMaterial.end(); ++iter)
{
- ret["material"][i] = mMaterial[i].asLLSD();
+ ret["material"][i++] = iter->second.asLLSD();
}
return ret;
@@ -3787,6 +3434,7 @@ LLImportMaterial::LLImportMaterial(LLSD& data)
mDiffuseMapLabel = data["diffuse"]["label"].asString();
mDiffuseColor.setValue(data["diffuse"]["color"]);
mFullbright = data["fullbright"].asBoolean();
+ mBinding = data["binding"].asString();
}
@@ -3798,7 +3446,8 @@ LLSD LLImportMaterial::asLLSD()
ret["diffuse"]["label"] = mDiffuseMapLabel;
ret["diffuse"]["color"] = mDiffuseColor.getValue();
ret["fullbright"] = mFullbright;
-
+ ret["binding"] = mBinding;
+
return ret;
}
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index f237c3a60e..35a7314cd5 100644..100755
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -36,6 +36,7 @@
#define LLCONVEXDECOMPINTER_STATIC 1
#include "llconvexdecomposition.h"
+#include "lluploadfloaterobservers.h"
class LLVOVolume;
class LLMeshResponder;
@@ -91,6 +92,7 @@ public:
LLPointer<LLViewerFetchedTexture> mDiffuseMap;
std::string mDiffuseMapFilename;
std::string mDiffuseMapLabel;
+ std::string mBinding;
LLColor4 mDiffuseColor;
bool mFullbright;
@@ -119,9 +121,9 @@ public:
S32 mLocalMeshID;
LLMatrix4 mTransform;
- std::vector<LLImportMaterial> mMaterial;
+ std::map<std::string, LLImportMaterial> mMaterial;
- LLModelInstance(LLModel* model, const std::string& label, LLMatrix4& transform, std::vector<LLImportMaterial>& materials)
+ LLModelInstance(LLModel* model, const std::string& label, LLMatrix4& transform, std::map<std::string, LLImportMaterial>& materials)
: mModel(model), mLabel(label), mTransform(transform), mMaterial(materials)
{
mLocalMeshID = -1;
@@ -189,7 +191,7 @@ public:
static S32 llcdCallback(const char*, S32, S32);
void cancel();
- void setMeshData(LLCDMeshData& mesh);
+ void setMeshData(LLCDMeshData& mesh, bool vertex_based);
void doDecomposition();
void doDecompositionSingleHull();
@@ -229,8 +231,7 @@ public:
mesh_header_map mMeshHeader;
std::map<LLUUID, U32> mMeshHeaderSize;
- std::map<LLUUID, U32> mMeshResourceCost;
-
+
class HeaderRequest
{
public:
@@ -333,8 +334,7 @@ public:
void notifyLoadedMeshes();
S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
- U32 getResourceCost(const LLUUID& mesh_params);
-
+
void loadMeshSkinInfo(const LLUUID& mesh_id);
void loadMeshDecomposition(const LLUUID& mesh_id);
void loadMeshPhysicsShape(const LLUUID& mesh_id);
@@ -356,6 +356,9 @@ public:
class LLMeshUploadThread : public LLThread
{
+private:
+ S32 mMeshUploadTimeOut ; //maximum time in seconds to execute an uploading request.
+
public:
class DecompRequest : public LLPhysicsDecomp::Request
{
@@ -385,9 +388,7 @@ public:
LLMutex* mMutex;
LLCurlRequest* mCurlRequest;
- S32 mPendingConfirmations;
S32 mPendingUploads;
- S32 mPendingCost;
LLVector3 mOrigin;
bool mFinished;
bool mUploadTextures;
@@ -399,38 +400,21 @@ public:
std::string mWholeModelFeeCapability;
std::string mWholeModelUploadURL;
- std::queue<LLMeshUploadData> mUploadQ;
- std::queue<LLMeshUploadData> mConfirmedQ;
- std::queue<LLModelInstance> mInstanceQ;
-
- std::queue<LLTextureUploadData> mTextureQ;
- std::queue<LLTextureUploadData> mConfirmedTextureQ;
-
- std::map<LLViewerFetchedTexture*, LLTextureUploadData> mTextureMap;
-
LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints);
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
+ LLHandle<LLWholeModelFeeObserver> fee_observer= (LLHandle<LLWholeModelFeeObserver>()), LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
~LLMeshUploadThread();
- void uploadTexture(LLTextureUploadData& data);
- void doUploadTexture(LLTextureUploadData& data);
- void priceResult(LLTextureUploadData& data, const LLSD& content);
- void onTextureUploaded(LLTextureUploadData& data);
-
- void uploadModel(LLMeshUploadData& data);
- void doUploadModel(LLMeshUploadData& data);
- void onModelUploaded(LLMeshUploadData& data);
- void createObjects(LLMeshUploadData& data);
- LLSD createObject(LLModelInstance& instance);
- void priceResult(LLMeshUploadData& data, const LLSD& content);
-
bool finished() { return mFinished; }
virtual void run();
void preStart();
void discard() ;
BOOL isDiscarded();
+ void generateHulls();
+
void doWholeModelUpload();
+ void requestWholeModelFee();
void wholeModelToLLSD(LLSD& dest, bool include_textures);
@@ -438,6 +422,15 @@ public:
LLVector3& result_pos,
LLQuaternion& result_rot,
LLVector3& result_scale);
+
+ void setFeeObserverHandle(LLHandle<LLWholeModelFeeObserver> observer_handle) { mFeeObserverHandle = observer_handle; }
+ void setUploadObserverHandle(LLHandle<LLWholeModelUploadObserver> observer_handle) { mUploadObserverHandle = observer_handle; }
+
+private:
+ LLHandle<LLWholeModelFeeObserver> mFeeObserverHandle;
+ LLHandle<LLWholeModelUploadObserver> mUploadObserverHandle;
+
+ bool mDoUpload; // if FALSE only model data will be requested, otherwise the model will be uploaded
};
class LLMeshRepository
@@ -471,8 +464,6 @@ public:
S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
static S32 getActualMeshLOD(LLSD& header, S32 lod);
- U32 calcResourceCost(LLSD& header);
- U32 getResourceCost(const LLUUID& mesh_params);
const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj);
LLModel::Decomposition* getDecomposition(const LLUUID& mesh_id);
void fetchPhysicsShape(const LLUUID& mesh_id);
@@ -488,7 +479,8 @@ public:
LLSD& getMeshHeader(const LLUUID& mesh_id);
void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints);
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
+ LLHandle<LLWholeModelFeeObserver> fee_observer= (LLHandle<LLWholeModelFeeObserver>()), LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
S32 getMeshSize(const LLUUID& mesh_id, S32 lod);
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index b8832dfd8e..9d54ad7463 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -716,7 +716,7 @@ void LLNavigationBar::handleLoginComplete()
void LLNavigationBar::invokeSearch(std::string search_text)
{
- LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("id", LLSD(search_text)));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("query", LLSD(search_text)));
}
void LLNavigationBar::clearHistoryCache()
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 11dc496311..957b6d5f94 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -268,6 +268,9 @@ bool LLNearbyChatScreenChannel::createPoolToast()
toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1));
+ // If the toast gets somehow prematurely destroyed, deactivate it to prevent crash (STORM-1352).
+ toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1, false));
+
LL_DEBUGS("NearbyChat") << "Creating and pooling toast" << llendl;
m_toast_pool.push_back(toast->getHandle());
return true;
@@ -369,8 +372,10 @@ void LLNearbyChatScreenChannel::arrangeToasts()
}
}
-int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
+static bool sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
{
+ if (!first.get() || !second.get()) return false; // STORM-1352
+
F32 v1 = first.get()->getTimeLeftToLive();
F32 v2 = second.get()->getTimeLeftToLive();
return v1 > v2;
@@ -396,7 +401,11 @@ void LLNearbyChatScreenChannel::showToastsBottom()
for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
{
LLToast* toast = it->get();
- if (!toast) continue;
+ if (!toast)
+ {
+ llwarns << "NULL found in the active chat toasts list!" << llendl;
+ continue;
+ }
S32 toast_top = bottom + toast->getRect().getHeight() + margin;
@@ -472,7 +481,8 @@ void LLNearbyChatHandler::initChannel()
-void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
+void LLNearbyChatHandler::processChat(const LLChat& chat_msg, // WARNING - not really const, see hack below changing chat_msg.mText
+ const LLSD &args)
{
if(chat_msg.mMuted == TRUE)
return;
@@ -480,7 +490,17 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
if(chat_msg.mText.empty())
return;//don't process empty messages
+ // Handle irc styled messages for toast panel
+ // HACK ALERT - changes mText, stripping out IRC style "/me" prefixes
LLChat& tmp_chat = const_cast<LLChat&>(chat_msg);
+ std::string original_message = tmp_chat.mText; // Save un-modified version of chat text
+ if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
+ {
+ if(!tmp_chat.mFromName.empty())
+ tmp_chat.mText = tmp_chat.mFromName + tmp_chat.mText.substr(3);
+ else
+ tmp_chat.mText = tmp_chat.mText.substr(3);
+ }
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
{
@@ -531,7 +551,7 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
LLViewerChat::getChatColor(chat_msg,txt_color);
- LLFloaterScriptDebug::addScriptLine(chat_msg.mText,
+ LLFloaterScriptDebug::addScriptLine(original_message, // Send full message with "/me" style prefix
chat_msg.mFromName,
txt_color,
chat_msg.mFromID);
@@ -562,15 +582,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
|| !mChannel->getShowToasts() ) // to prevent toasts in Busy mode
return;//no need in toast if chat is visible or if bubble chat is enabled
- // Handle irc styled messages for toast panel
- if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
- {
- if(!tmp_chat.mFromName.empty())
- tmp_chat.mText = tmp_chat.mFromName + tmp_chat.mText.substr(3);
- else
- tmp_chat.mText = tmp_chat.mText.substr(3);
- }
-
// arrange a channel on a screen
if(!mChannel->getVisible())
{
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 6435126fc0..10887aa53a 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -364,8 +364,8 @@ LLOutfitsList::~LLOutfitsList()
if (gInventory.containsObserver(mCategoriesObserver))
{
gInventory.removeObserver(mCategoriesObserver);
- delete mCategoriesObserver;
}
+ delete mCategoriesObserver;
}
BOOL LLOutfitsList::postBuild()
diff --git a/indra/newview/llpanelappearancetab.cpp b/indra/newview/llpanelappearancetab.cpp
index 9910a3a2ac..8fa8867c69 100644
--- a/indra/newview/llpanelappearancetab.cpp
+++ b/indra/newview/llpanelappearancetab.cpp
@@ -31,6 +31,7 @@
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
+#include "llviewerinventory.h"
//virtual
bool LLPanelAppearanceTab::canTakeOffSelected()
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index bf3bf38863..a64b4ec94d 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -172,7 +172,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/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 07c7f35989..a4f6921f98 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -30,6 +30,7 @@
#include "llpanelface.h"
// library includes
+#include "llcalc.h"
#include "llerror.h"
#include "llfocusmgr.h"
#include "llrect.h"
@@ -926,6 +927,16 @@ void LLPanelFace::getState()
getChildView("button apply")->setEnabled(enabled);
}
}
+
+ // Set variable values for numeric expressions
+ LLCalc* calcp = LLCalc::getInstance();
+ calcp->setVar(LLCalc::TEX_U_SCALE, childGetValue("TexScaleU").asReal());
+ calcp->setVar(LLCalc::TEX_V_SCALE, childGetValue("TexScaleV").asReal());
+ calcp->setVar(LLCalc::TEX_U_OFFSET, childGetValue("TexOffsetU").asReal());
+ calcp->setVar(LLCalc::TEX_V_OFFSET, childGetValue("TexOffsetV").asReal());
+ calcp->setVar(LLCalc::TEX_ROTATION, childGetValue("TexRot").asReal());
+ calcp->setVar(LLCalc::TEX_TRANSPARENCY, childGetValue("ColorTrans").asReal());
+ calcp->setVar(LLCalc::TEX_GLOW, childGetValue("glow").asReal());
}
else
{
@@ -961,6 +972,16 @@ void LLPanelFace::getState()
//getChildView("has media")->setEnabled(FALSE);
//getChildView("media info set")->setEnabled(FALSE);
+
+ // Set variable values for numeric expressions
+ LLCalc* calcp = LLCalc::getInstance();
+ calcp->clearVar(LLCalc::TEX_U_SCALE);
+ calcp->clearVar(LLCalc::TEX_V_SCALE);
+ calcp->clearVar(LLCalc::TEX_U_OFFSET);
+ calcp->clearVar(LLCalc::TEX_V_OFFSET);
+ calcp->clearVar(LLCalc::TEX_ROTATION);
+ calcp->clearVar(LLCalc::TEX_TRANSPARENCY);
+ calcp->clearVar(LLCalc::TEX_GLOW);
}
}
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 8d8d9bc1c4..eddd6e554d 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -35,6 +35,7 @@
#include "llqueryflags.h"
#include "llagent.h"
+#include "lldateutil.h"
#include "lliconctrl.h"
#include "llfloaterreg.h"
#include "lllineeditor.h"
@@ -1056,6 +1057,14 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_CurrentInterval, current_interval );
msg->getStringFast(_PREHASH_MoneyData, _PREHASH_StartDate, start_date);
+ std::string time_str = LLTrans::getString("GroupMoneyDate");
+ LLSD substitution;
+
+ // We don't do time zone corrections of the calculated number of seconds
+ // because we don't have a full time stamp, only a date.
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%A %b %d, %Y", start_date);
+ LLStringUtil::format (time_str, substitution);
+
if ( interval_days != mImplementationp->mIntervalLength ||
current_interval != mImplementationp->mCurrentInterval )
{
@@ -1064,7 +1073,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
return;
}
- std::string text = start_date;
+ std::string text = time_str;
text.append("\n\n");
S32 total_amount = 0;
@@ -1203,7 +1212,15 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
// Start with the date.
if (text == mImplementationp->mLoadingText)
{
- text = start_date + "\n\n";
+ std::string time_str = LLTrans::getString("GroupMoneyDate");
+ LLSD substitution;
+
+ // We don't do time zone corrections of the calculated number of seconds
+ // because we don't have a full time stamp, only a date.
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%A %b %d, %Y", start_date);
+ LLStringUtil::format (time_str, substitution);
+
+ text = time_str + "\n\n";
}
S32 transactions = msg->getNumberOfBlocksFast(_PREHASH_HistoryData);
@@ -1408,12 +1425,26 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
}
text.append(LLTrans::getString("SummaryForTheWeek"));
- text.append(start_date);
+
+ std::string date_format_str = LLTrans::getString("GroupPlanningDate");
+ std::string time_str = date_format_str;
+ LLSD substitution;
+ // We don't do time zone corrections of the calculated number of seconds
+ // because we don't have a full time stamp, only a date.
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%m/%d/%Y", start_date);
+ LLStringUtil::format (time_str, substitution);
+
+ text.append(time_str);
if (current_interval == 0)
{
text.append(LLTrans::getString("NextStipendDay"));
- text.append(next_stipend_date);
+
+ time_str = date_format_str;
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%m/%d/%Y", next_stipend_date);
+ LLStringUtil::format (time_str, substitution);
+
+ text.append(time_str);
text.append("\n\n");
text.append(llformat("%-24sL$%6d\n", LLTrans::getString("GroupMoneyBalance").c_str(), balance ));
text.append(1, '\n');
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 0cc5dcda82..e370f2f622 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -71,7 +71,7 @@ void LLPanelChatControlPanel::onChange(EStatusType status, const std::string &ch
void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
{
- updateButtons(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
+ updateButtons(new_state);
}
void LLPanelChatControlPanel::updateCallButton()
@@ -96,11 +96,15 @@ void LLPanelChatControlPanel::updateCallButton()
getChildView("call_btn")->setEnabled(enable_connect);
}
-void LLPanelChatControlPanel::updateButtons(bool is_call_started)
+void LLPanelChatControlPanel::updateButtons(LLVoiceChannel::EState state)
{
+ bool is_call_started = state >= LLVoiceChannel::STATE_CALL_STARTED;
getChildView("end_call_btn_panel")->setVisible( is_call_started);
- getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started);
+ getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started && findChild<LLView>("voice_ctrls_btn_panel"));
getChildView("call_btn_panel")->setVisible( ! is_call_started);
+
+ getChildView("volume_ctrl_panel")->setVisible(state == LLVoiceChannel::STATE_CONNECTED);
+
updateCallButton();
}
@@ -135,7 +139,7 @@ void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id)
mVoiceChannelStateChangeConnection = voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
//call (either p2p, group or ad-hoc) can be already in started state
- updateButtons(voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED);
+ updateButtons(voice_channel->getState());
}
}
@@ -156,6 +160,13 @@ BOOL LLPanelIMControlPanel::postBuild()
childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this));
childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
+
+ childSetAction("mute_btn", boost::bind(&LLPanelIMControlPanel::onClickMuteVolume, this));
+ childSetAction("block_btn", boost::bind(&LLPanelIMControlPanel::onClickBlock, this));
+ childSetAction("unblock_btn", boost::bind(&LLPanelIMControlPanel::onClickUnblock, this));
+
+ getChild<LLUICtrl>("volume_slider")->setCommitCallback(boost::bind(&LLPanelIMControlPanel::onVolumeChange, this, _2));
+
getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
setFocusReceivedCallback(boost::bind(&LLPanelIMControlPanel::onFocusReceived, this));
@@ -163,6 +174,79 @@ BOOL LLPanelIMControlPanel::postBuild()
return LLPanelChatControlPanel::postBuild();
}
+void LLPanelIMControlPanel::draw()
+{
+ bool is_muted = LLMuteList::getInstance()->isMuted(mAvatarID);
+
+ getChild<LLUICtrl>("block_btn_panel")->setVisible(!is_muted);
+ getChild<LLUICtrl>("unblock_btn_panel")->setVisible(is_muted);
+
+ if (getChildView("volume_ctrl_panel")->getVisible())
+ {
+
+ bool is_muted_voice = LLMuteList::getInstance()->isMuted(mAvatarID, LLMute::flagVoiceChat);
+
+ LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn");
+ mute_btn->setValue( is_muted_voice );
+
+ LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider");
+ volume_slider->setEnabled( !is_muted_voice );
+
+ F32 volume;
+
+ if (is_muted_voice)
+ {
+ // it's clearer to display their volume as zero
+ volume = 0.f;
+ }
+ else
+ {
+ // actual volume
+ volume = LLVoiceClient::getInstance()->getUserVolume(mAvatarID);
+ }
+ volume_slider->setValue( (F64)volume );
+ }
+
+ LLPanelChatControlPanel::draw();
+}
+
+void LLPanelIMControlPanel::onClickMuteVolume()
+{
+ // By convention, we only display and toggle voice mutes, not all mutes
+ LLMuteList* mute_list = LLMuteList::getInstance();
+ bool is_muted = mute_list->isMuted(mAvatarID, LLMute::flagVoiceChat);
+
+ LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
+ if (!is_muted)
+ {
+ mute_list->add(mute, LLMute::flagVoiceChat);
+ }
+ else
+ {
+ mute_list->remove(mute, LLMute::flagVoiceChat);
+ }
+}
+
+void LLPanelIMControlPanel::onClickBlock()
+{
+ LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
+
+ LLMuteList::getInstance()->add(mute);
+}
+
+void LLPanelIMControlPanel::onClickUnblock()
+{
+ LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
+
+ LLMuteList::getInstance()->remove(mute);
+}
+
+void LLPanelIMControlPanel::onVolumeChange(const LLSD& data)
+{
+ F32 volume = (F32)data.asReal();
+ LLVoiceClient::getInstance()->setUserVolume(mAvatarID, volume);
+}
+
void LLPanelIMControlPanel::onTeleportButtonClicked()
{
LLAvatarActions::offerTeleport(mAvatarID);
@@ -262,6 +346,9 @@ void LLPanelIMControlPanel::onNameCache(const LLUUID& id, const std::string& ful
std::string avatar_name = full_name;
getChild<LLTextBox>("avatar_name")->setValue(avatar_name);
getChild<LLTextBox>("avatar_name")->setToolTip(avatar_name);
+
+ bool is_linden = LLStringUtil::endsWith(full_name, " Linden");
+ getChild<LLUICtrl>("mute_btn")->setEnabled( !is_linden);
}
}
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index 3bbe24ecb9..bba847b5d4 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -54,7 +54,7 @@ public:
virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
- void updateButtons(bool is_call_started);
+ void updateButtons(LLVoiceChannel::EState state);
// Enables/disables call button depending on voice availability
void updateCallButton();
@@ -94,6 +94,12 @@ private:
void onPayButtonClicked();
void onFocusReceived();
+ void onClickMuteVolume();
+ void onClickBlock();
+ void onClickUnblock();
+ /*virtual*/ void draw();
+ void onVolumeChange(const LLSD& data);
+
LLUUID mAvatarID;
};
diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp
index f9730d9b71..e7bdc51b4a 100644
--- a/indra/newview/llpanellandaudio.cpp
+++ b/indra/newview/llpanellandaudio.cpp
@@ -91,6 +91,12 @@ BOOL LLPanelLandAudio::postBuild()
mMusicURLEdit = getChild<LLLineEditor>("music_url");
childSetCommitCallback("music_url", onCommitAny, this);
+ mCheckAVSoundAny = getChild<LLCheckBoxCtrl>("all av sound check");
+ childSetCommitCallback("all av sound check", onCommitAny, this);
+
+ mCheckAVSoundGroup = getChild<LLCheckBoxCtrl>("group av sound check");
+ childSetCommitCallback("group av sound check", onCommitAny, this);
+
return TRUE;
}
@@ -144,6 +150,13 @@ void LLPanelLandAudio::refresh()
mMusicURLEdit->setText(parcel->getMusicURL());
mMusicURLEdit->setEnabled( can_change_media );
+
+ BOOL can_change_av_sounds = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS) && parcel->getHaveNewParcelLimitData();
+ mCheckAVSoundAny->set(parcel->getAllowAnyAVSounds());
+ mCheckAVSoundAny->setEnabled(can_change_av_sounds);
+
+ mCheckAVSoundGroup->set(parcel->getAllowGroupAVSounds() || parcel->getAllowAnyAVSounds()); // On if "Everyone" is on
+ mCheckAVSoundGroup->setEnabled(can_change_av_sounds && !parcel->getAllowAnyAVSounds()); // Enabled if "Everyone" is off
}
}
// static
@@ -164,6 +177,13 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
BOOL voice_enabled = self->mCheckParcelEnableVoice->get();
BOOL voice_estate_chan = !self->mCheckParcelVoiceLocal->get();
+ BOOL any_av_sound = self->mCheckAVSoundAny->get();
+ BOOL group_av_sound = TRUE; // If set to "Everyone" then group is checked as well
+ if (!any_av_sound)
+ { // If "Everyone" is off, use the value from the checkbox
+ group_av_sound = self->mCheckAVSoundGroup->get();
+ }
+
// Remove leading/trailing whitespace (common when copying/pasting)
LLStringUtil::trim(music_url);
@@ -172,6 +192,8 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan);
parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local);
parcel->setMusicURL(music_url);
+ parcel->setAllowAnyAVSounds(any_av_sound);
+ parcel->setAllowGroupAVSounds(group_av_sound);
// Send current parcel data upstream to server
LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h
index 4b0953bdc1..32a45100f4 100644
--- a/indra/newview/llpanellandaudio.h
+++ b/indra/newview/llpanellandaudio.h
@@ -52,6 +52,8 @@ private:
LLCheckBoxCtrl* mCheckParcelVoiceLocal;
LLLineEditor* mMusicURLEdit;
LLCheckBoxCtrl* mMusicUrlCheck;
+ LLCheckBoxCtrl* mCheckAVSoundAny;
+ LLCheckBoxCtrl* mCheckAVSoundGroup;
LLSafeHandle<LLParcelSelection>& mParcel;
};
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c2729fa19b..a9cc247d1b 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -46,6 +46,7 @@
#include "llfolderviewitem.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
+#include "llinventoryfunctions.h"
#include "lllandmarkactions.h"
#include "llmenubutton.h"
#include "llplacesinventorybridge.h"
@@ -529,7 +530,7 @@ void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id)
// virtual
void LLLandmarksPanel::setErrorStatus(U32 status, const std::string& reason)
{
- llerrs<< "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
+ llwarns << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
}
@@ -645,7 +646,7 @@ void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesI
// Start background fetch, mostly for My Inventory and Library
if (expanded)
{
- const LLUUID &cat_id = inventory_list->getStartFolderID();
+ const LLUUID &cat_id = inventory_list->getRootFolderID();
// Just because the category itself has been fetched, doesn't mean its child folders have.
/*
if (!gInventory.isCategoryComplete(cat_id))
@@ -1414,7 +1415,7 @@ static void filter_list(LLPlacesInventoryPanel* inventory_list, const std::strin
static bool category_has_descendents(LLPlacesInventoryPanel* inventory_list)
{
- LLViewerInventoryCategory* category = gInventory.getCategory(inventory_list->getStartFolderID());
+ LLViewerInventoryCategory* category = gInventory.getCategory(inventory_list->getRootFolderID());
if (category)
{
return category->getDescendentCount() > 0;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 27f341b4f6..db7d836799 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -1040,7 +1040,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 11273453ba..be9de884d1 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -87,6 +87,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*);
@@ -97,9 +99,6 @@ private:
static void onServerComboLostFocus(LLFocusableElement*);
static void updateServerCombo();
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();
private:
@@ -115,7 +114,4 @@ private:
static BOOL sCapslockDidNotification;
};
-std::string load_password_from_disk(void);
-void save_password_to_disk(const char* hashed_password);
-
#endif
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index bc4998dd0c..858f5cf575 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -1,6 +1,6 @@
/**
- * @file llsidepanelmaininventory.cpp
- * @brief Implementation of llsidepanelmaininventory.
+ * @file llpanelmaininventory.cpp
+ * @brief Implementation of llpanelmaininventory.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -95,8 +95,8 @@ private:
/// LLPanelMainInventory
///----------------------------------------------------------------------------
-LLPanelMainInventory::LLPanelMainInventory()
- : LLPanel(),
+LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
+ : LLPanel(p),
mActivePanel(NULL),
mSavedFolderState(NULL),
mFilterText(""),
@@ -193,6 +193,9 @@ BOOL LLPanelMainInventory::postBuild()
mMenuAdd->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", upload_cost);
mMenuAdd->getChild<LLMenuItemGL>("Bulk Upload")->setLabelArg("[COST]", upload_cost);
+ // Trigger callback for focus received so we can deselect items in inbox/outbox
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMainInventory::onFocusReceived, this));
+
return TRUE;
}
@@ -569,9 +572,18 @@ void LLPanelMainInventory::updateItemcountText()
{
text = getString("ItemcountUnknown");
}
+
+ // *TODO: Cache the LLUICtrl* for the ItemcountText control
getChild<LLUICtrl>("ItemcountText")->setValue(text);
}
+void LLPanelMainInventory::onFocusReceived()
+{
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ sidepanel_inventory->clearSelections(false, true, true);
+}
+
void LLPanelMainInventory::setFilterTextFromFilter()
{
mFilterText = mActivePanel->getFilter()->getFilterText();
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 2b2ee1c0c9..899931aa89 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -57,7 +57,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
public:
friend class LLFloaterInventoryFinder;
- LLPanelMainInventory();
+ LLPanelMainInventory(const LLPanel::Params& p = getDefaultParams());
~LLPanelMainInventory();
BOOL postBuild();
@@ -114,6 +114,8 @@ protected:
bool isSaveTextureEnabled(const LLSD& userdata);
void updateItemcountText();
+ void onFocusReceived();
+
private:
LLFloaterInventoryFinder* getFinder();
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
new file mode 100644
index 0000000000..f17f36a977
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -0,0 +1,236 @@
+/**
+ * @file llpanelmarketplaceinbox.cpp
+ * @brief Panel for marketplace inbox
+ *
+* $LicenseInfo:firstyear=2011&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 "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceinboxinventory.h"
+
+#include "llappviewer.h"
+#include "llbutton.h"
+#include "llinventorypanel.h"
+#include "llfolderview.h"
+#include "llsidepanelinventory.h"
+#include "llviewercontrol.h"
+
+
+static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
+
+const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams()
+{
+ return LLUICtrlFactory::getDefaultParams<LLPanelMarketplaceInbox>();
+}
+
+// protected
+LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p)
+ : LLPanel(p)
+ , mInventoryPanel(NULL)
+{
+}
+
+LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox()
+{
+ if (getChild<LLButton>("inbox_btn")->getToggleState())
+ {
+ gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString());
+ }
+}
+
+// virtual
+BOOL LLPanelMarketplaceInbox::postBuild()
+{
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLPanelMarketplaceInbox::handleLoginComplete, this));
+
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceInbox::onFocusReceived, this));
+
+ return TRUE;
+}
+
+void LLPanelMarketplaceInbox::onSelectionChange()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->updateVerbs();
+}
+
+
+void LLPanelMarketplaceInbox::handleLoginComplete()
+{
+ // Set us up as the class to drive the badge value for the sidebar_inventory button
+ LLSideTray::getInstance()->setTabButtonBadgeDriver("sidebar_inventory", this);
+}
+
+LLInventoryPanel * LLPanelMarketplaceInbox::setupInventoryPanel()
+{
+ LLView * inbox_inventory_placeholder = getChild<LLView>("inbox_inventory_placeholder");
+ LLView * inbox_inventory_parent = inbox_inventory_placeholder->getParent();
+
+ mInventoryPanel =
+ LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_inbox_inventory.xml",
+ inbox_inventory_parent,
+ LLInventoryPanel::child_registry_t::instance());
+
+ // 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
+ mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE);
+ mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceInbox::onSelectionChange, this));
+
+ // Set up the note to display when the inbox is empty
+ mInventoryPanel->getFilter()->setEmptyLookupMessage("InventoryInboxNoItems");
+
+ // Hide the placeholder text
+ inbox_inventory_placeholder->setVisible(FALSE);
+
+ return mInventoryPanel;
+}
+
+void LLPanelMarketplaceInbox::onFocusReceived()
+{
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ sidepanel_inventory->clearSelections(true, false, true);
+}
+
+BOOL LLPanelMarketplaceInbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
+{
+ *accept = ACCEPT_NO;
+ return TRUE;
+}
+
+U32 LLPanelMarketplaceInbox::getFreshItemCount() const
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+
+ //
+ // NOTE: When turning this on, be sure to test the no inbox/outbox case because this code probably
+ // will return "2" for the Inventory and LIBRARY top-levels when that happens.
+ //
+
+ U32 fresh_item_count = 0;
+
+ if (mInventoryPanel)
+ {
+ const LLFolderViewFolder * inbox_folder = mInventoryPanel->getRootFolder();
+
+ if (inbox_folder)
+ {
+ LLFolderViewFolder::folders_t::const_iterator folders_it = inbox_folder->getFoldersBegin();
+ LLFolderViewFolder::folders_t::const_iterator folders_end = inbox_folder->getFoldersEnd();
+
+ for (; folders_it != folders_end; ++folders_it)
+ {
+ const LLFolderViewFolder * folder_view = *folders_it;
+ const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast<const LLInboxFolderViewFolder*>(folder_view);
+
+ if (inbox_folder_view && inbox_folder_view->isFresh())
+ {
+ fresh_item_count++;
+ }
+ }
+ }
+ }
+
+ return fresh_item_count;
+#else
+ return getTotalItemCount();
+#endif
+}
+
+U32 LLPanelMarketplaceInbox::getTotalItemCount() const
+{
+ U32 item_count = 0;
+
+ if (mInventoryPanel)
+ {
+ const LLFolderViewFolder * inbox_folder = mInventoryPanel->getRootFolder();
+
+ if (inbox_folder)
+ {
+ item_count += inbox_folder->getFoldersCount();
+ }
+ }
+
+ return item_count;
+}
+
+std::string LLPanelMarketplaceInbox::getBadgeString() const
+{
+ std::string item_count_str("");
+
+ // If the inbox is visible, and the side panel is collapsed or expanded and not the inventory panel
+ if (getParent()->getVisible() &&
+ (LLSideTray::getInstance()->getCollapsed() || !LLSideTray::getInstance()->isPanelActive("sidepanel_inventory")))
+ {
+ U32 item_count = getFreshItemCount();
+
+ if (item_count)
+ {
+ item_count_str = llformat("%d", item_count);
+ }
+ }
+
+ return item_count_str;
+}
+
+void LLPanelMarketplaceInbox::draw()
+{
+ U32 item_count = getTotalItemCount();
+
+ LLView * fresh_new_count_view = getChildView("inbox_fresh_new_count");
+
+ if (item_count > 0)
+ {
+ std::string item_count_str = llformat("%d", item_count);
+
+ LLStringUtil::format_map_t args;
+ args["[NUM]"] = item_count_str;
+ getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelWithArg", args));
+
+#if SUPPORTING_FRESH_ITEM_COUNT
+ // set green text to fresh item count
+ U32 fresh_item_count = getFreshItemCount();
+ fresh_new_count_view->setVisible((fresh_item_count > 0));
+
+ if (fresh_item_count > 0)
+ {
+ getChild<LLUICtrl>("inbox_fresh_new_count")->setTextArg("[NUM]", llformat("%d", fresh_item_count));
+ }
+#else
+ fresh_new_count_view->setVisible(FALSE);
+#endif
+ }
+ else
+ {
+ getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelNoArg"));
+
+ fresh_new_count_view->setVisible(FALSE);
+ }
+
+ LLPanel::draw();
+}
diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h
new file mode 100644
index 0000000000..7b4ed137db
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinbox.h
@@ -0,0 +1,78 @@
+/**
+ * @file llpanelmarketplaceinbox.h
+ * @brief Panel for marketplace inbox
+ *
+* $LicenseInfo:firstyear=2011&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_LLPANELMARKETPLACEINBOX_H
+#define LL_LLPANELMARKETPLACEINBOX_H
+
+#include "llpanel.h"
+#include "llsidetray.h"
+
+class LLInventoryPanel;
+
+class LLPanelMarketplaceInbox : public LLPanel, public LLSideTrayTabBadgeDriver
+{
+public:
+
+ struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Params() {}
+ };
+
+ LOG_CLASS(LLPanelMarketplaceInbox);
+
+ // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8
+ static const LLPanelMarketplaceInbox::Params& getDefaultParams();
+
+ LLPanelMarketplaceInbox(const Params& p = getDefaultParams());
+ ~LLPanelMarketplaceInbox();
+
+ /*virtual*/ BOOL postBuild();
+
+ /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
+
+ /*virtual*/ void draw();
+
+ LLInventoryPanel * setupInventoryPanel();
+
+ U32 getFreshItemCount() const;
+ U32 getTotalItemCount() const;
+
+ std::string getBadgeString() const;
+
+private:
+ void handleLoginComplete();
+
+ void onSelectionChange();
+
+ void onFocusReceived();
+
+private:
+ LLInventoryPanel* mInventoryPanel;
+};
+
+
+#endif //LL_LLPANELMARKETPLACEINBOX_H
+
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
new file mode 100644
index 0000000000..2c97d539a1
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -0,0 +1,208 @@
+/**
+ * @file llpanelmarketplaceinboxinventory.cpp
+ * @brief LLInboxInventoryPanel 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 "llpanelmarketplaceinboxinventory.h"
+
+#include "llfolderview.h"
+#include "llfoldervieweventlistener.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llpanellandmarks.h"
+#include "llplacesinventorybridge.h"
+#include "llviewerfoldertype.h"
+
+
+//
+// statics
+//
+
+static LLDefaultChildRegistry::Register<LLInboxInventoryPanel> r1("inbox_inventory_panel");
+static LLDefaultChildRegistry::Register<LLInboxFolderViewFolder> r2("inbox_folder_view_folder");
+
+
+//
+// LLInboxInventoryPanel Implementation
+//
+
+LLInboxInventoryPanel::LLInboxInventoryPanel(const LLInboxInventoryPanel::Params& p)
+ : LLInventoryPanel(p)
+{
+}
+
+LLInboxInventoryPanel::~LLInboxInventoryPanel()
+{
+}
+
+// virtual
+void LLInboxInventoryPanel::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_INBOX, false, false);
+
+ // leslie -- temporary HACK to work around sim not creating inbox and 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 inbox inventory panel start_folder: " << start_folder_name << llendl;
+ }
+ }
+ // leslie -- end temporary HACK
+
+ if (root_id == LLUUID::null)
+ {
+ llwarns << "Inbox 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 * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge)
+{
+ LLInboxFolderViewFolder::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<LLInboxFolderViewFolder>(params);
+}
+
+
+//
+// LLInboxFolderViewFolder Implementation
+//
+
+LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
+ : LLFolderViewFolder(p)
+ , LLBadgeOwner(getHandle())
+ , mFresh(true)
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+ initBadgeParams(p.new_badge());
+#endif
+}
+
+LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
+{
+}
+
+// virtual
+time_t LLInboxFolderViewFolder::getCreationDate() const
+{
+ time_t ret_val = LLFolderViewFolder::getCreationDate();
+
+ if (!mCreationDate)
+ {
+ updateFlag();
+ }
+
+ return ret_val;
+}
+
+// virtual
+void LLInboxFolderViewFolder::draw()
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+ if (!badgeHasParent())
+ {
+ addBadgeToParentPanel();
+ }
+
+ setBadgeVisibility(mFresh);
+#endif
+
+ LLFolderViewFolder::draw();
+}
+
+void LLInboxFolderViewFolder::updateFlag() const
+{
+ LLDate saved_freshness_date = LLDate(gSavedPerAccountSettings.getString("LastInventoryInboxExpand"));
+ mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch());
+}
+
+void LLInboxFolderViewFolder::selectItem()
+{
+ mFresh = false;
+ LLFolderViewFolder::selectItem();
+}
+
+void LLInboxFolderViewFolder::toggleOpen()
+{
+ mFresh = false;
+ LLFolderViewFolder::toggleOpen();
+}
+
+void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc) const
+{
+ mCreationDate = creation_date_utc;
+ updateFlag();
+}
+
+
+// eof
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
new file mode 100644
index 0000000000..8946b9dc98
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -0,0 +1,92 @@
+/**
+ * @file llpanelmarketplaceinboxinventory.h
+ * @brief LLInboxInventoryPanel 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_INBOXINVENTORYPANEL_H
+#define LL_INBOXINVENTORYPANEL_H
+
+
+#include "llbadgeowner.h"
+#include "llinventorypanel.h"
+#include "llfolderviewitem.h"
+
+
+#define SUPPORTING_FRESH_ITEM_COUNT 0
+
+
+
+class LLInboxInventoryPanel : public LLInventoryPanel
+{
+public:
+ struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
+ {
+ Params() {}
+ };
+
+ LLInboxInventoryPanel(const Params& p);
+ ~LLInboxInventoryPanel();
+
+ // virtual
+ void buildFolderView(const LLInventoryPanel::Params& params);
+
+ // virtual
+ class LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge);
+};
+
+
+class LLInboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
+{
+public:
+ struct Params : public LLInitParam::Block<Params, LLFolderViewFolder::Params>
+ {
+ Optional<LLBadge::Params> new_badge;
+
+ Params()
+ : new_badge("new_badge")
+ {
+ }
+ };
+
+ LLInboxFolderViewFolder(const Params& p);
+ ~LLInboxFolderViewFolder();
+
+ time_t getCreationDate() const;
+
+ void draw();
+
+ void updateFlag() const;
+ void selectItem();
+ void toggleOpen();
+
+ bool isFresh() const { return mFresh; }
+
+protected:
+ void setCreationDate(time_t creation_date_utc) const;
+
+ mutable bool mFresh;
+};
+
+
+#endif //LL_INBOXINVENTORYPANEL_H
diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp
new file mode 100644
index 0000000000..d51a0d78fe
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceoutbox.cpp
@@ -0,0 +1,194 @@
+/**
+ * @file llpanelmarketplaceoutbox.cpp
+ * @brief Panel for marketplace outbox
+ *
+* $LicenseInfo:firstyear=2011&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 "llpanelmarketplaceoutbox.h"
+
+#include "llappviewer.h"
+#include "llbutton.h"
+#include "llcoros.h"
+#include "lleventcoro.h"
+#include "llinventorypanel.h"
+#include "llloadingindicator.h"
+#include "llpanelmarketplaceinbox.h"
+#include "llsidepanelinventory.h"
+#include "llsidetray.h"
+#include "lltimer.h"
+
+
+static LLRegisterPanelClassWrapper<LLPanelMarketplaceOutbox> t_panel_marketplace_outbox("panel_marketplace_outbox");
+
+const LLPanelMarketplaceOutbox::Params& LLPanelMarketplaceOutbox::getDefaultParams()
+{
+ return LLUICtrlFactory::getDefaultParams<LLPanelMarketplaceOutbox>();
+}
+
+// protected
+LLPanelMarketplaceOutbox::LLPanelMarketplaceOutbox(const Params& p)
+ : LLPanel(p)
+ , mInventoryPanel(NULL)
+ , mSyncButton(NULL)
+ , mSyncIndicator(NULL)
+ , mSyncInProgress(false)
+{
+}
+
+LLPanelMarketplaceOutbox::~LLPanelMarketplaceOutbox()
+{
+}
+
+// virtual
+BOOL LLPanelMarketplaceOutbox::postBuild()
+{
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLPanelMarketplaceOutbox::handleLoginComplete, this));
+
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceOutbox::onFocusReceived, this));
+
+ return TRUE;
+}
+
+void LLPanelMarketplaceOutbox::handleLoginComplete()
+{
+ mSyncButton = getChild<LLButton>("outbox_sync_btn");
+ mSyncButton->setCommitCallback(boost::bind(&LLPanelMarketplaceOutbox::onSyncButtonClicked, this));
+ mSyncButton->setEnabled(!isOutboxEmpty());
+
+ mSyncIndicator = getChild<LLLoadingIndicator>("outbox_sync_indicator");
+}
+
+void LLPanelMarketplaceOutbox::onFocusReceived()
+{
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ sidepanel_inventory->clearSelections(true, true, false);
+}
+
+void LLPanelMarketplaceOutbox::onSelectionChange()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->updateVerbs();
+}
+
+LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel()
+{
+ LLView * outbox_inventory_placeholder = getChild<LLView>("outbox_inventory_placeholder");
+ LLView * outbox_inventory_parent = outbox_inventory_placeholder->getParent();
+
+ mInventoryPanel =
+ LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_outbox_inventory.xml",
+ outbox_inventory_parent,
+ LLInventoryPanel::child_registry_t::instance());
+
+ // 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
+ mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE);
+ mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceOutbox::onSelectionChange, this));
+
+ // Set up the note to display when the outbox is empty
+ mInventoryPanel->getFilter()->setEmptyLookupMessage("InventoryOutboxNoItems");
+
+ // Hide the placeholder text
+ outbox_inventory_placeholder->setVisible(FALSE);
+
+ return mInventoryPanel;
+}
+
+bool LLPanelMarketplaceOutbox::isOutboxEmpty() const
+{
+ // TODO: Check for contents of outbox
+
+ return false;
+}
+
+bool LLPanelMarketplaceOutbox::isSyncInProgress() const
+{
+ return mSyncInProgress;
+}
+
+
+std::string gTimeDelayDebugFunc = "";
+
+void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel)
+{
+ waitForEventOn(self, "mainloop");
+
+ LLTimer delayTimer;
+ delayTimer.reset();
+ delayTimer.setTimerExpirySec(5.0f);
+
+ while (!delayTimer.hasExpired())
+ {
+ waitForEventOn(self, "mainloop");
+ }
+
+ outboxPanel->onSyncComplete();
+
+ gTimeDelayDebugFunc = "";
+}
+
+void LLPanelMarketplaceOutbox::onSyncButtonClicked()
+{
+ // TODO: Actually trigger sync to marketplace
+
+ mSyncInProgress = true;
+ updateSyncButtonStatus();
+
+ // Set a timer (for testing only)
+
+ gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this));
+}
+
+void LLPanelMarketplaceOutbox::onSyncComplete()
+{
+ mSyncInProgress = false;
+
+ updateSyncButtonStatus();
+}
+
+void LLPanelMarketplaceOutbox::updateSyncButtonStatus()
+{
+ if (isSyncInProgress())
+ {
+ mSyncButton->setVisible(false);
+
+ mSyncIndicator->setVisible(true);
+ mSyncIndicator->reset();
+ mSyncIndicator->start();
+ }
+ else
+ {
+ mSyncIndicator->stop();
+ mSyncIndicator->setVisible(false);
+
+ mSyncButton->setVisible(true);
+ mSyncButton->setEnabled(!isOutboxEmpty());
+ }
+}
diff --git a/indra/newview/llpanelmarketplaceoutbox.h b/indra/newview/llpanelmarketplaceoutbox.h
new file mode 100644
index 0000000000..8e2c35914d
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceoutbox.h
@@ -0,0 +1,82 @@
+/**
+ * @file llpanelmarketplaceoutbox.h
+ * @brief Panel for marketplace outbox
+ *
+* $LicenseInfo:firstyear=2011&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_LLPANELMARKETPLACEOUTBOX_H
+#define LL_LLPANELMARKETPLACEOUTBOX_H
+
+#include "llpanel.h"
+
+
+class LLButton;
+class LLInventoryPanel;
+class LLLoadingIndicator;
+
+
+class LLPanelMarketplaceOutbox : public LLPanel
+{
+public:
+
+ struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Params() {}
+ };
+
+ LOG_CLASS(LLPanelMarketplaceOutbox);
+
+ // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8
+ static const LLPanelMarketplaceOutbox::Params& getDefaultParams();
+
+ LLPanelMarketplaceOutbox(const Params& p = getDefaultParams());
+ ~LLPanelMarketplaceOutbox();
+
+ /*virtual*/ BOOL postBuild();
+
+ LLInventoryPanel * setupInventoryPanel();
+
+ bool isOutboxEmpty() const;
+ bool isSyncInProgress() const;
+
+ void onSyncComplete();
+
+protected:
+ void onSyncButtonClicked();
+ void updateSyncButtonStatus();
+
+ void handleLoginComplete();
+ void onFocusReceived();
+ void onSelectionChange();
+
+private:
+ LLInventoryPanel * mInventoryPanel;
+
+ LLButton * mSyncButton;
+ LLLoadingIndicator * mSyncIndicator;
+ bool mSyncInProgress;
+};
+
+
+#endif //LL_LLPANELMARKETPLACEOUTBOX_H
+
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 52917ff20b..c222bbb191 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -41,6 +41,7 @@
// project includes
#include "llagent.h"
#include "llbutton.h"
+#include "llcalc.h"
#include "llcheckboxctrl.h"
#include "llcolorswatch.h"
#include "llcombobox.h"
@@ -318,6 +319,8 @@ void LLPanelObject::getState( )
}
}
+ LLCalc* calcp = LLCalc::getInstance();
+
LLVOVolume *volobjp = NULL;
if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME))
{
@@ -334,6 +337,7 @@ void LLPanelObject::getState( )
// Disable all text input fields
clearCtrls();
+ calcp->clearAllVariables();
return;
}
@@ -360,12 +364,18 @@ void LLPanelObject::getState( )
mCtrlPosX->set( vec.mV[VX] );
mCtrlPosY->set( vec.mV[VY] );
mCtrlPosZ->set( vec.mV[VZ] );
+ calcp->setVar(LLCalc::X_POS, vec.mV[VX]);
+ calcp->setVar(LLCalc::Y_POS, vec.mV[VY]);
+ calcp->setVar(LLCalc::Z_POS, vec.mV[VZ]);
}
else
{
mCtrlPosX->clear();
mCtrlPosY->clear();
mCtrlPosZ->clear();
+ calcp->clearVar(LLCalc::X_POS);
+ calcp->clearVar(LLCalc::Y_POS);
+ calcp->clearVar(LLCalc::Z_POS);
}
@@ -380,12 +390,18 @@ void LLPanelObject::getState( )
mCtrlScaleX->set( vec.mV[VX] );
mCtrlScaleY->set( vec.mV[VY] );
mCtrlScaleZ->set( vec.mV[VZ] );
+ calcp->setVar(LLCalc::X_SCALE, vec.mV[VX]);
+ calcp->setVar(LLCalc::Y_SCALE, vec.mV[VY]);
+ calcp->setVar(LLCalc::Z_SCALE, vec.mV[VZ]);
}
else
{
mCtrlScaleX->clear();
mCtrlScaleY->clear();
mCtrlScaleZ->clear();
+ calcp->setVar(LLCalc::X_SCALE, 0.f);
+ calcp->setVar(LLCalc::Y_SCALE, 0.f);
+ calcp->setVar(LLCalc::Z_SCALE, 0.f);
}
mLabelSize->setEnabled( enable_scale );
@@ -405,12 +421,18 @@ void LLPanelObject::getState( )
mCtrlRotX->set( mCurEulerDegrees.mV[VX] );
mCtrlRotY->set( mCurEulerDegrees.mV[VY] );
mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] );
+ calcp->setVar(LLCalc::X_ROT, mCurEulerDegrees.mV[VX]);
+ calcp->setVar(LLCalc::Y_ROT, mCurEulerDegrees.mV[VY]);
+ calcp->setVar(LLCalc::Z_ROT, mCurEulerDegrees.mV[VZ]);
}
else
{
mCtrlRotX->clear();
mCtrlRotY->clear();
mCtrlRotZ->clear();
+ calcp->clearVar(LLCalc::X_ROT);
+ calcp->clearVar(LLCalc::Y_ROT);
+ calcp->clearVar(LLCalc::Z_ROT);
}
mLabelRotation->setEnabled( enable_rotate );
@@ -625,9 +647,9 @@ void LLPanelObject::getState( )
F32 end_t = volume_params.getEndT();
// Hollowness
- F32 hollow = volume_params.getHollow();
- mSpinHollow->set( 100.f * hollow );
-
+ F32 hollow = 100.f * volume_params.getHollow();
+ mSpinHollow->set( hollow );
+ calcp->setVar(LLCalc::HOLLOW, hollow);
// All hollow objects allow a shape to be selected.
if (hollow > 0.f)
{
@@ -679,6 +701,10 @@ void LLPanelObject::getState( )
mSpinCutEnd ->set( cut_end );
mCtrlPathBegin ->set( adv_cut_begin );
mCtrlPathEnd ->set( adv_cut_end );
+ calcp->setVar(LLCalc::CUT_BEGIN, cut_begin);
+ calcp->setVar(LLCalc::CUT_END, cut_end);
+ calcp->setVar(LLCalc::PATH_BEGIN, adv_cut_begin);
+ calcp->setVar(LLCalc::PATH_END, adv_cut_end);
// Twist
F32 twist = volume_params.getTwist();
@@ -697,18 +723,24 @@ void LLPanelObject::getState( )
mSpinTwist ->set( twist );
mSpinTwistBegin ->set( twist_begin );
+ calcp->setVar(LLCalc::TWIST_END, twist);
+ calcp->setVar(LLCalc::TWIST_BEGIN, twist_begin);
// Shear
F32 shear_x = volume_params.getShearX();
F32 shear_y = volume_params.getShearY();
mSpinShearX->set( shear_x );
mSpinShearY->set( shear_y );
+ calcp->setVar(LLCalc::X_SHEAR, shear_x);
+ calcp->setVar(LLCalc::Y_SHEAR, shear_y);
// Taper
F32 taper_x = volume_params.getTaperX();
F32 taper_y = volume_params.getTaperY();
mSpinTaperX->set( taper_x );
mSpinTaperY->set( taper_y );
+ calcp->setVar(LLCalc::X_TAPER, taper_x);
+ calcp->setVar(LLCalc::Y_TAPER, taper_y);
// Radius offset.
F32 radius_offset = volume_params.getRadiusOffset();
@@ -738,10 +770,12 @@ void LLPanelObject::getState( )
}
}
mSpinRadiusOffset->set( radius_offset);
+ calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset);
// Revolutions
F32 revolutions = volume_params.getRevolutions();
mSpinRevolutions->set( revolutions );
+ calcp->setVar(LLCalc::REVOLUTIONS, revolutions);
// Skew
F32 skew = volume_params.getSkew();
@@ -766,6 +800,7 @@ void LLPanelObject::getState( )
}
}
mSpinSkew->set( skew );
+ calcp->setVar(LLCalc::SKEW, skew);
}
// Compute control visibility, label names, and twist range.
@@ -869,6 +904,8 @@ void LLPanelObject::getState( )
case MI_RING:
mSpinScaleX->set( scale_x );
mSpinScaleY->set( scale_y );
+ calcp->setVar(LLCalc::X_HOLE, scale_x);
+ calcp->setVar(LLCalc::Y_HOLE, scale_y);
mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE);
mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X);
mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE);
@@ -883,6 +920,14 @@ void LLPanelObject::getState( )
mSpinScaleX->setMaxValue(1.f);
mSpinScaleY->setMinValue(-1.f);
mSpinScaleY->setMaxValue(1.f);
+
+ // Torus' Hole Size is Box/Cyl/Prism's Taper
+ calcp->setVar(LLCalc::X_TAPER, 1.f - scale_x);
+ calcp->setVar(LLCalc::Y_TAPER, 1.f - scale_y);
+
+ // Box/Cyl/Prism have no hole size
+ calcp->setVar(LLCalc::X_HOLE, 0.f);
+ calcp->setVar(LLCalc::Y_HOLE, 0.f);
}
break;
}
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index bfe6cab52f..83ba8afbfc 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -44,6 +44,7 @@
#include "llcallbacklist.h"
#include "llbuycurrencyhtml.h"
#include "llfloaterreg.h"
+#include "llfolderview.h"
#include "llinventorybridge.h"
#include "llinventorydefines.h"
#include "llinventoryfilter.h"
@@ -58,8 +59,10 @@
#include "llselectmgr.h"
#include "llsidetray.h"
#include "llstatusbar.h"
+#include "lltooldraganddrop.h"
#include "lltrans.h"
#include "llviewerassettype.h"
+#include "llviewerinventory.h"
#include "llviewerregion.h"
#include "llviewerobjectlist.h"
#include "llviewermessage.h"
@@ -80,6 +83,7 @@ protected:
LLAssetType::EType mAssetType;
LLInventoryType::EType mInventoryType;
+ LLInventoryObject* findInvObject() const;
LLInventoryItem* findItem() const;
public:
@@ -159,16 +163,22 @@ LLTaskInvFVBridge::LLTaskInvFVBridge(
}
}
-LLInventoryItem* LLTaskInvFVBridge::findItem() const
+LLInventoryObject* LLTaskInvFVBridge::findInvObject() const
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (object)
{
- return dynamic_cast<LLInventoryItem*>(object->getInventoryObject(mUUID));
+ return object->getInventoryObject(mUUID);
}
return NULL;
}
+
+LLInventoryItem* LLTaskInvFVBridge::findItem() const
+{
+ return dynamic_cast<LLInventoryItem*>(findInvObject());
+}
+
void LLTaskInvFVBridge::showProperties()
{
show_task_item_profile(mUUID, mPanel->getTaskUUID());
@@ -292,21 +302,15 @@ const std::string& LLTaskInvFVBridge::getDisplayName() const
if(item)
{
- if(item->getParentUUID().isNull())
- {
- if(item->getName() == "Contents")
- {
- mDisplayName.assign(LLTrans::getString("ViewerObjectContents"));
- }
- else
- {
- mDisplayName.assign(item->getName());
- }
- }
- else
+ 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"))
{
- 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);
@@ -697,7 +701,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);
@@ -725,6 +729,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;
@@ -761,7 +786,7 @@ void LLTaskCategoryBridge::openItem()
BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
{
//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
- if(mPanel)
+ if(mPanel && mUUID.notNull())
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
if(object)
@@ -1349,79 +1374,81 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*
LLTaskInvFVBridge* new_bridge = NULL;
const LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(object);
const U32 itemflags = ( NULL == item ? 0 : item->getFlags() );
- LLAssetType::EType type = object->getType();
+ LLAssetType::EType type = object ? object->getType() : LLAssetType::AT_CATEGORY;
+ LLUUID object_id = object ? object->getUUID() : LLUUID::null;
+ std::string object_name = object ? object->getName() : std::string();
switch(type)
{
case LLAssetType::AT_TEXTURE:
new_bridge = new LLTaskTextureBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_SOUND:
new_bridge = new LLTaskSoundBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_LANDMARK:
new_bridge = new LLTaskLandmarkBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_CALLINGCARD:
new_bridge = new LLTaskCallingCardBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_SCRIPT:
// OLD SCRIPTS DEPRECATED - JC
llwarns << "Old script" << llendl;
//new_bridge = new LLTaskOldScriptBridge(panel,
- // object->getUUID(),
- // object->getName());
+ // object_id,
+ // object_name);
break;
case LLAssetType::AT_OBJECT:
new_bridge = new LLTaskObjectBridge(panel,
- object->getUUID(),
- object->getName(),
+ object_id,
+ object_name,
itemflags);
break;
case LLAssetType::AT_NOTECARD:
new_bridge = new LLTaskNotecardBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_ANIMATION:
new_bridge = new LLTaskAnimationBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_GESTURE:
new_bridge = new LLTaskGestureBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_CLOTHING:
case LLAssetType::AT_BODYPART:
new_bridge = new LLTaskWearableBridge(panel,
- object->getUUID(),
- object->getName(),
+ object_id,
+ object_name,
itemflags);
break;
case LLAssetType::AT_CATEGORY:
new_bridge = new LLTaskCategoryBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_LSL_TEXT:
new_bridge = new LLTaskLSLBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_MESH:
new_bridge = new LLTaskMeshBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
default:
llinfos << "Unhandled inventory type (llassetstorage.h): "
@@ -1521,6 +1548,7 @@ void LLPanelObjectInventory::reset()
p.task_id = getTaskUUID();
p.parent_panel = this;
p.tool_tip= LLTrans::getString("PanelContentsTooltip");
+ p.listener = LLTaskInvFVBridge::createObjectBridge(this, NULL);
mFolders = LLUICtrlFactory::create<LLFolderView>(p);
// this ensures that we never say "searching..." or "no items found"
mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 62f582c343..35e2e96bab 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -36,7 +36,7 @@
#include "lloutfitobserver.h"
#include "llcofwearables.h"
#include "llfilteredwearablelist.h"
-#include "llfolderviewitem.h"
+#include "llfolderview.h"
#include "llinventory.h"
#include "llinventoryitemslist.h"
#include "llviewercontrol.h"
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 68ecb0165c..ce8057eead 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -32,6 +32,7 @@
#include "llparcel.h"
#include "message.h"
+#include "llexpandabletextbox.h"
#include "lliconctrl.h"
#include "lllineeditor.h"
#include "lltextbox.h"
@@ -70,6 +71,8 @@ static std::string icon_scripts;
static std::string icon_scripts_no;
static std::string icon_damage;
static std::string icon_damage_no;
+static std::string icon_see_avs_on;
+static std::string icon_see_avs_off;
LLPanelPlaceProfile::LLPanelPlaceProfile()
: LLPanelPlaceInfo(),
@@ -114,6 +117,8 @@ BOOL LLPanelPlaceProfile::postBuild()
mScriptsText = getChild<LLTextBox>("scripts_value");
mDamageIcon = getChild<LLIconCtrl>("damage_icon");
mDamageText = getChild<LLTextBox>("damage_value");
+ mSeeAVsIcon = getChild<LLIconCtrl>("see_avatars_icon");
+ mSeeAVsText = getChild<LLTextBox>("see_avatars_value");
mRegionNameText = getChild<LLTextBox>("region_name");
mRegionTypeText = getChild<LLTextBox>("region_type");
@@ -153,6 +158,8 @@ BOOL LLPanelPlaceProfile::postBuild()
icon_scripts_no = getString("icon_ScriptsNo");
icon_damage = getString("icon_Damage");
icon_damage_no = getString("icon_DamageNo");
+ icon_see_avs_on = getString("icon_SeeAVs_On");
+ icon_see_avs_off = getString("icon_SeeAVs_Off");
return TRUE;
}
@@ -182,6 +189,8 @@ void LLPanelPlaceProfile::resetLocation()
mScriptsText->setText(loading);
mDamageIcon->setValue(loading);
mDamageText->setText(loading);
+ mSeeAVsIcon->setValue(loading);
+ mSeeAVsText->setText(loading);
mRegionNameText->setValue(loading);
mRegionTypeText->setValue(loading);
@@ -219,6 +228,34 @@ void LLPanelPlaceProfile::setInfoType(EInfoType type)
getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
+ // If we came from search we want larger description area, approx. 10 lines (see STORM-1311).
+ // Don't use the maximum available space because that leads to nasty artifacts
+ // in text editor and expandable text box.
+ {
+ const S32 SEARCH_DESC_HEIGHT = 150;
+
+ // Remember original geometry (once).
+ static const S32 sOrigDescVPad = getChildView("parcel_title")->getRect().mBottom - mDescEditor->getRect().mTop;
+ static const S32 sOrigDescHeight = mDescEditor->getRect().getHeight();
+ static const S32 sOrigMRIconVPad = mDescEditor->getRect().mBottom - mMaturityRatingIcon->getRect().mTop;
+ static const S32 sOrigMRTextVPad = mDescEditor->getRect().mBottom - mMaturityRatingText->getRect().mTop;
+
+ // Resize the description.
+ const S32 desc_height = is_info_type_agent ? sOrigDescHeight : SEARCH_DESC_HEIGHT;
+ const S32 desc_top = getChildView("parcel_title")->getRect().mBottom - sOrigDescVPad;
+ LLRect desc_rect = mDescEditor->getRect();
+ desc_rect.setOriginAndSize(desc_rect.mLeft, desc_top - desc_height, desc_rect.getWidth(), desc_height);
+ mDescEditor->reshape(desc_rect.getWidth(), desc_rect.getHeight());
+ mDescEditor->setRect(desc_rect);
+ mDescEditor->updateTextShape();
+
+ // Move the maturity rating icon/text accordingly.
+ const S32 mr_icon_bottom = mDescEditor->getRect().mBottom - sOrigMRIconVPad - mMaturityRatingIcon->getRect().getHeight();
+ const S32 mr_text_bottom = mDescEditor->getRect().mBottom - sOrigMRTextVPad - mMaturityRatingText->getRect().getHeight();
+ mMaturityRatingIcon->setOrigin(mMaturityRatingIcon->getRect().mLeft, mr_icon_bottom);
+ mMaturityRatingText->setOrigin(mMaturityRatingText->getRect().mLeft, mr_text_bottom);
+ }
+
switch(type)
{
case AGENT:
@@ -414,8 +451,19 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
mDamageText->setText(off);
}
+ if (parcel->getSeeAVs())
+ {
+ mSeeAVsIcon->setValue(icon_see_avs_on);
+ mSeeAVsText->setText(on);
+ }
+ else
+ {
+ mSeeAVsIcon->setValue(icon_see_avs_off);
+ mSeeAVsText->setText(off);
+ }
+
mRegionNameText->setText(region->getName());
- mRegionTypeText->setText(region->getSimProductName());
+ mRegionTypeText->setText(region->getLocalizedSimProductName());
// Determine parcel owner
if (parcel->isPublic())
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index f28b3b3832..a33fc12ce4 100644
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -91,6 +91,8 @@ private:
LLTextBox* mScriptsText;
LLIconCtrl* mDamageIcon;
LLTextBox* mDamageText;
+ LLIconCtrl* mSeeAVsIcon;
+ LLTextBox* mSeeAVsText;
LLTextBox* mRegionNameText;
LLTextBox* mRegionTypeText;
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 30949f8f02..7087541fc8 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -102,6 +102,7 @@ void LLPanelTopInfoBar::initParcelIcons()
mParcelIcon[BUILD_ICON] = getChild<LLIconCtrl>("build_icon");
mParcelIcon[SCRIPTS_ICON] = getChild<LLIconCtrl>("scripts_icon");
mParcelIcon[DAMAGE_ICON] = getChild<LLIconCtrl>("damage_icon");
+ mParcelIcon[SEE_AVATARS_ICON] = getChild<LLIconCtrl>("see_avatars_icon");
mParcelIcon[VOICE_ICON]->setToolTip(LLTrans::getString("LocationCtrlVoiceTooltip"));
mParcelIcon[FLY_ICON]->setToolTip(LLTrans::getString("LocationCtrlFlyTooltip"));
@@ -109,6 +110,7 @@ void LLPanelTopInfoBar::initParcelIcons()
mParcelIcon[BUILD_ICON]->setToolTip(LLTrans::getString("LocationCtrlBuildTooltip"));
mParcelIcon[SCRIPTS_ICON]->setToolTip(LLTrans::getString("LocationCtrlScriptsTooltip"));
mParcelIcon[DAMAGE_ICON]->setToolTip(LLTrans::getString("LocationCtrlDamageTooltip"));
+ mParcelIcon[SEE_AVATARS_ICON]->setToolTip(LLTrans::getString("LocationCtrlSeeAVsTooltip"));
mParcelIcon[VOICE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, VOICE_ICON));
mParcelIcon[FLY_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, FLY_ICON));
@@ -116,6 +118,7 @@ void LLPanelTopInfoBar::initParcelIcons()
mParcelIcon[BUILD_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, BUILD_ICON));
mParcelIcon[SCRIPTS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SCRIPTS_ICON));
mParcelIcon[DAMAGE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, DAMAGE_ICON));
+ mParcelIcon[SEE_AVATARS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SEE_AVATARS_ICON));
mDamageText->setText(LLStringExplicit("100%"));
}
@@ -295,6 +298,7 @@ void LLPanelTopInfoBar::updateParcelIcons()
bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel);
bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel);
+ bool see_avs = current_parcel->getSeeAVs();
// Most icons are "block this ability"
mParcelIcon[VOICE_ICON]->setVisible( !allow_voice );
@@ -304,6 +308,7 @@ void LLPanelTopInfoBar::updateParcelIcons()
mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage );
mDamageText->setVisible(allow_damage);
+ mParcelIcon[SEE_AVATARS_ICON]->setVisible( !see_avs );
layoutParcelIcons();
}
@@ -409,6 +414,9 @@ void LLPanelTopInfoBar::onParcelIconClick(EParcelIcon icon)
case DAMAGE_ICON:
LLNotificationsUtil::add("NotSafe");
break;
+ case SEE_AVATARS_ICON:
+ LLNotificationsUtil::add("SeeAvatars");
+ break;
case ICON_COUNT:
break;
// no default to get compiler warning when a new icon gets added
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index db922ef424..583e91d15e 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -65,12 +65,13 @@ private:
enum EParcelIcon
{
VOICE_ICON = 0,
- FLY_ICON,
- PUSH_ICON,
- BUILD_ICON,
- SCRIPTS_ICON,
- DAMAGE_ICON,
- ICON_COUNT
+ FLY_ICON, // 1
+ PUSH_ICON, // 2
+ BUILD_ICON, // 3
+ SCRIPTS_ICON, // 4
+ DAMAGE_ICON, // 5
+ SEE_AVATARS_ICON, // 6
+ ICON_COUNT // 7 total
};
/**
diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp
index 4a80bbbe5e..6be2ea6481 100644
--- a/indra/newview/llpanelvoicedevicesettings.cpp
+++ b/indra/newview/llpanelvoicedevicesettings.cpp
@@ -41,6 +41,7 @@
static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
+static const std::string DEFAULT_DEVICE("Default");
LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
@@ -68,10 +69,17 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()
// set mic volume tuning slider based on last mic volume setting
volume_slider->setValue(mMicVolume);
- getChild<LLComboBox>("voice_input_device")->setCommitCallback(
+ mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
+ mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
+
+ mCtrlInputDevices->setCommitCallback(
boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this));
- getChild<LLComboBox>("voice_output_device")->setCommitCallback(
+ mCtrlOutputDevices->setCommitCallback(
boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this));
+
+ mLocalizedDeviceNames[DEFAULT_DEVICE] = getString("default_text");
+ mLocalizedDeviceNames["No Device"] = getString("name_no_device");
+ mLocalizedDeviceNames["Default System Device"] = getString("name_default_system_device");
return TRUE;
}
@@ -138,14 +146,14 @@ void LLPanelVoiceDeviceSettings::apply()
std::string s;
if(mCtrlInputDevices)
{
- s = mCtrlInputDevices->getSimple();
+ s = mCtrlInputDevices->getValue().asString();
gSavedSettings.setString("VoiceInputAudioDevice", s);
mInputDevice = s;
}
if(mCtrlOutputDevices)
{
- s = mCtrlOutputDevices->getSimple();
+ s = mCtrlOutputDevices->getValue().asString();
gSavedSettings.setString("VoiceOutputAudioDevice", s);
mOutputDevice = s;
}
@@ -166,10 +174,10 @@ void LLPanelVoiceDeviceSettings::cancel()
gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice);
if(mCtrlInputDevices)
- mCtrlInputDevices->setSimple(mInputDevice);
+ mCtrlInputDevices->setValue(mInputDevice);
if(mCtrlOutputDevices)
- mCtrlOutputDevices->setSimple(mOutputDevice);
+ mCtrlOutputDevices->setValue(mOutputDevice);
gSavedSettings.setF32("AudioLevelMic", mMicVolume);
LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
@@ -188,9 +196,6 @@ void LLPanelVoiceDeviceSettings::refresh()
LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume);
// Fill in popup menus
- mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
- mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
-
bool device_settings_available = LLVoiceClient::getInstance()->deviceSettingsAvailable();
if (mCtrlInputDevices)
@@ -212,14 +217,14 @@ void LLPanelVoiceDeviceSettings::refresh()
if(mCtrlInputDevices)
{
mCtrlInputDevices->removeall();
- mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM );
- mCtrlInputDevices->setSimple(mInputDevice);
+ mCtrlInputDevices->add(getLocalizedDeviceName(mInputDevice), mInputDevice, ADD_BOTTOM);
+ mCtrlInputDevices->setValue(mInputDevice);
}
if(mCtrlOutputDevices)
{
mCtrlOutputDevices->removeall();
- mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM );
- mCtrlOutputDevices->setSimple(mOutputDevice);
+ mCtrlOutputDevices->add(getLocalizedDeviceName(mOutputDevice), mOutputDevice, ADD_BOTTOM);
+ mCtrlOutputDevices->setValue(mOutputDevice);
}
mDevicesUpdated = FALSE;
}
@@ -230,35 +235,41 @@ void LLPanelVoiceDeviceSettings::refresh()
if(mCtrlInputDevices)
{
mCtrlInputDevices->removeall();
- mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM );
+ mCtrlInputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);
for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin();
iter != LLVoiceClient::getInstance()->getCaptureDevices().end();
iter++)
{
- mCtrlInputDevices->add( *iter, ADD_BOTTOM );
+ mCtrlInputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM);
}
- if(!mCtrlInputDevices->setSimple(mInputDevice))
+ // Fix invalid input audio device preference.
+ if (!mCtrlInputDevices->setSelectedByValue(mInputDevice, TRUE))
{
- mCtrlInputDevices->setSimple(getString("default_text"));
+ mCtrlInputDevices->setValue(DEFAULT_DEVICE);
+ gSavedSettings.setString("VoiceInputAudioDevice", DEFAULT_DEVICE);
+ mInputDevice = DEFAULT_DEVICE;
}
}
if(mCtrlOutputDevices)
{
mCtrlOutputDevices->removeall();
- mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM );
+ mCtrlOutputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);
for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin();
iter != LLVoiceClient::getInstance()->getRenderDevices().end(); iter++)
{
- mCtrlOutputDevices->add( *iter, ADD_BOTTOM );
+ mCtrlOutputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM);
}
- if(!mCtrlOutputDevices->setSimple(mOutputDevice))
+ // Fix invalid output audio device preference.
+ if (!mCtrlOutputDevices->setSelectedByValue(mOutputDevice, TRUE))
{
- mCtrlOutputDevices->setSimple(getString("default_text"));
+ mCtrlOutputDevices->setValue(DEFAULT_DEVICE);
+ gSavedSettings.setString("VoiceOutputAudioDevice", DEFAULT_DEVICE);
+ mOutputDevice = DEFAULT_DEVICE;
}
}
mDevicesUpdated = TRUE;
@@ -292,12 +303,19 @@ void LLPanelVoiceDeviceSettings::cleanup()
}
}
+// returns English name if no translation found
+std::string LLPanelVoiceDeviceSettings::getLocalizedDeviceName(const std::string& en_dev_name)
+{
+ std::map<std::string, std::string>::const_iterator it = mLocalizedDeviceNames.find(en_dev_name);
+ return it != mLocalizedDeviceNames.end() ? it->second : en_dev_name;
+}
+
void LLPanelVoiceDeviceSettings::onCommitInputDevice()
{
if(LLVoiceClient::getInstance())
{
LLVoiceClient::getInstance()->setCaptureDevice(
- getChild<LLComboBox>("voice_input_device")->getValue().asString());
+ mCtrlInputDevices->getValue().asString());
}
}
@@ -306,6 +324,6 @@ void LLPanelVoiceDeviceSettings::onCommitOutputDevice()
if(LLVoiceClient::getInstance())
{
LLVoiceClient::getInstance()->setRenderDevice(
- getChild<LLComboBox>("voice_output_device")->getValue().asString());
+ mCtrlInputDevices->getValue().asString());
}
}
diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h
index d09476d469..ba3bcad0dc 100644
--- a/indra/newview/llpanelvoicedevicesettings.h
+++ b/indra/newview/llpanelvoicedevicesettings.h
@@ -49,6 +49,8 @@ public:
void setUseTuningMode(bool use) { mUseTuningMode = use; };
protected:
+ std::string getLocalizedDeviceName(const std::string& en_dev_name);
+
void onCommitInputDevice();
void onCommitOutputDevice();
@@ -59,6 +61,7 @@ protected:
class LLComboBox *mCtrlOutputDevices;
BOOL mDevicesUpdated;
bool mUseTuningMode;
+ std::map<std::string, std::string> mLocalizedDeviceNames;
};
#endif // LL_LLPANELVOICEDEVICESETTINGS_H
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 911a9e5dda..f19b54c1d4 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -38,6 +38,8 @@
#include "llsidetray.h"
#include "llviewermenu.h"
#include "llwearableitemslist.h"
+#include "llsdserialize.h"
+#include "llclipboard.h"
// Context menu and Gear menu helper.
static void edit_outfit()
@@ -58,6 +60,7 @@ public:
registrar.add("Gear.Edit", boost::bind(&edit_outfit));
registrar.add("Gear.TakeOff", boost::bind(&LLWearingGearMenu::onTakeOff, this));
+ registrar.add("Gear.Copy", boost::bind(&LLPanelWearing::copyToClipboard, mPanelWearing));
enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2));
@@ -174,8 +177,8 @@ LLPanelWearing::~LLPanelWearing()
if (gInventory.containsObserver(mCategoriesObserver))
{
gInventory.removeObserver(mCategoriesObserver);
- delete mCategoriesObserver;
}
+ delete mCategoriesObserver;
}
BOOL LLPanelWearing::postBuild()
@@ -280,4 +283,25 @@ void LLPanelWearing::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
mCOFItemsList->getSelectedUUIDs(selected_uuids);
}
+void LLPanelWearing::copyToClipboard()
+{
+ std::string text;
+ std::vector<LLSD> data;
+ mCOFItemsList->getValues(data);
+
+ for(std::vector<LLSD>::const_iterator iter = data.begin(); iter != data.end();)
+ {
+ LLSD uuid = (*iter);
+ LLViewerInventoryItem* item = gInventory.getItem(uuid);
+
+ iter++;
+ if (item != NULL)
+ {
+ // Append a newline to all but the last line
+ text += iter != data.end() ? item->getName() + "\n" : item->getName();
+ }
+ }
+
+ gClipboard.copyFromString(utf8str_to_wstring(text));
+}
// EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 157b2c4c5f..9a212b3cca 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -60,6 +60,8 @@ public:
/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
+ /*virtual*/ void copyToClipboard();
+
boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
bool hasItemSelected();
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 54053cf89f..fb1153980a 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -798,11 +798,19 @@ void LLParticipantList::LLParticipantListMenu::toggleMuteVoice(const LLSD& userd
bool LLParticipantList::LLParticipantListMenu::isGroupModerator()
{
- // Agent is in Group Call
+ if (!mParent.mSpeakerMgr)
+ {
+ llwarns << "Speaker manager is missing" << llendl;
+ return false;
+ }
+
+ // Is session a group call/chat?
if(gAgent.isInGroup(mParent.mSpeakerMgr->getSessionID()))
{
- // Agent is Moderator
- return mParent.mSpeakerMgr->findSpeaker(gAgentID)->mIsModerator;
+ LLSpeaker* speaker = mParent.mSpeakerMgr->findSpeaker(gAgentID).get();
+
+ // Is agent a moderator?
+ return speaker && speaker->mIsModerator;
}
return false;
}
diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
index 29e262199e..f7823f4fe8 100644
--- a/indra/newview/llplacesinventorypanel.cpp
+++ b/indra/newview/llplacesinventorypanel.cpp
@@ -35,6 +35,7 @@
#include "llinventoryfunctions.h"
#include "llpanellandmarks.h"
#include "llplacesinventorybridge.h"
+#include "llviewerfoldertype.h"
static LLDefaultChildRegistry::Register<LLPlacesInventoryPanel> r("places_inventory_panel");
@@ -56,72 +57,44 @@ LLPlacesInventoryPanel::~LLPlacesInventoryPanel()
delete mSavedFolderState;
}
-BOOL LLPlacesInventoryPanel::postBuild()
+void LLPlacesInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
{
- LLInventoryPanel::postBuild();
+ // Determine the root folder in case specified, and
+ // build the views starting with that folder.
+ const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(params.start_folder);
- // clear Contents();
- {
- mFolderRoot->destroyView();
- mFolderRoot->getParent()->removeChild(mFolderRoot);
- mFolderRoot->die();
-
- if( mScroller )
- {
- removeChild( mScroller );
- mScroller->die();
- mScroller = NULL;
- }
- mFolderRoot = NULL;
- }
-
-
- mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
+ LLUUID root_id;
- // create root folder
+ if ("LIBRARY" == params.start_folder())
{
- LLRect folder_rect(0,
- 0,
- getRect().getWidth(),
- 0);
- LLPlacesFolderView::Params p;
- p.name = getName();
- p.title = getLabel();
- p.rect = folder_rect;
- p.parent_panel = this;
- mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p);
- mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);
+ root_id = gInventory.getLibraryRootFolderID();
}
-
- mCommitCallbackRegistrar.popScope();
-
- mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar);
-
- // scroller
+ else
{
- LLRect scroller_view_rect = getRect();
- scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
- LLScrollContainer::Params p;
- p.name("Inventory Scroller");
- p.rect(scroller_view_rect);
- p.follows.flags(FOLLOWS_ALL);
- p.reserve_scroll_corner(true);
- p.tab_stop(true);
- mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+ root_id = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
}
- addChild(mScroller);
- mScroller->addChild(mFolderRoot);
-
- mFolderRoot->setScrollContainer(mScroller);
- mFolderRoot->addChild(mFolderRoot->mStatusTextBox);
-
- // cut subitems
- mFolderRoot->setUseEllipses(true);
-
- return TRUE;
+ LLRect folder_rect(0,
+ 0,
+ getRect().getWidth(),
+ 0);
+ LLPlacesFolderView::Params p;
+ p.name = getName();
+ p.title = getLabel();
+ p.rect = folder_rect;
+ p.listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY,
+ LLAssetType::AT_CATEGORY,
+ LLInventoryType::IT_CATEGORY,
+ this,
+ NULL,
+ root_id);
+ p.parent_panel = this;
+ p.allow_multiselect = mAllowMultiSelect;
+ p.use_ellipses = true; // truncate inventory item text so remove horizontal scroller
+ mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p);
}
+
// save current folder open state
void LLPlacesInventoryPanel::saveFolderState()
{
diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h
index 6641871a0b..f647e7f970 100644
--- a/indra/newview/llplacesinventorypanel.h
+++ b/indra/newview/llplacesinventorypanel.h
@@ -46,7 +46,7 @@ public:
LLPlacesInventoryPanel(const Params& p);
~LLPlacesInventoryPanel();
- /*virtual*/ BOOL postBuild();
+ /*virtual*/ void buildFolderView(const LLInventoryPanel::Params& params);
void saveFolderState();
void restoreFolderState();
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index a90f23d637..119fc95cf0 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -444,18 +444,15 @@ void LLPreview::handleReshape(const LLRect& new_rect, bool by_user)
LLMultiPreview::LLMultiPreview()
: LLMultiFloater(LLSD())
{
- // *TODO: There should be a .xml file for this
- const LLRect& nextrect = LLFloaterReg::getFloaterRect("preview"); // place where the next preview should show up
- if (nextrect.getWidth() > 0)
- {
- setRect(nextrect);
- }
- else
+ // start with a rect in the top-left corner ; will get resized
+ LLRect rect;
+ rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 400);
+ setRect(rect);
+
+ LLFloater* last_floater = LLFloaterReg::getLastFloaterInGroup("preview");
+ if (last_floater)
{
- // start with a rect in the top-left corner ; will get resized
- LLRect rect;
- rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 400);
- setRect(rect);
+ stackWith(*last_floater);
}
setTitle(LLTrans::getString("MultiPreviewTitle"));
buildTabContainer();
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 9f5c55bad1..f47928b131 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -42,6 +42,7 @@
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
+#include "llkeyboard.h"
#include "llmultigesture.h"
#include "llnotificationsutil.h"
#include "llradiogroup.h"
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 31fde5d58a..a1f38f1854 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -50,28 +50,26 @@
#include "llappviewer.h"
#include "llweb.h"
#include "lluictrlfactory.h"
+#include "llpanellogin.h"
LLProgressView* LLProgressView::sInstance = NULL;
S32 gStartImageWidth = 1;
S32 gStartImageHeight = 1;
-const F32 FADE_IN_TIME = 1.f;
-
-const std::string ANIMATION_FILENAME = "Login Sequence ";
-const std::string ANIMATION_SUFFIX = ".jpg";
-const F32 TOTAL_LOGIN_TIME = 10.f; // seconds, wild guess at time from GL context to actual world view
-S32 gLastStartAnimationFrame = 0; // human-style indexing, first image = 1
-const S32 ANIMATION_FRAMES = 1; //13;
+const F32 FADE_TO_WORLD_TIME = 1.0f;
static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view");
-
// XUI: Translate
LLProgressView::LLProgressView()
: LLPanel(),
mPercentDone( 0.f ),
+ mMediaCtrl( NULL ),
mMouseDownInActiveArea( false ),
- mUpdateEvents("LLProgressView")
+ mUpdateEvents("LLProgressView"),
+ mFadeToWorldTimer(),
+ mFadeFromLoginTimer(),
+ mStartupComplete(false)
{
mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1));
}
@@ -80,9 +78,17 @@ BOOL LLProgressView::postBuild()
{
mProgressBar = getChild<LLProgressBar>("login_progress_bar");
+ // media control that is used to play intro video
+ mMediaCtrl = getChild<LLMediaCtrl>("login_media_panel");
+ mMediaCtrl->setVisible( false ); // hidden initially
+ mMediaCtrl->addObserver( this ); // watch events
+
+ LLViewerMedia::setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID());
+
mCancelBtn = getChild<LLButton>("cancel_btn");
mCancelBtn->setClickedCallback( LLProgressView::onCancelButtonClicked, NULL );
- mFadeTimer.stop();
+ mFadeToWorldTimer.stop();
+ mFadeFromLoginTimer.stop();
getChild<LLTextBox>("title_text")->setText(LLStringExplicit(LLAppViewer::instance()->getSecondLifeTitle()));
@@ -125,35 +131,68 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask)
return TRUE;
}
+void LLProgressView::revealIntroPanel()
+{
+ // if user hasn't yet seen intro video
+ std::string intro_url = gSavedSettings.getString("PostFirstLoginIntroURL");
+ if ( intro_url.length() > 0 &&
+ gSavedSettings.getBOOL("BrowserJavascriptEnabled") &&
+ gSavedSettings.getBOOL("PostFirstLoginIntroViewed" ) == FALSE )
+ {
+ // hide the progress bar
+ getChild<LLView>("stack1")->setVisible(false);
+
+ // navigate to intro URL and reveal widget
+ mMediaCtrl->navigateTo( intro_url );
+ mMediaCtrl->setVisible( TRUE );
+
+
+ // flag as having seen the new user post login intro
+ gSavedSettings.setBOOL("PostFirstLoginIntroViewed", TRUE );
+
+ mMediaCtrl->setFocus(TRUE);
+ }
+
+ mFadeFromLoginTimer.start();
+}
+
+void LLProgressView::setStartupComplete()
+{
+ mStartupComplete = true;
+
+ // if we are not showing a video, fade into world
+ if (!mMediaCtrl->getVisible())
+ {
+ mFadeFromLoginTimer.stop();
+ mFadeToWorldTimer.start();
+ }
+}
+
void LLProgressView::setVisible(BOOL visible)
{
// hiding progress view
if (getVisible() && !visible)
{
- mFadeTimer.start();
+ LLPanel::setVisible(FALSE);
}
// showing progress view
- else if (visible && (!getVisible() || mFadeTimer.getStarted()))
+ else if (visible && (!getVisible() || mFadeToWorldTimer.getStarted()))
{
setFocus(TRUE);
- mFadeTimer.stop();
- mProgressTimer.start();
+ mFadeToWorldTimer.stop();
LLPanel::setVisible(TRUE);
}
}
-void LLProgressView::draw()
+void LLProgressView::drawStartTexture(F32 alpha)
{
- static LLTimer timer;
-
- // Paint bitmap if we've got one
glPushMatrix();
if (gStartTexture)
{
LLGLSUIDefault gls_ui;
gGL.getTexUnit(0)->bind(gStartTexture.get());
- gGL.color4f(1.f, 1.f, 1.f, mFadeTimer.getStarted() ? clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, FADE_IN_TIME, 1.f, 0.f) : 1.f);
+ gGL.color4f(1.f, 1.f, 1.f, alpha);
F32 image_aspect = (F32)gStartImageWidth / (F32)gStartImageHeight;
S32 width = getRect().getWidth();
S32 height = getRect().getHeight();
@@ -179,23 +218,75 @@ void LLProgressView::draw()
gl_rect_2d(getRect());
}
glPopMatrix();
+}
+
+
+void LLProgressView::draw()
+{
+ static LLTimer timer;
+
+ if (mFadeFromLoginTimer.getStarted())
+ {
+ F32 alpha = clamp_rescale(mFadeFromLoginTimer.getElapsedTimeF32(), 0.f, FADE_TO_WORLD_TIME, 0.f, 1.f);
+ LLViewDrawContext context(alpha);
+
+ if (!mMediaCtrl->getVisible())
+ {
+ drawStartTexture(alpha);
+ }
+
+ LLPanel::draw();
+
+ if (mFadeFromLoginTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME )
+ {
+ mFadeFromLoginTimer.stop();
+ LLPanelLogin::closePanel();
+ }
- // Handle fade-in animation
- if (mFadeTimer.getStarted())
+ return;
+ }
+
+ // handle fade out to world view when we're asked to
+ if (mFadeToWorldTimer.getStarted())
{
+ // draw fading panel
+ F32 alpha = clamp_rescale(mFadeToWorldTimer.getElapsedTimeF32(), 0.f, FADE_TO_WORLD_TIME, 1.f, 0.f);
+ LLViewDrawContext context(alpha);
+
+ drawStartTexture(alpha);
LLPanel::draw();
- if (mFadeTimer.getElapsedTimeF32() > FADE_IN_TIME)
+
+ // faded out completely - remove panel and reveal world
+ if (mFadeToWorldTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME )
{
+ mFadeToWorldTimer.stop();
+
+ LLViewerMedia::setOnlyAudibleMediaTextureID(LLUUID::null);
+
// Fade is complete, release focus
gFocusMgr.releaseFocusIfNeeded( this );
+
+ // turn off panel that hosts intro so we see the world
LLPanel::setVisible(FALSE);
- mFadeTimer.stop();
+
+ // stop observing events since we no longer care
+ mMediaCtrl->remObserver( this );
+
+ // hide the intro
+ mMediaCtrl->setVisible( false );
+
+ // navigate away from intro page to something innocuous since 'unload' is broken right now
+ //mMediaCtrl->navigateTo( "about:blank" );
+
+ // FIXME: this causes a crash that i haven't been able to fix
+ mMediaCtrl->unloadMediaSource();
gStartTexture = NULL;
}
return;
}
+ drawStartTexture(1.0f);
// draw children
LLPanel::draw();
}
@@ -307,3 +398,29 @@ bool LLProgressView::onAlertModal(const LLSD& notify)
}
return false;
}
+
+void LLProgressView::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
+{
+ // the intro web content calls javascript::window.close() when it's done
+ if( event == MEDIA_EVENT_CLOSE_REQUEST )
+ {
+ if (mStartupComplete)
+ {
+ //make sure other timer has stopped
+ mFadeFromLoginTimer.stop();
+ mFadeToWorldTimer.start();
+ }
+ else
+ {
+ // hide the media ctrl and wait for startup to be completed before fading to world
+ mMediaCtrl->setVisible(false);
+ if (mMediaCtrl->getMediaPlugin())
+ {
+ mMediaCtrl->getMediaPlugin()->stop();
+ }
+
+ // show the progress bar
+ getChild<LLView>("stack1")->setVisible(true);
+ }
+ }
+}
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index be1744f08a..fac00ad04d 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -28,6 +28,7 @@
#define LL_LLPROGRESSVIEW_H
#include "llpanel.h"
+#include "llmediactrl.h"
#include "llframetimer.h"
#include "llevents.h"
@@ -35,7 +36,10 @@ class LLImageRaw;
class LLButton;
class LLProgressBar;
-class LLProgressView : public LLPanel
+class LLProgressView :
+ public LLPanel,
+ public LLViewerMediaObserver
+
{
public:
LLProgressView();
@@ -44,32 +48,47 @@ public:
BOOL postBuild();
/*virtual*/ void draw();
+ void drawStartTexture(F32 alpha);
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
/*virtual*/ void setVisible(BOOL visible);
+ // inherited from LLViewerMediaObserver
+ /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+
void setText(const std::string& text);
void setPercent(const F32 percent);
// Set it to NULL when you want to eliminate the message.
void setMessage(const std::string& msg);
+ // turns on (under certain circumstances) the into video after login
+ void revealIntroPanel();
+
+ void setStartupComplete();
+
void setCancelButtonVisible(BOOL b, const std::string& label);
static void onCancelButtonClicked( void* );
static void onClickMessage(void*);
bool onAlertModal(const LLSD& sd);
+ // note - this is not just hiding the intro panel - it also hides the parent panel
+ // and is used when the intro is finished and we want to show the world
+ void removeIntroPanel();
+
protected:
LLProgressBar* mProgressBar;
+ LLMediaCtrl* mMediaCtrl;
F32 mPercentDone;
std::string mMessage;
LLButton* mCancelBtn;
- LLFrameTimer mFadeTimer;
- LLFrameTimer mProgressTimer;
+ LLFrameTimer mFadeToWorldTimer;
+ LLFrameTimer mFadeFromLoginTimer;
LLRect mOutlineRect;
bool mMouseDownInActiveArea;
+ bool mStartupComplete;
// The LLEventStream mUpdateEvents depends upon this class being a singleton
// to avoid pump name conflicts.
diff --git a/indra/newview/llregioninfomodel.cpp b/indra/newview/llregioninfomodel.cpp
new file mode 100644
index 0000000000..698c4f9bb9
--- /dev/null
+++ b/indra/newview/llregioninfomodel.cpp
@@ -0,0 +1,217 @@
+/**
+ * @file llregioninfomodel.cpp
+ * @brief Region info model
+ *
+ * $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 "llregioninfomodel.h"
+
+// libs
+#include "message.h"
+#include "llregionflags.h"
+
+// viewer
+#include "llagent.h"
+#include "llviewerregion.h"
+
+void LLRegionInfoModel::reset()
+{
+ mSimAccess = 0;
+ mAgentLimit = 0;
+
+ mRegionFlags = 0;
+ mEstateID = 0;
+ mParentEstateID = 0;
+
+ mPricePerMeter = 0;
+ mRedirectGridX = 0;
+ mRedirectGridY = 0;
+
+ mBillableFactor = 0.0f;
+ mObjectBonusFactor = 0.0f;
+ mWaterHeight = 0.0f;
+ mTerrainRaiseLimit = 0.0f;
+ mTerrainLowerLimit = 0.0f;
+ mSunHour = 0.0f;
+
+ mUseEstateSun = false;
+
+ mSimType.clear();
+ mSimName.clear();
+}
+
+LLRegionInfoModel::LLRegionInfoModel()
+{
+ reset();
+}
+
+boost::signals2::connection LLRegionInfoModel::setUpdateCallback(const update_signal_t::slot_type& cb)
+{
+ return mUpdateSignal.connect(cb);
+}
+
+void LLRegionInfoModel::sendRegionTerrain(const LLUUID& invoice) const
+{
+ std::string buffer;
+ std::vector<std::string> strings;
+
+ // ==========================================
+ // Assemble and send setregionterrain message
+ // "setregionterrain"
+ // strings[0] = float water height
+ // strings[1] = float terrain raise
+ // strings[2] = float terrain lower
+ // strings[3] = 'Y' use estate time
+ // strings[4] = 'Y' fixed sun
+ // strings[5] = float sun_hour
+ // strings[6] = from estate, 'Y' use global time
+ // strings[7] = from estate, 'Y' fixed sun
+ // strings[8] = from estate, float sun_hour
+
+ // *NOTE: this resets estate sun info.
+ BOOL estate_global_time = true;
+ BOOL estate_fixed_sun = false;
+ F32 estate_sun_hour = 0.f;
+
+ buffer = llformat("%f", mWaterHeight);
+ strings.push_back(buffer);
+ buffer = llformat("%f", mTerrainRaiseLimit);
+ strings.push_back(buffer);
+ buffer = llformat("%f", mTerrainLowerLimit);
+ strings.push_back(buffer);
+ buffer = llformat("%s", (mUseEstateSun ? "Y" : "N"));
+ strings.push_back(buffer);
+ buffer = llformat("%s", (getUseFixedSun() ? "Y" : "N"));
+ strings.push_back(buffer);
+ buffer = llformat("%f", mSunHour);
+ strings.push_back(buffer);
+ buffer = llformat("%s", (estate_global_time ? "Y" : "N") );
+ strings.push_back(buffer);
+ buffer = llformat("%s", (estate_fixed_sun ? "Y" : "N") );
+ strings.push_back(buffer);
+ buffer = llformat("%f", estate_sun_hour);
+ strings.push_back(buffer);
+
+ sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings);
+}
+
+bool LLRegionInfoModel::getUseFixedSun() const
+{
+ return mRegionFlags & REGION_FLAGS_SUN_FIXED;
+}
+
+void LLRegionInfoModel::setUseFixedSun(bool fixed)
+{
+ if (fixed)
+ {
+ mRegionFlags |= REGION_FLAGS_SUN_FIXED;
+ }
+ else
+ {
+ mRegionFlags &= ~REGION_FLAGS_SUN_FIXED;
+ }
+}
+
+void LLRegionInfoModel::update(LLMessageSystem* msg)
+{
+ reset();
+
+ msg->getStringFast(_PREHASH_RegionInfo, _PREHASH_SimName, mSimName);
+ msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_EstateID, mEstateID);
+ msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_ParentEstateID, mParentEstateID);
+ msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_RegionFlags, mRegionFlags);
+ msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_SimAccess, mSimAccess);
+ msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_MaxAgents, mAgentLimit);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_ObjectBonusFactor, mObjectBonusFactor);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_BillableFactor, mBillableFactor);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, mWaterHeight);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, mTerrainRaiseLimit);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, mTerrainLowerLimit);
+ msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_PricePerMeter, mPricePerMeter);
+ msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridX, mRedirectGridX);
+ msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridY, mRedirectGridY);
+
+ msg->getBOOL(_PREHASH_RegionInfo, _PREHASH_UseEstateSun, mUseEstateSun);
+
+ // actually the "last set" sun hour, not the current sun hour. JC
+ msg->getF32(_PREHASH_RegionInfo, _PREHASH_SunHour, mSunHour);
+ LL_DEBUGS("Windlight Sync") << "Got region sun hour: " << mSunHour << LL_ENDL;
+
+ // the only reasonable way to decide if we actually have any data is to
+ // check to see if any of these fields have nonzero sizes
+ if (msg->getSize(_PREHASH_RegionInfo2, _PREHASH_ProductSKU) > 0 ||
+ msg->getSize(_PREHASH_RegionInfo2, "ProductName") > 0)
+ {
+ msg->getString(_PREHASH_RegionInfo2, "ProductName", mSimType);
+ }
+
+ // Let interested parties know that region info has been updated.
+ mUpdateSignal();
+}
+
+// static
+void LLRegionInfoModel::sendEstateOwnerMessage(
+ LLMessageSystem* msg,
+ const std::string& request,
+ const LLUUID& invoice,
+ const std::vector<std::string>& strings)
+{
+ LLViewerRegion* cur_region = gAgent.getRegion();
+
+ if (!cur_region)
+ {
+ llwarns << "Agent region not set" << llendl;
+ return;
+ }
+
+ llinfos << "Sending estate request '" << request << "'" << llendl;
+ msg->newMessage("EstateOwnerMessage");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+ msg->nextBlock("MethodData");
+ msg->addString("Method", request);
+ msg->addUUID("Invoice", invoice);
+
+ if (strings.empty())
+ {
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", NULL);
+ }
+ else
+ {
+ std::vector<std::string>::const_iterator it = strings.begin();
+ std::vector<std::string>::const_iterator end = strings.end();
+ for (unsigned i = 0; it != end; ++it, ++i)
+ {
+ lldebugs << "- [" << i << "] " << (*it) << llendl;
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", *it);
+ }
+ }
+
+ msg->sendReliable(cur_region->getHost());
+}
diff --git a/indra/newview/llregioninfomodel.h b/indra/newview/llregioninfomodel.h
new file mode 100644
index 0000000000..89efd82767
--- /dev/null
+++ b/indra/newview/llregioninfomodel.h
@@ -0,0 +1,99 @@
+/**
+ * @file llregioninfomodel.h
+ * @brief Region info model
+ *
+ * $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_LLREGIONINFOMODEL_H
+#define LL_LLREGIONINFOMODEL_H
+
+class LLMessageSystem;
+
+#include "llsingleton.h"
+
+/**
+ * Contains region info, notifies interested parties of its changes.
+ */
+class LLRegionInfoModel : public LLSingleton<LLRegionInfoModel>
+{
+ LOG_CLASS(LLRegionInfoModel);
+
+public:
+ typedef boost::signals2::signal<void()> update_signal_t;
+ boost::signals2::connection setUpdateCallback(const update_signal_t::slot_type& cb);
+
+ void sendRegionTerrain(const LLUUID& invoice) const; /// upload region terrain data
+
+ bool getUseFixedSun() const;
+
+ void setUseFixedSun(bool fixed);
+
+ // *TODO: Add getters and make the data private.
+ U8 mSimAccess;
+ U8 mAgentLimit;
+
+ U32 mRegionFlags;
+ U32 mEstateID;
+ U32 mParentEstateID;
+
+ S32 mPricePerMeter;
+ S32 mRedirectGridX;
+ S32 mRedirectGridY;
+
+ F32 mBillableFactor;
+ F32 mObjectBonusFactor;
+ F32 mWaterHeight;
+ F32 mTerrainRaiseLimit;
+ F32 mTerrainLowerLimit;
+ F32 mSunHour; // 6..30
+
+ BOOL mUseEstateSun;
+
+ std::string mSimName;
+ std::string mSimType;
+
+protected:
+ friend class LLSingleton<LLRegionInfoModel>;
+ friend class LLViewerRegion;
+
+ LLRegionInfoModel();
+
+ /**
+ * Refresh model with data from the incoming server message.
+ */
+ void update(LLMessageSystem* msg);
+
+private:
+ void reset();
+
+ // *FIXME: Duplicated code from LLPanelRegionInfo
+ static void sendEstateOwnerMessage(
+ LLMessageSystem* msg,
+ const std::string& request,
+ const LLUUID& invoice,
+ const std::vector<std::string>& strings);
+
+ update_signal_t mUpdateSignal;
+};
+
+#endif // LL_LLREGIONINFOMODEL_H
diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp
index 8e8fc9dd25..09e799e4f7 100644
--- a/indra/newview/llsceneview.cpp
+++ b/indra/newview/llsceneview.cpp
@@ -83,6 +83,9 @@ void LLSceneView::draw()
S32 total_visible_triangles[] = {0, 0};
S32 total_triangles[] = {0, 0};
+ S32 total_visible_bytes[] = {0, 0};
+ S32 total_bytes[] = {0, 0};
+
//streaming cost
std::vector<F32> streaming_cost[2];
F32 total_streaming[] = { 0.f, 0.f };
@@ -122,13 +125,19 @@ void LLSceneView::draw()
visible_triangles[idx].push_back(visible);
triangles[idx].push_back(high_triangles);
- F32 streaming = object->getStreamingCost();
+ S32 bytes = 0;
+ S32 visible_bytes = 0;
+
+ F32 streaming = object->getStreamingCost(&bytes, &visible_bytes);
total_streaming[idx] += streaming;
streaming_cost[idx].push_back(streaming);
F32 physics = object->getPhysicsCost();
total_physics[idx] += physics;
physics_cost[idx].push_back(physics);
+
+ total_bytes[idx] += bytes;
+ total_visible_bytes[idx] += visible_bytes;
}
}
}
@@ -279,8 +288,8 @@ void LLSceneView::draw()
total_visible += tri_count;
}
- std::string label = llformat("%s Object Triangle Counts (Ktris) -- [%.2f, %.2f] Mean: %.2f Median: %.2f Visible: %.2f/%.2f",
- category[idx], tri_domain[0]/1024.f, tri_domain[1]/1024.f, (total/count)/1024.f, triangles[idx][count/2]/1024.f, total_visible_triangles[idx]/1024.f, total_triangles[idx]/1024.f);
+ std::string label = llformat("%s Object Triangle Counts (Ktris) -- Visible: %.2f/%.2f (%.2f KB Visible)",
+ category[idx], total_visible_triangles[idx]/1024.f, total_triangles[idx]/1024.f, total_visible_bytes[idx]/1024.f);
LLFontGL::getFontMonospace()->renderUTF8(label,
0 , tri_rect.mLeft, tri_rect.mTop+margin, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
diff --git a/indra/newview/llsecapi.h b/indra/newview/llsecapi.h
index b65cf37e7f..0935a0005b 100644
--- a/indra/newview/llsecapi.h
+++ b/indra/newview/llsecapi.h
@@ -160,7 +160,7 @@ public:
// base class for a list of certificates.
-class LLCertificateVector : public LLRefCount
+class LLCertificateVector : public LLThreadSafeRefCount
{
public:
@@ -286,8 +286,8 @@ bool operator!=(const LLCertificateVector::iterator& _lhs, const LLCertificateVe
#define CRED_AUTHENTICATOR_TYPE_HASH "hash"
//
// LLCredential - interface for credentials providing the following functionality:
-// * persistance of credential information based on grid (for saving username/password)
-// * serialization to an OGP identifier/authenticator pair
+// * Persistence of credential information based on grid (for saving username/password)
+// * Serialization to an OGP identifier/authenticator pair
//
class LLCredential : public LLRefCount
{
diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp
index 90e8ff0aae..8d64c8c04f 100644
--- a/indra/newview/llsechandler_basic.cpp
+++ b/indra/newview/llsechandler_basic.cpp
@@ -1005,6 +1005,8 @@ void LLBasicCertificateStore::validate(int validation_policy,
LLPointer<LLCertificateChain> 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)
{
@@ -1209,12 +1211,12 @@ void LLSecAPIBasicHandler::init()
// with the product
std::string ca_file_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");
llinfos << "app path " << ca_file_path << llendl;
- LLBasicCertificateStore app_ca_store = LLBasicCertificateStore(ca_file_path);
+ LLPointer<LLBasicCertificateStore> app_ca_store = new LLBasicCertificateStore(ca_file_path);
// push the applicate CA files into the store, therefore adding any new CA certs that
// updated
- for(LLCertificateVector::iterator i = app_ca_store.begin();
- i != app_ca_store.end();
+ for(LLCertificateVector::iterator i = app_ca_store->begin();
+ i != app_ca_store->end();
i++)
{
mStore->add(*i);
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 8fa4065fa6..26b2b0f5c3 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -5123,7 +5123,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
gGL.getTexUnit(0)->bind(mSilhouetteImagep);
LLGLSPipelineSelection gls_select;
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
LLGLEnable blend(GL_BLEND);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
@@ -5250,7 +5249,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
}
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point)
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 16729f045a..28ec11d1c7 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -32,6 +32,7 @@
#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
+#include "llfolderview.h"
#include "llinventorypanel.h"
#include "llfiltereditor.h"
#include "llfloaterreg.h"
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 31ea542743..a800611aac 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -29,33 +29,147 @@
#include "llagent.h"
#include "llappearancemgr.h"
+#include "llappviewer.h"
#include "llavataractions.h"
#include "llbutton.h"
+#include "lldate.h"
#include "llfirstuse.h"
+#include "llfoldertype.h"
+#include "llhttpclient.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
+#include "llinventoryobserver.h"
#include "llinventorypanel.h"
+#include "lllayoutstack.h"
#include "lloutfitobserver.h"
#include "llpanelmaininventory.h"
+#include "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceoutbox.h"
+#include "llselectmgr.h"
#include "llsidepaneliteminfo.h"
#include "llsidepaneltaskinfo.h"
+#include "llstring.h"
#include "lltabcontainer.h"
-#include "llselectmgr.h"
+#include "llviewermedia.h"
#include "llweb.h"
static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
-LLSidepanelInventory::LLSidepanelInventory()
- : LLPanel(),
- mItemPanel(NULL),
- mPanelMainInventory(NULL)
+//
+// Constants
+//
+
+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 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 INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack";
+
+static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";
+static const char * const MARKETPLACE_OUTBOX_PANEL = "marketplace_outbox";
+
+//
+// Helpers
+//
+
+class LLInboxOutboxAddedObserver : public LLInventoryCategoryAddedObserver
{
+public:
+ LLInboxOutboxAddedObserver(LLSidepanelInventory * sidepanelInventory)
+ : LLInventoryCategoryAddedObserver()
+ , mSidepanelInventory(sidepanelInventory)
+ {
+ }
+
+ void done()
+ {
+ for (cat_vec_t::iterator it = mAddedCategories.begin(); it != mAddedCategories.end(); ++it)
+ {
+ LLViewerInventoryCategory* added_category = *it;
+
+ LLFolderType::EType added_category_type = added_category->getPreferredType();
+
+ switch (added_category_type)
+ {
+ case LLFolderType::FT_INBOX:
+ mSidepanelInventory->observeInboxModifications(added_category->getUUID());
+ break;
+ case LLFolderType::FT_OUTBOX:
+ mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
+ break;
+ case LLFolderType::FT_NONE:
+ // HACK until sim update to properly create folder with system type
+ if (added_category->getName() == "Received Items")
+ {
+ mSidepanelInventory->observeInboxModifications(added_category->getUUID());
+ }
+ else if (added_category->getName() == "Merchant Outbox")
+ {
+ mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+private:
+ LLSidepanelInventory * mSidepanelInventory;
+};
+
+//
+// Implementation
+//
+LLSidepanelInventory::LLSidepanelInventory()
+ : LLPanel()
+ , mItemPanel(NULL)
+ , mInventoryPanelInbox(NULL)
+ , mInventoryPanelOutbox(NULL)
+ , mPanelMainInventory(NULL)
+ , mInboxEnabled(false)
+ , mOutboxEnabled(false)
+ , mCategoriesObserver(NULL)
+ , mInboxOutboxAddedObserver(NULL)
+{
//buildFromFile( "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
}
LLSidepanelInventory::~LLSidepanelInventory()
{
+ if (mCategoriesObserver && gInventory.containsObserver(mCategoriesObserver))
+ {
+ gInventory.removeObserver(mCategoriesObserver);
+ }
+ delete mCategoriesObserver;
+
+ if (mInboxOutboxAddedObserver && gInventory.containsObserver(mInboxOutboxAddedObserver))
+ {
+ gInventory.removeObserver(mInboxOutboxAddedObserver);
+ }
+ delete mInboxOutboxAddedObserver;
+}
+
+void handleInventoryDisplayInboxChanged()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox"));
+}
+
+void handleInventoryDisplayOutboxChanged()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->enableOutbox(gSavedSettings.getBOOL("InventoryDisplayOutbox"));
}
BOOL LLSidepanelInventory::postBuild()
@@ -85,7 +199,7 @@ BOOL LLSidepanelInventory::postBuild()
mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
- mPanelMainInventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+ mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs");
tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));
@@ -103,7 +217,7 @@ BOOL LLSidepanelInventory::postBuild()
// UI elements from item panel
{
- mItemPanel = findChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+ mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
@@ -119,13 +233,259 @@ BOOL LLSidepanelInventory::postBuild()
}
}
+ // Marketplace inbox/outbox setup
+ {
+ LLLayoutStack* stack = getChild<LLLayoutStack>(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);
+
+ // Collapse both inbox and outbox panels
+ stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), true);
+ stack->collapsePanel(getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME), true);
+
+ // Set up button states and callbacks
+ LLButton * inbox_button = getChild<LLButton>(INBOX_BUTTON_NAME);
+ LLButton * outbox_button = getChild<LLButton>(OUTBOX_BUTTON_NAME);
+
+ inbox_button->setToggleState(false);
+ outbox_button->setToggleState(false);
+
+ inbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleInboxBtn, this));
+ outbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleOutboxBtn, this));
+
+ // Set the inbox and outbox visible based on debug settings (final setting comes from http request below)
+ enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox"));
+ enableOutbox(gSavedSettings.getBOOL("InventoryDisplayOutbox"));
+
+ // Trigger callback for after login so we can setup to track inbox and outbox changes after initial inventory load
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLSidepanelInventory::handleLoginComplete, this));
+ }
+
+ gSavedSettings.getControl("InventoryDisplayInbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayInboxChanged));
+ gSavedSettings.getControl("InventoryDisplayOutbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayOutboxChanged));
+
return TRUE;
}
+void LLSidepanelInventory::handleLoginComplete()
+{
+ //
+ // Track inbox and outbox folder changes
+ //
+
+ const bool do_not_create_folder = false;
+ const bool do_not_find_in_library = false;
+
+ const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, do_not_create_folder, do_not_find_in_library);
+ const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, do_not_create_folder, do_not_find_in_library);
+
+ // Set up observer to listen for creation of inbox and outbox if at least one of them doesn't exist
+ if (inbox_id.isNull() || outbox_id.isNull())
+ {
+ observeInboxOutboxCreation();
+ }
+
+ // Set up observer for inbox changes, if we have an inbox already
+ if (!inbox_id.isNull())
+ {
+ observeInboxModifications(inbox_id);
+
+ // Enable the display of the inbox if it exists
+ enableInbox(true);
+ }
+
+ // 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.
+ }
+}
+
+void LLSidepanelInventory::observeInboxOutboxCreation()
+{
+ //
+ // Set up observer to track inbox and outbox folder creation
+ //
+
+ if (mInboxOutboxAddedObserver == NULL)
+ {
+ mInboxOutboxAddedObserver = new LLInboxOutboxAddedObserver(this);
+
+ gInventory.addObserver(mInboxOutboxAddedObserver);
+ }
+}
+
+void LLSidepanelInventory::observeInboxModifications(const LLUUID& inboxID)
+{
+ //
+ // Track inbox and outbox folder changes
+ //
+
+ if (inboxID.isNull())
+ {
+ llwarns << "Attempting to track modifications to non-existant inbox" << llendl;
+ return;
+ }
+
+ if (mCategoriesObserver == NULL)
+ {
+ mCategoriesObserver = new LLInventoryCategoriesObserver();
+ gInventory.addObserver(mCategoriesObserver);
+ }
+
+ mCategoriesObserver->addCategory(inboxID, boost::bind(&LLSidepanelInventory::onInboxChanged, this, inboxID));
+
+ //
+ // Trigger a load for the entire contents of the Inbox
+ //
+
+ LLInventoryModelBackgroundFetch::instance().start(inboxID);
+
+ //
+ // Set up the inbox inventory view
+ //
+
+ LLPanelMarketplaceInbox * inbox = getChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
+ mInventoryPanelInbox = inbox->setupInventoryPanel();
+}
+
+
+void LLSidepanelInventory::observeOutboxModifications(const LLUUID& outboxID)
+{
+ //
+ // Track outbox folder changes
+ //
+
+ if (outboxID.isNull())
+ {
+ llwarns << "Attempting to track modifications to non-existant outbox" << llendl;
+ return;
+ }
+
+ if (mCategoriesObserver == NULL)
+ {
+ mCategoriesObserver = new LLInventoryCategoriesObserver();
+ gInventory.addObserver(mCategoriesObserver);
+ }
+
+ mCategoriesObserver->addCategory(outboxID, boost::bind(&LLSidepanelInventory::onOutboxChanged, this, outboxID));
+
+ //
+ // Set up the outbox inventory view
+ //
+
+ LLPanelMarketplaceOutbox * outbox = getChild<LLPanelMarketplaceOutbox>(MARKETPLACE_OUTBOX_PANEL);
+ mInventoryPanelOutbox = outbox->setupInventoryPanel();
+}
+
+void LLSidepanelInventory::enableInbox(bool enabled)
+{
+ mInboxEnabled = enabled;
+ getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME)->setVisible(enabled);
+}
+
+void LLSidepanelInventory::enableOutbox(bool enabled)
+{
+ mOutboxEnabled = enabled;
+ getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME)->setVisible(enabled);
+}
+
+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<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
+ if (inbox)
+ {
+ getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
+ onToggleInboxBtn();
+ }
+}
+
+void LLSidepanelInventory::onOutboxChanged(const LLUUID& outbox_id)
+{
+ // Perhaps use this to track outbox changes?
+}
+
+bool manageInboxOutboxPanels(LLLayoutStack * stack,
+ 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);
+
+ 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);
+ otherButton->setToggleState(false);
+ }
+
+ stack->collapsePanel(pressedPanel, !expand);
+
+ // Enable user_resize on main inventory panel only when a marketplace box is expanded
+ stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, expand);
+
+ return expand;
+}
+
+void LLSidepanelInventory::onToggleInboxBtn()
+{
+ LLLayoutStack* stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
+ LLButton* pressedButton = getChild<LLButton>(INBOX_BUTTON_NAME);
+ LLLayoutPanel* pressedPanel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
+ LLButton* otherButton = getChild<LLButton>(OUTBOX_BUTTON_NAME);
+ LLLayoutPanel* otherPanel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
+
+ manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel);
+
+ gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString());
+}
+
+void LLSidepanelInventory::onToggleOutboxBtn()
+{
+ LLLayoutStack* stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
+ LLButton* pressedButton = getChild<LLButton>(OUTBOX_BUTTON_NAME);
+ LLLayoutPanel* pressedPanel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
+ LLButton* otherButton = getChild<LLButton>(INBOX_BUTTON_NAME);
+ LLLayoutPanel* otherPanel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
+
+ manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel);
+}
+
void LLSidepanelInventory::onOpen(const LLSD& key)
{
LLFirstUse::newInventory(false);
+ // Expand the inbox if we have fresh items
+ LLPanelMarketplaceInbox * inbox = findChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
+ if (inbox && (inbox->getFreshItemCount() > 0))
+ {
+ getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
+ onToggleInboxBtn();
+ }
+
if(key.size() == 0)
return;
@@ -171,26 +531,27 @@ void LLSidepanelInventory::onShopButtonClicked()
void LLSidepanelInventory::performActionOnSelection(const std::string &action)
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+ LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
if (!current_item)
{
- return;
+ if (mInventoryPanelInbox)
+ {
+ current_item = mInventoryPanelInbox->getRootFolder()->getCurSelectedItem();
+ }
+
+ if (!current_item)
+ {
+ return;
+ }
}
- current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getModel(), action);
+
+ current_item->getListener()->performAction(mPanelMainInventory->getActivePanel()->getModel(), action);
}
void LLSidepanelInventory::onWearButtonClicked()
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- if (!panel_main_inventory)
- {
- llassert(panel_main_inventory != NULL);
- return;
- }
-
// Get selected items set.
- const std::set<LLUUID> selected_uuids_set = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> selected_uuids_set = LLAvatarActions::getInventorySelectedUUIDs();
if (selected_uuids_set.empty()) return; // nothing selected
// Convert the set to a vector.
@@ -326,34 +687,28 @@ void LLSidepanelInventory::updateVerbs()
bool LLSidepanelInventory::canShare()
{
- LLPanelMainInventory* panel_main_inventory =
- mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+ LLInventoryPanel* inbox = mInventoryPanelInbox;
- if (!panel_main_inventory)
+ // Avoid flicker in the Recent tab while inventory is being loaded.
+ if ( (!inbox || inbox->getRootFolder()->getSelectionList().empty())
+ && (mPanelMainInventory && !mPanelMainInventory->getActivePanel()->getRootFolder()->hasVisibleChildren()) )
{
- llwarns << "Failed to get the main inventory panel" << llendl;
return false;
}
- LLInventoryPanel* active_panel = panel_main_inventory->getActivePanel();
- // Avoid flicker in the Recent tab while inventory is being loaded.
- if (!active_panel->getRootFolder()->hasVisibleChildren()) return false;
-
- return LLAvatarActions::canShareSelectedItems(active_panel);
+ return ( (mPanelMainInventory ? LLAvatarActions::canShareSelectedItems(mPanelMainInventory->getActivePanel()) : false)
+ || (inbox ? LLAvatarActions::canShareSelectedItems(inbox) : false) );
}
+
bool LLSidepanelInventory::canWearSelected()
{
- LLPanelMainInventory* panel_main_inventory =
- mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- if (!panel_main_inventory)
- {
- llassert(panel_main_inventory != NULL);
+ std::set<LLUUID> selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
+
+ if (selected_uuids.empty())
return false;
- }
- std::set<LLUUID> selected_uuids = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
for (std::set<LLUUID>::const_iterator it = selected_uuids.begin();
it != selected_uuids.end();
++it)
@@ -366,11 +721,19 @@ bool LLSidepanelInventory::canWearSelected()
LLInventoryItem *LLSidepanelInventory::getSelectedItem()
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+ LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+
if (!current_item)
{
- return NULL;
+ if (mInventoryPanelInbox)
+ {
+ current_item = mInventoryPanelInbox->getRootFolder()->getCurSelectedItem();
+ }
+
+ if (!current_item)
+ {
+ return NULL;
+ }
}
const LLUUID &item_id = current_item->getListener()->getUUID();
LLInventoryItem *item = gInventory.getItem(item_id);
@@ -379,9 +742,26 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
U32 LLSidepanelInventory::getSelectedCount()
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
- return selection_list.size();
+ int count = 0;
+
+ std::set<LLUUID> selection_list = mPanelMainInventory->getActivePanel()->getRootFolder()->getSelectionList();
+ count += selection_list.size();
+
+ if ((count == 0) && mInboxEnabled && (mInventoryPanelInbox != NULL))
+ {
+ selection_list = mInventoryPanelInbox->getRootFolder()->getSelectionList();
+
+ count += selection_list.size();
+ }
+
+ if ((count == 0) && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
+ {
+ selection_list = mInventoryPanelOutbox->getRootFolder()->getSelectionList();
+
+ count += selection_list.size();
+ }
+
+ return count;
}
LLInventoryPanel *LLSidepanelInventory::getActivePanel()
@@ -401,3 +781,45 @@ BOOL LLSidepanelInventory::isMainInventoryPanelActive() const
{
return mInventoryPanel->getVisible();
}
+
+void LLSidepanelInventory::clearSelections(bool clearMain, bool clearInbox, bool clearOutbox)
+{
+ if (clearMain)
+ {
+ LLInventoryPanel * inv_panel = getActivePanel();
+
+ if (inv_panel)
+ {
+ inv_panel->clearSelection();
+ }
+ }
+
+ if (clearInbox && mInboxEnabled && (mInventoryPanelInbox != NULL))
+ {
+ mInventoryPanelInbox->clearSelection();
+ }
+
+ if (clearOutbox && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
+ {
+ mInventoryPanelOutbox->clearSelection();
+ }
+
+ updateVerbs();
+}
+
+std::set<LLUUID> LLSidepanelInventory::getInboxOrOutboxSelectionList()
+{
+ std::set<LLUUID> inventory_selected_uuids;
+
+ if (mInboxEnabled && (mInventoryPanelInbox != NULL))
+ {
+ inventory_selected_uuids = mInventoryPanelInbox->getRootFolder()->getSelectionList();
+ }
+
+ if (inventory_selected_uuids.empty() && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
+ {
+ inventory_selected_uuids = mInventoryPanelOutbox->getRootFolder()->getSelectionList();
+ }
+
+ return inventory_selected_uuids;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 32c98bc034..f80a3a9dd3 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -30,6 +30,8 @@
#include "llpanel.h"
class LLFolderViewItem;
+class LLInboxOutboxAddedObserver;
+class LLInventoryCategoriesObserver;
class LLInventoryItem;
class LLInventoryPanel;
class LLPanelMainInventory;
@@ -42,12 +44,23 @@ public:
LLSidepanelInventory();
virtual ~LLSidepanelInventory();
+private:
+ void handleLoginComplete();
+
+public:
+ void observeInboxOutboxCreation();
+ void observeInboxModifications(const LLUUID& inboxID);
+ void observeOutboxModifications(const LLUUID& outboxID);
+
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
BOOL isMainInventoryPanelActive() const;
+
+ void clearSelections(bool clearMain, bool clearInbox, bool clearOutbox);
+ std::set<LLUUID> getInboxOrOutboxSelectionList();
void showItemInfoPanel();
void showTaskInfoPanel();
@@ -56,6 +69,17 @@ public:
// checks can share selected item(s)
bool canShare();
+ void onToggleInboxBtn();
+ void onToggleOutboxBtn();
+
+ void enableInbox(bool enabled);
+ void enableOutbox(bool enabled);
+
+ bool isInboxEnabled() const { return mInboxEnabled; }
+ bool isOutboxEnabled() const { return mOutboxEnabled; }
+
+ void updateVerbs();
+
protected:
// Tracks highlighted (selected) item in inventory panel.
LLInventoryItem *getSelectedItem();
@@ -63,15 +87,19 @@ protected:
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
// "wear", "teleport", etc.
void performActionOnSelection(const std::string &action);
- void updateVerbs();
bool canWearSelected(); // check whether selected items can be worn
+ void onInboxChanged(const LLUUID& inbox_id);
+ void onOutboxChanged(const LLUUID& outbox_id);
+
//
// UI Elements
//
private:
LLPanel* mInventoryPanel; // Main inventory view
+ LLInventoryPanel* mInventoryPanelInbox;
+ LLInventoryPanel* mInventoryPanelOutbox;
LLSidepanelItemInfo* mItemPanel; // Individual item view
LLSidepanelTaskInfo* mTaskPanel; // Individual in-world object view
LLPanelMainInventory* mPanelMainInventory;
@@ -85,6 +113,7 @@ protected:
void onTeleportButtonClicked();
void onOverflowButtonClicked();
void onBackButtonClicked();
+
private:
LLButton* mInfoBtn;
LLButton* mShareBtn;
@@ -94,6 +123,11 @@ private:
LLButton* mOverflowBtn;
LLButton* mShopBtn;
+ bool mInboxEnabled;
+ bool mOutboxEnabled;
+
+ LLInventoryCategoriesObserver* mCategoriesObserver;
+ LLInboxOutboxAddedObserver* mInboxOutboxAddedObserver;
};
#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
index 37b10b592f..2918bb388a 100644
--- a/indra/newview/llsidepanelinventorysubpanel.cpp
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -46,8 +46,8 @@
///----------------------------------------------------------------------------
// Default constructor
-LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel()
- : LLPanel(),
+LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel(const LLPanel::Params& p)
+ : LLPanel(p),
mIsDirty(TRUE),
mIsEditing(FALSE),
mCancelBtn(NULL),
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h
index b2de7d3b0b..b5cf3aaf17 100644
--- a/indra/newview/llsidepanelinventorysubpanel.h
+++ b/indra/newview/llsidepanelinventorysubpanel.h
@@ -40,7 +40,7 @@ class LLInventoryItem;
class LLSidepanelInventorySubpanel : public LLPanel
{
public:
- LLSidepanelInventorySubpanel();
+ LLSidepanelInventorySubpanel(const LLPanel::Params& p = getDefaultParams());
virtual ~LLSidepanelInventorySubpanel();
/*virtual*/ void setVisible(BOOL visible);
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index fbd2f7ca83..1ce05da849 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -130,9 +130,10 @@ void LLObjectInventoryObserver::inventoryChanged(LLViewerObject* object,
static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
// Default constructor
-LLSidepanelItemInfo::LLSidepanelItemInfo()
- : mItemID(LLUUID::null)
- , mObjectInventoryObserver(NULL)
+LLSidepanelItemInfo::LLSidepanelItemInfo(const LLPanel::Params& p)
+ : LLSidepanelInventorySubpanel(p)
+ , mItemID(LLUUID::null)
+ , mObjectInventoryObserver(NULL)
{
mPropertiesObserver = new LLItemPropertiesObserver(this);
}
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 25be145f64..12aaca923e 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -44,7 +44,7 @@ class LLPermissions;
class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
{
public:
- LLSidepanelItemInfo();
+ LLSidepanelItemInfo(const LLPanel::Params& p = getDefaultParams());
virtual ~LLSidepanelItemInfo();
/*virtual*/ BOOL postBuild();
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 631b244785..a7c4057846 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -30,6 +30,7 @@
#include "llagentcamera.h"
#include "llappviewer.h"
+#include "llbadge.h"
#include "llbottomtray.h"
#include "llfloaterreg.h"
#include "llfirstuse.h"
@@ -40,6 +41,7 @@
#include "llfocusmgr.h"
#include "llrootview.h"
#include "llnavigationbar.h"
+#include "llpanelmarketplaceinbox.h"
#include "llaccordionctrltab.h"
@@ -113,11 +115,14 @@ public:
Optional<std::string> image_selected;
Optional<std::string> tab_title;
Optional<std::string> description;
+ Optional<LLBadge::Params> badge;
+
Params()
: image("image"),
image_selected("image_selected"),
tab_title("tab_title","no title"),
- description("description","no description")
+ description("description","no description"),
+ badge("badge")
{};
};
protected:
@@ -140,7 +145,6 @@ public:
static LLSideTrayTab* createInstance ();
const std::string& getDescription () const { return mDescription;}
- const std::string& getTabTitle() const { return mTabTitle;}
void onOpen (const LLSD& key);
@@ -150,7 +154,10 @@ public:
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
- LLPanel *getPanel();
+ LLPanel* getPanel();
+
+ LLButton* createButton(bool allowTearOff, LLUICtrl::commit_callback_t callback);
+
private:
std::string mTabTitle;
std::string mImage;
@@ -158,6 +165,9 @@ private:
std::string mDescription;
LLView* mMainPanel;
+
+ bool mHasBadge;
+ LLBadge::Params mBadgeParams;
};
LLSideTrayTab::LLSideTrayTab(const Params& p)
@@ -166,8 +176,10 @@ LLSideTrayTab::LLSideTrayTab(const Params& p)
mImage(p.image),
mImageSelected(p.image_selected),
mDescription(p.description),
- mMainPanel(NULL)
+ mMainPanel(NULL),
+ mBadgeParams(p.badge)
{
+ mHasBadge = p.badge.isProvided();
}
LLSideTrayTab::~LLSideTrayTab()
@@ -182,8 +194,6 @@ bool LLSideTrayTab::addChild(LLView* view, S32 tab_group)
//return res;
}
-
-
//virtual
BOOL LLSideTrayTab::postBuild()
{
@@ -196,7 +206,7 @@ BOOL LLSideTrayTab::postBuild()
getChild<LLButton>("undock")->setCommitCallback(boost::bind(&LLSideTrayTab::setDocked, this, false));
getChild<LLButton>("dock")->setCommitCallback(boost::bind(&LLSideTrayTab::setDocked, this, true));
- return true;
+ return LLPanel::postBuild();
}
static const S32 splitter_margin = 1;
@@ -486,7 +496,7 @@ public:
LLSideTray* side_tray = LLSideTray::getInstance();
// Check if the tab we are dragging is docked.
- if (!side_tray->isTabAttached(getName())) return FALSE;
+ if (!side_tray->isTabAttached(mTabName)) return FALSE;
// Same value is hardcoded in LLDragHandle::handleHover().
const S32 undock_threshold = 12;
@@ -495,7 +505,7 @@ public:
if (delta_x <= -undock_threshold || delta_x >= undock_threshold ||
delta_y <= -undock_threshold || delta_y >= undock_threshold)
{
- LLSideTrayTab* tab = side_tray->getTab(getName());
+ LLSideTrayTab* tab = side_tray->getTab(mTabName);
if (!tab) return FALSE;
tab->setDocked(false);
@@ -523,18 +533,42 @@ public:
return FALSE;
}
+ void setBadgeDriver(LLSideTrayTabBadgeDriver* driver)
+ {
+ mBadgeDriver = driver;
+ }
+
protected:
LLSideTrayButton(const LLButton::Params& p)
- : LLButton(p)
- , mDragLastScreenX(0)
- , mDragLastScreenY(0)
- {}
+ : 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);
+ }
friend class LLUICtrlFactory;
+ void draw()
+ {
+ if (mBadgeDriver)
+ {
+ setBadgeLabel(mBadgeDriver->getBadgeString());
+ }
+
+ LLButton::draw();
+ }
+
private:
S32 mDragLastScreenX;
S32 mDragLastScreenY;
+
+ std::string mTabName;
+ LLSideTrayTabBadgeDriver* mBadgeDriver;
};
//////////////////////////////////////////////////////////////////////////////
@@ -615,11 +649,31 @@ BOOL LLSideTray::postBuild()
return true;
}
+void LLSideTray::setTabButtonBadgeDriver(std::string tabName, LLSideTrayTabBadgeDriver* driver)
+{
+ mTabButtonBadgeDrivers[tabName] = driver;
+}
+
void LLSideTray::handleLoginComplete()
{
//reset tab to "home" tab if it was changesd during login process
selectTabByName("sidebar_home");
+ for (badge_map_t::iterator it = mTabButtonBadgeDrivers.begin(); it != mTabButtonBadgeDrivers.end(); ++it)
+ {
+ LLButton* button = mTabButtons[it->first];
+ LLSideTrayButton* side_button = dynamic_cast<LLSideTrayButton*>(button);
+
+ if (side_button)
+ {
+ side_button->setBadgeDriver(it->second);
+ }
+ else
+ {
+ llwarns << "Unable to find button " << it->first << " to set the badge driver. " << llendl;
+ }
+ }
+
detachTabs();
}
@@ -631,6 +685,7 @@ LLSideTrayTab* LLSideTray::getTab(const std::string& name)
bool LLSideTray::isTabAttached(const std::string& name)
{
LLSideTrayTab* tab = getTab(name);
+ llassert(tab);
if (!tab) return false;
return std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end();
@@ -766,51 +821,6 @@ bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible
return true;
}
-LLButton* LLSideTray::createButton (const std::string& name,const std::string& image,const std::string& tooltip,
- LLUICtrl::commit_callback_t callback)
-{
- static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
-
- LLButton::Params bparams;
-
- LLRect rect;
- rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height);
-
- bparams.name(name);
- bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
- bparams.rect (rect);
- bparams.tab_stop(false);
- bparams.image_unselected(sidetray_params.tab_btn_image_normal);
- bparams.image_selected(sidetray_params.tab_btn_image_selected);
- bparams.image_disabled(sidetray_params.tab_btn_image_normal);
- bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected);
-
- LLButton* button;
- if (name == "sidebar_openclose")
- {
- // "Open/Close" button shouldn't allow "tear off"
- // hence it is created as LLButton instance.
- button = LLUICtrlFactory::create<LLButton>(bparams);
- }
- else
- {
- button = LLUICtrlFactory::create<LLSideTrayButton>(bparams);
- }
-
- button->setClickedCallback(callback);
-
- button->setToolTip(tooltip);
-
- if(image.length())
- {
- button->setImageOverlay(image);
- }
-
- mButtonsPanel->addChildInBack(button);
-
- return button;
-}
-
bool LLSideTray::addChild(LLView* view, S32 tab_group)
{
LLSideTrayTab* tab_panel = dynamic_cast<LLSideTrayTab*>(view);
@@ -938,7 +948,56 @@ bool LLSideTray::addTab(LLSideTrayTab* tab)
return true;
}
-void LLSideTray::createButtons ()
+LLButton* LLSideTrayTab::createButton(bool allowTearOff, LLUICtrl::commit_callback_t callback)
+{
+ static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
+
+ LLRect rect;
+ rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height);
+
+ LLButton::Params bparams;
+
+ // Append "_button" to the side tray tab name
+ std::string button_name = getName() + "_button";
+ bparams.name(button_name);
+ bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
+ bparams.rect (rect);
+ bparams.tab_stop(false);
+ bparams.image_unselected(sidetray_params.tab_btn_image_normal);
+ bparams.image_selected(sidetray_params.tab_btn_image_selected);
+ bparams.image_disabled(sidetray_params.tab_btn_image_normal);
+ bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected);
+
+ if (mHasBadge)
+ {
+ bparams.badge = mBadgeParams;
+ }
+
+ LLButton* button;
+ if (allowTearOff)
+ {
+ button = LLUICtrlFactory::create<LLSideTrayButton>(bparams);
+ }
+ else
+ {
+ // "Open/Close" button shouldn't allow "tear off"
+ // hence it is created as LLButton instance.
+ button = LLUICtrlFactory::create<LLButton>(bparams);
+ }
+
+ button->setClickedCallback(callback);
+
+ button->setToolTip(mTabTitle);
+
+ if(mImage.length())
+ {
+ button->setImageOverlay(mImage);
+ }
+
+ return button;
+}
+
+void LLSideTray::createButtons()
{
//create buttons for tabs
child_vector_const_iter_t child_it = mTabs.begin();
@@ -951,17 +1010,22 @@ void LLSideTray::createButtons ()
// The "OpenClose" button will open/close the whole panel
if (name == "sidebar_openclose")
{
- mCollapseButton = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(),
- boost::bind(&LLSideTray::onToggleCollapse, this));
+ mCollapseButton = sidebar_tab->createButton(false, boost::bind(&LLSideTray::onToggleCollapse, this));
+
+ mButtonsPanel->addChildInBack(mCollapseButton);
+
LLHints::registerHintTarget("side_panel_btn", mCollapseButton->getHandle());
}
else
{
- LLButton* button = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(),
- boost::bind(&LLSideTray::onTabButtonClick, this, name));
+ LLButton* button = sidebar_tab->createButton(true, boost::bind(&LLSideTray::onTabButtonClick, this, name));
+
+ mButtonsPanel->addChildInBack(button);
+
mTabButtons[name] = button;
}
}
+
LLHints::registerHintTarget("inventory_btn", mTabButtons["sidebar_inventory"]->getHandle());
}
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 24882411f4..17158329dc 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -33,6 +33,13 @@
class LLAccordionCtrl;
class LLSideTrayTab;
+// Define an interface for side tab button badge values
+class LLSideTrayTabBadgeDriver
+{
+public:
+ virtual std::string getBadgeString() const = 0;
+};
+
// Deal with LLSideTrayTab being opaque. Generic do-nothing cast...
template <class T>
T tab_cast(LLSideTrayTab* tab) { return tab; }
@@ -166,6 +173,8 @@ public:
bool getCollapsed() { return mCollapsed; }
+ void setTabButtonBadgeDriver(std::string tabName, LLSideTrayTabBadgeDriver* driver);
+
public:
virtual ~LLSideTray(){};
@@ -204,8 +213,6 @@ protected:
void createButtons ();
- LLButton* createButton (const std::string& name,const std::string& image,const std::string& tooltip,
- LLUICtrl::commit_callback_t callback);
void arrange ();
void detachTabs ();
void reflectCollapseChange();
@@ -234,6 +241,8 @@ private:
LLPanel* mButtonsPanel;
typedef std::map<std::string,LLButton*> button_map_t;
button_map_t mTabButtons;
+ typedef std::map<std::string,LLSideTrayTabBadgeDriver*> badge_map_t;
+ badge_map_t mTabButtonBadgeDrivers;
child_vector_t mTabs;
child_vector_t mDetachedTabs;
tab_order_vector_t mOriginalTabOrder;
diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
index 4cf1df1655..a853726dea 100644
--- a/indra/newview/llslurl.cpp
+++ b/indra/newview/llslurl.cpp
@@ -273,11 +273,11 @@ LLSLURL::LLSLURL(const std::string& slurl)
mRegion = LLURI::unescape(path_array[0].asString());
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 a5b91729e8..fd17781a2e 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -47,6 +47,7 @@
#include "llvoavatar.h"
#include "llvolumemgr.h"
#include "lltextureatlas.h"
+#include "llglslshader.h"
static LLFastTimer::DeclareTimer FTM_FRUSTUM_CULL("Frustum Culling");
static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound");
@@ -522,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() ;
@@ -2785,7 +2791,7 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE)
gGL.color4f(0,1,1,1);
break;
case LLViewerObject::LL_VO_CLOUDS:
- gGL.color4f(0.5f,0.5f,0.5f,1.0f);
+ // no longer used
break;
case LLViewerObject::LL_VO_PART_GROUP:
case LLViewerObject::LL_VO_HUD_PART_GROUP:
@@ -3176,6 +3182,8 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)
glColor4fv(line_color.mV);
LLVertexBuffer::unbind();
+ llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0);
+
glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);
glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);
@@ -3257,7 +3265,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)
if (phys_volume->mHullPoints && phys_volume->mHullIndices)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-
+ llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0);
LLVertexBuffer::unbind();
glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);
glColor4fv(line_color.mV);
@@ -4152,6 +4160,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 db8a0c2992..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<LLDrawable *>* 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; }
@@ -664,13 +666,6 @@ public:
LLGrassPartition();
};
-//spatial partition for clouds (implemented in LLVOClouds.cpp)
-class LLCloudPartition : public LLParticlePartition
-{
-public:
- LLCloudPartition();
-};
-
//class for wrangling geometry out of volumes (implemented in LLVOVolume.cpp)
class LLVolumeGeometryManager: public LLGeometryManager
{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 86b09473ab..749acea6c1 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -76,6 +76,7 @@
#include "lluserrelations.h"
#include "llversioninfo.h"
#include "llviewercontrol.h"
+#include "llviewerhelp.h"
#include "llvfs.h"
#include "llxorcipher.h" // saved password, MAC address
#include "llwindow.h"
@@ -125,6 +126,7 @@
#include "llpanelgroupnotices.h"
#include "llpreview.h"
#include "llpreviewscript.h"
+#include "llproxy.h"
#include "llproductinforequest.h"
#include "llsecondlifeurls.h"
#include "llselectmgr.h"
@@ -163,7 +165,6 @@
#include "llviewerwindow.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
-#include "llvoclouds.h"
#include "llweb.h"
#include "llworld.h"
#include "llworldmapmessage.h"
@@ -386,6 +387,14 @@ bool idle_startup()
LLNotificationsUtil::add(gViewerWindow->getInitAlert());
}
+ //-------------------------------------------------
+ // Init the SOCKS 5 proxy if the user has configured
+ // one. We need to do this early in case the user
+ // is using SOCKS for HTTP so we get the login
+ // screen and HTTP tables via SOCKS.
+ //-------------------------------------------------
+ LLStartUp::startLLProxy();
+
gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
gSavedSettings.setS32("LastGPUClass", LLFeatureManager::getInstance()->getGPUClass());
@@ -591,7 +600,7 @@ bool idle_startup()
}
LL_INFOS("AppInit") << "Message System Initialized." << LL_ENDL;
-
+
//-------------------------------------------------
// Init audio, which may be needed for prefs dialog
// or audio cues in connection UI.
@@ -720,7 +729,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)
{
@@ -755,19 +770,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 );
@@ -807,7 +809,21 @@ bool idle_startup()
if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState())
{
- //reset the values that could have come in from a slurl
+ // Post login screen, we should see if any settings have changed that may
+ // require us to either start/stop or change the socks proxy. As various communications
+ // past this point may require the proxy to be up.
+ if (!LLStartUp::startLLProxy())
+ {
+ // Proxy start up failed, we should now bail the state machine
+ // startLLProxy() will have reported an error to the user
+ // already, so we just go back to the login screen. The user
+ // could then change the preferences to fix the issue.
+
+ LLStartUp::setStartupState(STATE_LOGIN_SHOW);
+ return FALSE;
+ }
+
+ // reset the values that could have come in from a slurl
// DEV-42215: Make sure they're not empty -- gUserCredential
// might already have been set from gSavedSettings, and it's too bad
// to overwrite valid values with empty strings.
@@ -897,7 +913,7 @@ bool idle_startup()
if (show_connect_box)
{
LLSLURL slurl;
- LLPanelLogin::closePanel();
+ //LLPanelLogin::closePanel();
}
@@ -944,6 +960,8 @@ bool idle_startup()
gViewerWindow->setShowProgress(TRUE);
gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Quit"));
+ gViewerWindow->revealIntroPanel();
+
// Poke the VFS, which could potentially block for a while if
// Windows XP is acting up
set_startup_status(0.07f, LLTrans::getString("LoginVerifyingCache"), LLStringUtil::null);
@@ -1171,8 +1189,6 @@ bool idle_startup()
// init the shader managers
LLPostProcess::initClass();
- LLWLParamManager::initClass();
- LLWaterParamManager::initClass();
LLViewerObject::initVOClasses();
@@ -1244,6 +1260,25 @@ bool idle_startup()
//---------------------------------------------------------------------
if(STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
{
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(gFirstSimHandle);
+ if (regionp->capabilitiesReceived())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+ else
+ {
+ U32 num_retries = regionp->getNumSeedCapRetries();
+ if (num_retries > 0)
+ {
+ LLStringUtil::format_map_t args;
+ args["[NUMBER]"] = llformat("%d", num_retries + 1);
+ set_startup_status(0.4f, LLTrans::getString("LoginRetrySeedCapGrant", args), gAgent.mMOTD);
+ }
+ else
+ {
+ set_startup_status(0.4f, LLTrans::getString("LoginRequestSeedCapGrant"), gAgent.mMOTD);
+ }
+ }
return FALSE;
}
@@ -1543,6 +1578,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())
{
@@ -1692,11 +1733,22 @@ bool idle_startup()
gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f);
}
+ if (gSavedSettings.getBOOL("ShowHelpOnFirstLogin"))
+ {
+ gSavedSettings.setBOOL("HelpFloaterOpen", TRUE);
+ }
+
// Set the show start location to true, now that the user has logged
// on with this install.
gSavedSettings.setBOOL("ShowStartLocation", TRUE);
}
+ if (gSavedSettings.getBOOL("HelpFloaterOpen"))
+ {
+ // show default topic
+ LLViewerHelp::instance().showTopic("");
+ }
+
// We're successfully logged in.
gSavedSettings.setBOOL("FirstLoginThisInstall", FALSE);
@@ -1953,7 +2005,8 @@ bool idle_startup()
gViewerWindow->getWindow()->resetBusyCount();
gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
LL_DEBUGS("AppInit") << "Done releasing bitmap" << LL_ENDL;
- gViewerWindow->setShowProgress(FALSE);
+ //gViewerWindow->revealIntroPanel();
+ gViewerWindow->setStartupComplete();
gViewerWindow->setProgressCancelButtonVisible(FALSE);
// We're not away from keyboard, even though login might have taken
@@ -2526,22 +2579,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;
+ gStartTexture = NULL;
}
+ else
+ {
+ gStartImageWidth = start_image_bmp->getWidth();
+ gStartImageHeight = start_image_bmp->getHeight();
- gStartImageWidth = start_image_bmp->getWidth();
- gStartImageHeight = start_image_bmp->getHeight();
+ LLPointer<LLImageRaw> 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) ;
+ }
+ }
- LLPointer<LLImageRaw> raw = new LLImageRaw;
- if (!start_image_bmp->decode(raw, 0.0f))
+ if(gStartTexture.isNull())
{
- LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
- gStartTexture = NULL;
- return;
+ gStartTexture = LLViewerTexture::sBlackImagep ;
+ gStartImageWidth = gStartTexture->getWidth() ;
+ gStartImageHeight = gStartTexture->getHeight() ;
}
-
- raw->expandToPowerOfTwo();
- gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE) ;
}
@@ -2728,6 +2791,171 @@ void LLStartUp::setStartSLURL(const LLSLURL& slurl)
}
}
+/**
+ * Read all proxy configuration settings and set up both the HTTP proxy and
+ * SOCKS proxy as needed.
+ *
+ * Any errors that are encountered will result in showing the user a notification.
+ * When an error is encountered,
+ *
+ * @return Returns true if setup was successful, false if an error was encountered.
+ */
+bool LLStartUp::startLLProxy()
+{
+ bool proxy_ok = true;
+ std::string httpProxyType = gSavedSettings.getString("HttpProxyType");
+
+ // Set up SOCKS proxy (if needed)
+ if (gSavedSettings.getBOOL("Socks5ProxyEnabled"))
+ {
+ // Determine and update LLProxy with the saved authentication system
+ std::string auth_type = gSavedSettings.getString("Socks5AuthType");
+
+ if (auth_type.compare("UserPass") == 0)
+ {
+ LLPointer<LLCredential> socks_cred = gSecAPIHandler->loadCredential("SOCKS5");
+ std::string socks_user = socks_cred->getIdentifier()["username"].asString();
+ std::string socks_password = socks_cred->getAuthenticator()["creds"].asString();
+
+ bool ok = LLProxy::getInstance()->setAuthPassword(socks_user, socks_password);
+
+ if (!ok)
+ {
+ LLNotificationsUtil::add("SOCKS_BAD_CREDS");
+ proxy_ok = false;
+ }
+ }
+ else if (auth_type.compare("None") == 0)
+ {
+ LLProxy::getInstance()->setAuthNone();
+ }
+ else
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 authentication type."<< LL_ENDL;
+
+ // Unknown or missing setting.
+ gSavedSettings.setString("Socks5AuthType", "None");
+
+ // Clear the SOCKS credentials.
+ LLPointer<LLCredential> socks_cred = new LLCredential("SOCKS5");
+ gSecAPIHandler->deleteCredential(socks_cred);
+
+ LLProxy::getInstance()->setAuthNone();
+ }
+
+ if (proxy_ok)
+ {
+ // Start the proxy and check for errors
+ // If status != SOCKS_OK, stopSOCKSProxy() will already have been called when startSOCKSProxy() returns.
+ LLHost socks_host;
+ socks_host.setHostByName(gSavedSettings.getString("Socks5ProxyHost"));
+ socks_host.setPort(gSavedSettings.getU32("Socks5ProxyPort"));
+ int status = LLProxy::getInstance()->startSOCKSProxy(socks_host);
+
+ if (status != SOCKS_OK)
+ {
+ LLSD subs;
+ subs["HOST"] = gSavedSettings.getString("Socks5ProxyHost");
+ subs["PORT"] = (S32)gSavedSettings.getU32("Socks5ProxyPort");
+
+ std::string error_string;
+
+ switch(status)
+ {
+ case SOCKS_CONNECT_ERROR: // TCP Fail
+ error_string = "SOCKS_CONNECT_ERROR";
+ break;
+
+ case SOCKS_NOT_PERMITTED: // SOCKS 5 server rule set refused connection
+ error_string = "SOCKS_NOT_PERMITTED";
+ break;
+
+ case SOCKS_NOT_ACCEPTABLE: // Selected authentication is not acceptable to server
+ error_string = "SOCKS_NOT_ACCEPTABLE";
+ break;
+
+ case SOCKS_AUTH_FAIL: // Authentication failed
+ error_string = "SOCKS_AUTH_FAIL";
+ break;
+
+ case SOCKS_UDP_FWD_NOT_GRANTED: // UDP forward request failed
+ error_string = "SOCKS_UDP_FWD_NOT_GRANTED";
+ break;
+
+ case SOCKS_HOST_CONNECT_FAILED: // Failed to open a TCP channel to the socks server
+ error_string = "SOCKS_HOST_CONNECT_FAILED";
+ break;
+
+ case SOCKS_INVALID_HOST: // Improperly formatted host address or port.
+ error_string = "SOCKS_INVALID_HOST";
+ break;
+
+ default:
+ error_string = "SOCKS_UNKNOWN_STATUS"; // Something strange happened,
+ LL_WARNS("Proxy") << "Unknown return from LLProxy::startProxy(): " << status << LL_ENDL;
+ break;
+ }
+
+ LLNotificationsUtil::add(error_string, subs);
+ proxy_ok = false;
+ }
+ }
+ }
+ else
+ {
+ LLProxy::getInstance()->stopSOCKSProxy(); // ensure no UDP proxy is running and it's all cleaned up
+ }
+
+ if (proxy_ok)
+ {
+ // Determine the HTTP proxy type (if any)
+ if ((httpProxyType.compare("Web") == 0) && gSavedSettings.getBOOL("BrowserProxyEnabled"))
+ {
+ LLHost http_host;
+ http_host.setHostByName(gSavedSettings.getString("BrowserProxyAddress"));
+ http_host.setPort(gSavedSettings.getS32("BrowserProxyPort"));
+ if (!LLProxy::getInstance()->enableHTTPProxy(http_host, LLPROXY_HTTP))
+ {
+ LLSD subs;
+ subs["HOST"] = http_host.getIPString();
+ subs["PORT"] = (S32)http_host.getPort();
+ LLNotificationsUtil::add("PROXY_INVALID_HTTP_HOST", subs);
+ proxy_ok = false;
+ }
+ }
+ else if ((httpProxyType.compare("Socks") == 0) && gSavedSettings.getBOOL("Socks5ProxyEnabled"))
+ {
+ LLHost socks_host;
+ socks_host.setHostByName(gSavedSettings.getString("Socks5ProxyHost"));
+ socks_host.setPort(gSavedSettings.getU32("Socks5ProxyPort"));
+ if (!LLProxy::getInstance()->enableHTTPProxy(socks_host, LLPROXY_SOCKS))
+ {
+ LLSD subs;
+ subs["HOST"] = socks_host.getIPString();
+ subs["PORT"] = (S32)socks_host.getPort();
+ LLNotificationsUtil::add("PROXY_INVALID_SOCKS_HOST", subs);
+ proxy_ok = false;
+ }
+ }
+ else if (httpProxyType.compare("None") == 0)
+ {
+ LLProxy::getInstance()->disableHTTPProxy();
+ }
+ else
+ {
+ LL_WARNS("Proxy") << "Invalid other HTTP proxy configuration."<< LL_ENDL;
+
+ // Set the missing or wrong configuration back to something valid.
+ gSavedSettings.setString("HttpProxyType", "None");
+ LLProxy::getInstance()->disableHTTPProxy();
+
+ // Leave proxy_ok alone, since this isn't necessarily fatal.
+ }
+ }
+
+ return proxy_ok;
+}
+
bool login_alert_done(const LLSD& notification, const LLSD& response)
{
LLPanelLogin::giveFocus();
@@ -3150,11 +3378,6 @@ bool process_login_success_response()
gMoonTextureID = id;
}
- id = global_textures["cloud_texture_id"];
- if(id.notNull())
- {
- gCloudTextureID = id;
- }
}
// Set the location of the snapshot sharing config endpoint
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index b3d9ef1dcc..99a644eb9c 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -113,6 +113,8 @@ public:
static void setStartSLURL(const LLSLURL& slurl);
static LLSLURL& getStartSLURL() { return sStartSLURL; }
+ static bool startLLProxy(); // Initialize the SOCKS 5 proxy
+
private:
static LLSLURL sStartSLURL;
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 1b8be7a5b2..0a00885843 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -162,6 +162,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<LLTextBox>("TimeText" );
@@ -233,9 +235,40 @@ BOOL LLStatusBar::postBuild()
mScriptOut = getChildView("scriptout");
+ LLUICtrl& mode_combo = getChildRef<LLUICtrl>("mode_combo");
+ mode_combo.setValue(gSavedSettings.getString("SessionSettingsFile"));
+ mode_combo.setCommitCallback(boost::bind(&LLStatusBar::onModeChange, this, getChild<LLUICtrl>("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<LLUICtrl>("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 4ea3183d18..e1e1f5459b 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -92,6 +92,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 onClickMediaToggle(void* data);
static void onClickBalance(void* data);
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index bccabe21a8..66df7dae3e 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -334,6 +334,17 @@ void LLSurface::setOriginGlobal(const LLVector3d &origin_global)
}
}
+void LLSurface::getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions )
+{
+ S32 i;
+ for (i = 0; i < 8; i++)
+ {
+ if ( mNeighbors[i] != NULL )
+ {
+ uniqueRegions.push_back( mNeighbors[i]->getRegion() );
+ }
+ }
+}
void LLSurface::connectNeighbor(LLSurface *neighborp, U32 direction)
{
diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h
index 673ee83fe3..a4ef4fe2de 100644
--- a/indra/newview/llsurface.h
+++ b/indra/newview/llsurface.h
@@ -140,6 +140,9 @@ public:
friend class LLSurfacePatch;
friend std::ostream& operator<<(std::ostream &s, const LLSurface &S);
+
+ void getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions );
+
public:
// Number of grid points on one side of a region, including +1 buffer for
// north and east edge.
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 500c2a7b86..e8abee2fb7 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -45,12 +45,16 @@
#include "llagentwearables.h"
#include "llwearable.h"
#include "llviewercontrol.h"
+#include "llviewershadermgr.h"
#include "llviewervisualparam.h"
//#include "../tools/imdebug/imdebug.h"
using namespace LLVOAvatarDefines;
+static const S32 BAKE_UPLOAD_ATTEMPTS = 7;
+static const F32 BAKE_UPLOAD_RETRY_DELAY = 2.f; // actual delay grows by power of 2 each attempt
+
class LLTexLayerInfo
{
friend class LLTexLayer;
@@ -93,11 +97,13 @@ private:
//-----------------------------------------------------------------------------
LLBakedUploadData::LLBakedUploadData(const LLVOAvatarSelf* avatar,
LLTexLayerSet* layerset,
- const LLUUID& id) :
+ const LLUUID& id,
+ bool highest_res) :
mAvatar(avatar),
mTexLayerSet(layerset),
mID(id),
- mStartTime(LLFrameTimer::getTotalTime()) // Record starting time
+ mStartTime(LLFrameTimer::getTotalTime()), // Record starting time
+ mIsHighestRes(highest_res)
{
}
@@ -116,6 +122,7 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer(LLTexLayerSet* const owner,
mUploadPending(FALSE), // Not used for any logic here, just to sync sending of updates
mNeedsUpload(FALSE),
mNumLowresUploads(0),
+ mUploadFailCount(0),
mNeedsUpdate(TRUE),
mNumLowresUpdates(0),
mTexLayerSet(owner)
@@ -204,6 +211,7 @@ void LLTexLayerSetBuffer::cancelUpload()
mNeedsUpload = FALSE;
mUploadPending = FALSE;
mNeedsUploadTimer.pause();
+ mUploadRetryTimer.reset();
}
void LLTexLayerSetBuffer::pushProjection() const
@@ -287,11 +295,17 @@ BOOL LLTexLayerSetBuffer::render()
BOOL success = TRUE;
+ //hack to use fixed function when updating tex layer sets
+ bool no_ff = LLGLSLShader::sNoFixedFunction;
+ LLGLSLShader::sNoFixedFunction = false;
+
// Composite the color data
LLGLSUIDefault gls_ui;
success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight );
gGL.flush();
+ LLGLSLShader::sNoFixedFunction = no_ff;
+
if(upload_now)
{
if (!success)
@@ -356,25 +370,38 @@ BOOL LLTexLayerSetBuffer::isReadyToUpload() const
if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries.
if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) return FALSE; // Don't upload if avatar is using composites.
- // If we requested an upload and have the final LOD ready, then upload.
- if (mTexLayerSet->isLocalTextureDataFinal()) return TRUE;
-
- // Upload if we've hit a timeout. Upload is a pretty expensive process so we need to make sure
- // we aren't doing uploads too frequently.
- const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout");
- if (texture_timeout != 0)
+ BOOL ready = FALSE;
+ if (mTexLayerSet->isLocalTextureDataFinal())
+ {
+ // If we requested an upload and have the final LOD ready, upload (or wait a while if this is a retry)
+ if (mUploadFailCount == 0)
+ {
+ ready = TRUE;
+ }
+ else
+ {
+ ready = mUploadRetryTimer.getElapsedTimeF32() >= BAKE_UPLOAD_RETRY_DELAY * (1 << (mUploadFailCount - 1));
+ }
+ }
+ else
{
- // The timeout period increases exponentially between every lowres upload in order to prevent
- // spamming the server with frequent uploads.
- const U32 texture_timeout_threshold = texture_timeout*(1 << mNumLowresUploads);
+ // Upload if we've hit a timeout. Upload is a pretty expensive process so we need to make sure
+ // we aren't doing uploads too frequently.
+ const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout");
+ if (texture_timeout != 0)
+ {
+ // The timeout period increases exponentially between every lowres upload in order to prevent
+ // spamming the server with frequent uploads.
+ const U32 texture_timeout_threshold = texture_timeout*(1 << mNumLowresUploads);
- // If we hit our timeout and have textures available at even lower resolution, then upload.
- const BOOL is_upload_textures_timeout = mNeedsUploadTimer.getElapsedTimeF32() >= texture_timeout_threshold;
- const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable();
- if (has_lower_lod && is_upload_textures_timeout) return TRUE;
+ // If we hit our timeout and have textures available at even lower resolution, then upload.
+ const BOOL is_upload_textures_timeout = mNeedsUploadTimer.getElapsedTimeF32() >= texture_timeout_threshold;
+ const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable();
+ ready = has_lower_lod && is_upload_textures_timeout;
+ }
}
- return FALSE;
+ return ready;
}
BOOL LLTexLayerSetBuffer::isReadyToUpdate() const
@@ -482,17 +509,20 @@ void LLTexLayerSetBuffer::doUpload()
if (valid)
{
+ const bool highest_lod = mTexLayerSet->isLocalTextureDataFinal();
// Baked_upload_data is owned by the responder and deleted after the request completes.
LLBakedUploadData* baked_upload_data = new LLBakedUploadData(gAgentAvatarp,
this->mTexLayerSet,
- asset_id);
+ asset_id,
+ highest_lod);
// upload ID is used to avoid overlaps, e.g. when the user rapidly makes two changes outside of Face Edit.
mUploadID = asset_id;
// Upload the image
const std::string url = gAgent.getRegion()->getCapability("UploadBakedTexture");
if(!url.empty()
- && !LLPipeline::sForceOldBakedUpload) // toggle debug setting UploadBakedTexOld to change between the new caps method and old method
+ && !LLPipeline::sForceOldBakedUpload // toggle debug setting UploadBakedTexOld to change between the new caps method and old method
+ && (mUploadFailCount < (BAKE_UPLOAD_ATTEMPTS - 1))) // Try last ditch attempt via asset store if cap upload is failing.
{
LLSD body = LLSD::emptyMap();
// The responder will call LLTexLayerSetBuffer::onTextureUploadComplete()
@@ -511,7 +541,6 @@ void LLTexLayerSetBuffer::doUpload()
llinfos << "Baked texture upload via Asset Store." << llendl;
}
- const BOOL highest_lod = mTexLayerSet->isLocalTextureDataFinal();
if (highest_lod)
{
// Sending the final LOD for the baked texture. All done, pause
@@ -603,14 +632,15 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
{
LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata;
- if ((result == 0) &&
- isAgentAvatarValid() &&
+ if (isAgentAvatarValid() &&
!gAgentAvatarp->isDead() &&
(baked_upload_data->mAvatar == gAgentAvatarp) && // Sanity check: only the user's avatar should be uploading textures.
(baked_upload_data->mTexLayerSet->hasComposite()))
{
LLTexLayerSetBuffer* layerset_buffer = baked_upload_data->mTexLayerSet->getComposite();
-
+ S32 failures = layerset_buffer->mUploadFailCount;
+ layerset_buffer->mUploadFailCount = 0;
+
if (layerset_buffer->mUploadID.isNull())
{
// The upload got canceled, we should be in the
@@ -626,20 +656,28 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
{
// This is the upload we're currently waiting for.
layerset_buffer->mUploadID.setNull();
+ const std::string name(baked_upload_data->mTexLayerSet->getBodyRegionName());
+ const std::string resolution = baked_upload_data->mIsHighestRes ? " full res " : " low res ";
if (result >= 0)
{
- layerset_buffer->mUploadPending = FALSE;
+ layerset_buffer->mUploadPending = FALSE; // Allows sending of AgentSetAppearance later
LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatarp->getBakedTE(layerset_buffer->mTexLayerSet);
// Update baked texture info with the new UUID
U64 now = LLFrameTimer::getTotalTime(); // Record starting time
- llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl;
+ llinfos << "Baked" << resolution << "texture upload for " << name << " took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl;
gAgentAvatarp->setNewBakedTexture(baked_te, uuid);
}
else
{
- // Avatar appearance is changing, ignore the upload results
- llinfos << "Baked upload failed. Reason: " << result << llendl;
- // *FIX: retry upload after n seconds, asset server could be busy
+ ++failures;
+ S32 max_attempts = baked_upload_data->mIsHighestRes ? BAKE_UPLOAD_ATTEMPTS : 1; // only retry final bakes
+ llwarns << "Baked" << resolution << "texture upload for " << name << " failed (attempt " << failures << "/" << max_attempts << ")" << llendl;
+ if (failures < max_attempts)
+ {
+ layerset_buffer->mUploadFailCount = failures;
+ layerset_buffer->mUploadRetryTimer.start();
+ layerset_buffer->requestUpload();
+ }
}
}
else
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index 2d710d2dce..85dadb213c 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -312,6 +312,8 @@ private:
BOOL mUploadPending; // Whether we have received back the new baked textures
LLUUID mUploadID; // The current upload process (null if none).
LLFrameTimer mNeedsUploadTimer; // Tracks time since upload was requested and performed.
+ S32 mUploadFailCount; // Number of consecutive upload failures
+ LLFrameTimer mUploadRetryTimer; // Tracks time since last upload failure.
//--------------------------------------------------------------------
// Updates
@@ -363,12 +365,14 @@ struct LLBakedUploadData
{
LLBakedUploadData(const LLVOAvatarSelf* avatar,
LLTexLayerSet* layerset,
- const LLUUID& id);
+ const LLUUID& id,
+ bool highest_res);
~LLBakedUploadData() {}
const LLUUID mID;
const LLVOAvatarSelf* mAvatar; // note: backlink only; don't LLPointer
LLTexLayerSet* mTexLayerSet;
const U64 mStartTime; // for measuring baked texture upload time
+ const bool mIsHighestRes; // whether this is a "final" bake, or intermediate low res
};
#endif // LL_LLTEXLAYER_H
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 9b417307fd..87b6304f9d 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -113,7 +113,7 @@ public:
~LLTextureCacheWorker()
{
llassert_always(!haveWork());
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
}
// override this interface
@@ -176,7 +176,7 @@ private:
bool LLTextureCacheLocalFileWorker::doRead()
{
- S32 local_size = LLAPRFile::size(mFileName, mCache->getLocalAPRFilePool());
+ S32 local_size = LLAPRFile::size(mFileName);
if (local_size > 0 && mFileName.size() > 4)
{
@@ -215,7 +215,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 +233,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,9 +248,9 @@ 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());
+ S32 bytes_read = LLAPRFile::readEx(mFileName, mReadData, mOffset, mDataSize);
if (bytes_read != mDataSize)
{
@@ -258,7 +258,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
// << " Bytes: " << mDataSize << " Offset: " << mOffset
// << " / " << mDataSize << llendl;
mDataSize = 0;
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
else
@@ -331,7 +331,7 @@ bool LLTextureCacheRemoteWorker::doRead()
// Is it a JPEG2000 file?
{
local_filename = filename + ".j2c";
- local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
mImageFormat = IMG_CODEC_J2C;
@@ -341,7 +341,7 @@ bool LLTextureCacheRemoteWorker::doRead()
if (local_size == 0)
{
local_filename = filename + ".jpg";
- local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
mImageFormat = IMG_CODEC_JPEG;
@@ -352,7 +352,7 @@ bool LLTextureCacheRemoteWorker::doRead()
if (local_size == 0)
{
local_filename = filename + ".tga";
- local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
mImageFormat = IMG_CODEC_TGA;
@@ -377,16 +377,15 @@ bool LLTextureCacheRemoteWorker::doRead()
mDataSize = local_size;
}
// Allocate read buffer
- mReadData = new U8[mDataSize];
- S32 bytes_read = LLAPRFile::readEx(local_filename,
- mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool());
+ mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
+ S32 bytes_read = LLAPRFile::readEx(local_filename, mReadData, mOffset, mDataSize);
if (bytes_read != mDataSize)
{
llwarns << "Error reading file from local cache: " << local_filename
<< " Bytes: " << mDataSize << " Offset: " << mOffset
<< " / " << mDataSize << llendl;
mDataSize = 0;
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
else
@@ -429,15 +428,14 @@ bool LLTextureCacheRemoteWorker::doRead()
S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
size = llmin(size, mDataSize);
// Allocate the read buffer
- mReadData = new U8[size];
- S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName,
- mReadData, offset, size, mCache->getLocalAPRFilePool());
+ mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), size);
+ S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName, mReadData, offset, size);
if (bytes_read != size)
{
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;
@@ -457,7 +455,7 @@ bool LLTextureCacheRemoteWorker::doRead()
if (!done && (mState == BODY))
{
std::string filename = mCache->getTextureFileName(mID);
- S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool());
+ S32 filesize = LLAPRFile::size(filename);
if (filesize && (filesize + TEXTURE_CACHE_ENTRY_SIZE) > mOffset)
{
@@ -467,7 +465,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 +478,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
@@ -499,14 +497,13 @@ bool LLTextureCacheRemoteWorker::doRead()
// Read the data at last
S32 bytes_read = LLAPRFile::readEx(filename,
mReadData + data_offset,
- file_offset, file_size,
- mCache->getLocalAPRFilePool());
+ file_offset, file_size);
if (bytes_read != file_size)
{
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,16 +595,16 @@ 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;
+ bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size);
+ FREE_MEM(LLImageBase::getPrivatePool(), padBuffer);
}
else
{
// Write the header record (== first TEXTURE_CACHE_ENTRY_SIZE bytes of the raw file) in the header file
- bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool());
+ bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size);
}
if (bytes_written <= 0)
@@ -642,8 +639,7 @@ bool LLTextureCacheRemoteWorker::doWrite()
// llinfos << "Writing Body: " << filename << " Bytes: " << file_offset+file_size << llendl;
S32 bytes_written = LLAPRFile::writeEx( filename,
mWriteData + TEXTURE_CACHE_ENTRY_SIZE,
- 0, file_size,
- mCache->getLocalAPRFilePool());
+ 0, file_size);
if (bytes_written <= 0)
{
llwarns << "LLTextureCacheWorker: " << mID
@@ -698,7 +694,7 @@ void LLTextureCacheWorker::finishWork(S32 param, bool completed)
}
else
{
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
}
@@ -740,9 +736,6 @@ void LLTextureCacheWorker::endWork(S32 param, bool aborted)
LLTextureCache::LLTextureCache(bool threaded)
: LLWorkerThread("TextureCache", threaded),
- mWorkersMutex(NULL),
- mHeaderMutex(NULL),
- mListMutex(NULL),
mHeaderAPRFile(NULL),
mReadOnly(TRUE), //do not allow to change the texture cache until setReadOnly() is called.
mTexturesSizeTotal(0),
@@ -846,7 +839,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
// Is it a JPEG2000 file?
{
local_filename = filename + ".j2c";
- local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
return TRUE ;
@@ -856,7 +849,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
// If not, is it a jpeg file?
{
local_filename = filename + ".jpg";
- local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
return TRUE ;
@@ -866,7 +859,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
// Hmm... What about a targa file? (used for UI texture mostly)
{
local_filename = filename + ".tga";
- local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
return TRUE ;
@@ -912,10 +905,10 @@ void LLTextureCache::purgeCache(ELLPath location)
if(LLFile::isdir(mTexturesDirName))
{
std::string file_name = gDirUtilp->getExpandedFilename(location, entries_filename);
- LLAPRFile::remove(file_name, getLocalAPRFilePool());
+ LLAPRFile::remove(file_name);
file_name = gDirUtilp->getExpandedFilename(location, cache_filename);
- LLAPRFile::remove(file_name, getLocalAPRFilePool());
+ LLAPRFile::remove(file_name);
purgeAllTextures(true);
}
@@ -991,7 +984,9 @@ LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset)
{
llassert_always(mHeaderAPRFile == NULL);
apr_int32_t flags = readonly ? APR_READ|APR_BINARY : APR_READ|APR_WRITE|APR_BINARY;
- mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags, getLocalAPRFilePool());
+ // All code calling openHeaderEntriesFile, immediately calls closeHeaderEntriesFile,
+ // so this file is very short-lived.
+ mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags);
if(offset > 0)
{
mHeaderAPRFile->seek(APR_SET, offset);
@@ -1014,10 +1009,9 @@ void LLTextureCache::readEntriesHeader()
{
// mHeaderEntriesInfo initializes to default values so safe not to read it
llassert_always(mHeaderAPRFile == NULL);
- if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
+ if (LLAPRFile::isExist(mHeaderEntriesFileName))
{
- LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
- getLocalAPRFilePool());
+ LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo));
}
else //create an empty entries header.
{
@@ -1032,8 +1026,7 @@ void LLTextureCache::writeEntriesHeader()
llassert_always(mHeaderAPRFile == NULL);
if (!mReadOnly)
{
- LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
- getLocalAPRFilePool());
+ LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo));
}
}
@@ -1622,7 +1615,7 @@ void LLTextureCache::purgeTextures(bool validate)
if (uuididx == validate_idx)
{
LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mBodySize << LL_ENDL;
- S32 bodysize = LLAPRFile::size(filename, getLocalAPRFilePool());
+ S32 bodysize = LLAPRFile::size(filename);
if (bodysize != entries[idx].mBodySize)
{
LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mBodySize
@@ -1857,7 +1850,7 @@ void LLTextureCache::removeCachedTexture(const LLUUID& id)
mTexturesSizeMap.erase(id);
}
mHeaderIDMap.erase(id);
- LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
+ LLAPRFile::remove(getTextureFileName(id));
}
//called after mHeaderMutex is locked.
@@ -1869,7 +1862,7 @@ void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename)
{
if (entry.mBodySize == 0) // Always attempt to remove when mBodySize > 0.
{
- if (LLAPRFile::isExist(filename, getLocalAPRFilePool())) // Sanity check. Shouldn't exist when body size is 0.
+ if (LLAPRFile::isExist(filename)) // Sanity check. Shouldn't exist when body size is 0.
{
LL_WARNS("TextureCache") << "Entry has body size of zero but file " << filename << " exists. Deleting this file, too." << LL_ENDL;
}
@@ -1890,7 +1883,7 @@ void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename)
if (file_maybe_exists)
{
- LLAPRFile::remove(filename, getLocalAPRFilePool());
+ LLAPRFile::remove(filename);
}
}
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 64e3a2658c..79f5ba5835 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -142,9 +142,6 @@ protected:
std::string getTextureFileName(const LLUUID& id);
void addCompleted(Responder* responder, bool success);
-protected:
- //void setFileAPRPool(apr_pool_t* pool) { mFileAPRPool = pool ; }
-
private:
void setDirNames(ELLPath location);
void readHeaderCache();
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 1023a4339b..de22f2ae6b 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -420,7 +420,6 @@ BOOL LLFloaterTexturePicker::postBuild()
mInventoryPanel->setFilterPermMask(mImmediateFilterPermMask);
mInventoryPanel->setSelectCallback(boost::bind(&LLFloaterTexturePicker::onSelectionChange, this, _1, _2));
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mInventoryPanel->setAllowMultiSelect(FALSE);
// Disable auto selecting first filtered item because it takes away
// selection from the item set by LLTextureCtrl owning this floater.
@@ -1093,7 +1092,7 @@ public:
BOOL LLTextureCtrl::handleHover(S32 x, S32 y, MASK mask)
{
- getWindow()->setCursor(UI_CURSOR_HAND);
+ getWindow()->setCursor(mBorder->parentPointInView(x,y) ? UI_CURSOR_HAND : UI_CURSOR_ARROW);
return TRUE;
}
@@ -1102,7 +1101,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handled = LLUICtrl::handleMouseDown( x, y , mask );
- if( !handled )
+ if (!handled && mBorder->parentPointInView(x, y))
{
showPicker(FALSE);
//grab textures first...
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 18c3a3b87d..e9be45ffd0 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -674,7 +674,6 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
mRetryAttempt(0),
mActiveCount(0),
mGetStatus(0),
- mWorkMutex(NULL),
mFirstPacket(0),
mLastPacket(-1),
mTotalPackets(0),
@@ -817,7 +816,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 +887,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;
@@ -1284,7 +1283,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.
@@ -1312,7 +1311,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);
@@ -1321,7 +1320,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;
@@ -1618,7 +1617,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)
{
@@ -1670,7 +1669,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)
@@ -1816,8 +1815,6 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mDebugPause(FALSE),
mPacketCount(0),
mBadPacketCount(0),
- mQueueMutex(getAPRPool()),
- mNetworkQueueMutex(getAPRPool()),
mTextureCache(cache),
mImageDecodeThread(imagedecodethread),
mTextureBandwidth(0),
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index fa91f129b8..6873cf058a 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -307,8 +307,14 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
S32 bottom_offset = mIsScriptDialog ? (BTN_HEIGHT + IGNORE_BTN_TOP_DELTA + BOTTOM_PAD) : BOTTOM_PAD;
S32 max_width = mControlPanel->getRect().getWidth();
LLButton* ignore_btn = NULL;
+ LLButton* mute_btn = NULL;
for (std::vector<index_button_pair_t>::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;
@@ -328,6 +334,8 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
left = btn_rect.mLeft + btn_rect.getWidth() + h_pad;
mControlPanel->addChild(btn, -1);
}
+
+ U32 ignore_btn_width = 0;
if (mIsScriptDialog && ignore_btn != NULL)
{
LLRect ignore_btn_rect(ignore_btn->getRect());
@@ -340,8 +348,25 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom
ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());
ignore_btn->setRect(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 d23d2b3abd..14f17e8917 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -613,6 +613,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" )));
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 9ec4d33036..c38c8bad80 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -639,6 +639,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
if (click_action == CLICK_ACTION_NONE // not doing 1-click action
&& gSavedSettings.getBOOL("ClickToWalk") // click to walk enabled
&& !gAgent.getFlying() // don't auto-navigate while flying until that works
+ && gAgentAvatarp
&& !gAgentAvatarp->isSitting()
&& !mBlockClickToWalk // another behavior hasn't cancelled click to walk
&& !mPick.mPosGlobal.isExactlyZero() // valid coordinates for pick
diff --git a/indra/newview/lluploadfloaterobservers.cpp b/indra/newview/lluploadfloaterobservers.cpp
new file mode 100644
index 0000000000..5a6a17fbca
--- /dev/null
+++ b/indra/newview/lluploadfloaterobservers.cpp
@@ -0,0 +1,56 @@
+/**
+ * @file lluploadfloaterobservers.cpp
+ * @brief LLUploadModelPremissionsResponder definition
+ *
+ * $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 "lluploadfloaterobservers.h"
+
+LLUploadModelPremissionsResponder::LLUploadModelPremissionsResponder(const LLHandle<LLUploadPermissionsObserver>& observer)
+:mObserverHandle(observer)
+{
+}
+
+void LLUploadModelPremissionsResponder::error(U32 status, const std::string& reason)
+{
+ llwarns << "LLUploadModelPremissionsResponder::error("<< status << ": " << reason << ")" << llendl;
+
+ LLUploadPermissionsObserver* observer = mObserverHandle.get();
+
+ if (observer)
+ {
+ observer->setPermissonsErrorStatus(status, reason);
+ }
+}
+
+void LLUploadModelPremissionsResponder::result(const LLSD& content)
+{
+ LLUploadPermissionsObserver* observer = mObserverHandle.get();
+
+ if (observer)
+ {
+ observer->onPermissionsReceived(content);
+ }
+}
diff --git a/indra/newview/lluploadfloaterobservers.h b/indra/newview/lluploadfloaterobservers.h
new file mode 100644
index 0000000000..79aad282d7
--- /dev/null
+++ b/indra/newview/lluploadfloaterobservers.h
@@ -0,0 +1,97 @@
+/**
+ * @file lluploadfloaterobservers.h
+ * @brief LLUploadModelPremissionsResponder declaration
+ *
+ * $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_LLUPLOADFLOATEROBSERVERS_H
+#define LL_LLUPLOADFLOATEROBSERVERS_H
+
+#include "llfloater.h"
+#include "llhttpclient.h"
+#include "llhandle.h"
+
+class LLUploadPermissionsObserver
+{
+public:
+
+ LLUploadPermissionsObserver(){mUploadPermObserverHandle.bind(this);}
+ virtual ~LLUploadPermissionsObserver() {}
+
+ virtual void onPermissionsReceived(const LLSD& result) = 0;
+ virtual void setPermissonsErrorStatus(U32 status, const std::string& reason) = 0;
+
+ LLHandle<LLUploadPermissionsObserver> getPermObserverHandle() const {return mUploadPermObserverHandle;}
+
+protected:
+ LLRootHandle<LLUploadPermissionsObserver> mUploadPermObserverHandle;
+};
+
+class LLWholeModelFeeObserver
+{
+public:
+ LLWholeModelFeeObserver() { mWholeModelFeeObserverHandle.bind(this); }
+ virtual ~LLWholeModelFeeObserver() {}
+
+ virtual void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url) = 0;
+ virtual void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason) = 0;
+
+ LLHandle<LLWholeModelFeeObserver> getWholeModelFeeObserverHandle() const { return mWholeModelFeeObserverHandle; }
+
+protected:
+ LLRootHandle<LLWholeModelFeeObserver> mWholeModelFeeObserverHandle;
+};
+
+
+class LLWholeModelUploadObserver
+{
+public:
+ LLWholeModelUploadObserver() { mWholeModelUploadObserverHandle.bind(this); }
+ virtual ~LLWholeModelUploadObserver() {}
+
+ virtual void onModelUploadSuccess() = 0;
+
+ virtual void onModelUploadFailure() = 0;
+
+ LLHandle<LLWholeModelUploadObserver> getWholeModelUploadObserverHandle() const { return mWholeModelUploadObserverHandle; }
+
+protected:
+ LLRootHandle<LLWholeModelUploadObserver> mWholeModelUploadObserverHandle;
+};
+
+
+class LLUploadModelPremissionsResponder : public LLHTTPClient::Responder
+{
+public:
+
+ LLUploadModelPremissionsResponder(const LLHandle<LLUploadPermissionsObserver>& observer);
+
+ void error(U32 status, const std::string& reason);
+
+ void result(const LLSD& content);
+
+private:
+ LLHandle<LLUploadPermissionsObserver> mObserverHandle;
+};
+
+#endif /* LL_LLUPLOADFLOATEROBSERVERS_H */
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index b19c738ed2..f7fa5690d6 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -36,6 +36,7 @@
#include "llviewerwindow.h"
#include "llvoiceclient.h"
#include "llviewermedia.h"
+#include "llprogressview.h"
/////////////////////////////////////////////////////////
@@ -101,7 +102,16 @@ void audio_update_volume(bool force_update)
{
F32 master_volume = gSavedSettings.getF32("AudioLevelMaster");
BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
- if (!gViewerWindow->getActive() && (gSavedSettings.getBOOL("MuteWhenMinimized")))
+
+ LLProgressView* progress = gViewerWindow->getProgressView();
+ BOOL progress_view_visible = FALSE;
+
+ if (progress)
+ {
+ progress_view_visible = progress->getVisible();
+ }
+
+ if (!gViewerWindow->getActive() && gSavedSettings.getBOOL("MuteWhenMinimized"))
{
mute_audio = TRUE;
}
@@ -114,7 +124,7 @@ void audio_update_volume(bool force_update)
gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler"));
gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));
- gAudiop->setMuted(mute_audio);
+ gAudiop->setMuted(mute_audio || progress_view_visible);
if (force_update)
{
@@ -136,7 +146,7 @@ void audio_update_volume(bool force_update)
F32 music_volume = gSavedSettings.getF32("AudioLevelMusic");
BOOL music_muted = gSavedSettings.getBOOL("MuteMusic");
music_volume = mute_volume * master_volume * music_volume;
- gAudiop->setInternetStreamGain ( music_muted ? 0.f : music_volume );
+ gAudiop->setInternetStreamGain ( music_muted || progress_view_visible ? 0.f : music_volume );
}
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 87ca80260f..b87ca1eaec 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -566,7 +566,7 @@ bool toggle_show_object_render_cost(const LLSD& newvalue)
return true;
}
-void toggle_updater_service_active(LLControlVariable* control, const LLSD& new_value)
+void toggle_updater_service_active(const LLSD& new_value)
{
if(new_value.asInteger())
{
@@ -735,7 +735,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2));
gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));
gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
- gSavedSettings.getControl("UpdaterServiceSetting")->getSignal()->connect(&toggle_updater_service_active);
+ gSavedSettings.getControl("UpdaterServiceSetting")->getSignal()->connect(boost::bind(&toggle_updater_service_active, _2));
gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
gSavedSettings.getControl("RenderTransparentWater")->getSignal()->connect(boost::bind(&handleRenderTransparentWaterChanged, _2));
}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index f725f0fe86..6142ee0dd6 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -178,8 +178,8 @@ void display_update_camera()
gViewerWindow->setup3DRender();
// update all the sky/atmospheric/water settings
- LLWLParamManager::instance()->update(LLViewerCamera::getInstance());
- LLWaterParamManager::instance()->update(LLViewerCamera::getInstance());
+ LLWLParamManager::getInstance()->update(LLViewerCamera::getInstance());
+ LLWaterParamManager::getInstance()->update(LLViewerCamera::getInstance());
// Update land visibility too
LLWorld::getInstance()->setLandFarClip(final_far);
@@ -202,6 +202,7 @@ void display_stats()
gMemoryAllocated = LLMemory::getCurrentRSS();
U32 memory = (U32)(gMemoryAllocated / (1024*1024));
llinfos << llformat("MEMORY: %d MB", memory) << llendl;
+ LLMemory::logMemoryInfo() ;
gRecentMemoryTime.reset();
}
}
@@ -616,6 +617,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
&& LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")
&& gSavedSettings.getBOOL("UseOcclusion")
&& gGLManager.mHasOcclusionQuery) ? 2 : 0;
+ LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
/*if (LLPipeline::sUseOcclusion && LLPipeline::sRenderDeferred)
{ //force occlusion on for all render types if doing deferred render (tighter shadow frustum)
@@ -691,7 +693,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);
@@ -709,6 +715,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
//if (!for_snapshot)
{
LLMemType mt_gw(LLMemType::MTYPE_DISPLAY_GEN_REFLECTION);
@@ -717,6 +726,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gPipeline.generateHighlight(*LLViewerCamera::getInstance());
}
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
//////////////////////////////////////
//
// Update images, using the image stats generated during object update/culling
@@ -743,6 +755,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLImageGL::deleteDeadTextures();
stop_glerror();
}
+
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
///////////////////////////////////
//
// StateSort
@@ -770,6 +786,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
}
}
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
LLPipeline::sUseOcclusion = occlusion;
{
@@ -828,6 +847,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
LLPipeline::refreshRenderDeferred();
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
stop_glerror();
if (to_texture)
@@ -878,6 +900,14 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
stop_glerror();
}
+ for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++)
+ { //dummy cleanup of any currently bound textures
+ if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE)
+ {
+ gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType());
+ gGL.getTexUnit(i)->disable();
+ }
+ }
LLAppViewer::instance()->pingMainloopTimeout("Display:RenderFlush");
if (to_texture)
@@ -1339,7 +1369,7 @@ void render_ui_2d()
}
stop_glerror();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
// render outline for HUD
if (isAgentAvatarValid() && gAgentCamera.mHUDCurZoom < 0.98f)
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index a1c2c926af..fecc6d91bd 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -48,11 +48,14 @@
#include "llfloaterbulkpermission.h"
#include "llfloaterbump.h"
#include "llfloatercamera.h"
-#include "llfloaterdaycycle.h"
+#include "llfloaterdeleteenvpreset.h"
#include "llfloaterdisplayname.h"
+#include "llfloatereditdaycycle.h"
+#include "llfloatereditsky.h"
+#include "llfloatereditwater.h"
+#include "llfloaterenvironmentsettings.h"
#include "llfloaterevent.h"
#include "llfloatersearch.h"
-#include "llfloaterenvsettings.h"
#include "llfloaterfonttest.h"
#include "llfloatergesture.h"
#include "llfloatergodtools.h"
@@ -101,9 +104,7 @@
#include "llfloatertopobjects.h"
#include "llfloateruipreview.h"
#include "llfloatervoiceeffect.h"
-#include "llfloaterwater.h"
#include "llfloaterwhitelistentry.h"
-#include "llfloaterwindlight.h"
#include "llfloaterwindowsize.h"
#include "llfloaterworldmap.h"
#include "llimfloatercontainer.h"
@@ -129,12 +130,12 @@
// *NOTE: Please add files in alphabetical order to keep merges easy.
-// handle secondlife:///app/floater/{NAME} URLs
+// handle secondlife:///app/openfloater/{NAME} URLs
class LLFloaterOpenHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
- LLFloaterOpenHandler() : LLCommandHandler("floater", UNTRUSTED_THROTTLE) { }
+ LLFloaterOpenHandler() : LLCommandHandler("openfloater", UNTRUSTED_THROTTLE) { }
bool handle(const LLSD& params, const LLSD& query_map,
LLMediaCtrl* web)
@@ -179,11 +180,12 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>);
- LLFloaterReg::add("env_day_cycle", "floater_day_cycle_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDayCycle>);
LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostProcess>);
- LLFloaterReg::add("env_settings", "floater_env_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEnvSettings>);
- LLFloaterReg::add("env_water", "floater_water.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWater>);
- LLFloaterReg::add("env_windlight", "floater_windlight_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWindLight>);
+ LLFloaterReg::add("env_settings", "floater_environment_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEnvironmentSettings>);
+ LLFloaterReg::add("env_delete_preset", "floater_delete_env_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeleteEnvPreset>);
+ LLFloaterReg::add("env_edit_sky", "floater_edit_sky_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditSky>);
+ LLFloaterReg::add("env_edit_water", "floater_edit_water_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditWater>);
+ LLFloaterReg::add("env_edit_day_cycle", "floater_edit_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditDayCycle>);
LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>);
@@ -230,6 +232,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("postcard", "floater_postcard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostcard>);
LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
+ LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
@@ -244,15 +247,11 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);
- LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml",
- &LLFloaterReg::build<LLFloaterTestInspectors>);
+ LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml", &LLFloaterReg::build<LLFloaterTestInspectors>);
//LLFloaterReg::add("test_list_view", "floater_test_list_view.xml",&LLFloaterReg::build<LLFloaterTestListView>);
- LLFloaterReg::add("test_textbox", "floater_test_textbox.xml",
- &LLFloaterReg::build<LLFloater>);
- LLFloaterReg::add("test_text_editor", "floater_test_text_editor.xml",
- &LLFloaterReg::build<LLFloater>);
- LLFloaterReg::add("test_widgets", "floater_test_widgets.xml",
- &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_textbox", "floater_test_textbox.xml", &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_text_editor", "floater_test_text_editor.xml", &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_widgets", "floater_test_widgets.xml", &LLFloaterReg::build<LLFloater>);
LLFloaterReg::add("top_objects", "floater_top_objects.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTopObjects>);
LLFloaterReg::add("reporter", "floater_report_abuse.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterReporter>);
@@ -272,7 +271,9 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("start_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRunQueue>);
LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
- LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
+ LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
+ LLFloaterReg::add("profile", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWebContent>);
+
LLFloaterUIPreviewUtil::registerFloater();
LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAnimPreview>, "upload");
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index 42f780a8a3..9101222393 100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -128,8 +128,10 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()
addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "Inv_SysOpen", "Inv_SysClosed", TRUE));
addEntry(LLFolderType::FT_MESH, new ViewerFolderEntry("Meshes", "Inv_SysOpen", "Inv_SysClosed", FALSE));
-
addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "Inv_SysOpen", "Inv_SysClosed", FALSE));
+ addEntry(LLFolderType::FT_OUTBOX, new ViewerFolderEntry("Outbox", "Inv_SysOpen", "Inv_SysClosed", FALSE));
+
+ addEntry(LLFolderType::FT_BASIC_ROOT, new ViewerFolderEntry("Basic Root", "Inv_SysOpen", "Inv_SysClosed", FALSE));
addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "Inv_FolderOpen", "Inv_FolderClosed", FALSE, "default"));
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index 9fe8c142b9..3a3d4f3881 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -101,8 +101,9 @@ void LLViewerHelp::showTopic(const std::string &topic)
// work out the URL for this topic and display it
showHelp();
+
std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic );
- setRawURL( helpURL );
+ setRawURL(helpURL);
}
std::string LLViewerHelp::defaultTopic()
@@ -148,18 +149,7 @@ std::string LLViewerHelp::getTopicFromFocus()
// static
void LLViewerHelp::showHelp()
{
- LLFloaterHelpBrowser* helpbrowser = dynamic_cast<LLFloaterHelpBrowser*>(LLFloaterReg::getInstance("help_browser"));
- if (helpbrowser)
- {
- BOOL visible = TRUE;
- BOOL take_focus = TRUE;
- helpbrowser->setVisible(visible);
- helpbrowser->setFrontmost(take_focus);
- }
- else
- {
- llwarns << "Eep, help_browser floater not found" << llendl;
- }
+ LLFloaterReg::showInstance("help_browser");
}
// static
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 9e58acdcd3..ad65a8846c 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -139,7 +139,35 @@ public:
mInventoryItemsDict["Female - Shrug"] = LLTrans::getString("Female - Shrug");
mInventoryItemsDict["Female - Stick tougue out"]= LLTrans::getString("Female - Stick tougue out");
mInventoryItemsDict["Female - Wow"] = LLTrans::getString("Female - Wow");
-
+
+ //common
+ mInventoryItemsDict["/bow1"] = LLTrans::getString("/bow1");
+ mInventoryItemsDict["/clap"] = LLTrans::getString("/clap");
+ mInventoryItemsDict["/count"] = LLTrans::getString("/count");
+ mInventoryItemsDict["/extinguish"] = LLTrans::getString("/extinguish");
+ mInventoryItemsDict["/kmb"] = LLTrans::getString("/kmb");
+ mInventoryItemsDict["/muscle"] = LLTrans::getString("/muscle");
+ mInventoryItemsDict["/no"] = LLTrans::getString("/no");
+ mInventoryItemsDict["/no!"] = LLTrans::getString("/no!");
+ mInventoryItemsDict["/paper"] = LLTrans::getString("/paper");
+ mInventoryItemsDict["/pointme"] = LLTrans::getString("/pointme");
+ mInventoryItemsDict["/pointyou"] = LLTrans::getString("/pointyou");
+ mInventoryItemsDict["/rock"] = LLTrans::getString("/rock");
+ mInventoryItemsDict["/scissor"] = LLTrans::getString("/scissor");
+ mInventoryItemsDict["/smoke"] = LLTrans::getString("/smoke");
+ mInventoryItemsDict["/stretch"] = LLTrans::getString("/stretch");
+ mInventoryItemsDict["/whistle"] = LLTrans::getString("/whistle");
+ mInventoryItemsDict["/yes"] = LLTrans::getString("/yes");
+ mInventoryItemsDict["/yes!"] = LLTrans::getString("/yes!");
+ mInventoryItemsDict["afk"] = LLTrans::getString("afk");
+ mInventoryItemsDict["dance1"] = LLTrans::getString("dance1");
+ mInventoryItemsDict["dance2"] = LLTrans::getString("dance2");
+ mInventoryItemsDict["dance3"] = LLTrans::getString("dance3");
+ mInventoryItemsDict["dance4"] = LLTrans::getString("dance4");
+ mInventoryItemsDict["dance5"] = LLTrans::getString("dance5");
+ mInventoryItemsDict["dance6"] = LLTrans::getString("dance6");
+ mInventoryItemsDict["dance7"] = LLTrans::getString("dance7");
+ mInventoryItemsDict["dance8"] = LLTrans::getString("dance8");
}
/**
@@ -418,6 +446,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const
BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
{
BOOL rv = LLInventoryItem::fromLLSD(item);
+
+ LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
+
mIsComplete = TRUE;
return rv;
}
@@ -1269,7 +1300,7 @@ void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, cons
{
std::string type_name = userdata.asString();
- if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
+ if (("inbox" == type_name) || ("outbox" == type_name) || ("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
{
LLFolderType::EType preferred_type = LLFolderType::lookup(type_name);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 1e53274cd6..31b22119cb 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -64,8 +64,10 @@
#include "llappviewer.h"
#include "lllogininstance.h"
//#include "llfirstuse.h"
+#include "llviewernetwork.h"
#include "llwindow.h"
+
#include "llfloatermediabrowser.h" // for handling window close requests and geometry change requests in media browser windows.
#include "llfloaterwebcontent.h" // for handling window close requests and geometry change requests in media browser windows.
@@ -342,6 +344,8 @@ static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap;
static LLTimer sMediaCreateTimer;
static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;
static F32 sGlobalVolume = 1.0f;
+static bool sForceUpdate = false;
+static LLUUID sOnlyAudibleTextureID = LLUUID::null;
static F64 sLowestLoadableImplInterest = 0.0f;
static bool sAnyMediaShowing = false;
static boost::signals2::connection sTeleportFinishConnection;
@@ -604,7 +608,7 @@ bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id)
// static
void LLViewerMedia::setVolume(F32 volume)
{
- if(volume != sGlobalVolume)
+ if(volume != sGlobalVolume || sForceUpdate)
{
sGlobalVolume = volume;
impl_list::iterator iter = sViewerMediaImplList.begin();
@@ -615,6 +619,8 @@ void LLViewerMedia::setVolume(F32 volume)
LLViewerMediaImpl* pimpl = *iter;
pimpl->updateVolume();
}
+
+ sForceUpdate = false;
}
}
@@ -1360,6 +1366,34 @@ void LLViewerMedia::removeCookie(const std::string &name, const std::string &dom
}
+class LLInventoryUserStatusResponder : public LLHTTPClient::Responder
+{
+public:
+ LLInventoryUserStatusResponder()
+ : LLCurl::Responder()
+ {
+ }
+
+ void completed(U32 status, const std::string& reason, const LLSD& content)
+ {
+ if (isGoodStatus(status))
+ {
+ // Complete success
+ gSavedSettings.setBOOL("InventoryDisplayInbox", true);
+ }
+ else if (status == 401)
+ {
+ // API is available for use but OpenID authorization failed
+ gSavedSettings.setBOOL("InventoryDisplayInbox", true);
+ }
+ else
+ {
+ // API in unavailable
+ llinfos << "Marketplace API is unavailable -- Inbox may be disabled, status = " << status << ", reason = " << reason << llendl;
+ }
+ }
+};
+
/////////////////////////////////////////////////////////////////////////////////////////
// static
void LLViewerMedia::setOpenIDCookie()
@@ -1406,6 +1440,25 @@ void LLViewerMedia::setOpenIDCookie()
LLHTTPClient::get(profile_url,
new LLViewerMediaWebProfileResponder(raw_profile_url.getAuthority()),
headers);
+
+ std::string url = "https://marketplace.secondlife.com/";
+
+ if (!LLGridManager::getInstance()->isInProductionGrid())
+ {
+ std::string gridLabel = LLGridManager::getInstance()->getGridLabel();
+ url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str());
+ }
+
+ 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);
}
}
@@ -1577,6 +1630,15 @@ void LLViewerMedia::onTeleportFinished()
gSavedSettings.setBOOL("MediaTentativeAutoPlay", true);
}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::setOnlyAudibleMediaTextureID(const LLUUID& texture_id)
+{
+ sOnlyAudibleTextureID = texture_id;
+ sForceUpdate = true;
+}
+
//////////////////////////////////////////////////////////////////////////////////////////
// LLViewerMediaImpl
//////////////////////////////////////////////////////////////////////////////////////////
@@ -1714,6 +1776,7 @@ void LLViewerMediaImpl::createMediaSource()
LL_WARNS("Media") << "Failed to initialize media for mime type " << mMimeType << LL_ENDL;
}
}
+
}
//////////////////////////////////////////////////////////////////////////////////////////
@@ -1818,7 +1881,10 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
// collect 'javascript enabled' setting from prefs and send to embedded browser
bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" );
media_source->setJavascriptEnabled( javascript_enabled );
-
+
+ bool media_plugin_debugging_enabled = gSavedSettings.getBOOL("MediaPluginDebugging");
+ media_source->enableMediaPluginDebugging( media_plugin_debugging_enabled );
+
media_source->setTarget(target);
const std::string plugin_dir = gDirUtilp->getLLPluginDir();
@@ -2139,7 +2205,14 @@ void LLViewerMediaImpl::updateVolume()
}
}
- mMediaSource->setVolume(volume);
+ if (sOnlyAudibleTextureID == LLUUID::null || sOnlyAudibleTextureID == mTextureId)
+ {
+ mMediaSource->setVolume(volume);
+ }
+ else
+ {
+ mMediaSource->setVolume(0.0f);
+ }
}
}
@@ -2349,15 +2422,13 @@ void LLViewerMediaImpl::updateJavascriptObject()
if ( mMediaSource )
{
// flag to expose this information to internal browser or not.
- bool expose_javascript_object = gSavedSettings.getBOOL("BrowserEnableJSObject");
- mMediaSource->jsExposeObjectEvent( expose_javascript_object );
+ bool enable = gSavedSettings.getBOOL("BrowserEnableJSObject");
+ mMediaSource->jsEnableObject( enable );
- // indicate if the values we have are valid (currently do this blanket-fashion for
- // everything depending on whether you are logged in or not - this may require a
- // more granular approach once variables are added that ARE valid before login
+ // these values are only menaingful after login so don't set them before
bool logged_in = LLLoginInstance::getInstance()->authSuccess();
- mMediaSource->jsValuesValidEvent( logged_in );
-
+ if ( logged_in )
+ {
// current location within a region
LLVector3 agent_pos = gAgent.getPositionAgent();
double x = agent_pos.mV[ VX ];
@@ -2386,6 +2457,7 @@ void LLViewerMediaImpl::updateJavascriptObject()
region_name = region->getName();
};
mMediaSource->jsAgentRegionEvent( region_name );
+ }
// language code the viewer is set to
mMediaSource->jsAgentLanguageEvent( LLUI::getLanguage() );
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index a70c6f4887..aeac6ba29a 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -160,6 +160,8 @@ public:
static void createSpareBrowserMediaSource();
static LLPluginClassMedia* getSpareBrowserMediaSource();
+
+ static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id);
private:
static void setOpenIDCookie();
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 41d8b57f36..26599f557e 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -44,7 +44,9 @@
#include "llbottomtray.h"
#include "llcompilequeue.h"
#include "llconsole.h"
+#include "lldaycyclemanager.h"
#include "lldebugview.h"
+#include "llenvmanager.h"
#include "llfilepicker.h"
#include "llfirstuse.h"
#include "llfloaterbuy.h"
@@ -60,6 +62,7 @@
#include "llfloatersnapshot.h"
#include "llfloatertools.h"
#include "llfloaterworldmap.h"
+#include "llfloaterbuildoptions.h"
#include "llavataractions.h"
#include "lllandmarkactions.h"
#include "llgroupmgr.h"
@@ -99,6 +102,7 @@
#include "llworldmap.h"
#include "pipeline.h"
#include "llviewerjoystick.h"
+#include "llwaterparammanager.h"
#include "llwlanimator.h"
#include "llwlparammanager.h"
#include "llfloatercamera.h"
@@ -107,10 +111,13 @@
#include "lltrans.h"
#include "lleconomy.h"
#include "lltoolgrab.h"
+#include "llwindow.h"
#include "boost/unordered_map.hpp"
using namespace LLVOAvatarDefines;
+typedef LLPointer<LLViewerObject> LLViewerObjectPtr;
+
static boost::unordered_map<std::string, LLStringExplicit> sDefaultItemLabels;
BOOL enable_land_build(void*);
@@ -827,7 +834,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() );
@@ -840,7 +848,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;
@@ -4003,23 +4012,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<LLViewerObjectPtr>* derez_objectsp,
+ bool only_check = false)
{
- if(gAgentCamera.cameraMouselook())
- {
- gAgentCamera.changeCameraToDefault();
- }
- //gInventoryView->setPanelOpen(TRUE);
+ bool found = false;
- std::string error;
- LLDynamicArray<LLViewerObject*> 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();
@@ -4086,10 +4093,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<LLViewerObjectPtr>* objectsp)
+{
+ LLDynamicArray<LLViewerObjectPtr> 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.
@@ -4097,13 +4149,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;
@@ -4128,11 +4180,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
@@ -4157,6 +4209,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;
@@ -4168,12 +4227,19 @@ 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;
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;
}
@@ -4184,16 +4250,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<LLViewerObjectPtr> mReturnableObjects;
+ std::string mError;
+ LLViewerRegion* mFirstRegion;
};
@@ -4218,29 +4291,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;
@@ -7159,9 +7210,11 @@ class LLToolsUseSelectionForGrid : public view_listener_t
} func;
LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func);
LLSelectMgr::getInstance()->setGridMode(GRID_MODE_REF_OBJECT);
- if (gFloaterTools)
+
+ LLFloaterBuildOptions* build_options_floater = LLFloaterReg::getTypedInstance<LLFloaterBuildOptions>("build_options");
+ if (build_options_floater && build_options_floater->getVisible())
{
- gFloaterTools->mComboGridMode->setCurrentByIndex((S32)GRID_MODE_REF_OBJECT);
+ build_options_floater->setGridMode(GRID_MODE_REF_OBJECT);
}
return true;
}
@@ -7582,94 +7635,129 @@ class LLWorldEnvSettings : public view_listener_t
bool handleEvent(const LLSD& userdata)
{
std::string tod = userdata.asString();
- LLVector3 sun_direction;
if (tod == "editor")
{
- // if not there or is hidden, show it
LLFloaterReg::toggleInstance("env_settings");
return true;
}
-
+
if (tod == "sunrise")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.25);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Sunrise");
}
else if (tod == "noon")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.567);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Midday");
}
else if (tod == "sunset")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.75);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Sunset");
}
else if (tod == "midnight")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.0);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Midnight");
}
else
{
- LLWLParamManager::instance()->mAnimator.mIsRunning = true;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
+ LLEnvManagerNew::instance().setUseDayCycle(LLEnvManagerNew::instance().getDayCycleName());
}
+
return true;
}
};
-/// Water Menu callbacks
-class LLWorldWaterSettings : public view_listener_t
-{
+class LLWorldEnvPreset : public view_listener_t
+{
bool handleEvent(const LLSD& userdata)
{
- LLFloaterReg::toggleInstance("env_water");
+ std::string item = userdata.asString();
+
+ if (item == "new_water")
+ {
+ LLFloaterReg::showInstance("env_edit_water", "new");
+ }
+ else if (item == "edit_water")
+ {
+ LLFloaterReg::showInstance("env_edit_water", "edit");
+ }
+ else if (item == "delete_water")
+ {
+ LLFloaterReg::showInstance("env_delete_preset", "water");
+ }
+ else if (item == "new_sky")
+ {
+ LLFloaterReg::showInstance("env_edit_sky", "new");
+ }
+ else if (item == "edit_sky")
+ {
+ LLFloaterReg::showInstance("env_edit_sky", "edit");
+ }
+ else if (item == "delete_sky")
+ {
+ LLFloaterReg::showInstance("env_delete_preset", "sky");
+ }
+ else if (item == "new_day_cycle")
+ {
+ LLFloaterReg::showInstance("env_edit_day_cycle", "new");
+ }
+ else if (item == "edit_day_cycle")
+ {
+ LLFloaterReg::showInstance("env_edit_day_cycle", "edit");
+ }
+ else if (item == "delete_day_cycle")
+ {
+ LLFloaterReg::showInstance("env_delete_preset", "day_cycle");
+ }
+ else
+ {
+ llwarns << "Unknown item selected" << llendl;
+ }
+
return true;
}
};
-/// Post-Process callbacks
-class LLWorldPostProcess : public view_listener_t
+class LLWorldEnableEnvPreset : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLFloaterReg::showInstance("env_post_process");
- return true;
+ std::string item = userdata.asString();
+
+ if (item == "delete_water")
+ {
+ LLWaterParamManager::preset_name_list_t user_waters;
+ LLWaterParamManager::instance().getUserPresetNames(user_waters);
+ return !user_waters.empty();
+ }
+ else if (item == "delete_sky")
+ {
+ LLWLParamManager::preset_name_list_t user_skies;
+ LLWLParamManager::instance().getUserPresetNames(user_skies);
+ return !user_skies.empty();
+ }
+ else if (item == "delete_day_cycle")
+ {
+ LLDayCycleManager::preset_name_list_t user_days;
+ LLDayCycleManager::instance().getUserPresetNames(user_days);
+ return !user_days.empty();
+ }
+ else
+ {
+ llwarns << "Unknown item" << llendl;
+ }
+
+ return false;
}
};
-/// Day Cycle callbacks
-class LLWorldDayCycle : public view_listener_t
+
+/// Post-Process callbacks
+class LLWorldPostProcess : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLFloaterReg::showInstance("env_day_cycle");
+ LLFloaterReg::showInstance("env_post_process");
return true;
}
};
@@ -7735,6 +7823,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();
@@ -7902,9 +8039,9 @@ void initialize_menus()
view_listener_t::addMenu(new LLWorldCheckAlwaysRun(), "World.CheckAlwaysRun");
view_listener_t::addMenu(new LLWorldEnvSettings(), "World.EnvSettings");
- view_listener_t::addMenu(new LLWorldWaterSettings(), "World.WaterSettings");
+ view_listener_t::addMenu(new LLWorldEnvPreset(), "World.EnvPreset");
+ view_listener_t::addMenu(new LLWorldEnableEnvPreset(), "World.EnableEnvPreset");
view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess");
- view_listener_t::addMenu(new LLWorldDayCycle(), "World.DayCycle");
view_listener_t::addMenu(new LLWorldToggleMovementControls(), "World.Toggle.MovementControls");
view_listener_t::addMenu(new LLWorldToggleCameraControls(), "World.Toggle.CameraControls");
@@ -8224,6 +8361,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");
commit.add("Destination.show", boost::bind(&toggle_destination_and_avatar_picker, 0));
commit.add("Avatar.show", boost::bind(&toggle_destination_and_avatar_picker, 1));
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index b9293b3b31..8139f7deda 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -149,7 +149,7 @@ void LLFilePickerThread::run()
//static
void LLFilePickerThread::initClass()
{
- sMutex = new LLMutex(NULL);
+ sMutex = new LLMutex();
}
//static
@@ -816,8 +816,7 @@ LLUUID upload_new_resource(
uuid = tid.makeAssetID(gAgent.getSecureSessionID());
// copy this file into the vfs for upload
S32 file_size;
- LLAPRFile infile ;
- infile.open(filename, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(filename, LL_APR_RB, &file_size);
if (infile.getFileHandle())
{
LLVFile file(gVFS, uuid, asset_type, LLVFile::WRITE);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 7ab335314a..68745d5aeb 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -37,6 +37,7 @@
#include "lleconomy.h"
#include "lleventtimer.h"
#include "llfloaterreg.h"
+#include "llfolderview.h"
#include "llfollowcamparams.h"
#include "llinventorydefines.h"
#include "lllslconstants.h"
@@ -87,6 +88,7 @@
#include "lluri.h"
#include "llviewergenericmessage.h"
#include "llviewermenu.h"
+#include "llviewerinventory.h"
#include "llviewerjoystick.h"
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
@@ -694,7 +696,7 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
return false;
}
-static void highlight_inventory_items_in_panel(const std::vector<LLUUID>& items, LLInventoryPanel *inventory_panel)
+static void highlight_inventory_objects_in_panel(const std::vector<LLUUID>& items, LLInventoryPanel *inventory_panel)
{
if (NULL == inventory_panel) return;
@@ -708,7 +710,7 @@ static void highlight_inventory_items_in_panel(const std::vector<LLUUID>& items,
continue;
}
- LLInventoryItem* item = gInventory.getItem(item_id);
+ LLInventoryObject* item = gInventory.getObject(item_id);
llassert(item);
if (!item) {
continue;
@@ -787,7 +789,6 @@ class LLViewerInventoryMoveFromWorldObserver : public LLInventoryAddItemByAssetO
public:
LLViewerInventoryMoveFromWorldObserver()
: LLInventoryAddItemByAssetObserver()
- , mActivePanel(NULL)
{
}
@@ -798,13 +799,16 @@ private:
/*virtual */void onAssetAdded(const LLUUID& asset_id)
{
// Store active Inventory panel.
- mActivePanel = LLInventoryPanel::getActiveInventoryPanel();
+ if (LLInventoryPanel::getActiveInventoryPanel())
+ {
+ mActivePanel = LLInventoryPanel::getActiveInventoryPanel()->getHandle();
+ }
// Store selected items (without destination folder)
mSelectedItems.clear();
- if (mActivePanel)
+ if (LLInventoryPanel::getActiveInventoryPanel())
{
- mSelectedItems = mActivePanel->getRootFolder()->getSelectionList();
+ mSelectedItems = LLInventoryPanel::getActiveInventoryPanel()->getRootFolder()->getSelectionList();
}
mSelectedItems.erase(mMoveIntoFolderID);
}
@@ -815,12 +819,14 @@ private:
*/
void done()
{
+ LLInventoryPanel* active_panel = dynamic_cast<LLInventoryPanel*>(mActivePanel.get());
+
// if selection is not changed since watch started lets hightlight new items.
- if (mActivePanel && !isSelectionChanged())
+ if (active_panel && !isSelectionChanged())
{
LL_DEBUGS("Inventory_Move") << "Selecting new items..." << LL_ENDL;
- mActivePanel->clearSelection();
- highlight_inventory_items_in_panel(mAddedItems, mActivePanel);
+ active_panel->clearSelection();
+ highlight_inventory_objects_in_panel(mAddedItems, active_panel);
}
}
@@ -828,16 +834,16 @@ private:
* Returns true if selected inventory items were changed since moved inventory items were started to watch.
*/
bool isSelectionChanged()
- {
- const LLInventoryPanel * const current_active_panel = LLInventoryPanel::getActiveInventoryPanel();
+ {
+ LLInventoryPanel* active_panel = dynamic_cast<LLInventoryPanel*>(mActivePanel.get());
- if (NULL == mActivePanel || current_active_panel != mActivePanel)
+ if (NULL == active_panel)
{
return true;
}
// get selected items (without destination folder)
- selected_items_t selected_items = mActivePanel->getRootFolder()->getSelectionList();
+ selected_items_t selected_items = active_panel->getRootFolder()->getSelectionList();
selected_items.erase(mMoveIntoFolderID);
// compare stored & current sets of selected items
@@ -851,7 +857,7 @@ private:
return different_items.size() > 0;
}
- LLInventoryPanel *mActivePanel;
+ LLHandle<LLPanel> mActivePanel;
typedef std::set<LLUUID> selected_items_t;
selected_items_t mSelectedItems;
@@ -880,6 +886,75 @@ void set_dad_inventory_item(LLInventoryItem* inv_item, const LLUUID& into_folder
gInventoryMoveObserver->watchAsset(inv_item->getAssetUUID());
}
+
+/**
+ * Class to observe moving of items and to select them in inventory.
+ *
+ * Used currently for dragging from inbox to regular inventory folders
+ */
+
+class LLViewerInventoryMoveObserver : public LLInventoryObserver
+{
+public:
+
+ LLViewerInventoryMoveObserver(const LLUUID& object_id)
+ : LLInventoryObserver()
+ , mObjectID(object_id)
+ {
+ if (LLInventoryPanel::getActiveInventoryPanel())
+ {
+ mActivePanel = LLInventoryPanel::getActiveInventoryPanel()->getHandle();
+ }
+ }
+
+ virtual ~LLViewerInventoryMoveObserver() {}
+ virtual void changed(U32 mask);
+
+private:
+ LLUUID mObjectID;
+ LLHandle<LLPanel> mActivePanel;
+
+};
+
+void LLViewerInventoryMoveObserver::changed(U32 mask)
+{
+ LLInventoryPanel* active_panel = dynamic_cast<LLInventoryPanel*>(mActivePanel.get());
+
+ if (NULL == active_panel)
+ {
+ gInventory.removeObserver(this);
+ return;
+ }
+
+ if((mask & (LLInventoryObserver::STRUCTURE)) != 0)
+ {
+ const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+ std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+ std::set<LLUUID>::const_iterator id_end = changed_items.end();
+ for (;id_it != id_end; ++id_it)
+ {
+ if ((*id_it) == mObjectID)
+ {
+ active_panel->clearSelection();
+ std::vector<LLUUID> items;
+ items.push_back(mObjectID);
+ highlight_inventory_objects_in_panel(items, active_panel);
+ active_panel->getRootFolder()->scrollToShowSelection();
+
+ gInventory.removeObserver(this);
+ break;
+ }
+ }
+ }
+}
+
+void set_dad_inbox_object(const LLUUID& object_id)
+{
+ LLViewerInventoryMoveObserver* move_observer = new LLViewerInventoryMoveObserver(object_id);
+ gInventory.addObserver(move_observer);
+}
+
//unlike the FetchObserver for AgentOffer, we only make one
//instance of the AddedObserver for TaskOffers
//and it never dies. We do this because we don't know the UUID of
@@ -936,7 +1011,6 @@ protected:
//one global instance to bind them
LLOpenTaskOffer* gNewInventoryObserver=NULL;
-
class LLNewInventoryHintObserver : public LLInventoryAddedObserver
{
protected:
@@ -946,6 +1020,8 @@ protected:
}
};
+LLNewInventoryHintObserver* gNewInventoryHintObserver=NULL;
+
void start_new_inventory_observer()
{
if (!gNewInventoryObserver) //task offer observer
@@ -962,54 +1038,37 @@ void start_new_inventory_observer()
gInventory.addObserver(gInventoryMoveObserver);
}
- gInventory.addObserver(new LLNewInventoryHintObserver());
+ if (!gNewInventoryHintObserver)
+ {
+ // Observer is deleted by gInventory
+ gNewInventoryHintObserver = new LLNewInventoryHintObserver();
+ gInventory.addObserver(gNewInventoryHintObserver);
+ }
}
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;
@@ -1414,7 +1473,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);
@@ -1446,7 +1505,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)
{
@@ -1501,13 +1560,10 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
LLSD args;
args["MESSAGE"] = log_message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
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:
@@ -1653,7 +1709,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
from_string = chatHistory_string = mFromName;
}
- bool busy=FALSE;
+ bool busy = gAgent.getBusy();
switch(button)
{
@@ -1675,7 +1731,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
LLSD args;
args["MESSAGE"] = log_message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
// we will want to open this item when it comes back.
@@ -1699,9 +1755,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:
@@ -1726,7 +1779,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
LLSD args;
args["MESSAGE"] = log_message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
if (busy && (!mFromGroup && !mFromObject))
@@ -1771,14 +1824,6 @@ void LLOfferInfo::initRespondFunctionMap()
void inventory_offer_handler(LLOfferInfo* info)
{
- //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))
{
@@ -2590,6 +2635,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);
@@ -4265,8 +4316,7 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
- //LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
- // << ", " << phase << LL_ENDL;
+ LL_DEBUGS("Windlight Sync") << "Sun phase: " << phase << " rad = " << fmodf(phase / F_TWO_PI + 0.25, 1.f) * 24.f << " h" << LL_ENDL;
gSky.setSunPhase(phase);
gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
@@ -4324,10 +4374,13 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
{
return;
}
-
- // Don't play sounds from gestures if they are not enabled.
- if (!gSavedSettings.getBOOL("EnableGestureSounds")) return;
+ // Don't play sounds from gestures if they are not enabled.
+ if (object_id == owner_id && !gSavedSettings.getBOOL("EnableGestureSounds"))
+ {
+ return;
+ }
+
gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
}
@@ -6261,6 +6314,18 @@ void send_group_notice(const LLUUID& group_id,
bool handle_lure_callback(const LLSD& notification, const LLSD& response)
{
+ static const unsigned OFFER_RECIPIENT_LIMIT = 250;
+ if(notification["payload"]["ids"].size() > OFFER_RECIPIENT_LIMIT)
+ {
+ // More than OFFER_RECIPIENT_LIMIT targets will overload the message
+ // producing an llerror.
+ LLSD args;
+ args["OFFERS"] = notification["payload"]["ids"].size();
+ args["LIMIT"] = static_cast<int>(OFFER_RECIPIENT_LIMIT);
+ LLNotificationsUtil::add("TooManyTeleportOffers", args);
+ return false;
+ }
+
std::string text = response["message"].asString();
LLSLURL slurl;
LLAgentUI::buildSLURL(slurl);
@@ -6451,8 +6516,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");
@@ -6484,7 +6565,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
LLUUID owner_id;
if (gMessageSystem->getNumberOfBlocks("OwnerData") > 0)
{
- msg->getUUID("OwnerData", "OwnerID", owner_id);
+ msg->getUUID("OwnerData", "OwnerID", owner_id);
}
if (LLMuteList::getInstance()->isMuted(object_id) || LLMuteList::getInstance()->isMuted(owner_id))
@@ -6495,12 +6576,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);
@@ -6511,6 +6592,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");
@@ -6529,7 +6611,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 b4a9b8e677..d8acd99953 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
};
@@ -203,6 +202,8 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
bool highlight_offered_object(const LLUUID& obj_id);
void set_dad_inventory_item(LLInventoryItem* inv_item, const LLUUID& into_folder_uuid);
+void set_dad_inbox_object(const LLUUID& object_id);
+
class LLOfferInfo : public LLNotificationResponderInterface
{
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index a59afdc28a..ef5c65eb87 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -35,7 +35,7 @@
#include "llweb.h"
-const char* DEFAULT_LOGIN_PAGE = "http://secondlife.com/app/login/";
+const char* DEFAULT_LOGIN_PAGE = "http://viewer-login.agni.lindenlab.com/";
const char* SYSTEM_GRID_SLURL_BASE = "secondlife://%s/secondlife/";
const char* MAIN_GRID_SLURL_BASE = "http://maps.secondlife.com/secondlife/";
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index be9ff872c0..cd71b6d42a 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -81,7 +81,6 @@
#include "llviewerwindow.h" // For getSpinAxis
#include "llvoavatar.h"
#include "llvoavatarself.h"
-#include "llvoclouds.h"
#include "llvograss.h"
#include "llvoground.h"
#include "llvolume.h"
@@ -167,8 +166,6 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
// llwarns << "Creating new tree!" << llendl;
// res = new LLVOTree(id, pcode, regionp); break;
res = NULL; break;
- case LL_VO_CLOUDS:
- res = new LLVOClouds(id, pcode, regionp); break;
case LL_VO_SURFACE_PATCH:
res = new LLVOSurfacePatch(id, pcode, regionp); break;
case LL_VO_SKY:
@@ -519,7 +516,6 @@ void LLViewerObject::setNameValueList(const std::string& name_value_list)
}
}
-
// This method returns true if the object is over land owned by the
// agent.
bool LLViewerObject::isReturnable()
@@ -528,17 +524,108 @@ bool LLViewerObject::isReturnable()
{
return false;
}
+
std::vector<LLBBox> 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());
+ boxes.push_back( LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
+ }
+
+ bool result = (mRegionp && mRegionp->objectIsReturnable(getPositionRegion(), boxes)) ? 1 : 0;
+
+ if ( !result )
+ {
+ //Get list of neighboring regions relative to this vo's region
+ std::vector<LLViewerRegion*> uniqueRegions;
+ mRegionp->getNeighboringRegions( uniqueRegions );
+
+ //Build aabb's - for root and all children
+ std::vector<PotentialReturnableObject> returnables;
+ typedef std::vector<LLViewerRegion*>::iterator RegionIt;
+ RegionIt regionStart = uniqueRegions.begin();
+ RegionIt regionEnd = uniqueRegions.end();
+
+ for (; regionStart != regionEnd; ++regionStart )
+ {
+ LLViewerRegion* pTargetRegion = *regionStart;
+ //Add the root vo as there may be no children and we still want
+ //to test for any edge overlap
+ buildReturnablesForChildrenVO( returnables, this, pTargetRegion );
+ //Add it's children
+ for (child_list_t::iterator iter = mChildList.begin(); iter != mChildList.end(); iter++)
+ {
+ LLViewerObject* pChild = *iter;
+ buildReturnablesForChildrenVO( returnables, pChild, pTargetRegion );
+ }
+ }
+
+ //TBD#Eventually create a region -> box list map
+ typedef std::vector<PotentialReturnableObject>::iterator ReturnablesIt;
+ ReturnablesIt retCurrentIt = returnables.begin();
+ ReturnablesIt retEndIt = returnables.end();
+
+ for ( ; retCurrentIt !=retEndIt; ++retCurrentIt )
+ {
+ boxes.clear();
+ LLViewerRegion* pRegion = (*retCurrentIt).pRegion;
+ boxes.push_back( (*retCurrentIt).box );
+ bool retResult = pRegion
+ && pRegion->childrenObjectReturnable( boxes )
+ && pRegion->canManageEstate();
+ if ( retResult )
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+void LLViewerObject::buildReturnablesForChildrenVO( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion )
+{
+ if ( !pChild )
+ {
+ llerrs<<"child viewerobject is NULL "<<llendl;
}
+
+ constructAndAddReturnable( returnables, pChild, pTargetRegion );
+
+ //We want to handle any children VO's as well
+ for (child_list_t::iterator iter = pChild->mChildList.begin(); iter != pChild->mChildList.end(); iter++)
+ {
+ LLViewerObject* pChildofChild = *iter;
+ buildReturnablesForChildrenVO( returnables, pChildofChild, pTargetRegion );
+ }
+}
- return mRegionp
- && mRegionp->objectIsReturnable(getPositionRegion(), boxes);
+void LLViewerObject::constructAndAddReturnable( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion )
+{
+
+ LLVector3 targetRegionPos;
+ targetRegionPos.setVec( pChild->getPositionGlobal() );
+
+ LLBBox childBBox = LLBBox( targetRegionPos, pChild->getRotationRegion(), pChild->getScale() * -0.5f,
+ pChild->getScale() * 0.5f).getAxisAligned();
+
+ LLVector3 edgeA = targetRegionPos + childBBox.getMinLocal();
+ LLVector3 edgeB = targetRegionPos + childBBox.getMaxLocal();
+
+ LLVector3d edgeAd, edgeBd;
+ edgeAd.setVec(edgeA);
+ edgeBd.setVec(edgeB);
+
+ //Only add the box when either of the extents are in a neighboring region
+ if ( pTargetRegion->pointInRegionGlobal( edgeAd ) || pTargetRegion->pointInRegionGlobal( edgeBd ) )
+ {
+ PotentialReturnableObject returnableObj;
+ returnableObj.box = childBBox;
+ returnableObj.pRegion = pTargetRegion;
+ returnables.push_back( returnableObj );
+ }
}
BOOL LLViewerObject::setParent(LLViewerObject* parent)
@@ -2663,7 +2750,7 @@ void LLViewerObject::processTaskInv(LLMessageSystem* msg, void** user_data)
LLPointer<LLInventoryObject> 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;
@@ -2730,7 +2817,7 @@ void LLViewerObject::loadTaskInvFile(const std::string& filename)
{
LLPointer<LLInventoryObject> inv = new LLInventoryObject;
inv->importLegacyStream(ifs);
- inv->rename(LLTrans::getString("ViewerObjectContents").c_str());
+ inv->rename("Contents");
mInventory->push_front(inv);
}
else
@@ -4790,6 +4877,10 @@ void LLViewerObject::adjustAudioGain(const F32 gain)
bool LLViewerObject::unpackParameterEntry(U16 param_type, LLDataPacker *dp)
{
+ if (LLNetworkData::PARAMS_MESH == param_type)
+ {
+ param_type = LLNetworkData::PARAMS_SCULPT;
+ }
ExtraParameter* param = getExtraParameterEntryCreate(param_type);
if (param)
{
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index a0ad52df6b..1828a64917 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -44,11 +44,11 @@
#include "v3math.h"
#include "llvertexbuffer.h"
#include "llaccountingquota.h"
+#include "llbbox.h"
class LLAgent; // TODO: Get rid of this.
class LLAudioSource;
class LLAudioSourceVO;
-class LLBBox;
class LLDataPacker;
class LLColor4;
class LLFrameTimer;
@@ -112,6 +112,12 @@ public:
LLColor4 mColor;
};
+struct PotentialReturnableObject
+{
+ LLBBox box;
+ LLViewerRegion* pRegion;
+};
+
//============================================================================
class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
@@ -234,6 +240,9 @@ public:
// anti-encroachment is enabled
bool isReturnable();
+ void buildReturnablesForChildrenVO( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion );
+ void constructAndAddReturnable( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion );
+
/*
// This method will scan through this object, and then query the
// selection manager to see if the local agent probably has the
@@ -547,7 +556,7 @@ public:
//
typedef enum e_vo_types
{
- LL_VO_CLOUDS = LL_PCODE_APP | 0x20,
+ LL_VO_CLOUDS = LL_PCODE_APP | 0x20, // no longer used
LL_VO_SURFACE_PATCH = LL_PCODE_APP | 0x30,
LL_VO_WL_SKY = LL_PCODE_APP | 0x40,
LL_VO_SQUARE_TORUS = LL_PCODE_APP | 0x50,
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 45c6777ae8..db5684665b 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -957,8 +957,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
iter != idle_list.end(); iter++)
{
objectp = *iter;
- if (objectp->getPCode() == LLViewerObject::LL_VO_CLOUDS ||
- objectp->isAvatar())
+ if (objectp->isAvatar())
{
objectp->idleUpdate(agent, world, frame_time);
}
@@ -1072,10 +1071,12 @@ void LLViewerObjectList::fetchObjectCosts()
LLSD id_list;
U32 object_index = 0;
+ U32 count = 0;
+
for (
std::set<LLUUID>::iterator iter = mStaleObjectCost.begin();
iter != mStaleObjectCost.end();
- ++iter)
+ )
{
// Check to see if a request for this object
// has already been made.
@@ -1085,13 +1086,15 @@ void LLViewerObjectList::fetchObjectCosts()
mPendingObjectCost.insert(*iter);
id_list[object_index++] = *iter;
}
- }
- // id_list should now contain all
- // requests in mStaleObjectCost before, so clear
- // it now
- mStaleObjectCost.clear();
+ mStaleObjectCost.erase(iter++);
+ if (count++ >= 450)
+ {
+ break;
+ }
+ }
+
if ( id_list.size() > 0 )
{
LLSD post_data = LLSD::emptyMap();
@@ -1340,18 +1343,29 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
S32 num_removed = 0;
LLViewerObject *objectp;
- for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); )
+
+ vobj_list_t::reverse_iterator target = mObjects.rbegin();
+
+ vobj_list_t::iterator iter = mObjects.begin();
+ for ( ; iter != mObjects.end(); )
{
- // Scan for all of the dead objects and remove any "global" references to them.
+ // Scan for all of the dead objects and put them all on the end of the list with no ref count ops
objectp = *iter;
+ if (objectp == NULL)
+ { //we caught up to the dead tail
+ break;
+ }
+
if (objectp->isDead())
{
- iter = mObjects.erase(iter);
+ LLPointer<LLViewerObject>::swap(*iter, *target);
+ *target = NULL;
+ ++target;
num_removed++;
- if (num_removed == mNumDeadObjects)
+ if (num_removed == mNumDeadObjects || iter->isNull())
{
- // We've cleaned up all of the dead objects.
+ // We've cleaned up all of the dead objects or caught up to the dead tail
break;
}
}
@@ -1361,6 +1375,11 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
}
}
+ llassert(num_removed == mNumDeadObjects);
+
+ //erase as a block
+ mObjects.erase(mObjects.begin()+(mObjects.size()-mNumDeadObjects), mObjects.end());
+
// We've cleaned the global object list, now let's do some paranoia testing on objects
// before blowing away the dead list.
mDeadObjects.clear();
@@ -1395,6 +1414,10 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)
void LLViewerObjectList::updateObjectCost(LLViewerObject* object)
{
+ if (!object->isRoot())
+ { //always fetch cost for the parent when fetching cost for children
+ mStaleObjectCost.insert(((LLViewerObject*)object->getParent())->getID());
+ }
mStaleObjectCost.insert(object->getID());
}
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index dfa35edef4..90fbc41daa 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -485,6 +485,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
{
switch(event)
{
+ case MEDIA_EVENT_DEBUG_MESSAGE:
+ {
+ // LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_DEBUG_MESSAGE " << LL_ENDL;
+ };
+ break;
+
case MEDIA_EVENT_CONTENT_UPDATED:
{
// LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CONTENT_UPDATED " << LL_ENDL;
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 26765bdd01..eff16b6a6e 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -173,6 +173,33 @@ bool LLViewerParcelOverlay::encroachesOwned(const std::vector<LLBBox>& boxes) co
}
return false;
}
+bool LLViewerParcelOverlay::encroachesOnUnowned(const std::vector<LLBBox>& 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();
+
+ 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 top = S32(llclamp((min.mV[VY] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1));
+ S32 bottom = S32(llclamp((max.mV[VY] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1));
+
+ for (S32 row = top; row <= bottom; row++)
+ {
+ for (S32 column = left; column <= right; column++)
+ {
+ U8 type = ownership(row, column);
+ if ((PARCEL_SELF != type))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
BOOL LLViewerParcelOverlay::isSoundLocal(const LLVector3& pos) const
{
diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h
index c80baedda6..3c6794e7d0 100644
--- a/indra/newview/llviewerparceloverlay.h
+++ b/indra/newview/llviewerparceloverlay.h
@@ -60,6 +60,7 @@ public:
// might be in another parcel. for now, we simply test axis aligned
// bounding boxes which isn't perfect, but is close
bool encroachesOwned(const std::vector<LLBBox>& boxes) const;
+ bool encroachesOnUnowned(const std::vector<LLBBox>& boxes) const;
BOOL isSoundLocal(const LLVector3& pos) const;
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index faa86d43dd..12f6a0dd1c 100644
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -33,6 +33,8 @@
// in viewer.
// It is used to precompile headers for improved build speed.
+#include <boost/coroutine/coroutine.hpp>
+
#include "linden_common.h"
// Work around stupid Microsoft STL warning
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 002e0567e4..17f908d73f 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -54,6 +54,7 @@
#include "llfloaterreporter.h"
#include "llfloaterregioninfo.h"
#include "llhttpnode.h"
+#include "llregioninfomodel.h"
#include "llsdutil.h"
#include "llstartup.h"
#include "lltrans.h"
@@ -64,7 +65,6 @@
#include "llvlmanager.h"
#include "llvlcomposition.h"
#include "llvocache.h"
-#include "llvoclouds.h"
#include "llworld.h"
#include "llspatialpartition.h"
#include "stringize.h"
@@ -77,6 +77,13 @@
const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
const S16 MAX_MAP_DIST = 10;
+// The server only keeps our pending agent info for 60 seconds.
+// We want to allow for seed cap retry, but its not useful after that 60 seconds.
+// Give it 3 chances, each at 18 seconds to give ourselves a few seconds to connect anyways if we give up.
+const S32 MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN = 3;
+const F32 CAP_REQUEST_TIMEOUT = 18;
+// Even though we gave up on login, keep trying for caps after we are logged in:
+const S32 MAX_CAP_REQUEST_ATTEMPTS = 30;
typedef std::map<std::string, std::string> CapabilityMap;
@@ -86,6 +93,10 @@ public:
: mHost(host),
mCompositionp(NULL),
mEventPoll(NULL),
+ mSeedCapMaxAttempts(MAX_CAP_REQUEST_ATTEMPTS),
+ mSeedCapMaxAttemptsBeforeLogin(MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN),
+ mSeedCapAttempts(0),
+ mHttpResponderID(0),
// I'd prefer to set the LLCapabilityListener name to match the region
// name -- it's disappointing that's not available at construction time.
// We could instead store an LLCapabilityListener*, making
@@ -100,6 +111,8 @@ public:
{
}
+ void buildCapabilityNames(LLSD& capabilityNames);
+
// The surfaces and other layers
LLSurface* mLandp;
@@ -132,6 +145,12 @@ public:
LLEventPoll* mEventPoll;
+ S32 mSeedCapMaxAttempts;
+ S32 mSeedCapMaxAttemptsBeforeLogin;
+ S32 mSeedCapAttempts;
+
+ S32 mHttpResponderID;
+
/// Post an event to this LLCapabilityListener to invoke a capability message on
/// this LLViewerRegion's server
/// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
@@ -139,8 +158,6 @@ public:
//spatial partitions for objects in this region
std::vector<LLSpatialPartition*> mObjectPartition;
-
- LLHTTPClient::ResponderPtr mHttpResponderPtr ;
};
// support for secondlife:///app/region/{REGION} SLapps
@@ -186,54 +203,51 @@ class BaseCapabilitiesComplete : public LLHTTPClient::Responder
{
LOG_CLASS(BaseCapabilitiesComplete);
public:
- BaseCapabilitiesComplete(LLViewerRegion* region)
- : mRegion(region)
+ BaseCapabilitiesComplete(U64 region_handle, S32 id)
+ : mRegionHandle(region_handle), mID(id)
{ }
virtual ~BaseCapabilitiesComplete()
- {
- if(mRegion)
- {
- mRegion->setHttpResponderPtrNULL() ;
- }
- }
-
- void setRegion(LLViewerRegion* region)
- {
- mRegion = region ;
- }
+ { }
void error(U32 statusNum, const std::string& reason)
{
LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
-
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if (regionp)
{
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ regionp->failedSeedCapability();
}
}
void result(const LLSD& content)
{
- if(!mRegion || LLHTTPClient::ResponderPtr(this) != mRegion->getHttpResponderPtr()) //region is removed or responder is not created.
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if(!regionp) //region was removed
{
+ LL_WARNS2("AppInit", "Capabilities") << "Received results for region that no longer exists!" << LL_ENDL;
+ return ;
+ }
+ if( mID != regionp->getHttpResponderID() ) // region is no longer referring to this responder
+ {
+ LL_WARNS2("AppInit", "Capabilities") << "Received results for a stale http responder!" << LL_ENDL;
return ;
}
LLSD::map_const_iterator iter;
for(iter = content.beginMap(); iter != content.endMap(); ++iter)
{
- mRegion->setCapability(iter->first, iter->second);
+ regionp->setCapability(iter->first, iter->second);
LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
<< iter->first << LL_ENDL;
/* HACK we're waiting for the ServerReleaseNotes */
- if (iter->first == "ServerReleaseNotes" && mRegion->getReleaseNotesRequested())
+ if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested())
{
- mRegion->showReleaseNotes();
+ regionp->showReleaseNotes();
}
}
- mRegion->setCapabilitiesReceived(true);
+ regionp->setCapabilitiesReceived(true);
if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
{
@@ -241,15 +255,15 @@ public:
}
}
- static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
- LLViewerRegion* region)
+ static boost::intrusive_ptr<BaseCapabilitiesComplete> build( U64 region_handle, S32 id )
{
- return boost::intrusive_ptr<BaseCapabilitiesComplete>(
- new BaseCapabilitiesComplete(region));
+ return boost::intrusive_ptr<BaseCapabilitiesComplete>(
+ new BaseCapabilitiesComplete(region_handle, id) );
}
private:
- LLViewerRegion* mRegion;
+ U64 mRegionHandle;
+ S32 mID;
};
@@ -315,7 +329,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mImpl->mObjectPartition.push_back(new LLWaterPartition()); //PARTITION_WATER
mImpl->mObjectPartition.push_back(new LLTreePartition()); //PARTITION_TREE
mImpl->mObjectPartition.push_back(new LLParticlePartition()); //PARTITION_PARTICLE
- mImpl->mObjectPartition.push_back(new LLCloudPartition()); //PARTITION_CLOUD
mImpl->mObjectPartition.push_back(new LLGrassPartition()); //PARTITION_GRASS
mImpl->mObjectPartition.push_back(new LLVolumePartition()); //PARTITION_VOLUME
mImpl->mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE
@@ -341,16 +354,10 @@ void LLViewerRegion::initStats()
LLViewerRegion::~LLViewerRegion()
{
- if(mImpl->mHttpResponderPtr)
- {
- (static_cast<BaseCapabilitiesComplete*>(mImpl->mHttpResponderPtr.get()))->setRegion(NULL) ;
- }
-
gVLManager.cleanupData(this);
// Can't do this on destruction, because the neighbor pointers might be invalid.
// This should be reference counted...
disconnectAllNeighbors();
- mCloudLayer.destroy();
LLViewerPartSim::getInstance()->cleanupRegion(this);
gObjectList.killObjects(this);
@@ -486,7 +493,6 @@ void LLViewerRegion::setOriginGlobal(const LLVector3d &origin_global)
updateRenderMatrix();
mImpl->mLandp->setOriginGlobal(origin_global);
mWind.setOriginGlobal(origin_global);
- mCloudLayer.setOriginGlobal(origin_global);
calculateCenterGlobal();
}
@@ -561,6 +567,11 @@ const std::string LLViewerRegion::getSimAccessString() const
return accessToString(mSimAccess);
}
+std::string LLViewerRegion::getLocalizedSimProductName() const
+{
+ std::string localized_spn;
+ return LLTrans::findString(localized_spn, mProductName) ? localized_spn : mProductName;
+}
// static
std::string LLViewerRegion::regionFlagsToString(U32 flags)
@@ -647,6 +658,9 @@ std::string LLViewerRegion::accessToShortString(U8 sim_access)
void LLViewerRegion::processRegionInfo(LLMessageSystem* msg, void**)
{
// send it to 'observers'
+ // *TODO: switch the floaters to using LLRegionInfoModel
+ llinfos << "Processing region info" << llendl;
+ LLRegionInfoModel::instance().update(msg);
LLFloaterGodTools::processRegionInfo(msg);
LLFloaterRegionInfo::processRegionInfo(msg);
LLFloaterReporter::processRegionInfo(msg);
@@ -709,14 +723,12 @@ void LLViewerRegion::forceUpdate()
void LLViewerRegion::connectNeighbor(LLViewerRegion *neighborp, U32 direction)
{
mImpl->mLandp->connectNeighbor(neighborp->mImpl->mLandp, direction);
- mCloudLayer.connectNeighbor(&(neighborp->mCloudLayer), direction);
}
void LLViewerRegion::disconnectAllNeighbors()
{
mImpl->mLandp->disconnectAllNeighbors();
- mCloudLayer.disconnectAllNeighbors();
}
LLVLComposition * LLViewerRegion::getComposition() const
@@ -893,14 +905,9 @@ U32 LLViewerRegion::getPacketsLost() const
}
}
-void LLViewerRegion::setHttpResponderPtrNULL()
-{
- mImpl->mHttpResponderPtr = NULL;
-}
-
-const LLHTTPClient::ResponderPtr LLViewerRegion::getHttpResponderPtr() const
+S32 LLViewerRegion::getHttpResponderID() const
{
- return mImpl->mHttpResponderPtr;
+ return mImpl->mHttpResponderID;
}
BOOL LLViewerRegion::pointInRegionGlobal(const LLVector3d &point_global) const
@@ -1186,6 +1193,7 @@ LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObjec
eCacheUpdateResult result = CACHE_UPDATE_ADDED;
if (mImpl->mCacheMap.size() > MAX_OBJECT_CACHE_ENTRIES)
{
+ delete mImpl->mCacheMap.begin()->second ;
mImpl->mCacheMap.erase(mImpl->mCacheMap.begin());
result = CACHE_UPDATE_REPLACED;
@@ -1479,22 +1487,9 @@ void LLViewerRegion::unpackRegionHandshake()
msg->sendReliable(host);
}
-void LLViewerRegion::setSeedCapability(const std::string& url)
-{
- if (getCapability("Seed") == url)
- {
- // llwarns << "Ignoring duplicate seed capability" << llendl;
- return;
- }
-
- delete mImpl->mEventPoll;
- mImpl->mEventPoll = NULL;
-
- mImpl->mCapabilities.clear();
- setCapability("Seed", url);
-
- LLSD capabilityNames = LLSD::emptyArray();
+void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
+{
capabilityNames.append("AccountingParcel");
capabilityNames.append("AccountingSelection");
capabilityNames.append("AttachmentResources");
@@ -1504,6 +1499,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("DispatchRegionInfo");
capabilityNames.append("EstateChangeInfo");
capabilityNames.append("EventQueueGet");
+ capabilityNames.append("EnvironmentSettings");
capabilityNames.append("ObjectMedia");
capabilityNames.append("ObjectMediaNavigate");
@@ -1525,6 +1521,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("LandResources");
capabilityNames.append("MapLayer");
capabilityNames.append("MapLayerGod");
+ capabilityNames.append("MeshUploadFlag");
capabilityNames.append("NewFileAgentInventory");
capabilityNames.append("ParcelPropertiesUpdate");
capabilityNames.append("ParcelMediaURLFilterList");
@@ -1566,46 +1563,118 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
// Please add new capabilities alphabetically to reduce
// merge conflicts.
+}
+
+void LLViewerRegion::setSeedCapability(const std::string& url)
+{
+ if (getCapability("Seed") == url)
+ {
+ // llwarns << "Ignoring duplicate seed capability" << llendl;
+ return;
+ }
+
+ delete mImpl->mEventPoll;
+ mImpl->mEventPoll = NULL;
+
+ mImpl->mCapabilities.clear();
+ setCapability("Seed", url);
+
+ LLSD capabilityNames = LLSD::emptyArray();
+ mImpl->buildCapabilityNames(capabilityNames);
llinfos << "posting to seed " << url << llendl;
- mImpl->mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
- LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr);
+ S32 id = ++mImpl->mHttpResponderID;
+ LLHTTPClient::post(url, capabilityNames,
+ BaseCapabilitiesComplete::build(getHandle(), id),
+ LLSD(), CAP_REQUEST_TIMEOUT);
+}
+
+S32 LLViewerRegion::getNumSeedCapRetries()
+{
+ return mImpl->mSeedCapAttempts;
+}
+
+void LLViewerRegion::failedSeedCapability()
+{
+ // Should we retry asking for caps?
+ mImpl->mSeedCapAttempts++;
+ std::string url = getCapability("Seed");
+ if ( url.empty() )
+ {
+ LL_WARNS2("AppInit", "Capabilities") << "Failed to get seed capabilities, and can not determine url for retries!" << LL_ENDL;
+ return;
+ }
+ // After a few attempts, continue login. We will keep trying once in-world:
+ if ( mImpl->mSeedCapAttempts >= mImpl->mSeedCapMaxAttemptsBeforeLogin &&
+ STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState() )
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+
+ if ( mImpl->mSeedCapAttempts < mImpl->mSeedCapMaxAttempts)
+ {
+ LLSD capabilityNames = LLSD::emptyArray();
+ mImpl->buildCapabilityNames(capabilityNames);
+
+ llinfos << "posting to seed " << url << " (retry "
+ << mImpl->mSeedCapAttempts << ")" << llendl;
+
+ S32 id = ++mImpl->mHttpResponderID;
+ LLHTTPClient::post(url, capabilityNames,
+ BaseCapabilitiesComplete::build(getHandle(), id),
+ LLSD(), CAP_REQUEST_TIMEOUT);
+ }
+ else
+ {
+ // *TODO: Give a user pop-up about this error?
+ LL_WARNS2("AppInit", "Capabilities") << "Failed to get seed capabilities from '" << url << "' after " << mImpl->mSeedCapAttempts << " attempts. Giving up!" << LL_ENDL;
+ }
}
class SimulatorFeaturesReceived : public LLHTTPClient::Responder
{
LOG_CLASS(SimulatorFeaturesReceived);
public:
- SimulatorFeaturesReceived(LLViewerRegion* region)
- : mRegion(region)
+ SimulatorFeaturesReceived(const std::string& retry_url, U64 region_handle,
+ S32 attempt = 0, S32 max_attempts = MAX_CAP_REQUEST_ATTEMPTS)
+ : mRetryURL(retry_url), mRegionHandle(region_handle), mAttempt(attempt), mMaxAttempts(max_attempts)
{ }
void error(U32 statusNum, const std::string& reason)
{
LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL;
+ retry();
}
-
+
void result(const LLSD& content)
{
- if(!mRegion) //region is removed or responder is not created.
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if(!regionp) //region is removed or responder is not created.
{
+ LL_WARNS2("AppInit", "SimulatorFeatures") << "Received results for region that no longer exists!" << LL_ENDL;
return ;
}
- mRegion->setSimulatorFeatures(content);
+ regionp->setSimulatorFeatures(content);
}
-
- static boost::intrusive_ptr<SimulatorFeaturesReceived> build(
- LLViewerRegion* region)
- {
- return boost::intrusive_ptr<SimulatorFeaturesReceived>(
- new SimulatorFeaturesReceived(region));
- }
-
+
private:
- LLViewerRegion* mRegion;
+ void retry()
+ {
+ if (mAttempt < mMaxAttempts)
+ {
+ mAttempt++;
+ LL_WARNS2("AppInit", "SimulatorFeatures") << "Re-trying '" << mRetryURL << "'. Retry #" << mAttempt << LL_ENDL;
+ LLHTTPClient::get(mRetryURL, new SimulatorFeaturesReceived(*this), LLSD(), CAP_REQUEST_TIMEOUT);
+ }
+ }
+
+ std::string mRetryURL;
+ U64 mRegionHandle;
+ S32 mAttempt;
+ S32 mMaxAttempts;
};
@@ -1624,7 +1693,7 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u
else if (name == "SimulatorFeatures")
{
// kick off a request for simulator features
- LLHTTPClient::get(url, new SimulatorFeaturesReceived(this));
+ LLHTTPClient::get(url, new SimulatorFeaturesReceived(url, getHandle()), LLSD(), CAP_REQUEST_TIMEOUT);
}
else
{
@@ -1660,6 +1729,21 @@ bool LLViewerRegion::capabilitiesReceived() const
void LLViewerRegion::setCapabilitiesReceived(bool received)
{
mCapabilitiesReceived = received;
+
+ // Tell interested parties that we've received capabilities,
+ // so that they can safely use getCapability().
+ if (received)
+ {
+ mCapabilitiesReceivedSignal(getRegionID());
+
+ // This is a single-shot signal. Forget callbacks to save resources.
+ mCapabilitiesReceivedSignal.disconnect_all_slots();
+ }
+}
+
+boost::signals2::connection LLViewerRegion::setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb)
+{
+ return mCapabilitiesReceivedSignal.connect(cb);
}
void LLViewerRegion::logActiveCapabilities() const
@@ -1699,6 +1783,18 @@ bool LLViewerRegion::objectIsReturnable(const LLVector3& pos, const std::vector<
&& mParcelOverlay->encroachesOwned(boxes)) );
}
+bool LLViewerRegion::childrenObjectReturnable( const std::vector<LLBBox>& boxes ) const
+{
+ bool result = false;
+ result = ( mParcelOverlay && mParcelOverlay->encroachesOnUnowned( boxes ) ) ? 1 : 0;
+ return result;
+}
+
+void LLViewerRegion::getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions )
+{
+ mImpl->mLandp->getNeighboringRegions( uniqueRegions );
+}
+
void LLViewerRegion::showReleaseNotes()
{
std::string url = this->getCapability("ServerReleaseNotes");
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 3811b989e7..ef1a6d285c 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -30,10 +30,10 @@
// A ViewerRegion is a class that contains a bunch of objects and surfaces
// that are in to a particular region.
#include <string>
+#include <boost/signals2.hpp>
#include "lldarray.h"
#include "llwind.h"
-#include "llcloud.h"
#include "llstat.h"
#include "v3dmath.h"
#include "llstring.h"
@@ -81,7 +81,6 @@ public:
PARTITION_WATER,
PARTITION_TREE,
PARTITION_PARTICLE,
- PARTITION_CLOUD,
PARTITION_GRASS,
PARTITION_VOLUME,
PARTITION_BRIDGE,
@@ -90,6 +89,8 @@ public:
NUM_PARTITIONS
} eObjectPartitions;
+ typedef boost::signals2::signal<void(const LLUUID& region_id)> caps_received_signal_t;
+
LLViewerRegion(const U64 &handle,
const LLHost &host,
const U32 surface_grid_width,
@@ -191,7 +192,7 @@ public:
S32 getSimCPURatio() const { return mCPURatio; }
const std::string& getSimColoName() const { return mColoName; }
const std::string& getSimProductSKU() const { return mProductSKU; }
- const std::string& getSimProductName() const { return mProductName; }
+ std::string getLocalizedSimProductName() const;
// Returns "Sandbox", "Expensive", etc.
static std::string regionFlagsToString(U32 flags);
@@ -225,11 +226,12 @@ public:
U32 getPacketsLost() const;
- void setHttpResponderPtrNULL();
- const LLHTTPClient::ResponderPtr getHttpResponderPtr() const;
+ S32 getHttpResponderID() const;
// Get/set named capability URLs for this region.
void setSeedCapability(const std::string& url);
+ void failedSeedCapability();
+ S32 getNumSeedCapRetries();
void setCapability(const std::string& name, const std::string& url);
// implements LLCapabilityProvider
virtual std::string getCapability(const std::string& name) const;
@@ -237,6 +239,7 @@ public:
// has region received its final (not seed) capability list?
bool capabilitiesReceived() const;
void setCapabilitiesReceived(bool received);
+ boost::signals2::connection setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb);
static bool isSpecialCapabilityName(const std::string &name);
void logActiveCapabilities() const;
@@ -318,6 +321,10 @@ public:
LLSpatialPartition* getSpatialPartition(U32 type);
bool objectIsReturnable(const LLVector3& pos, const std::vector<LLBBox>& boxes) const;
+ bool childrenObjectReturnable( const std::vector<LLBBox>& boxes ) const;
+
+ void getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions );
+
public:
struct CompareDistance
{
@@ -336,7 +343,6 @@ protected:
public:
LLWind mWind;
- LLCloudLayer mCloudLayer;
LLViewerParcelOverlay *mParcelOverlay;
LLStat mBitStat;
@@ -404,6 +410,7 @@ private:
bool mAlive; // can become false if circuit disconnects
bool mCapabilitiesReceived;
+ caps_received_signal_t mCapabilitiesReceivedSignal;
BOOL mReleaseNotesRequested;
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index da4d0548d0..36106752a2 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -61,18 +61,31 @@ BOOL LLViewerShaderMgr::sInitialized = FALSE;
LLVector4 gShinyOrigin;
+//utility shaders
+LLGLSLShader gOcclusionProgram;
+LLGLSLShader gCustomAlphaProgram;
+LLGLSLShader gGlowCombineProgram;
+LLGLSLShader gTwoTextureAddProgram;
+
//object shaders
LLGLSLShader gObjectSimpleProgram;
LLGLSLShader gObjectSimpleWaterProgram;
+LLGLSLShader gObjectSimpleAlphaMaskProgram;
+LLGLSLShader gObjectSimpleWaterAlphaMaskProgram;
LLGLSLShader gObjectFullbrightProgram;
LLGLSLShader gObjectFullbrightWaterProgram;
+LLGLSLShader gObjectFullbrightAlphaMaskProgram;
+LLGLSLShader gObjectFullbrightWaterAlphaMaskProgram;
LLGLSLShader gObjectFullbrightShinyProgram;
LLGLSLShader gObjectFullbrightShinyWaterProgram;
LLGLSLShader gObjectShinyProgram;
LLGLSLShader gObjectShinyWaterProgram;
+LLGLSLShader gObjectBumpProgram;
LLGLSLShader gObjectSimpleNonIndexedProgram;
LLGLSLShader gObjectSimpleNonIndexedWaterProgram;
+LLGLSLShader gObjectAlphaMaskNonIndexedProgram;
+LLGLSLShader gObjectAlphaMaskNonIndexedWaterProgram;
LLGLSLShader gObjectFullbrightNonIndexedProgram;
LLGLSLShader gObjectFullbrightNonIndexedWaterProgram;
LLGLSLShader gObjectFullbrightShinyNonIndexedProgram;
@@ -105,6 +118,7 @@ LLGLSLShader gAvatarProgram;
LLGLSLShader gAvatarWaterProgram;
LLGLSLShader gAvatarEyeballProgram;
LLGLSLShader gAvatarPickProgram;
+LLGLSLShader gImpostorProgram;
// WindLight shader handles
LLGLSLShader gWLSkyProgram;
@@ -121,7 +135,9 @@ LLGLSLShader gDeferredImpostorProgram;
LLGLSLShader gDeferredEdgeProgram;
LLGLSLShader gDeferredWaterProgram;
LLGLSLShader gDeferredDiffuseProgram;
+LLGLSLShader gDeferredDiffuseAlphaMaskProgram;
LLGLSLShader gDeferredNonIndexedDiffuseProgram;
+LLGLSLShader gDeferredNonIndexedDiffuseAlphaMaskProgram;
LLGLSLShader gDeferredSkinnedDiffuseProgram;
LLGLSLShader gDeferredSkinnedBumpProgram;
LLGLSLShader gDeferredSkinnedAlphaProgram;
@@ -138,6 +154,7 @@ LLGLSLShader gDeferredSunProgram;
LLGLSLShader gDeferredBlurLightProgram;
LLGLSLShader gDeferredSoftenProgram;
LLGLSLShader gDeferredShadowProgram;
+LLGLSLShader gDeferredShadowAlphaMaskProgram;
LLGLSLShader gDeferredAvatarShadowProgram;
LLGLSLShader gDeferredAttachmentShadowProgram;
LLGLSLShader gDeferredAlphaProgram;
@@ -166,14 +183,29 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gWLCloudProgram);
mShaderList.push_back(&gAvatarProgram);
mShaderList.push_back(&gObjectShinyProgram);
+ mShaderList.push_back(&gObjectShinyNonIndexedProgram);
mShaderList.push_back(&gWaterProgram);
mShaderList.push_back(&gAvatarEyeballProgram);
mShaderList.push_back(&gObjectSimpleProgram);
+ mShaderList.push_back(&gImpostorProgram);
+ mShaderList.push_back(&gObjectSimpleAlphaMaskProgram);
+ mShaderList.push_back(&gObjectBumpProgram);
+ mShaderList.push_back(&gUIProgram);
+ mShaderList.push_back(&gCustomAlphaProgram);
+ mShaderList.push_back(&gGlowCombineProgram);
+ mShaderList.push_back(&gTwoTextureAddProgram);
+ mShaderList.push_back(&gSolidColorProgram);
+ mShaderList.push_back(&gOcclusionProgram);
mShaderList.push_back(&gObjectFullbrightProgram);
+ mShaderList.push_back(&gObjectFullbrightAlphaMaskProgram);
mShaderList.push_back(&gObjectFullbrightShinyProgram);
mShaderList.push_back(&gObjectFullbrightShinyWaterProgram);
mShaderList.push_back(&gObjectSimpleNonIndexedProgram);
+ mShaderList.push_back(&gObjectSimpleNonIndexedWaterProgram);
+ mShaderList.push_back(&gObjectAlphaMaskNonIndexedProgram);
+ mShaderList.push_back(&gObjectAlphaMaskNonIndexedWaterProgram);
mShaderList.push_back(&gObjectFullbrightNonIndexedProgram);
+ mShaderList.push_back(&gObjectFullbrightNonIndexedWaterProgram);
mShaderList.push_back(&gObjectFullbrightShinyNonIndexedProgram);
mShaderList.push_back(&gObjectFullbrightShinyNonIndexedWaterProgram);
mShaderList.push_back(&gSkinnedObjectSimpleProgram);
@@ -188,8 +220,11 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gTerrainWaterProgram);
mShaderList.push_back(&gObjectSimpleWaterProgram);
mShaderList.push_back(&gObjectFullbrightWaterProgram);
+ mShaderList.push_back(&gObjectSimpleWaterAlphaMaskProgram);
+ mShaderList.push_back(&gObjectFullbrightWaterAlphaMaskProgram);
mShaderList.push_back(&gAvatarWaterProgram);
mShaderList.push_back(&gObjectShinyWaterProgram);
+ mShaderList.push_back(&gObjectShinyNonIndexedWaterProgram);
mShaderList.push_back(&gUnderWaterProgram);
mShaderList.push_back(&gDeferredSunProgram);
mShaderList.push_back(&gDeferredBlurLightProgram);
@@ -410,9 +445,13 @@ void LLViewerShaderMgr::setShaders()
}
mMaxAvatarShaderLevel = 0;
+ LLGLSLShader::sNoFixedFunction = false;
if (LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")
&& gSavedSettings.getBOOL("VertexShaderEnable"))
{
+ //using shaders, disable fixed function
+ LLGLSLShader::sNoFixedFunction = true;
+
S32 light_class = 2;
S32 env_class = 2;
S32 obj_class = 2;
@@ -554,6 +593,7 @@ void LLViewerShaderMgr::setShaders()
}
else
{
+ LLGLSLShader::sNoFixedFunction = false;
gPipeline.mVertexShadersEnabled = FALSE;
gPipeline.mVertexShadersLoaded = 0;
mVertexShaderLevel[SHADER_LIGHTING] = 0;
@@ -568,6 +608,7 @@ void LLViewerShaderMgr::setShaders()
}
else
{
+ LLGLSLShader::sNoFixedFunction = false;
gPipeline.mVertexShadersEnabled = FALSE;
gPipeline.mVertexShadersLoaded = 0;
mVertexShaderLevel[SHADER_LIGHTING] = 0;
@@ -591,10 +632,23 @@ void LLViewerShaderMgr::setShaders()
void LLViewerShaderMgr::unloadShaders()
{
+ gOcclusionProgram.unload();
+ gUIProgram.unload();
+ gCustomAlphaProgram.unload();
+ gGlowCombineProgram.unload();
+ gTwoTextureAddProgram.unload();
+ gSolidColorProgram.unload();
+
gObjectSimpleProgram.unload();
+ gImpostorProgram.unload();
+ gObjectSimpleAlphaMaskProgram.unload();
+ gObjectBumpProgram.unload();
gObjectSimpleWaterProgram.unload();
+ gObjectSimpleWaterAlphaMaskProgram.unload();
gObjectFullbrightProgram.unload();
gObjectFullbrightWaterProgram.unload();
+ gObjectFullbrightAlphaMaskProgram.unload();
+ gObjectFullbrightWaterAlphaMaskProgram.unload();
gObjectShinyProgram.unload();
gObjectFullbrightShinyProgram.unload();
@@ -603,6 +657,8 @@ void LLViewerShaderMgr::unloadShaders()
gObjectSimpleNonIndexedProgram.unload();
gObjectSimpleNonIndexedWaterProgram.unload();
+ gObjectAlphaMaskNonIndexedProgram.unload();
+ gObjectAlphaMaskNonIndexedWaterProgram.unload();
gObjectFullbrightNonIndexedProgram.unload();
gObjectFullbrightNonIndexedWaterProgram.unload();
@@ -641,6 +697,8 @@ void LLViewerShaderMgr::unloadShaders()
gPostNightVisionProgram.unload();
gDeferredDiffuseProgram.unload();
+ gDeferredDiffuseAlphaMaskProgram.unload();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.unload();
gDeferredNonIndexedDiffuseProgram.unload();
gDeferredSkinnedDiffuseProgram.unload();
gDeferredSkinnedBumpProgram.unload();
@@ -722,6 +780,11 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
shaders.reserve(13);
S32 ch = gGLManager.mNumTextureImageUnits-1;
+ if (gGLManager.mGLVersion < 3.1f)
+ { //force to 1 texture index channel for old drivers
+ ch = 1;
+ }
+
std::vector<S32> index_channels;
index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/gammaF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT]) );
@@ -729,17 +792,25 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/transportF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "environment/waterFogF.glsl", mVertexShaderLevel[SHADER_WATER] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightAlphaMaskNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightNonIndexedAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightWaterAlphaMaskNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightShinyNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightShinyNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightShinyWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightWaterAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
@@ -985,6 +1056,8 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredTreeProgram.unload();
gDeferredDiffuseProgram.unload();
+ gDeferredDiffuseAlphaMaskProgram.unload();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.unload();
gDeferredNonIndexedDiffuseProgram.unload();
gDeferredSkinnedDiffuseProgram.unload();
gDeferredSkinnedBumpProgram.unload();
@@ -1000,6 +1073,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredBlurLightProgram.unload();
gDeferredSoftenProgram.unload();
gDeferredShadowProgram.unload();
+ gDeferredShadowAlphaMaskProgram.unload();
gDeferredAvatarShadowProgram.unload();
gDeferredAttachmentShadowProgram.unload();
gDeferredAvatarProgram.unload();
@@ -1040,6 +1114,27 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredDiffuseAlphaMaskProgram.mName = "Deferred Diffuse Alpha Mask Shader";
+ gDeferredDiffuseAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseAlphaMaskIndexedF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredDiffuseAlphaMaskProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits;
+ gDeferredDiffuseAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredDiffuseAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mName = "Deferred Diffuse Non-Indexed Alpha Mask Shader";
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredNonIndexedDiffuseAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gDeferredNonIndexedDiffuseProgram.mName = "Non Indexed Deferred Diffuse Shader";
gDeferredNonIndexedDiffuseProgram.mShaderFiles.clear();
gDeferredNonIndexedDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
@@ -1209,7 +1304,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
if (multisample)
{
- fragment = "deferred/sunlightSSAOMSF.glsl";
+ fragment = "deferred/sunLightSSAOMSF.glsl";
}
else
{
@@ -1220,7 +1315,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
if (multisample)
{
- fragment = "deferred/sunlightMSF.glsl";
+ fragment = "deferred/sunLightMSF.glsl";
}
else
{
@@ -1364,6 +1459,16 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredShadowAlphaMaskProgram.mName = "Deferred Shadow Alpha Mask Shader";
+ gDeferredShadowAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredShadowAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredShadowAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gDeferredAvatarShadowProgram.mName = "Deferred Avatar Shadow Shader";
gDeferredAvatarShadowProgram.mFeatures.hasSkinning = true;
gDeferredAvatarShadowProgram.mShaderFiles.clear();
@@ -1576,15 +1681,23 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightShinyWaterProgram.unload();
gObjectShinyWaterProgram.unload();
gObjectSimpleProgram.unload();
+ gImpostorProgram.unload();
+ gObjectSimpleAlphaMaskProgram.unload();
+ gObjectBumpProgram.unload();
gObjectSimpleWaterProgram.unload();
+ gObjectSimpleWaterAlphaMaskProgram.unload();
gObjectFullbrightProgram.unload();
+ gObjectFullbrightAlphaMaskProgram.unload();
gObjectFullbrightWaterProgram.unload();
+ gObjectFullbrightWaterAlphaMaskProgram.unload();
gObjectShinyNonIndexedProgram.unload();
gObjectFullbrightShinyNonIndexedProgram.unload();
gObjectFullbrightShinyNonIndexedWaterProgram.unload();
gObjectShinyNonIndexedWaterProgram.unload();
gObjectSimpleNonIndexedProgram.unload();
gObjectSimpleNonIndexedWaterProgram.unload();
+ gObjectAlphaMaskNonIndexedProgram.unload();
+ gObjectAlphaMaskNonIndexedWaterProgram.unload();
gObjectFullbrightNonIndexedProgram.unload();
gObjectFullbrightNonIndexedWaterProgram.unload();
gSkinnedObjectSimpleProgram.unload();
@@ -1634,6 +1747,41 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectAlphaMaskNonIndexedProgram.mName = "Non indexed alpha mask Shader";
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.calculatesLighting = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasGamma = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasAtmospherics = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasLighting = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.disableTextureIndex = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasAlphaMask = true;
+ gObjectAlphaMaskNonIndexedProgram.mShaderFiles.clear();
+ gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectAlphaMaskNonIndexedProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gObjectAlphaMaskNonIndexedWaterProgram.mName = "Non indexed alpha mask Water Shader";
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.calculatesLighting = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasWaterFog = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasAtmospherics = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasLighting = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.disableTextureIndex = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasAlphaMask = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.clear();
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ success = gObjectAlphaMaskNonIndexedWaterProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectFullbrightNonIndexedProgram.mName = "Non Indexed Fullbright Shader";
gObjectFullbrightNonIndexedProgram.mFeatures.calculatesAtmospherics = true;
gObjectFullbrightNonIndexedProgram.mFeatures.hasGamma = true;
@@ -1732,6 +1880,17 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gImpostorProgram.mName = "Impostor Shader";
+ gImpostorProgram.mFeatures.disableTextureIndex = true;
+ gImpostorProgram.mShaderFiles.clear();
+ gImpostorProgram.mShaderFiles.push_back(make_pair("objects/impostorV.glsl", GL_VERTEX_SHADER_ARB));
+ gImpostorProgram.mShaderFiles.push_back(make_pair("objects/impostorF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gImpostorProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gImpostorProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectSimpleProgram.mName = "Simple Shader";
gObjectSimpleProgram.mFeatures.calculatesLighting = true;
gObjectSimpleProgram.mFeatures.calculatesAtmospherics = true;
@@ -1745,6 +1904,39 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectSimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
success = gObjectSimpleProgram.createShader(NULL, NULL);
}
+
+ if (success)
+ {
+ gObjectSimpleAlphaMaskProgram.mName = "Simple Alpha Mask Shader";
+ gObjectSimpleAlphaMaskProgram.mFeatures.calculatesLighting = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasGamma = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasAtmospherics = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasLighting = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectSimpleAlphaMaskProgram.mShaderFiles.clear();
+ gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectSimpleAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectSimpleAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gObjectBumpProgram.mName = "Bump Shader";
+ /*gObjectBumpProgram.mFeatures.calculatesLighting = true;
+ gObjectBumpProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectBumpProgram.mFeatures.hasGamma = true;
+ gObjectBumpProgram.mFeatures.hasAtmospherics = true;
+ gObjectBumpProgram.mFeatures.hasLighting = true;
+ gObjectBumpProgram.mFeatures.mIndexedTextureChannels = 0;*/
+ gObjectBumpProgram.mShaderFiles.clear();
+ gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectBumpProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectBumpProgram.createShader(NULL, NULL);
+ }
if (success)
{
@@ -1765,6 +1957,24 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectSimpleWaterAlphaMaskProgram.mName = "Simple Water Alpha Mask Shader";
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.calculatesLighting = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasWaterFog = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasAtmospherics = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasLighting = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectSimpleWaterAlphaMaskProgram.mShaderFiles.clear();
+ gObjectSimpleWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectSimpleWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectSimpleWaterAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ gObjectSimpleWaterAlphaMaskProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ success = gObjectSimpleWaterAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectFullbrightProgram.mName = "Fullbright Shader";
gObjectFullbrightProgram.mFeatures.calculatesAtmospherics = true;
gObjectFullbrightProgram.mFeatures.hasGamma = true;
@@ -1796,6 +2006,39 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectFullbrightAlphaMaskProgram.mName = "Fullbright Alpha Mask Shader";
+ gObjectFullbrightAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.hasGamma = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.hasTransport = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.isFullbright = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectFullbrightAlphaMaskProgram.mShaderFiles.clear();
+ gObjectFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectFullbrightAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectFullbrightAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gObjectFullbrightWaterAlphaMaskProgram.mName = "Fullbright Water Shader";
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.isFullbright = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.hasWaterFog = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.hasTransport = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderFiles.clear();
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ success = gObjectFullbrightWaterAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectShinyProgram.mName = "Shiny Shader";
gObjectShinyProgram.mFeatures.calculatesAtmospherics = true;
gObjectShinyProgram.mFeatures.calculatesLighting = true;
@@ -2038,6 +2281,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarProgram.mFeatures.hasGamma = true;
gAvatarProgram.mFeatures.hasAtmospherics = true;
gAvatarProgram.mFeatures.hasLighting = true;
+ gAvatarProgram.mFeatures.hasAlphaMask = true;
gAvatarProgram.mFeatures.disableTextureIndex = true;
gAvatarProgram.mShaderFiles.clear();
gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2054,6 +2298,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarWaterProgram.mFeatures.hasWaterFog = true;
gAvatarWaterProgram.mFeatures.hasAtmospherics = true;
gAvatarWaterProgram.mFeatures.hasLighting = true;
+ gAvatarWaterProgram.mFeatures.hasAlphaMask = true;
gAvatarWaterProgram.mFeatures.disableTextureIndex = true;
gAvatarWaterProgram.mShaderFiles.clear();
gAvatarWaterProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2092,6 +2337,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarEyeballProgram.mFeatures.hasGamma = true;
gAvatarEyeballProgram.mFeatures.hasAtmospherics = true;
gAvatarEyeballProgram.mFeatures.hasLighting = true;
+ gAvatarEyeballProgram.mFeatures.hasAlphaMask = true;
gAvatarEyeballProgram.mFeatures.disableTextureIndex = true;
gAvatarEyeballProgram.mShaderFiles.clear();
gAvatarEyeballProgram.mShaderFiles.push_back(make_pair("avatar/eyeballV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2130,6 +2376,85 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
success = gHighlightProgram.createShader(NULL, NULL);
}
+ if (success)
+ {
+ gUIProgram.mName = "UI Shader";
+ gUIProgram.mShaderFiles.clear();
+ gUIProgram.mShaderFiles.push_back(make_pair("interface/uiV.glsl", GL_VERTEX_SHADER_ARB));
+ gUIProgram.mShaderFiles.push_back(make_pair("interface/uiF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gUIProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gUIProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gCustomAlphaProgram.mName = "Custom Alpha Shader";
+ gCustomAlphaProgram.mShaderFiles.clear();
+ gCustomAlphaProgram.mShaderFiles.push_back(make_pair("interface/customalphaV.glsl", GL_VERTEX_SHADER_ARB));
+ gCustomAlphaProgram.mShaderFiles.push_back(make_pair("interface/customalphaF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gCustomAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gCustomAlphaProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gGlowCombineProgram.mName = "Glow Combine Shader";
+ gGlowCombineProgram.mShaderFiles.clear();
+ gGlowCombineProgram.mShaderFiles.push_back(make_pair("interface/glowcombineV.glsl", GL_VERTEX_SHADER_ARB));
+ gGlowCombineProgram.mShaderFiles.push_back(make_pair("interface/glowcombineF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gGlowCombineProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gGlowCombineProgram.createShader(NULL, NULL);
+ if (success)
+ {
+ gGlowCombineProgram.bind();
+ gGlowCombineProgram.uniform1i("glowMap", 0);
+ gGlowCombineProgram.uniform1i("screenMap", 1);
+ gGlowCombineProgram.unbind();
+ }
+ }
+
+ if (success)
+ {
+ gTwoTextureAddProgram.mName = "Two Texture Add Shader";
+ gTwoTextureAddProgram.mShaderFiles.clear();
+ gTwoTextureAddProgram.mShaderFiles.push_back(make_pair("interface/twotextureaddV.glsl", GL_VERTEX_SHADER_ARB));
+ gTwoTextureAddProgram.mShaderFiles.push_back(make_pair("interface/twotextureaddF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gTwoTextureAddProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gTwoTextureAddProgram.createShader(NULL, NULL);
+ if (success)
+ {
+ gTwoTextureAddProgram.bind();
+ gTwoTextureAddProgram.uniform1i("tex0", 0);
+ gTwoTextureAddProgram.uniform1i("tex1", 1);
+ }
+ }
+
+ if (success)
+ {
+ gSolidColorProgram.mName = "Solid Color Shader";
+ gSolidColorProgram.mShaderFiles.clear();
+ gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorV.glsl", GL_VERTEX_SHADER_ARB));
+ gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gSolidColorProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gSolidColorProgram.createShader(NULL, NULL);
+ if (success)
+ {
+ gSolidColorProgram.bind();
+ gSolidColorProgram.uniform1i("tex0", 0);
+ gSolidColorProgram.unbind();
+ }
+ }
+
+ if (success)
+ {
+ gOcclusionProgram.mName = "Occlusion Shader";
+ gOcclusionProgram.mShaderFiles.clear();
+ gOcclusionProgram.mShaderFiles.push_back(make_pair("interface/occlusionV.glsl", GL_VERTEX_SHADER_ARB));
+ gOcclusionProgram.mShaderFiles.push_back(make_pair("interface/occlusionF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gOcclusionProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gOcclusionProgram.createShader(NULL, NULL);
+ }
+
if( !success )
{
mVertexShaderLevel[SHADER_INTERFACE] = 0;
@@ -2184,6 +2509,16 @@ std::string LLViewerShaderMgr::getShaderDirPrefix(void)
void LLViewerShaderMgr::updateShaderUniforms(LLGLSLShader * shader)
{
- LLWLParamManager::instance()->updateShaderUniforms(shader);
- LLWaterParamManager::instance()->updateShaderUniforms(shader);
+ LLWLParamManager::getInstance()->updateShaderUniforms(shader);
+ LLWaterParamManager::getInstance()->updateShaderUniforms(shader);
+}
+
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::beginShaders() const
+{
+ return mShaderList.begin();
+}
+
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::endShaders() const
+{
+ return mShaderList.end();
}
diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h
index 6ecba65470..d4040f11e1 100644
--- a/indra/newview/llviewershadermgr.h
+++ b/indra/newview/llviewershadermgr.h
@@ -241,20 +241,12 @@ public:
base_iter_t mIter;
};
- shader_iter beginShaders() const
- {
- return mShaderList.begin();
- }
-
- shader_iter endShaders() const
- {
- return mShaderList.end();
- }
+ shader_iter beginShaders() const;
+ shader_iter endShaders() const;
+ /* virtual */ std::string getShaderDirPrefix(void);
- /* virtual */ std::string getShaderDirPrefix(void); // Virtual
-
- /* virtual */ void updateShaderUniforms(LLGLSLShader * shader); // Virtual
+ /* virtual */ void updateShaderUniforms(LLGLSLShader * shader);
private:
@@ -295,15 +287,30 @@ inline bool operator != (LLViewerShaderMgr::shader_iter const & a, LLViewerShade
extern LLVector4 gShinyOrigin;
+//utility shaders
+extern LLGLSLShader gOcclusionProgram;
+extern LLGLSLShader gCustomAlphaProgram;
+extern LLGLSLShader gGlowCombineProgram;
+
+//output tex0[tc0] + tex1[tc1]
+extern LLGLSLShader gTwoTextureAddProgram;
+
//object shaders
extern LLGLSLShader gObjectSimpleProgram;
+extern LLGLSLShader gObjectSimpleAlphaMaskProgram;
extern LLGLSLShader gObjectSimpleWaterProgram;
+extern LLGLSLShader gObjectSimpleWaterAlphaMaskProgram;
extern LLGLSLShader gObjectSimpleNonIndexedProgram;
extern LLGLSLShader gObjectSimpleNonIndexedWaterProgram;
+extern LLGLSLShader gObjectAlphaMaskNonIndexedProgram;
+extern LLGLSLShader gObjectAlphaMaskNonIndexedWaterProgram;
extern LLGLSLShader gObjectFullbrightProgram;
extern LLGLSLShader gObjectFullbrightWaterProgram;
+extern LLGLSLShader gObjectFullbrightAlphaMaskProgram;
+extern LLGLSLShader gObjectFullbrightWaterAlphaMaskProgram;
extern LLGLSLShader gObjectFullbrightNonIndexedProgram;
extern LLGLSLShader gObjectFullbrightNonIndexedWaterProgram;
+extern LLGLSLShader gObjectBumpProgram;
extern LLGLSLShader gObjectSimpleLODProgram;
extern LLGLSLShader gObjectFullbrightLODProgram;
@@ -344,6 +351,7 @@ extern LLGLSLShader gAvatarProgram;
extern LLGLSLShader gAvatarWaterProgram;
extern LLGLSLShader gAvatarEyeballProgram;
extern LLGLSLShader gAvatarPickProgram;
+extern LLGLSLShader gImpostorProgram;
// WindLight shader handles
extern LLGLSLShader gWLSkyProgram;
@@ -358,6 +366,8 @@ extern LLGLSLShader gDeferredImpostorProgram;
extern LLGLSLShader gDeferredEdgeProgram;
extern LLGLSLShader gDeferredWaterProgram;
extern LLGLSLShader gDeferredDiffuseProgram;
+extern LLGLSLShader gDeferredDiffuseAlphaMaskProgram;
+extern LLGLSLShader gDeferredNonIndexedDiffuseAlphaMaskProgram;
extern LLGLSLShader gDeferredNonIndexedDiffuseProgram;
extern LLGLSLShader gDeferredSkinnedDiffuseProgram;
extern LLGLSLShader gDeferredSkinnedBumpProgram;
@@ -376,6 +386,7 @@ extern LLGLSLShader gDeferredBlurLightProgram;
extern LLGLSLShader gDeferredAvatarProgram;
extern LLGLSLShader gDeferredSoftenProgram;
extern LLGLSLShader gDeferredShadowProgram;
+extern LLGLSLShader gDeferredShadowAlphaMaskProgram;
extern LLGLSLShader gDeferredPostGIProgram;
extern LLGLSLShader gDeferredPostProgram;
extern LLGLSLShader gDeferredPostNoDoFProgram;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 4da0f80a00..280337be0f 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -66,6 +66,7 @@
// statics
LLPointer<LLViewerTexture> LLViewerTexture::sNullImagep = NULL;
+LLPointer<LLViewerTexture> LLViewerTexture::sBlackImagep = NULL;
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sMissingAssetImagep = NULL;
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sWhiteImagep = NULL;
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultImagep = NULL;
@@ -295,17 +296,23 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const
void LLViewerTextureManager::init()
{
- LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,3);
- raw->clear(0x77, 0x77, 0x77, 0xFF);
- LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ;
-
-#if 1
- LLPointer<LLViewerFetchedTexture> imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT);
- LLViewerFetchedTexture::sDefaultImagep = imagep;
+ {
+ LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,3);
+ raw->clear(0x77, 0x77, 0x77, 0xFF);
+ LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ;
+ }
const S32 dim = 128;
LLPointer<LLImageRaw> 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<LLViewerFetchedTexture> imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT);
+ LLViewerFetchedTexture::sDefaultImagep = imagep;
+
for (S32 i = 0; i<dim; i++)
{
for (S32 j = 0; j<dim; j++)
@@ -359,6 +366,7 @@ void LLViewerTextureManager::cleanup()
LLImageGL::sDefaultGLTexture = NULL ;
LLViewerTexture::sNullImagep = NULL;
+ LLViewerTexture::sBlackImagep = NULL;
LLViewerFetchedTexture::sDefaultImagep = NULL;
LLViewerFetchedTexture::sSmokeImagep = NULL;
LLViewerFetchedTexture::sMissingAssetImagep = NULL;
@@ -599,7 +607,7 @@ bool LLViewerTexture::bindDefaultImage(S32 stage)
}
if (!res && LLViewerTexture::sNullImagep.notNull() && (this != LLViewerTexture::sNullImagep))
{
- res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sNullImagep) ;
+ res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sNullImagep);
}
if (!res)
{
@@ -3101,9 +3109,16 @@ void LLViewerLODTexture::processTextureStats()
{
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ;
}
+ else if(LLPipeline::sMemAllocationThrottled)//release memory of large textures by decrease their resolutions.
+ {
+ if(scaleDown())
+ {
+ mDesiredDiscardLevel = mCachedRawDiscardLevel ;
+ }
+ }
}
-void LLViewerLODTexture::scaleDown()
+bool LLViewerLODTexture::scaleDown()
{
if(hasGLTexture() && mCachedRawDiscardLevel > getDiscardLevel())
{
@@ -3114,7 +3129,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 c5b8c8923a..a4a5ae0a5b 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -330,6 +330,7 @@ public:
static BOOL sUseTextureAtlas ;
static LLPointer<LLViewerTexture> sNullImagep; // Null texture for non-textured objects.
+ static LLPointer<LLViewerTexture> 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/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index a1d9434d44..30ef8b8a29 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -76,7 +76,6 @@ LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE);
LLViewerTextureList gTextureList;
static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images");
-U32 LLViewerTextureList::sRenderThreadID = 0 ;
///////////////////////////////////////////////////////////////////////////////
LLViewerTextureList::LLViewerTextureList()
@@ -90,7 +89,6 @@ LLViewerTextureList::LLViewerTextureList()
void LLViewerTextureList::init()
{
- sRenderThreadID = LLThread::currentID() ;
mInitialized = TRUE ;
sNumImages = 0;
mUpdateStats = TRUE;
@@ -117,7 +115,7 @@ void LLViewerTextureList::doPreloadImages()
// Set the "white" image
LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
-
+ LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
LLUIImageList* image_list = LLUIImageList::getInstance();
image_list->initFromFile();
@@ -502,10 +500,9 @@ LLViewerFetchedTexture *LLViewerTextureList::findImage(const LLUUID &image_id)
return iter->second;
}
-void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thread_id)
+void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
{
llassert_always(mInitialized) ;
- llassert_always(sRenderThreadID == thread_id);
llassert(image);
if (image->isInImageList())
{
@@ -519,10 +516,9 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thre
image->setInImageList(TRUE) ;
}
-void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id)
+void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
{
llassert_always(mInitialized) ;
- llassert_always(sRenderThreadID == thread_id);
llassert(image);
if (!image->isInImageList())
{
@@ -659,10 +655,7 @@ void LLViewerTextureList::updateImagesDecodePriorities()
const F32 LAZY_FLUSH_TIMEOUT = 30.f; // stop decoding
const F32 MAX_INACTIVE_TIME = 50.f; // actually delete
S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference
- if (imagep->hasCallbacks())
- {
- min_refs++; // Add an extra reference if we're on the loaded callback list
- }
+
S32 num_refs = imagep->getNumRefs();
if (num_refs == min_refs)
{
@@ -719,9 +712,9 @@ void LLViewerTextureList::updateImagesDecodePriorities()
if ((decode_priority_test < old_priority_test * .8f) ||
(decode_priority_test > old_priority_test * 1.25f))
{
- removeImageFromList(imagep, sRenderThreadID);
+ removeImageFromList(imagep);
imagep->setDecodePriority(decode_priority);
- addImageToList(imagep, sRenderThreadID);
+ addImageToList(imagep);
}
update_counter--;
}
@@ -893,8 +886,6 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
{
LLTimer timer;
- llassert_always(sRenderThreadID == LLThread::currentID());
-
// Update texture stats and priorities
std::vector<LLPointer<LLViewerFetchedTexture> > image_list;
for (image_priority_list_t::iterator iter = mImageList.begin();
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index d02b6be6b5..7f4dd0ae88 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -121,8 +121,8 @@ private:
void addImage(LLViewerFetchedTexture *image);
void deleteImage(LLViewerFetchedTexture *image);
- void addImageToList(LLViewerFetchedTexture *image, U32 thread_id = LLThread::currentID());
- void removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id = LLThread::currentID());
+ void addImageToList(LLViewerFetchedTexture *image);
+ void removeImageFromList(LLViewerFetchedTexture *image);
LLViewerFetchedTexture * getImage(const LLUUID &image_id,
BOOL usemipmap = TRUE,
@@ -208,9 +208,6 @@ public:
private:
static S32 sNumImages;
static void (*sUUIDCallback)(void**, const LLUUID &);
-
- //debug use
- static U32 sRenderThreadID;
};
class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList>
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b1441cc281..5893259d96 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -528,8 +528,8 @@ public:
addText(xpos,ypos, llformat("%s streaming cost: %.1f", label, cost));
ypos += y_inc;
- addText(xpos, ypos, llformat(" %.1f KTris, %.1f/%.1f KB, %d objects",
- count/1024.f, visible_bytes/1024.f, total_bytes/1024.f, object_count));
+ addText(xpos, ypos, llformat(" %.3f KTris, %.1f/%.1f KB, %d objects",
+ count/1000.f, visible_bytes/1024.f, total_bytes/1024.f, object_count));
ypos += y_inc;
}
@@ -662,6 +662,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"))
{
@@ -726,19 +737,6 @@ public:
}
}
- if (gSavedSettings.getBOOL("DebugShowUploadCost"))
- {
- addText(xpos, ypos, llformat(" Meshes: L$%d", gPipeline.mDebugMeshUploadCost));
- ypos += y_inc/2;
- addText(xpos, ypos, llformat(" Sculpties: L$%d", gPipeline.mDebugSculptUploadCost));
- ypos += y_inc/2;
- addText(xpos, ypos, llformat(" Textures: L$%d", gPipeline.mDebugTextureUploadCost));
- ypos += y_inc/2;
- addText(xpos, ypos, "Upload Cost: ");
-
- ypos += y_inc;
- }
-
//temporary hack to give feedback on mesh upload progress
if (!gMeshRepo.mUploads.empty())
{
@@ -747,10 +745,8 @@ public:
{
LLMeshUploadThread* thread = *iter;
- addText(xpos, ypos, llformat("Mesh Upload -- price quote: %d:%d | upload: %d:%d | create: %d",
- thread->mPendingConfirmations, thread->mUploadQ.size()+thread->mTextureQ.size(),
- thread->mPendingUploads, thread->mConfirmedQ.size()+thread->mConfirmedTextureQ.size(),
- thread->mInstanceQ.size()));
+ addText(xpos, ypos, llformat("Mesh Uploads: %d",
+ thread->mPendingUploads));
ypos += y_inc;
}
}
@@ -1578,6 +1574,25 @@ LLViewerWindow::LLViewerWindow(
ignore_pixel_depth,
gSavedSettings.getBOOL("RenderDeferred") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled
+ if (NULL == mWindow)
+ {
+ LLSplashScreen::update(LLTrans::getString("StartupRequireDriverUpdate"));
+
+ LL_WARNS("Window") << "Failed to create window, to be shutting Down, be sure your graphics driver is updated." << llendl ;
+
+ ms_sleep(5000) ; //wait for 5 seconds.
+
+ LLSplashScreen::update(LLTrans::getString("ShuttingDown"));
+#if LL_LINUX || LL_SOLARIS
+ llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
+ << llendl;
+#else
+ LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings"
+ << LL_ENDL;
+#endif
+ LLAppViewer::instance()->fastQuit(1);
+ }
+
if (!LLAppViewer::instance()->restoreErrorTrap())
{
LL_WARNS("Window") << " Someone took over my signal/exception handler (post createWindow)!" << LL_ENDL;
@@ -1593,19 +1608,6 @@ LLViewerWindow::LLViewerWindow(
gSavedSettings.setS32("FullScreenHeight",scr.mY);
}
- if (NULL == mWindow)
- {
- LLSplashScreen::update(LLTrans::getString("ShuttingDown"));
-#if LL_LINUX || LL_SOLARIS
- llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
- << llendl;
-#else
- LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings"
- << LL_ENDL;
-#endif
- LLAppViewer::instance()->fastQuit(1);
- }
-
// Get the real window rect the window was created with (since there are various OS-dependent reasons why
// the size of a window or fullscreen context may have been adjusted slightly...)
F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
@@ -1639,6 +1641,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())
@@ -1979,7 +1982,10 @@ void LLViewerWindow::shutdownViews()
// destroy the nav bar, not currently part of gViewerWindow
// *TODO: Make LLNavigationBar part of gViewerWindow
+ if (LLNavigationBar::instanceExists())
+ {
delete LLNavigationBar::getInstance();
+ }
// destroy menus after instantiating navbar above, as it needs
// access to gMenuHolder
@@ -2032,15 +2038,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
@@ -2293,6 +2301,11 @@ void LLViewerWindow::draw()
// Draw all nested UI views.
// No translation needed, this view is glued to 0,0
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+
gGL.pushMatrix();
LLUI::pushMatrix();
{
@@ -2367,6 +2380,11 @@ void LLViewerWindow::draw()
LLUI::popMatrix();
gGL.popMatrix();
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.unbind();
+ }
+
//#if LL_DEBUG
LLView::sIsDrawing = FALSE;
//#endif
@@ -3142,6 +3160,12 @@ void LLViewerWindow::updateLayout()
//gMenuBarView->setItemVisible("BuildTools", gFloaterTools->getVisible());
}
+ LLFloaterBuildOptions* build_options_floater = LLFloaterReg::getTypedInstance<LLFloaterBuildOptions>("build_options");
+ if (build_options_floater && build_options_floater->getVisible())
+ {
+ build_options_floater->updateGridMode();
+ }
+
// Always update console
if(gConsole)
{
@@ -4138,6 +4162,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;
@@ -4512,6 +4549,14 @@ void LLViewerWindow::setup3DViewport(S32 x_offset, S32 y_offset)
glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
}
+void LLViewerWindow::revealIntroPanel()
+{
+ if (mProgressView)
+ {
+ mProgressView->revealIntroPanel();
+ }
+}
+
void LLViewerWindow::setShowProgress(const BOOL show)
{
if (mProgressView)
@@ -4520,6 +4565,14 @@ void LLViewerWindow::setShowProgress(const BOOL show)
}
}
+void LLViewerWindow::setStartupComplete()
+{
+ if (mProgressView)
+ {
+ mProgressView->setStartupComplete();
+ }
+}
+
BOOL LLViewerWindow::getShowProgress() const
{
return (mProgressView && mProgressView->getVisible());
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index df6928aa1d..edd241a742 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -271,6 +271,8 @@ public:
void setProgressMessage(const std::string& msg);
void setProgressCancelButtonVisible( BOOL b, const std::string& label = LLStringUtil::null );
LLProgressView *getProgressView() const;
+ void revealIntroPanel();
+ void setStartupComplete();
void updateObjectUnderCursor();
diff --git a/indra/newview/llvlmanager.cpp b/indra/newview/llvlmanager.cpp
index 25f2687fe2..d8de979f56 100644
--- a/indra/newview/llvlmanager.cpp
+++ b/indra/newview/llvlmanager.cpp
@@ -94,7 +94,7 @@ void LLVLManager::unpackData(const S32 num_packets)
}
else if (CLOUD_LAYER_CODE == datap->mType)
{
- datap->mRegionp->mCloudLayer.decompress(bit_pack, &goph);
+
}
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 1b53348b43..7c6a815def 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1123,14 +1123,20 @@ void LLVOAvatar::initClass()
// Process XML data
// avatar_skeleton.xml
- llassert(!sAvatarSkeletonInfo);
+ if (sAvatarSkeletonInfo)
+ { //this can happen if a login attempt failed
+ delete sAvatarSkeletonInfo;
+ }
sAvatarSkeletonInfo = new LLVOAvatarSkeletonInfo;
if (!sAvatarSkeletonInfo->parseXml(sSkeletonXMLTree.getRoot()))
{
llerrs << "Error parsing skeleton XML file: " << skeleton_path << llendl;
}
// parse avatar_lad.xml
- llassert(!sAvatarXmlInfo);
+ if (sAvatarXmlInfo)
+ { //this can happen if a login attempt failed
+ deleteAndClear(sAvatarXmlInfo);
+ }
sAvatarXmlInfo = new LLVOAvatarXmlInfo;
if (!sAvatarXmlInfo->parseXmlSkeletonNode(root))
{
@@ -4219,7 +4225,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
bool should_alpha_mask = shouldAlphaMask();
LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
- if (should_alpha_mask)
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
{
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
@@ -4248,7 +4254,10 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
}
}
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
if (!LLDrawPoolAvatar::sSkipTransparent || LLPipeline::sImpostorRender)
{
@@ -4331,7 +4340,7 @@ U32 LLVOAvatar::renderRigid()
bool should_alpha_mask = shouldAlphaMask();
LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
- if (should_alpha_mask)
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
{
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
@@ -4342,7 +4351,10 @@ U32 LLVOAvatar::renderRigid()
num_indices += mMeshLOD[MESH_ID_EYEBALL_RIGHT]->render(mAdjustedPixelArea, TRUE, mIsDummy);
}
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
return num_indices;
}
@@ -7270,9 +7282,9 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
llinfos << "Re-requesting AvatarAppearance for object: " << getID() << llendl;
LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(getID());
mRuthTimer.reset();
- }
- else
- {
+ }
+ else
+ {
llinfos << "That's okay, we already have a non-default shape for object: " << getID() << llendl;
// we don't really care.
}
@@ -7494,8 +7506,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
// static
void LLVOAvatar::dumpArchetypeXML( void* )
{
- LLAPRFile outfile;
- outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB );
+ LLAPRFile outfile(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER, "new archetype.xml"), LL_APR_WB);
apr_file_t* file = outfile.getFileHandle() ;
if (!file)
{
@@ -8242,6 +8253,8 @@ U32 LLVOAvatar::getPartitionType() const
//static
void LLVOAvatar::updateImpostors()
{
+ LLCharacter::sAllowInstancesChange = FALSE ;
+
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
iter != LLCharacter::sInstances.end(); ++iter)
{
@@ -8251,6 +8264,8 @@ void LLVOAvatar::updateImpostors()
gPipeline.generateImpostor(avatar);
}
}
+
+ LLCharacter::sAllowInstancesChange = TRUE ;
}
BOOL LLVOAvatar::isImpostor() const
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index f0b5b50feb..baf01ec066 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -268,7 +268,6 @@ LLVOCache::LLVOCache():
mCacheSize(1)
{
mEnabled = gSavedSettings.getBOOL("ObjectCacheEnabled");
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
}
LLVOCache::~LLVOCache()
@@ -278,7 +277,6 @@ LLVOCache::~LLVOCache()
writeCacheHeader();
clearCacheInMemory();
}
- delete mLocalAPRFilePoolp;
}
void LLVOCache::setDirNames(ELLPath location)
@@ -435,7 +433,7 @@ void LLVOCache::removeFromCache(HeaderEntryInfo* entry)
std::string filename;
getObjectCacheFilename(entry->mHandle, filename);
- LLAPRFile::remove(filename, mLocalAPRFilePoolp);
+ LLAPRFile::remove(filename);
entry->mTime = INVALID_TIME ;
updateEntry(entry) ; //update the head file.
}
@@ -452,9 +450,9 @@ void LLVOCache::readCacheHeader()
clearCacheInMemory();
bool success = true ;
- if (LLAPRFile::isExist(mHeaderFileName, mLocalAPRFilePoolp))
+ if (LLAPRFile::isExist(mHeaderFileName))
{
- LLAPRFile apr_file(mHeaderFileName, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(mHeaderFileName, APR_READ|APR_BINARY);
//read the meta element
success = check_read(&apr_file, &mMetaInfo, sizeof(HeaderMetaInfo)) ;
@@ -539,7 +537,7 @@ void LLVOCache::writeCacheHeader()
bool success = true ;
{
- LLAPRFile apr_file(mHeaderFileName, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(mHeaderFileName, APR_CREATE|APR_WRITE|APR_BINARY);
//write the meta element
success = check_write(&apr_file, &mMetaInfo, sizeof(HeaderMetaInfo)) ;
@@ -577,7 +575,7 @@ void LLVOCache::writeCacheHeader()
BOOL LLVOCache::updateEntry(const HeaderEntryInfo* entry)
{
- LLAPRFile apr_file(mHeaderFileName, APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(mHeaderFileName, APR_WRITE|APR_BINARY);
apr_file.seek(APR_SET, entry->mIndex * sizeof(HeaderEntryInfo) + sizeof(HeaderMetaInfo)) ;
return check_write(&apr_file, (void*)entry, sizeof(HeaderEntryInfo)) ;
@@ -603,7 +601,7 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
{
std::string filename;
getObjectCacheFilename(handle, filename);
- LLAPRFile apr_file(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(filename, APR_READ|APR_BINARY);
LLUUID cache_id ;
success = check_read(&apr_file, cache_id.mData, UUID_BYTES) ;
@@ -621,16 +619,20 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
S32 num_entries;
success = check_read(&apr_file, &num_entries, sizeof(S32)) ;
- for (S32 i = 0; success && i < num_entries; i++)
+ if(success)
{
- LLVOCacheEntry* entry = new LLVOCacheEntry(&apr_file);
- if (!entry->getLocalID())
+ for (S32 i = 0; i < num_entries; i++)
{
- llwarns << "Aborting cache file load for " << filename << ", cache file corruption!" << llendl;
- delete entry ;
- success = false ;
+ LLVOCacheEntry* entry = new LLVOCacheEntry(&apr_file);
+ if (!entry->getLocalID())
+ {
+ llwarns << "Aborting cache file load for " << filename << ", cache file corruption!" << llendl;
+ delete entry ;
+ success = false ;
+ break ;
+ }
+ cache_entry_map[entry->getLocalID()] = entry;
}
- cache_entry_map[entry->getLocalID()] = entry;
}
}
}
@@ -722,7 +724,7 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry:
{
std::string filename;
getObjectCacheFilename(handle, filename);
- LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY);
success = check_write(&apr_file, (void*)id.mData, UUID_BYTES) ;
@@ -747,4 +749,3 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry:
return ;
}
-
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 14e3b4c793..13651c6779 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -142,7 +142,6 @@ private:
U32 mNumEntries;
std::string mHeaderFileName ;
std::string mObjectCacheDirName;
- LLVolatileAPRPool* mLocalAPRFilePoolp ;
header_entry_queue_t mHeaderEntryQueue;
handle_entry_map_t mHandleEntryMap;
diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp
deleted file mode 100644
index 478708cd78..0000000000
--- a/indra/newview/llvoclouds.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-/**
- * @file llvoclouds.cpp
- * @brief Implementation of LLVOClouds class which is a derivation fo LLViewerObject
- *
- * $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 "llvoclouds.h"
-
-#include "lldrawpoolalpha.h"
-
-#include "llviewercontrol.h"
-
-#include "llagent.h" // to get camera position
-#include "lldrawable.h"
-#include "llface.h"
-#include "llprimitive.h"
-#include "llsky.h"
-#include "llviewercamera.h"
-#include "llviewertexturelist.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llvosky.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llspatialpartition.h"
-
-LLUUID gCloudTextureID = IMG_CLOUD_POOF;
-
-
-LLVOClouds::LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-: LLAlphaObject(id, LL_VO_CLOUDS, regionp)
-{
- mCloudGroupp = NULL;
- mbCanSelect = FALSE;
- setNumTEs(1);
- LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(gCloudTextureID);
- image->setBoostLevel(LLViewerTexture::BOOST_CLOUDS);
- setTEImage(0, image);
-}
-
-
-LLVOClouds::~LLVOClouds()
-{
-}
-
-
-BOOL LLVOClouds::isActive() const
-{
- return TRUE;
-}
-
-BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
-{
- static LLFastTimer::DeclareTimer ftm("Idle Clouds");
- LLFastTimer t(ftm);
-
- if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
- {
- return TRUE;
- }
-
- // Set dirty flag (so renderer will rebuild primitive)
- if (mDrawable)
- {
- gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
- }
-
- return TRUE;
-}
-
-
-void LLVOClouds::setPixelAreaAndAngle(LLAgent &agent)
-{
- mAppAngle = 50;
- mPixelArea = 1500*100;
-}
-
-void LLVOClouds::updateTextures()
-{
- getTEImage(0)->addTextureStats(mPixelArea);
-}
-
-LLDrawable* LLVOClouds::createDrawable(LLPipeline *pipeline)
-{
- pipeline->allocDrawable(this);
- mDrawable->setLit(FALSE);
- mDrawable->setRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
-
- return mDrawable;
-}
-
-static LLFastTimer::DeclareTimer FTM_UPDATE_CLOUDS("Update Clouds");
-
-BOOL LLVOClouds::updateGeometry(LLDrawable *drawable)
-{
- LLFastTimer ftm(FTM_UPDATE_CLOUDS);
- if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
- {
- return TRUE;
- }
-
- if (drawable->isVisible())
- {
- dirtySpatialGroup(TRUE);
- }
-
- LLFace *facep;
-
- S32 num_faces = mCloudGroupp->getNumPuffs();
-
- if (num_faces > drawable->getNumFaces())
- {
- drawable->setNumFacesFast(num_faces, NULL, getTEImage(0));
- }
-
- mDepth = (getPositionAgent()-LLViewerCamera::getInstance()->getOrigin())*LLViewerCamera::getInstance()->getAtAxis();
-
- S32 face_indx = 0;
- for ( ; face_indx < num_faces; face_indx++)
- {
- facep = drawable->getFace(face_indx);
- if (!facep)
- {
- llwarns << "No facep for index " << face_indx << llendl;
- continue;
- }
-
- facep->setSize(4, 6);
-
- facep->setTEOffset(face_indx);
- facep->setTexture(getTEImage(0));
- const LLCloudPuff &puff = mCloudGroupp->getPuff(face_indx);
- const LLVector3 puff_pos_agent = gAgent.getPosAgentFromGlobal(puff.getPositionGlobal());
- facep->mCenterLocal = puff_pos_agent;
- /// Update cloud color based on sun color.
- LLColor4 float_color(LLColor3(gSky.getSunDiffuseColor() + gSky.getSunAmbientColor()),puff.getAlpha());
- facep->setFaceColor(float_color);
- }
- for ( ; face_indx < drawable->getNumFaces(); face_indx++)
- {
- facep = drawable->getFace(face_indx);
- if (!facep)
- {
- llwarns << "No facep for index " << face_indx << llendl;
- continue;
- }
-
- facep->setTEOffset(face_indx);
- facep->setSize(0,0);
- }
-
- drawable->movePartition();
-
- return TRUE;
-}
-
-F32 LLVOClouds::getPartSize(S32 idx)
-{
- return (CLOUD_PUFF_HEIGHT+CLOUD_PUFF_WIDTH)*0.5f;
-}
-
-void LLVOClouds::getGeometry(S32 te,
- LLStrider<LLVector3>& verticesp,
- LLStrider<LLVector3>& normalsp,
- LLStrider<LLVector2>& texcoordsp,
- LLStrider<LLColor4U>& colorsp,
- LLStrider<U16>& indicesp)
-{
-
- if (te >= mCloudGroupp->getNumPuffs())
- {
- return;
- }
-
- LLDrawable* drawable = mDrawable;
- LLFace *facep = drawable->getFace(te);
-
- if (!facep->hasGeometry())
- {
- return;
- }
-
- LLVector3 normal(0.f,0.f,-1.f);
-
- const LLCloudPuff &puff = mCloudGroupp->getPuff(te);
- S32 index_offset = facep->getGeomIndex();
- LLColor4 float_color(LLColor3(gSky.getSunDiffuseColor() + gSky.getSunAmbientColor()),puff.getAlpha());
- LLColor4U color;
- color.setVec(float_color);
- facep->setFaceColor(float_color);
-
-
- LLVector3 up;
- LLVector3 right;
- LLVector3 at;
-
- const LLVector3& puff_pos_agent = facep->mCenterLocal;
- LLVector2 uvs[4];
-
- uvs[0].setVec(0.f, 1.f);
- uvs[1].setVec(0.f, 0.f);
- uvs[2].setVec(1.f, 1.f);
- uvs[3].setVec(1.f, 0.f);
-
- LLVector3 vtx[4];
-
- at = LLViewerCamera::getInstance()->getAtAxis();
- right = at % LLVector3(0.f, 0.f, 1.f);
- right.normVec();
- up = right % at;
- up.normVec();
- right *= 0.5f*CLOUD_PUFF_WIDTH;
- up *= 0.5f*CLOUD_PUFF_HEIGHT;;
-
- *colorsp++ = color;
- *colorsp++ = color;
- *colorsp++ = color;
- *colorsp++ = color;
-
- vtx[0] = puff_pos_agent - right + up;
- vtx[1] = puff_pos_agent - right - up;
- vtx[2] = puff_pos_agent + right + up;
- vtx[3] = puff_pos_agent + right - up;
-
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[0];
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[1];
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[2];
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[3];
-
- *texcoordsp++ = uvs[0];
- *texcoordsp++ = uvs[1];
- *texcoordsp++ = uvs[2];
- *texcoordsp++ = uvs[3];
-
- *normalsp++ = normal;
- *normalsp++ = normal;
- *normalsp++ = normal;
- *normalsp++ = normal;
-
- *indicesp++ = index_offset + 0;
- *indicesp++ = index_offset + 1;
- *indicesp++ = index_offset + 2;
-
- *indicesp++ = index_offset + 1;
- *indicesp++ = index_offset + 3;
- *indicesp++ = index_offset + 2;
-}
-
-U32 LLVOClouds::getPartitionType() const
-{
- return LLViewerRegion::PARTITION_CLOUD;
-}
-
-// virtual
-void LLVOClouds::updateDrawable(BOOL force_damped)
-{
- // Force an immediate rebuild on any update
- if (mDrawable.notNull())
- {
- mDrawable->updateXform(TRUE);
- gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);
- }
- clearChanged(SHIFTED);
-}
-
-LLCloudPartition::LLCloudPartition()
-{
- mDrawableType = LLPipeline::RENDER_TYPE_CLOUDS;
- mPartitionType = LLViewerRegion::PARTITION_CLOUD;
-}
-
diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h
deleted file mode 100644
index 430923a108..0000000000
--- a/indra/newview/llvoclouds.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * @file llvoclouds.h
- * @brief Description of LLVOClouds class
- *
- * $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$
- */
-
-#ifndef LL_LLVOCLOUDS_H
-#define LL_LLVOCLOUDS_H
-
-#include "llviewerobject.h"
-#include "lltable.h"
-#include "v4coloru.h"
-
-class LLViewerTexture;
-class LLViewerCloudGroup;
-
-class LLCloudGroup;
-
-
-class LLVOClouds : public LLAlphaObject
-{
-public:
- LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp );
-
- // Initialize data that's only inited once per class.
- static void initClass();
-
- void updateDrawable(BOOL force_damped);
-
- /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
- /*virtual*/ BOOL updateGeometry(LLDrawable *drawable);
- /*virtual*/ void getGeometry(S32 te,
- LLStrider<LLVector3>& verticesp,
- LLStrider<LLVector3>& normalsp,
- LLStrider<LLVector2>& texcoordsp,
- LLStrider<LLColor4U>& colorsp,
- LLStrider<U16>& indicesp);
-
- /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
- F32 getPartSize(S32 idx);
-
- /*virtual*/ void updateTextures();
- /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
-
- void updateFaceSize(S32 idx) { }
- BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
-
- virtual U32 getPartitionType() const;
-
- void setCloudGroup(LLCloudGroup *cgp) { mCloudGroupp = cgp; }
-protected:
- virtual ~LLVOClouds();
-
- LLCloudGroup *mCloudGroupp;
-};
-
-extern LLUUID gCloudTextureID;
-
-#endif // LL_VO_CLOUDS_H
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 6ee6822e2f..8b942fbc6a 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -195,12 +195,13 @@ static LLVivoxVoiceClientFriendsObserver *friendslist_listener = NULL;
class LLVivoxVoiceClientCapResponder : public LLHTTPClient::Responder
{
public:
- LLVivoxVoiceClientCapResponder(void){};
+ LLVivoxVoiceClientCapResponder(LLVivoxVoiceClient::state requesting_state) : mRequestingState(requesting_state) {};
virtual void error(U32 status, const std::string& reason); // called with bad status codes
virtual void result(const LLSD& content);
private:
+ LLVivoxVoiceClient::state mRequestingState; // state
};
void LLVivoxVoiceClientCapResponder::error(U32 status, const std::string& reason)
@@ -208,6 +209,7 @@ void LLVivoxVoiceClientCapResponder::error(U32 status, const std::string& reason
LL_WARNS("Voice") << "LLVivoxVoiceClientCapResponder::error("
<< status << ": " << reason << ")"
<< LL_ENDL;
+ LLVivoxVoiceClient::getInstance()->sessionTerminate();
}
void LLVivoxVoiceClientCapResponder::result(const LLSD& content)
@@ -216,12 +218,12 @@ void LLVivoxVoiceClientCapResponder::result(const LLSD& content)
LL_DEBUGS("Voice") << "ParcelVoiceInfoRequest response:" << ll_pretty_print_sd(content) << LL_ENDL;
+ std::string uri;
+ std::string credentials;
+
if ( content.has("voice_credentials") )
{
LLSD voice_credentials = content["voice_credentials"];
- std::string uri;
- std::string credentials;
-
if ( voice_credentials.has("channel_uri") )
{
uri = voice_credentials["channel_uri"].asString();
@@ -231,7 +233,12 @@ void LLVivoxVoiceClientCapResponder::result(const LLSD& content)
credentials =
voice_credentials["channel_credentials"].asString();
}
-
+ }
+
+ // set the spatial channel. If no voice credentials or uri are
+ // available, then we simply drop out of voice spatially.
+ if(LLVivoxVoiceClient::getInstance()->parcelVoiceInfoReceived(mRequestingState))
+ {
LLVivoxVoiceClient::getInstance()->setSpatialChannel(uri, credentials);
}
}
@@ -551,18 +558,27 @@ void LLVivoxVoiceClient::userAuthorized(const std::string& user_id, const LLUUID
void LLVivoxVoiceClient::requestVoiceAccountProvision(S32 retries)
{
- if ( gAgent.getRegion() && mVoiceEnabled )
+ LLViewerRegion *region = gAgent.getRegion();
+
+ if ( region && mVoiceEnabled )
{
std::string url =
- gAgent.getRegion()->getCapability(
- "ProvisionVoiceAccountRequest");
-
- if ( url == "" ) return;
-
+ region->getCapability("ProvisionVoiceAccountRequest");
+
+ if ( url.empty() )
+ {
+ // we've not received the capability yet, so return.
+ // the password will remain empty, so we'll remain in
+ // stateIdle
+ return;
+ }
+
LLHTTPClient::post(
- url,
- LLSD(),
- new LLVivoxVoiceAccountProvisionResponder(retries));
+ url,
+ LLSD(),
+ new LLVivoxVoiceAccountProvisionResponder(retries));
+
+ setState(stateConnectorStart);
}
}
@@ -673,7 +689,8 @@ std::string LLVivoxVoiceClient::state2string(LLVivoxVoiceClient::state inState)
CASE(stateVoiceFontsWait);
CASE(stateVoiceFontsReceived);
CASE(stateCreatingSessionGroup);
- CASE(stateNoChannel);
+ CASE(stateNoChannel);
+ CASE(stateRetrievingParcelVoiceInfo);
CASE(stateJoiningSession);
CASE(stateSessionJoined);
CASE(stateRunning);
@@ -741,42 +758,6 @@ void LLVivoxVoiceClient::stateMachine()
}
}
- // Check for parcel boundary crossing
- {
- LLViewerRegion *region = gAgent.getRegion();
- LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-
- if(region && parcel)
- {
- S32 parcelLocalID = parcel->getLocalID();
- std::string regionName = region->getName();
- std::string capURI = region->getCapability("ParcelVoiceInfoRequest");
-
-// LL_DEBUGS("Voice") << "Region name = \"" << regionName << "\", parcel local ID = " << parcelLocalID << ", cap URI = \"" << capURI << "\"" << LL_ENDL;
-
- // The region name starts out empty and gets filled in later.
- // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes.
- // If either is empty, wait for the next time around.
- if(!regionName.empty())
- {
- if(!capURI.empty())
- {
- if((parcelLocalID != mCurrentParcelLocalID) || (regionName != mCurrentRegionName))
- {
- // We have changed parcels. Initiate a parcel channel lookup.
- mCurrentParcelLocalID = parcelLocalID;
- mCurrentRegionName = regionName;
-
- parcelChanged();
- }
- }
- else
- {
- LL_WARNS_ONCE("Voice") << "region doesn't have ParcelVoiceInfoRequest capability. This is normal for a short time after teleporting, but bad if it persists for very long." << LL_ENDL;
- }
- }
- }
- }
switch(getState())
{
@@ -961,7 +942,7 @@ void LLVivoxVoiceClient::stateMachine()
if(!mSocket)
{
- mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
+ mSocket = LLSocket::create(LLSocket::STREAM_TCP);
}
mConnected = mSocket->blockingConnect(mDaemonHost);
@@ -1026,22 +1007,9 @@ void LLVivoxVoiceClient::stateMachine()
}
else if(!mAccountName.empty())
{
- LLViewerRegion *region = gAgent.getRegion();
-
- if(region)
+ if ( mAccountPassword.empty() )
{
- if ( region->getCapability("ProvisionVoiceAccountRequest") != "" )
- {
- if ( mAccountPassword.empty() )
- {
- requestVoiceAccountProvision();
- }
- setState(stateConnectorStart);
- }
- else
- {
- LL_WARNS_ONCE("Voice") << "region doesn't have ProvisionVoiceAccountRequest capability!" << LL_ENDL;
- }
+ requestVoiceAccountProvision();
}
}
break;
@@ -1382,11 +1350,7 @@ void LLVivoxVoiceClient::stateMachine()
setState(stateCreatingSessionGroup);
sessionGroupCreateSendMessage();
#else
- // Not using session groups -- skip the stateCreatingSessionGroup state.
- setState(stateNoChannel);
-
- // Initial kick-off of channel lookup logic
- parcelChanged();
+ setState(stateNoChannel);
#endif
break;
@@ -1399,19 +1363,29 @@ void LLVivoxVoiceClient::stateMachine()
}
else if(!mMainSessionGroupHandle.empty())
{
- setState(stateNoChannel);
-
// Start looped recording (needed for "panic button" anti-griefing tool)
recordingLoopStart();
-
- // Initial kick-off of channel lookup logic
- parcelChanged();
+ setState(stateNoChannel);
}
break;
+
+ //MARK: stateRetrievingParcelVoiceInfo
+ case stateRetrievingParcelVoiceInfo:
+ // wait until parcel voice info is received.
+ if(mSessionTerminateRequested || !mVoiceEnabled)
+ {
+ // if a terminate request has been received,
+ // bail and go to the stateSessionTerminated
+ // state. If the cap request is still pending,
+ // the responder will check to see if we've moved
+ // to a new session and won't change any state.
+ setState(stateSessionTerminated);
+ }
+ break;
+
//MARK: stateNoChannel
case stateNoChannel:
-
LL_DEBUGS("Voice") << "State No Channel" << LL_ENDL;
mSpatialJoiningNum = 0;
// Do this here as well as inside sendPositionalUpdate().
@@ -1432,6 +1406,16 @@ void LLVivoxVoiceClient::stateMachine()
{
setState(stateCaptureBufferPaused);
}
+ else if(checkParcelChanged() || (mNextAudioSession == NULL))
+ {
+ // the parcel is changed, or we have no pending audio sessions,
+ // so try to request the parcel voice info
+ // if we have the cap, we move to the appropriate state
+ if(requestParcelVoiceInfo())
+ {
+ setState(stateRetrievingParcelVoiceInfo);
+ }
+ }
else if(sessionNeedsRelog(mNextAudioSession))
{
requestRelog();
@@ -1466,32 +1450,28 @@ void LLVivoxVoiceClient::stateMachine()
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_JOINING);
setState(stateJoiningSession);
}
- else if(!mSpatialSessionURI.empty())
- {
- // If we're not headed elsewhere and have a spatial URI, return to spatial.
- switchChannel(mSpatialSessionURI, true, false, false, mSpatialSessionCredentials);
- }
break;
-
+
//MARK: stateJoiningSession
case stateJoiningSession: // waiting for session handle
-
- // If this is true we have problem with connection to voice server (EXT-4313).
- // See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM.
- if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)
+
+ // If this is true we have problem with connection to voice server (EXT-4313).
+ // See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM.
+ if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)
{
- // Notify observers to let them know there is problem with voice
- notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
- llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl;
+ // Notify observers to let them know there is problem with voice
+ notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
+ llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl;
}
-
- // Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for
- // example for p2p many times while waiting for response, so it can't be used to detect errors
- if(mAudioSession && mAudioSession->mIsSpatial)
+
+ // Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for
+ // example for p2p many times while waiting for response, so it can't be used to detect errors
+ if(mAudioSession && mAudioSession->mIsSpatial)
{
- mSpatialJoiningNum++;
+
+ mSpatialJoiningNum++;
}
-
+
// joinedAudioSession() will transition from here to stateSessionJoined.
if(!mVoiceEnabled)
{
@@ -1511,12 +1491,13 @@ void LLVivoxVoiceClient::stateMachine()
}
}
}
- break;
-
+ break;
+
//MARK: stateSessionJoined
case stateSessionJoined: // session handle received
- mSpatialJoiningNum = 0;
+
+ mSpatialJoiningNum = 0;
// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
// before continuing from this state. They can happen in either order, and if I don't wait for both, things can get stuck.
// For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined.
@@ -1553,7 +1534,7 @@ void LLVivoxVoiceClient::stateMachine()
sessionMediaDisconnectSendMessage(mAudioSession);
setState(stateSessionTerminated);
}
- }
+ }
break;
//MARK: stateRunning
@@ -1565,6 +1546,7 @@ void LLVivoxVoiceClient::stateMachine()
}
else
{
+
if(!inSpatialChannel())
{
// When in a non-spatial channel, never send positional updates.
@@ -1572,8 +1554,22 @@ void LLVivoxVoiceClient::stateMachine()
}
else
{
+ if(checkParcelChanged())
+ {
+ // if the parcel has changed, attempted to request the
+ // cap for the parcel voice info. If we can't request it
+ // then we don't have the cap URL so we do nothing and will
+ // recheck next time around
+ if(requestParcelVoiceInfo())
+ {
+ // we did get the cap, and we made the request,
+ // so go wait for the response.
+ setState(stateRetrievingParcelVoiceInfo);
+ }
+ }
// Do the calculation that enforces the listener<->speaker tether (and also updates the real camera position)
enforceTether();
+
}
// Do notifications for expiring Voice Fonts.
@@ -3840,7 +3836,7 @@ void LLVivoxVoiceClient::participantUpdatedEvent(
// also initialize voice moderate_mode depend on Agent's participant. See EXT-6937.
// *TODO: remove once a way to request the current voice channel moderation mode is implemented.
- if (gAgentID == participant->mAvatarID)
+ if (gAgent.getID() == participant->mAvatarID)
{
speaker_manager->initVoiceModerateMode();
}
@@ -4073,7 +4069,7 @@ void LLVivoxVoiceClient::messageEvent(
}
LL_DEBUGS("Voice") << "adding message, name " << session->mName << " session " << session->mIMSessionID << ", target " << session->mCallerID << LL_ENDL;
- gIMMgr->addMessage(session->mIMSessionID,
+ LLIMMgr::getInstance()->addMessage(session->mIMSessionID,
session->mCallerID,
session->mName.c_str(),
message.c_str(),
@@ -4447,24 +4443,91 @@ LLVivoxVoiceClient::participantState* LLVivoxVoiceClient::findParticipantByID(co
}
-void LLVivoxVoiceClient::parcelChanged()
+
+// Check for parcel boundary crossing
+bool LLVivoxVoiceClient::checkParcelChanged(bool update)
{
- if(getState() >= stateNoChannel)
+ LLViewerRegion *region = gAgent.getRegion();
+ LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+
+ if(region && parcel)
{
- // If the user is logged in, start a channel lookup.
- LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
+ S32 parcelLocalID = parcel->getLocalID();
+ std::string regionName = region->getName();
+
+ // LL_DEBUGS("Voice") << "Region name = \"" << regionName << "\", parcel local ID = " << parcelLocalID << ", cap URI = \"" << capURI << "\"" << LL_ENDL;
+
+ // The region name starts out empty and gets filled in later.
+ // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes.
+ // If either is empty, wait for the next time around.
+ if(!regionName.empty())
+ {
+ if((parcelLocalID != mCurrentParcelLocalID) || (regionName != mCurrentRegionName))
+ {
+ // We have changed parcels. Initiate a parcel channel lookup.
+ if (update)
+ {
+ mCurrentParcelLocalID = parcelLocalID;
+ mCurrentRegionName = regionName;
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+bool LLVivoxVoiceClient::parcelVoiceInfoReceived(state requesting_state)
+{
+ // pop back to the state we were in when the parcel changed and we managed to
+ // do the request.
+ if(getState() == stateRetrievingParcelVoiceInfo)
+ {
+ setState(requesting_state);
+ return true;
+ }
+ else
+ {
+ // we've dropped out of stateRetrievingParcelVoiceInfo
+ // before we received the cap result, due to a terminate
+ // or transition to a non-voice channel. Don't switch channels.
+ return false;
+ }
+}
+
+
+bool LLVivoxVoiceClient::requestParcelVoiceInfo()
+{
+ LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
- std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest");
+ // grab the cap for parcel voice info from the region.
+ LLViewerRegion * region = gAgent.getRegion();
+ if (region == NULL)
+ {
+ return false;
+ }
+ // grab the cap.
+ std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest");
+ if (!url.empty())
+ {
+ // 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.
+ checkParcelChanged(true);
LLSD data;
+ LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
+
LLHTTPClient::post(
- url,
- data,
- new LLVivoxVoiceClientCapResponder);
+ url,
+ data,
+ new LLVivoxVoiceClientCapResponder(getState()));
+ return true;
}
- else
+ else
{
- // The transition to stateNoChannel needs to kick this off again.
- LL_INFOS("Voice") << "not logged in yet, deferring" << LL_ENDL;
+
+ // 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;
}
}
@@ -4488,6 +4551,7 @@ void LLVivoxVoiceClient::switchChannel(
case stateJoinSessionFailed:
case stateJoinSessionFailedWaiting:
case stateNoChannel:
+ case stateRetrievingParcelVoiceInfo:
// Always switch to the new URI from these states.
needsSwitch = true;
break;
@@ -4560,13 +4624,10 @@ void LLVivoxVoiceClient::switchChannel(
mNextAudioSession->mIsP2P = is_p2p;
}
- if(getState() <= stateNoChannel)
+ if(getState() >= stateRetrievingParcelVoiceInfo)
{
- // We're already set up to join a channel, just needed to fill in the session URI
- }
- else
- {
- // State machine will come around and rejoin if uri/handle is not empty.
+ // If we're already in a channel, or if we're joining one, terminate
+ // so we can rejoin with the new session data.
sessionTerminate();
}
}
@@ -6267,13 +6328,13 @@ void LLVivoxVoiceClient::avatarNameResolved(const LLUUID &id, const std::string
{
session->mTextInvitePending = false;
- // We don't need to call gIMMgr->addP2PSession() here. The first incoming message will create the panel.
+ // We don't need to call LLIMMgr::getInstance()->addP2PSession() here. The first incoming message will create the panel.
}
if(session->mVoiceInvitePending)
{
session->mVoiceInvitePending = false;
- gIMMgr->inviteToSession(
+ LLIMMgr::getInstance()->inviteToSession(
session->mIMSessionID,
session->mName,
session->mCallerID,
@@ -6988,6 +7049,8 @@ LLVivoxProtocolParser::~LLVivoxProtocolParser()
XML_ParserFree(parser);
}
+static LLFastTimer::DeclareTimer FTM_VIVOX_PROCESS("Vivox Process");
+
// virtual
LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
const LLChannelDescriptors& channels,
@@ -6996,6 +7059,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_VIVOX_PROCESS);
LLBufferStream istr(channels, buffer.get());
std::ostringstream ostr;
while (istr.good())
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index 471545de56..1142a1a49c 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -380,7 +380,8 @@ protected:
stateVoiceFontsWait, // Awaiting the list of voice fonts
stateVoiceFontsReceived, // List of voice fonts received
stateCreatingSessionGroup, // Creating the main session group
- stateNoChannel, //
+ stateNoChannel, // Need to join a channel
+ stateRetrievingParcelVoiceInfo, // waiting for parcel voice info request to return with spatial credentials
stateJoiningSession, // waiting for session handle
stateSessionJoined, // session handle received
stateRunning, // in session, steady state
@@ -620,6 +621,8 @@ protected:
void sessionMediaDisconnectSendMessage(sessionState *session);
void sessionTextDisconnectSendMessage(sessionState *session);
+
+
// Pokes the state machine to leave the audio session next time around.
void sessionTerminate();
@@ -629,6 +632,12 @@ protected:
// Does the actual work to get out of the audio session
void leaveAudioSession();
+ // notifies the voice client that we've received parcel voice info
+ bool parcelVoiceInfoReceived(state requesting_state);
+
+ friend class LLVivoxVoiceClientCapResponder;
+
+
void lookupName(const LLUUID &id);
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
void avatarNameResolved(const LLUUID &id, const std::string &name);
@@ -733,9 +742,11 @@ private:
bool mCaptureDeviceDirty;
bool mRenderDeviceDirty;
+
+ bool checkParcelChanged(bool update = false);
// This should be called when the code detects we have changed parcels.
// It initiates the call to the server that gets the parcel channel.
- void parcelChanged();
+ bool requestParcelVoiceInfo();
void switchChannel(std::string uri = std::string(), bool spatial = true, bool no_reconnect = false, bool is_p2p = false, std::string hash = "");
void joinSession(sessionState *session);
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index 800af26b69..ef21e7373e 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -370,7 +370,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
mAtmHeight = ATM_HEIGHT;
mEarthCenter = LLVector3(mCameraPosAgent.mV[0], mCameraPosAgent.mV[1], -EARTH_RADIUS);
- mSunDefaultPosition = LLVector3(LLWLParamManager::instance()->mCurParams.getVector("lightnorm", error));
+ mSunDefaultPosition = LLVector3(LLWLParamManager::getInstance()->mCurParams.getVector("lightnorm", error));
if (gSavedSettings.getBOOL("SkyOverrideSimSunPosition"))
{
initSunDirection(mSunDefaultPosition, LLVector3(0, 0, 0));
@@ -646,24 +646,24 @@ void LLVOSky::initAtmospherics(void)
bool error;
// uniform parameters for convenience
- dome_radius = LLWLParamManager::instance()->getDomeRadius();
- dome_offset_ratio = LLWLParamManager::instance()->getDomeOffset();
- sunlight_color = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("sunlight_color", error));
- ambient = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("ambient", error));
- //lightnorm = LLWLParamManager::instance()->mCurParams.getVector("lightnorm", error);
- gamma = LLWLParamManager::instance()->mCurParams.getVector("gamma", error)[0];
- blue_density = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("blue_density", error));
- blue_horizon = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("blue_horizon", error));
- haze_density = LLWLParamManager::instance()->mCurParams.getVector("haze_density", error)[0];
- haze_horizon = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("haze_horizon", error));
- density_multiplier = LLWLParamManager::instance()->mCurParams.getVector("density_multiplier", error)[0];
- max_y = LLWLParamManager::instance()->mCurParams.getVector("max_y", error)[0];
- glow = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("glow", error));
- cloud_shadow = LLWLParamManager::instance()->mCurParams.getVector("cloud_shadow", error)[0];
- cloud_color = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("cloud_color", error));
- cloud_scale = LLWLParamManager::instance()->mCurParams.getVector("cloud_scale", error)[0];
- cloud_pos_density1 = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("cloud_pos_density1", error));
- cloud_pos_density2 = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("cloud_pos_density2", error));
+ dome_radius = LLWLParamManager::getInstance()->getDomeRadius();
+ dome_offset_ratio = LLWLParamManager::getInstance()->getDomeOffset();
+ sunlight_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("sunlight_color", error));
+ ambient = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("ambient", error));
+ //lightnorm = LLWLParamManager::getInstance()->mCurParams.getVector("lightnorm", error);
+ gamma = LLWLParamManager::getInstance()->mCurParams.getVector("gamma", error)[0];
+ blue_density = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_density", error));
+ blue_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_horizon", error));
+ haze_density = LLWLParamManager::getInstance()->mCurParams.getVector("haze_density", error)[0];
+ haze_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("haze_horizon", error));
+ density_multiplier = LLWLParamManager::getInstance()->mCurParams.getVector("density_multiplier", error)[0];
+ max_y = LLWLParamManager::getInstance()->mCurParams.getVector("max_y", error)[0];
+ glow = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("glow", error));
+ cloud_shadow = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_shadow", error)[0];
+ cloud_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_color", error));
+ cloud_scale = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_scale", error)[0];
+ cloud_pos_density1 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density1", error));
+ cloud_pos_density2 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density2", error));
// light norm is different. We need the sun's direction, not the light direction
// which could be from the moon. And we need to clamp it
@@ -755,6 +755,11 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo
// project the direction ray onto the sky dome.
F32 phi = acos(Pn[1]);
F32 sinA = sin(F_PI - phi);
+ if (fabsf(sinA) < 0.01f)
+ { //avoid division by zero
+ sinA = 0.01f;
+ }
+
F32 Plen = dome_radius * sin(F_PI + phi + asin(dome_offset_ratio * sinA)) / sinA;
Pn *= Plen;
@@ -1033,7 +1038,7 @@ void LLVOSky::calcAtmospherics(void)
// Since WL scales everything by 2, there should always be at least a 2:1 brightness ratio
// between sunlight and point lights in windlight to normalize point lights.
F32 sun_dynamic_range = llmax(gSavedSettings.getF32("RenderSunDynamicRange"), 0.0001f);
- LLWLParamManager::instance()->mSceneLightStrength = 2.0f * (1.0f + sun_dynamic_range * dp);
+ LLWLParamManager::getInstance()->mSceneLightStrength = 2.0f * (1.0f + sun_dynamic_range * dp);
mSunDiffuse = vary_SunlightColor;
mSunAmbient = vary_AmbientColor;
@@ -2129,7 +2134,7 @@ void LLVOSky::updateFog(const F32 distance)
F32 depth = water_height - camera_height;
// get the water param manager variables
- float water_fog_density = LLWaterParamManager::instance()->getFogDensity();
+ float water_fog_density = LLWaterParamManager::getInstance()->getFogDensity();
LLColor4 water_fog_color = LLDrawPoolWater::sWaterFogColor.mV;
// adjust the color based on depth. We're doing linear approximations
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 3c7fe708e6..890861df71 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -51,6 +51,7 @@
#include "llspatialpartition.h"
#include "llnotificationsutil.h"
#include "raytrace.h"
+#include "llglslshader.h"
extern LLPipeline gPipeline;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index c5e2c56e4b..528c7acbc8 100644..100755
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -704,19 +704,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<bool> dont_load_textures(gSavedSettings,"TextureDisable");
@@ -1017,6 +1020,9 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params_in, const S32 detail, bo
if (is404)
{
setIcon(LLViewerTextureManager::getFetchedTextureFromFile("icons/Inv_Mesh.png", TRUE, LLViewerTexture::BOOST_UI));
+ //render prim proxy when mesh loading attempts give up
+ volume_params.setSculptID(LLUUID::null, LL_SCULPT_TYPE_NONE);
+
}
if ((LLPrimitive::setVolume(volume_params, lod, (mVolumeImpl && mVolumeImpl->isVolumeUnique()))) || mSculptChanged)
@@ -3096,7 +3102,7 @@ U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const
F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes)
{
- F32 radius = getScale().length();
+ F32 radius = getScale().length()*0.5f;
if (isMesh())
{
@@ -3743,6 +3749,11 @@ bool can_batch_texture(LLFace* facep)
return false;
}
+ if (facep->getTexture() && facep->getTexture()->getPrimaryFormat() == GL_ALPHA)
+ { //can't batch invisiprims
+ return false;
+ }
+
if (facep->isState(LLFace::TEXTURE_ANIM) && facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
{ //texture animation breaks batches
return false;
@@ -3990,7 +4001,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
}
llassert_always(vobj);
- vobj->updateTextureVirtualSize();
+ vobj->updateTextureVirtualSize(true);
vobj->preRebuild();
drawablep->clearState(LLDrawable::HAS_ALPHA);
@@ -4361,6 +4372,8 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
group->mBuilt = 1.f;
+ std::set<LLVertexBuffer*> mapped_buffers;
+
for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
{
LLFastTimer t(FTM_VOLUME_GEOM_PARTIAL);
@@ -4375,35 +4388,31 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
{
LLFace* face = drawablep->getFace(i);
- if (face && face->getVertexBuffer())
+ if (face)
{
- face->getGeometryVolume(*volume, face->getTEOffset(),
- vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex());
+ LLVertexBuffer* buff = face->getVertexBuffer();
+ if (buff)
+ {
+ face->getGeometryVolume(*volume, face->getTEOffset(),
+ vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex());
+
+ if (buff->isLocked())
+ {
+ mapped_buffers.insert(buff);
+ }
+ }
}
}
-
+
drawablep->clearState(LLDrawable::REBUILD_ALL);
}
}
- //unmap all the buffers
- for (LLSpatialGroup::buffer_map_t::iterator i = group->mBufferMap.begin(); i != group->mBufferMap.end(); ++i)
+ for (std::set<LLVertexBuffer*>::iterator iter = mapped_buffers.begin(); iter != mapped_buffers.end(); ++iter)
{
- LLSpatialGroup::buffer_texture_map_t& map = i->second;
- for (LLSpatialGroup::buffer_texture_map_t::iterator j = map.begin(); j != map.end(); ++j)
- {
- LLSpatialGroup::buffer_list_t& list = j->second;
- for (LLSpatialGroup::buffer_list_t::iterator k = list.begin(); k != list.end(); ++k)
- {
- LLVertexBuffer* buffer = *k;
- if (buffer->isLocked())
- {
- buffer->setBuffer(0);
- }
- }
- }
+ (*iter)->setBuffer(0);
}
-
+
// don't forget alpha
if(group != NULL &&
!group->mVertexBuffer.isNull() &&
@@ -4481,6 +4490,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
std::sort(faces.begin(), faces.end(), LLFace::CompareDistanceGreater());
}
+ bool hud_group = group->isHUDGroup() ;
std::vector<LLFace*>::iterator face_iter = faces.begin();
LLSpatialGroup::buffer_map_t buffer_map;
@@ -4495,6 +4505,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
S32 texture_index_channels = gGLManager.mNumTextureImageUnits-1; //always reserve one for shiny for now just for simplicity
+ if (gGLManager.mGLVersion < 3.1f)
+ {
+ texture_index_channels = 1;
+ }
+
if (LLPipeline::sRenderDeferred && distance_sort)
{
texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels;
@@ -4708,6 +4723,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
}
const LLTextureEntry* te = facep->getTextureEntry();
+ tex = facep->getTexture();
BOOL is_alpha = (facep->getPoolType() == LLDrawPool::POOL_ALPHA) ? TRUE : FALSE;
@@ -4745,7 +4761,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
@@ -4783,7 +4799,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);
}
@@ -4809,7 +4825,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 fc00f0c0d0..13565cb27c 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -206,7 +206,7 @@ public:
/*virtual*/ BOOL updateLOD();
void updateRadius();
/*virtual*/ void updateTextures();
- void updateTextureVirtualSize();
+ void updateTextureVirtualSize(bool forced = false);
void updateFaceFlags();
void regenFaces();
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 69ebad61ac..e70ac0a2e7 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -282,6 +282,11 @@ void LLVOWater::updateSpatialExtents(LLVector4a &newMin, LLVector4a& newMax)
U32 LLVOWater::getPartitionType() const
{
+ if (mIsEdgePatch)
+ {
+ return LLViewerRegion::PARTITION_VOIDWATER;
+ }
+
return LLViewerRegion::PARTITION_WATER;
}
@@ -300,6 +305,7 @@ LLWaterPartition::LLWaterPartition()
LLVoidWaterPartition::LLVoidWaterPartition()
{
+ mOcclusionEnabled = FALSE;
mDrawableType = LLPipeline::RENDER_TYPE_VOIDWATER;
mPartitionType = LLViewerRegion::PARTITION_VOIDWATER;
}
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 51664cb31d..7b1c725483 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -568,7 +568,7 @@ void LLVOWLSky::buildFanBuffer(LLStrider<LLVector3> & vertices,
LLStrider<LLVector2> & texCoords,
LLStrider<U16> & indices)
{
- const F32 RADIUS = LLWLParamManager::instance()->getDomeRadius();
+ const F32 RADIUS = LLWLParamManager::getInstance()->getDomeRadius();
U32 i, num_slices;
F32 phi0, theta, x0, y0, z0;
@@ -629,7 +629,7 @@ void LLVOWLSky::buildStripsBuffer(U32 begin_stack, U32 end_stack,
LLStrider<LLVector2> & texCoords,
LLStrider<U16> & indices)
{
- const F32 RADIUS = LLWLParamManager::instance()->getDomeRadius();
+ const F32 RADIUS = LLWLParamManager::getInstance()->getDomeRadius();
U32 i, j, num_slices, num_stacks;
F32 phi0, theta, x0, y0, z0;
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
index 1694126802..64ca94b567 100644
--- a/indra/newview/llwatchdog.cpp
+++ b/indra/newview/llwatchdog.cpp
@@ -126,8 +126,8 @@ void LLWatchdogTimeout::start(const std::string& state)
// Order of operation is very impmortant here.
// After LLWatchdogEntry::start() is called
// LLWatchdogTimeout::isAlive() will be called asynchronously.
- mTimer.start();
ping(state);
+ mTimer.start();
LLWatchdogEntry::start();
}
@@ -178,8 +178,8 @@ void LLWatchdog::init(killer_event_callback func)
mKillerCallback = func;
if(!mSuspectsAccessMutex && !mTimer)
{
- mSuspectsAccessMutex = new LLMutex(NULL);
- mTimer = new LLWatchdogTimerThread();
+ mSuspectsAccessMutex = new LLMutex;
+ mTimer = new LLWatchdogTimerThread;
mTimer->setSleepTime(WATCHDOG_SLEEP_TIME_USEC / 1000);
mLastClockCount = LLTimer::getTotalTime();
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 67bb965f99..1a98d4c6c2 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -54,12 +54,9 @@
#include "llwlparammanager.h"
#include "llwaterparamset.h"
-#include "llfloaterwater.h"
#include "curl/curl.h"
-LLWaterParamManager * LLWaterParamManager::sInstance = NULL;
-
LLWaterParamManager::LLWaterParamManager() :
mFogColor(22.f/255.f, 43.f/255.f, 54.f/255.f, 0.0f, 0.0f, "waterFogColor", "WaterFogColor"),
mFogDensity(4, "waterFogDensity", 2),
@@ -73,8 +70,6 @@ LLWaterParamManager::LLWaterParamManager() :
mWave1Dir(.5f, .5f, "wave1Dir"),
mWave2Dir(.5f, .5f, "wave2Dir"),
mDensitySliderValue(1.0f),
- mPrevFogDensity(16.0f), // 2^4
- mPrevFogColor(22.f/255.f, 43.f/255.f, 54.f/255.f, 0.0f),
mWaterFogKS(1.0f)
{
}
@@ -83,131 +78,73 @@ LLWaterParamManager::~LLWaterParamManager()
{
}
-void LLWaterParamManager::loadAllPresets(const std::string& file_name)
+void LLWaterParamManager::loadAllPresets()
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading Default water settings from " << path_name << LL_ENDL;
-
- bool found = true;
- LLDirIterator app_settings_iter(path_name, "*.xml");
- while(found)
- {
- std::string name;
- found = app_settings_iter.next(name);
- if(found)
- {
-
- name=name.erase(name.length()-4);
+ // First, load system (coming out of the box) water presets.
+ loadPresetsFromDir(getSysDir());
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
- }
- }
+ // Then load user presets. Note that user day presets will modify any system ones already loaded.
+ loadPresetsFromDir(getUserDir());
+}
- // And repeat for user presets, note the user presets will modify any system presets already loaded
+void LLWaterParamManager::loadPresetsFromDir(const std::string& dir)
+{
+ LL_INFOS2("AppInit", "Shaders") << "Loading water presets from " << dir << LL_ENDL;
- std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User water settings from " << path_name2 << LL_ENDL;
-
- found = true;
- LLDirIterator user_settings_iter(path_name2, "*.xml");
- while(found)
+ LLDirIterator dir_iter(dir, "*.xml");
+ while (1)
{
- std::string name;
- found = user_settings_iter.next(name);
- if(found)
+ std::string file;
+ if (!dir_iter.next(file))
{
- name=name.erase(name.length()-4);
-
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ break; // no more files
+ }
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
+ std::string path = dir + file;
+ if (!loadPreset(path))
+ {
+ llwarns << "Error loading water preset from " << path << llendl;
}
}
-
}
-void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
+bool LLWaterParamManager::loadPreset(const std::string& path)
{
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- escaped_filename += ".xml";
+ llifstream xml_file;
+ std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading water settings from " << pathName << LL_ENDL;
-
- llifstream presetsXML;
- presetsXML.open(pathName.c_str());
-
- // That failed, try loading from the users area instead.
- if(!presetsXML)
+ xml_file.open(path.c_str());
+ if (!xml_file)
{
- pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename);
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User water setting from " << pathName << LL_ENDL;
- presetsXML.clear();
- presetsXML.open(pathName.c_str());
+ return false;
}
- if (presetsXML)
- {
- LLSD paramsData(LLSD::emptyMap());
+ LL_DEBUGS2("AppInit", "Shaders") << "Loading water " << name << LL_ENDL;
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ LLSD params_data;
+ LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ parser->parse(xml_file, params_data, LLSDSerialize::SIZE_UNLIMITED);
+ xml_file.close();
- parser->parse(presetsXML, paramsData, LLSDSerialize::SIZE_UNLIMITED);
-
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
- if(mIt == mParamList.end())
- {
- addParamSet(name, paramsData);
- }
- else
- {
- setParamSet(name, paramsData);
- }
- presetsXML.close();
- }
- else
+ if (hasParamSet(name))
{
- llwarns << "Can't find " << name << llendl;
- return;
+ setParamSet(name, params_data);
}
-
- if(propagate)
+ else
{
- getParamSet(name, mCurParams);
- propagateParameters();
+ addParamSet(name, params_data);
}
-}
+
+ return true;
+}
void LLWaterParamManager::savePreset(const std::string & name)
{
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- escaped_filename += ".xml";
+ llassert(!name.empty());
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename));
+ std::string pathName(getUserDir() + LLURI::escape(name) + ".xml");
// fill it with LLSD windlight params
paramsData = mParamList[name].getAll();
@@ -221,7 +158,6 @@ void LLWaterParamManager::savePreset(const std::string & name)
propagateParameters();
}
-
void LLWaterParamManager::propagateParameters(void)
{
// bind the variables only if we're using shaders
@@ -251,7 +187,7 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
{
if (shader->mShaderGroup == LLGLSLShader::SG_WATER)
{
- shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, LLWLParamManager::instance()->getRotatedLightDir().mV);
+ shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, LLWLParamManager::getInstance()->getRotatedLightDir().mV);
shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
shader->uniform4fv("waterFogColor", 1, LLDrawPoolWater::sWaterFogColor.mV);
shader->uniform4fv("waterPlane", 1, mWaterPlane.mV);
@@ -261,36 +197,33 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
}
}
-static LLFastTimer::DeclareTimer FTM_UPDATE_WLPARAM("Update Windlight Params");
-
-void LLWaterParamManager::update(LLViewerCamera * cam)
+void LLWaterParamManager::applyParams(const LLSD& params, bool interpolate)
{
- LLFastTimer ftm(FTM_UPDATE_WLPARAM);
-
- // update the shaders and the menu
- propagateParameters();
-
- // If water fog color has been changed, save it.
- if (mPrevFogColor != mFogColor)
+ if (params.size() == 0)
{
- gSavedSettings.setColor4("WaterFogColor", mFogColor);
- mPrevFogColor = mFogColor;
+ llwarns << "Undefined water params" << llendl;
+ return;
}
- // If water fog density has been changed, save it.
- if (mPrevFogDensity != mFogDensity)
+ if (interpolate)
{
- gSavedSettings.setF32("WaterFogDensity", mFogDensity);
- mPrevFogDensity = mFogDensity;
+ LLWLParamManager::getInstance()->mAnimator.startInterpolation(params);
}
-
- // sync menus if they exist
- LLFloaterWater* waterfloater = LLFloaterReg::findTypedInstance<LLFloaterWater>("env_water");
- if(waterfloater)
+ else
{
- waterfloater->syncMenu();
+ mCurParams.setAll(params);
}
+}
+static LLFastTimer::DeclareTimer FTM_UPDATE_WATERPARAM("Update Water Params");
+
+void LLWaterParamManager::update(LLViewerCamera * cam)
+{
+ LLFastTimer ftm(FTM_UPDATE_WATERPARAM);
+
+ // update the shaders and the menu
+ propagateParameters();
+
// only do this if we're dealing with shaders
if(gPipeline.canUseVertexShaders())
{
@@ -339,26 +272,14 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
}
}
-// static
-void LLWaterParamManager::initClass(void)
-{
- instance();
-}
-
-// static
-void LLWaterParamManager::cleanupClass(void)
-{
- delete sInstance;
- sInstance = NULL;
-}
-
bool LLWaterParamManager::addParamSet(const std::string& name, LLWaterParamSet& param)
{
// add a new one if not one there already
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
+ preset_map_t::iterator mIt = mParamList.find(name);
if(mIt == mParamList.end())
{
mParamList[name] = param;
+ mPresetListChangeSignal();
return true;
}
@@ -367,23 +288,15 @@ bool LLWaterParamManager::addParamSet(const std::string& name, LLWaterParamSet&
BOOL LLWaterParamManager::addParamSet(const std::string& name, LLSD const & param)
{
- // add a new one if not one there already
- std::map<std::string, LLWaterParamSet>::const_iterator finder = mParamList.find(name);
- if(finder == mParamList.end())
- {
- mParamList[name].setAll(param);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+ LLWaterParamSet param_set;
+ param_set.setAll(param);
+ return addParamSet(name, param_set);
}
bool LLWaterParamManager::getParamSet(const std::string& name, LLWaterParamSet& param)
{
// find it and set it
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
+ preset_map_t::iterator mIt = mParamList.find(name);
if(mIt != mParamList.end())
{
param = mParamList[name];
@@ -394,6 +307,12 @@ bool LLWaterParamManager::getParamSet(const std::string& name, LLWaterParamSet&
return false;
}
+bool LLWaterParamManager::hasParamSet(const std::string& name)
+{
+ LLWaterParamSet dummy;
+ return getParamSet(name, dummy);
+}
+
bool LLWaterParamManager::setParamSet(const std::string& name, LLWaterParamSet& param)
{
mParamList[name] = param;
@@ -417,29 +336,74 @@ bool LLWaterParamManager::setParamSet(const std::string& name, const LLSD & para
bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_from_disk)
{
// remove from param list
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
- if(mIt != mParamList.end())
+ preset_map_t::iterator it = mParamList.find(name);
+ if (it == mParamList.end())
{
- mParamList.erase(mIt);
+ LL_WARNS("WindLight") << "No water preset named " << name << LL_ENDL;
+ return false;
}
- if(delete_from_disk)
- {
+ mParamList.erase(it);
- std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
-
- // use full curl escaped name
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
+ // remove from file system if requested
+ if (delete_from_disk)
+ {
+ if (gDirUtilp->deleteFilesInDir(getUserDir(), LLURI::escape(name) + ".xml") < 1)
+ {
+ LL_WARNS("WindLight") << "Error removing water preset " << name << " from disk" << LL_ENDL;
+ }
}
+ // signal interested parties
+ mPresetListChangeSignal();
return true;
}
+bool LLWaterParamManager::isSystemPreset(const std::string& preset_name) const
+{
+ // *TODO: file system access is excessive here.
+ return gDirUtilp->fileExists(getSysDir() + LLURI::escape(preset_name) + ".xml");
+}
+
+void LLWaterParamManager::getPresetNames(preset_name_list_t& presets) const
+{
+ presets.clear();
+
+ for (preset_map_t::const_iterator it = mParamList.begin(); it != mParamList.end(); ++it)
+ {
+ presets.push_back(it->first);
+ }
+}
+
+void LLWaterParamManager::getPresetNames(preset_name_list_t& user_presets, preset_name_list_t& system_presets) const
+{
+ user_presets.clear();
+ system_presets.clear();
+
+ for (preset_map_t::const_iterator it = mParamList.begin(); it != mParamList.end(); ++it)
+ {
+ if (isSystemPreset(it->first))
+ {
+ system_presets.push_back(it->first);
+ }
+ else
+ {
+ user_presets.push_back(it->first);
+ }
+ }
+}
+
+void LLWaterParamManager::getUserPresetNames(preset_name_list_t& user_presets) const
+{
+ preset_name_list_t dummy;
+ getPresetNames(user_presets, dummy);
+}
+
+boost::signals2::connection LLWaterParamManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
+{
+ return mPresetListChangeSignal.connect(cb);
+}
+
F32 LLWaterParamManager::getFogDensity(void)
{
bool err;
@@ -458,34 +422,22 @@ F32 LLWaterParamManager::getFogDensity(void)
return fogDensity;
}
-// static
-LLWaterParamManager * LLWaterParamManager::instance()
+// virtual static
+void LLWaterParamManager::initSingleton()
{
- if(NULL == sInstance)
- {
- sInstance = new LLWaterParamManager();
-
- sInstance->loadAllPresets(LLStringUtil::null);
-
- sInstance->getParamSet("Default", sInstance->mCurParams);
- sInstance->initOverrides();
- }
+ LL_DEBUGS("Windlight") << "Initializing water" << LL_ENDL;
+ loadAllPresets();
+ LLEnvManagerNew::instance().usePrefs();
+}
- return sInstance;
+// static
+std::string LLWaterParamManager::getSysDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", "");
}
-void LLWaterParamManager::initOverrides()
+// static
+std::string LLWaterParamManager::getUserDir()
{
- // Override fog color from the current preset with the saved setting.
- LLColor4 fog_color_override = gSavedSettings.getColor4("WaterFogColor");
- mFogColor = fog_color_override;
- mPrevFogColor = fog_color_override;
- mCurParams.set("waterFogColor", fog_color_override);
-
- // Do the same with fog density.
- F32 fog_density = gSavedSettings.getF32("WaterFogDensity");
- mPrevFogDensity = fog_density;
- mFogDensity = fog_density;
- mCurParams.set("waterFogDensity", fog_density);
- setDensitySliderValue(mFogDensity.mExp);
+ return gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "windlight/water", "");
}
diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h
index f465034c39..dc7d41be2a 100644
--- a/indra/newview/llwaterparammanager.h
+++ b/indra/newview/llwaterparammanager.h
@@ -27,7 +27,7 @@
#ifndef LL_WATER_PARAMMANAGER_H
#define LL_WATER_PARAMMANAGER_H
-#include <vector>
+#include <list>
#include <map>
#include "llwaterparamset.h"
#include "llviewercamera.h"
@@ -212,19 +212,13 @@ struct WaterExpFloatControl
/// WindLight parameter manager class - what controls all the wind light shaders
-class LLWaterParamManager
+class LLWaterParamManager : public LLSingleton<LLWaterParamManager>
{
+ LOG_CLASS(LLWaterParamManager);
public:
-
- LLWaterParamManager();
- ~LLWaterParamManager();
-
- /// load a preset file
- void loadAllPresets(const std::string & fileName);
-
- /// load an individual preset into the sky
-
- void loadPreset(const std::string & name,bool propagate=true);
+ typedef std::list<std::string> preset_name_list_t;
+ typedef std::map<std::string, LLWaterParamSet> preset_map_t;
+ typedef boost::signals2::signal<void()> preset_list_signal_t;
/// save the parameter presets to file
void savePreset(const std::string & name);
@@ -232,18 +226,15 @@ public:
/// send the parameters to the shaders
void propagateParameters(void);
+ // display specified water
+ void applyParams(const LLSD& params, bool interpolate);
+
/// update information for the shader
void update(LLViewerCamera * cam);
/// Update shader uniforms that have changed.
void updateShaderUniforms(LLGLSLShader * shader);
- /// Perform global initialization for this class.
- static void initClass(void);
-
- // Cleanup of global data that's only inited once per class.
- static void cleanupClass();
-
/// add a param to the list
bool addParamSet(const std::string& name, LLWaterParamSet& param);
@@ -253,6 +244,9 @@ public:
/// get a param from the list
bool getParamSet(const std::string& name, LLWaterParamSet& param);
+ /// check whether the preset is in the list
+ bool hasParamSet(const std::string& name);
+
/// set the param in the list with a new param
bool setParamSet(const std::string& name, LLWaterParamSet& param);
@@ -263,6 +257,24 @@ public:
/// returns true if successful
bool removeParamSet(const std::string& name, bool delete_from_disk);
+ /// @return true if the preset comes out of the box
+ bool isSystemPreset(const std::string& preset_name) const;
+
+ /// @return all named water presets.
+ const preset_map_t& getPresets() const { return mParamList; }
+
+ /// @return user and system preset names as a single list
+ void getPresetNames(preset_name_list_t& presets) const;
+
+ /// @return user and system preset names separately
+ void getPresetNames(preset_name_list_t& user_presets, preset_name_list_t& system_presets) const;
+
+ /// @return list of user presets names
+ void getUserPresetNames(preset_name_list_t& user_presets) const;
+
+ /// Emitted when a preset gets added or deleted.
+ boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
+
/// set the normap map we want for water
bool setNormalMapID(const LLUUID& img);
@@ -281,12 +293,6 @@ public:
F32 getFogDensity(void);
LLColor4 getFogColor(void);
- // singleton pattern implementation
- static LLWaterParamManager * instance();
-
-private:
- void initOverrides();
-
public:
LLWaterParamSet mCurParams;
@@ -308,20 +314,28 @@ public:
WaterFloatControl mScaleBelow;
WaterFloatControl mBlurMultiplier;
- // list of all the parameters, listed by name
- std::map<std::string, LLWaterParamSet> mParamList;
-
F32 mDensitySliderValue;
private:
+ friend class LLSingleton<LLWaterParamManager>;
+ /*virtual*/ void initSingleton();
+ LLWaterParamManager();
+ ~LLWaterParamManager();
+
+ void loadAllPresets();
+ void loadPresetsFromDir(const std::string& dir);
+ bool loadPreset(const std::string& path);
+
+ static std::string getSysDir();
+ static std::string getUserDir();
+
LLVector4 mWaterPlane;
F32 mWaterFogKS;
- LLColor4 mPrevFogColor;
- F32 mPrevFogDensity;
+ // list of all the parameters, listed by name
+ preset_map_t mParamList;
- // our parameter manager singleton instance
- static LLWaterParamManager * sInstance;
+ preset_list_signal_t mPresetListChangeSignal;
};
inline void LLWaterParamManager::setDensitySliderValue(F32 val)
diff --git a/indra/newview/llwaterparamset.cpp b/indra/newview/llwaterparamset.cpp
index 9457d631be..39d366b023 100644
--- a/indra/newview/llwaterparamset.cpp
+++ b/indra/newview/llwaterparamset.cpp
@@ -29,7 +29,6 @@
#include "llwaterparamset.h"
#include "llsd.h"
-#include "llfloaterwater.h"
#include "llwaterparammanager.h"
#include "lluictrlfactory.h"
#include "llsliderctrl.h"
@@ -224,3 +223,46 @@ F32 LLWaterParamSet::getFloat(const std::string& paramName, bool& error)
return 0;
}
+// Added for interpolation effect in DEV-33645
+// Based on LLWLParamSet::mix, but written by Jacob without an intimate knowledge of how WindLight works.
+// The function definition existed in the header but was never implemented. If you think there is something
+// wrong with this, you're probably right. Ask Jacob, Q, or a member of the original WindLight team.
+void LLWaterParamSet::mix(LLWaterParamSet& src, LLWaterParamSet& dest, F32 weight)
+{
+ // Setup
+ LLSD srcVal, destVal; // LLSD holders for get/set calls, reusable
+
+ // Iterate through values
+ for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
+ {
+ // If param exists in both src and dest, set the holder variables, otherwise skip
+ if(src.mParamValues.has(iter->first) && dest.mParamValues.has(iter->first))
+ {
+ srcVal = src.mParamValues[iter->first];
+ destVal = dest.mParamValues[iter->first];
+ }
+ else
+ {
+ continue;
+ }
+
+ if(iter->second.isReal()) // If it's a real, interpolate directly
+ {
+ iter->second = srcVal.asReal() + ((destVal.asReal() - srcVal.asReal()) * weight);
+ }
+ else if(iter->second.isArray() && iter->second[0].isReal() // If it's an array of reals, loop through the reals and interpolate on those
+ && iter->second.size() == srcVal.size() && iter->second.size() == destVal.size())
+ {
+ // Actually do interpolation: old value + (difference in values * factor)
+ for(int i=0; i < iter->second.size(); ++i)
+ {
+ // iter->second[i] = (1.f-weight)*(F32)srcVal[i].asReal() + weight*(F32)destVal[i].asReal(); // old way of doing it -- equivalent but one more operation
+ iter->second[i] = srcVal[i].asReal() + ((destVal[i].asReal() - srcVal[i].asReal()) * weight);
+ }
+ }
+ else // Else, skip
+ {
+ continue;
+ }
+ }
+}
diff --git a/indra/newview/llwaterparamset.h b/indra/newview/llwaterparamset.h
index 9957d5371b..b28585af59 100644
--- a/indra/newview/llwaterparamset.h
+++ b/indra/newview/llwaterparamset.h
@@ -34,7 +34,6 @@
#include "v4color.h"
#include "llviewershadermgr.h"
-class LLFloaterWater;
class LLWaterParamSet;
/// A class representing a set of parameter values for the Water shaders.
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index b73017a51a..6f7115ff6d 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -81,19 +81,20 @@ void LLWeb::initClass()
// static
void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
{
- if(target == "_internal")
- {
- // Force load in the internal browser, as if with a blank target.
- loadURLInternal(url, "", uuid);
- }
- else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
- {
- loadURLExternal(url);
- }
- else
- {
- loadURLInternal(url, target, uuid);
- }
+ loadWebURL(url, target, uuid);
+ //if(target == "_internal")
+ //{
+ // // Force load in the internal browser, as if with a blank target.
+ // loadURLInternal(url, "", uuid);
+ //}
+ //else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
+ //{
+ // loadURLExternal(url);
+ //}
+ //else
+ //{
+ // loadURLInternal(url, target, uuid);
+ //}
}
// static
@@ -124,17 +125,15 @@ void LLWeb::loadURLInternal(const std::string &url, const std::string& target, c
// Explicitly open a Web URL using the Web content floater
void LLWeb::loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
{
- LLFloaterWebContent::create(url, target, uuid);
+ LLFloaterWebContent::create(LLFloaterWebContent::Params().url(url).target(target).id(uuid));
}
-
// static
void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
{
loadURLExternal(url, true, uuid);
}
-
// static
void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)
{
diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp
index a94a2e41aa..e568638cf6 100644
--- a/indra/newview/llwlanimator.cpp
+++ b/indra/newview/llwlanimator.cpp
@@ -30,20 +30,31 @@
#include "llsky.h"
#include "pipeline.h"
#include "llwlparammanager.h"
+#include "llwaterparammanager.h"
-LLWLAnimator::LLWLAnimator() : mStartTime(0), mDayRate(1), mDayTime(0),
- mIsRunning(FALSE), mUseLindenTime(false)
+extern LLControlGroup gSavedSettings;
+
+F64 LLWLAnimator::INTERP_TOTAL_SECONDS = 3.f;
+
+LLWLAnimator::LLWLAnimator() : mStartTime(0.f), mDayRate(1.f), mDayTime(0.f),
+ mIsRunning(FALSE), mIsInterpolating(FALSE), mTimeType(TIME_LINDEN),
+ mInterpStartTime(), mInterpEndTime()
{
- mDayTime = 0;
+ mInterpBeginWL = new LLWLParamSet();
+ mInterpBeginWater = new LLWaterParamSet();
+ mInterpEndWater = new LLWaterParamSet();
}
void LLWLAnimator::update(LLWLParamSet& curParams)
{
+ //llassert(mUseLindenTime != mUseLocalTime);
+
F64 curTime;
curTime = getDayTime();
// don't do anything if empty
- if(mTimeTrack.size() == 0) {
+ if(mTimeTrack.size() == 0)
+ {
return;
}
@@ -53,13 +64,15 @@ void LLWLAnimator::update(LLWLParamSet& curParams)
mSecondIt++;
// grab the two tween iterators
- while(mSecondIt != mTimeTrack.end() && curTime > mSecondIt->first) {
+ while(mSecondIt != mTimeTrack.end() && curTime > mSecondIt->first)
+ {
mFirstIt++;
mSecondIt++;
}
// scroll it around when you get to the end
- if(mSecondIt == mTimeTrack.end() || mFirstIt->first > curTime) {
+ if(mSecondIt == mTimeTrack.end() || mFirstIt->first > curTime)
+ {
mSecondIt = mTimeTrack.begin();
mFirstIt = mTimeTrack.end();
mFirstIt--;
@@ -67,70 +80,111 @@ void LLWLAnimator::update(LLWLParamSet& curParams)
F32 weight = 0;
- if(mFirstIt->first < mSecondIt->first) {
+ if(mFirstIt->first < mSecondIt->first)
+ {
// get the delta time and the proper weight
weight = F32 (curTime - mFirstIt->first) /
(mSecondIt->first - mFirstIt->first);
// handle the ends
- } else if(mFirstIt->first > mSecondIt->first) {
+ }
+ else if(mFirstIt->first > mSecondIt->first)
+ {
// right edge of time line
- if(curTime >= mFirstIt->first) {
+ if(curTime >= mFirstIt->first)
+ {
weight = F32 (curTime - mFirstIt->first) /
((1 + mSecondIt->first) - mFirstIt->first);
-
// left edge of time line
- } else {
+ }
+ else
+ {
weight = F32 ((1 + curTime) - mFirstIt->first) /
((1 + mSecondIt->first) - mFirstIt->first);
}
-
// handle same as whatever the last one is
- } else {
+ }
+ else
+ {
weight = 1;
}
+ if(mIsInterpolating)
+ {
+ // *TODO_JACOB: this is kind of laggy. Not sure why. The part that lags is the curParams.mix call, and none of the other mixes. It works, though.
+ clock_t current = clock();
+ if(current >= mInterpEndTime)
+ {
+ mIsInterpolating = false;
+ return;
+ }
+
+ // determine moving target for final interpolation value
+ // *TODO: this will not work with lazy loading of sky presets.
+ LLWLParamSet buf = LLWLParamSet();
+ buf.setAll(LLWLParamManager::getInstance()->mParamList[mFirstIt->second].getAll()); // just give it some values, otherwise it has no params to begin with (see comment in constructor)
+ buf.mix(LLWLParamManager::getInstance()->mParamList[mFirstIt->second], LLWLParamManager::getInstance()->mParamList[mSecondIt->second], weight); // mix to determine moving target for interpolation finish (as below)
+
+ // mix from previous value to moving target
+ weight = (current - mInterpStartTime) / (INTERP_TOTAL_SECONDS * CLOCKS_PER_SEC);
+ curParams.mix(*mInterpBeginWL, buf, weight);
+
+ // mix water
+ LLWaterParamManager::getInstance()->mCurParams.mix(*mInterpBeginWater, *mInterpEndWater, weight);
+ }
+ else
+ {
// do the interpolation and set the parameters
- curParams.mix(LLWLParamManager::instance()->mParamList[mFirstIt->second],
- LLWLParamManager::instance()->mParamList[mSecondIt->second], weight);
+ // *TODO: this will not work with lazy loading of sky presets.
+ curParams.mix(LLWLParamManager::getInstance()->mParamList[mFirstIt->second], LLWLParamManager::getInstance()->mParamList[mSecondIt->second], weight);
+ }
}
F64 LLWLAnimator::getDayTime()
{
- if(!mIsRunning) {
+ if(!mIsRunning)
+ {
return mDayTime;
}
-
- if(mUseLindenTime) {
-
+ else if(mTimeType == TIME_LINDEN)
+ {
F32 phase = gSky.getSunPhase() / F_PI;
// we're not solving the non-linear equation that determines sun phase
// we're just linearly interpolating between the major points
if (phase <= 5.0 / 4.0) {
mDayTime = (1.0 / 3.0) * phase + (1.0 / 3.0);
- } else {
+ }
+ else
+ {
mDayTime = phase - (1.0 / 2.0);
}
- if(mDayTime > 1) {
+ if(mDayTime > 1)
+ {
mDayTime--;
}
return mDayTime;
}
+ else if(mTimeType == TIME_LOCAL)
+ {
+ return getLocalTime();
+ }
// get the time;
mDayTime = (LLTimer::getElapsedSeconds() - mStartTime) / mDayRate;
// clamp it
- if(mDayTime < 0) {
+ if(mDayTime < 0)
+ {
mDayTime = 0;
}
- while(mDayTime > 1) {
+ while(mDayTime > 1)
+ {
mDayTime--;
}
@@ -144,15 +198,18 @@ void LLWLAnimator::setDayTime(F64 dayTime)
mDayTime = dayTime;
// clamp it
- if(mDayTime < 0) {
+ if(mDayTime < 0)
+ {
mDayTime = 0;
- } else if(mDayTime > 1) {
+ }
+ else if(mDayTime > 1)
+ {
mDayTime = 1;
}
}
-void LLWLAnimator::setTrack(std::map<F32, std::string>& curTrack,
+void LLWLAnimator::setTrack(std::map<F32, LLWLParamKey>& curTrack,
F32 dayRate, F64 dayTime, bool run)
{
mTimeTrack = curTrack;
@@ -161,3 +218,96 @@ void LLWLAnimator::setTrack(std::map<F32, std::string>& curTrack,
mIsRunning = run;
}
+
+void LLWLAnimator::startInterpolation(const LLSD& targetWater)
+{
+ mInterpBeginWL->setAll(LLWLParamManager::getInstance()->mCurParams.getAll());
+ mInterpBeginWater->setAll(LLWaterParamManager::getInstance()->mCurParams.getAll());
+
+ mInterpStartTime = clock();
+ mInterpEndTime = mInterpStartTime + clock_t(INTERP_TOTAL_SECONDS) * CLOCKS_PER_SEC;
+
+ // Don't set any ending WL -- this is continuously calculated as the animator updates since it's a moving target
+ mInterpEndWater->setAll(targetWater);
+
+ mIsInterpolating = true;
+}
+
+std::string LLWLAnimator::timeToString(F32 curTime)
+{
+ S32 hours;
+ S32 min;
+ bool isPM = false;
+
+ // get hours and minutes
+ hours = (S32) (24.0 * curTime);
+ curTime -= ((F32) hours / 24.0f);
+ min = llround(24.0f * 60.0f * curTime);
+
+ // handle case where it's 60
+ if(min == 60)
+ {
+ hours++;
+ min = 0;
+ }
+
+ // set for PM
+ if(hours >= 12 && hours < 24)
+ {
+ isPM = true;
+ }
+
+ // convert to non-military notation
+ if(hours >= 24)
+ {
+ hours = 12;
+ }
+ else if(hours > 12)
+ {
+ hours -= 12;
+ }
+ else if(hours == 0)
+ {
+ hours = 12;
+ }
+
+ // make the string
+ std::stringstream newTime;
+ newTime << hours << ":";
+
+ // double 0
+ if(min < 10)
+ {
+ newTime << 0;
+ }
+
+ // finish it
+ newTime << min << " ";
+ if(isPM)
+ {
+ newTime << "PM";
+ }
+ else
+ {
+ newTime << "AM";
+ }
+
+ return newTime.str();
+}
+
+F64 LLWLAnimator::getLocalTime()
+{
+ char buffer[9];
+ time_t rawtime;
+ struct tm* timeinfo;
+
+ time(&rawtime);
+ timeinfo = localtime(&rawtime);
+ strftime(buffer, 9, "%H:%M:%S", timeinfo);
+ std::string timeStr(buffer);
+
+ F64 tod = ((F64)atoi(timeStr.substr(0,2).c_str())) / 24.f +
+ ((F64)atoi(timeStr.substr(3,2).c_str())) / 1440.f +
+ ((F64)atoi(timeStr.substr(6,2).c_str())) / 86400.f;
+ return tod;
+}
diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h
index 5677290213..5223b45343 100644
--- a/indra/newview/llwlanimator.h
+++ b/indra/newview/llwlanimator.h
@@ -28,28 +28,39 @@
#define LL_WL_ANIMATOR_H
#include "llwlparamset.h"
+#include "llwaterparamset.h"
#include <string>
#include <map>
+struct LLWLParamKey;
+
class LLWLAnimator {
public:
+ typedef enum e_time
+ {
+ TIME_LINDEN,
+ TIME_LOCAL,
+ TIME_CUSTOM
+ } ETime;
+
F64 mStartTime;
F32 mDayRate;
F64 mDayTime;
// track to play
- std::map<F32, std::string> mTimeTrack;
- std::map<F32, std::string>::iterator mFirstIt, mSecondIt;
-
- // params to use
- //std::map<std::string, LLWLParamSet> mParamList;
-
- bool mIsRunning;
- bool mUseLindenTime;
+ std::map<F32, LLWLParamKey> mTimeTrack;
+ std::map<F32, LLWLParamKey>::iterator mFirstIt, mSecondIt;
// simple constructor
LLWLAnimator();
+ ~LLWLAnimator()
+ {
+ delete mInterpBeginWL;
+ delete mInterpBeginWater;
+ delete mInterpEndWater;
+ }
+
// update the parameters
void update(LLWLParamSet& curParams);
@@ -63,9 +74,66 @@ public:
void setDayTime(F64 dayTime);
// set an animation track
- void setTrack(std::map<F32, std::string>& track,
+ void setTrack(std::map<F32, LLWLParamKey>& track,
F32 dayRate, F64 dayTime = 0, bool run = true);
+ void deactivate()
+ {
+ mIsRunning = false;
+ }
+
+ void activate(ETime time)
+ {
+ mIsRunning = true;
+ mTimeType = time;
+ }
+
+ void startInterpolation(const LLSD& targetWater);
+
+ bool getIsRunning()
+ {
+ return mIsRunning;
+ }
+
+ bool getUseCustomTime()
+ {
+ return mTimeType == TIME_CUSTOM;
+ }
+
+ bool getUseLocalTime()
+ {
+ return mTimeType == TIME_LOCAL;
+ }
+
+ bool getUseLindenTime()
+ {
+ return mTimeType == TIME_LINDEN;
+ }
+
+ void setTimeType(ETime time)
+ {
+ mTimeType = time;
+ }
+
+ ETime getTimeType()
+ {
+ return mTimeType;
+ }
+
+ /// convert the present time to a digital clock time
+ static std::string timeToString(F32 curTime);
+
+ /// get local time between 0 and 1
+ static F64 getLocalTime();
+
+private:
+ ETime mTimeType;
+ bool mIsRunning, mIsInterpolating;
+ LLWLParamSet *mInterpBeginWL;
+ LLWaterParamSet *mInterpBeginWater, *mInterpEndWater;
+ clock_t mInterpStartTime, mInterpEndTime;
+
+ static F64 INTERP_TOTAL_SECONDS;
};
#endif // LL_WL_ANIMATOR_H
diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp
index 85b3d62a49..4c0cb7c0f4 100644
--- a/indra/newview/llwldaycycle.cpp
+++ b/indra/newview/llwldaycycle.cpp
@@ -27,12 +27,11 @@
#include "llviewerprecompiledheaders.h"
#include "llwldaycycle.h"
-
-#include "llnotificationsutil.h"
#include "llsdserialize.h"
-#include "llxmlnode.h"
-
#include "llwlparammanager.h"
+#include "llnotifications.h"
+
+#include "llviewerwindow.h"
#include <map>
@@ -45,85 +44,160 @@ LLWLDayCycle::~LLWLDayCycle()
{
}
-void LLWLDayCycle::loadDayCycle(const std::string & fileName)
+void LLWLDayCycle::loadDayCycle(const LLSD& day_data, LLWLParamKey::EScope scope)
{
- // clear the first few things
+ lldebugs << "Loading day cycle (day_data.size() = " << day_data.size() << ", scope = " << scope << ")" << llendl;
mTimeMap.clear();
- // now load the file
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
- "windlight/days", fileName));
- llinfos << "Loading DayCycle settings from " << pathName << llendl;
-
- llifstream day_cycle_xml(pathName);
- if (day_cycle_xml.is_open())
+ // add each key frame
+ for(S32 i = 0; i < day_data.size(); ++i)
{
- // load and parse it
- LLSD day_data(LLSD::emptyArray());
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
- parser->parse(day_cycle_xml, day_data, LLSDSerialize::SIZE_UNLIMITED);
-
- // add each key
- for(S32 i = 0; i < day_data.size(); ++i)
+ // make sure it's a two array
+ if(day_data[i].size() != 2)
+ {
+ continue;
+ }
+
+ // check each param key exists in param manager
+ bool success;
+ LLWLParamSet pset;
+ LLWLParamKey frame = LLWLParamKey(day_data[i][1].asString(), scope);
+ success =
+ LLWLParamManager::getInstance()->getParamSet(frame, pset);
+ if(!success)
{
- // make sure it's a two array
- if(day_data[i].size() != 2)
+ // *HACK: If loading region day cycle, try local sky presets as well.
+ // Local presets may be referenced by a region day cycle after
+ // it has been edited but the changes have not been uploaded.
+ if (scope == LLEnvKey::SCOPE_REGION)
{
- continue;
+ frame.scope = LLEnvKey::SCOPE_LOCAL;
+ success = LLWLParamManager::getInstance()->getParamSet(frame, pset);
}
-
- // check each param name exists in param manager
- bool success;
- LLWLParamSet pset;
- success = LLWLParamManager::instance()->getParamSet(day_data[i][1].asString(), pset);
- if(!success)
+
+ if (!success)
{
// alert the user
LLSD args;
args["SKY"] = day_data[i][1].asString();
- LLNotificationsUtil::add("WLMissingSky", args);
+ LLNotifications::instance().add("WLMissingSky", args, LLSD());
continue;
}
-
- // then add the key
- addKey((F32)day_data[i][0].asReal(), day_data[i][1].asString());
}
+
+ // then add the keyframe
+ addKeyframe((F32)day_data[i][0].asReal(), frame);
+ }
+}
+
+void LLWLDayCycle::loadDayCycleFromFile(const std::string & fileName)
+{
+ loadDayCycle(loadCycleDataFromFile(fileName), LLWLParamKey::SCOPE_LOCAL);
+}
+/*static*/ LLSD LLWLDayCycle::loadCycleDataFromFile(const std::string & fileName)
+{
+ // *FIX: Cannot load user day cycles.
+ std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
+ "windlight/days", fileName));
+
+ return loadDayCycleFromPath(pathName);
+}
+
+// static
+LLSD LLWLDayCycle::loadDayCycleFromPath(const std::string& file_path)
+{
+ LL_INFOS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL;
+
+ llifstream day_cycle_xml(file_path);
+ if (day_cycle_xml.is_open())
+ {
+ // load and parse it
+ LLSD day_data(LLSD::emptyArray());
+ LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ parser->parse(day_cycle_xml, day_data, LLSDSerialize::SIZE_UNLIMITED);
day_cycle_xml.close();
+ return day_data;
+ }
+ else
+ {
+ return LLSD();
}
}
void LLWLDayCycle::saveDayCycle(const std::string & fileName)
{
- LLSD day_data(LLSD::emptyArray());
-
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", fileName));
//llinfos << "Saving WindLight settings to " << pathName << llendl;
- for(std::map<F32, std::string>::const_iterator mIt = mTimeMap.begin();
- mIt != mTimeMap.end();
- ++mIt)
+ save(pathName);
+}
+
+void LLWLDayCycle::save(const std::string& file_path)
+{
+ LLSD day_data = asLLSD();
+
+ llofstream day_cycle_xml(file_path);
+ LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
+ formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
+ day_cycle_xml.close();
+}
+
+LLSD LLWLDayCycle::asLLSD()
+{
+ LLSD day_data(LLSD::emptyArray());
+ for(std::map<F32, LLWLParamKey>::const_iterator mIt = mTimeMap.begin(); mIt != mTimeMap.end(); ++mIt)
{
LLSD key(LLSD::emptyArray());
key.append(mIt->first);
- key.append(mIt->second);
+ key.append(mIt->second.name);
day_data.append(key);
}
- llofstream day_cycle_xml(pathName);
- LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
- formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
- day_cycle_xml.close();
+ lldebugs << "Dumping day cycle (" << mTimeMap.size() << ") to LLSD: " << day_data << llendl;
+ return day_data;
}
+bool LLWLDayCycle::getSkyRefs(std::map<LLWLParamKey, LLWLParamSet>& refs) const
+{
+ bool result = true;
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+
+ refs.clear();
+ for (std::map<F32, LLWLParamKey>::const_iterator iter = mTimeMap.begin(); iter != mTimeMap.end(); ++iter)
+ {
+ const LLWLParamKey& key = iter->second;
+ if (!wl_mgr.getParamSet(key, refs[key]))
+ {
+ llwarns << "Cannot find sky [" << key.name << "] referenced by a day cycle" << llendl;
+ result = false;
+ }
+ }
+
+ return result;
+}
-void LLWLDayCycle::clearKeys()
+bool LLWLDayCycle::getSkyMap(LLSD& sky_map) const
{
+ std::map<LLWLParamKey, LLWLParamSet> refs;
+
+ if (!getSkyRefs(refs))
+ {
+ return false;
+ }
+
+ sky_map = LLWLParamManager::createSkyMap(refs);
+ return true;
+}
+
+void LLWLDayCycle::clearKeyframes()
+{
+ lldebugs << "Clearing key frames" << llendl;
mTimeMap.clear();
}
-bool LLWLDayCycle::addKey(F32 newTime, const std::string & paramName)
+bool LLWLDayCycle::addKeyframe(F32 newTime, LLWLParamKey frame)
{
// no adding negative time
if(newTime < 0)
@@ -134,48 +208,58 @@ bool LLWLDayCycle::addKey(F32 newTime, const std::string & paramName)
// if time not being used, add it and return true
if(mTimeMap.find(newTime) == mTimeMap.end())
{
- mTimeMap.insert(std::pair<F32, std::string>(newTime, paramName));
+ mTimeMap.insert(std::pair<F32, LLWLParamKey>(newTime, frame));
+ lldebugs << "Adding key frame (" << newTime << ", " << frame.toLLSD() << ")" << llendl;
return true;
}
// otherwise, don't add, and return error
+ llwarns << "Error adding key frame (" << newTime << ", " << frame.toLLSD() << ")" << llendl;
return false;
}
-bool LLWLDayCycle::changeKeyTime(F32 oldTime, F32 newTime)
+bool LLWLDayCycle::changeKeyframeTime(F32 oldTime, F32 newTime)
{
+ lldebugs << "Changing key frame time (" << oldTime << " => " << newTime << ")" << llendl;
+
// just remove and add back
- std::string name = mTimeMap[oldTime];
+ LLWLParamKey frame = mTimeMap[oldTime];
- bool stat = removeKey(oldTime);
+ bool stat = removeKeyframe(oldTime);
if(stat == false)
{
+ lldebugs << "Failed to change key frame time (" << oldTime << " => " << newTime << ")" << llendl;
return stat;
}
- return addKey(newTime, name);
+ return addKeyframe(newTime, frame);
}
-bool LLWLDayCycle::changeKeyParam(F32 time, const std::string & name)
+bool LLWLDayCycle::changeKeyframeParam(F32 time, LLWLParamKey key)
{
+ lldebugs << "Changing key frame param (" << time << ", " << key.toLLSD() << ")" << llendl;
+
// just remove and add back
// make sure param exists
LLWLParamSet tmp;
- bool stat = LLWLParamManager::instance()->getParamSet(name, tmp);
+ bool stat = LLWLParamManager::getInstance()->getParamSet(key, tmp);
if(stat == false)
{
+ lldebugs << "Failed to change key frame param (" << time << ", " << key.toLLSD() << ")" << llendl;
return stat;
}
- mTimeMap[time] = name;
+ mTimeMap[time] = key;
return true;
}
-bool LLWLDayCycle::removeKey(F32 time)
+bool LLWLDayCycle::removeKeyframe(F32 time)
{
+ lldebugs << "Removing key frame (" << time << ")" << llendl;
+
// look for the time. If there, erase it
- std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
+ std::map<F32, LLWLParamKey>::iterator mIt = mTimeMap.find(time);
if(mIt != mTimeMap.end())
{
mTimeMap.erase(mIt);
@@ -185,15 +269,15 @@ bool LLWLDayCycle::removeKey(F32 time)
return false;
}
-bool LLWLDayCycle::getKey(const std::string & name, F32& key)
+bool LLWLDayCycle::getKeytime(LLWLParamKey frame, F32& key_time) const
{
- // scroll through till we find the
- std::map<F32, std::string>::iterator mIt = mTimeMap.begin();
+ // scroll through till we find the correct value in the map
+ std::map<F32, LLWLParamKey>::const_iterator mIt = mTimeMap.begin();
for(; mIt != mTimeMap.end(); ++mIt)
{
- if(name == mIt->second)
+ if(frame == mIt->second)
{
- key = mIt->first;
+ key_time = mIt->first;
return true;
}
}
@@ -204,26 +288,52 @@ bool LLWLDayCycle::getKey(const std::string & name, F32& key)
bool LLWLDayCycle::getKeyedParam(F32 time, LLWLParamSet& param)
{
// just scroll on through till you find it
- std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
- if(mIt != mTimeMap.end())
+ std::map<F32, LLWLParamKey>::iterator mIt = mTimeMap.find(time);
+ if(mIt != mTimeMap.end())
{
- return LLWLParamManager::instance()->getParamSet(mIt->second, param);
+ return LLWLParamManager::getInstance()->getParamSet(mIt->second, param);
}
// return error if not found
+ lldebugs << "Key " << time << " not found" << llendl;
return false;
}
bool LLWLDayCycle::getKeyedParamName(F32 time, std::string & name)
{
// just scroll on through till you find it
- std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
+ std::map<F32, LLWLParamKey>::iterator mIt = mTimeMap.find(time);
if(mIt != mTimeMap.end())
{
- name = mTimeMap[time];
+ name = mTimeMap[time].name;
return true;
}
// return error if not found
+ lldebugs << "Key " << time << " not found" << llendl;
return false;
}
+
+bool LLWLDayCycle::hasReferencesTo(const LLWLParamKey& keyframe) const
+{
+ F32 dummy;
+ return getKeytime(keyframe, dummy);
+}
+
+void LLWLDayCycle::removeReferencesTo(const LLWLParamKey& keyframe)
+{
+ lldebugs << "Removing references to key frame " << keyframe.toLLSD() << llendl;
+ F32 keytime;
+ bool might_exist;
+ do
+ {
+ // look for it
+ might_exist = getKeytime(keyframe, keytime);
+ if(!might_exist)
+ {
+ return;
+ }
+ might_exist = removeKeyframe(keytime);
+
+ } while(might_exist); // might be another one
+}
diff --git a/indra/newview/llwldaycycle.h b/indra/newview/llwldaycycle.h
index 5cbf72191d..c8585564ed 100644
--- a/indra/newview/llwldaycycle.h
+++ b/indra/newview/llwldaycycle.h
@@ -34,13 +34,16 @@ class LLWLDayCycle;
#include <string>
#include "llwlparamset.h"
#include "llwlanimator.h"
+struct LLWLParamKey;
+#include "llenvmanager.h" // for LLEnvKey::EScope
class LLWLDayCycle
{
+ LOG_CLASS(LLWLDayCycle);
public:
// lists what param sets are used when during the day
- std::map<F32, std::string> mTimeMap;
+ std::map<F32, LLWLParamKey> mTimeMap;
// how long is my day
F32 mDayRate;
@@ -54,35 +57,56 @@ public:
~LLWLDayCycle();
/// load a day cycle
- void loadDayCycle(const std::string & fileName);
+ void loadDayCycle(const LLSD& llsd, LLEnvKey::EScope scope);
/// load a day cycle
+ void loadDayCycleFromFile(const std::string & fileName);
+
+ /// save a day cycle
void saveDayCycle(const std::string & fileName);
- /// clear keys
- void clearKeys();
+ /// save a day cycle
+ void save(const std::string& file_path);
+
+ /// load the LLSD data from a file (returns the undefined LLSD if not found)
+ static LLSD loadCycleDataFromFile(const std::string & fileName);
+
+ /// load the LLSD data from a file specified by full path
+ static LLSD loadDayCycleFromPath(const std::string& file_path);
+
+ /// get the LLSD data for this day cycle
+ LLSD asLLSD();
+
+ // get skies referenced by this day cycle
+ bool getSkyRefs(std::map<LLWLParamKey, LLWLParamSet>& refs) const;
+
+ // get referenced skies as LLSD
+ bool getSkyMap(LLSD& sky_map) const;
+
+ /// clear keyframes
+ void clearKeyframes();
/// Getters and Setters
/// add a new key frame to the day cycle
/// returns true if successful
/// no negative time
- bool addKey(F32 newTime, const std::string & paramName);
+ bool addKeyframe(F32 newTime, LLWLParamKey key);
- /// adjust a key's placement in the day cycle
+ /// adjust a keyframe's placement in the day cycle
/// returns true if successful
- bool changeKeyTime(F32 oldTime, F32 newTime);
+ bool changeKeyframeTime(F32 oldTime, F32 newTime);
- /// adjust a key's parameter used
+ /// adjust a keyframe's parameter used
/// returns true if successful
- bool changeKeyParam(F32 time, const std::string & paramName);
+ bool changeKeyframeParam(F32 time, LLWLParamKey key);
- /// remove a key from the day cycle
+ /// remove a key frame from the day cycle
/// returns true if successful
- bool removeKey(F32 time);
+ bool removeKeyframe(F32 time);
/// get the first key time for a parameter
/// returns false if not there
- bool getKey(const std::string & name, F32& key);
+ bool getKeytime(LLWLParamKey keyFrame, F32& keyTime) const;
/// get the param set at a given time
/// returns true if found one
@@ -92,6 +116,12 @@ public:
/// returns true if it found one
bool getKeyedParamName(F32 time, std::string & name);
+ /// @return true if there are references to the given sky
+ bool hasReferencesTo(const LLWLParamKey& keyframe) const;
+
+ /// removes all references to the sky (paramkey)
+ /// does nothing if the sky doesn't exist in the day
+ void removeReferencesTo(const LLWLParamKey& keyframe);
};
diff --git a/indra/newview/llwlhandlers.cpp b/indra/newview/llwlhandlers.cpp
new file mode 100644
index 0000000000..2425b96678
--- /dev/null
+++ b/indra/newview/llwlhandlers.cpp
@@ -0,0 +1,197 @@
+/**
+ * @file llwlhandlers.cpp
+ * @brief Various classes which handle Windlight-related messaging
+ *
+ * $LicenseInfo:firstyear=2009&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 "llwlhandlers.h"
+
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "llenvmanager.h"
+#include "llnotificationsutil.h"
+
+/****
+ * LLEnvironmentRequest
+ ****/
+// static
+bool LLEnvironmentRequest::initiate()
+{
+ LLViewerRegion* cur_region = gAgent.getRegion();
+
+ if (!cur_region)
+ {
+ LL_WARNS("WindlightCaps") << "Viewer region not set yet, skipping env. settings request" << LL_ENDL;
+ return false;
+ }
+
+ if (!cur_region->capabilitiesReceived())
+ {
+ LL_INFOS("WindlightCaps") << "Deferring windlight settings request until we've got region caps" << LL_ENDL;
+ cur_region->setCapabilitiesReceivedCallback(boost::bind(&LLEnvironmentRequest::onRegionCapsReceived, _1));
+ return false;
+ }
+
+ return doRequest();
+}
+
+// static
+void LLEnvironmentRequest::onRegionCapsReceived(const LLUUID& region_id)
+{
+ if (region_id != gAgent.getRegion()->getRegionID())
+ {
+ LL_INFOS("WindlightCaps") << "Got caps for a non-current region" << LL_ENDL;
+ return;
+ }
+
+ LL_DEBUGS("WindlightCaps") << "Received region capabilities" << LL_ENDL;
+ doRequest();
+}
+
+// static
+bool LLEnvironmentRequest::doRequest()
+{
+ std::string url = gAgent.getRegion()->getCapability("EnvironmentSettings");
+ if (url.empty())
+ {
+ LL_INFOS("WindlightCaps") << "Skipping windlight setting request - we don't have this capability" << LL_ENDL;
+ // region is apparently not capable of this; don't respond at all
+ return false;
+ }
+
+ LL_INFOS("WindlightCaps") << "Requesting region windlight settings via " << url << LL_ENDL;
+ LLHTTPClient::get(url, new LLEnvironmentRequestResponder());
+ return true;
+}
+
+/****
+ * LLEnvironmentRequestResponder
+ ****/
+int LLEnvironmentRequestResponder::sCount = 0; // init to 0
+
+LLEnvironmentRequestResponder::LLEnvironmentRequestResponder()
+{
+ mID = ++sCount;
+}
+/*virtual*/ void LLEnvironmentRequestResponder::result(const LLSD& unvalidated_content)
+{
+ LL_INFOS("WindlightCaps") << "Received region windlight settings" << LL_ENDL;
+
+ if (mID != sCount)
+ {
+ LL_INFOS("WindlightCaps") << "Got superseded by another responder; ignoring..." << LL_ENDL;
+ return;
+ }
+
+ if (unvalidated_content[0]["regionID"].asUUID() != gAgent.getRegion()->getRegionID())
+ {
+ LL_WARNS("WindlightCaps") << "Not in the region from where this data was received (wanting "
+ << gAgent.getRegion()->getRegionID() << " but got " << unvalidated_content[0]["regionID"].asUUID()
+ << ") - ignoring..." << LL_ENDL;
+ return;
+ }
+
+ LLEnvManagerNew::getInstance()->onRegionSettingsResponse(unvalidated_content);
+}
+/*virtual*/ void LLEnvironmentRequestResponder::error(U32 status, const std::string& reason)
+{
+ LL_INFOS("WindlightCaps") << "Got an error, not using region windlight..." << LL_ENDL;
+ LLEnvManagerNew::getInstance()->onRegionSettingsResponse(LLSD());
+}
+
+/****
+ * LLEnvironmentApply
+ ****/
+
+clock_t LLEnvironmentApply::UPDATE_WAIT_SECONDS = clock_t(3.f);
+clock_t LLEnvironmentApply::sLastUpdate = clock_t(0.f);
+
+// static
+bool LLEnvironmentApply::initiateRequest(const LLSD& content)
+{
+ clock_t current = clock();
+
+ // Make sure we don't update too frequently.
+ if (current < sLastUpdate + (UPDATE_WAIT_SECONDS * CLOCKS_PER_SEC))
+ {
+ LLSD args(LLSD::emptyMap());
+ args["WAIT"] = (F64)UPDATE_WAIT_SECONDS;
+ LLNotificationsUtil::add("EnvUpdateRate", args);
+ return false;
+ }
+
+ sLastUpdate = current;
+
+ // Send update request.
+ std::string url = gAgent.getRegion()->getCapability("EnvironmentSettings");
+ if (url.empty())
+ {
+ LL_WARNS("WindlightCaps") << "Applying windlight settings not supported" << LL_ENDL;
+ return false;
+ }
+
+ LL_INFOS("WindlightCaps") << "Sending windlight settings to " << url << LL_ENDL;
+ LL_DEBUGS("WindlightCaps") << "content: " << content << LL_ENDL;
+ LLHTTPClient::post(url, content, new LLEnvironmentApplyResponder());
+ return true;
+}
+
+/****
+ * LLEnvironmentApplyResponder
+ ****/
+/*virtual*/ void LLEnvironmentApplyResponder::result(const LLSD& content)
+{
+ if (content["regionID"].asUUID() != gAgent.getRegion()->getRegionID())
+ {
+ LL_WARNS("WindlightCaps") << "No longer in the region where data was sent (currently "
+ << gAgent.getRegion()->getRegionID() << ", reply is from " << content["regionID"].asUUID()
+ << "); ignoring..." << LL_ENDL;
+ return;
+ }
+ else if (content["success"].asBoolean())
+ {
+ LL_DEBUGS("WindlightCaps") << "Success in applying windlight settings to region " << content["regionID"].asUUID() << LL_ENDL;
+ LLEnvManagerNew::instance().onRegionSettingsApplyResponse(true);
+ }
+ else
+ {
+ LL_WARNS("WindlightCaps") << "Region couldn't apply windlight settings! Reason from sim: " << content["fail_reason"].asString() << LL_ENDL;
+ LLSD args(LLSD::emptyMap());
+ args["FAIL_REASON"] = content["fail_reason"].asString();
+ LLNotificationsUtil::add("WLRegionApplyFail", args);
+ LLEnvManagerNew::instance().onRegionSettingsApplyResponse(false);
+ }
+}
+/*virtual*/ void LLEnvironmentApplyResponder::error(U32 status, const std::string& reason)
+{
+ std::stringstream msg;
+ msg << reason << " (Code " << status << ")";
+
+ LL_WARNS("WindlightCaps") << "Couldn't apply windlight settings to region! Reason: " << msg << LL_ENDL;
+
+ LLSD args(LLSD::emptyMap());
+ args["FAIL_REASON"] = msg.str();
+ LLNotificationsUtil::add("WLRegionApplyFail", args);
+}
diff --git a/indra/newview/llwlhandlers.h b/indra/newview/llwlhandlers.h
new file mode 100644
index 0000000000..23558876da
--- /dev/null
+++ b/indra/newview/llwlhandlers.h
@@ -0,0 +1,100 @@
+/**
+ * @file llwlhandlers.h
+ * @brief Headers for classes in llwlhandlers.cpp
+ *
+ * $LicenseInfo:firstyear=2009&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_LLWLHANDLERS_H
+#define LL_LLWLHANDLERS_H
+
+#include "llviewerprecompiledheaders.h"
+#include "llhttpclient.h"
+
+class LLEnvironmentRequest
+{
+ LOG_CLASS(LLEnvironmentRequest);
+public:
+ /// @return true if request was successfully sent
+ static bool initiate();
+
+private:
+ static void onRegionCapsReceived(const LLUUID& region_id);
+ static bool doRequest();
+};
+
+class LLEnvironmentRequestResponder: public LLHTTPClient::Responder
+{
+ LOG_CLASS(LLEnvironmentRequestResponder);
+public:
+ virtual void result(const LLSD& content);
+ virtual void error(U32 status, const std::string& reason);
+
+private:
+ friend class LLEnvironmentRequest;
+
+ LLEnvironmentRequestResponder();
+ static int sCount;
+ int mID;
+};
+
+class LLEnvironmentApply
+{
+ LOG_CLASS(LLEnvironmentApply);
+public:
+ /// @return true if request was successfully sent
+ static bool initiateRequest(const LLSD& content);
+
+private:
+ static clock_t sLastUpdate;
+ static clock_t UPDATE_WAIT_SECONDS;
+};
+
+class LLEnvironmentApplyResponder: public LLHTTPClient::Responder
+{
+ LOG_CLASS(LLEnvironmentApplyResponder);
+public:
+ /*
+ * Expecting reply from sim in form of:
+ * {
+ * regionID : uuid,
+ * messageID: uuid,
+ * success : true
+ * }
+ * or
+ * {
+ * regionID : uuid,
+ * success : false,
+ * fail_reason : string
+ * }
+ */
+ virtual void result(const LLSD& content);
+
+ virtual void error(U32 status, const std::string& reason); // non-200 errors only
+
+private:
+ friend class LLEnvironmentApply;
+
+ LLEnvironmentApplyResponder() {}
+};
+
+#endif // LL_LLWLHANDLERS_H
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 848efcbb49..55608a059f 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -37,23 +37,29 @@
#include "llspinctrl.h"
#include "llcheckboxctrl.h"
#include "lluictrlfactory.h"
+#include "llviewercamera.h"
#include "llcombobox.h"
#include "lllineeditor.h"
#include "llsdserialize.h"
#include "v4math.h"
+#include "llviewerdisplay.h"
#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "lldrawpoolwater.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
#include "llwlparamset.h"
#include "llpostprocess.h"
-#include "llfloaterwindlight.h"
-#include "llfloaterdaycycle.h"
-#include "llfloaterenvsettings.h"
-#include "curl/curl.h"
+#include "llviewershadermgr.h"
+#include "llglslshader.h"
-LLWLParamManager * LLWLParamManager::sInstance = NULL;
-static LLFastTimer::DeclareTimer FTM_UPDATE_WLPARAM("Update Windlight Params");
+#include "curl/curl.h"
+#include "llstreamtools.h"
LLWLParamManager::LLWLParamManager() :
@@ -96,161 +102,237 @@ LLWLParamManager::~LLWLParamManager()
{
}
-void LLWLParamManager::loadPresets(const std::string& file_name)
+void LLWLParamManager::clearParamSetsOfScope(LLWLParamKey::EScope scope)
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading Default WindLight settings from " << path_name << LL_ENDL;
-
- bool found = true;
- LLDirIterator app_settings_iter(path_name, "*.xml");
- while(found)
+ if (LLWLParamKey::SCOPE_LOCAL == scope)
{
- std::string name;
- found = app_settings_iter.next(name);
- if(found)
- {
-
- name=name.erase(name.length()-4);
-
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ LL_WARNS("Windlight") << "Tried to clear windlight sky presets from local system! This shouldn't be called..." << LL_ENDL;
+ return;
+ }
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
+ std::set<LLWLParamKey> to_remove;
+ for(std::map<LLWLParamKey, LLWLParamSet>::iterator iter = mParamList.begin(); iter != mParamList.end(); ++iter)
+ {
+ if(iter->first.scope == scope)
+ {
+ to_remove.insert(iter->first);
}
}
- // And repeat for user presets, note the user presets will modify any system presets already loaded
+ for(std::set<LLWLParamKey>::iterator iter = to_remove.begin(); iter != to_remove.end(); ++iter)
+ {
+ mParamList.erase(*iter);
+ }
+}
- std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User WindLight settings from " << path_name2 << LL_ENDL;
-
- found = true;
- LLDirIterator user_settings_iter(path_name2, "*.xml");
- while(found)
+// returns all skies referenced by the day cycle, with their final names
+// side effect: applies changes to all internal structures!
+std::map<LLWLParamKey, LLWLParamSet> LLWLParamManager::finalizeFromDayCycle(LLWLParamKey::EScope scope)
+{
+ lldebugs << "mDay before finalizing:" << llendl;
{
- std::string name;
- found = user_settings_iter.next(name);
- if(found)
+ for (std::map<F32, LLWLParamKey>::iterator iter = mDay.mTimeMap.begin(); iter != mDay.mTimeMap.end(); ++iter)
{
- name=name.erase(name.length()-4);
+ LLWLParamKey& key = iter->second;
+ lldebugs << iter->first << "->" << key.name << llendl;
+ }
+ }
+
+ std::map<LLWLParamKey, LLWLParamSet> final_references;
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ // Move all referenced to desired scope, renaming if necessary
+ // First, save skies referenced
+ std::map<LLWLParamKey, LLWLParamSet> current_references; // all skies referenced by the day cycle, with their current names
+ // guard against skies with same name and different scopes
+ std::set<std::string> inserted_names;
+ std::map<std::string, unsigned int> conflicted_names; // integer later used as a count, for uniquely renaming conflicts
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
+ LLWLDayCycle& cycle = mDay;
+ for(std::map<F32, LLWLParamKey>::iterator iter = cycle.mTimeMap.begin();
+ iter != cycle.mTimeMap.end();
+ ++iter)
+ {
+ LLWLParamKey& key = iter->second;
+ std::string desired_name = key.name;
+ replace_newlines_with_whitespace(desired_name); // already shouldn't have newlines, but just in case
+ if(inserted_names.find(desired_name) == inserted_names.end())
+ {
+ inserted_names.insert(desired_name);
}
+ else
+ {
+ // make exist in map
+ conflicted_names[desired_name] = 0;
+ }
+ current_references[key] = mParamList[key];
}
-}
+ // forget all old skies in target scope, and rebuild, renaming as needed
+ clearParamSetsOfScope(scope);
+ for(std::map<LLWLParamKey, LLWLParamSet>::iterator iter = current_references.begin(); iter != current_references.end(); ++iter)
+ {
+ const LLWLParamKey& old_key = iter->first;
-void LLWLParamManager::savePresets(const std::string & fileName)
-{
- //Nobody currently calls me, but if they did, then its reasonable to write the data out to the user's folder
- //and not over the RO system wide version.
+ std::string desired_name(old_key.name);
+ replace_newlines_with_whitespace(desired_name);
- LLSD paramsData(LLSD::emptyMap());
-
- std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", fileName));
+ LLWLParamKey new_key(desired_name, scope); // name will be replaced later if necessary
- for(std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.begin();
- mIt != mParamList.end();
- ++mIt)
- {
- paramsData[mIt->first] = mIt->second.getAll();
- }
+ // if this sky is one with a non-unique name, rename via appending a number
+ // an existing preset of the target scope gets to keep its name
+ if (scope != old_key.scope && conflicted_names.find(desired_name) != conflicted_names.end())
+ {
+ std::string& new_name = new_key.name;
- llofstream presetsXML(pathName);
+ do
+ {
+ // if this executes more than once, this is an absurdly pathological case
+ // (e.g. "x" repeated twice, but "x 1" already exists, so need to use "x 2")
+ std::stringstream temp;
+ temp << desired_name << " " << (++conflicted_names[desired_name]);
+ new_name = temp.str();
+ } while (inserted_names.find(new_name) != inserted_names.end());
- LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
+ // yay, found one that works
+ inserted_names.insert(new_name); // track names we consume here; shouldn't be necessary due to ++int? but just in case
- formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
+ // *TODO factor out below into a rename()?
- presetsXML.close();
-}
+ LL_INFOS("Windlight") << "Renamed " << old_key.name << " (scope" << old_key.scope << ") to "
+ << new_key.name << " (scope " << new_key.scope << ")" << LL_ENDL;
-void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
-{
-
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ // update name in sky
+ iter->second.mName = new_name;
- escaped_filename += ".xml";
+ // update keys in day cycle
+ for(std::map<F32, LLWLParamKey>::iterator frame = cycle.mTimeMap.begin(); frame != cycle.mTimeMap.end(); ++frame)
+ {
+ if (frame->second == old_key)
+ {
+ frame->second = new_key;
+ }
+ }
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading WindLight sky setting from " << pathName << LL_ENDL;
+ // add to master sky map
+ mParamList[new_key] = iter->second;
+ }
- llifstream presetsXML;
- presetsXML.open(pathName.c_str());
+ final_references[new_key] = iter->second;
+ }
- // That failed, try loading from the users area instead.
- if(!presetsXML)
+ lldebugs << "mDay after finalizing:" << llendl;
{
- pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename);
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User WindLight sky setting from " << pathName << LL_ENDL;
- presetsXML.clear();
- presetsXML.open(pathName.c_str());
+ for (std::map<F32, LLWLParamKey>::iterator iter = mDay.mTimeMap.begin(); iter != mDay.mTimeMap.end(); ++iter)
+ {
+ LLWLParamKey& key = iter->second;
+ lldebugs << iter->first << "->" << key.name << llendl;
+ }
}
- if (presetsXML)
+ return final_references;
+}
+
+// static
+LLSD LLWLParamManager::createSkyMap(std::map<LLWLParamKey, LLWLParamSet> refs)
+{
+ LLSD skies = LLSD::emptyMap();
+ for(std::map<LLWLParamKey, LLWLParamSet>::iterator iter = refs.begin(); iter != refs.end(); ++iter)
{
- LLSD paramsData(LLSD::emptyMap());
+ skies.insert(iter->first.name, iter->second.getAll());
+ }
+ return skies;
+}
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
+void LLWLParamManager::addAllSkies(const LLWLParamKey::EScope scope, const LLSD& sky_presets)
+{
+ for(LLSD::map_const_iterator iter = sky_presets.beginMap(); iter != sky_presets.endMap(); ++iter)
+ {
+ LLWLParamSet set;
+ set.setAll(iter->second);
+ mParamList[LLWLParamKey(iter->first, scope)] = set;
+ }
+}
- parser->parse(presetsXML, paramsData, LLSDSerialize::SIZE_UNLIMITED);
+void LLWLParamManager::refreshRegionPresets()
+{
+ // Remove all region sky presets because they may belong to a previously visited region.
+ clearParamSetsOfScope(LLEnvKey::SCOPE_REGION);
+
+ // Add all sky presets belonging to the current region.
+ addAllSkies(LLEnvKey::SCOPE_REGION, LLEnvManagerNew::instance().getRegionSettings().getSkyMap());
+}
+
+void LLWLParamManager::loadAllPresets()
+{
+ // First, load system (coming out of the box) sky presets.
+ loadPresetsFromDir(getSysDir());
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
- if(mIt == mParamList.end())
+ // Then load user presets. Note that user day presets will modify any system ones already loaded.
+ loadPresetsFromDir(getUserDir());
+}
+
+void LLWLParamManager::loadPresetsFromDir(const std::string& dir)
+{
+ LL_INFOS2("AppInit", "Shaders") << "Loading sky presets from " << dir << LL_ENDL;
+
+ LLDirIterator dir_iter(dir, "*.xml");
+ while (1)
+ {
+ std::string file;
+ if (!dir_iter.next(file))
{
- addParamSet(name, paramsData);
+ break; // no more files
}
- else
+
+ std::string path = dir + file;
+ if (!loadPreset(path))
{
- setParamSet(name, paramsData);
+ llwarns << "Error loading sky preset from " << path << llendl;
}
- presetsXML.close();
- }
- else
+ }
+}
+
+bool LLWLParamManager::loadPreset(const std::string& path)
+{
+ llifstream xml_file;
+ std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
+
+ xml_file.open(path.c_str());
+ if (!xml_file)
{
- llwarns << "Can't find " << name << llendl;
- return;
+ return false;
}
-
- if(propagate)
+ LL_DEBUGS2("AppInit", "Shaders") << "Loading sky " << name << LL_ENDL;
+
+ LLSD params_data;
+ LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ parser->parse(xml_file, params_data, LLSDSerialize::SIZE_UNLIMITED);
+ xml_file.close();
+
+ LLWLParamKey key(name, LLEnvKey::SCOPE_LOCAL);
+ if (hasParamSet(key))
{
- getParamSet(name, mCurParams);
- propagateParameters();
+ setParamSet(key, params_data);
+ }
+ else
+ {
+ addParamSet(key, params_data);
}
-}
-void LLWLParamManager::savePreset(const std::string & name)
-{
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ return true;
+}
- escaped_filename += ".xml";
+void LLWLParamManager::savePreset(LLWLParamKey key)
+{
+ llassert(key.scope == LLEnvKey::SCOPE_LOCAL && !key.name.empty());
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename));
+ std::string pathName(getUserDir() + escapeString(key.name) + ".xml");
// fill it with LLSD windlight params
- paramsData = mParamList[name].getAll();
+ paramsData = mParamList[key].getAll();
// write to file
llofstream presetsXML(pathName);
@@ -283,6 +365,8 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
}
+static LLFastTimer::DeclareTimer FTM_UPDATE_WLPARAM("Update Windlight Params");
+
void LLWLParamManager::propagateParameters(void)
{
LLFastTimer ftm(FTM_UPDATE_WLPARAM);
@@ -362,7 +446,7 @@ void LLWLParamManager::update(LLViewerCamera * cam)
mCurParams.updateCloudScrolling();
// update only if running
- if(mAnimator.mIsRunning)
+ if(mAnimator.getIsRunning())
{
mAnimator.update(mCurParams);
}
@@ -370,31 +454,16 @@ void LLWLParamManager::update(LLViewerCamera * cam)
// update the shaders and the menu
propagateParameters();
- // sync menus if they exist
- LLFloaterWindLight* wlfloater = LLFloaterReg::findTypedInstance<LLFloaterWindLight>("env_windlight");
- if (wlfloater)
- {
- wlfloater->syncMenu();
- }
- LLFloaterDayCycle* dlfloater = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- if (dlfloater)
- {
- dlfloater->syncMenu();
- }
- LLFloaterEnvSettings* envfloater = LLFloaterReg::findTypedInstance<LLFloaterEnvSettings>("env_settings");
- if (envfloater)
- {
- envfloater->syncMenu();
- }
-
F32 camYaw = cam->getYaw();
+ stop_glerror();
+
// *TODO: potential optimization - this block may only need to be
// executed some of the time. For example for water shaders only.
{
F32 camYawDelta = mSunDeltaYaw * DEG_TO_RAD;
- LLVector3 lightNorm3(mLightDir);
+ LLVector3 lightNorm3(mLightDir);
lightNorm3 *= LLQuaternion(-(camYaw + camYawDelta), LLVector3(0.f, 1.f, 0.f));
mRotatedLightDir = LLVector4(lightNorm3, 0.f);
@@ -412,17 +481,18 @@ void LLWLParamManager::update(LLViewerCamera * cam)
}
}
-// static
-void LLWLParamManager::initClass(void)
+bool LLWLParamManager::applyDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time)
{
- instance();
+ mDay.loadDayCycle(params, scope);
+ resetAnimator(time, true); // set to specified time and start animator
+ return true;
}
-// static
-void LLWLParamManager::cleanupClass()
+bool LLWLParamManager::applySkyParams(const LLSD& params)
{
- delete sInstance;
- sInstance = NULL;
+ mAnimator.deactivate();
+ mCurParams.setAll(params);
+ return true;
}
void LLWLParamManager::resetAnimator(F32 curTime, bool run)
@@ -432,133 +502,227 @@ void LLWLParamManager::resetAnimator(F32 curTime, bool run)
return;
}
-bool LLWLParamManager::addParamSet(const std::string& name, LLWLParamSet& param)
+
+bool LLWLParamManager::addParamSet(const LLWLParamKey& key, LLWLParamSet& param)
{
// add a new one if not one there already
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
+ std::map<LLWLParamKey, LLWLParamSet>::iterator mIt = mParamList.find(key);
if(mIt == mParamList.end())
{
- mParamList[name] = param;
+ llassert(!key.name.empty());
+ // *TODO: validate params
+ mParamList[key] = param;
+ mPresetListChangeSignal();
return true;
}
return false;
}
-BOOL LLWLParamManager::addParamSet(const std::string& name, LLSD const & param)
+BOOL LLWLParamManager::addParamSet(const LLWLParamKey& key, LLSD const & param)
{
- // add a new one if not one there already
- std::map<std::string, LLWLParamSet>::const_iterator finder = mParamList.find(name);
- if(finder == mParamList.end())
- {
- mParamList[name].setAll(param);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+ LLWLParamSet param_set;
+ param_set.setAll(param);
+ return addParamSet(key, param_set);
}
-bool LLWLParamManager::getParamSet(const std::string& name, LLWLParamSet& param)
+bool LLWLParamManager::getParamSet(const LLWLParamKey& key, LLWLParamSet& param)
{
// find it and set it
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
+ std::map<LLWLParamKey, LLWLParamSet>::iterator mIt = mParamList.find(key);
if(mIt != mParamList.end())
{
- param = mParamList[name];
- param.mName = name;
+ param = mParamList[key];
+ param.mName = key.name;
return true;
}
return false;
}
-bool LLWLParamManager::setParamSet(const std::string& name, LLWLParamSet& param)
+bool LLWLParamManager::hasParamSet(const LLWLParamKey& key)
{
- mParamList[name] = param;
+ LLWLParamSet dummy;
+ return getParamSet(key, dummy);
+}
+
+bool LLWLParamManager::setParamSet(const LLWLParamKey& key, LLWLParamSet& param)
+{
+ llassert(!key.name.empty());
+ // *TODO: validate params
+ mParamList[key] = param;
return true;
}
-bool LLWLParamManager::setParamSet(const std::string& name, const LLSD & param)
+bool LLWLParamManager::setParamSet(const LLWLParamKey& key, const LLSD & param)
{
+ llassert(!key.name.empty());
+ // *TODO: validate params
+
// quick, non robust (we won't be working with files, but assets) check
+ // this might not actually be true anymore....
if(!param.isMap())
{
return false;
}
- mParamList[name].setAll(param);
-
- return true;
+ LLWLParamSet param_set;
+ param_set.setAll(param);
+ return setParamSet(key, param_set);
}
-bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_disk)
+void LLWLParamManager::removeParamSet(const LLWLParamKey& key, bool delete_from_disk)
{
+ // *NOTE: Removing a sky preset invalidates day cycles that refer to it.
+
+ if (key.scope == LLEnvKey::SCOPE_REGION)
+ {
+ llwarns << "Removing region skies not supported" << llendl;
+ llassert(key.scope == LLEnvKey::SCOPE_LOCAL);
+ return;
+ }
+
// remove from param list
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
- if(mIt != mParamList.end())
+ std::map<LLWLParamKey, LLWLParamSet>::iterator it = mParamList.find(key);
+ if (it == mParamList.end())
{
- mParamList.erase(mIt);
+ LL_WARNS("WindLight") << "No sky preset named " << key.name << LL_ENDL;
+ return;
}
- F32 key;
+ mParamList.erase(it);
+ mDay.removeReferencesTo(key);
- // remove all references
- bool stat = true;
- do
+ // remove from file system if requested
+ if (delete_from_disk)
{
- // get it
- stat = mDay.getKey(name, key);
- if(stat == false)
+ std::string path_name(getUserDir());
+ std::string escaped_name = escapeString(key.name);
+
+ if(gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml") < 1)
{
- break;
+ LL_WARNS("WindLight") << "Error removing sky preset " << key.name << " from disk" << LL_ENDL;
}
+ }
- // and remove
- stat = mDay.removeKey(key);
+ // signal interested parties
+ mPresetListChangeSignal();
+}
- } while(stat == true);
-
- if(delete_from_disk)
+bool LLWLParamManager::isSystemPreset(const std::string& preset_name) const
+{
+ // *TODO: file system access is excessive here.
+ return gDirUtilp->fileExists(getSysDir() + escapeString(preset_name) + ".xml");
+}
+
+void LLWLParamManager::getPresetNames(preset_name_list_t& region, preset_name_list_t& user, preset_name_list_t& sys) const
+{
+ region.clear();
+ user.clear();
+ sys.clear();
+
+ for (std::map<LLWLParamKey, LLWLParamSet>::const_iterator it = mParamList.begin(); it != mParamList.end(); it++)
{
- std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
-
- // use full curl escaped name
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
- }
+ const LLWLParamKey& key = it->first;
+ const std::string& name = key.name;
- return true;
+ if (key.scope == LLEnvKey::SCOPE_REGION)
+ {
+ region.push_back(name);
+ }
+ else
+ {
+ if (isSystemPreset(name))
+ {
+ sys.push_back(name);
+ }
+ else
+ {
+ user.push_back(name);
+ }
+ }
+ }
}
+void LLWLParamManager::getUserPresetNames(preset_name_list_t& user) const
+{
+ preset_name_list_t region, sys; // unused
+ getPresetNames(region, user, sys);
+}
-// static
-LLWLParamManager * LLWLParamManager::instance()
+void LLWLParamManager::getPresetKeys(preset_key_list_t& keys) const
{
- if(NULL == sInstance)
+ keys.clear();
+
+ for (std::map<LLWLParamKey, LLWLParamSet>::const_iterator it = mParamList.begin(); it != mParamList.end(); it++)
{
- sInstance = new LLWLParamManager();
+ keys.push_back(it->first);
+ }
+}
+
+boost::signals2::connection LLWLParamManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
+{
+ return mPresetListChangeSignal.connect(cb);
+}
- sInstance->loadPresets(LLStringUtil::null);
+// virtual static
+void LLWLParamManager::initSingleton()
+{
+ LL_DEBUGS("Windlight") << "Initializing sky" << LL_ENDL;
+
+ loadAllPresets();
- // load the day
- sInstance->mDay.loadDayCycle(std::string("Default.xml"));
+ // load the day
+ std::string preferred_day = LLEnvManagerNew::instance().getDayCycleName();
+ if (!LLDayCycleManager::instance().getPreset(preferred_day, mDay))
+ {
+ // Fall back to default.
+ llwarns << "No day cycle named " << preferred_day << ", falling back to defaults" << llendl;
+ mDay.loadDayCycleFromFile("Default.xml");
- // *HACK - sets cloud scrolling to what we want... fix this better in the future
- sInstance->getParamSet("Default", sInstance->mCurParams);
+ // *TODO: Fix user preferences accordingly.
+ }
- // set it to noon
- sInstance->resetAnimator(0.5, true);
+ // *HACK - sets cloud scrolling to what we want... fix this better in the future
+ std::string sky = LLEnvManagerNew::instance().getSkyPresetName();
+ if (!getParamSet(LLWLParamKey(sky, LLWLParamKey::SCOPE_LOCAL), mCurParams))
+ {
+ llwarns << "No sky preset named " << sky << ", falling back to defaults" << llendl;
+ getParamSet(LLWLParamKey("Default", LLWLParamKey::SCOPE_LOCAL), mCurParams);
- // but use linden time sets it to what the estate is
- sInstance->mAnimator.mUseLindenTime = true;
+ // *TODO: Fix user preferences accordingly.
}
- return sInstance;
+ // set it to noon
+ resetAnimator(0.5, LLEnvManagerNew::instance().getUseDayCycle());
+
+ // but use linden time sets it to what the estate is
+ mAnimator.setTimeType(LLWLAnimator::TIME_LINDEN);
+
+ LLEnvManagerNew::instance().usePrefs();
+}
+
+// static
+std::string LLWLParamManager::getSysDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", "");
+}
+
+// static
+std::string LLWLParamManager::getUserDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "windlight/skies", "");
+}
+
+// static
+std::string LLWLParamManager::escapeString(const std::string& str)
+{
+ // Don't use LLURI::escape() because it doesn't encode '-' characters
+ // which may break handling of some system presets like "A-12AM".
+ char* curl_str = curl_escape(str.c_str(), str.size());
+ std::string escaped_str(curl_str);
+ curl_free(curl_str);
+
+ return escaped_str;
}
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
index 8c6329e769..bc984b9126 100644
--- a/indra/newview/llwlparammanager.h
+++ b/indra/newview/llwlparammanager.h
@@ -27,12 +27,14 @@
#ifndef LL_WLPARAMMANAGER_H
#define LL_WLPARAMMANAGER_H
-#include <vector>
+#include <list>
#include <map>
+#include "llenvmanager.h"
#include "llwlparamset.h"
#include "llwlanimator.h"
#include "llwldaycycle.h"
#include "llviewercamera.h"
+#include "lltrans.h"
class LLGLSLShader;
@@ -72,7 +74,7 @@ struct WLColorControl {
r = val.mV[0];
g = val.mV[1];
b = val.mV[2];
- i = val.mV[3];
+ i = val.mV[3];
return *this;
}
@@ -115,25 +117,112 @@ struct WLFloatControl {
}
};
-/// WindLight parameter manager class - what controls all the wind light shaders
-class LLWLParamManager
+struct LLWLParamKey : LLEnvKey
{
public:
+ // scope and source of a param set (WL sky preset)
+ std::string name;
+ EScope scope;
- LLWLParamManager();
- ~LLWLParamManager();
+ // for conversion from LLSD
+ static const int NAME_IDX = 0;
+ static const int SCOPE_IDX = 1;
+
+ inline LLWLParamKey(const std::string& n, EScope s)
+ : name(n), scope(s)
+ {
+ }
+
+ inline LLWLParamKey(LLSD llsd)
+ : name(llsd[NAME_IDX].asString()), scope(EScope(llsd[SCOPE_IDX].asInteger()))
+ {
+ }
+
+ inline LLWLParamKey() // NOT really valid, just so std::maps can return a default of some sort
+ : name(""), scope(SCOPE_LOCAL)
+ {
+ }
+
+ inline LLWLParamKey(std::string& stringVal)
+ {
+ size_t len = stringVal.length();
+ if (len > 0)
+ {
+ name = stringVal.substr(0, len - 1);
+ scope = (EScope) atoi(stringVal.substr(len - 1, len).c_str());
+ }
+ }
+
+ inline std::string toStringVal() const
+ {
+ std::stringstream str;
+ str << name << scope;
+ return str.str();
+ }
+
+ inline LLSD toLLSD() const
+ {
+ LLSD llsd = LLSD::emptyArray();
+ llsd.append(LLSD(name));
+ llsd.append(LLSD(scope));
+ return llsd;
+ }
+
+ inline void fromLLSD(const LLSD& llsd)
+ {
+ name = llsd[NAME_IDX].asString();
+ scope = EScope(llsd[SCOPE_IDX].asInteger());
+ }
+
+ inline bool operator <(const LLWLParamKey other) const
+ {
+ if (name < other.name)
+ {
+ return true;
+ }
+ else if (name > other.name)
+ {
+ return false;
+ }
+ else
+ {
+ return scope < other.scope;
+ }
+ }
+
+ inline bool operator ==(const LLWLParamKey other) const
+ {
+ return (name == other.name) && (scope == other.scope);
+ }
- /// load a preset file
- void loadPresets(const std::string & fileName);
+ inline std::string toString() const
+ {
+ switch (scope)
+ {
+ case SCOPE_LOCAL:
+ return name + std::string(" (") + LLTrans::getString("Local") + std::string(")");
+ break;
+ case SCOPE_REGION:
+ return name + std::string(" (") + LLTrans::getString("Region") + std::string(")");
+ break;
+ default:
+ return name + " (?)";
+ }
+ }
+};
- /// save the preset file
- void savePresets(const std::string & fileName);
+/// WindLight parameter manager class - what controls all the wind light shaders
+class LLWLParamManager : public LLSingleton<LLWLParamManager>
+{
+ LOG_CLASS(LLWLParamManager);
- /// load an individual preset into the sky
- void loadPreset(const std::string & name,bool propogate=true);
+public:
+ typedef std::list<std::string> preset_name_list_t;
+ typedef std::list<LLWLParamKey> preset_key_list_t;
+ typedef boost::signals2::signal<void()> preset_list_signal_t;
/// save the parameter presets to file
- void savePreset(const std::string & name);
+ void savePreset(const LLWLParamKey key);
/// Set shader uniforms dirty, so they'll update automatically.
void propagateParameters(void);
@@ -147,6 +236,12 @@ public:
/// update information camera dependent parameters
void update(LLViewerCamera * cam);
+ /// apply specified day cycle, setting time to noon by default
+ bool applyDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time = 0.5);
+
+ /// apply specified fixed sky params
+ bool applySkyParams(const LLSD& params);
+
// get where the light is pointing
inline LLVector4 getLightDir(void) const;
@@ -161,36 +256,62 @@ public:
/// get the radius of the dome
inline F32 getDomeRadius(void) const;
-
- /// Perform global initialization for this class.
- static void initClass(void);
-
- // Cleanup of global data that's only inited once per class.
- static void cleanupClass();
- /// add a param to the list
- bool addParamSet(const std::string& name, LLWLParamSet& param);
+ /// add a param set (preset) to the list
+ bool addParamSet(const LLWLParamKey& key, LLWLParamSet& param);
- /// add a param to the list
- BOOL addParamSet(const std::string& name, LLSD const & param);
+ /// add a param set (preset) to the list
+ BOOL addParamSet(const LLWLParamKey& key, LLSD const & param);
- /// get a param from the list
- bool getParamSet(const std::string& name, LLWLParamSet& param);
+ /// get a param set (preset) from the list
+ bool getParamSet(const LLWLParamKey& key, LLWLParamSet& param);
+
+ /// check whether the preset is in the list
+ bool hasParamSet(const LLWLParamKey& key);
/// set the param in the list with a new param
- bool setParamSet(const std::string& name, LLWLParamSet& param);
+ bool setParamSet(const LLWLParamKey& key, LLWLParamSet& param);
/// set the param in the list with a new param
- bool setParamSet(const std::string& name, LLSD const & param);
+ bool setParamSet(const LLWLParamKey& key, LLSD const & param);
/// gets rid of a parameter and any references to it
- /// returns true if successful
- bool removeParamSet(const std::string& name, bool delete_from_disk);
+ /// ignores "delete_from_disk" if the scope is not local
+ void removeParamSet(const LLWLParamKey& key, bool delete_from_disk);
- // singleton pattern implementation
- static LLWLParamManager * instance();
+ /// clear parameter mapping of a given scope
+ void clearParamSetsOfScope(LLEnvKey::EScope scope);
-public:
+ /// @return true if the preset comes out of the box
+ bool isSystemPreset(const std::string& preset_name) const;
+
+ /// @return user and system preset names as a single list
+ void getPresetNames(preset_name_list_t& region, preset_name_list_t& user, preset_name_list_t& sys) const;
+
+ /// @return user preset names
+ void getUserPresetNames(preset_name_list_t& user) const;
+
+ /// @return keys of all known presets
+ void getPresetKeys(preset_key_list_t& keys) const;
+
+ /// Emitted when a preset gets added or deleted.
+ boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
+
+ /// add all skies in LLSD using the given scope
+ void addAllSkies(LLEnvKey::EScope scope, const LLSD& preset_map);
+
+ /// refresh region-scope presets
+ void refreshRegionPresets();
+
+ // returns all skies referenced by the current day cycle (in mDay), with their final names
+ // side effect: applies changes to all internal structures! (trashes all unreferenced skies in scope, keys in day cycle rescoped to scope, etc.)
+ std::map<LLWLParamKey, LLWLParamSet> finalizeFromDayCycle(LLWLParamKey::EScope scope);
+
+ // returns all skies in map (intended to be called with output from a finalize)
+ static LLSD createSkyMap(std::map<LLWLParamKey, LLWLParamSet> map);
+
+ /// escape string in a way different from LLURI::escape()
+ static std::string escapeString(const std::string& str);
// helper variables
LLWLAnimator mAnimator;
@@ -243,14 +364,27 @@ public:
F32 mDomeOffset;
F32 mDomeRadius;
- // list of all the parameters, listed by name
- std::map<std::string, LLWLParamSet> mParamList;
-
-
+
private:
- // our parameter manager singleton instance
- static LLWLParamManager * sInstance;
+ friend class LLWLAnimator;
+
+ void loadAllPresets();
+ void loadPresetsFromDir(const std::string& dir);
+ bool loadPreset(const std::string& path);
+
+ static std::string getSysDir();
+ static std::string getUserDir();
+
+ friend class LLSingleton<LLWLParamManager>;
+ /*virtual*/ void initSingleton();
+ LLWLParamManager();
+ ~LLWLParamManager();
+
+ // list of all the parameters, listed by name
+ std::map<LLWLParamKey, LLWLParamSet> mParamList;
+
+ preset_list_signal_t mPresetListChangeSignal;
};
inline F32 LLWLParamManager::getDomeOffset(void) const
diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp
index cf06766d73..02d914a812 100644
--- a/indra/newview/llwlparamset.cpp
+++ b/indra/newview/llwlparamset.cpp
@@ -29,8 +29,8 @@
#include "llwlparamset.h"
#include "llwlanimator.h"
-#include "llfloaterwindlight.h"
#include "llwlparammanager.h"
+#include "llglslshader.h"
#include "lluictrlfactory.h"
#include "llsliderctrl.h"
@@ -94,7 +94,7 @@ void LLWLParamSet::update(LLGLSLShader * shader) const
shader->uniform4fv(param, 1, val.mV);
}
- else
+ else // param is the uniform name
{
LLVector4 val;
@@ -119,7 +119,6 @@ void LLWLParamSet::update(LLGLSLShader * shader) const
val.mV[0] = i->second.asBoolean();
}
-
shader->uniform4fv(param, 1, val.mV);
}
}
@@ -260,7 +259,6 @@ void LLWLParamSet::setEastAngle(float val)
void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)
{
// set up the iterators
- LLSD::map_iterator cIt = mParamValues.beginMap();
// keep cloud positions and coverage the same
/// TODO masking will do this later
@@ -273,55 +271,39 @@ void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)
LLSD srcVal;
LLSD destVal;
- // do the interpolation for all the ones saved as vectors
- // skip the weird ones
- for(; cIt != mParamValues.endMap(); cIt++) {
+ // Iterate through values
+ for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
+ {
- // check params to make sure they're actually there
- if(src.mParamValues.has(cIt->first))
+ // If param exists in both src and dest, set the holder variables, otherwise skip
+ if(src.mParamValues.has(iter->first) && dest.mParamValues.has(iter->first))
{
- srcVal = src.mParamValues[cIt->first];
+ srcVal = src.mParamValues[iter->first];
+ destVal = dest.mParamValues[iter->first];
}
else
{
continue;
}
- if(dest.mParamValues.has(cIt->first))
+ if(iter->second.isReal()) // If it's a real, interpolate directly
{
- destVal = dest.mParamValues[cIt->first];
+ iter->second = srcVal.asReal() + ((destVal.asReal() - srcVal.asReal()) * weight);
}
- else
- {
- continue;
- }
-
- // skip if not a vector
- if(!cIt->second.isArray())
- {
- continue;
- }
-
- // only Real vectors allowed
- if(!cIt->second[0].isReal())
+ else if(iter->second.isArray() && iter->second[0].isReal() // If it's an array of reals, loop through the reals and interpolate on those
+ && iter->second.size() == srcVal.size() && iter->second.size() == destVal.size())
{
- continue;
+ // Actually do interpolation: old value + (difference in values * factor)
+ for(int i=0; i < iter->second.size(); ++i)
+ {
+ // iter->second[i] = (1.f-weight)*(F32)srcVal[i].asReal() + weight*(F32)destVal[i].asReal(); // old way of doing it -- equivalent but one more operation
+ iter->second[i] = srcVal[i].asReal() + ((destVal[i].asReal() - srcVal[i].asReal()) * weight);
+ }
}
-
- // make sure all the same size
- if( cIt->second.size() != srcVal.size() ||
- cIt->second.size() != destVal.size())
+ else // Else, skip
{
continue;
- }
-
- // more error checking might be necessary;
-
- for(int i=0; i < cIt->second.size(); ++i)
- {
- cIt->second[i] = (1.0f - weight) * (F32) srcVal[i].asReal() +
- weight * (F32) destVal[i].asReal();
- }
+ }
}
// now mix the extra parameters
diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h
index 487e2bf922..3c44ed3bb8 100644
--- a/indra/newview/llwlparamset.h
+++ b/indra/newview/llwlparamset.h
@@ -32,10 +32,9 @@
#include "v4math.h"
#include "v4color.h"
-#include "llviewershadermgr.h"
-class LLFloaterWindLight;
class LLWLParamSet;
+class LLGLSLShader;
/// A class representing a set of parameter values for the WindLight shaders.
class LLWLParamSet {
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index ec24b02934..a7ae456f3c 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -61,6 +61,7 @@
#include <map>
#include <cstring>
+
//
// Globals
//
@@ -91,8 +92,7 @@ LLWorld::LLWorld() :
mLastPacketsIn(0),
mLastPacketsOut(0),
mLastPacketsLost(0),
- mSpaceTimeUSec(0),
- mClassicCloudsEnabled(TRUE)
+ mSpaceTimeUSec(0)
{
for (S32 i = 0; i < 8; i++)
{
@@ -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;
+ }
}
@@ -183,10 +189,6 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
llerrs << "Unable to create new region!" << llendl;
}
- regionp->mCloudLayer.create(regionp);
- regionp->mCloudLayer.setWidth((F32)mWidth);
- regionp->mCloudLayer.setWindPointer(&regionp->mWind);
-
mRegionList.push_back(regionp);
mActiveRegionList.push_back(regionp);
mCulledRegionList.push_back(regionp);
@@ -661,92 +663,6 @@ void LLWorld::updateParticles()
LLViewerPartSim::getInstance()->updateSimulation();
}
-void LLWorld::updateClouds(const F32 dt)
-{
- static LLFastTimer::DeclareTimer ftm("World Clouds");
- LLFastTimer t(ftm);
-
- if ( gSavedSettings.getBOOL("FreezeTime") )
- {
- // don't move clouds in snapshot mode
- return;
- }
-
- if (
- mClassicCloudsEnabled !=
- gSavedSettings.getBOOL("SkyUseClassicClouds") )
- {
- // The classic cloud toggle has been flipped
- // gotta update all of the cloud layers
- mClassicCloudsEnabled =
- gSavedSettings.getBOOL("SkyUseClassicClouds");
-
- if ( !mClassicCloudsEnabled && mActiveRegionList.size() )
- {
- // We've transitioned to having classic clouds disabled
- // reset all cloud layers.
- for (
- region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end();
- ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.reset();
- }
-
- return;
- }
- }
- else if ( !mClassicCloudsEnabled ) return;
-
- if (mActiveRegionList.size())
- {
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.updatePuffs(dt);
- }
-
- // Reshuffle who owns which puffs
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.updatePuffOwnership();
- }
-
- // Add new puffs
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.updatePuffCount();
- }
- }
-}
-
-LLCloudGroup* LLWorld::findCloudGroup(const LLCloudPuff &puff)
-{
- if (mActiveRegionList.size())
- {
- // Update all the cloud puff positions, and timer based stuff
- // such as death decay
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- LLCloudGroup *groupp = regionp->mCloudLayer.findCloudGroup(puff);
- if (groupp)
- {
- return groupp;
- }
- }
- }
- return NULL;
-}
-
-
void LLWorld::renderPropertyLines()
{
S32 region_count = 0;
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 8cdb615686..265d5dc801 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1752,13 +1752,13 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
case MAP_ITEM_LAND_FOR_SALE_ADULT:
{
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("id", id));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("query", id));
break;
}
case MAP_ITEM_CLASSIFIED:
{
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("id", id));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("query", id));
break;
}
default:
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 257884d921..f483ba5af8 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -306,19 +306,8 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
mCurlRequest = new LLCurlEasyRequest();
}
mErrorCert = NULL;
-
- if (gSavedSettings.getBOOL("BrowserProxyEnabled"))
- {
- mProxyAddress = gSavedSettings.getString("BrowserProxyAddress");
- S32 port = gSavedSettings.getS32 ( "BrowserProxyPort" );
-
- // tell curl about the settings
- mCurlRequest->setoptString(CURLOPT_PROXY, mProxyAddress);
- mCurlRequest->setopt(CURLOPT_PROXYPORT, port);
- mCurlRequest->setopt(CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
- }
-// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
+// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // useful for debugging
mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this);
BOOL vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
@@ -394,16 +383,18 @@ bool LLXMLRPCTransaction::Impl::process()
}
}
- const F32 MAX_PROCESSING_TIME = 0.05f;
- LLTimer timer;
+ //const F32 MAX_PROCESSING_TIME = 0.05f;
+ //LLTimer timer;
+
+ mCurlRequest->perform();
- while (mCurlRequest->perform() > 0)
+ /*while (mCurlRequest->perform() > 0)
{
if (timer.getElapsedTimeF32() >= MAX_PROCESSING_TIME)
{
return false;
}
- }
+ }*/
while(1)
{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index e74bf2a620..a50f66f282 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -103,6 +103,7 @@
#include "llmutelist.h"
#include "lltoolpie.h"
#include "llcurl.h"
+#include "llnotifications.h"
void check_stack_depth(S32 stack_depth)
@@ -317,6 +318,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;
@@ -336,10 +338,10 @@ static const U32 gl_cube_face[] =
void validate_framebuffer_object();
-void addDeferredAttachments(LLRenderTarget& target)
+bool addDeferredAttachments(LLRenderTarget& target)
{
- target.addColorAttachment(GL_RGBA); //specular
- target.addColorAttachment(GL_RGBA); //normal+z
+ return target.addColorAttachment(GL_RGBA) && //specular
+ target.addColorAttachment(GL_RGBA); //normal+z
}
LLPipeline::LLPipeline() :
@@ -561,6 +563,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);
@@ -586,18 +606,61 @@ void LLPipeline::allocatePhysicsBuffer()
void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{
- // remember these dimensions
- mScreenWidth = resX;
- mScreenHeight = resY;
-
- //cap samples at 4 for render targets to avoid out of memory errors
U32 samples = gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples"));
if (gGLManager.mIsATI)
- { //disable multisampling of render targets where ATI is involved
+ { //ATI doesn't like the way we use multisample texture
samples = 0;
}
+ //try to allocate screen buffers at requested resolution and samples
+ // - on failure, shrink number of samples and try again
+ // - if not multisampled, shrink resolution and try again (favor X resolution over Y)
+ // Make sure to call "releaseScreenBuffers" after each failure to cleanup the partially loaded state
+
+ if (!allocateScreenBuffer(resX, resY, samples))
+ {
+ releaseScreenBuffers();
+ //reduce number of samples
+ while (samples > 0)
+ {
+ samples /= 2;
+ if (allocateScreenBuffer(resX, resY, samples))
+ { //success
+ return;
+ }
+ releaseScreenBuffers();
+ }
+
+ //reduce resolution
+ while (resY > 0 && resX > 0)
+ {
+ resY /= 2;
+ if (allocateScreenBuffer(resX, resY, samples))
+ {
+ return;
+ }
+ releaseScreenBuffers();
+
+ resX /= 2;
+ if (allocateScreenBuffer(resX, resY, samples))
+ {
+ return;
+ }
+ releaseScreenBuffers();
+ }
+
+ llwarns << "Unable to allocate screen buffer at any resolution!" << llendl;
+ }
+}
+
+
+bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
+{
+ // remember these dimensions
+ mScreenWidth = resX;
+ mScreenHeight = resY;
+
U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
if (res_mod > 1 && res_mod < resX && res_mod < resY)
@@ -608,7 +671,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
if (gSavedSettings.getBOOL("RenderUIBuffer"))
{
- mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE))
+ {
+ return false;
+ }
}
if (LLPipeline::sRenderDeferred)
@@ -618,22 +684,22 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
bool gi = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED);
//allocate deferred rendering color buffers
- mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples);
- mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples);
- addDeferredAttachments(mDeferredScreen);
+ if (!mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+ if (!mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+ if (!addDeferredAttachments(mDeferredScreen)) return false;
- mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples);
+ if (!mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
#if LL_DARWIN
// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO
- mEdgeMap.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mEdgeMap.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
#else
- mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
#endif
if (shadow_detail > 0 || ssao)
{ //only need mDeferredLight[0] for shadows OR ssao
- mDeferredLight[0].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mDeferredLight[0].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
}
else
{
@@ -642,7 +708,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
if (ssao)
{ //only need mDeferredLight[1] for ssao
- mDeferredLight[1].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false);
+ if (!mDeferredLight[1].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false)) return false;
}
else
{
@@ -651,14 +717,14 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
if (gi)
{ //only need mDeferredLight[2] and mGIMapPost for gi
- mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false);
+ if (!mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false)) return false;
for (U32 i = 0; i < 2; i++)
{
#if LL_DARWIN
// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO
- mGIMapPost[i].allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (!mGIMapPost[i].allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE)) return false;
#else
- mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (!mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE)) return false;
#endif
}
}
@@ -685,7 +751,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{ //allocate 4 sun shadow maps
for (U32 i = 0; i < 4; i++)
{
- mShadow[i].allocate(U32(resX*scale),U32(resY*scale), shadow_fmt, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (!mShadow[i].allocate(U32(resX*scale),U32(resY*scale), shadow_fmt, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE)) return false;
}
}
else
@@ -703,7 +769,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{ //allocate two spot shadow maps
for (U32 i = 4; i < 6; i++)
{
- mShadow[i].allocate(width, height, shadow_fmt, TRUE, FALSE);
+ if (!mShadow[i].allocate(width, height, shadow_fmt, TRUE, FALSE)) return false;
}
}
else
@@ -716,7 +782,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
width = nhpo2(resX)/2;
height = nhpo2(resY)/2;
- mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
+ if (!mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE)) return false;
}
else
{
@@ -738,7 +804,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
mEdgeMap.release();
mLuminanceMap.release();
- mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
}
if (LLPipeline::sRenderDeferred)
@@ -750,6 +816,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
stop_glerror();
+ return true;
}
//static
@@ -800,9 +867,23 @@ void LLPipeline::releaseGLBuffers()
mWaterRef.release();
mWaterDis.release();
+
+ for (U32 i = 0; i < 3; i++)
+ {
+ mGlow[i].release();
+ }
+
+ releaseScreenBuffers();
+
+ gBumpImageList.destroyGL();
+ LLVOAvatar::resetImpostors();
+}
+
+void LLPipeline::releaseScreenBuffers()
+{
+ mUIScreen.release();
mScreen.release();
mPhysicsDisplay.release();
- mUIScreen.release();
mDeferredScreen.release();
mDeferredDepth.release();
for (U32 i = 0; i < 3; i++)
@@ -821,16 +902,9 @@ void LLPipeline::releaseGLBuffers()
{
mShadow[i].release();
}
-
- for (U32 i = 0; i < 3; i++)
- {
- mGlow[i].release();
- }
-
- gBumpImageList.destroyGL();
- LLVOAvatar::resetImpostors();
}
+
void LLPipeline::createGLBuffers()
{
LLMemType mt_cb(LLMemType::MTYPE_PIPELINE_CREATE_BUFFERS);
@@ -1983,6 +2057,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+ bool bound_shader = false;
+ if (gPipeline.canUseVertexShaders() && LLGLSLShader::sCurBoundShader == 0)
+ { //if no shader is currently bound, use the occlusion shader instead of fixed function if we can
+ // (shadow render uses a special shader that clamps to clip planes)
+ bound_shader = true;
+ gOcclusionProgram.bind();
+ }
+
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
{
@@ -2010,6 +2092,11 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
}
}
+ if (bound_shader)
+ {
+ gOcclusionProgram.unbind();
+ }
+
camera.disableUserClipPlane();
if (hasRenderType(LLPipeline::RENDER_TYPE_SKY) &&
@@ -2133,7 +2220,21 @@ void LLPipeline::doOcclusion(LLCamera& camera)
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
LLGLDisable cull(GL_CULL_FACE);
+
+ bool bind_shader = LLGLSLShader::sNoFixedFunction && LLGLSLShader::sCurBoundShader == 0;
+ if (bind_shader)
+ {
+ if (LLPipeline::sShadowRender)
+ {
+ gDeferredShadowProgram.bind();
+ }
+ else
+ {
+ gOcclusionProgram.bind();
+ }
+ }
+
for (LLCullResult::sg_list_t::iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter)
{
LLSpatialGroup* group = *iter;
@@ -2141,6 +2242,18 @@ void LLPipeline::doOcclusion(LLCamera& camera)
group->clearOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION);
}
+ if (bind_shader)
+ {
+ if (LLPipeline::sShadowRender)
+ {
+ gDeferredShadowProgram.unbind();
+ }
+ else
+ {
+ gOcclusionProgram.unbind();
+ }
+ }
+
gGL.setColorMask(true, false);
}
}
@@ -3247,6 +3360,13 @@ void render_hud_elements()
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
gGL.color4f(1,1,1,1);
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+ LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+
if (!LLPipeline::sReflectionRender && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
{
LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);
@@ -3272,6 +3392,11 @@ void render_hud_elements()
{
LLHUDText::renderAllHUD();
}
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.unbind();
+ }
gGL.flush();
}
@@ -3567,6 +3692,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
}
@@ -3599,8 +3725,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
check_stack_depth(stack_depth);
std::string msg = llformat("pass %d", i);
LLGLState::checkStates(msg);
- LLGLState::checkTextureChannels(msg);
- LLGLState::checkClientArrays(msg);
+ //LLGLState::checkTextureChannels(msg);
+ //LLGLState::checkClientArrays(msg);
}
}
}
@@ -3632,77 +3758,71 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
}
}
LLVertexBuffer::unbind();
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
-
-
-
- stop_glerror();
-
- LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights");
-
- if (!sReflectionRender)
+ if (!LLPipeline::sImpostorRender)
{
- renderHighlights();
- }
+ LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights");
- // Contains a list of the faces of objects that are physical or
- // have touch-handlers.
- mHighlightFaces.clear();
+ if (!sReflectionRender)
+ {
+ renderHighlights();
+ }
+
+ // Contains a list of the faces of objects that are physical or
+ // have touch-handlers.
+ mHighlightFaces.clear();
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug");
+ LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug");
- renderDebug();
+ renderDebug();
- LLVertexBuffer::unbind();
+ LLVertexBuffer::unbind();
- if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)
- {
- if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+ if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)
{
- // Render debugging beacons.
- gObjectList.renderObjectBeacons();
- gObjectList.resetObjectBeacons();
+ if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+ {
+ // Render debugging beacons.
+ gObjectList.renderObjectBeacons();
+ gObjectList.resetObjectBeacons();
+ }
+ else
+ {
+ // Make sure particle effects disappear
+ LLHUDObject::renderAllForTimer();
+ }
}
else
{
// Make sure particle effects disappear
LLHUDObject::renderAllForTimer();
}
- }
- else
- {
- // Make sure particle effects disappear
- LLHUDObject::renderAllForTimer();
- }
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
+ LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
- //HACK: preserve/restore matrices around HUD render
- if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
- {
- for (U32 i = 0; i < 16; i++)
+ //HACK: preserve/restore matrices around HUD render
+ if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
{
- gGLModelView[i] = saved_modelview[i];
- gGLProjection[i] = saved_projection[i];
+ for (U32 i = 0; i < 16; i++)
+ {
+ gGLModelView[i] = saved_modelview[i];
+ gGLProjection[i] = saved_projection[i];
+ }
}
}
LLVertexBuffer::unbind();
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
+// LLGLState::checkTextureChannels();
+// LLGLState::checkClientArrays();
}
void LLPipeline::renderGeomDeferred(LLCamera& camera)
@@ -3785,8 +3905,6 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)
llerrs << "GL matrix stack corrupted!" << llendl;
}
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
}
}
}
@@ -3841,6 +3959,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
gGL.setColorMask(true, false);
}
@@ -3879,8 +3998,6 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
llerrs << "GL matrix stack corrupted!" << llendl;
}
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
}
}
}
@@ -3908,6 +4025,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
@@ -3955,8 +4073,6 @@ void LLPipeline::renderGeomShadow(LLCamera& camera)
LLVertexBuffer::unbind();
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
}
}
else
@@ -4134,63 +4250,6 @@ void LLPipeline::renderDebug()
}
}
- if (gSavedSettings.getBOOL("DebugShowUploadCost"))
- {
- std::set<LLUUID> textures;
- std::set<LLUUID> sculpts;
- std::set<LLUUID> meshes;
-
- BOOL selected = TRUE;
- if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
- {
- selected = FALSE;
- }
-
- for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)
- {
- LLSpatialGroup* group = *iter;
- LLSpatialGroup::OctreeNode* node = group->mOctreeNode;
- for (LLSpatialGroup::OctreeNode::element_iter elem = node->getData().begin(); elem != node->getData().end(); ++elem)
- {
- LLDrawable* drawable = *elem;
- LLVOVolume* volume = drawable->getVOVolume();
- if (volume && volume->isSelected() == selected)
- {
- for (U32 i = 0; i < volume->getNumTEs(); ++i)
- {
- LLTextureEntry* te = volume->getTE(i);
- textures.insert(te->getID());
- }
-
- if (volume->isSculpted())
- {
- LLUUID sculpt_id = volume->getVolume()->getParams().getSculptID();
- if (volume->isMesh())
- {
- meshes.insert(sculpt_id);
- }
- else
- {
- sculpts.insert(sculpt_id);
- }
- }
- }
- }
- }
-
- gPipeline.mDebugTextureUploadCost = textures.size() * 10;
- gPipeline.mDebugSculptUploadCost = sculpts.size()*10;
-
- U32 mesh_cost = 0;
-
- for (std::set<LLUUID>::iterator iter = meshes.begin(); iter != meshes.end(); ++iter)
- {
- mesh_cost += gMeshRepo.getResourceCost(*iter)*10;
- }
-
- gPipeline.mDebugMeshUploadCost = mesh_cost;
- }
-
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA))
{
LLVertexBuffer::unbind();
@@ -6150,7 +6209,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
LLGLEnable blend_on(GL_BLEND);
LLGLEnable test(GL_ALPHA_TEST);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+
gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
mScreen.bindTexture(0, 0);
@@ -6449,30 +6508,39 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
LLGLDisable blend(GL_BLEND);
- //tex unit 0
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
-
- gGL.getTexUnit(0)->bind(&mGlow[1]);
- gGL.getTexUnit(1)->activate();
- gGL.getTexUnit(1)->enable(LLTexUnit::TT_RECT_TEXTURE);
-
-
- //tex unit 1
- gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gGlowCombineProgram.bind();
+ }
+ else
+ {
+ //tex unit 0
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
+ //tex unit 1
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
+ }
+ gGL.getTexUnit(0)->bind(&mGlow[1]);
gGL.getTexUnit(1)->bind(&mScreen);
- gGL.getTexUnit(1)->activate();
LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);
buff->setBuffer(mask);
buff->drawArrays(LLRender::TRIANGLE_STRIP, 0, 3);
- gGL.getTexUnit(1)->disable();
- gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gGlowCombineProgram.unbind();
+ }
+ else
+ {
+ gGL.getTexUnit(1)->disable();
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
- gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
+
}
if (LLRenderTarget::sUseFBO)
@@ -6485,6 +6553,11 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES))
{
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+
gGL.setColorMask(true, false);
LLVector2 tc1(0,0);
@@ -6508,6 +6581,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
gGL.end();
gGL.flush();
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.unbind();
+ }
+
}
glMatrixMode(GL_PROJECTION);
@@ -7923,7 +8002,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
static LLCullResult ref_result;
- if (LLDrawPoolWater::sNeedsDistortionUpdate)
+ if (LLDrawPoolWater::sNeedsReflectionUpdate)
{
//initial sky pass (no user clip plane)
{ //mask out everything but the sky
@@ -8063,8 +8142,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLViewerCamera::getInstance()->setUserClipPlane(npnorm);
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
if (!skip_avatar_update)
{
@@ -8197,14 +8274,21 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
LLVertexBuffer::unbind();
{
+ if (!use_shader)
+ { //occlusion program is general purpose depth-only no-textures
+ gOcclusionProgram.bind();
+ }
LLFastTimer ftm(FTM_SHADOW_SIMPLE);
- LLGLDisable test(GL_ALPHA_TEST);
gGL.getTexUnit(0)->disable();
for (U32 i = 0; i < sizeof(types)/sizeof(U32); ++i)
{
renderObjects(types[i], LLVertexBuffer::MAP_VERTEX, FALSE);
}
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ if (!use_shader)
+ {
+ gOcclusionProgram.unbind();
+ }
}
if (use_shader)
@@ -8220,12 +8304,11 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
{
LLFastTimer ftm(FTM_SHADOW_ALPHA);
- LLGLEnable test(GL_ALPHA_TEST);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.6f);
+ gDeferredShadowAlphaMaskProgram.bind();
+ gDeferredShadowAlphaMaskProgram.setAlphaRange(0.6f, 1.f);
renderObjects(LLRenderPass::PASS_ALPHA_SHADOW, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR, TRUE);
glColor4f(1,1,1,1);
renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
//glCullFace(GL_BACK);
@@ -8710,6 +8793,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
LLPipeline::RENDER_TYPE_WATER,
LLPipeline::RENDER_TYPE_VOIDWATER,
LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW,
+ LLPipeline::RENDER_TYPE_PASS_GRASS,
LLPipeline::RENDER_TYPE_PASS_SIMPLE,
LLPipeline::RENDER_TYPE_PASS_BUMP,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index e9da25e544..3f0640221e 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -113,9 +113,11 @@ public:
void resetVertexBuffers();
void resizeScreenTexture();
void releaseGLBuffers();
+ void releaseScreenBuffers();
void createGLBuffers();
void allocateScreenBuffer(U32 resX, U32 resY);
+ bool allocateScreenBuffer(U32 resX, U32 resY, U32 samples);
void allocatePhysicsBuffer();
void resetVertexBuffers(LLDrawable* drawable);
@@ -360,6 +362,8 @@ public:
static void updateRenderDeferred();
static void refreshRenderDeferred();
+ static void throttleNewMemoryAllocation(BOOL disable);
+
void addDebugBlip(const LLVector3& position, const LLColor4& color);
private:
@@ -515,8 +519,9 @@ public:
static BOOL sRenderAttachedLights;
static BOOL sRenderAttachedParticles;
static BOOL sRenderDeferred;
+ static BOOL sMemAllocationThrottled;
static S32 sVisibleLightCount;
- static F32 sMinRenderSize;
+ static F32 sMinRenderSize;
//screen texture
U32 mScreenWidth;
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
--- a/indra/newview/res-sdl/ll_icon.BMP
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/ll_icon.BMP b/indra/newview/res/ll_icon.BMP
deleted file mode 100644
index 3a9964cd95..0000000000
--- a/indra/newview/res/ll_icon.BMP
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/ll_icon.ico b/indra/newview/res/ll_icon.ico
deleted file mode 100644
index 87985b9285..0000000000
--- a/indra/newview/res/ll_icon.ico
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png
deleted file mode 100644
index ae573b3874..0000000000
--- a/indra/newview/res/ll_icon.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 38d04b4b5c..a53dece422 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -62,12 +62,12 @@ IDI_LCD_LL_ICON ICON "icon1.ico"
// Dialog
//
-SPLASHSCREEN DIALOG 32, 32, 144, 34
+SPLASHSCREEN DIALOG 32, 32, 264, 34
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE
FONT 8, "MS Sans Serif"
BEGIN
ICON IDI_LL_ICON,IDC_STATIC,7,7,20,20
- LTEXT "Loading Second Life...",666,36,13,91,8
+ LTEXT "Loading Second Life...",666,36,13,211,8
END
@@ -82,7 +82,7 @@ BEGIN
"SPLASHSCREEN", DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 137
+ RIGHTMARGIN, 257
VERTGUIDE, 36
TOPMARGIN, 7
BOTTOMMARGIN, 27
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 973df6998a..31b6fc77f5 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -133,6 +133,15 @@
name="AvatarListItemIconVoiceLeftColor"
reference="AvatarListItemIconOfflineColor" />
<color
+ name="BadgeImageColor"
+ value="1.0 0.40 0.0 1.0" />
+ <color
+ name="BadgeBorderColor"
+ value="0.9 0.9 0.9 1.0" />
+ <color
+ name="BadgeLabelColor"
+ reference="White" />
+ <color
name="ButtonBorderColor"
reference="Unused?" />
<color
@@ -500,22 +509,22 @@
reference="DkGray2" />
<color
name="MultiSliderDisabledThumbColor"
- reference="Unused?" />
+ reference="Black" />
<color
name="MultiSliderThumbCenterColor"
- reference="Unused?" />
+ reference="White" />
<color
name="MultiSliderThumbCenterSelectedColor"
- reference="Unused?" />
+ reference="Green" />
<color
name="MultiSliderThumbOutlineColor"
reference="Unused?" />
<color
name="MultiSliderTrackColor"
- reference="Unused?" />
+ reference="LtGray" />
<color
name="MultiSliderTriangleColor"
- reference="Unused?" />
+ reference="Yellow" />
<!--
<color
name="NameTagBackground"
@@ -760,7 +769,7 @@
<color
name="MenuBarProjectBgColor"
reference="MdBlue" />
-
+
<color
name="MeshImportTableNormalColor"
value="1 1 1 1"/>
diff --git a/indra/newview/skins/default/textures/icons/Inv_Gift.png b/indra/newview/skins/default/textures/icons/Inv_Gift.png
new file mode 100644
index 0000000000..5afe85d72d
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Inv_Gift.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png b/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png
new file mode 100644
index 0000000000..be58114aa1
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Off.png b/indra/newview/skins/default/textures/icons/OutboxPush_Off.png
new file mode 100644
index 0000000000..e6b9480ab1
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On.png b/indra/newview/skins/default/textures/icons/OutboxPush_On.png
new file mode 100644
index 0000000000..ffda2e92d4
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_On.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png
new file mode 100644
index 0000000000..6b5911014f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.png b/indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.png
new file mode 100644
index 0000000000..0e60b417b0
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_Over.png
new file mode 100644
index 0000000000..9c26b92e73
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Press.png b/indra/newview/skins/default/textures/icons/OutboxPush_Press.png
new file mode 100644
index 0000000000..3b5d462975
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png
new file mode 100644
index 0000000000..f85be047b0
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png
new file mode 100644
index 0000000000..cd4e482216
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png
new file mode 100644
index 0000000000..d212a871ce
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png
new file mode 100644
index 0000000000..e5b6023e36
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png
new file mode 100644
index 0000000000..e1911a092f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png
new file mode 100644
index 0000000000..9e59f7843a
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png
new file mode 100644
index 0000000000..51e8bff646
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png
new file mode 100644
index 0000000000..300e2e69e1
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png
new file mode 100644
index 0000000000..32fb236381
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png
new file mode 100644
index 0000000000..827f343b1e
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
new file mode 100644
index 0000000000..956e02b14d
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
new file mode 100644
index 0000000000..434caeda8b
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
new file mode 100644
index 0000000000..064687ed0f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
new file mode 100644
index 0000000000..5465650d0c
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Disabled.png b/indra/newview/skins/default/textures/icons/Sync_Disabled.png
new file mode 100644
index 0000000000..ca2e8def97
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Enabled.png b/indra/newview/skins/default/textures/icons/Sync_Enabled.png
new file mode 100644
index 0000000000..bc236c8b98
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Enabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_1.png b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png
new file mode 100644
index 0000000000..624e556376
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_2.png b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png
new file mode 100644
index 0000000000..5769803b3f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_3.png b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png
new file mode 100644
index 0000000000..92d4bfb020
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_4.png b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png
new file mode 100644
index 0000000000..6d43eb3a9f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_5.png b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png
new file mode 100644
index 0000000000..766d063c99
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_6.png b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png
new file mode 100644
index 0000000000..dfe7f68b72
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index cc7cce99c9..799cd907dc 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -1,4 +1,4 @@
-<!--
+<!--
This file contains metadata about how to load, display, and scale textures for rendering in the UI.
Images do *NOT* have to appear in this file in order to use them as textures in the UI...simply refer
to them by filename (relative to textures directory).
@@ -72,8 +72,11 @@ with the same filename but different name
<texture name="BackButton_Over" file_name="icons/back_arrow_over.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
<texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
+ <texture name="Badge_Background" file_name="widgets/Badge_Background.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
+ <texture name="Badge_Border" file_name="widgets/Badge_Border.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
+
<texture name="Blank" file_name="Blank.png" preload="false" />
-
+
<texture name="BreadCrumbBtn_Left_Disabled" file_name="widgets/BreadCrumbBtn_Left_Disabled.png" preload="false"/>
<texture name="BreadCrumbBtn_Left_Off" file_name="widgets/BreadCrumbBtn_Left_Off.png" preload="false"/>
<texture name="BreadCrumbBtn_Left_Over" file_name="widgets/BreadCrumbBtn_Left_Over.png" preload="false"/>
@@ -88,7 +91,6 @@ with the same filename but different name
<texture name="BreadCrumbBtn_Right_Off" file_name="widgets/BreadCrumbBtn_Right_Off.png" preload="false"/>
<texture name="BreadCrumbBtn_Right_Over" file_name="widgets/BreadCrumbBtn_Right_Over.png" preload="false"/>
<texture name="BreadCrumbBtn_Right_Press" file_name="widgets/BreadCrumbBtn_Right_Press.png" preload="false"/>
-
<texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
@@ -266,6 +268,8 @@ with the same filename but different name
<texture name="Locked_Icon" file_name="icons/Locked_Icon.png" preload="false" />
+ <texture name="MarketplaceBtn_Off" file_name="widgets/MarketplaceBtn_Off.png" preload="true" scale.left="30" scale.top="19" scale.right="35" scale.bottom="4" />
+ <texture name="MarketplaceBtn_Selected" file_name="widgets/MarketplaceBtn_Selected.png" preload="true" scale.left="30" scale.top="19" scale.right="35" scale.bottom="4" />
<texture name="Microphone_On" file_name="icons/Microphone_On.png" preload="false" />
@@ -349,6 +353,23 @@ with the same filename but different name
<texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />
<texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" />
+ <texture name="OutboxPush_Disabled" file_name="icons/OutboxPush_Disabled.png" preload="true" />
+ <texture name="OutboxPush_Off" file_name="icons/OutboxPush_Off.png" preload="true" />
+ <texture name="OutboxPush_On" file_name="icons/OutboxPush_On.png" preload="true" />
+ <texture name="OutboxPush_On_Over" file_name="icons/OutboxPush_On_Over.png" preload="true" />
+ <texture name="OutboxPush_Over" file_name="icons/OutboxPush_Over.png" preload="true" />
+ <texture name="OutboxPush_Press" file_name="icons/OutboxPush_Press.png" preload="true" />
+ <texture name="OutboxPush_Progress_1" file_name="icons/OutboxPush_Progress_1.png" preload="true" />
+ <texture name="OutboxPush_Progress_2" file_name="icons/OutboxPush_Progress_2.png" preload="true" />
+ <texture name="OutboxPush_Progress_3" file_name="icons/OutboxPush_Progress_3.png" preload="true" />
+ <texture name="OutboxPush_Progress_4" file_name="icons/OutboxPush_Progress_4.png" preload="true" />
+ <texture name="OutboxPush_Progress_5" file_name="icons/OutboxPush_Progress_5.png" preload="true" />
+ <texture name="OutboxPush_Progress_6" file_name="icons/OutboxPush_Progress_6.png" preload="true" />
+ <texture name="OutboxPush_Selected" file_name="icons/OutboxPush_Selected.png" preload="true" />
+ <texture name="OutboxPush_Selected_Disabled" file_name="icons/OutboxPush_Selected_Disabled.png" preload="true" />
+ <texture name="OutboxPush_Selected_Over" file_name="icons/OutboxPush_Selected_Over.png" preload="true" />
+ <texture name="OutboxPush_Selected_Press" file_name="icons/OutboxPush_Selected_Press.png" preload="true" />
+
<texture name="PanOrbit_Off" file_name="bottomtray/PanOrbit_Off.png" preload="false" />
<texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" />
@@ -369,6 +390,10 @@ with the same filename but different name
<texture name="Parcel_ScriptsNo_Dark" file_name="icons/Parcel_ScriptsNo_Dark.png" preload="false" />
<texture name="Parcel_Voice_Dark" file_name="icons/Parcel_Voice_Dark.png" preload="false" />
<texture name="Parcel_VoiceNo_Dark" file_name="icons/Parcel_VoiceNo_Dark.png" preload="false" />
+ <texture name="Parcel_SeeAVsOff_Dark" file_name="icons/Parcel_SeeAVsOff_Dark.png" preload="false" />
+ <texture name="Parcel_SeeAVsOn_Dark" file_name="icons/Parcel_SeeAVsOn_Dark.png" preload="false" />
+ <texture name="Parcel_SeeAVsOff_Light" file_name="icons/Parcel_SeeAVsOff_Light.png" preload="false" />
+ <texture name="Parcel_SeeAVsOn_Light" file_name="icons/Parcel_SeeAVsOn_Light.png" preload="false" />
<texture name="Parcel_BuildNo_Light" file_name="icons/Parcel_BuildNo_Light.png" preload="false" />
<texture name="Parcel_FlyNo_Light" file_name="icons/Parcel_FlyNo_Light.png" preload="false" />
@@ -496,6 +521,15 @@ with the same filename but different name
<texture name="StopReload_Off" file_name="icons/StopReload_Off.png" preload="false" />
<texture name="StopReload_Over" file_name="icons/StopReload_Over.png" preload="false" />
+ <texture name="Sync_Disabled" file_name="icons/Sync_Disabled.png" preload="true" />
+ <texture name="Sync_Enabled" file_name="icons/Sync_Enabled.png" preload="true" />
+ <texture name="Sync_Progress_1" file_name="icons/Sync_Progress_1.png" preload="true" />
+ <texture name="Sync_Progress_2" file_name="icons/Sync_Progress_2.png" preload="true" />
+ <texture name="Sync_Progress_3" file_name="icons/Sync_Progress_3.png" preload="true" />
+ <texture name="Sync_Progress_4" file_name="icons/Sync_Progress_4.png" preload="true" />
+ <texture name="Sync_Progress_5" file_name="icons/Sync_Progress_5.png" preload="true" />
+ <texture name="Sync_Progress_6" file_name="icons/Sync_Progress_6.png" preload="true" />
+
<texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" />
<texture name="TabIcon_Appearance_Selected" file_name="taskpanel/TabIcon_Appearance_Selected.png" preload="false" />
<texture name="TabIcon_Close_Off" file_name="taskpanel/TabIcon_Close_Off.png" preload="false" />
@@ -649,6 +683,7 @@ with the same filename but different name
<texture name="inv_folder_mesh.tga"/>
<texture name="inv_item_mesh.tga"/>
+
<texture name="lag_status_critical.tga" />
<texture name="lag_status_good.tga" />
<texture name="lag_status_warning.tga" />
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background.png b/indra/newview/skins/default/textures/widgets/Badge_Background.png
new file mode 100644
index 0000000000..5089c30312
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Badge_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
new file mode 100644
index 0000000000..9f114f2e4a
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Border.png b/indra/newview/skins/default/textures/widgets/Badge_Border.png
new file mode 100644
index 0000000000..4b086a63fb
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Badge_Border.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png
new file mode 100644
index 0000000000..e603c44384
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png
new file mode 100644
index 0000000000..fbc164123f
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
deleted file mode 100644
index ffae3d788f..0000000000
--- a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="DAG CYKLUS OPSÆTNING">
- <tab_container name="Day Cycle Tabs">
- <panel label="Dag cyklus" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <multi_slider label="" name="WLTimeSlider"/>
- <multi_slider label="" name="WLDayCycleKeys"/>
- <text name="WL12am">
- 00:00
- </text>
- <text name="WL3am">
- 03:00
- </text>
- <text name="WL6am">
- 06:00
- </text>
- <text name="WL9amHash">
- 09:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 00:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Tilføj key" label_selected="Tilføj key" name="WLAddKey"/>
- <button label="Slet key" label_selected="Slet key" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Key-frame indstillinger:
- </text>
- <text name="WLCurKeyTimeText">
- Key tid:
- </text>
- <spinner label="Timer" name="WLCurKeyHour"/>
- <spinner label="Min." name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Key fast indstilling:
- </text>
- <combo_box label="Faste" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Snap:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Cycluslængde:
- </text>
- <spinner label="Timer" name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Sek." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Vis :
- </text>
- <button label="Afspil" label_selected="Afspil" name="WLAnimSky"/>
- <button label="Stop!" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Benyt estate tid" label_selected="GÃ¥ til estate tid" name="WLUseLindenTime"/>
- <button label="Gem test-dag" label_selected="Gem test-dag" name="WLSaveDayCycle"/>
- <button label="Hent test-dag" label_selected="Hent test-dag" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml
deleted file mode 100644
index a6fbc05734..0000000000
--- a/indra/newview/skins/default/xui/da/floater_env_settings.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="REDIGERING AF OMGIVELSER">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Tid på
-dagen
- </text>
- <text name="EnvTimeText2">
- 00:00
- </text>
- <slider label="" name="EnvTimeSlider"/>
- <text name="EnvCloudText">
- Skydække
- </text>
- <slider label="" name="EnvCloudSlider"/>
- <text name="EnvWaterColorText">
- Farve på
-vand
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Klik for at åbne farvevælger"/>
- <text name="EnvWaterFogText">
- Tåge på
-vand
- </text>
- <slider label="" name="EnvWaterFogSlider"/>
- <button label="Benyt tid fra estate" name="EnvUseEstateTimeButton"/>
- <button label="Avanceret himmel" name="EnvAdvancedSkyButton"/>
- <button label="Avanceret vand" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
index 016e5af378..f7eda56e48 100644
--- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="DEBUG INDSTILLINGER">
<radio_group name="boolean_combo">
- <radio_item label="SANDT" name="TRUE" value="sand"/>
- <radio_item label="FALSK" name="FALSE" value=""/>
+ <radio_item label="SANDT" name="TRUE" />
+ <radio_item label="FALSK" name="FALSE" />
</radio_group>
<color_swatch label="Farve" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml
deleted file mode 100644
index aedd1b442c..0000000000
--- a/indra/newview/skins/default/xui/da/floater_water.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="AVANCERET OPSÆTNING AF VAND">
- <text name="KeyFramePresetsText">
- Vand opsætninger:
- </text>
- <button label="Ny" label_selected="Ny" name="WaterNewPreset"/>
- <button label="Gem" label_selected="Gem" name="WaterSavePreset"/>
- <button label="Slet" label_selected="Slet" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="INDSTILLINGER" name="Settings">
- <text name="BHText">
- Vandtåge farve
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Klik for at åbne farvevælger"/>
- <text name="WaterFogDensText">
- Tåge tæthedskarakteristik
- </text>
- <button label="?" name="WaterFogDensityHelp"/>
- <slider label="" name="WaterFogDensity"/>
- <text name="WaterUnderWaterFogModText">
- Tilretning undervandståge
- </text>
- <button label="?" name="WaterUnderWaterFogModHelp"/>
- <slider label="" name="WaterUnderWaterFogMod"/>
- <text name="BDensText">
- Lille bølge reflektionsskala
- </text>
- <button label="?" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <slider label="" name="WaterNormalScaleX"/>
- <slider label="" name="WaterNormalScaleY"/>
- <slider label="" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Spredningsskala
- </text>
- <button label="?" name="WaterFresnelScaleHelp"/>
- <slider label="" name="WaterFresnelScale"/>
- <text name="FresnelOffsetText">
- Spredning offset
- </text>
- <button label="?" name="WaterFresnelOffsetHelp"/>
- <slider label="" name="WaterFresnelOffset"/>
- <text name="DensMultText">
- Lysbrydning fra oven
- </text>
- <button label="?" name="WaterScaleAboveHelp"/>
- <slider label="" name="WaterScaleAbove"/>
- <text name="WaterScaleBelowText">
- Lysbrydning fra neden
- </text>
- <button label="?" name="WaterScaleBelowHelp"/>
- <slider label="" name="WaterScaleBelow"/>
- <text name="MaxAltText">
- Udviskning
- </text>
- <button label="?" name="WaterBlurMultiplierHelp"/>
- <slider label="" name="WaterBlurMult"/>
- </panel>
- <panel label="BILLEDE" name="Waves">
- <text name="BHText">
- Retning for store bølger
- </text>
- <button label="?" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <slider label="" name="WaterWave1DirX"/>
- <slider label="" name="WaterWave1DirY"/>
- <text name="BHText2">
- Retning for små bølger
- </text>
- <button label="?" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <slider label="" name="WaterWave2DirX"/>
- <slider label="" name="WaterWave2DirY"/>
- <text name="BHText3">
- Tekstur map
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- <texture_picker label="" name="WaterNormalMap"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
deleted file mode 100644
index 56f94b24e9..0000000000
--- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL">
- <text name="KeyFramePresetsText">
- Faste indstillinger:
- </text>
- <button label="Ny" label_selected="Ny" name="WLNewPreset" />
- <button label="Gem" label_selected="Gem" name="WLSavePreset" />
- <button label="Slet" label_selected="Slet" name="WLDeletePreset" />
- <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton" />
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFÆRE" name="Atmosphere">
- <text name="BHText">
- Blå - horisont
- </text>
- <button label="?" name="WLBlueHorizonHelp" />
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <slider label="" name="WLBlueHorizonR" />
- <slider label="" name="WLBlueHorizonG" />
- <slider label="" name="WLBlueHorizonB" />
- <slider label="" name="WLBlueHorizonI" />
- <text name="BDensText">
- Dis - horisont
- </text>
- <button label="?" name="WLHazeHorizonHelp" />
- <slider label="" name="WLHazeHorizon" />
- <text name="BDensText2">
- Blå - tæthed
- </text>
- <button label="?" name="WLBlueDensityHelp" />
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <slider label="" name="WLBlueDensityR" />
- <slider label="" name="WLBlueDensityG" />
- <slider label="" name="WLBlueDensityB" />
- <slider label="" name="WLBlueDensityI" />
- <text name="HDText">
- Dis - intensitet
- </text>
- <button label="?" name="WLHazeDensityHelp" />
- <slider label="" name="WLHazeDensity" />
- <text name="DensMultText">
- Densitet faktor
- </text>
- <button label="?" name="WLDensityMultHelp" />
- <slider label="" name="WLDensityMult" />
- <text name="WLDistanceMultText">
- Distance faktor
- </text>
- <button label="?" name="WLDistanceMultHelp" />
- <slider label="" name="WLDistanceMult" />
- <text name="MaxAltText">
- Maximum højde
- </text>
- <button label="?" name="WLMaxAltitudeHelp" />
- <slider label="" name="WLMaxAltitude" />
- </panel>
- <panel label="LYS" name="Lighting">
- <text name="SLCText">
- Sol/MÃ¥ne farve
- </text>
- <button label="?" name="WLSunlightColorHelp" />
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLSunlightR" />
- <slider label="" name="WLSunlightG" />
- <slider label="" name="WLSunlightB" />
- <slider label="" name="WLSunlightI" />
- <text name="TODText">
- Sol/MÃ¥ne position
- </text>
- <button label="?" name="WLTimeOfDayHelp" />
- <slider label="" name="WLSunAngle" />
- <text name="WLAmbientText">
- Omgivende
- </text>
- <button label="?" name="WLAmbientHelp" />
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <slider label="" name="WLAmbientR" />
- <slider label="" name="WLAmbientG" />
- <slider label="" name="WLAmbientB" />
- <slider label="" name="WLAmbientI" />
- <text name="WLEastAngleText">
- Øst vinkel
- </text>
- <button label="?" name="WLEastAngleHelp" />
- <slider label="" name="WLEastAngle" />
- <text name="SunGlowText">
- Sol glød
- </text>
- <button label="?" name="WLSunGlowHelp" />
- <slider label="Fokus " name="WLGlowB" />
- <slider label="Størr. " name="WLGlowR" />
- <text name="SceneGammaText">
- Lysintensitet (gamma)
- </text>
- <button label="?" name="WLSceneGammaHelp" />
- <slider label="" name="WLGamma" />
- <text name="WLStarText">
- Stjerne intensitet
- </text>
- <button label="?" name="WLStarBrightnessHelp" />
- <slider label="" name="WLStarAlpha" />
- </panel>
- <panel label="SKYER" name="Clouds">
- <text name="WLCloudColorText">
- Farve på skyer
- </text>
- <button label="?" name="WLCloudColorHelp" />
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLCloudColorR" />
- <slider label="" name="WLCloudColorG" />
- <slider label="" name="WLCloudColorB" />
- <slider label="" name="WLCloudColorI" />
- <text name="WLCloudColorText2">
- Skyer XY/Tæthed
- </text>
- <button label="?" name="WLCloudDensityHelp" />
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- T
- </text>
- <slider label="" name="WLCloudX" />
- <slider label="" name="WLCloudY" />
- <slider label="" name="WLCloudDensity" />
- <text name="WLCloudCoverageText">
- Skydække
- </text>
- <button label="?" name="WLCloudCoverageHelp" />
- <slider label="" name="WLCloudCoverage" />
- <text name="WLCloudScaleText">
- Skystørrelse
- </text>
- <button label="?" name="WLCloudScaleHelp" />
- <slider label="" name="WLCloudScale" />
- <text name="WLCloudDetailText">
- Sky detaljer(XY/tæthed)
- </text>
- <button label="?" name="WLCloudDetailHelp" />
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- T
- </text>
- <slider label="" name="WLCloudDetailX" />
- <slider label="" name="WLCloudDetailY" />
- <slider label="" name="WLCloudDetailDensity" />
- <text name="WLCloudScrollXText">
- Sky drift X
- </text>
- <button label="?" name="WLCloudScrollXHelp" />
- <check_box label="LÃ¥s" name="WLCloudLockX" />
- <slider label="" name="WLCloudScrollX" />
- <text name="WLCloudScrollYText">
- Sky drift Y
- </text>
- <button label="?" name="WLCloudScrollYHelp" />
- <check_box label="LÃ¥s" name="WLCloudLockY" />
- <slider label="" name="WLCloudScrollY" />
- <check_box label="Benyt simple skyer" name="DrawClassicClouds" />
- <button label="?" name="WLClassicCloudsHelp" />
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index d352312d15..c2f7d26dc9 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 @@
<menu_item_check label="Fjern kamerabegrænsninger" name="Disable Camera Distance"/>
<menu_item_check label="Højopløsningsfoto" name="HighResSnapshot"/>
<menu_item_check label="Lydløse fotos til disk" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Komprimér fotos til disk" name="CompressSnapshotsToDisk"/>
<menu label="Værktøjer til ydelse" name="Performance Tools">
<menu_item_call label="Lag meter" name="Lag Meter"/>
<menu_item_check label="Statistik bjælke" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 4c0fbd280b..3ccdfc036a 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -454,6 +454,7 @@ Købsprisen for dette land er ikke refunderet til ejeren. Hvis en dedikeret parv
Dediker disse [AREA] m² land til gruppen &apos;[GROUP_NAME]&apos;?
</notification>
<notification name="ErrorMessage">
+ [ERROR_MESSAGE]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AvatarMovedDesired">
@@ -1334,7 +1335,7 @@ Prøv igen om lidt.
</notification>
<notification name="ObjectGiveItem">
Et object med navnet &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] har givet dig denne [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Behold"/>
<button name="Discard" text="Smid væk"/>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
index fd287b1a0a..3036f30240 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Gem valgte" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Annullér" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml
index 925492b2d7..66a128cd13 100644
--- a/indra/newview/skins/default/xui/da/panel_people.xml
+++ b/indra/newview/skins/default/xui/da/panel_people.xml
@@ -66,16 +66,16 @@ Leder du efter nogen at være sammen med? Prøv [secondlife:///app/worldmap Verd
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Ã…ben session med privat besked (IM)"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Kald" name="call_btn" tool_tip="Opkald til denne beboer"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index fe8ca69f34..c555f2fb09 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="Vis flere valg"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profil" name="profile_btn" tool_tip="Vis profil for sted"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 68b861fe92..165d47c931 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -1209,9 +1209,6 @@ Prøv venligst om lidt igen.
<string name="InvFolder My Inventory">
Min beholdning
</string>
- <string name="InvFolder My Favorites">
- Mine favoritter
- </string>
<string name="InvFolder Library">
Bibliotek
</string>
@@ -1270,10 +1267,10 @@ Prøv venligst om lidt igen.
Bevægelser
</string>
<string name="InvFolder Favorite">
- Favoritter
+ Mine favoritter
</string>
<string name="InvFolder favorite">
- Favoritter
+ Mine favoritter
</string>
<string name="InvFolder Current Outfit">
Nuværende sæt
@@ -1838,7 +1835,7 @@ Prøv venligst om lidt igen.
<string name="RegionNoCovenantOtherOwner">
Der er ingen regler for dette estate. Land på dette estate sælges af estate ejeren, ikke af Linden Lab. Kontakt venligst estate ejeren for detaljer om salg.
</string>
- <string name="covenant_last_modified" value="Sidst rettet:"/>
+ <string name="covenant_last_modified" value="Sidst rettet: "/>
<string name="none_text" value=" (ingen) "/>
<string name="never_text" value=" (aldrig) "/>
<string name="GroupOwned">
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index f0fa4386d2..c65dc5f41d 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -133,12 +133,12 @@
0
</text>
<button label="Land kaufen" label_selected="Land kaufen..." name="Buy Land..."/>
+ <button label="Linden-Verkauf" label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
<button label="Skriptinfo" name="Scripts..."/>
<button label="Für Gruppe kaufen" label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
<button label="Pass kaufen" label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
<button label="Land aufgeben" label_selected="Land aufgeben..." name="Abandon Land..."/>
<button label="Land in Besitz nehmen" label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
- <button label="Linden-Verkauf" label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
</panel>
<panel label="VERTRAG" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -309,6 +309,9 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<panel.string name="push_restrict_region_text">
Kein Stoßen (regional)
</panel.string>
+ <panel.string name="see_avs_text">
+ Auf dieser Parzelle Einwohner sehen und mit ihnen chatten
+ </panel.string>
<text name="allow_label">
Anderen Einwohnern gestatten:
</text>
@@ -371,6 +374,10 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <text name="allow_label5">
+ Einwohnern auf anderen Parzellen Folgendes gestatten:
+ </text>
+ <check_box label="Avatare sehen" name="SeeAvatarsCheck" tool_tip="Gestattet sowohl Einwohnern auf anderen Parzellen, Einwohner auf dieser Parzelle zu sehen und mit ihnen zu chatten, als auch Ihnen, diese Einwohner auf anderen Parzellen zu sehen und mit ihnen zu chatten."/>
<text name="landing_point">
Landepunkt: [LANDING]
</text>
@@ -427,6 +434,11 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Sound:
</text>
<check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Avatarsounds:
+ </text>
+ <check_box label="Jeder" name="all av sound check"/>
+ <check_box label="Gruppe" name="group av sound check"/>
<text name="Voice settings:">
Voice:
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index e90eb2c00b..939fd5dee4 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="RASTER-OPTIONEN">
- <spinner label="Raster-Einheiten (Meter)" name="GridResolution"/>
- <spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
+ <floater.string name="grid_screen_text">
+ Bildschirm
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Lokal
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Welt
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referenz
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anhang
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Rasteropazität">
+ Modus
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Wählen Sie das gewünschte Rasterlineal zum Positionieren des Objekts aus.">
+ <combo_box.item label="Globales Raster" name="World"/>
+ <combo_box.item label="Lokales Raster" name="Local"/>
+ <combo_box.item label="Referenzraster" name="Reference"/>
+ </combo_box>
+ <spinner label="Einheiten (m)" name="GridResolution"/>
+ <spinner label="Rastergröße (meter)" name="GridDrawSize"/>
<check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
<check_box label="Ãœberschneidungen anzeigen" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Raster-Deckkraft">
diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
deleted file mode 100644
index 8599737106..0000000000
--- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="TAGESZYKLUS-EDITOR">
- <tab_container name="Day Cycle Tabs">
- <panel label="Tageszyklus" name="Day Cycle">
- <button label=" ?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 24:00
- </text>
- <text name="WL3am">
- 03:00
- </text>
- <text name="WL6am">
- 06:00
- </text>
- <text name="WL9amHash">
- 09:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 24:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Key hinzu" label_selected="Key hinzu" name="WLAddKey"/>
- <button label="Key löschen" label_selected="Key löschen" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Keyframe-Einstellungen:
- </text>
- <text name="WLCurKeyTimeText">
- Key-Zeit:
- </text>
- <spinner label="Std." name="WLCurKeyHour"/>
- <spinner label="Min." name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Key-Voreinstellung:
- </text>
- <combo_box label="Voreinstellung" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Einrasten:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Zykluslänge:
- </text>
- <spinner label="Std." name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Sek." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Vorschau:
- </text>
- <button label="Start" label_selected="Start" name="WLAnimSky"/>
- <button label="Stopp" label_selected="Stopp" name="WLStopAnimSky"/>
- <button label="Grundbesitzzeit verw" label_selected="Zur Grundbesitzzeit" name="WLUseLindenTime"/>
- <button label="Testtag speichern" label_selected="Testtag speichern" name="WLSaveDayCycle"/>
- <button label="Testtag laden" label_selected="Testtag laden" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..cc14ce640d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="UMGEB.VOREINST. LÖSCHEN">
+ <string name="title_water">
+ Wasser-Voreinstellung löschen
+ </string>
+ <string name="title_sky">
+ Himmel-Voreinstellung löschen
+ </string>
+ <string name="title_day_cycle">
+ Tageszyklus löschen
+ </string>
+ <string name="label_water">
+ Voreinstellung:
+ </string>
+ <string name="label_sky">
+ Voreinstellung:
+ </string>
+ <string name="label_day_cycle">
+ Tageszyklus:
+ </string>
+ <string name="msg_confirm_deletion">
+ Möchten Sie die ausgewählte Voreinstellung wirklich löschen?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Eine Voreinstellung, auf die sich ein Tageszyklus bezieht, kann nicht gelöscht werden.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="label">
+ Voreinstellung:
+ </text>
+ <button label="Löschen" name="delete"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..8b29428c24
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Tageszyklus bearbeiten">
+ <string name="title_new">
+ Neuen Tageszyklus erstellen
+ </string>
+ <string name="title_edit">
+ Tageszyklus bearbeiten
+ </string>
+ <string name="hint_new">
+ Geben Sie einen Namen für den Tageszyklus ein, passen Sie die Steuerungen an, um den Tageszyklus zu erstellen, und klicken Sie auf „Speichern“.
+ </string>
+ <string name="hint_edit">
+ Um den Tageszyklus zu bearbeiten, passen Sie die Steuerungen unten an und klicken Sie auf „Speichern“.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="label">
+ Name der Voreinstellung:
+ </text>
+ <text name="note">
+ Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
+ </text>
+ <text name="hint_item1">
+ - Klicken Sie auf eine Registerkarte, um die Himmeleinstellungen und die Uhrzeit zu bearbeiten.
+ </text>
+ <text name="hint_item2">
+ - Klicken und ziehen Sie die Registerkarten, um die Ãœbergangszeiten einzustellen.
+ </text>
+ <text name="hint_item3">
+ - Anhand des Scrubbers können Sie eine Vorschau Ihres Tageszyklus anzeigen.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Schlüssel hinzufügen" label_selected="Schlüssel hinzufügen" name="WLAddKey"/>
+ <button label="Schlüssel löschen" label_selected="Schlüssel löschen" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 0:00
+ </text>
+ <text name="WL3am">
+ 3:00
+ </text>
+ <text name="WL6am">
+ 6:00
+ </text>
+ <text name="WL9amHash">
+ 9:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL3pm">
+ 15:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL9pm">
+ 21:00
+ </text>
+ <text name="WL12am2">
+ 0:00
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Himmeleinstellung:
+ </text>
+ <combo_box label="Voreinstellung" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Uhrzeit:
+ </text>
+ <time name="time" value="6:00"/>
+ <check_box label="Zu meinem neuen Tageszyklus machen" name="make_default_cb"/>
+ <button label="Speichern" name="save"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..ea4c5f7ebc
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Himmel-Voreinstellung bearbeiten">
+ <string name="title_new">
+ Neue Himmel-Voreinstellung erstellen
+ </string>
+ <string name="title_edit">
+ Himmel-Voreinstellung bearbeiten
+ </string>
+ <string name="hint_new">
+ Geben Sie einen Namen für die Voreinstellung ein, passen Sie die Steuerungen an, um die Voreinstellung zu erstellen, und klicken Sie dann auf „Speichern“.
+ </string>
+ <string name="hint_edit">
+ Um Ihre Himmel-Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="hint">
+ Um Ihre Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </text>
+ <text name="label">
+ Name der Voreinstellung:
+ </text>
+ <text name="note">
+ Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSPHÄRE" name="Atmosphere">
+ <text name="BHText">
+ Blauer Horizont
+ </text>
+ <text name="BDensText">
+ Horizonttrübung
+ </text>
+ <text name="BDensText2">
+ Farbintensität
+ </text>
+ <text name="HDText">
+ Trübungsintensität
+ </text>
+ <text name="DensMultText">
+ Dichtemultiplikator
+ </text>
+ <text name="WLDistanceMultText">
+ Entfernungsmultiplikator
+ </text>
+ <text name="MaxAltText">
+ Max. Höhe
+ </text>
+ </panel>
+ <panel label="BELEUCHTUNG" name="Lighting">
+ <text name="SLCText">
+ Sonne/Mond-Farbe
+ </text>
+ <text name="WLAmbientText">
+ Umgebung
+ </text>
+ <text name="SunGlowText">
+ Sonnenleuchtkraft
+ </text>
+ <slider label="Fokus" name="WLGlowB"/>
+ <slider label="Größe" name="WLGlowR"/>
+ <text name="WLStarText">
+ Sternenleuchtkraft
+ </text>
+ <text name="SceneGammaText">
+ Gamma in Szene
+ </text>
+ <text name="TODText">
+ Sonne/Mond-Stand
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 0:00
+ </text>
+ <text name="WL6am">
+ 3:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL12am2">
+ 0:00
+ </text>
+ <time name="WLDayTime" value="6:00"/>
+ <text name="WLEastAngleText">
+ Ostausrichtung
+ </text>
+ </panel>
+ <panel label="WOLKEN" name="Clouds">
+ <text name="WLCloudColorText">
+ Wolkenfarbe
+ </text>
+ <text name="WLCloudColorText2">
+ Wolken-XY/Dichte
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Wolkendichte
+ </text>
+ <text name="WLCloudScaleText">
+ Wolkenskalierung
+ </text>
+ <text name="WLCloudDetailText">
+ Wolkendetails (XY/Dichte)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Wolkenbewegung X
+ </text>
+ <check_box label="Sperren" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Wolkenbewegung Y
+ </text>
+ <check_box label="Sperren" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Diese Voreinstellung zu meiner neuen Himmeleinstellung machen" name="make_default_cb"/>
+ <button label="Speichern" name="save"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..9b9d5e7d77
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Wasser-Voreinstellung bearbeiten">
+ <string name="title_new">
+ Neue Wasser-Voreinstellung erstellen
+ </string>
+ <string name="title_edit">
+ Wasser-Voreinstellung bearbeiten
+ </string>
+ <string name="hint_new">
+ Geben Sie einen Namen für die Voreinstellung ein, passen Sie die Steuerungen an, um die Voreinstellung zu erstellen, und klicken Sie dann auf „Speichern“.
+ </string>
+ <string name="hint_edit">
+ Um Ihre Wasser-Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="hint">
+ Um Ihre Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </text>
+ <text name="label">
+ Name der Voreinstellung:
+ </text>
+ <text name="note">
+ Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Trübungsfarbe
+ </text>
+ <text name="water_fog_density_label">
+ Exponent für Trübungsdichte
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modifikator für Wassertrübung
+ </text>
+ <text name="BHText">
+ Richtung für große Wellen
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Reflexionswellengröße
+ </text>
+ <text name="HDText">
+ Fresnel-Skalierung
+ </text>
+ <text name="FresnelOffsetText">
+ Fresnel-Versatz
+ </text>
+ <text name="BHText2">
+ Richtung für kleine Wellen
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Brechungsstärke oben
+ </text>
+ <text name="WaterScaleBelowText">
+ Brechungsstärke unten
+ </text>
+ <text name="MaxAltText">
+ Mischungsmultiplikator
+ </text>
+ <text name="BHText3">
+ Normal-Map
+ </text>
+ </panel>
+ <check_box label="Diese Voreinstellung zu meiner neuen Wassereinstellung machen" name="make_default_cb"/>
+ <button label="Speichern" name="save"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml
deleted file mode 100644
index 0c78909108..0000000000
--- a/indra/newview/skins/default/xui/de/floater_env_settings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="UMWELT-EDITOR">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Tageszeit
- </text>
- <text name="EnvTimeText2">
- 12:00
- </text>
- <text name="EnvCloudText">
- Wolkendecke
- </text>
- <text name="EnvWaterColorText">
- Wasserfarbe
- </text>
- <color_swatch name="EnvWaterColor" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
- <text name="EnvWaterFogText">
- Wasser-
-trübung
- </text>
- <button label="Grundbesitzzeit verw." name="EnvUseEstateTimeButton"/>
- <button label="Himmel (erweitert)" name="EnvAdvancedSkyButton"/>
- <button label="Wasser (erweitert)" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_environment_settings.xml b/indra/newview/skins/default/xui/de/floater_environment_settings.xml
new file mode 100644
index 0000000000..946416980a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="UMGEBUNGSEINSTELLUNGEN">
+ <text name="note">
+ Anhand der Optionen unten können Sie die Umgebungseinstellungen für Ihren Viewer anpassen.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Regionseinstellungen verwenden" name="use_region_settings"/>
+ <radio_item label="Meine Umgebung anpassen" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Hinweis: Ihre benutzerdefinierten Einstellungen sind für andere Benutzer nicht sichtbar.
+ </text>
+ <text name="water_settings_title">
+ Wassereinstellung
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Himmel / Tageszyklus
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Fester Himmel" name="my_sky_settings"/>
+ <radio_item label="Tageszyklus" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml
index 83c51132ee..330893c326 100644
--- a/indra/newview/skins/default/xui/de/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inaktiv
</string>
+ <string name="status_parse_error">
+ DAE-Parsing-Fehler. Details siehe Protokoll.
+ </string>
<string name="status_reading_file">
Laden...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen.
</string>
+ <string name="bad_element">
+ Fehler: ungültiges Element.
+ </string>
<string name="high">
Hoch
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Vereinfachung läuft...
</string>
+ <string name="tbd">
+ noch nicht festgelegt
+ </string>
<text name="name_label">
Name:
</text>
@@ -74,23 +83,26 @@
Detailstufe: Niedrigste
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
- <text name="physics cost">
- Physikkosten: [COST]
- </text>
- <text name="upload fee">
- Gebühr für Hochladen: --
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ ACHTUNG:
+ </text>
+ <text name="warning_message">
+ Sie können dieses Modell nicht auf die Second Life-Server hochladen. [[VURL] Weitere Infos], wie Sie das Hochladen von Netzmodellen freischalten können.
+ </text>
+ <text name="weights_text">
+ Herunterladen:
+Physik:
+Server:
+
+Prim-Äquivalenz:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Standardwerte" name="reset_btn" tool_tip="Standardwerte wiederherstellen"/>
- <button label="Hochladen" name="ok_btn" tool_tip="An Simulator hochladen"/>
- <button label="Abbrechen" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Detailstufe" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0,0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Gebühr für Hochladen: [FEE] L$
+ </text>
+ <button label="Auf Standardwerte setzen" name="reset_btn" tool_tip="Auf Standardwerte setzen"/>
+ <button label="Gewichte und Gebühr berechnen" name="calculate_btn" tool_tip="Gewichte und Gebühr berechnen"/>
+ <button label="Hochladen" name="ok_btn" tool_tip="An Simulator hochladen"/>
+ <button label="Abbrechen" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_model_wizard.xml b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
index 2c7b45906e..7103757b40 100644
--- a/indra/newview/skins/default/xui/de/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="ASSISTENT ZUM HOCHLADEN VON MODELLEN">
<button label="5. Hochladen" name="upload_btn"/>
<button label="4. Überprüfen" name="review_btn"/>
- <button label="3. Physik" name="physics2_btn"/>
<button label="3. Physik" name="physics_btn"/>
<button label="2. Optimieren" name="optimize_btn"/>
<button label="1. Datei auswählen" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Modell hochladen
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Modelldatei auswählen
</text>
</panel>
- <text name="description">
- Mit diesem Assistenten können Sie Netzmodelle in Second Life hochladen. Geben Sie zuerst die Datei mit dem zu importierenden Modell an. Second Life unterstützt COLLADA-Dateien (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Dateiname:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Fortgeschrittene Benutzer: Wenn Sie bereits mit Tools zur Erstellung von 3D-Inhalten vertraut sind, können Sie den erweiterten Uploader verwenden.
+ </text>
+ <button label="Auf Erweitert wechseln" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Hochzuladende Modelldatei auswählen
</text>
<button label="Durchsuchen..." label_selected="Durchsuchen..." name="browse"/>
+ <text name="support_collada_text">
+ Second Life unterstützt COLLADA-Dateien (.dae).
+ </text>
+ <text name="dimensions_label">
+ Abmessungen (m):
+ </text>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ ACHTUNG:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Sie können den letzten Schritt nicht abschließen (Modell auf Second Life-Server hochladen). [secondlife:///app/floater/learn_more Weitere Infos], wie Sie Ihr Konto zum Hochladen von Netzmodellen einrichten.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Optimieren
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Modell optimieren
</text>
</panel>
- <text name="description">
- Dieser Assistent hat Ihr Modell optimiert, um die Leistung zu erhöhen. Sie können die Optimierungsergebnisse unten ändern oder zum Fortfahren auf „Weiter“ klicken.
+ <text name="optimize_hint">
+ Wir haben das Modell auf Leistung optimiert. Sie können es bei Bedarf weiter anpassen.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Detailstufe generieren
+ </text>
<text name="high_detail_text">
Detailstufe generieren: Hoch
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Modellvorschau:
+ <text name="optimize_performance_text">
+ Leistung
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
- <combo_item name="high">
- Hoch
+ <text name="optimize_faster_rendering_text">
+ Schnellere Darstellung
+Weniger Details
+Niedrigeres Prim-Gewicht
+ </text>
+ <text name="optimize_accuracy_text">
+ Genauigkeit
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Langsamere Darstellung
+Mehr Details
+Höheres Prim-Gewicht
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Geometrie neu berechnen" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Geometrievorschau
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
+ <combo_item name="preview_lod_high">
+ Viel Details
</combo_item>
- <combo_item name="medium">
- Mittel
+ <combo_item name="preview_lod_medium">
+ Mittlere Details
</combo_item>
- <combo_item name="low">
- Niedrig
+ <combo_item name="preview_lod_low">
+ Wenig Details
</combo_item>
- <combo_item name="lowest">
- Niedrigste
+ <combo_item name="preview_lod_lowest">
+ Wenigste Details
</combo_item>
</combo_box>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Physik
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Physik anpassen
</text>
</panel>
- <text name="description">
- Der Assistent erstellt eine physische Form, die die Interaktionen des Objekts mit anderen Objekten und Avataren bestimmt. Setzen Sie den Schieber auf die Detailstufe, die für Ihr Objekt am besten geeignet ist:
+ <text name="physics_hint">
+ Wir erstellen eine Form für die Außenhülle des Modells. Passen Sie die Detailstufe der Form wie für den beabsichtigten Zweck erforderlich an.
</text>
- <panel name="content">
- <text name="streaming cost">
- Ressourcenkosten: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Leistung
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Physik
+ <text name="physics_faster_rendering_text">
+ Schnellere Darstellung
+Weniger Details
+Niedrigeres Prim-Gewicht
</text>
- </panel>
- <text name="description">
- Überprüfen Sie die physische Form unten und klicken Sie dann auf „Weiter“. Um die physische Form zu ändern, klicken Sie auf „Zurück“.
- </text>
- <panel name="content">
- <text name="lod_label">
- Modellvorschau:
+ <text name="physics_accuracy_text">
+ Genauigkeit
+ </text>
+ <text name="physics_slower_dendering_text">
+ Langsamere Darstellung
+Mehr Details
+Höheres Prim-Gewicht
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
- <combo_item name="high">
- Hoch
+ <text name="physics_example_1">
+ Beispiele:
+Mobile Objekte
+Fliegende Objekte
+Fahrzeuge
+ </text>
+ <text name="physics_example_2">
+ Beispiele:
+Kleine statische Objekte
+Objekte mit weniger Details
+Einfache Möbel
+ </text>
+ <text name="physics_example_3">
+ Beispiele:
+Statische Objekte
+Objekte mit viel Details
+Gebäude
+ </text>
+ <button label="Physik neu berechnen" name="recalculate_physics_btn"/>
+ <button label="Neu berechnen..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Physikvorschau
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
+ <combo_item name="preview_lod2_high">
+ Viel Details
</combo_item>
- <combo_item name="medium">
- Mittel
+ <combo_item name="preview_lod2_medium">
+ Mittlere Details
</combo_item>
- <combo_item name="low">
- Niedrig
+ <combo_item name="preview_lod2_low">
+ Wenig Details
</combo_item>
- <combo_item name="lowest">
- Niedrigste
+ <combo_item name="preview_lod2_lowest">
+ Wenigste Details
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Überprüfen
</text>
</panel>
- <text name="description">
- Überprüfen Sie die Details unten und klicken Sie dann auf „Hochladen“, um das Modell hochzuladen. Die Kosten werden von Ihrem L$-Kontostand abgezogen.
- </text>
- <panel name="content">
- <text name="lod_label">
- Modellvorschau:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Auswirkung auf Parzelle/Region: Prim-Äquivalenzwert [EQUIV]
</text>
- <combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
- <combo_item name="high">
- Hoch
- </combo_item>
- <combo_item name="medium">
- Mittel
- </combo_item>
- <combo_item name="low">
- Niedrig
- </combo_item>
- <combo_item name="lowest">
- Niedrigste
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ Die für das Hochladen anfallende Gebühr in Höhe von [FEE] L$ wird von Ihrem Konto abgebucht.
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Durch Klicken auf „Hochladen“ bestätigen Sie, dass Sie die erforderlichen Rechte für das im Modell enthaltene Material besitzen.
</text>
</panel>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
- <text name="physics cost">
- Physikkosten: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Upload abgeschlossen
</text>
</panel>
- <text name="description">
- Herzlichen Glückwunsch! Ihr Modell wurde erfolgreich hochgeladen. Sie finden das Modell im Objektordner Ihres Inventars.
+ <text name="model_uploaded_text">
+ Ihr Modell wurde hochgeladen.
+ </text>
+ <text name="inventory_text">
+ Sie finden das Modell im Objektordner Ihres Inventars.
+ </text>
+ <text name="charged_fee">
+ Von Ihrem Konto wurden [FEE] L$ abgebucht.
</text>
</panel>
<button label="&lt;&lt; Zurück" name="back"/>
<button label="Weiter &gt;&gt;" name="next"/>
+ <button label="Gewichte und Gebühr berechnen &gt;&gt;" name="calculate"/>
+ <button label="Berechnen..." name="calculating"/>
<button label="Hochladen" name="upload" tool_tip="An Simulator hochladen"/>
<button label="Abbrechen" name="cancel"/>
<button label="Schließen" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inaktiv
</string>
+ <string name="status_parse_error">
+ DAE-Parsing-Fehler. Details siehe Protokoll.
+ </string>
<string name="status_reading_file">
Laden...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen.
</string>
+ <string name="bad_element">
+ Fehler: ungültiges Element.
+ </string>
<string name="high">
Hoch
</string>
diff --git a/indra/newview/skins/default/xui/de/floater_search.xml b/indra/newview/skins/default/xui/de/floater_search.xml
index d44ad44aea..bd39bf2bce 100644
--- a/indra/newview/skins/default/xui/de/floater_search.xml
+++ b/indra/newview/skins/default/xui/de/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="SUCHEN">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Wird geladen...
</floater.string>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 338b609343..49b133e10f 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Klicken und ziehen, um Land auszuwählen
</floater.string>
- <floater.string name="grid_screen_text">
- Bildschirm
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] Objekte ([PRIM_COUNT] Prims [PE_STRING]) ausgewählt
</floater.string>
- <floater.string name="grid_local_text">
- Lokal
- </floater.string>
- <floater.string name="grid_world_text">
- Welt
- </floater.string>
- <floater.string name="grid_reference_text">
- Referenz
- </floater.string>
- <floater.string name="grid_attachment_text">
- Anhang
+ <floater.string name="status_selectprimequiv">
+ , Prim-Äquivalenz [SEL_WEIGHT]
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
@@ -66,20 +57,12 @@
<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
<button label="Link" name="link_btn" width="30"/>
<button label="Verknüpfung auflösen" name="unlink_btn" width="126"/>
- <text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für dieses Objekt" left_pad="0">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Beide Seiten dehnen" name="checkbox uniform label">
Beide Seiten dehnen
</text>
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/>
- <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="15"/>
- <combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus.">
- <combo_box.item label="Globales Raster" name="World"/>
- <combo_box.item label="Lokales Raster" name="Local"/>
- <combo_box.item label="Referenzraster" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Einrasten" name="checkbox snap to grid" top_pad="15"/>
<button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Mehr Raster-Optionen anzeigen"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -119,23 +102,11 @@
Stärke
</text>
<button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land bearbeiten"/>
- <text name="obj_count">
- Objekte: [COUNT]
- </text>
- <text name="prim_count">
- Primitive: [COUNT]
- </text>
- <text name="linked_set_count">
- Verknüpfte Sätze: [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Kosten der gegenwärtig ausgewählten verknüpften Sätze als [Prims],[Komplexität der Physik]">
- Kosten: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Objekte: [COUNT]
+ <text name="selection_empty">
+ Nichts ausgewählt.
</text>
- <text name="object_cost" tool_tip="Kosten der gegenwärtig ausgewählten Objekte als [Prims] / [Komplexität der Physik]">
- Kosten: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Physikgewicht [PHYS_WEIGHT], Darstellungskosten [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs">
<panel label="Allgemein" name="General">
@@ -356,7 +327,6 @@
<combo_box.item label="Torus" name="Torus"/>
<combo_box.item label="Fläche" name="Plane"/>
<combo_box.item label="Zylinder" name="Cylinder"/>
- <combo_box.item label="Netz" name="Mesh"/>
</combo_box>
</panel>
<panel label="Eigenschaften" name="Features">
@@ -408,7 +378,7 @@
</combo_box>
<spinner label="Schwerkraft" name="Physics Gravity"/>
<spinner label="Reibung" name="Physics Friction"/>
- <spinner label="Dichte" name="Physics Density"/>
+ <spinner label="Dichte in 100 kg/m^3" name="Physics Density"/>
<spinner label="Restitution" name="Physics Restitution"/>
</panel>
<panel label="Textur" name="Texture">
diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
index 21031cd556..3dc0fc2322 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Neu!)
</string>
+ <string name="effect_Arena">
+ Arena
+ </string>
+ <string name="effect_Beast">
+ Bestie
+ </string>
+ <string name="effect_Buff">
+ Muskulös
+ </string>
+ <string name="effect_Buzz">
+ Buzz
+ </string>
+ <string name="effect_Camille">
+ Camille
+ </string>
+ <string name="effect_Creepy">
+ Unheimlich
+ </string>
+ <string name="effect_CreepyBot">
+ UnheimlicherBot
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ TieferBot
+ </string>
+ <string name="effect_Demon">
+ Dämon
+ </string>
+ <string name="effect_Flirty">
+ Kokett
+ </string>
+ <string name="effect_Foxy">
+ Attraktiv
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Bonus_Halloween_2010
+ </string>
+ <string name="effect_Helium">
+ Helium
+ </string>
+ <string name="effect_Husky">
+ Rauchig
+ </string>
+ <string name="effect_Intercom">
+ Intercom
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Alptraum
+ </string>
+ <string name="effect_PopBot">
+ PopBot
+ </string>
+ <string name="effect_Rachel">
+ Rachel
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Roboter
+ </string>
+ <string name="effect_Roxanne">
+ Roxanne
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samantha
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Shorty
+ </string>
+ <string name="effect_Sneaky">
+ Hinterhältig
+ </string>
+ <string name="effect_Stallion">
+ Hengst
+ </string>
+ <string name="effect_Sultry">
+ Feurig
+ </string>
+ <string name="effect_Thunder">
+ Donner
+ </string>
+ <string name="effect_Vixen">
+ Erotisch
+ </string>
+ <string name="effect_WhinyBot">
+ JammernderBot
+ </string>
<text name="preview_text">
Zur Vorschau
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml
deleted file mode 100644
index bb0dd9c75d..0000000000
--- a/indra/newview/skins/default/xui/de/floater_water.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ERWEITERTER WASSER-EDITOR">
- <floater.string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </floater.string>
- <text name="KeyFramePresetsText" width="110">
- Voreinstellungen:
- </text>
- <combo_box left_delta="110" name="WaterPresetsCombo"/>
- <button label="Neu" label_selected="Neu" name="WaterNewPreset"/>
- <button label="Speichern" label_selected="Speichern" name="WaterSavePreset"/>
- <button label="Löschen" label_selected="Löschen" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="EINSTELLUNGEN" name="Settings">
- <text name="BHText">
- Wassertrübungsfarbe
- </text>
- <color_swatch name="WaterFogColor" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
- <text name="WaterFogDensText">
- Wassertrübungsdichte
- </text>
- <text name="WaterUnderWaterFogModText">
- Wassertrübungs-Modifikator
- </text>
- <slider bottom_delta="-34" name="WaterUnderWaterFogMod"/>
- <text name="BDensText">
- Reflexionswellengröße
- </text>
- <slider label="1" name="WaterNormalScaleX"/>
- <slider label="2" name="WaterNormalScaleY"/>
- <slider label="3" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Fresnel-Skalierung
- </text>
- <text name="FresnelOffsetText">
- Fresnel-Versatz
- </text>
- <text name="DensMultText">
- Brechungsstärke oben
- </text>
- <text name="WaterScaleBelowText">
- Brechungsstärke unten
- </text>
- <text name="MaxAltText">
- Mischungsmultiplikator
- </text>
- </panel>
- <panel label="BILD" name="Waves">
- <text name="BHText">
- Richtung große Welle
- </text>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Richtung kleine Welle
- </text>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Normal-Map
- </text>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_windlight_options.xml b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
deleted file mode 100644
index 5b59336f9d..0000000000
--- a/indra/newview/skins/default/xui/de/floater_windlight_options.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="ERWEITERTER HIMMEL-EDITOR">
- <text name="KeyFramePresetsText">
- Voreinstellungen:
- </text>
- <button label="Neu" label_selected="Neu" name="WLNewPreset"/>
- <button label="Speichern" label_selected="Speichern" name="WLSavePreset"/>
- <button label="Löschen" label_selected="Löschen" name="WLDeletePreset"/>
- <button label="Tageszyklus-Editor" label_selected="Tageszyklus-Editor" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSPHÄRE" name="Atmosphere">
- <text name="BHText">
- Horizontfarbe
- </text>
- <button label=" ?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Horizonttrübung
- </text>
- <button label=" ?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Farbintensität
- </text>
- <button label=" ?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Trübungsintensität
- </text>
- <button label=" ?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Dichtemultiplikator
- </text>
- <button label=" ?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Entfernungsmultiplikator
- </text>
- <button label=" ?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Max. Höhe
- </text>
- <button label=" ?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="LICHT" name="Lighting">
- <text name="SLCText">
- Sonne/Mond-Farbe
- </text>
- <button label=" ?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Sonne/Mond-Stand
- </text>
- <button label=" ?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Umgebung
- </text>
- <button label=" ?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Ostausrichtung
- </text>
- <button label=" ?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Sonnenleuchtkraft
- </text>
- <button label=" ?" name="WLSunGlowHelp"/>
- <slider label="Fokus " name="WLGlowB"/>
- <slider label="Größe " name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma in Szene
- </text>
- <button label=" ?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Sternenleuchtkraft
- </text>
- <button label=" ?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="WOLKEN" name="Clouds">
- <text name="WLCloudColorText">
- Wolkenfarbe
- </text>
- <button label=" ?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Wolken-XY/Dichte
- </text>
- <button label=" ?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Wolkendichte
- </text>
- <button label=" ?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Wolkenskalierung
- </text>
- <button label=" ?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Wolkendetails (XY/Dichte)
- </text>
- <button label=" ?" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Wolkenbewegung X
- </text>
- <button label=" ?" name="WLCloudScrollXHelp"/>
- <check_box label="Fest" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Wolkenbewegung Y
- </text>
- <button label=" ?" name="WLCloudScrollYHelp"/>
- <check_box label="Fest" name="WLCloudLockY"/>
- <check_box label="Klassische Wolken" name="DrawClassicClouds"/>
- <button label=" ?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml
index a373e15338..d932234cd1 100644
--- a/indra/newview/skins/default/xui/de/menu_login.xml
+++ b/indra/newview/skins/default/xui/de/menu_login.xml
@@ -18,7 +18,7 @@
<menu_item_call label="Servicebedingungen anzeigen" name="TOS"/>
<menu_item_call label="Wichtige Meldung anzeigen" name="Critical"/>
<menu_item_call label="Test Medienbrowser" name="Web Browser Test"/>
- <menu_item_call label="Test Webinhalt-Floater" name="Web Content Floater Test"/>
+ <menu_item_call label="Web Content Floater Debug Test" name="Web Content Floater Debug Test"/>
<menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/>
<menu_item_call label="Benachrichtigungs-Konsole anzeigen" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
index 0f252ab46d..a001544f3e 100644
--- a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
<menu_item_check label="Nach Name sortieren" name="sort_name"/>
<menu_item_check label="Nach Entfernung sortieren" name="sort_distance"/>
<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+ <menu_item_check label="Karte anzeigen" name="view_map"/>
<menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 05f9f94c8a..e010844206 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Meine Gruppen" name="My Groups"/>
<menu_item_check label="Chat in der Nähe" name="Nearby Chat"/>
<menu_item_call label="Leute in der Nähe" name="Active Speakers"/>
+ <menu_item_check label="Stimme in der Nähe" name="Nearby Voice"/>
</menu>
<menu label="Welt" name="World">
<menu_item_check label="Minikarte" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Mittag" name="Noon"/>
<menu_item_call label="Sonnenuntergang" name="Sunset"/>
<menu_item_call label="Mitternacht" name="Midnight"/>
- <menu_item_call label="Grundbesitzzeit" name="Revert to Region Default"/>
- <menu_item_call label="Umwelt-Editor" name="Environment Editor"/>
+ </menu>
+ <menu label="Umgebungs-Editor" name="Enviroment Editor">
+ <menu_item_call label="Umgebungseinstellungen..." name="Enviroment Settings"/>
+ <menu label="Wasser-Voreinstellungen" name="Water Presets">
+ <menu_item_call label="Neue Voreinstellung..." name="new_water_preset"/>
+ <menu_item_call label="Voreinstellung bearbeiten..." name="edit_water_preset"/>
+ <menu_item_call label="Voreinstellung löschen..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Himmel-Voreinstellungen" name="Sky Presets">
+ <menu_item_call label="Neue Voreinstellung..." name="new_sky_preset"/>
+ <menu_item_call label="Voreinstellung bearbeiten..." name="edit_sky_preset"/>
+ <menu_item_call label="Voreinstellung löschen..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Tag-Voreinstellungen" name="Day Presets">
+ <menu_item_call label="Neue Voreinstellung..." name="new_day_preset"/>
+ <menu_item_call label="Voreinstellung bearbeiten..." name="edit_day_preset"/>
+ <menu_item_call label="Voreinstellung löschen..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Bauen" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Kamerabeschränkungen deaktivieren" name="Disable Camera Distance"/>
<menu_item_check label="Foto (hohe Auflösung)" name="HighResSnapshot"/>
<menu_item_check label="Fotos auf Festplatte leise speichern" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Fotos auf Festplatte komprimieren" name="CompressSnapshotsToDisk"/>
<menu label="Performance Tools" name="Performance Tools">
<menu_item_call label="Lag-Anzeige" name="Lag Meter"/>
<menu_item_check label="Statistikleiste" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
index 80d4ff4d9f..dacf898b6a 100644
--- a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Outfit bearbeiten" name="edit"/>
<menu_item_call label="Ausziehen" name="takeoff"/>
-</menu>
+ <menu_item_call label="Outfitliste in Zwischenablage kopieren" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 75f26c6990..1971061096 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1565,6 +1565,11 @@ Versuchen Sie es später erneut.
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Sie haben versucht, [OFFERS] Teleport-Angebote zu machen,
+womit Sie die Höchstgrenze von [LIMIT] überschreiten.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Einwohner zu Ihrem Standort einladen?
<form name="form">
@@ -1986,6 +1991,10 @@ Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschl
Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Möchten Sie Ihren Viewer-Cache wirklich leeren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
@@ -2011,48 +2020,30 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
Die gespeicherte Voreinstellung überschreiben?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
- <notification name="WLDeletePresetAlert">
- [SKY] löschen?
- <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
- </notification>
<notification name="WLNoEditDefault">
Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
</notification>
<notification name="WLMissingSky">
Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
- <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ <notification name="WLRegionApplyFail">
+ Die Einstellungen konnten nicht auf die Region angewendet werden. Verlassen Sie die Region und kehren Sie zurück, um das Problem zu beheben. Angegebener Grund: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Wählen Sie einen Namen für den neuen Himmel.
- <form name="form">
- <input name="message">
- Neue Voreinstellung
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Abbrechen"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- Voreinstellung bereits vorhanden!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Der letzte Schlüssel in diesem Tageszyklus kann nicht gelöscht werden, da ein Tageszyklus nicht leer sein kann. Statt den letzten verbleibenden Schlüssel zu löschen, versuchen Sie stattdessen, ihn zu modifizieren und dann einen neuen zu erstellen.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Wählen Sie einen Namen für die neue Wasservoreinstellung.
- <form name="form">
- <input name="message">
- Neue Voreinstellung
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Abbrechen"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Sie können diesem Tageszyklus keine Keyframes mehr hinzufügen. Die Höchstzahl an Keyframes für Tageszyklen mit Umfang [SCOPE] beträgt [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- Voreinstellung bereits vorhanden!
+ <notification name="EnvUpdateRate">
+ Sie können die Umgebungseinstellungen der Region nur alle [WAIT] Sekunden aktualisieren. Warten Sie mindestens so lange und versuchen Sie es dann erneut.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+ <notification name="PPSaveEffectAlert">
+ Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
@@ -2081,13 +2072,14 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
<usetemplate ignoretext="Die Kleidung, die während dem Bearbeiten meines Aussehens erstellt wird, sofort anziehen" name="okcancelignore" notext="Nein" yestext="Ja"/>
</notification>
<notification name="NotAgeVerified">
- Sie müssen altersüberprüft sein, um diesen Bereich betreten zu können. Möchten Sie auf der [SECOND_LIFE]-Webseite Ihr Alter verifizieren lassen?
+ Um auf Adult-Inhalte und –Bereiche in Second Life 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]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=de
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ <usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Abbrechen" yestext="Zur Altersüberprüfung"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein. Möchten Sie diese Einstellung auf der [SECOND_LIFE]-Webseite einrichten?
@@ -2343,6 +2335,9 @@ Fliegen ist hier nicht möglich.
<notification name="NoBuild">
In diesem Bereich ist das Bauen deaktiviert. Sie können keine Objekte bauen oder rezzen.
</notification>
+ <notification name="SeeAvatars">
+ Diese Parzelle verbirgt Avatare und Text-Chat vor einer anderen Parzelle. Sie können Einwohner außerhalb dieser Parzelle weder sehen noch von ihnen gesehen werden. Regulärer Text-Chat auf Kanal 0 ist ebenfalls blockiert.
+ </notification>
<notification name="ScriptsStopped">
Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
</notification>
@@ -2437,7 +2432,7 @@ Versuchen Sie es in einigen Minuten erneut.
</notification>
<notification name="ObjectGiveItem">
Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, hat Ihnen folgende/n/s [OBJECTTYPE] übergeben:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Behalten"/>
<button name="Discard" text="Verwerfen"/>
@@ -2771,7 +2766,15 @@ Die Schaltfläche wird angezeigt, wenn genügend Platz vorhanden ist.
Wählen Sie Einwohner aus, für die Sie das Objekt freigeben möchten.
</notification>
<notification name="MeshUploadError">
- [LABEL] konnte nicht hochgeladen werden: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] konnte nicht hochgeladen werden: [MESSAGE] [IDENTIFIER]
+
+Details finden Sie in der Protokolldatei.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Fehler beim Anfordern der Berechtigungen zum Hochladen des Netzes
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Regionsfähigkeit „[CAPABILITY]“ konnte nicht abgerufen werden.
</notification>
<notification name="ShareItemsConfirmation">
Möchten Sie wirklich die folgenden Objekte:
diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
index 3c56df763d..aafffc7ae3 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Auswahl speichern" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Abbrechen" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
index 632f414747..1af0492aa1 100644
--- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
@@ -46,8 +46,8 @@
</panel>
<panel name="save_revert_button_bar">
<layout_stack name="button_bar_ls">
- <layout_panel name="save_btn_lp">
- <button label="Speichern" name="save_btn"/>
+ <layout_panel name="save_btn_lp" width="61">
+ <button label="Speichern" name="save_btn" width="60" />
</layout_panel>
<layout_panel name="revert_btn_lp">
<button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurückkehren"/>
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_list.xml b/indra/newview/skins/default/xui/de/panel_outfits_list.xml
index 65a38ea342..ea3a938be9 100644
--- a/indra/newview/skins/default/xui/de/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/all/[SEARCH_TERM] Suche]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Sie haben noch keine Outfits. Versuchen Sie es mit der [secondlife:///app/search/all/ ] Suche]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+ <menu_button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
<button name="trash_btn" tool_tip="Ausgewähltes Outfit löschen"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index 004792bbf5..4e76147746 100644
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -66,16 +66,16 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="IM-Sitzung öffnen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
+ <layout_panel name="share_btn_lp">
+ <button label="Freigeben" name="share_btn" tool_tip="Inventarobjekt freigeben"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml
index 555fa56d57..4077fdab36 100644
--- a/indra/newview/skins/default/xui/de/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_place_profile.xml
@@ -68,6 +68,8 @@
<text name="scripts_value" value="Ein"/>
<text name="damage_label" value="Schaden:"/>
<text name="damage_value" value="Aus"/>
+ <text name="see_avatars_label" value="Avatare sehen:"/>
+ <text name="see_avatars_value" value="Aus"/>
<button label="Ãœber Land" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
index 36c77d4fe1..602ffff94d 100644
--- a/indra/newview/skins/default/xui/de/panel_places.xml
+++ b/indra/newview/skins/default/xui/de/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
index 0a596f2b25..8a5c175f2f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache:
+ </text>
+ <spinner label="Cache-Größe (64 – 9.984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Cache leeren" label_selected="Cache leeren" name="clear_cache"/>
+ <text name="Cache location">
+ Cache-Ordner:
+ </text>
+ <button label="Durchsuchen" label_selected="Durchsuchen" name="set_cache"/>
+ <button label="Vorgabestandort" label_selected="Vorgabestandort" name="default_cache_location"/>
<text name="UI Size:">
UI-Größe:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
index c118e4e4dd..1e6a03c99f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Aktiviert" name="enable_voice_check"/>
<check_box label="Automatische Wiedergabe zulassen" name="media_auto_play_btn" tool_tip="Hier aktivieren, um Medien automatisch wiederzugeben." value="true"/>
<check_box label="Medien, die an andere Avatare angehängt sind, wiedergeben." name="media_show_on_others_btn" tool_tip="Diese Option deaktivieren, um Medien für andere Avataren, die sich in der Nähe befinden, auszublenden." value="true"/>
+ <check_box label="Sounds von Gesten abspielen" name="gesture_audio_play_btn" tool_tip="Markieren, um Sounds von Gesten zu hören" value="true"/>
<text name="voice_chat_settings">
Voice-Chat-Einstellungen
</text>
@@ -35,28 +36,5 @@
<button label="Taste festlegen" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Auf mittlere Maustaste zurücksetzen"/>
<button label="Eingabe-/Ausgabegeräte" name="device_settings_btn"/>
- <panel label="Geräte-Einstellungen" name="device_settings_panel">
- <panel.string name="default_text">
- Standard
- </panel.string>
- <panel.string name="default system device">
- Standardgerät
- </panel.string>
- <panel.string name="no device">
- Kein Gerät
- </panel.string>
- <text name="Input">
- Eingabe
- </text>
- <text name="My volume label">
- Meine Lautstärke:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Ändern Sie die Lautstärke mit dem Regler"/>
- <text name="wait_text">
- Bitte warten
- </text>
- <text name="Output">
- Ausgabe
- </text>
- </panel>
+ <panel label="Geräte-Einstellungen" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_environment.xml b/indra/newview/skins/default/xui/de/panel_region_environment.xml
new file mode 100644
index 0000000000..daadd30f62
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Umgebung" name="panel_env_info">
+ <text name="water_settings_title">
+ Wählen Sie die Wasser- und Himmel-/Tageszykluseinstellungen aus, die alle Besucher Ihrer Region sehen sollen. Mehr Infos
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Second Life-Standard verwenden" name="use_sl_default_settings"/>
+ <radio_item label="Folgende Einstellungen verwenden" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Wassereinstellung
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Himmel / Tageszyklus
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Fester Himmel" name="my_sky_settings"/>
+ <radio_item label="Tageszyklus" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Anwenden" name="apply_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_terrain.xml b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
index 01721791a7..7801be30e4 100644
--- a/indra/newview/skins/default/xui/de/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Terrain" name="Terrain">
<text name="region_text_lbl">
Region:
@@ -6,25 +6,55 @@
<text name="region_text">
unbekannt
</text>
- <spinner label="Wasserhöhe" name="water_height_spin" />
- <button label="?" name="water_height_help" />
- <spinner label="Obere Terraingrenze" name="terrain_raise_spin" />
- <button label="?" name="terrain_raise_help" />
- <spinner label="Untere Terraingrenze" name="terrain_lower_spin" />
- <button label="?" name="terrain_lower_help" />
- <check_box label="Grundbesitzsonne verwenden" name="use_estate_sun_check" />
- <button label="?" name="use_estate_sun_help" />
- <check_box label="Sonne fest" name="fixed_sun_check" />
- <button label="?" name="fixed_sun_help" />
- <slider label="Phase" name="sun_hour_slider" />
- <button label="Ãœbernehmen" name="apply_btn" />
- <button label="RAW-Terrain herunterladen..." name="download_raw_btn"
- tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" />
- <button label="?" name="download_raw_help" />
- <button label="RAW-Terrain hochladen..." name="upload_raw_btn"
- tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" />
- <button label="?" name="upload_raw_help" />
- <button label="Terrain formen" name="bake_terrain_btn"
- tool_tip="Das aktuelle Terrain zum Mittelpunkt für die oberen/unteren Terraingrenzen machen" />
- <button label="?" name="bake_terrain_help" />
+ <spinner label="Wasserhöhe" name="water_height_spin"/>
+ <spinner label="Obere Terraingrenze" name="terrain_raise_spin"/>
+ <spinner label="Untere Terraingrenze" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Terraintexturen (erfordert 24-Bit-.tga-Dateien mit einer Größe von 512x512)
+ </text>
+ <text name="height_text_lbl">
+ 1 (niedrig)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Hoch)
+ </text>
+ <text name="height_text_lbl5">
+ Texturhöhenbereich
+ </text>
+ <text name="height_text_lbl10">
+ Diese Werte geben den Mischungsgrad für die obigen Texturen an.
+ </text>
+ <text name="height_text_lbl11">
+ In Metern gemessen. Der Wert „Niedrig“ ist die maximale Höhe von Textur 1, der Wert „Hoch“ die Mindesthöhe von Textur 4.
+ </text>
+ <text name="height_text_lbl6">
+ Nordwest
+ </text>
+ <text name="height_text_lbl7">
+ Nordost
+ </text>
+ <spinner label="Niedrig" name="height_start_spin_1"/>
+ <spinner label="Niedrig" name="height_start_spin_3"/>
+ <spinner label="Hoch" name="height_range_spin_1"/>
+ <spinner label="Hoch" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Südwest
+ </text>
+ <text name="height_text_lbl9">
+ Südost
+ </text>
+ <spinner label="Niedrig" name="height_start_spin_0"/>
+ <spinner label="Niedrig" name="height_start_spin_2"/>
+ <spinner label="Hoch" name="height_range_spin_0"/>
+ <spinner label="Hoch" name="height_range_spin_2"/>
+ <button label="RAW-Terrain herunterladen..." name="download_raw_btn" tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter"/>
+ <button label="RAW-Terrain hochladen..." name="upload_raw_btn" tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter"/>
+ <button label="Terrain formen" name="bake_terrain_btn" tool_tip="Das aktuelle Terrain zum Mittelpunkt für die oberen/unteren Terraingrenzen machen"/>
+ <button label="Ãœbernehmen" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
index 990193574e..fa659040ea 100644
--- a/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
+++ b/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="LLScrollingPanelParamBase">
- <slider label="[BESCHR]" name="param slider"/>
+ <slider label="[DESC]" name="param slider"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_sound_devices.xml b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
index da20f7e214..b739b6197f 100644
--- a/indra/newview/skins/default/xui/de/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Standard
</panel.string>
+ <string name="name_no_device">
+ Kein Gerät
+ </string>
+ <string name="name_default_system_device">
+ Standardsystemgerät
+ </string>
<text name="Input">
Eingabe
</text>
+ <text name="Output">
+ Ausgabe
+ </text>
<text name="My volume label">
Meine Lautstärke:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Bitte warten
</text>
- <text name="Output">
- Ausgabe
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
index d817d1df90..3dd1bfb357 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sonstiges" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Erhaltene Objekte ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Erhaltene Objekte
+ </string>
+ <button label="Erhaltene Objekte" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] neu
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Einkäufe auf dem Marktplatz werden hierher geliefert.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Händler-Outbox" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Zu meiner Marktplatz-Storefront verschieben"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Richtigen Sie ein Händlerkonto ein, um diese Funktion zu verwenden.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index d77b4a1e44..902f97efab 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -34,6 +34,9 @@
<string name="StartupInitializingVFS">
VFS wird initialisiert...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Grafikinitialisierung fehlgeschlagen. Bitte aktualisieren Sie Ihren Grafiktreiber.
+ </string>
<string name="ProgressRestoring">
Wird wiederhergestellt...
</string>
@@ -91,6 +94,12 @@
<string name="LoginQuicktimeOK">
QuickTime wurde initialisiert.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Regionsfähigkeiten anfordern...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Regionsfähigkeiten anfordern. Versuch [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
Region-Handshake...
</string>
@@ -1192,6 +1201,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="InventoryNoTexture">
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
</string>
+ <string name="InventoryInboxNoItems">
+ Objekte, die auf dem Marktplatz gekauft wurden, werden hierher geliefert.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Objekte hierher ziehen, um Sie in Ihrer Marktplatz-Storefront zum Verkauf anzubieten.
+ </string>
<string name="no_transfer" value=" (kein Transferieren)"/>
<string name="no_modify" value=" (kein Bearbeiten)"/>
<string name="no_copy" value=" (kein Kopieren)"/>
@@ -1238,9 +1253,6 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="InvFolder My Inventory">
Mein Inventar
</string>
- <string name="InvFolder My Favorites">
- Meine Favoriten
- </string>
<string name="InvFolder Library">
Bibliothek
</string>
@@ -1299,10 +1311,10 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Gesten
</string>
<string name="InvFolder Favorite">
- Favoriten
+ Meine Favoriten
</string>
<string name="InvFolder favorite">
- Favoriten
+ Meine Favoriten
</string>
<string name="InvFolder Current Outfit">
Aktuelles Outfit
@@ -1325,6 +1337,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="InvFolder All">
Alle
</string>
+ <string name="no_attachments">
+ Keine Anhänge getragen
+ </string>
<string name="Buy">
Kaufen
</string>
@@ -1634,6 +1649,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
</string>
<string name="SummaryForTheWeek" value="Zusammenfassung für diese Woche, beginnend am "/>
<string name="NextStipendDay" value=". Der nächste Stipendium-Tag ist "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value=" Gruppenanteil Einzelanteil"/>
<string name="GroupColumn" value="Gruppe"/>
<string name="Balance">
@@ -1660,6 +1678,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="IMTeen">
Teen
</string>
+ <string name="Anyone">
+ jeder
+ </string>
<string name="RegionInfoError">
Fehler
</string>
@@ -1873,7 +1894,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="RegionNoCovenantOtherOwner">
Für diesen Grundbesitz liegt kein Vertrag vor. Das Land auf diesem Grundbesitz wird vom Grundbesitzer und nicht von Linden Lab verkauft. Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundbesitzer in Verbindung.
</string>
- <string name="covenant_last_modified" value="Zuletzt geändert:"/>
+ <string name="covenant_last_modified" value="Zuletzt geändert: "/>
<string name="none_text" value=" (keiner) "/>
<string name="never_text" value=" (nie) "/>
<string name="GroupOwned">
@@ -1882,6 +1903,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="Public">
Öffentlich
</string>
+ <string name="LocalSettings">
+ Lokale Einstellungen
+ </string>
+ <string name="RegionSettings">
+ Regionseinstellungen
+ </string>
<string name="ClassifiedClicksTxt">
Klicks: [TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
</string>
@@ -1954,6 +1981,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="GroupMoneyDebits">
Soll
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Inhalte
</string>
@@ -3727,6 +3757,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="LocationCtrlGeneralIconTooltip">
Generelle Region
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatare sichtbar; Chat außerhalb dieser Parzelle gestattet
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] Aktualisierung
</string>
@@ -4152,6 +4185,87 @@ Missbrauchsbericht
<string name="Female - Wow">
Weiblich - Wow
</string>
+ <string name="/bow">
+ /verbeugen
+ </string>
+ <string name="/clap">
+ /klatschen
+ </string>
+ <string name="/count">
+ /zählen
+ </string>
+ <string name="/extinguish">
+ /löschen
+ </string>
+ <string name="/kmb">
+ /lmaa
+ </string>
+ <string name="/muscle">
+ /Muskel
+ </string>
+ <string name="/no">
+ /nein
+ </string>
+ <string name="/no!">
+ /nein!
+ </string>
+ <string name="/paper">
+ /Papier
+ </string>
+ <string name="/pointme">
+ /auf mich zeigen
+ </string>
+ <string name="/pointyou">
+ /auf dich zeigen
+ </string>
+ <string name="/rock">
+ /Stein
+ </string>
+ <string name="/scissor">
+ /Schere
+ </string>
+ <string name="/smoke">
+ /rauchen
+ </string>
+ <string name="/stretch">
+ /dehnen
+ </string>
+ <string name="/whistle">
+ /pfeifen
+ </string>
+ <string name="/yes">
+ /ja
+ </string>
+ <string name="/yes!">
+ /ja!
+ </string>
+ <string name="afk">
+ afk
+ </string>
+ <string name="dance1">
+ Tanzen1
+ </string>
+ <string name="dance2">
+ Tanzen2
+ </string>
+ <string name="dance3">
+ Tanzen3
+ </string>
+ <string name="dance4">
+ Tanzen4
+ </string>
+ <string name="dance5">
+ Tanzen5
+ </string>
+ <string name="dance6">
+ Tanzen6
+ </string>
+ <string name="dance7">
+ Tanzen7
+ </string>
+ <string name="dance8">
+ Tanzen8
+ </string>
<string name="AvatarBirthDateFormat">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index a8b3ce9c28..3dd394bac1 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -98,26 +98,80 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
label="Credits"
help_topic="about_credits_tab"
name="credits_panel">
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="linden_intro"
+ top="10"
+ width="435"
+ wrap="true">
+Second Life is brought to you by the Lindens:
+ </text>
<text_editor
enabled="false"
- follows="left|top"
- height="375"
+ follows="top|left"
+ height="98"
bg_readonly_color="Transparent"
left="5"
text_color="LtGray"
max_length="65536"
- name="credits_editor"
- top="5"
+ name="linden_names"
+ top_pad="10"
width="435"
word_wrap="true">
-Second Life is brought to you by Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others.
-
-Thank you to the following Residents for helping to ensure that this is the best version yet: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
-
-
-
-
-"The work goes on, the cause endures, the hope still lives, and the dreams shall never die" - Edward Kennedy
+Philip, Andrew, Doug, Richard, Phoenix, Ian, Mark, Robin, Dan, Char, Ryan, Eric, Jim, Lee, Jeff, Michael, Kelly, Steve, Catherine, Bub, Ramzi, Jill, Jeska, Don, Kona, Callum, Charity, Jack, Shawn, babbage, James, Lauren, Blue, Brent, Reuben, Pathfinder, Jesse, Patsy, Torley, Bo, Cyn, Jonathan, Gia, Annette, Ginsu, Harry, Lex, Runitai, Guy, Cornelius, Beth, Swiss, Thumper, Wendy, Teeple, Seth, Dee, Mia, Sally, Liana, Aura, Beez, Milo, Red, Gulliver, Marius, Joe, Jose, Dore, Justin, Nora, Morpheus, Lexie, Amber, Chris, Xan, Leyla, Walker, Sabin, Joshua, Hiromi, Tofu, Fritz, June, Jean, Ivy, Dez, Ken, Betsy, Which, Spike, Rob, Zee, Dustin, George, Claudia, del, Matthew, jane, jay, Adrian, Yool, Rika, Yoz, siobhan, Qarl, Benjamin, Beast, Everett, madhavi, Christopher, Izzy, stephany, Jeremy, sean, adreanne, Pramod, Tobin, sejong, Iridium, maurice, kj, Meta, kari, JP, bert, kyle, Jon, Socrates, Bridie, Ivan, maria, Aric, Coco, Periapse, sandy, Storrs, Lotte, Colossus, Brad, Pastrami, Zen, BigPapi, Banzai, Sardonyx, Mani, Garry, Jaime, Neuro, Samuel, Niko, CeeLo, Austin, Soft, Poppy, emma, tessa, angelo, kurz, alexa, Sue, CG, Blake, Erica, Brett, Bevis, kristen, Q, simon, Enus, MJ, laurap, Kip, Scouse, Ron, Ram, kend, Marty, Prospero, melissa, kraft, Nat, Seraph, Hamilton, Lordan, Green, miz, Ashlei, Trinity, Ekim, Echo, Charlie, Rowan, Rome, Jt, Doris, benoc, Christy, Bao, Kate, Tj, Patch, Cheah, Johan, Brandy, Angela, Oreh, Cogsworth, Lan, Mitchell, Space, Bambers, Einstein, Bender, Malbers, Matias, Maggie, Rothman, Milton, Niall, Marin, Allison, Mango, Andrea, Katt, Yi, Ambroff, Rico, Raymond, Gail, Christa, William, Dawn, Usi, Dynamike, M, Corr, Dante, Molly, kaylee, Danica, Kelv, Lil, jacob, Nya, Rodney, elsie, Blondin, Grant, Nyx, Devin, Monty, Minerva, Keira, Katie, Jenn, Makai, Clare, Joy, Cody, Gayathri, FJ, spider, Oskar, Landon, Jarv, Noelle, Al, Doc, Gray, Vir, t, Maestro, Simone, Shannon, yang, Courtney, Scott, charlene, Quixote, Susan, Zed, Amanda, Katelin, Esbee, JoRoan, Enkidu, roxie, Scarlet, Merov, Kevin, Judy, Rand, Newell, Les, Dessie, Galen, Michon, Geo, Siz, Calyle, Pete, Praveen, Callen, Sheldon, Pink, Nelson, jenelle, Terrence, Nathan, Juan, Sascha, Huseby, Karina, Kaye, Kotler, Lis, Darv, Charrell, Dakota, Kimmora, Theeba, Taka, Mae, Perry, Ducot, dana, Esther, Dough, gisele, Doten, Viale, Fisher, jessieann, ashley, Torres, delby, rountree, kurt, Slaton, Madison, Rue, Gino, Wen, Casssandra, Brodesky, Squid, Gez, Rakesh, Gecko, Ladan, Tony, Tatem, Squire, Falcon, BK, Crimp, Tiggs, Bacon, Coyot, Carmilla, Webb, Sea, Arch, Jillian, Jason, Bernard, Vogt, Peggy, dragon, Pup, xandix, Wallace, Bewest, Inoshiro, Rhett, AG, Aimee, Ghengis, Itiaes, Eli, Steffan, Epic, Grapes, Stone, Prep, Scobu, Robert, Alain, Carla, Vicky, Tia, Alec, Taras, Lisa, Oz, Ariane, Log, House, Kazu, Kim, Drofnas, Tyler, Campbell, Michele, Madeline, Nelly, Baron, Thor, Lori, Hele, Fredrik, Teddy, Pixie, Berry, Gabrielle, Alfonso, Brooke, Wolf, Ringo, Cru, Charlar, Rodvik, Gibson, Elise, Bagman, Greger, Leonidas, Jerm, Leslie, CB, Brenda, Durian, Carlo, mm, Zeeshan, Caleb, Max, Elikak, Mercille, Steph, Chase
+ </text_editor>
+ <text
+ follows="top|left"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="contrib_intro"
+ top_pad="10"
+ width="435"
+ wrap="true">
+with open source contributions from:
+ </text>
+ <text_editor
+ enabled="false"
+ follows="top|left"
+ height="98"
+ bg_readonly_color="Transparent"
+ left="5"
+ text_color="LtGray"
+ max_length="65536"
+ name="contrib_names"
+ top_pad="10"
+ width="435"
+ word_wrap="true">
+Dummy Name replaced at run time
+ </text_editor>
+ <text
+ follows="top|left"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="trans_intro"
+ top_pad="10"
+ width="435"
+ wrap="true">
+and translations from:
+ </text>
+ <text_editor
+ enabled="false"
+ follows="top|left"
+ height="98"
+ bg_readonly_color="Transparent"
+ left="5"
+ text_color="LtGray"
+ max_length="65536"
+ name="trans_names"
+ top_pad="10"
+ width="435"
+ word_wrap="true">
+Dummy Name replaced at run time
</text_editor>
</panel>
<panel
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 6e985e0476..07cb4c12f5 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -414,7 +414,7 @@
right="-10"
name="Cancel Land Sale"
left_pad="5"
- top_pad="-15"
+ top_pad="7"
width="180" />
<text
type="string"
@@ -488,6 +488,7 @@
width="186">
0
</text>
+
<button
enabled="false"
follows="left|top"
@@ -495,9 +496,20 @@
label="Buy Land"
layout="topleft"
left_delta="52"
+ top_pad="5"
name="Buy Land..."
- top_pad="7"
width="130" />
+ <button
+ enabled="false"
+ follows="left|top"
+ height="23"
+ label="Linden Sale"
+ layout="topleft"
+ left="10"
+ name="Linden Sale..."
+ tool_tip="Land must be owned, set content, and not already for auction."
+ top_pad="-23"
+ width="150" />
<button
enabled="true"
follows="left|top"
@@ -545,18 +557,7 @@
layout="topleft"
left_delta="0"
name="Reclaim Land..."
- top_delta="-50"
- width="180" />
- <button
- enabled="false"
- follows="left|top"
- height="23"
- label="Linden Sale"
- layout="topleft"
- left_delta="0"
- name="Linden Sale..."
- tool_tip="Land must be owned, set content, and not already for auction."
- top_pad="2"
+ top_delta="-25"
width="180" />
</panel>
<panel
@@ -1204,6 +1205,10 @@ Only large parcels can be listed in search.
name="push_restrict_region_text">
No Pushing (Region Override)
</panel.string>
+ <panel.string
+ name="see_avs_text">
+ See and chat with residents on this parcel
+ </panel.string>
<text
type="string"
length="1"
@@ -1313,7 +1318,7 @@ Only large parcels can be listed in search.
name="check group scripts"
top_delta="0"
width="70" />
- <text
+ <text
type="string"
text_color="white"
length="1"
@@ -1514,10 +1519,32 @@ Only large parcels can be listed in search.
type="string"
length="1"
follows="left|top"
+ text_color="white"
+ height="16"
+ layout="topleft"
+ left="230"
+ top="174"
+ name="allow_label5"
+ width="278">
+ Allow Residents on other parcels to:
+ </text>
+ <check_box
+ height="16"
+ label="See Avatars"
+ follows="top"
+ layout="topleft"
+ left="230"
+ name="SeeAvatarsCheck"
+ tool_tip="Allows residents on other parcels to see and chat with residents on this parcel, and you to see and chat with them."
+ width="120" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
height="16"
layout="topleft"
- left="220"
- top="180"
+ left="230"
+ top="230"
text_color="white"
name="landing_point"
word_wrap="true"
@@ -1531,7 +1558,7 @@ Only large parcels can be listed in search.
label_selected="Set"
layout="topleft"
name="Set"
- right="-68"
+ left="230"
tool_tip="Sets the landing point where visitors arrive. Sets to your avatar&apos;s location inside this parcel."
width="50" />
<button
@@ -1543,7 +1570,6 @@ Only large parcels can be listed in search.
left_pad="5"
name="Clear"
tool_tip="Clear the landing point"
- right="-10"
width="55" />
<text
type="string"
@@ -1552,7 +1578,7 @@ Only large parcels can be listed in search.
follows="left|top"
height="16"
layout="topleft"
- left="220"
+ left="230"
top_pad="10"
name="Teleport Routing: "
width="200">
@@ -1845,6 +1871,34 @@ Only large parcels can be listed in search.
name="check sound local"
left_pad="0"
width="292" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="Avatar Sounds:"
+ top_pad="10"
+ width="100">
+ Avatar Sounds:
+ </text>
+ <check_box
+ height="16"
+ label="Everyone"
+ layout="topleft"
+ left_pad="0"
+ name="all av sound check"
+ top_delta="0"
+ width="130" />
+ <check_box
+ height="16"
+ label="Group"
+ layout="topleft"
+ left_pad="0"
+ name="group av sound check"
+ top_delta="0"
+ width="70" />
<text
type="string"
length="1"
@@ -2125,4 +2179,4 @@ Only large parcels can be listed in search.
</panel>
</panel>
</tab_container>
-</floater>
+</floater> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
index 56230e912c..afb7917043 100644
--- a/indra/newview/skins/default/xui/en/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_build_options.xml
@@ -2,27 +2,84 @@
<floater
legacy_header_height="18"
follows="right"
- height="170"
+ height="198"
layout="topleft"
name="build options floater"
help_topic="build_options_floater"
save_rect="true"
title="GRID OPTIONS"
width="264">
+ <floater.string
+ name="grid_screen_text">
+ Screen
+ </floater.string>
+ <floater.string
+ name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string
+ name="grid_world_text">
+ World
+ </floater.string>
+ <floater.string
+ name="grid_reference_text">
+ Reference
+ </floater.string>
+ <floater.string
+ name="grid_attachment_text">
+ Attachment
+ </floater.string>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ tool_tip="Grid opacity"
+ name="grid_mode_label"
+ top_pad="30"
+ width="123">
+ Mode
+ </text>
+ <combo_box
+ height="23"
+ layout="topleft"
+ left_pad="9"
+ follows="left|top"
+ name="combobox grid mode"
+ tool_tip="Choose the type of grid ruler for positioning the object"
+ top_delta="-3"
+ width="108">
+ <combo_box.item
+ label="World grid"
+ name="World"
+ value="World" />
+ <combo_box.item
+ label="Local grid"
+ name="Local"
+ value="Local" />
+ <combo_box.item
+ label="Reference grid"
+ name="Reference"
+ value="Reference" />
+ <combo_box.commit_callback
+ function="GridOptions.gridMode"/>
+ </combo_box>
<spinner
control_name="GridResolution"
follows="left|top"
height="23"
initial_value="1"
- label="Grid Units (meters)"
- label_width="160"
+ label="Units (meters)"
+ label_width="130"
layout="topleft"
left="10"
max_val="5"
min_val="0.01"
name="GridResolution"
- top="25"
- width="230" />
+ top_pad="4"
+ width="200" />
<spinner
control_name="GridDrawSize"
decimal_digits="1"
@@ -30,15 +87,15 @@
height="23"
increment="0.5"
initial_value="5"
- label="Grid Extents (meters)"
- label_width="160"
+ label="Extents (meters)"
+ label_width="130"
layout="topleft"
left_delta="0"
max_val="50"
min_val="1"
name="GridDrawSize"
top_pad="0"
- width="230" />
+ width="200" />
<check_box
control_name="GridSubUnit"
height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index ab81a86720..22cc058e46 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -208,7 +208,7 @@ supports [AMOUNT2] objects
name="region_name_text"
top_delta="0"
use_ellipses="true"
- width="155">
+ width="150">
(unknown)
</text>
<icon
@@ -240,7 +240,8 @@ supports [AMOUNT2] objects
left_delta="125"
name="region_type_text"
top_delta="0"
- width="175">
+ use_ellipses="true"
+ width="170">
(unknown)
</text>
<text
@@ -265,7 +266,8 @@ supports [AMOUNT2] objects
left_delta="125"
name="estate_name_text"
top_delta="0"
- width="175">
+ use_ellipses="true"
+ width="170">
(unknown)
</text>
<text
@@ -290,7 +292,8 @@ supports [AMOUNT2] objects
left_delta="125"
name="estate_owner_text"
top_delta="0"
- width="175">
+ use_ellipses="true"
+ width="170">
(unknown)
</text>
<text
@@ -348,11 +351,10 @@ supports [AMOUNT2] objects
follows="left|top"
height="12"
layout="topleft"
- left="500"
name="covenant_timestamp_text"
- right="725"
+ right="-15"
top="175"
- width="275"
+ width="281"
word_wrap="true" />
<text_editor
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
deleted file mode 100644
index 65e2462ef8..0000000000
--- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,558 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="275"
- layout="topleft"
- name="Day Cycle Floater"
- help_topic="day_cycle_floater"
- save_rect="true"
- title="DAY CYCLE EDITOR"
- width="658">
- <tab_container
- follows="left|top"
- height="255"
- layout="topleft"
- left="0"
- name="Day Cycle Tabs"
- tab_position="top"
- top="20"
- width="656">
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="255"
- label="Day Cycle"
- layout="topleft"
- left="1"
- mouse_opaque="false"
- name="Day Cycle"
- top="0"
- width="654">
- <multi_slider
- can_edit_text="true"
- control_name="WLTimeSlider"
- decimal_digits="0"
- draw_track="false"
- follows="bottom"
- height="10"
- increment="0.0833333"
- initial_value="0"
- layout="topleft"
- left="20"
- max_sliders="20"
- max_val="24"
- name="WLTimeSlider"
- show_text="false"
- top="25"
- use_triangle="true"
- width="525" />
- <multi_slider
- can_edit_text="true"
- control_name="WLDayCycleKeys"
- decimal_digits="0"
- follows="bottom"
- height="10"
- increment="0.0833333"
- initial_value="0"
- layout="topleft"
- left_delta="0"
- max_sliders="20"
- max_val="24"
- name="WLDayCycleKeys"
- show_text="false"
- top_pad="15"
- width="525" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="8"
- name="WL12am"
- top="74"
- width="55">
- 12am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL3am"
- top_delta="0"
- width="55">
- 3am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL6am"
- top_delta="0"
- width="55">
- 6am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL9amHash"
- top_delta="0"
- width="55">
- 9am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL12pmHash"
- top_delta="0"
- width="55">
- 12pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL3pm"
- top_delta="0"
- width="55">
- 3pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL6pm"
- top_delta="0"
- width="55">
- 6pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL9pm"
- top_delta="0"
- width="55">
- 9pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL12am2"
- top_delta="0"
- width="55">
- 12am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left="20"
- name="WL12amHash"
- top="54"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL3amHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL6amHash"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL9amHash2"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL12pmHash2"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL3pmHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL6pmHash"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL9pmHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL12amHash2"
- top_delta="-3"
- width="6">
- |
- </text>
- <button
- height="20"
- label="Add Key"
- label_selected="Add Key"
- layout="topleft"
- left="555"
- name="WLAddKey"
- top="30"
- width="96" />
- <button
- height="20"
- label="Delete Key"
- label_selected="Delete Key"
- layout="topleft"
- left_delta="0"
- name="WLDeleteKey"
- top_pad="5"
- width="96" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="20"
- name="WLCurKeyFrameText"
- top="104"
- width="235">
- Key Frame Settings:
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="30"
- name="WLCurKeyTimeText"
- top="124"
- width="105">
- Key Time:
- </text>
- <spinner
- control_name="WLCurKeyHour"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="0"
- label="Hour"
- label_width="35"
- layout="topleft"
- left_delta="20"
- max_val="100"
- name="WLCurKeyHour"
- top_pad="4"
- width="74" />
- <spinner
- control_name="WLCurKeyMin"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="5"
- initial_value="0"
- label="Min"
- label_width="45"
- layout="topleft"
- left_pad="5"
- max_val="55"
- name="WLCurKeyMin"
- top_delta="0"
- width="85" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="30"
- name="WLCurKeyTimeText2"
- top="169"
- width="185">
- Key Preset:
- </text>
- <combo_box
- height="18"
- label="Preset"
- layout="topleft"
- left_delta="0"
- name="WLKeyPresets"
- top_pad="7"
- width="205" />
- <view_border
- bevel_style="none"
- follows="top|left"
- height="115"
- layout="topleft"
- left="12"
- top="101"
- width="240" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_pad="15"
- name="DayCycleText"
- top="114"
- width="120">
- Snap:
- </text>
- <combo_box
- enabled="false"
- height="18"
- label="5 min"
- layout="topleft"
- left_delta="0"
- name="WLSnapOptions"
- top_pad="7"
- width="70" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="0"
- name="DayCycleText2"
- top_pad="17"
- width="120">
- Length of Cycle:
- </text>
- <spinner
- control_name="WLLengthOfDayHour"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="0"
- label="Hour"
- label_width="33"
- layout="topleft"
- left_delta="-3"
- max_val="100"
- name="WLLengthOfDayHour"
- top_pad="4"
- width="74" />
- <spinner
- control_name="WLLengthOfDayMin"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="0"
- label="Min"
- label_width="25"
- layout="topleft"
- left_pad="2"
- max_val="59"
- name="WLLengthOfDayMin"
- top_delta="0"
- width="65" />
- <spinner
- control_name="WLLengthOfDaySec"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="24"
- label="Sec"
- label_width="25"
- layout="topleft"
- left_pad="2"
- max_val="59"
- name="WLLengthOfDaySec"
- top_delta="0"
- width="65"/>
- <text
- type="string"
- halign="right"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-23"
- name="DayCycleText3"
- top="114"
- width="85">
- Preview :
- </text>
- <button
- height="20"
- label="Play"
- label_selected="Play"
- layout="topleft"
- left="480"
- name="WLAnimSky"
- top_pad="5"
- width="83" />
- <button
- height="20"
- label="Stop!"
- label_selected="Stop"
- layout="topleft"
- left_pad="4"
- name="WLStopAnimSky"
- top_delta="0"
- width="83" />
- <button
- height="20"
- label="Use Estate Time"
- label_selected="Go to Estate Time"
- layout="topleft"
- left="480"
- name="WLUseLindenTime"
- top_pad="9"
- width="170" />
- <button
- height="20"
- label="Save Test Day"
- label_selected="Save Test Day"
- layout="topleft"
- left_delta="0"
- name="WLSaveDayCycle"
- top_pad="9"
- width="170" />
- <button
- height="20"
- label="Load Test Day"
- label_selected="Load Test Day"
- layout="topleft"
- left_delta="0"
- name="WLLoadDayCycle"
- top_pad="3"
- width="170" />
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..b5de4166f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<floater
+ legacy_header_height="18"
+ height="130"
+ help_topic=""
+ layout="topleft"
+ name="Delete Env Preset"
+ save_rect="true"
+ title="DELETE ENV PRESET"
+ width="550">
+
+ <string name="title_water">Delete Water Preset</string>
+ <string name="title_sky">Delete Sky Preset</string>
+ <string name="title_day_cycle">Delete Day Cycle</string>
+
+ <string name="label_water">Preset:</string>
+ <string name="label_sky">Preset:</string>
+ <string name="label_day_cycle">Day cycle:</string>
+
+ <string name="msg_confirm_deletion">Are you sure you want to delete the selected preset?</string>
+ <string name="msg_sky_is_referenced">Cannot remove a preset that is referenced by some day cycle(s).</string>
+
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="50"
+ name="label"
+ top="60"
+ width="60">
+ Preset:
+ </text>
+ <combo_box
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ name="preset_combo"
+ top_delta="-5"
+ width="200"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Delete"
+ layout="topleft"
+ left_pad="15"
+ name="delete"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="5"
+ name="cancel"
+ width="70"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..d9a3ad0c4b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml
@@ -0,0 +1,485 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="381"
+ layout="topleft"
+ name="Edit Day cycle"
+ help_topic="day_presets"
+ save_rect="true"
+ title="Edit Day Cycle"
+ width="705">
+
+ <string name="title_new">Create a New Day Cycle</string>
+ <string name="title_edit">Edit Day Cycle</string>
+ <string name="hint_new">Name your day cycle, adjust the controls to create it, and click "Save".</string>
+ <string name="hint_edit">To edit your day cycle, adjust the controls below and click "Save".</string>
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="hint"
+ top="25"
+ width="685" />
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="label"
+ top_pad="25"
+ width="120">
+ Preset Name:
+ </text>
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="day_cycle_combo"
+ top_delta="-5"
+ width="200" />
+ <line_editor
+ height="20"
+ left_delta="0"
+ name="day_cycle_name"
+ top_delta="0"
+ visible="true"
+ width="200" />
+ <text
+ follows="top|left|right"
+ height="95"
+ layout="topleft"
+ left_pad="10"
+ name="note"
+ top_delta="0"
+ width="345"
+ wrap="true">
+ Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
+ </text>
+ <!--======== Controls panel ========-->
+ <text
+ follows="left|top|right"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="hint_item1"
+ top="100"
+ width="300">
+ - Click on a tab to edit the specific sky settings and time.
+ </text>
+ <text
+ follows="left|top|right"
+ height="10"
+ layout="topleft"
+ name="hint_item2"
+ top_pad="10"
+ width="300">
+ - Click and drag the tabs to set the transition times.
+ </text>
+ <text
+ follows="left|top|right"
+ height="10"
+ layout="topleft"
+ name="hint_item3"
+ top_pad="10"
+ width="300">
+ - Use the scrubber to preview your day cycle.
+ </text>
+ <panel
+ follows="top|left"
+ height="100"
+ name="day_cycle_slider_panel"
+ layout="topleft"
+ left_delta="25"
+ top_pad="15"
+ width="660">
+ <multi_slider
+ can_edit_text="true"
+ control_name="WLTimeSlider"
+ decimal_digits="0"
+ draw_track="false"
+ follows="bottom"
+ height="10"
+ increment="0.0833333"
+ initial_value="0"
+ layout="topleft"
+ left="20"
+ max_sliders="20"
+ max_val="24"
+ name="WLTimeSlider"
+ show_text="false"
+ top_pad="0"
+ use_triangle="true"
+ width="525" />
+ <multi_slider
+ can_edit_text="true"
+ control_name="WLDayCycleKeys"
+ decimal_digits="0"
+ follows="bottom"
+ height="10"
+ increment="0.0833333"
+ initial_value="0"
+ layout="topleft"
+ left_delta="0"
+ max_sliders="20"
+ max_val="24"
+ name="WLDayCycleKeys"
+ show_text="false"
+ top_pad="15"
+ width="525" />
+ <button
+ height="20"
+ label="Add Key"
+ label_selected="Add Key"
+ layout="topleft"
+ left_pad="20"
+ name="WLAddKey"
+ top_delta="-18"
+ width="96" />
+ <button
+ height="20"
+ label="Delete Key"
+ label_selected="Delete Key"
+ layout="topleft"
+ name="WLDeleteKey"
+ top_pad="5"
+ width="96" />
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left="8"
+ name="WL12am"
+ top="74"
+ width="55">
+ 12am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL3am"
+ top_delta="0"
+ width="55">
+ 3am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL6am"
+ top_delta="0"
+ width="55">
+ 6am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL9amHash"
+ top_delta="0"
+ width="55">
+ 9am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL12pmHash"
+ top_delta="0"
+ width="55">
+ 12pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL3pm"
+ top_delta="0"
+ width="55">
+ 3pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL6pm"
+ top_delta="0"
+ width="55">
+ 6pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL9pm"
+ top_delta="0"
+ width="55">
+ 9pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL12am2"
+ top_delta="0"
+ width="55">
+ 12am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left="20"
+ name="WL12amHash"
+ top="54"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL3amHash"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL6amHash"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL9amHash2"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL12pmHash2"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL3pmHash"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL6pmHash"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL9pmHash"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL12amHash2"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ </panel>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="192"
+ name="WLCurKeyPresetText"
+ top_pad="10"
+ width="80">
+ Sky Setting:
+ </text>
+ <combo_box
+ height="18"
+ label="Preset"
+ layout="topleft"
+ left_pad="5"
+ name="WLSkyPresets"
+ width="205" />
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-40"
+ name="WLCurKeyTimeText"
+ top_pad="15"
+ width="35">
+ Time:
+ </text>
+ <time
+ follows="left|top"
+ height="16"
+ label_width="0"
+ layout="topleft"
+ left_pad="3"
+ name="time"
+ top_delta="-1"
+ value="6:00 AM"
+ width="75"/>
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="horiz_separator"
+ top_pad="20"
+ width="685"/>
+ <loading_indicator
+ height="23"
+ layout="topleft"
+ left="25"
+ name="progress_indicator"
+ top="350"
+ visible="false"
+ width="23" />
+ <check_box
+ follows="top|left"
+ height="10"
+ label="Make this my new day cycle"
+ layout="topleft"
+ left="310"
+ name="make_default_cb"
+ top_delta="13"
+ width="230"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ left_pad="0"
+ name="save"
+ top_delta="-13"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="15"
+ name="cancel"
+ top_delta="0"
+ width="70"/>
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..56233d91ee
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml
@@ -0,0 +1,953 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="375"
+ layout="topleft"
+ name="Edit Sky Preset"
+ help_topic="sky_preset"
+ save_rect="true"
+ title="Edit Sky Preset"
+ width="840">
+
+ <string name="title_new">Create a New Sky Preset</string>
+ <string name="title_edit">Edit Sky Preset</string>
+ <string name="hint_new">Name your preset, adjust the controls to create it, and click "Save".</string>
+ <string name="hint_edit">To edit your sky preset, adjust the controls and click "Save".</string>
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="hint"
+ top="25"
+ width="700">
+ To edit your preset, adjust the controls then click "Save"
+ </text>
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="label"
+ top_pad="25"
+ width="120">
+ Preset Name:
+ </text>
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="sky_preset_combo"
+ top_delta="-5"
+ width="200"/>
+ <line_editor
+ height="20"
+ left_delta="0"
+ name="sky_preset_name"
+ top_delta="0"
+ width="200" />
+ <text
+ follows="top|left|right"
+ height="40"
+ layout="topleft"
+ left_pad="10"
+ name="note"
+ top_delta="0"
+ width="405"
+ wrap="true">
+ Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
+ </text>
+ <!--======== Controls panel ========-->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="203"
+ layout="topleft"
+ left="25"
+ name="panel_water_preset"
+ top="122"
+ visible="true"
+ width="790"/>
+ <tab_container
+ follows="left|top"
+ height="225"
+ halign="center"
+ layout="topleft"
+ left="22"
+ name="WindLight Tabs"
+ tab_position="top"
+ top="101"
+ width="794">
+ <panel
+ border="true"
+ bevel_style="none"
+ follows="left|top|right|bottom"
+ height="196"
+ label="ATMOSPHERE"
+ layout="topleft"
+ left="1"
+ help_topic="sky_preset_atmosphere"
+ mouse_opaque="false"
+ name="Atmosphere"
+ top="60"
+ width="698">
+
+ <!--======== Tab Panel I. I conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left="40"
+ name="BHText"
+ top="25"
+ width="200">
+ Blue Horizon
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="0"
+ name="WLBlueHorizon"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="0"
+ top_pad="20"
+ name="BDensText"
+ width="200">
+ Haze Horizon
+ </text>
+ <slider
+ control_name="WLHazeHorizon"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.25"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLHazeHorizon"
+ width="200" />
+
+ <!--======== Tab Panel I. II conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="BDensText2"
+ top="25"
+ width="200">
+ Blue Density
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="0"
+ name="WLBlueDensity"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="0"
+ name="HDText"
+ top_pad="20"
+ width="200">
+ Haze Density
+ </text>
+ <slider
+ control_name="WLHazeDensity"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="0"
+ max_val="4"
+ name="WLHazeDensity"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel I. III conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="DensMultText"
+ top="25"
+ width="200">
+ Density Multiplier
+ </text>
+ <slider
+ control_name="WLDensityMult"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.1"
+ layout="topleft"
+ left_delta="15"
+ max_val="0.9"
+ name="WLDensityMult"
+ top_pad="6"
+ width="200" />
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WLDistanceMultText"
+ top_pad="20"
+ width="200">
+ Distance Multiplier
+ </text>
+ <slider
+ control_name="WLDistancMult"
+ decimal_digits="1"
+ follows="left|top"
+ height="10"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="15"
+ max_val="100"
+ name="WLDistanceMult"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="MaxAltText"
+ top_pad="20"
+ width="200">
+ Max Altitude
+ </text>
+ <slider
+ control_name="WLMaxAltitude"
+ decimal_digits="0"
+ follows="left|top"
+ height="10"
+ increment="1"
+ initial_value="500"
+ layout="topleft"
+ left_delta="15"
+ max_val="4000"
+ name="WLMaxAltitude"
+ top_pad="6"
+ width="200" />
+ </panel>
+ <panel
+ border="true"
+ bevel_style="none"
+ follows="left|top|right|bottom"
+ height="196"
+ label="LIGHTING"
+ layout="topleft"
+ left_delta="0"
+ help_topic="sky_preset_lighting"
+ name="Lighting"
+ top_delta="4"
+ width="698">
+
+ <!--======== Tab Panel II. I conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left="20"
+ name="SLCText"
+ top="25"
+ width="150">
+ Sun/Moon Color
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="10"
+ name="WLSunlight"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-10"
+ name="WLAmbientText"
+ top_pad="20"
+ width="150">
+ Ambient
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="10"
+ name="WLAmbient"
+ top_pad="6"
+ width="60" />
+
+ <!--======== Tab Panel II. II conlumn of controls ========-->
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="100"
+ name="SunGlowText"
+ top="25"
+ width="200">
+ Sun Glow
+ </text>
+ <slider
+ control_name="WLGlowB"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.1"
+ label="Focus "
+ layout="topleft"
+ left_delta="10"
+ max_val="0.5"
+ name="WLGlowB"
+ top_pad="6"
+ width="200" />
+ <slider
+ control_name="WLGlowR"
+ decimal_digits="2"
+ follows="top|left"
+ height="10"
+ increment="0.01"
+ initial_value="0.25"
+ label="Size "
+ layout="topleft"
+ left_delta="0"
+ max_val="1.99"
+ min_val="1"
+ name="WLGlowR"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-10"
+ name="WLStarText"
+ top_pad="20"
+ width="200">
+ Star Brightness
+ </text>
+ <slider
+ control_name="WLStarAlpha"
+ decimal_digits="2"
+ follows="top|left"
+ height="10"
+ increment="0.01"
+ initial_value="0"
+ layout="topleft"
+ left_delta="10"
+ max_val="2"
+ name="WLStarAlpha"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-10"
+ name="SceneGammaText"
+ top_pad="20"
+ width="200">
+ Scene Gamma
+ </text>
+ <slider
+ control_name="WLGamma"
+ decimal_digits="2"
+ follows="top|left"
+ height="10"
+ increment="0.01"
+ initial_value="2.0"
+ layout="topleft"
+ left_delta="10"
+ max_val="10"
+ name="WLGamma"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel II. III conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="60"
+ name="TODText"
+ top="25"
+ width="200">
+ Sun/Moon Position
+ </text>
+ <multi_slider
+ can_edit_text="true"
+ control_name="WLSunPos"
+ decimal_digits="0"
+ follows="bottom"
+ height="10"
+ increment="0.0833333"
+ initial_value="0"
+ layout="topleft"
+ left_delta="0"
+ max_sliders="1"
+ max_val="24"
+ name="WLSunPos"
+ show_text="false"
+ top_pad="0"
+ width="300" />
+
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_delta="2"
+ name="WL12amHash"
+ top_pad="6"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="66"
+ name="WL6amHash"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="67"
+ name="WL12pmHash2"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="67"
+ name="WL6pmHash"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="67"
+ name="WL12amHash2"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+
+
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_delta="-300"
+ name="WL12am"
+ top="74"
+ width="55">
+ 12am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="20"
+ name="WL6am"
+ top_delta="0"
+ width="55">
+ 6am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="15"
+ name="WL12pmHash"
+ top_delta="0"
+ width="55">
+ 12pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="18"
+ name="WL6pm"
+ top_delta="0"
+ width="55">
+ 6pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="15"
+ name="WL12am2"
+ top_delta="0"
+ width="55">
+ 12am
+ </text>
+
+ <time
+ follows="left|top"
+ height="16"
+ label_width="0"
+ layout="topleft"
+ left_delta="-175"
+ name="WLDayTime"
+ top_pad="15"
+ value="6:00 AM"
+ width="75"/>
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-106"
+ name="WLEastAngleText"
+ top_pad="24"
+ width="200">
+ East Angle
+ </text>
+ <slider
+ control_name="WLEastAngle"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.0"
+ layout="topleft"
+ left_delta="10"
+ name="WLEastAngle"
+ top_pad="6"
+ width="200" />
+
+ </panel>
+ <panel
+ border="true"
+ bevel_style="none"
+ follows="left|top|right|bottom"
+ height="196"
+ label="CLOUDS"
+ layout="topleft"
+ left_delta="0"
+ mouse_opaque="false"
+ help_topic="sky_preset_clouds"
+ name="Clouds"
+ top_delta="4"
+ width="698">
+
+ <!--======== Tab Panel III. I conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left="40"
+ name="WLCloudColorText"
+ top="25"
+ width="200">
+ Cloud Color
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudColor"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudColorText2"
+ top_pad="20"
+ width="200">
+ Cloud XY/Density
+ </text>
+ <slider
+ control_name="WLCloudX"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="X"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLCloudX"
+ width="200" />
+ <slider
+ control_name="WLCloudY"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="Y"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLCloudY"
+ width="200" />
+ <slider
+ control_name="WLCloudDensity"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="1.0"
+ label="D"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudDensity"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel III. II conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="WLCloudCoverageText"
+ top="15"
+ width="200">
+ Cloud Coverage
+ </text>
+ <slider
+ control_name="WLCloudCoverage"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_delta="15"
+ name="WLCloudCoverage"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WLCloudScaleText"
+ top_pad="20"
+ width="200">
+ Cloud Scale
+ </text>
+ <slider
+ control_name="WLCloudScale"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="15"
+ min_val="0.01"
+ name="WLCloudScale"
+ top_pad="6"
+ width="200" />
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="WLCloudDetailText"
+ top_pad="20"
+ width="200">
+ Cloud Detail (XY/Density)
+ </text>
+ <slider
+ control_name="WLCloudDetailX"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="X"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLCloudDetailX"
+ width="200" />
+ <slider
+ control_name="WLCloudDetailY"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="Y"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudDetailY"
+ top_pad="6"
+ width="200" />
+ <slider
+ control_name="WLCloudDetailDensity"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="1.0"
+ label="D"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudDetailDensity"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel III. III conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="WLCloudScrollXText"
+ top="15"
+ width="150">
+ Cloud Scroll X
+ </text>
+ <check_box
+ control_name="WLCloudLockX"
+ follows="left|top"
+ height="16"
+ label="Lock"
+ layout="topleft"
+ left_delta="150"
+ name="WLCloudLockX"
+ top_delta="0"
+ width="200" />
+ <slider
+ control_name="WLCloudScrollX"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_delta="-135"
+ max_val="10"
+ min_val="-10"
+ name="WLCloudScrollX"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WLCloudScrollYText"
+ top_pad="20"
+ width="150">
+ Cloud Scroll Y
+ </text>
+ <check_box
+ control_name="WLCloudLockY"
+ follows="left|top"
+ height="16"
+ label="Lock"
+ layout="topleft"
+ left_delta="150"
+ name="WLCloudLockY"
+ width="200" />
+ <slider
+ control_name="WLCloudScrollY"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_delta="-135"
+ max_val="10"
+ min_val="-10"
+ name="WLCloudScrollY"
+ top_pad="6"
+ width="200" />
+ </panel>
+ </tab_container>
+<!--======== End of Controls panel ========-->
+
+ <check_box
+ follows="top|left"
+ height="10"
+ label="Make this preset my new sky setting"
+ layout="topleft"
+ left="380"
+ name="make_default_cb"
+ top_pad="30"
+ width="280"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ left_pad="0"
+ name="save"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="15"
+ name="cancel"
+ width="70"/>
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..905983e7fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="375"
+ layout="topleft"
+ name="Edit Water Preset"
+ help_topic="water_preset"
+ save_rect="true"
+ title="Edit Water Preset"
+ width="725">
+
+ <string name="title_new">Create a New Water Preset</string>
+ <string name="title_edit">Edit a Water Preset</string>
+ <string name="hint_new">Name your preset, adjust the controls to create it, and click "Save".</string>
+ <string name="hint_edit">To edit your water preset, adjust the controls and click "Save".</string>
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="hint"
+ top="25"
+ width="680">
+ To edit your preset, adjust the controls then click "Save"
+ </text>
+
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="label"
+ top_pad="25"
+ width="120">
+ Preset Name:
+ </text>
+
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="water_preset_combo"
+ top_delta="-5"
+ width="200"/>
+
+ <line_editor
+ height="20"
+ left_delta="0"
+ name="water_preset_name"
+ top_delta="0"
+ width="200" />
+
+ <text
+ follows="top|left|right"
+ height="40"
+ layout="topleft"
+ left_pad="10"
+ name="note"
+ top_delta="0"
+ width="340"
+ wrap="true">
+ Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
+ </text>
+
+ <!--======== Controls panel ========-->
+ <panel
+ border="false"
+ bevel_style="none"
+ follows="top|left"
+ height="230"
+ layout="topleft"
+ left="10"
+ name="panel_water_preset"
+ top="100"
+ width="700">
+
+<!--======== I conlumn of controls ========-->
+ <text
+ follows="left|top|right"
+ height="10"
+ font="SansSerif"
+ layout="topleft"
+ left="10"
+ name="water_color_label"
+ top="5"
+ width="215">
+ Water Fog Color
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="15"
+ name="WaterFogColor"
+ top_pad="8"
+ width="60" />
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ top_pad="10"
+ name="water_fog_density_label"
+ width="215">
+ Fog Density Exponent
+ </text>
+ <slider
+ decimal_digits="1"
+ follows="left|top"
+ height="10"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ max_val="10"
+ name="WaterFogDensity"
+ top_pad="10"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ top_pad="15"
+ name="underwater_fog_modifier_label"
+ width="215">
+ Underwater Fog Modifier
+ </text>
+ <slider
+ decimal_digits="1"
+ follows="left|top"
+ height="10"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ max_val="10"
+ name="WaterUnderWaterFogMod"
+ top_pad="10"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="BHText"
+ top_pad="15"
+ width="215">
+ Big Wave Direction
+ </text>
+ <slider
+ control_name="WaterWave1DirX"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="X"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave1DirX"
+ top_pad="10"
+ width="216"/>
+ <slider
+ control_name="WaterWave1DirY"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="Y"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave1DirY"
+ top_pad="5"
+ width="216"/>
+
+<!--======== II conlumn of controls ========-->
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left_pad="20"
+ name="BDensText"
+ top="5"
+ width="215">
+ Reflection Wavelet Scale
+ </text>
+ <slider
+ control_name="WaterNormalScaleX"
+ decimal_digits="1"
+ follows="left|top"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="15"
+ max_val="10"
+ name="WaterNormalScaleX"
+ top_pad="10"
+ width="200"/>
+ <slider
+ control_name="WaterNormalScaleY"
+ decimal_digits="1"
+ follows="left|top"
+ initial_value="0.7"
+ layout="topleft"
+ max_val="10"
+ name="WaterNormalScaleY"
+ top_pad="6"
+ width="200"/>
+ <slider
+ control_name="WaterNormalScaleZ"
+ decimal_digits="1"
+ follows="left|top"
+ initial_value="0.7"
+ layout="topleft"
+ max_val="10"
+ name="WaterNormalScaleZ"
+ top_pad="6"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="HDText"
+ top_pad="16"
+ width="215">
+ Fresnel Scale
+ </text>
+ <slider
+ control_name="WaterFresnelScale"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="15"
+ name="WaterFresnelScale"
+ top_pad="10"
+ width="200"/>
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="FresnelOffsetText"
+ top_pad="15"
+ width="215">
+ Fresnel Offset
+ </text>
+ <slider
+ control_name="WaterFresnelOffset"
+ decimal_digits="2"
+ follows="left"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="15"
+ name="WaterFresnelOffset"
+ top_pad="10"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="BHText2"
+ top_pad="15"
+ width="215">
+ Little Wave Direction
+ </text>
+ <slider
+ control_name="WaterWave2DirX"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="X"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave2DirX"
+ top_pad="10"
+ width="216" />
+ <slider
+ control_name="WaterWave2DirY"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="Y"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave2DirY"
+ top_pad="6"
+ width="216" />
+
+<!--======== III conlumn of contorls ========-->
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="20"
+ name="DensMultText"
+ top="5"
+ width="215">
+ Refract Scale Above
+ </text>
+ <slider
+ control_name="WaterScaleAbove"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.1"
+ layout="topleft"
+ left_delta="15"
+ name="WaterScaleAbove"
+ top_pad="5"
+ width="200" />
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WaterScaleBelowText"
+ top_pad="15"
+ width="215">
+ Refract Scale Below
+ </text>
+ <slider
+ control_name="WaterScaleBelow"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ name="WaterScaleBelow"
+ top_pad="5"
+ width="200"/>
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="MaxAltText"
+ top_pad="15"
+ width="215">
+ Blur Multiplier
+ </text>
+ <slider
+ control_name="WaterBlurMult"
+ follows="left|top"
+ height="10"
+ increment="0.001"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ max_val="0.16"
+ name="WaterBlurMult"
+ top_pad="5"
+ width="200"/>
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="BHText3"
+ top_pad="15"
+ width="215">
+ Normal Map
+ </text>
+ <texture_picker
+ height="80"
+ layout="topleft"
+ left_delta="15"
+ name="WaterNormalMap"
+ top_pad="5"
+ width="100" />
+ </panel>
+<!--======== End of Controls panel ========-->
+
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="horiz_separator"
+ top_pad="5"
+ width="700"/>
+ <check_box
+ follows="top|left"
+ height="10"
+ label="Make this preset my new water setting"
+ layout="topleft"
+ left="275"
+ name="make_default_cb"
+ top_pad="20"
+ width="280"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ left_pad="0"
+ name="save"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="15"
+ name="cancel"
+ width="70"/>
+
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
deleted file mode 100644
index 8df5e232d9..0000000000
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="150"
- layout="topleft"
- name="Environment Editor Floater"
- help_topic="environment_editor_floater"
- save_rect="true"
- title="ENVIRONMENT EDITOR"
- width="600">
- <floater.string
- name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="EnvTimeText"
- top="32"
- width="140">
- Time of Day
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="15"
- name="EnvTimeText2"
- top="62"
- width="140">
- 12:00 PM
- </text>
- <icon
- height="25"
- image_name="icon_diurnal.tga"
- layout="topleft"
- left="85"
- name="EnvDayCycle"
- top="30"
- use_draw_context_alpha="false"
- width="200" />
- <slider
- control_name="EnvTimeSlider"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.0069444"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- max_val="0.99"
- name="EnvTimeSlider"
- show_text="false"
- top_pad="10"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="EnvCloudText"
- top="86"
- width="140">
- Cloud Cover
- </text>
- <slider
- control_name="EnvCloudSlider"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="75"
- name="EnvCloudSlider"
- top_delta="4"
- width="210" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="310"
- name="EnvWaterColorText"
- top="39"
- width="140">
- Water Color
- </text>
- <color_swatch
- can_apply_immediately="true"
- color="0.5 0.5 0.5 1"
- follows="left|top"
- height="50"
- layout="topleft"
- left="390"
- name="EnvWaterColor"
- tool_tip="Click to open color picker"
- top="30"
- width="40" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="310"
- name="EnvWaterFogText"
- top="86"
- width="140">
- Water Fog
- </text>
- <slider
- control_name="EnvWaterFogSlider"
- decimal_digits="2"
- follows="left"
- height="10"
- initial_value="0"
- layout="topleft"
- left_delta="75"
- max_val="10"
- name="EnvWaterFogSlider"
- top_delta="4"
- width="210" />
- <button
- follows="left|top"
- height="23"
- label="Use Estate Time"
- layout="topleft"
- left="10"
- name="EnvUseEstateTimeButton"
- top="120"
- width="137" />
- <button
- follows="left|top"
- height="23"
- label="Advanced Sky"
- layout="topleft"
- left_pad="3"
- name="EnvAdvancedSkyButton"
- top_delta="0"
- width="137" />
- <button
- follows="left|top"
- height="23"
- label="Advanced Water"
- layout="topleft"
- left_pad="3"
- name="EnvAdvancedWaterButton"
- top_delta="0"
- width="137" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_environment_settings.xml b/indra/newview/skins/default/xui/en/floater_environment_settings.xml
new file mode 100644
index 0000000000..1b1cafaca6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_environment_settings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="328"
+ layout="topleft"
+ name="Environment Editor Floater"
+ help_topic="environment_editor_floater"
+ save_rect="true"
+ title="ENVIRONMENT SETTINGS"
+ width="540">
+
+ <text
+ follows="top|left|right"
+ height="15"
+ layout="topleft"
+ left="20"
+ name="note"
+ top="25"
+ width="510"
+ wrap="true">
+ Use the options below to customize the environment settings for your viewer.
+ </text>
+
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="237"
+ layout="topleft"
+ left="20"
+ name="border"
+ top_pad="8"
+ width="500"/>
+ <radio_group
+ follows="top|left"
+ height="45"
+ layout="topleft"
+ left_delta="10"
+ name="region_settings_radio_group"
+ top_delta="20"
+ width="200">
+ <radio_item
+ label="Use region settings"
+ layout="topleft"
+ name="use_region_settings"/>
+ <radio_item
+ label="Customize my environment"
+ layout="topleft"
+ name="use_my_settings"
+ top_pad="20"/>
+ </radio_group>
+
+ <panel
+ height="170"
+ layout="topleft"
+ left="50"
+ name="user_environment_settings"
+ top_pad="0"
+ width="470">
+
+ <text
+ follows="top|left|right"
+ font="SansSerifItalic"
+ height="15"
+ layout="topleft"
+ left_delta="0"
+ name="note"
+ top_pad="0"
+ width="470"
+ wrap="true">
+ Note: your custom settings will not be visible to other users.
+ </text>
+
+ <!-- Water Setting -->
+ <text
+ name="water_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top="40"
+ width="200">
+ Water Setting
+ </text>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="water_settings_preset_combo"
+ top_delta="-5"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+
+
+ <!-- Sky/Day Cycle Settings -->
+ <text
+ name="sky_dayc_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top_pad="20"
+ width="100">
+ Sky / Day Cycle
+ </text>
+ <radio_group
+ layout="topleft"
+ left_delta="50"
+ name="sky_dayc_settings_radio_group"
+ top_pad="10"
+ height="50"
+ width="150">
+ <radio_item
+ layout="topleft"
+ label="Fixed sky"
+ name="my_sky_settings"/>
+ <radio_item
+ layout="topleft"
+ label="Day cycle"
+ name="my_dayc_settings"
+ top_pad="25"/>
+ </radio_group>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="sky_settings_preset_combo"
+ top_delta="-7"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ <combo_box
+ follows="top|left"
+ name="dayc_settings_preset_combo"
+ top_delta="36"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ </panel>
+
+ <button
+ follows="left|top"
+ height="23"
+ label="OK"
+ layout="topleft"
+ right="-130"
+ name="ok_btn"
+ top_pad="10"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="cancel_btn"
+ width="100" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index 02e50ee584..de6d586f72 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -2,6 +2,8 @@
<floater
legacy_header_height="18"
can_resize="true"
+ left="10000"
+ bottom="10000"
height="600"
layout="topleft"
min_height="150"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index 43729d7c9f..5a1f920398 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -5,7 +5,7 @@
height="440"
layout="topleft"
min_height="140"
- min_width="467"
+ min_width="0"
name="floater_about"
help_topic="floater_about"
save_rect="true"
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index f58595b3c5..1d4a1d4827 100644..100755
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="true" can_drag_on_left="false" can_minimize="false"
can_resize="true" height="550" min_height="550" min_width="620"
- name="Model Preview" title="Upload Model" width="620">
+ name="Model Preview" title="Upload Model" width="620"
+ help_topic="upload_model" >
<string name="status_idle">Idle</string>
<string name="status_parse_error">Dae parsing issue - see log for details.</string>
@@ -23,6 +24,7 @@
<string name="layer_all">All</string> <!-- Text to display in physics layer combo box for "all layers" -->
<string name="decomposing">Analyzing...</string>
<string name="simplifying">Simplifying...</string>
+ <string name="tbd">TBD</string>
<text left="15" bottom="25" follows="top|left" height="15" name="name_label">
@@ -70,43 +72,89 @@
width="290"
height="290"
follows="all"/>
-
- <text bottom_delta="25" left="25" width="100" follows="bottom|left">Upload Details</text>
- <panel top_pad="5" border="true" left="15" width="290" height="70" follows="bottom|left"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
- <text left="25" follows="bottom|left" width="140" height="15" name="streaming cost">
- Resource Cost: [COST]
- </text>
- <text left="25" top_pad="5" width="140" follows="bottom|left" height="15" name="physics cost">
- Physics Cost: [COST]
+
+ <text
+ font="SansSerif"
+ bottom_delta="15"
+ left_delta="0"
+ name="warning_title"
+ text_color="Yellow"
+ visible="false">
+ WARNING:
</text>
- <text left="25" top_pad="5" follows="bottom|left" height="15" name="upload fee">
- Upload Fee: N/A
- </text>
- </panel>
+ <text
+ text_color="White"
+ height="40"
+ width="290"
+ top_delta="15"
+ left_delta="0"
+ name="warning_message"
+ parse_urls="true"
+ wrap="true"
+ visible="false">
+ You will not be able to complete the final upload of this model to the Second Life servers. [[VURL] Find out how] to get enabled for mesh model uploads.</text>
- <check_box
- height="16"
+ <text
+ height="65"
+ top_delta="45"
left_delta="0"
- name="confirm_checkbox"
- top_pad="15"
- follows="bottom|left"
- width="16" />
+ name="weights_text"
+ width="80"
+ word_wrap="true"
+ >
+Download:
+Physics:
+Server:
+
+Prim equivs:
+ </text>
<text
- height="30"
- width="570"
+ height="65"
+ top_delta="0"
+ left_delta="80"
+ name="weights"
+ width="70"
word_wrap="true"
- left_delta="25"
- top_delta="0">I confirm that I have the appropriate rights to the material contained in this model. [secondlife:///app/floater/learn_more Learn more]</text>
- <text left="10" bottom="540" width="290" height="15" follows="bottom|left|right" name="status">[STATUS]</text>
+ >
+[ST]
+[PH]
+[SIM]
-
- <button bottom="540" left="300" follows="bottom|right" height="20" label="Defaults"
- width="80" name="reset_btn" tool_tip="Reset to defaults"/>
- <button bottom="540" left="430" follows="bottom|right" height="20" label="Upload"
- width="80" name="ok_btn" tool_tip="Upload to simulator"/>
- <button left_pad="10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn"/>
+[EQ]
+ </text>
+
+<!--
+ <text
+ height="65"
+ top_delta="0"
+ left_delta="70"
+ name="price_breakdown_text"
+ width="80"
+ word_wrap="true"
+ >
+Streaming:
+Physics:
+Instances:
+Textures:
+Model:
+ </text>
+
+ <text
+ height="65"
+ top_delta="0"
+ left_delta="80"
+ name="price_breakdown"
+ width="65"
+ word_wrap="true"
+ >
+L$ [STREAMING]
+L$ [PHYSICS]
+L$ [INSTANCES]
+L$ [TEXTURES]
+L$ [MODEL]
+ </text>
+ -->
<tab_container
follows="right|top|bottom"
@@ -122,7 +170,8 @@
<panel
border="true"
label="Level of Detail"
- name="lod_panel">
+ name="lod_panel"
+ help_topic="upload_model_lod">
<text left="10" width="240" bottom="20" height="15" follows="left|top" name="lod_table_header">
Select Level of Detail:
@@ -245,7 +294,8 @@
<panel
border="true"
label="Physics"
- name="physics_panel">
+ name="physics_panel"
+ help_topic="upload_model_physics">
<!-- PHYSICS GEOMETRY-->
<panel
@@ -386,7 +436,9 @@
<panel
border="true"
label="Modifiers"
- name="modifiers_panel">
+ name="modifiers_panel"
+ help_topic="upload_model_modifiers">
+
<text left="10" width="90" bottom="30" follows="top|left" height="15">
Scale:
</text>
@@ -416,6 +468,26 @@
</panel>
</tab_container>
+
+ <text
+ height="16"
+ left_delta="5"
+ bottom_delta="30"
+ name="upload_fee"
+ width="300"
+ follows="bottom|right"
+ word_wrap="true"
+ >
+ Upload fee: L$ [FEE]
+ </text>
+
+ <button bottom="540" left="10" follows="bottom|left" height="20" label="Set to defaults"
+ width="100" name="reset_btn" tool_tip="Set to defaults"/>
+ <button left="310" follows="bottom|right" height="20" label="Calculate weights &amp; fee"
+ width="150" name="calculate_btn" tool_tip="Calculate weights &amp; fee" top_delta="0"/>
+ <button bottom="540" left="310" follows="bottom|right" height="20" label="Upload"
+ width="80" name="ok_btn" tool_tip="Upload to simulator" visible="false"/>
+ <button right="-10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn" top_delta="0"/>
<!--
<button bottom_delta="0" left="10" width="120" name="auto fill" label="Generate LOD" tool_tip="Automatically generate levels of detail"/>
diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
index 8603682e3a..3d16ccbc45 100644
--- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
@@ -49,24 +49,6 @@
top="32"
left="210"
height="32"
- name="physics2_btn"
- label="3. Physics"
- tab_stop="false"
- enabled="false"
- border="false"
- image_unselected="BreadCrumbBtn_Middle_Off"
- image_selected="BreadCrumbBtn_Middle_Press"
- image_hover_unselected="BreadCrumbBtn_Middle_Over"
- image_disabled="BreadCrumbBtn_Middle_Disabled"
- image_disabled_selected="BreadCrumbBtn_Middle_Disabled"
- width="110">
- <button.commit_callback
- function="Wizard.Physics2"/>
- </button>
- <button
- top="32"
- left="210"
- height="32"
name="physics_btn"
label="3. Physics"
tab_stop="false"
@@ -126,7 +108,7 @@
height="22"
top_pad="15"
width="505"
- name="header_panel"
+ name="choose_file_header_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true"
@@ -135,46 +117,55 @@
width="200"
left="10"
top="3"
- name="header_text"
+ name="choose_file_header_text"
text_color="White"
height="10"
font="SansSerifBig"
layout="topleft">
- Upload Model
+ Choose model file
</text>
</panel>
- <text
- top_pad="14"
- width="460"
- height="20"
- name="description"
- font="SansSerifSmall"
- layout="topleft"
- word_wrap="true"
- left_delta="5">
- This wizard will help you import mesh models to Second Life. First specify a file containing the model you wish to import. Second Life supports COLLADA (.dae) files.
- </text>
<panel
- top_delta="40"
+ top_pad="14"
left="15"
- height="270"
+ height="310"
width="505"
- name="content"
+ name="choose_file_content_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
+ <text
+ height="32"
+ left="10"
+ name="advanced_users_text"
+ text_color="White"
+ top="15"
+ width="320"
+ word_wrap="true">
+ Advanced users: If you are familiar with 3D content creation tools you may wish to use the Advanced Uploader.
+ </text>
+ <button
+ follows="left|top"
+ height="20"
+ label="Switch to Advanced"
+ layout="topleft"
+ left_delta="0"
+ name="switch_to_advanced"
+ top_pad="5"
+ width="130">
+ </button>
<text
type="string"
length="1"
text_color="White"
follows="left|top"
- top="10"
+ top_pad="30"
height="10"
layout="topleft"
- left_delta="10"
- name="Cache location"
- width="300">
- Filename:
+ left_delta="0"
+ name="choose_model_file_label"
+ width="320">
+ Choose model file to upload
</text>
<line_editor
border_style="line"
@@ -187,7 +178,7 @@
max_length="4096"
name="lod_file"
top_pad="5"
- width="220" />
+ width="230" />
<button
follows="left|top"
height="23"
@@ -200,23 +191,27 @@
width="85">
</button>
<text
- top_delta="-15"
- width="200"
- height="15"
- font="SansSerifSmall"
+ type="string"
+ length="1"
+ text_color="White"
+ follows="left|top"
+ top_pad="5"
+ height="10"
layout="topleft"
- text_color="White"
- left_pad="19">
- Model Preview:
+ left="10"
+ name="support_collada_text"
+ width="320">
+ Second Life supports COLLADA (.dae) files
</text>
<!-- Placeholder panel for 3D preview render -->
<panel
- left_delta="0"
- top_pad="0"
- name="preview_panel"
+ top="30"
+ right="-10"
+ name="choose_file_preview_panel"
bevel_style="none"
highlight_light_color="0.09 0.09 0.09 1"
border="true"
+ border_style="line"
height="150"
follows="all"
width="150">
@@ -225,7 +220,8 @@
top_pad="10"
width="130"
height="14"
- left="340"
+ left_delta="0"
+ name="dimensions_label"
text_color="White"
word_wrap="true">
Dimensions (meters):
@@ -238,15 +234,7 @@
text_color="White"
name="dimensions"
left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
+ X Y Z
</text>
<text
top_delta="0"
@@ -266,23 +254,26 @@
height="15"
name="dimension_z"
left="450"/>
- <text
- top="100"
- width="320"
- height="15"
- left="10"
- text_color="White"
- word_wrap="true">
- Note:
- </text>
- <text
- top_pad="0"
- width="320"
- height="40"
- left="10"
- word_wrap="true">
-Advanced users familiar with 3d content creation tools may prefer to use the [secondlife:///app/floater/upload_model Advanced Mesh Import Window] .
- </text>
+ <text
+ height="16"
+ left="10"
+ name="warning_label"
+ text_color="Yellow"
+ top="200"
+ visible="false"
+ width="320">
+ WARNING:
+ </text>
+ <text
+ height="50"
+ left="10"
+ name="warning_text"
+ top_pad="0"
+ visible="false"
+ width="320"
+ word_wrap="true">
+ You will not be able to complete the final step of uploading this model to the Second Life servers. [secondlife:///app/floater/learn_more Find out how] to set up your account for mesh model uploads.
+ </text>
</panel>
</panel>
@@ -291,13 +282,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
height="388"
top_delta="0"
name="optimize_panel"
- visible="false"
+ visible="true"
width="535"
left="0">
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="optimize_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -306,13 +297,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="optimize_header_text"
top="3"
text_color="White"
height="10"
font="SansSerifBig"
layout="topleft">
- Optimize
+ Optimize model
</text>
</panel>
<text
@@ -321,10 +312,10 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
height="20"
font="SansSerifSmall"
layout="topleft"
- name="description"
+ name="optimize_hint"
word_wrap="true"
left_delta="5">
- This wizard has optimized your model to improve performance. You may adjust the results of the optimization process bellow or click Next to continue.
+ We have optimized the model for performance. Adjust it further if you wish.
</text>
<panel
top_delta="40"
@@ -332,11 +323,12 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
left="15"
height="270"
width="505"
- name="content"
+ name="optimize_content_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
<text
+ name="generating_lod_label"
top="20"
width="300"
height="12"
@@ -411,116 +403,92 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
- <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">
- Model Preview:
- </text>
- <combo_box left_pad="5" top_delta="-5" follows="left|top" list_position="below" height="22"
- name="preview_lod_combo2" width="90" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- High
- </combo_item>
- <combo_item name="medium">
- Medium
- </combo_item>
- <combo_item name="low">
- Low
- </combo_item>
- <combo_item name="lowest">
- Lowest
- </combo_item>
- </combo_box>
- <panel
- left="10"
- top_pad="5"
- name="preview_panel"
- bevel_style="none"
- highlight_light_color="0.09 0.09 0.09 1"
- border_style="line"
- border="true"
- height="185"
- follows="all"
- width="185">
- </panel>
- <text top="45" left="214" text_color="White" font="SansSerifSmallBold" halign="center" width="110" height="30" wrap="true">Higher Performance</text>
- <text top="75" left="204" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">Faster rendering but less detailed; lowers Resource (prim) cost.</text>
- <text top="45" left="378" text_color="White" font="SansSerifSmallBold" halign="center" width="90" height="30" wrap="true">Higher Accuracy</text>
- <text top="75" left="364" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">More detailed model but slower; increases Resource (prim) cost.</text>
+ <text name="optimize_performance_text" top="69" left="10" text_color="White" font="SansSerifSmallBold" width="120" height="16" wrap="true">Performance</text>
+ <text name="optimize_faster_rendering_text" top="85" left="10" width="120" word_wrap="true" font="SansSerifSmall" height="40">Faster rendering
+Less detail
+Lower prim weight</text>
+ <text name="optimize_accuracy_text" top="69" left="184" text_color="White" font="SansSerifSmallBold" width="120" height="16" wrap="true">Accuracy</text>
+ <text name="optimize_slower_rendering_text" top="85" left="184" width="120" word_wrap="true" font="SansSerifSmall" height="40">Slower rendering
+More detail
+Higher prim weight</text>
- <slider
+ <slider
follows="left|top"
height="20"
increment="1"
layout="topleft"
- left="204"
- max_val="3"
- initial_value="2"
+ left="10"
+ max_val="2"
+ initial_value="1"
min_val="0"
name="accuracy_slider"
show_text="false"
top="130"
width="290" />
- <text
- font="SansSerifSmall"
+ <text
+ font="SansSerifSmall"
+ name="accuracy_slider_mark1"
top_pad="0"
- width="300"
+ width="5"
left_delta="6"
height="4">'
- </text>
-
-
- <icon
- top_pad="14"
- left_delta="0"
- width="280"
- height="2"
- image_name="model_wizard\divider_line.png"/>
-
- <text top_delta="20" width="200" text_color="White" left_delta="50" name="streaming cost" height="20">Resource Cost: [COST]</text>
- <text
- top_pad="15"
- width="130"
- height="14"
- left="10"
- text_color="White"
- word_wrap="true">
- Dimensions (meters):
- </text>
- <text
- top_pad="0"
- width="160"
- height="15"
- font="SansSerifSmallBold"
- text_color="White"
- name="dimensions"
- left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
+ </text>
+ <text
+ font="SansSerifSmall"
+ name="accuracy_slider_mark2"
+ top_delta="0"
+ width="5"
+ left_delta="137"
+ height="4">'
+ </text>
+ <text
+ font="SansSerifSmall"
+ name="accuracy_slider_mark3"
+ top_delta="0"
+ width="5"
+ left_delta="137"
+ height="4">'
+ </text>
+ <button
+ follows="left|top"
+ height="20"
+ label="Recalculate Geometry"
+ layout="topleft"
+ left="80"
+ name="recalculate_geometry_btn"
+ top_pad="15"
+ width="150">
+ </button>
+ <text top="10" right="-10" width="185" text_color="White" follows="left|top" height="15" name="geometry_preview_label">
+ Geometry preview
</text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_x"
- left_delta="-25"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_y"
- left_delta="46"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_z"
- left_delta="46"/>
+ <panel
+ right="-10"
+ top="32"
+ name="optimize_preview_panel"
+ bevel_style="none"
+ highlight_light_color="0.09 0.09 0.09 1"
+ border_style="line"
+ border="true"
+ height="185"
+ follows="all"
+ width="185">
+ </panel>
+ <combo_box left_delta="75" top_pad="10" follows="left|top" list_position="below" height="22"
+ name="preview_lod_combo" width="110" tool_tip="LOD to view in preview render">
+ <combo_item name="preview_lod_high">
+ High detail
+ </combo_item>
+ <combo_item name="preview_lod_medium">
+ Medium detail
+ </combo_item>
+ <combo_item name="preview_lod_low">
+ Low detail
+ </combo_item>
+ <combo_item name="preview_lod_lowest">
+ Lowest detail
+ </combo_item>
+ </combo_box>
</panel>
</panel>
@@ -534,7 +502,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="physics_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -543,13 +511,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="physics_header_text"
top="3"
height="10"
font="SansSerifBig"
text_color="White"
layout="topleft">
- Physics
+ Adjust physics
</text>
</panel>
<text
@@ -558,186 +526,108 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
height="50"
font="SansSerifSmall"
layout="topleft"
- name="description"
+ name="physics_hint"
word_wrap="true"
left_delta="5">
- The wizard will create a physical shape, which determines how the object interacts with other objects and avatars. Set the slider to the detail level most appropriate for how your object will be used:
+ We will create a shape for the outer hull of the model. Adjust the shape's detail level as needed for the intended purpose of your model.
</text>
<panel
top_delta="44"
left="15"
height="270"
width="505"
- name="content"
+ name="physics_content_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
- <text top="15" left="20" text_color="White" font="SansSerifSmallBold" width="110" height="30" wrap="true" halign="center">Higher Performance</text>
- <text top="45" left="10" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">Faster rendering but less detailed; lowers Resource (prim) cost.</text>
- <text top="15" left="372" text_color="White" font="SansSerifSmallBold" width="90" height="30" wrap="true" halign="center">Higher Accuracy</text>
- <text top="45" left="360" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">More detailed model but slower; increases Resource (prim) cost.</text>
+ <text name="physics_performance_text" top="10" left="10" text_color="White" font="SansSerifSmallBold" width="120" halign="right" height="16" wrap="true">Performance</text>
+ <text name="physics_faster_rendering_text" top="26" left="10" width="120" word_wrap="true" font="SansSerifSmall" halign="right" height="40">Faster rendering
+Less detail
+Lower prim weight</text>
+ <text name="physics_accuracy_text" top="174" left="10" text_color="White" font="SansSerifSmallBold" width="120" halign="right" height="16" wrap="true">Accuracy</text>
+ <text name="physics_slower_dendering_text" top="190" left="10" width="120" word_wrap="true" font="SansSerifSmall" halign="right" height="40">Slower rendering
+More detail
+Higher prim weight</text>
<slider
follows="left|top"
- height="22"
+ height="190"
increment=".1"
layout="topleft"
- left="20"
+ left="140"
max_val="1"
initial_value="0.5"
min_val="0"
name="physics_slider"
+ orientation="vertical"
show_text="false"
- top="90"
- width="440" />
- <text
- font="SansSerifSmall"
- top_pad="0"
- width="500"
- left_delta="6"
- height="4">' ' ' ' ' ' ' ' ' ' '</text>
- <text top_pad="10" width="110" halign="center" word_wrap="true" left="25" height="40">Recommended for solid objects</text>
- <text top_delta="0" width="110" halign="center" word_wrap="true" left="190" height="40">Recommended for buildings</text>
- <text top_delta="0" width="110" halign="center" word_wrap="true" left="350" height="40">Recommended for vehicles</text>
-
-
- <icon
- top_pad="5"
- left="15"
- width="470"
- height="2"
- image_name="model_wizard\divider_line.png"/>
-
- <text top_delta="30" width="180" text_color="White" left="160" name="streaming cost" height="20">Resource Cost: [COST]</text>
-
- </panel>
- </panel>
-
- <panel
- height="388"
- top_delta="0"
- name="physics2_panel"
- visible="true"
- width="535"
- left="0">
- <panel
- height="22"
- top_pad="15"
- name="header_panel"
- width="505"
- bg_opaque_color="DkGray2"
- background_visible="true"
- background_opaque="true"
- left="15">
- <text
- width="200"
- left="10"
- name="header_text"
- text_color="White"
- top="3"
- height="10"
- font="SansSerifBig"
- layout="topleft">
- Physics
- </text>
- </panel>
- <text
- top_pad="14"
- width="475"
- height="50"
- font="SansSerifSmall"
- layout="topleft"
- name="description"
- word_wrap="true"
- left_delta="5">
- Preview the physics shape below then click Next to continue. To modify the physics shape, click the Back button.
- </text>
- <panel
- top_delta="40"
- left="15"
- height="270"
- width="505"
- name="content"
- bg_opaque_color="DkGray2"
- background_visible="true"
- background_opaque="true">
- <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">
- Model Preview:
+ top="25"
+ width="22" />
+ <text name="physics_example_1" top="10" width="120" word_wrap="true" left_pad="10" height="50">Examples:
+Moving objects
+Flying objects
+Vehicles</text>
+ <text name="physics_example_2" top="95" width="120" word_wrap="true" left_delta="0" height="50">Examples:
+Small static objects
+Less detailed objects
+Simple furniture</text>
+ <text name="physics_example_3" top="180" width="120" word_wrap="true" left_delta="0" height="50">Examples:
+Static objects
+Detailed objects
+Buildings</text>
+ <button
+ follows="left|top"
+ height="20"
+ label="Recalculate physics"
+ layout="topleft"
+ left="80"
+ name="recalculate_physics_btn"
+ top_pad="10"
+ width="150">
+ </button>
+ <button
+ enabled="false"
+ follows="left|top"
+ height="20"
+ label="Recalculating..."
+ layout="topleft"
+ left_delta="0"
+ name="recalculating_physics_btn"
+ top_delta="0"
+ visible="false"
+ width="150">
+ </button>
+ <text top="10" right="-10" width="185" text_color="White" follows="left|top" height="15" name="physics_preview_label">
+ Physics preview
</text>
- <combo_box left_pad="5" top_delta="-5" follows="left|top" list_position="below" height="22"
- name="preview_lod_combo3" width="90" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- High
+ <panel
+ right="-10"
+ top="32"
+ name="physics_preview_panel"
+ bevel_style="none"
+ highlight_light_color="0.09 0.09 0.09 1"
+ border_style="line"
+ border="true"
+ height="185"
+ follows="all"
+ width="185">
+ </panel>
+ <combo_box left_delta="75" top_pad="10" follows="left|top" list_position="below" height="22"
+ name="preview_lod_combo2" width="110" tool_tip="LOD to view in preview render">
+ <combo_item name="preview_lod2_high">
+ High detail
</combo_item>
- <combo_item name="medium">
- Medium
+ <combo_item name="preview_lod2_medium">
+ Medium detail
</combo_item>
- <combo_item name="low">
- Low
+ <combo_item name="preview_lod2_low">
+ Low detail
</combo_item>
- <combo_item name="lowest">
- Lowest
+ <combo_item name="preview_lod2_lowest">
+ Lowest detail
</combo_item>
</combo_box>
- <panel
- left="10"
- top_pad="10"
- name="preview_panel"
- bevel_style="none"
- highlight_light_color="0.09 0.09 0.09 1"
- border_style="line"
- border="true"
- height="190"
- follows="all"
- width="190">
- </panel>
- <text
- top_pad="8"
- width="130"
- height="14"
- left="10"
- text_color="White"
- word_wrap="true">
- Dimensions (meters):
- </text>
- <text
- top_pad="0"
- width="160"
- height="15"
- font="SansSerifSmallBold"
- text_color="White"
- name="dimensions"
- left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_x"
- left_delta="-25"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_y"
- left_delta="46"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_z"
- left_delta="46"/>
- <text top="60" width="180" text_color="White" left="225" name="streaming cost" height="20">Resource Cost: [COST]</text>
- </panel>
+ </panel>
</panel>
<panel
@@ -750,7 +640,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="review_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -759,7 +649,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="review_header_text"
text_color="White"
top="3"
height="10"
@@ -768,162 +658,44 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
Review
</text>
</panel>
- <text
+ <panel
top_pad="14"
- width="470"
- height="24"
- font="SansSerifSmall"
- layout="topleft"
- name="description"
- word_wrap="true"
- left_delta="5">
- Review the details below then click. Upload to upload your model. Your L$ balance will be charged when you click Upload.
- </text>
- <icon
- top_pad="10"
- left="20"
- width="495"
- height="2"
- image_name="model_wizard\divider_line.png"/>
- <panel
- top_pad="5"
left="15"
- height="270"
+ height="310"
width="505"
- name="content">
- <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">
- Model Preview:
- </text>
- <combo_box left_pad="5" top_delta="-5" follows="left|top" list_position="below" height="22"
- name="preview_lod_combo" width="90" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- High
- </combo_item>
- <combo_item name="medium">
- Medium
- </combo_item>
- <combo_item name="low">
- Low
- </combo_item>
- <combo_item name="lowest">
- Lowest
- </combo_item>
- </combo_box>
- <panel
- left="10"
- top_pad="10"
- name="preview_panel"
- bevel_style="none"
- highlight_light_color="0.09 0.09 0.09 1"
- border_style="line"
- border="true"
- height="190"
- follows="all"
- width="190">
- </panel>
- <text
- top_pad="8"
- width="130"
- height="14"
- left="10"
- text_color="White"
- word_wrap="true">
- Dimensions (meters):
- </text>
- <text
- top_pad="0"
- width="160"
- height="15"
- font="SansSerifSmallBold"
- text_color="White"
- name="dimensions"
- left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_x"
- left_delta="-25"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_y"
- left_delta="46"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_z"
- left_delta="46"/>
+ name="review_content_panel"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true">
+ <text
+ top="20"
+ width="485"
+ font="SansSerifMedium"
+ text_color="White"
+ left="10"
+ name="review_prim_equiv"
+ height="16">Impact to parcel/region: [EQUIV] prim equivalents
+ </text>
+ <text
+ top_pad="20"
+ width="485"
+ font="SansSerifMedium"
+ text_color="White"
+ left="10"
+ name="review_fee"
+ height="16">Your account will be charged an upload fee of L$ [FEE].
+ </text>
+ <text
+ top_pad="20"
+ width="485"
+ font="SansSerifMedium"
+ text_color="White"
+ left="10"
+ name="review_confirmation"
+ height="32"
+ word_wrap="true">By clicking the upload button, you confirm that you have the appropriate rights to the material contained in the model.
+ </text>
</panel>
- <text
- width="300"
- height="12"
- top="125"
- name="streaming cost"
- left="230"
- font="SansSerifSmallBold"
- text_color="White">Resource Cost: [COST]</text>
- <text
- width="285"
- height="30"
- top_pad="0"
- left_delta="0"
- word_wrap="true"
- font="SansSerifItalic">This is the cost to your Region's prim/object limit, at default scale</text>
- <text
- width="300"
- height="12"
- name="physics cost"
- top_pad="10"
- left_delta="0"
- font="SansSerifSmallBold"
- text_color="White">Physics Cost: [COST]</text>
- <text
- width="285"
- height="30"
- top_pad="0"
- left_delta="0"
- word_wrap="true"
- font="SansSerifItalic">This is the cost to your Region's prim/object limit, at default scale</text>
- <text
- width="200"
- height="12"
- top_pad="10"
- left_delta="0"
- font="SansSerifSmallBold"
- text_color="White">Upload Fee:</text>
- <text
- width="285"
- height="26"
- top_pad="0"
- left_delta="0"
- word_wrap="true"
- font="SansSerifItalic">This is the amount the upload will cost.</text>
- <check_box
- height="16"
- layout="topleft"
- left_delta="0"
- name="confirm_checkbox"
- top_pad="15"
- width="16" />
- <text
- height="100"
- width="240"
- word_wrap="true"
- left_delta="25"
- top_delta="0">I confirm that I have the appropriate rights to the material contained in this model. [secondlife:///app/floater/learn_more Learn more]</text>
</panel>
@@ -939,7 +711,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="upload_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -948,52 +720,85 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="upload_header_text"
top="3"
text_color="White"
height="10"
font="SansSerifBig"
layout="topleft">
- Upload Complete!
+ Upload complete
</text>
</panel>
<text
top_pad="14"
- width="474"
- height="20"
- font="SansSerifSmall"
+ width="495"
+ height="16"
+ font="SansSerifMedium"
layout="topleft"
- name="description"
+ name="model_uploaded_text"
+ text_color="White"
word_wrap="true"
- left_delta="5">
- Congratulations! Your model has been sucessfully uploaded. You will find the model in the Objects folder in your inventory.
+ left="25">
+ Your model has been uploaded.
+ </text>
+ <text
+ top_pad="5"
+ width="495"
+ height="16"
+ font="SansSerifMedium"
+ layout="topleft"
+ name="inventory_text"
+ text_color="White"
+ word_wrap="true"
+ left="25">
+ You will find it in the Objects folder in your inventory.
+ </text>
+ <text
+ top_pad="20"
+ width="495"
+ font="SansSerifMedium"
+ text_color="White"
+ left="25"
+ name="charged_fee"
+ height="16">Your account has been charged L$ [FEE].
</text>
- <icon
- top_pad="15"
- left_delta="0"
- width="495"
- height="2"
- image_name="model_wizard\divider_line.png"/>
</panel>
<button
top="440"
- right="-245"
+ right="-285"
width="90"
height="22"
name="back"
label="&lt;&lt; Back" />
<button
top_delta="0"
- right="-150"
+ right="-190"
width="90"
height="22"
name="next"
label="Next &gt;&gt; " />
<button
top_delta="0"
+ left_delta="0"
+ width="160"
+ height="22"
+ name="calculate"
+ label="Calculate weights &amp; fee &gt;&gt; " />
+ <button
+ enabled="false"
+ visible="false"
+ top_delta="0"
+ left_delta="0"
+ width="160"
+ height="22"
+ name="calculating"
+ label="Calculating... " />
+ <button
+ enabled="false"
+ top_delta="0"
right="-150"
width="90"
height="22"
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index 41a440aaa0..f526970ad0 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -22,6 +22,7 @@
layout="topleft"
left="10"
name="object_name"
+ parse_urls="false"
top="20"
width="284">
[DESC]:
diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml
index 8da35e9d7f..c756661ffc 100644
--- a/indra/newview/skins/default/xui/en/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/en/floater_postcard.xml
@@ -7,11 +7,11 @@
height="380"
layout="topleft"
min_height="380"
- min_width="450"
+ min_width="490"
name="Postcard"
help_topic="postcard"
title="EMAIL SNAPSHOT"
- width="450">
+ width="490">
<floater.string
name="default_subject">
Postcard from [SECOND_LIFE].
@@ -40,7 +40,7 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="108"
+ left_delta="148"
name="to_form"
top_delta="-4"
width="150" />
@@ -59,7 +59,7 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="108"
+ left_delta="148"
name="from_form"
top_delta="-4"
width="150" />
@@ -78,7 +78,7 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="108"
+ left_delta="148"
max_length_bytes="100"
name="name_form"
top_delta="-4"
@@ -99,7 +99,7 @@
height="20"
label="Type your subject here."
layout="topleft"
- left_delta="108"
+ left_delta="148"
max_length_bytes="100"
name="subject_form"
top_delta="-4"
diff --git a/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml
new file mode 100644
index 0000000000..449731ab89
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="500"
+ layout="topleft"
+ name="Proxy Settings Floater"
+ help_topic="proxysettings"
+ title="Proxy Settings"
+ width="500">
+ <check_box
+ control_name="BrowserProxyEnabled"
+ top="38"
+ enabled="true"
+ follows="left|top"
+ height="14"
+ initial_value="false"
+ commit_callback.function="Proxy.Change"
+ label="Use HTTP Proxy for Web pages"
+ left="22"
+ mouse_opaque="true"
+ name="web_proxy_enabled"
+ radio_style="false"
+ width="400"
+ top_pad="5" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ left_delta="23"
+ layout="topleft"
+ name="Proxy location"
+ top_pad="10"
+ width="300">
+ HTTP Proxy:
+ </text>
+ <line_editor
+ control_name="BrowserProxyAddress"
+ enabled_control="BrowserProxyEnabled"
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left_delta="0"
+ name="web_proxy_editor"
+ tool_tip="The DNS name or IP address of the HTTP proxy you would like to use."
+ top_pad="4"
+ width="200" />
+ <spinner
+ control_name="BrowserProxyPort"
+ enabled_control="BrowserProxyEnabled"
+ decimal_digits="0"
+ follows="left|top"
+ height="23"
+ increment="1"
+ initial_value="80"
+ label="Port number:"
+ label_width="95"
+ layout="topleft"
+ left_delta="210"
+ max_val="12000"
+ min_val="10"
+ name="web_proxy_port"
+ top_delta="0"
+ tool_tip="The port of the HTTP proxy you would like to use."
+ width="145" />
+ <check_box
+ control_name="Socks5ProxyEnabled"
+ height="16"
+ label="Use SOCKS 5 Proxy for UDP traffic"
+ layout="topleft"
+ left="22"
+ name="socks_proxy_enabled"
+ top_pad="32"
+ width="256"
+ commit_callback.function="Proxy.Change" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="23"
+ name="Proxy location"
+ top_pad="10"
+ width="300">
+ SOCKS 5 Proxy:
+ </text>
+ <line_editor
+ control_name="Socks5ProxyHost"
+ enabled_control="Socks5ProxyEnabled"
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left_delta="0"
+ name="socks_proxy_editor"
+ tool_tip="The DNS name or IP address of the SOCKS 5 proxy you would like to use."
+ top_pad="4"
+ width="200"
+ commit_callback.function="Proxy.Change" />
+ <spinner
+ control_name="Socks5ProxyPort"
+ enabled_control="Socks5ProxyEnabled"
+ decimal_digits="0"
+ follows="left|top"
+ height="23"
+ increment="1"
+ initial_value="80"
+ label="Port number:"
+ label_width="95"
+ layout="topleft"
+ left_delta="210"
+ max_val="12000"
+ min_val="10"
+ name="socks_proxy_port"
+ top_delta="0"
+ width="145"
+ tool_tip="The port of the SOCKS 5 proxy you would like to use."
+ commit_callback.function="Proxy.Change" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="40"
+ name="Proxy location"
+ top_pad="15"
+ width="300">
+ SOCKS Authentication:
+ </text>
+ <radio_group
+ control_name="Socks5AuthType"
+ enabled_control="Socks5ProxyEnabled"
+ height="50"
+ layout="topleft"
+ name="socks5_auth_type"
+ top_pad="10"
+ width="120"
+ commit_callback.function="Proxy.Change" >
+ <radio_item
+ height="16"
+ label="No Authentication"
+ layout="topleft"
+ name="Socks5NoAuth"
+ value="None"
+ tool_tip="Socks5 proxy requires no authentication."
+ width="120" />
+ <radio_item
+ height="16"
+ label="Username/Password"
+ layout="topleft"
+ name="Socks5UserPass"
+ value="UserPass"
+ tool_tip="Socks5 proxy requires username/password authentication."
+ width="120" />
+ </radio_group>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="20"
+ top_delta="50"
+ width="200">
+ Username:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ left_pad="15"
+ layout="topleft"
+ width="200">
+ Password:
+ </text>
+ <line_editor
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left="60"
+ name="socks5_username"
+ tool_tip="The username used to authenticate with your SOCKS 5 server"
+ top_pad="4"
+ width="200"
+ commit_callback.function="Proxy.Change" />
+ <line_editor
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left_pad="15"
+ name="socks5_password"
+ tool_tip="The password used to authenticate with your SOCKS 5 server"
+ top_delta="0"
+ width="200"
+ is_password="true"
+ commit_callback.function="Proxy.Change" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="25"
+ name="Proxy location"
+ top_pad="18"
+ width="300">
+ Other HTTP traffic proxy:
+ </text>
+ <radio_group
+ control_name="HttpProxyType"
+ name="other_http_proxy_type"
+ height="60"
+ layout="topleft"
+ top_pad="9"
+ width="120"
+ left_delta="15"
+ commit_callback.function="Proxy.Change" >
+ <radio_item
+ height="16"
+ label="Do not proxy"
+ layout="topleft"
+ name="OtherNoProxy"
+ value="None"
+ width="120"
+ tool_tip="Non-web HTTP traffic will NOT be sent to any proxy."/>
+ <radio_item
+ height="16"
+ label="Use HTTP Proxy"
+ layout="topleft"
+ name="OtherHTTPProxy"
+ value="Web"
+ width="120"
+ enabled_control="BrowserProxyEnabled"
+ tool_tip="Non-web HTTP will be sent through the configured Web proxy." />
+ <radio_item
+ height="16"
+ label="Use SOCKS 5 Proxy"
+ layout="topleft"
+ name="OtherSocksProxy"
+ value="Socks"
+ width="120"
+ enabled_control="Socks5ProxyEnabled"
+ tool_tip="Non-web HTTP traffic will be sent through the configured Socks 5 proxy."/>
+ </radio_group>
+ <button
+ follows="left|top"
+ height="22"
+ label="OK"
+ label_selected="OK"
+ layout="topleft"
+ left="282"
+ name="OK"
+ top_pad="36"
+ width="90"
+ commit_callback.function="Proxy.OK" />
+ <button
+ follows="left|top"
+ height="22"
+ label="Cancel"
+ label_selected="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="Cancel"
+ top_delta="0"
+ width="90"
+ commit_callback.function="Proxy.Cancel" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml
index 32fb6f97e7..3b58cd08f6 100644
--- a/indra/newview/skins/default/xui/en/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_info.xml
@@ -16,5 +16,5 @@
name="region_panels"
right="-1"
tab_position="top"
- top="20" />
+ top="20"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 8770ede7e9..eaf575fc08 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -1,71 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- legacy_header_height="13"
+ legacy_header_height="18"
can_resize="true"
- height="600"
+ height="775"
layout="topleft"
min_height="400"
- min_width="450"
- name="floater_search"
- help_topic="floater_search"
+ min_width="500"
+ name="floater_web_content"
+ help_topic="floater_web_content"
save_rect="true"
+ auto_tile="true"
save_visibility="true"
- single_instance="true"
- title="FIND"
- width="650">
- <floater.string
- name="loading_text">
- Loading...
- </floater.string>
- <floater.string
- name="done_text">
- Done
- </floater.string>
- <layout_stack
- height="580"
- follows="left|right|top|bottom"
- layout="topleft"
- left="10"
- name="stack1"
- top="20"
- width="630">
- <layout_panel
- height="570"
- layout="topleft"
- left_delta="0"
- top_delta="0"
- name="browser_layout"
- user_resize="false"
- width="630">
- <web_browser
- trusted_content="true"
- follows="left|right|top|bottom"
- layout="topleft"
- left="0"
- name="browser"
- top="0"
- height="540"
- width="630" />
- <text
- follows="bottom|left"
- height="16"
- layout="topleft"
- left_delta="0"
- name="status_text"
- top_pad="10"
- width="150" />
- <text
- visible="false"
- follows="bottom|right"
- height="16"
- left_delta="0"
- name="refresh_search"
- left_pad="0"
- right="-10"
- halign="right"
- width="450">
- Redo search to reflect current God level
- </text>
- </layout_panel>
- </layout_stack>
-</floater>
+ title=""
+ initial_mime_type="text/html"
+ width="780"
+ tab_stop="true"
+ filename="floater_web_content.xml"/>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index ec190ab656..89a0c4c287 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -330,13 +330,13 @@
increment="1"
initial_value="75"
label="Image quality"
- label_width="100"
+ label_width="124"
layout="topleft"
left_delta="0"
max_val="100"
name="image_quality_slider"
top_pad="5"
- width="205" />
+ width="228" />
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_sound_devices.xml b/indra/newview/skins/default/xui/en/floater_sound_devices.xml
index 304987c3d5..74e01f359c 100644
--- a/indra/newview/skins/default/xui/en/floater_sound_devices.xml
+++ b/indra/newview/skins/default/xui/en/floater_sound_devices.xml
@@ -15,14 +15,14 @@
layout="topleft"
name="floater_sound_devices"
title="Sound Devices"
- width="315">
+ width="490">
<panel
layout="topleft"
follows="all"
filename="panel_sound_devices.xml"
name="device_settings_panel"
width="400"
- left="2"
+ left="10"
top="26"
class="panel_voice_device_settings"/>
<text
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 8b8f70b940..8901583799 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -47,24 +47,12 @@
Click and drag to select land
</floater.string>
<floater.string
- name="grid_screen_text">
- Screen
+ name="status_selectcount">
+ [OBJ_COUNT] objects ( [PRIM_COUNT] prims[PE_STRING] ) selected
</floater.string>
<floater.string
- name="grid_local_text">
- Local
- </floater.string>
- <floater.string
- name="grid_world_text">
- World
- </floater.string>
- <floater.string
- name="grid_reference_text">
- Reference
- </floater.string>
- <floater.string
- name="grid_attachment_text">
- Attachment
+ name="status_selectprimequiv">
+ , [SEL_WEIGHT] prim equivs
</floater.string>
<button
follows="left|top"
@@ -221,7 +209,7 @@
<radio_group
follows="left|top"
left="5"
- top="59"
+ top="55"
height="70"
layout="topleft"
name="edit_radio_group">
@@ -255,18 +243,18 @@
label="Edit linked"
layout="topleft"
name="checkbox edit linked parts"
- top_pad="-10">
+ top_pad="-18">
<check_box.commit_callback
function="BuildTool.selectComponent"/>
</check_box>
<button
follows="left|top"
- height="23"
+ height="20"
label="Link"
- top_pad="2"
+ top="108"
layout="topleft"
- left="5"
+ left="143"
name="link_btn"
width="50">
<button.commit_callback
@@ -274,27 +262,15 @@
</button>
<button
follows="left|top"
- height="23"
+ height="20"
label="Unlink"
layout="topleft"
left_pad="2"
name="unlink_btn"
- width="105">
+ width="90">
<button.commit_callback
function="BuildTool.UnlinkObjects"/>
</button>
- <text
- text_color="LtGray_50"
- follows="top|left"
- halign="left"
- left_pad="3"
- name="RenderingCost"
- tool_tip="Shows the rendering cost calculated for this object"
- top_delta="11"
- type="string"
- width="100">
- þ: [COUNT]
- </text>
<check_box
control_name="ScaleUniform"
height="19"
@@ -302,7 +278,7 @@
layout="topleft"
left="143"
name="checkbox uniform"
- top="50"
+ top="48"
width="20" />
<text
height="19"
@@ -324,53 +300,29 @@
layout="topleft"
left="143"
name="checkbox stretch textures"
- top_pad="-6"
+ top_pad="-4"
follows="left|top"
width="134" />
<check_box
control_name="SnapEnabled"
height="18"
initial_value="true"
- label="Snap to grid"
+ label="Snap"
layout="topleft"
top_pad="0"
name="checkbox snap to grid"
width="134" />
- <combo_box
- height="23"
- layout="topleft"
- follows="left|top"
- name="combobox grid mode"
- tool_tip="Choose the type of grid ruler for positioning the object"
- top_pad="0"
- width="108">
- <combo_box.item
- label="World grid"
- name="World"
- value="World" />
- <combo_box.item
- label="Local grid"
- name="Local"
- value="Local" />
- <combo_box.item
- label="Reference grid"
- name="Reference"
- value="Reference" />
- <combo_box.commit_callback
- function="BuildTool.gridMode"/>
- </combo_box>
<button
left_pad="0"
- image_selected="ForwardArrow_Press"
- image_unselected="ForwardArrow_Off"
+ label="Options..."
layout="topleft"
follows="top|left"
name="Options..."
tool_tip="See more grid options"
- top_pad="-22"
- right="-10"
- width="18"
- height="23" >
+ top="83"
+ right="-35"
+ width="65"
+ height="21" >
<button.commit_callback
function="BuildTool.gridOptions"/>
</button>
@@ -385,7 +337,7 @@
left="10"
name="ToolCube"
tool_tip="Cube"
- top="51"
+ top="58"
width="20" />
<button
follows="left|top"
@@ -447,10 +399,10 @@
image_selected="Object_Hemi_Cylinder_Selected"
image_unselected="Object_Hemi_Cylinder"
layout="topleft"
- left_delta="29"
+ left="10"
name="ToolHemiCylinder"
tool_tip="Hemicylinder"
- top_delta="0"
+ top="84"
width="20" />
<button
follows="left|top"
@@ -515,7 +467,7 @@
left="10"
name="ToolTorus"
tool_tip="Torus"
- top="77"
+ top="109"
width="20" />
<button
follows="left|top"
@@ -575,9 +527,9 @@
height="19"
label="Keep Tool selected"
layout="topleft"
- left="4"
+ left="155"
name="checkbox sticky"
- top="101"
+ top="55"
width="128" />
<check_box
control_name="CreateToolCopySelection"
@@ -596,7 +548,7 @@
layout="topleft"
left_delta="18"
name="checkbox copy centers"
- top="132"
+ top="85"
width="134" />
<check_box
control_name="CreateToolCopyRotates"
@@ -749,89 +701,49 @@
<button.commit_callback
function="BuildTool.applyToSelection"/>
</button>
+ <text
+ text_color="LtGray_50"
+ type="string"
+ length="1"
+ height="16"
+ follows="left|top"
+ font="SansSerifSmall"
+ layout="topleft"
+ left="10"
+ name="selection_empty"
+ top_pad="0"
+ width="100">
+ Nothing selected.
+ </text>
<text
text_color="LtGray_50"
type="string"
length="1"
- height="10"
+ height="16"
follows="left|top"
- halign="right"
+ font="SansSerifSmall"
layout="topleft"
- right="-10"
- name="obj_count"
- top_pad="5"
- width="143">
- Objects: [COUNT]
+ left="10"
+ name="selection_count"
+ top_delta="0"
+ visible="false"
+ width="280">
</text>
<text
- text_color="LtGray_50"
- type="string"
- length="1"
- height="10"
- follows="left|top"
- halign="right"
- layout="topleft"
- right="-10"
- name="prim_count"
- width="143">
- Prims: [COUNT]
+ text_color="LtGray_50"
+ type="string"
+ length="1"
+ height="16"
+ follows="left|top"
+ font="SansSerifSmall"
+ layout="topleft"
+ left="10"
+ name="selection_weight"
+ top_pad="0"
+ visible="false"
+ width="280">
+ Physics weight [PHYS_WEIGHT], Render Cost [DISP_WEIGHT].
</text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- height="10"
- follows="left|top"
- halign="right"
- layout="topleft"
- right="-120"
- name="linked_set_count"
- top="144"
- width="80">
- Linked Sets: [COUNT]
- </text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- height="10"
- follows="left|top"
- halign="right"
- layout="topleft"
- top_delta="0"
- right="-8"
- name="linked_set_cost"
- tool_tip="Cost of currently selected linked sets as [prims],[physics complexity]"
- width="80">
- Cost: [COST] / [PHYSICS]
- </text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- follows="left|top"
- halign="right"
- layout="topleft"
- top_pad="5"
- right="-120"
- name="object_count"
- width="80">
- Objects: [COUNT]
- </text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- follows="left|top"
- halign="right"
- layout="topleft"
- top_delta="0"
- right="-8"
- name="object_cost"
- tool_tip="Cost of currently selected objects as [prims] / [physics complexity]"
- width="80">
- Cost: [COST] / [PHYSICS]
- </text>
<!-- <text -->
<!-- text_color="LtGray_50" -->
<!-- type="string" -->
@@ -858,6 +770,15 @@
<!-- width="143"> -->
<!-- Prims: [COUNT] -->
<!-- </text> -->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="6"
+ name="cost_text_border"
+ top="135"
+ width="282"/>
<tab_container
follows="left|top"
height="410"
diff --git a/indra/newview/skins/default/xui/en/floater_voice_effect.xml b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
index 9bf9cc6c77..2c754cd8d0 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
@@ -25,6 +25,46 @@
<string name="new_voice_effect">
(New!)
</string>
+
+ <!-- effect names begin -->
+ <string name="effect_Arena">Arena</string>
+ <string name="effect_Beast">Beast</string>
+ <string name="effect_Buff">Buff</string>
+ <string name="effect_Buzz">Buzz</string>
+ <string name="effect_Camille">Camille</string>
+ <string name="effect_Creepy">Creepy</string>
+ <string name="effect_CreepyBot">CreepyBot</string>
+ <string name="effect_Cyber">Cyber</string>
+ <string name="effect_DeepBot">DeepBot</string>
+ <string name="effect_Demon">Demon</string>
+ <string name="effect_Flirty">Flirty</string>
+ <string name="effect_Foxy">Foxy</string>
+ <string name="effect_Halloween_2010_Bonus">Halloween_2010_Bonus</string>
+ <string name="effect_Helium">Helium</string>
+ <string name="effect_Husky">Husky</string>
+ <string name="effect_Intercom">Intercom</string>
+ <string name="effect_Macho">Macho</string>
+ <string name="effect_Micro">Micro</string>
+ <string name="effect_Mini">Mini</string>
+ <string name="effect_Nano">Nano</string>
+ <string name="effect_Nightmare">Nightmare</string>
+ <string name="effect_PopBot">PopBot</string>
+ <string name="effect_Rachel">Rachel</string>
+ <string name="effect_Radio">Radio</string>
+ <string name="effect_Robot">Robot</string>
+ <string name="effect_Roxanne">Roxanne</string>
+ <string name="effect_Sabrina">Sabrina</string>
+ <string name="effect_Samantha">Samantha</string>
+ <string name="effect_Sexy">Sexy</string>
+ <string name="effect_Shorty">Shorty</string>
+ <string name="effect_Sneaky">Sneaky</string>
+ <string name="effect_Stallion">Stallion</string>
+ <string name="effect_Sultry">Sultry</string>
+ <string name="effect_Thunder">Thunder</string>
+ <string name="effect_Vixen">Vixen</string>
+ <string name="effect_WhinyBot">WhinyBot</string>
+ <!-- effect names end -->
+
<text
height="16"
word_wrap="true"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
deleted file mode 100644
index 3a44ba3763..0000000000
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ /dev/null
@@ -1,503 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="240"
- layout="topleft"
- name="Water Floater"
- help_topic="water_floater"
- save_rect="true"
- title="ADVANCED WATER EDITOR"
- width="700">
- <floater.string
- name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </floater.string>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="10"
- name="KeyFramePresetsText"
- top="34"
- font="SansSerif"
- width="85">
- Water Presets:
- </text>
- <combo_box
- height="23"
- layout="topleft"
- left_delta="95"
- name="WaterPresetsCombo"
- top_delta="-4"
- width="150" />
- <button
- height="23"
- label="New"
- label_selected="New"
- layout="topleft"
- left_pad="3"
- name="WaterNewPreset"
- top_delta="0"
- width="70" />
- <button
- height="23"
- label="Save"
- label_selected="Save"
- layout="topleft"
- left_pad="3"
- name="WaterSavePreset"
- top_delta="0"
- width="70" />
- <button
- height="23"
- label="Delete"
- label_selected="Delete"
- layout="topleft"
- left_pad="3"
- name="WaterDeletePreset"
- top_delta="0"
- width="70" />
- <tab_container
- border="false"
- follows="left|top"
- height="180"
- halign="center"
- layout="topleft"
- left="0"
- name="Water Tabs"
- tab_position="top"
- top="60"
- width="700">
- <panel
- border="true"
- follows="all"
- height="180"
- label="SETTINGS"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- help_topic="water_settings_tab"
- name="Settings"
- top="0"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="BHText"
- top="4"
- width="200">
- Water Fog Color
- </text>
- <color_swatch
- can_apply_immediately="true"
- color="0.5 0.5 0.5 1"
- follows="left|top"
- height="50"
- layout="topleft"
- left="40"
- name="WaterFogColor"
- tool_tip="Click to open color picker"
- top="30"
- width="40" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="WaterFogDensText"
- top="84"
- width="200">
- Fog Density Exponent
- </text>
- <slider
- control_name="WaterFogDensity"
- decimal_digits="1"
- follows="left"
- height="10"
- initial_value="16"
- layout="topleft"
- left="24"
- max_val="10"
- name="WaterFogDensity"
- top="124"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="WaterUnderWaterFogModText"
- top="124"
- width="200">
- Underwater Fog Modifier
- </text>
- <slider
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="16"
- layout="topleft"
- left="24"
- max_val="2"
- name="WaterUnderWaterFogMod"
- top="164"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="BDensText"
- top="4"
- width="200">
- Reflection Wavelet Scale
- </text>
- <slider
- control_name="WaterNormalScaleX"
- decimal_digits="1"
- follows="left"
- height="15"
- initial_value="0.7"
- label="1"
- layout="topleft"
- max_val="10"
- name="WaterNormalScaleX"
- top_pad="24"
- width="200" />
- <slider
- control_name="WaterNormalScaleY"
- decimal_digits="1"
- follows="left"
- height="15"
- initial_value="0.7"
- label="2"
- layout="topleft"
- max_val="10"
- name="WaterNormalScaleY"
- top_pad="4"
- width="200" />
- <slider
- control_name="WaterNormalScaleZ"
- decimal_digits="1"
- follows="left"
- height="15"
- initial_value="0.7"
- label="3"
- layout="topleft"
- max_val="10"
- name="WaterNormalScaleZ"
- top_pad="4"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- name="HDText"
- top="84"
- width="200">
- Fresnel Scale
- </text>
- <slider
- control_name="WaterFresnelScale"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- name="WaterFresnelScale"
- top="124"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- name="FresnelOffsetText"
- top="124"
- width="200">
- Fresnel Offset
- </text>
- <slider
- control_name="WaterFresnelOffset"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- name="WaterFresnelOffset"
- top="164"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="DensMultText"
- top="4"
- width="200">
- Refract Scale Above
- </text>
- <slider
- control_name="WaterScaleAbove"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.1"
- layout="topleft"
- left="494"
- name="WaterScaleAbove"
- top="44"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="WaterScaleBelowText"
- top="44"
- width="200">
- Refract Scale Below
- </text>
- <slider
- control_name="WaterScaleBelow"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0"
- layout="topleft"
- left="494"
- name="WaterScaleBelow"
- top="84"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="MaxAltText"
- top="84"
- width="200">
- Blur Multiplier
- </text>
- <slider
- control_name="WaterBlurMult"
- follows="left"
- height="10"
- increment="0.001"
- initial_value="0"
- layout="topleft"
- left="494"
- max_val="0.16"
- name="WaterBlurMult"
- top="124"
- width="200" />
- </panel>
- <panel
- border="true"
- follows="all"
- height="180"
- label="IMAGE"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- help_topic="water_waves_tab"
- name="Waves"
- top="0"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="BHText"
- top="4"
- width="200">
- Big Wave Direction
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- name="WaterWave1DirXText"
- top_pad="5"
- width="10">
- X
- </text>
- <slider
- control_name="WaterWave1DirX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- max_val="4"
- min_val="-4"
- name="WaterWave1DirX"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WaterWave1DirYText"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WaterWave1DirY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- max_val="4"
- min_val="-4"
- name="WaterWave1DirY"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText2"
- top_pad="-10"
- width="355">
- Little Wave Direction
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- left_delta="0"
- name="WaterWave2DirXText"
- top_pad="5"
- width="10">
- X
- </text>
- <slider
- control_name="WaterWave2DirX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- max_val="4"
- min_val="-4"
- name="WaterWave2DirX"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WaterWave2DirYText"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WaterWave2DirY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- max_val="4"
- min_val="-4"
- name="WaterWave2DirY"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="240"
- name="BHText3"
- top="4"
- width="200">
- Normal Map
- </text>
- <texture_picker
- height="143"
- layout="topleft"
- left="250"
- name="WaterNormalMap"
- top="22"
- width="128" />
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml
index e04a72cbc0..0eda9ae62a 100644
--- a/indra/newview/skins/default/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/en/floater_web_content.xml
@@ -18,6 +18,7 @@
follows="left|right|top|bottom"
layout="topleft"
left="5"
+ animate="false"
name="stack1"
orientation="vertical"
top="20"
@@ -39,6 +40,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
hover_glow_amount="0.15"
tool_tip="Navigate back"
follows="left|top"
@@ -57,6 +59,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Navigate forward"
follows="left|top"
height="22"
@@ -74,6 +77,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Stop navigation"
enabled="true"
follows="left|top"
@@ -92,6 +96,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Reload page"
follows="left|top"
height="22"
@@ -136,6 +141,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Open current URL in your desktop browser"
follows="right|top"
enabled="true"
@@ -156,14 +162,20 @@
name="external_controls"
top_delta="0"
user_resize="false"
+ auto_resize="true"
width="585">
<web_browser
- bottom="-22"
+ bottom="-2"
follows="all"
layout="topleft"
left="0"
name="webbrowser"
top="0"/>
+ </layout_panel>
+ <layout_panel name="status_bar"
+ height="23"
+ auto_resize="false"
+ user_resize="false">
<text
type="string"
length="200"
@@ -174,7 +186,7 @@
name="statusbartext"
parse_urls="false"
text_color="0.4 0.4 0.4 1"
- top_pad="5"
+ top_pad="3"
width="495"/>
<progress_bar
color_bar="0.3 1.0 0.3 1"
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
deleted file mode 100644
index 7923dd87fa..0000000000
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ /dev/null
@@ -1,1288 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="256"
- layout="topleft"
- name="WindLight floater"
- help_topic="windlight_floater"
- save_rect="true"
- title="ADVANCED SKY EDITOR"
- width="700">
- <floater.string
- name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </floater.string>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="KeyFramePresetsText"
- top="34"
- width="135">
- Sky Presets:
- </text>
- <combo_box
- height="23"
- layout="topleft"
- left_delta="135"
- name="WLPresetsCombo"
- top_delta="-4"
- width="150" />
- <button
- height="23"
- label="New"
- label_selected="New"
- layout="topleft"
- left_pad="3"
- name="WLNewPreset"
- width="70" />
- <button
- height="23"
- label="Save"
- label_selected="Save"
- layout="topleft"
- left_pad="3"
- name="WLSavePreset"
- width="70" />
- <button
- height="23"
- label="Delete"
- label_selected="Delete"
- layout="topleft"
- left_pad="3"
- name="WLDeletePreset"
- width="70" />
- <button
- height="23"
- label="Day Cycle Editor"
- label_selected="Day Cycle Editor"
- layout="topleft"
- right="-10"
- name="WLDayCycleMenuButton"
- top_pad="-23"
- width="120" />
- <tab_container
- follows="left|top"
- height="196"
- halign="center"
- layout="topleft"
- left="0"
- name="WindLight Tabs"
- tab_position="top"
- top="60"
- width="700">
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="196"
- label="ATMOSPHERE"
- layout="topleft"
- left="1"
- mouse_opaque="false"
- help_topic="windlight_atmosphere_tab"
- name="Atmosphere"
- top="60"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="BHText"
- top="4"
- width="355">
- Blue Horizon
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- name="BHText2"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLBlueHorizonR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLBlueHorizonR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- top_pad="-15"
- name="BHText3"
- width="10">
- G
- </text>
- <slider
- control_name="WLBlueHorizonG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueHorizonG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- name="BHText4"
- left="10"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLBlueHorizonB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- name="WLBlueHorizonB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- name="BHText5"
- left="10"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLBlueHorizonI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- name="WLBlueHorizonI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- top_pad="-10"
- name="BDensText"
- width="355">
- Haze Horizon
- </text>
- <slider
- control_name="WLHazeHorizon"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.25"
- layout="topleft"
- left="23"
- top_delta="0"
- top_pad="27"
- name="WLHazeHorizon"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="BDensText2"
- top="4"
- width="355">
- Blue Density
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText6"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLBlueDensityR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLBlueDensityR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText7"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLBlueDensityG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueDensityG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText8"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLBlueDensityB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueDensityB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText9"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLBlueDensityI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1"
- layout="topleft"
- left_delta="0"
- name="WLBlueDensityI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="HDText"
- top_pad="-10"
- width="355">
- Haze Density
- </text>
- <slider
- control_name="WLHazeDensity"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="258"
- max_val="4"
- name="WLHazeDensity"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="DensMultText"
- top="4"
- width="355">
- Density Multiplier
- </text>
- <slider
- control_name="WLDensityMult"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.1"
- layout="topleft"
- left_delta="13"
- max_val="0.9"
- name="WLDensityMult"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLDistanceMultText"
- top_pad="-10"
- width="355">
- Distance Multiplier
- </text>
- <slider
- control_name="WLDistancMult"
- decimal_digits="1"
- follows="left"
- height="10"
- initial_value="1.0"
- layout="topleft"
- left_delta="13"
- max_val="100"
- name="WLDistanceMult"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="MaxAltText"
- top_pad="-15"
- width="355">
- Max Altitude
- </text>
- <slider
- control_name="WLMaxAltitude"
- decimal_digits="0"
- follows="left"
- height="10"
- increment="1"
- initial_value="500"
- layout="topleft"
- left_delta="13"
- max_val="4000"
- name="WLMaxAltitude"
- top_pad="27"
- width="200" />
- </panel>
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="196"
- label="LIGHTING"
- layout="topleft"
- left_delta="0"
- help_topic="windlight_lighting_tab"
- name="Lighting"
- top_delta="4"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="SLCText"
- top="4"
- width="355">
- Sun/Moon Color
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLSunlightR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLSunlightR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText2"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLSunlightG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLSunlightG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText3"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLSunlightB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLSunlightB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText4"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLSunlightI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLSunlightI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="TODText"
- top_pad="-10"
- width="355">
- Sun/Moon Position
- </text>
- <icon
- height="20"
- image_name="icon_diurnal.tga"
- layout="topleft"
- left_delta="14"
- top_pad="10"
- name="SkyDayCycle"
- use_draw_context_alpha="false"
- width="148" />
- <slider
- control_name="WLSunAngle"
- follows="left"
- height="10"
- increment="0.001"
- initial_value="0.7"
- layout="topleft"
- left_delta="-8"
- name="WLSunAngle"
- top_pad="20"
- width="207" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="WLAmbientText"
- top="4"
- width="355">
- Ambient
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText5"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLAmbientR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLAmbientR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText6"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLAmbientG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLAmbientG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText7"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLAmbientB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLAmbientB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText8"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLAmbientI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1"
- layout="topleft"
- left_delta="0"
- name="WLAmbientI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLEastAngleText"
- top_pad="-10"
- width="355">
- East Angle
- </text>
- <slider
- control_name="WLEastAngle"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.0"
- layout="topleft"
- left_delta="13"
- name="WLEastAngle"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="SunGlowText"
- top="4"
- width="355">
- Sun Glow
- </text>
- <slider
- control_name="WLGlowB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.1"
- label="Focus "
- layout="topleft"
- left_delta="0"
- max_val="0.5"
- name="WLGlowB"
- top_pad="27"
- width="200" />
- <slider
- control_name="WLGlowR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.25"
- label="Size "
- layout="topleft"
- left_delta="0"
- max_val="1.99"
- min_val="1"
- name="WLGlowR"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="0"
- name="SceneGammaText"
- top_pad="-10"
- width="200">
- Scene Gamma
- </text>
- <slider
- control_name="WLGamma"
- decimal_digits="2"
- follows="bottom"
- height="10"
- increment="0.01"
- initial_value="2.0"
- layout="topleft"
- left_delta="0"
- max_val="10"
- name="WLGamma"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="0"
- name="WLStarText"
- top_pad="-10"
- width="355">
- Star Brightness
- </text>
- <slider
- control_name="WLStarAlpha"
- decimal_digits="2"
- follows="bottom"
- height="10"
- increment="0.01"
- initial_value="0"
- layout="topleft"
- left_delta="0"
- max_val="2"
- name="WLStarAlpha"
- top_pad="27"
- width="200" />
- </panel>
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="196"
- label="CLOUDS"
- layout="topleft"
- left_delta="0"
- mouse_opaque="false"
- help_topic="windlight_clouds_tab"
- name="Clouds"
- top_delta="4"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="WLCloudColorText"
- top="4"
- width="355">
- Cloud Color
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLCloudColorR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLCloudColorR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText2"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLCloudColorG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLCloudColorG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText3"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLCloudColorB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLCloudColorB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText4"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLCloudColorI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLCloudColorI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLCloudColorText2"
- top_pad="-10"
- width="355">
- Cloud XY/Density
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText5"
- top_pad="5"
- width="10">
- X
- </text>
- <slider
- control_name="WLCloudX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLCloudX"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText6"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WLCloudY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLCloudY"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText7"
- top_pad="-15"
- width="10">
- D
- </text>
- <slider
- control_name="WLCloudDensity"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLCloudDensity"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="WLCloudCoverageText"
- top="4"
- width="355">
- Cloud Coverage
- </text>
- <slider
- control_name="WLCloudCoverage"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_delta="13"
- name="WLCloudCoverage"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLCloudScaleText"
- top_pad="-10"
- width="355">
- Cloud Scale
- </text>
- <slider
- control_name="WLCloudScale"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="13"
- min_val="0.01"
- name="WLCloudScale"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLCloudDetailText"
- top_pad="-10"
- width="355">
- Cloud Detail (XY/Density)
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText8"
- top_pad="8"
- width="10">
- X
- </text>
- <slider
- control_name="WLCloudDetailX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="3"
- top_pad="8"
- name="WLCloudDetailX"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText9"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WLCloudDetailY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_delta="0"
- name="WLCloudDetailY"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText10"
- top_pad="-15"
- width="10">
- D
- </text>
- <slider
- control_name="WLCloudDetailDensity"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLCloudDetailDensity"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="WLCloudScrollXText"
- top="4"
- width="355">
- Cloud Scroll X
- </text>
- <check_box
- control_name="WLCloudLockX"
- follows="left"
- height="16"
- label="Lock"
- layout="topleft"
- left="625"
- name="WLCloudLockX"
- width="200" />
- <slider
- control_name="WLCloudScrollX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left="494"
- max_val="10"
- min_val="-10"
- name="WLCloudScrollX"
- top="45"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="WLCloudScrollYText"
- top_delta="-1"
- width="355">
- Cloud Scroll Y
- </text>
- <check_box
- control_name="WLCloudLockY"
- follows="left"
- height="16"
- label="Lock"
- layout="topleft"
- left="625"
- name="WLCloudLockY"
- width="200" />
- <slider
- control_name="WLCloudScrollY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left="494"
- max_val="10"
- min_val="-10"
- name="WLCloudScrollY"
- top="85"
- width="200" />
- <check_box
- control_name="DrawClassicClouds"
- follows="left"
- height="16"
- label="Draw Classic Clouds"
- layout="topleft"
- left="480"
- name="DrawClassicClouds"
- top="104"
- width="200" />
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index bd9e367d1f..bc3bcd331b 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -38,6 +38,7 @@
height="20"
left="8"
name="user_name_small"
+ parse_urls="false"
top="7"
text_color="White"
translate="false"
@@ -52,6 +53,7 @@
height="21"
left="8"
name="user_name"
+ parse_urls="false"
top="10"
text_color="White"
translate="false"
@@ -64,6 +66,7 @@
left="8"
name="user_slid"
font="SansSerifSmallBold"
+ parse_urls="false"
text_color="EmphasisColor"
translate="false"
value="teststring.pleaseignore"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 3ead67ca57..a7d1aa963c 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -135,6 +135,14 @@
name="login_panel_holder"
width="1024"/>
+ <debug_view follows="all"
+ left="0"
+ top="0"
+ mouse_opaque="false"
+ height="500"
+ name="DebugView"
+ width="1024"/>
+
<panel follows="all"
height="500"
left="0"
@@ -154,13 +162,6 @@
top="0"
width="1024"/>
</panel>
- <debug_view follows="all"
- left="0"
- top="0"
- mouse_opaque="false"
- height="500"
- name="DebugView"
- width="1024"/>
</layout_panel>
</layout_stack>
<panel mouse_opaque="false"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index b36b82ebd8..0f42000ae7 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -42,7 +42,7 @@
<menu_item_call.on_enable
function="File.EnableUpload" />
</menu_item_call>
- <menu_item_call
+ <menu_item_call
label="Model..."
layout="topleft"
name="Upload Model">
@@ -54,18 +54,6 @@
<menu_item_call.on_visible
function="File.VisibleUploadModel"/>
</menu_item_call>
- <menu_item_call
- label="Model Wizard..."
- layout="topleft"
- name="Upload Model Wizard">
- <menu_item_call.on_click
- function="Floater.Show"
- parameter="upload_model_wizard" />
- <menu_item_call.on_enable
- function="File.EnableUploadModel" />
- <menu_item_call.on_visible
- function="File.VisibleUploadModel"/>
- </menu_item_call>
<menu_item_call
label="Bulk (L$[COST] per file)..."
layout="topleft"
@@ -263,4 +251,4 @@
parameter="eyes" />
</menu_item_call>
</menu>
-</menu>
+</menu> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
index c39c26f25f..960da4bd7a 100644
--- a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
@@ -28,4 +28,16 @@
<menu_item_call.on_enable
function="Edit.EnablePaste" />
</menu_item_call>
+ <menu_item_separator
+ layout="topleft"
+ name="debug_separator"
+ visible="false" />
+ <menu_item_call
+ label="Open Web Inspector"
+ layout="topleft"
+ name="open_webinspector"
+ visible="false">
+ <menu_item_call.on_click
+ function="Open.WebInspector" />
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_mode_change.xml b/indra/newview/skins/default/xui/en/menu_mode_change.xml
new file mode 100644
index 0000000000..87d1a0a7a2
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_mode_change.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ name="Mode Change">
+ <menu_item_check
+ label="Basic"
+ name="BasicMode">
+ <on_check
+ function="CheckSessionSettings"
+ parameter="settings_minimal.xml" />
+ <on_click
+ function="ChangeMode"
+ parameter="basic"/>
+ </menu_item_check>
+ <menu_item_check
+ label="Advanced"
+ name="AdvancedMode">
+ <on_check
+ function="CheckSessionSettings"
+ parameter="" />
+ <on_click
+ function="ChangeMode"
+ parameter="advanced"/>
+ </menu_item_check>
+ </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 81046e99a0..36ebe73753 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -232,6 +232,16 @@
function="SideTray.PanelPeopleTab"
parameter="nearby_panel" />
</menu_item_call>
+ <menu_item_check
+ label="Nearby Voice"
+ name="Nearby Voice">
+ <menu_item_check.on_check
+ function="Floater.Visible"
+ parameter="voice_controls" />
+ <menu_item_check.on_click
+ function="Floater.Toggle"
+ parameter="voice_controls" />
+ </menu_item_check>
</menu>
<menu
create_jump_keys="true"
@@ -470,7 +480,7 @@
<menu_item_separator/>
- <menu
+ <menu
create_jump_keys="true"
label="Sun"
name="Environment Settings"
@@ -505,24 +515,114 @@
function="World.EnvSettings"
parameter="midnight" />
</menu_item_call>
- <menu_item_call
- label="Estate Time"
- name="Revert to Region Default">
- <menu_item_call.on_click
- function="World.EnvSettings"
- parameter="default" />
- </menu_item_call>
-
- <menu_item_separator/>
-
- <menu_item_call
- label="Environment Editor"
- name="Environment Editor">
- <menu_item_call.on_click
- function="World.EnvSettings"
- parameter="editor" />
- </menu_item_call>
</menu>
+
+
+ <menu
+ create_jump_keys="true"
+ label="Enviroment Editor"
+ name="Enviroment Editor"
+ tear_off="true">
+
+ <menu_item_call
+ label="Enviroment Settings..."
+ name="Enviroment Settings">
+ <menu_item_call.on_click
+ function="World.EnvSettings"
+ parameter="editor"/>
+ </menu_item_call>
+
+ <menu_item_separator/>
+
+ <menu
+ name="Water Presets"
+ label="Water Presets">
+ <menu_item_call
+ label="New preset..."
+ name="new_water_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="new_water"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Edit preset..."
+ name="edit_water_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="edit_water"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Delete preset..."
+ name="delete_water_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="delete_water"/>
+ <menu_item_call.on_enable
+ function="World.EnableEnvPreset"
+ parameter="delete_water"/>
+ </menu_item_call>
+ </menu>
+
+ <menu
+ name="Sky Presets"
+ label="Sky Presets">
+ <menu_item_call
+ label="New preset..."
+ name="new_sky_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="new_sky"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Edit preset..."
+ name="edit_sky_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="edit_sky"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Delete preset..."
+ name="delete_sky_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="delete_sky"/>
+ <menu_item_call.on_enable
+ function="World.EnableEnvPreset"
+ parameter="delete_sky"/>
+ </menu_item_call>
+ </menu>
+
+ <menu
+ name="Day Presets"
+ label="Day Presets">
+ <menu_item_call
+ label="New preset..."
+ name="new_day_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="new_day_cycle"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Edit preset..."
+ name="edit_day_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="edit_day_cycle"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Delete preset..."
+ name="delete_day_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="delete_day_cycle"/>
+ <menu_item_call.on_enable
+ function="World.EnableEnvPreset"
+ parameter="delete_day_cycle"/>
+ </menu_item_call>
+ </menu>
+ </menu>
+
+
</menu>
<menu
create_jump_keys="true"
@@ -983,19 +1083,7 @@
<menu_item_call.on_visible
function="File.VisibleUploadModel"/>
</menu_item_call>
- <menu_item_call
- label="Model Wizard..."
- layout="topleft"
- name="Upload Model Wizard">
- <menu_item_call.on_click
- function="Floater.Show"
- parameter="upload_model_wizard" />
- <menu_item_call.on_enable
- function="File.EnableUploadModel" />
- <menu_item_call.on_visible
- function="File.VisibleUploadModel"/>
- </menu_item_call>
- <menu_item_call
+ <menu_item_call
label="Bulk (L$[COST] per file)..."
layout="topleft"
name="Bulk Upload">
@@ -1162,16 +1250,6 @@
function="ToggleControl"
parameter="QuietSnapshotsToDisk" />
</menu_item_check>
- <menu_item_check
- label="Compress Snapshots to Disk"
- name="CompressSnapshotsToDisk">
- <menu_item_check.on_check
- function="CheckControl"
- parameter="CompressSnapshotsToDisk" />
- <menu_item_check.on_click
- function="ToggleControl"
- parameter="CompressSnapshotsToDisk" />
- </menu_item_check>
<menu_item_separator/>
@@ -1997,15 +2075,14 @@
</menu_item_check>
<menu_item_check
label="Show Upload Cost"
- layout="topleft"
name="Show Upload Cost">
- <menu_item_check.on_check
+ <menu_item_check.on_check
function="CheckControl"
parameter="DebugShowUploadCost" />
<menu_item_check.on_click
- function="ToggleControl"
- parameter="DebugShowUploadCost" />
- </menu_item_check>
+ function="ToggleControl"
+ parameter="DebugShowUploadCost" />
+ </menu_item_check>
<menu_item_check
label="Show Render Info"
name="Show Render Info">
@@ -2016,7 +2093,7 @@
function="ToggleControl"
parameter="DebugShowRenderInfo" />
</menu_item_check>
- <menu_item_check
+ <menu_item_check
label="Show Texture Info"
name="Show Texture Info">
<menu_item_check.on_check
@@ -2056,6 +2133,16 @@
function="ToggleControl"
parameter="DebugShowMemory" />
</menu_item_check>
+ <menu_item_check
+ label="Show Private Mem Info"
+ name="Show Private Mem Info">
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="DebugShowPrivateMem" />
+ <menu_item_check.on_click
+ function="ToggleControl"
+ parameter="DebugShowPrivateMem" />
+ </menu_item_check>
<menu_item_separator/>
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
index 0ac2c14253..0e858ccf10 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -20,4 +20,11 @@
function="Gear.OnEnable"
parameter="take_off" />
</menu_item_call>
+ <menu_item_call
+ label="Copy outfit list to clipboard"
+ layout="topleft"
+ name="copy">
+ <on_click
+ function="Gear.Copy" />
+ </menu_item_call>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 09105c1d28..99ab56d10a 100755..100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3698,6 +3698,19 @@ Join me in [REGION]
<notification
icon="alertmodal.tga"
+ name="TooManyTeleportOffers"
+ type="alertmodal">
+You attempted to make [OFFERS] teleport offers
+which exceeds the limit of [LIMIT].
+ <tag>group</tag>
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="OfferTeleportFromGod"
type="alertmodal">
God summon Resident to your location?
@@ -4841,18 +4854,6 @@ Do you wish to overwrite the saved preset?
<notification
icon="alertmodal.tga"
- name="WLDeletePresetAlert"
- type="alertmodal">
-Do you wish to delete [SKY]?
- <tag>confirm</tag>
- <usetemplate
- name="okcancelbuttons"
- notext="No"
- yestext="Yes"/>
- </notification>
-
- <notification
- icon="alertmodal.tga"
name="WLNoEditDefault"
type="alertmodal">
You cannot edit or delete a default preset.
@@ -4869,81 +4870,53 @@ This day cycle file references a missing sky file: [SKY].
<notification
icon="alertmodal.tga"
- name="PPSaveEffectAlert"
+ name="WLRegionApplyFail"
type="alertmodal">
-PostProcess Effect exists. Do you still wish overwrite it?
- <usetemplate
- name="okcancelbuttons"
- notext="No"
- yestext="Yes"/>
- </notification>
-
- <notification
- icon="alert.tga"
- name="NewSkyPreset"
- type="alert">
-Give me a name for the new sky.
- <tag>confirm</tag>
- <form name="form">
- <input name="message" type="text">
-New Preset
- </input>
- <button
- default="true"
- index="0"
- name="OK"
- text="OK"/>
- <button
- index="1"
- name="Cancel"
- text="Cancel"/>
- </form>
+Sorry, the settings couldn't be applied to the region. Leaving the region and then returning may help rectify the problem. The reason given was: [FAIL_REASON]
</notification>
<notification
+ functor="GenericAcknowledge"
icon="alertmodal.tga"
- name="ExistsSkyPresetAlert"
+ name="EnvCannotDeleteLastDayCycleKey"
type="alertmodal">
-Preset already exists!
- <tag>fail</tag>
+Unable to delete the last key in this day cycle because you cannot have an empty day cycle. You should modify the last remaining key instead of attempting to delete it and then to create a new one.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
- icon="alert.tga"
- name="NewWaterPreset"
- type="alert">
-Give me a name for the new water preset.
- <tag>confirm</tag>
- <form name="form">
- <input name="message" type="text">
-New Preset
- </input>
- <button
- default="true"
- index="0"
- name="OK"
- text="OK"/>
- <button
- index="1"
- name="Cancel"
- text="Cancel"/>
- </form>
+ functor="GenericAcknowledge"
+ icon="alertmodal.tga"
+ name="DayCycleTooManyKeyframes"
+ type="alertmodal">
+You cannot add any more keyframes to this day cycle. The maximum number of keyframes for day cycles of [SCOPE] scope is [MAX].
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
+ functor="GenericAcknowledge"
icon="alertmodal.tga"
- name="ExistsWaterPresetAlert"
+ name="EnvUpdateRate"
type="alertmodal">
-Preset already exists!
- <tag>fail</tag>
+ You may only update region environmental settings every [WAIT] seconds. Wait at least that long and then try again.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
- name="WaterNoEditDefault"
+ name="PPSaveEffectAlert"
type="alertmodal">
-You cannot edit or delete a default preset.
- <tag>fail</tag>
+PostProcess Effect exists. Do you still wish overwrite it?
+ <usetemplate
+ name="okcancelbuttons"
+ notext="No"
+ yestext="Yes"/>
</notification>
<notification
@@ -5018,19 +4991,19 @@ Would you like to automatically wear the clothing you are about to create?
name="NotAgeVerified"
type="alertmodal">
<tag>fail</tag>
-You must be age-verified to visit this area. Do you want to go to the [SECOND_LIFE] website and verify your age?
+To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18.
+Note this will launch your web browser.
[_URL]
<tag>confirm</tag>
<url option="0" name="url">
-
- https://secondlife.com/account/verification.php
+ https://secondlife.com/my/account/verification.php
</url>
<usetemplate
ignoretext="I have not verified my age"
name="okcancelignore"
- notext="No"
- yestext="Yes"/>
+ notext="Cancel"
+ yestext="Go to Age Verification"/>
</notification>
<notification
@@ -5116,7 +5089,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
name="FriendOnline"
type="notifytip">
<tag>friendship</tag>
-[NAME] is Online
+&lt;nolink&gt;[NAME]&lt;/nolink&gt; is Online
</notification>
<notification
@@ -5124,7 +5097,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
name="FriendOffline"
type="notifytip">
<tag>friendship</tag>
-[NAME] is Offline
+&lt;nolink&gt;[NAME]&lt;/nolink&gt; is Offline
</notification>
<notification
@@ -5655,6 +5628,15 @@ This area has building disabled. You can&apos;t build or rez objects here.
<notification
icon="notify.tga"
+ name="SeeAvatars"
+ persist="true"
+ type="notify"
+ unique="true">
+This parcel hides avatars and text chat from another parcel. You can&apos;t see other residents outside the parcel, and those outside are not able to see you. Regular text chat on channel 0 is also blocked.
+ </notification>
+
+ <notification
+ icon="notify.tga"
name="ScriptsStopped"
persist="true"
type="notify">
@@ -5921,7 +5903,7 @@ No valid parcel could be found.
name="ObjectGiveItem"
type="offer">
An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] has given you this [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button
index="0"
@@ -6279,6 +6261,10 @@ Grant this request?
[MESSAGE]
<form name="form">
<button
+ index="-2"
+ name="Mute"
+ text="Block"/>
+ <button
index="-1"
name="Ignore"
text="Ignore"/>
@@ -6294,6 +6280,10 @@ Grant this request?
[MESSAGE]
<form name="form">
<button
+ index="-2"
+ name="Mute"
+ text="Block"/>
+ <button
index="-1"
name="Ignore"
text="Ignore"/>
@@ -6828,6 +6818,20 @@ Select residents to share with.
See the log file for details.
</notification>
+ <notification
+ name="MeshUploadPermError"
+ icon="alert.tga"
+ type="alert">
+ Error while requesting mesh upload permissons.
+ </notification>
+
+ <notification
+ name="RegionCapabilityRequestError"
+ icon="alert.tga"
+ type="alert">
+ Could not get region capability &apos;[CAPABILITY]&apos;.
+ </notification>
+
<notification
icon="notifytip.tga"
name="ShareItemsConfirmation"
@@ -6838,7 +6842,7 @@ Are you sure you want to share the following items:
With the following Residents:
-[RESIDENTS]
+&lt;nolink&gt;[RESIDENTS]&lt;/nolink&gt;
<tag>confirm</tag>
<usetemplate
name="okcancelbuttons"
@@ -7143,6 +7147,20 @@ Click and drag anywhere on the world to rotate your view
<tag>funds</tag>
</notification>
+ <notification
+ icon="alertmodal.tga"
+ name="LowMemory"
+ type="alertmodal">
+ Your memory pool is low. Some functions of SL are disabled to avoid crash. Please close other applications. Restart SL if this persists.
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="ForceQuitDueToLowMemory"
+ type="alertmodal">
+ SL will quit in 30 seconds due to out of memory.
+ </notification>
+
<notification
name="PopupAttempt"
icon="Popup_Caution"
@@ -7161,6 +7179,138 @@ Click and drag anywhere on the world to rotate your view
</notification>
<notification
+ icon="alertmodal.tga"
+ name="SOCKS_NOT_PERMITTED"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the connection, not allowed by rule set.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_CONNECT_ERROR"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the connection, could not open TCP channel.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_NOT_ACCEPTABLE"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the selected authentication system.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_AUTH_FAIL"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" reported your credentials are invalid.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_UDP_FWD_NOT_GRANTED"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the UDP associate request.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_HOST_CONNECT_FAILED"
+ type="alertmodal">
+ Could not connect to SOCKS 5 proxy server "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_UNKNOWN_STATUS"
+ type="alertmodal">
+ Unknown proxy error with server "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_INVALID_HOST"
+ type="alertmodal">
+ Invalid SOCKS proxy address or port "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_BAD_CREDS"
+ type="alertmodal">
+ Invalid SOCKS 5 username or password.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PROXY_INVALID_HTTP_HOST"
+ type="alertmodal">
+ Invalid HTTP proxy address or port "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PROXY_INVALID_SOCKS_HOST"
+ type="alertmodal">
+ Invalid SOCKS proxy address or port "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="ChangeProxySettings"
+ type="alert">
+ Proxy settings take effect after you restart [APP_NAME].
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
name="AuthRequest"
type="browser">
The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;[REALM]&apos; requires a user name and password.
diff --git a/indra/newview/skins/default/xui/en/panel_activeim_row.xml b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
index 1d8bfa0672..9369d1b5cf 100644
--- a/indra/newview/skins/default/xui/en/panel_activeim_row.xml
+++ b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
@@ -75,6 +75,7 @@
width="250"
length="1"
follows="right|left"
+ parse_urls="false"
use_ellipses="true"
font="SansSerifBold">
TestString PleaseIgnore
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index e40dc430fc..b7c58eb6ab 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -60,6 +60,7 @@
layout="topleft"
left_pad="5"
name="avatar_name"
+ parse_urls="false"
top="6"
use_ellipses="true"
value="(loading)"
diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
index 9e70706603..beea53437a 100644
--- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
+++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
@@ -52,7 +52,7 @@
multi_select="true"
name="list_attachments"
top="0"
- width="311"/>
+ width="311" />
</accordion_tab>
<accordion_tab
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index 82dfb445da..2ec2e03e8c 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -220,7 +220,7 @@
height="23"
layout="topleft"
left_pad="4"
- name="layout_panel1"
+ name="layout_panel2"
user_resize="false"
auto_resize="true"
width="146">
diff --git a/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml
new file mode 100644
index 0000000000..d06190ec54
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_inventory_panel
+ name="inventory_inbox"
+ start_folder="Received Items"
+ follows="all" layout="topleft"
+ top="0" left="0" height="165" width="308"
+ top_pad="0"
+ bg_opaque_color="DkGray2"
+ bg_alpha_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ border="false"
+ bevel_style="none"
+ show_item_link_overlays="true"
+ >
+ <scroll reserve_scroll_corner="false" />
+</inbox_inventory_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
index 46c1add739..4251128714 100644
--- a/indra/newview/skins/default/xui/en/panel_instant_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml
@@ -63,6 +63,7 @@
layout="topleft"
left_pad="5"
name="user_name"
+ parse_urls="false"
text_color="white"
top="8"
translate="false"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 8d0f1437e6..983f93cb03 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -117,7 +117,7 @@ label="Remember password"
name="connect_btn"
top="35"
width="90" />
- <text
+ <text
follows="left|bottom"
font="SansSerifSmall"
height="15"
@@ -125,25 +125,25 @@ label="Remember password"
name="mode_selection_text"
top="20"
width="130">
- Mode:
- </text>
-<combo_box
- follows="left|bottom"
+ Mode:
+ </text>
+ <combo_box
+ follows="left|bottom"
height="23"
- max_chars="128"
+ max_chars="128"
tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
- top_pad="0"
- name="mode_combo"
- width="110">
-<combo_box.item
- label="Basic"
- name="Basic"
- value="settings_minimal.xml" />
-<combo_box.item
- label="Advanced"
- name="Advanced"
- value="" />
-</combo_box>
+ top_pad="0"
+ name="mode_combo"
+ width="110">
+ <combo_box.item
+ label="Basic"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced"
+ name="Advanced"
+ value="" />
+ </combo_box>
<text
follows="left|bottom"
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 8a7bd53054..9749b6fdd4 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -97,7 +97,7 @@
mouse_opaque="false"
name="location_combo"
top_delta="0"
- width="266">
+ width="226">
<combo_list
mouse_wheel_opaque="true"/>
<!-- *TODO: Delete. Let the location_input use the correct art sizes.
@@ -137,7 +137,7 @@
name="search_combo_box"
tool_tip="Search"
top_delta="0"
- width="200" >
+ width="244" >
<combo_editor
label="Search [SECOND_LIFE]"
name="search_combo_editor"/>
diff --git a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
new file mode 100644
index 0000000000..af32056428
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inventory_panel
+ name="inventory_outbox"
+ start_folder="Outbox"
+ follows="all" layout="topleft"
+ top="0" left="0" height="165" width="308"
+ top_pad="0"
+ bg_opaque_color="DkGray2"
+ bg_alpha_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ border="false"
+ bevel_style="none"
+ show_item_link_overlays="true"
+ >
+ <scroll reserve_scroll_corner="false" />
+</inventory_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
index 9f98019c94..a0096adc01 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
@@ -14,9 +14,7 @@
background_visible="true"
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
- no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
- no_matched_tabs_text.v_pad="10"
- no_visible_tabs_text.value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"
+
follows="all"
height="400"
layout="topleft"
@@ -24,6 +22,13 @@
name="outfits_accordion"
top="0"
width="309">
+ <no_matched_tabs_text
+ name="no_matched_outfits_msg"
+ value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
+ v_pad="10"/>
+ <no_visible_tabs_text
+ name="no_outfits_msg"
+ value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"/>
</accordion>
<panel
background_visible="true"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 775805ad2e..cc4522f944 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -110,8 +110,9 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<layout_panel
height="142"
layout="topleft"
+ min_dim="100"
mouse_opaque="false"
- user_resize="false"
+ user_resize="true"
visibility_control="NearbyListShowMap"
width="313">
<net_map
@@ -128,9 +129,9 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<layout_panel
height="213"
layout="topleft"
- min_height="100"
+ min_dim="100"
mouse_opaque="false"
- user_resize="false"
+ user_resize="true"
width="313">
<avatar_list
allow_select="true"
@@ -621,7 +622,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="im_btn_lp"
user_resize="false"
auto_resize="true"
width="41">
@@ -642,7 +643,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="call_btn_lp"
user_resize="false"
auto_resize="true"
width="52">
@@ -663,7 +664,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="share_btn_lp"
user_resize="false"
auto_resize="true"
width="66">
@@ -684,7 +685,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="teleport_btn_lp"
user_resize="false"
auto_resize="true"
width="77">
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 774a9e8bbf..e280115bda 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -153,6 +153,14 @@
name="icon_DamageNo"
translate="false"
value="Parcel_DamageNo_Dark" />
+ <string
+ name="icon_SeeAVs_Off"
+ translate="false"
+ value="Parcel_SeeAVsOff_Dark" />
+ <string
+ name="icon_SeeAVs_On"
+ translate="false"
+ value="Parcel_SeeAVsOn_Dark" />
<button
follows="top|left"
height="24"
@@ -354,7 +362,7 @@
title="Parcel">
<panel
follows="all"
- height="175"
+ height="200"
layout="topleft"
left="0"
name="parcel_characteristics_panel"
@@ -543,6 +551,31 @@
top_delta="0"
value="Off"
width="60" />
+ <icon
+ follows="top|left"
+ height="18"
+ image_name="Parcel_SeeAVsOff_Dark"
+ layout="topleft"
+ left="10"
+ name="see_avatars_icon"
+ top_pad="7"
+ width="22" />
+ <text
+ follows="left|top"
+ height="14"
+ layout="topleft"
+ left_pad="8"
+ name="see_avatars_label"
+ value="See Avatars:"
+ width="90" />
+ <text
+ follows="left|top"
+ height="14"
+ layout="topleft"
+ left_pad="0"
+ name="see_avatars_value"
+ value="Off"
+ width="60" />
<button
follows="bottom|right"
height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index daf571297f..b6b8a337a1 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -234,7 +234,7 @@ background_visible="true"
height="23"
layout="topleft"
mouse_opaque="false"
- name="bottom_bar_ls3"
+ name="bottom_bar_profile_ls"
left="0"
orientation="horizontal"
top="0"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 30be5bc853..47236c1a48 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -139,7 +139,7 @@
height="16"
label="Add datestamp to log file name."
layout="topleft"
- left_detla="5"
+ left_delta="5"
name="logfile_name_datestamp"
top_pad="10"
width="350"/>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 1c22a5c02e..a7078ce2e1 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -70,7 +70,7 @@
layout="topleft"
left="77"
name="connection_port_enabled"
- top_pad="20"
+ top_pad="10"
width="256">
<check_box.commit_callback
function="Notification.Show"
@@ -79,7 +79,7 @@
<spinner
control_name="ConnectionPort"
enabled_control="ConnectionPortEnabled"
- decimal_digits="0"
+ decimal_digits="0"
follows="left|top"
height="23"
increment="1"
@@ -195,60 +195,6 @@
name="media_popup_enabled"
width="400"
top_pad="5"/>
- <check_box
- top_delta="4"
- enabled="true"
- follows="left|top"
- height="14"
- initial_value="false"
- control_name="BrowserProxyEnabled"
- label="Enable Web Proxy"
- left_delta="0"
- mouse_opaque="true"
- name="web_proxy_enabled"
- radio_style="false"
- width="400" top_pad="5"/>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="10"
- layout="topleft"
- left_delta="20"
- name="Proxy location"
- top_delta="16"
- width="300">
- Proxy location:
- </text>
- <line_editor
- control_name="BrowserProxyAddress"
- enabled_control="BrowserProxyEnabled"
- follows="left|top"
- font="SansSerif"
- height="23"
- layout="topleft"
- left_delta="0"
- name="web_proxy_editor"
- tool_tip="The name or IP address of the proxy you would like to use"
- top_pad="4"
- width="200" />
- <spinner
- control_name="BrowserProxyPort"
- enabled_control="BrowserProxyEnabled"
- decimal_digits="0"
- follows="left|top"
- height="23"
- increment="1"
- initial_value="80"
- label="Port number:"
- label_width="95"
- layout="topleft"
- left_delta="210"
- max_val="12000"
- min_val="10"
- name="web_proxy_port"
- top_delta="0"
- width="145" />
<text
type="string"
length="1"
@@ -268,7 +214,7 @@
height="23"
layout="topleft"
left_delta="50"
- top_pad="5"
+ top_pad="5"
name="updater_service_combobox"
width="300">
<combo_box.item
@@ -286,4 +232,31 @@
name="Install_manual"
value="0" />
</combo_box>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="Proxy Settings:"
+ mouse_opaque="false"
+ top_pad="5"
+ width="300">
+ Proxy Settings:
+ </text>
+ <button
+ label="Adjust proxy settings"
+ follows="left|top"
+ height="23"
+ width="140"
+ label_selected="Browse"
+ layout="topleft"
+ left_delta="50"
+ name="set_proxy"
+ top_pad="5"
+ >
+ <button.commit_callback
+ function="Pref.Proxy" />
+ </button>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 1745c1e4b0..1f92244eb9 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -385,7 +385,7 @@
height="18"
image_name="Move_Walk_Off"
layout="topleft"
- left_pad="170"
+ left_pad="170"
name="avatar_icon"
mouse_opaque="false"
visible="true"
@@ -496,8 +496,8 @@
filename="panel_sound_devices.xml"
visiblity_control="ShowDeviceSettings"
name="device_settings_panel"
- top="314"
- width="345"
+ top_pad="0"
+ width="480"
left="18"
class="panel_voice_device_settings"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 2868d91cc7..4535c56339 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -132,4 +132,12 @@
name="cancel_btn"
top="700"
width="90" />
+ <web_browser
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="login_media_panel"
+ width="1024"
+ height="768"
+ top="0"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_environment.xml b/indra/newview/skins/default/xui/en/panel_region_environment.xml
new file mode 100644
index 0000000000..aa38c49fae
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_region_environment.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+
+<panel
+ border="true"
+ follows="top|left"
+ height="300"
+ label="Environment"
+ layout="topleft"
+ help_topic="panel_region_environment_tab"
+ name="panel_env_info"
+ width="530">
+ <text
+ name="water_settings_title"
+ follows="top|left"
+ height="30"
+ layout="topleft"
+ left="50"
+ top_pad="20"
+ width="430"
+ wrap="true">
+ Select the Water and Sky/Day Cycle Settings you would like all visitors to your region to see. More info
+ </text>
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="237"
+ layout="topleft"
+ left="50"
+ name="border"
+ top="60"
+ width="430"/>
+ <radio_group
+ follows="top|left"
+ height="45"
+ layout="topleft"
+ left_delta="10"
+ name="region_settings_radio_group"
+ top_delta="20"
+ width="200">
+ <radio_item
+ label="Use Second Life default"
+ layout="topleft"
+ name="use_sl_default_settings"/>
+ <radio_item
+ label="Use the following settings"
+ layout="topleft"
+ name="use_my_settings"
+ top_pad="20"/>
+ </radio_group>
+ <panel
+ follows="top|left"
+ height="150"
+ layout="topleft"
+ left="50"
+ name="user_environment_settings"
+ top_pad="20"
+ width="430">
+ <text
+ name="water_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top_pad="0"
+ width="160">
+ Water Setting
+ </text>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="water_settings_preset_combo"
+ top_delta="-7"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ <text
+ name="sky_dayc_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top_pad="30"
+ width="100">
+ Sky / Day Cycle
+ </text>
+ <radio_group
+ layout="topleft"
+ left_delta="50"
+ name="sky_dayc_settings_radio_group"
+ top_pad="10"
+ height="50"
+ width="110">
+ <radio_item
+ layout="topleft"
+ label="Fixed sky"
+ name="my_sky_settings"/>
+ <radio_item
+ layout="topleft"
+ label="Day cycle"
+ name="my_dayc_settings"
+ top_pad="25"/>
+ </radio_group>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="sky_settings_preset_combo"
+ top_delta="-7"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ <combo_box
+ follows="top|left"
+ name="dayc_settings_preset_combo"
+ top_delta="36"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ </panel>
+ <button
+ follows="left|top"
+ height="23"
+ label="Apply"
+ layout="topleft"
+ right="-160"
+ name="apply_btn"
+ top_pad="10"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="cancel_btn"
+ width="100" />
+ <loading_indicator
+ height="23"
+ left="50"
+ name="progress_indicator"
+ top_delta="0"
+ visible="false"
+ width="23" />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index 1307d807e2..6b28639a77 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- border="false"
+ border="true"
follows="top|left"
height="510"
help_topic="panel_region_estate_tab"
@@ -20,7 +20,7 @@
name="estate_help_text"
top="14"
word_wrap="true"
- width="300">
+ >
Changes to settings on this tab will affect all regions in the estate.
</text>
<text
@@ -30,9 +30,10 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ right="160"
name="estate_text"
top_pad="2"
+ halign="right"
width="140">
Estate:
</text>
@@ -43,9 +44,9 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ top_delta="0"
name="estate_name"
- top_delta="16"
+ left_pad="6"
width="150">
(unknown)
</text>
@@ -56,9 +57,10 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ right="160"
name="owner_text"
- top_pad="2"
+ top_pad="6"
+ halign="right"
width="150">
Estate owner:
</text>
@@ -69,75 +71,68 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ top_delta="0"
name="estate_owner"
- top_delta="16"
+ left_pad="6"
use_ellipses="true"
width="290">
(unknown)
</text>
+
<view_border
- bevel_style="in"
+ bevel_style="none"
follows="top|left"
- height="270"
+ height="95"
layout="topleft"
- left_delta="-4"
+ left="10"
top_pad="5"
- width="300" />
+ width="470" />
+
<check_box
height="20"
- label="Use Global Time"
+ label="Allow Public Access"
layout="topleft"
- left="12"
- name="use_global_time_check"
- top="132"
+ left="20"
+ name="externally_visible_check"
+ top_delta="5"
width="200" />
+
<check_box
height="20"
- label="Fixed Sun"
- layout="topleft"
- left="12"
- name="fixed_sun_check"
- top="152"
- width="100" />
- <icon
- height="20"
- image_name="icon_day_cycle.tga"
+ label="Allow Voice Chat"
layout="topleft"
- left="47"
- name="daycycle"
- top="177"
- width="165" />
- <slider
- follows="left|top"
- height="20"
- increment="0.001"
- label="Phase"
- layout="topleft"
- left="12"
- max_val="30"
- min_val="6"
- name="sun_hour_slider"
- show_text="false"
- top="202"
+ left="280"
+ name="voice_chat_check"
+ top_delta="0"
width="200" />
<check_box
height="20"
- label="Allow Public Access"
+ label="Allow Direct Teleport"
layout="topleft"
left_delta="0"
- name="externally_visible_check"
- top_pad="6"
- width="200" />
+ name="allow_direct_teleport"
+ top_pad="4"
+ width="80" />
+ <button
+ enabled="false"
+ follows="left|top"
+ height="23"
+ label="Apply"
+ layout="topleft"
+ name="apply_btn"
+ top_pad="15"
+ left_delta="0"
+ width="97" />
+
<text
type="string"
length="1"
follows="top|left"
height="16"
layout="topleft"
- left="32"
+ left="20"
name="Only Allow"
- top="250"
+ top_delta="-30"
width="278">
Restrict Access to accounts verified by:
</text>
@@ -161,50 +156,6 @@
tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."
top_pad="2"
width="278" />
- <check_box
- height="20"
- label="Allow Voice Chat"
- layout="topleft"
- left="12"
- name="voice_chat_check"
- top="304"
- width="200" />
- <check_box
- height="20"
- label="Allow Direct Teleport"
- layout="topleft"
- left="12"
- name="allow_direct_teleport"
- top_pad="4"
- width="80" />
- <button
- enabled="false"
- follows="left|top"
- height="23"
- label="Apply"
- layout="topleft"
- name="apply_btn"
- top_pad="10"
- left="110"
- width="97" />
- <button
- follows="left|top"
- height="23"
- label="Send Message To Estate..."
- layout="topleft"
- left="45"
- name="message_estate_btn"
- top_pad="20"
- width="220" />
- <button
- follows="left|top"
- height="23"
- label="Kick Resident from Estate..."
- layout="topleft"
- left="45"
- name="kick_user_from_estate_btn"
- top_pad="5"
- width="220" />
<text
type="string"
@@ -214,16 +165,31 @@
height="20"
layout="topleft"
name="estate_manager_label"
- right="520"
+ top_pad="30"
+ left="10"
width="200">
Estate Managers:
</text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="280"
+ name="allow_resident_label"
+ top_delta="0"
+ width="200">
+ Allowed Residents:
+ </text>
+
+ <!-- Estate Managers box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
+ left="10"
top_pad="-5"
width="200" />
<name_list
@@ -235,43 +201,15 @@
name="estate_manager_name_list"
top_delta="0"
width="200" />
- <button
- follows="left|top"
- height="23"
- label="Remove..."
- layout="topleft"
- name="remove_estate_manager_btn"
- right="520"
- top_pad="5"
- width="97" />
- <button
- follows="left|top"
- height="23"
- label="Add..."
- layout="topleft"
- left_delta="-103"
- name="add_estate_manager_btn"
- top_delta="0"
- width="97" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="0"
- name="allow_resident_label"
- top_pad="10"
- width="200">
- Allowed Residents:
- </text>
+
+ <!-- Allowed Residents box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
- top_pad="-5"
+ left="280"
+ top_delta="0"
width="200" />
<name_list
follows="left|top"
@@ -282,42 +220,78 @@
name="allowed_avatar_name_list"
top_delta="0"
width="200" />
+
+ <!-- Estate Managers buttons -->
+ <button
+ follows="left|top"
+ height="23"
+ label="Add..."
+ layout="topleft"
+ left="10"
+ name="add_estate_manager_btn"
+ top_pad="6"
+ width="97" />
<button
follows="left|top"
height="23"
label="Remove..."
layout="topleft"
- name="remove_allowed_avatar_btn"
- right="520"
- top_pad="5"
+ name="remove_estate_manager_btn"
+ left_pad="6"
width="97" />
+
+ <!-- Allowed Residents buttons -->
<button
follows="left|top"
height="23"
+ left="280"
label="Add..."
layout="topleft"
- left_delta="-103"
name="add_allowed_avatar_btn"
top_delta="0"
width="97" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Remove..."
+ layout="topleft"
+ name="remove_allowed_avatar_btn"
+ left_pad="6"
+ top_delta="0"
+ width="97" />
+
<text
type="string"
length="1"
follows="left|top"
height="20"
layout="topleft"
- left_delta="0"
+ left="10"
name="allow_group_label"
top_pad="10"
width="200">
Allowed Groups:
</text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="280"
+ name="ban_resident_label"
+ top_delta="0"
+ width="200">
+ Banned Residents:
+ </text>
+
+ <!-- Allowed Groups box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
+ left="10"
top_pad="-5"
width="200" />
<name_list
@@ -329,43 +303,15 @@
name="allowed_group_name_list"
top_delta="0"
width="200" />
- <button
- follows="left|top"
- height="23"
- label="Remove..."
- layout="topleft"
- name="remove_allowed_group_btn"
- right="520"
- top_pad="5"
- width="97" />
- <button
- follows="left|top"
- height="23"
- label="Add..."
- layout="topleft"
- left_delta="-103"
- name="add_allowed_group_btn"
- top_delta="0"
- width="97" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="0"
- name="ban_resident_label"
- top_pad="10"
- width="200">
- Banned Residents:
- </text>
+
+ <!-- Banned Residents box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
- top_pad="-5"
+ left="280"
+ top_delta="0"
width="200" />
<name_list
follows="left|top"
@@ -376,22 +322,64 @@
name="banned_avatar_name_list"
top_delta="0"
width="200" />
+
+ <!-- Allowed Groups buttons -->
+ <button
+ follows="left|top"
+ height="23"
+ label="Add..."
+ layout="topleft"
+ left="10"
+ name="add_allowed_group_btn"
+ top_pad="6"
+ width="97" />
<button
follows="left|top"
height="23"
label="Remove..."
layout="topleft"
- name="remove_banned_avatar_btn"
- right="520"
- top_pad="5"
+ name="remove_allowed_group_btn"
+ left_pad="6"
+ top_delta="0"
width="97" />
+
+ <!-- Banned Residents buttons -->
<button
follows="left|top"
height="23"
label="Add..."
layout="topleft"
- left_delta="-103"
+ left="280"
name="add_banned_avatar_btn"
top_delta="0"
width="97" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Remove..."
+ layout="topleft"
+ name="remove_banned_avatar_btn"
+ top_delta="0"
+ left_pad="6"
+ width="97" />
+
+ <button
+ follows="left|top"
+ height="23"
+ label="Send Message To Estate..."
+ layout="topleft"
+ left="10"
+ name="message_estate_btn"
+ top_pad="20"
+ width="220" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Kick Resident from Estate..."
+ layout="topleft"
+ left="280"
+ name="kick_user_from_estate_btn"
+ top_delta="0"
+ width="220" />
+
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
index 5093c52129..5d060c0a0d 100644
--- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
@@ -2,7 +2,7 @@
<panel
border="true"
follows="top|left"
- height="320"
+ height="460"
help_topic="panel_region_terrain_tab"
label="Terrain"
layout="topleft"
@@ -50,10 +50,10 @@
label="Terrain Raise Limit"
label_width="120"
layout="topleft"
- left="15"
+ left="240"
max_val="100"
name="terrain_raise_spin"
- top="60"
+ top="40"
width="180" />
<spinner
follows="left|top"
@@ -62,95 +62,336 @@
label="Terrain Lower Limit"
label_width="120"
layout="topleft"
- left="15"
+ left="240"
max_val="0"
min_val="-100"
name="terrain_lower_spin"
- top="80"
+ top="60"
width="180" />
- <check_box
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="60"
+ layout="topleft"
+ left="8"
+ top="30"
+ width="460" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
height="20"
- label="Use Estate Sun"
layout="topleft"
- left="250"
- name="use_estate_sun_check"
- top="35"
+ left="10"
+ name="detail_texture_text"
+ top="110"
+ width="300">
+ Terrain Textures (requires 512x512, 24 bit .tga files)
+ </text>
+ <texture_picker
+ follows="left|top"
+ height="100"
+ layout="topleft"
+ left_delta="0"
+ name="texture_detail_0"
+ top_delta="20"
width="100" />
- <check_box
- height="20"
- label="Fixed Sun"
+ <texture_picker
+ follows="left|top"
+ height="100"
+ layout="topleft"
+ left_pad="10"
+ name="texture_detail_1"
+ top_delta="0"
+ width="100" />
+ <texture_picker
+ follows="left|top"
+ height="100"
+ layout="topleft"
+ left_pad="10"
+ name="texture_detail_2"
+ top_delta="0"
+ width="100" />
+ <texture_picker
+ follows="left|top"
+ height="100"
layout="topleft"
- left="250"
- name="fixed_sun_check"
- top="55"
+ left_pad="10"
+ name="texture_detail_3"
+ top_delta="0"
width="100" />
- <icon
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
height="20"
- image_name="icon_day_cycle.tga"
layout="topleft"
- left="285"
- name="daycycle"
- top="80"
- width="165" />
- <slider
+ left="10"
+ name="height_text_lbl"
+ top_delta="90"
+ width="65">
+ 1 (Low)
+ </text>
+ <text
+ type="string"
+ length="1"
follows="left|top"
height="20"
- increment="0.001"
- label="Phase"
layout="topleft"
- left="250"
- max_val="30"
- min_val="6"
- name="sun_hour_slider"
- show_text="false"
- top="105"
- width="200" />
- <button
- enabled="false"
+ left_pad="45"
+ name="height_text_lbl2"
+ top_delta="0"
+ width="100">
+ 2
+ </text>
+ <text
+ type="string"
+ length="1"
follows="left|top"
height="20"
- label="Apply"
layout="topleft"
- left="350"
- name="apply_btn"
- top="135"
- width="90" />
- <view_border
- bevel_style="none"
- follows="top|left"
- height="130"
+ left_pad="10"
+ name="height_text_lbl3"
+ top_delta="0"
+ width="100">
+ 3
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
layout="topleft"
- left="8"
- top="30"
- width="460" />
+ left_pad="10"
+ name="height_text_lbl4"
+ top_delta="0"
+ width="100">
+ 4 (High)
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="height_text_lbl5"
+ top_delta="30"
+ width="300">
+ Texture Elevation Ranges
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="height_text_lbl10"
+ top_delta="30"
+ width="200"
+ word_wrap="true">
+ These values represent the blend range for the textures above.
+ </text>
+ <text
+ follows="left|top"
+ height="60"
+ layout="topleft"
+ left_delta="0"
+ name="height_text_lbl11"
+ top_delta="32"
+ width="200"
+ word_wrap="true">
+ Measured in meters, the LOW value is the MAXIMUM height of Texture #1, and the HIGH value is the MINIMUM height of Texture #4.
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="270"
+ name="height_text_lbl6"
+ top="250"
+ width="100">
+ Northwest
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="10"
+ name="height_text_lbl7"
+ top_delta="0"
+ width="100">
+ Northeast
+ </text>
+<!-- northwest low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_1"
+ top_delta="15"
+ width="100" />
+<!-- northeast low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_3"
+ top_delta="0"
+ width="100" />
+<!-- northwest high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_1"
+ top_delta="20"
+ width="100" />
+<!-- northeast high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_3"
+ top_delta="0"
+ width="100" />
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="270"
+ name="height_text_lbl8"
+ top_pad="10"
+ width="100">
+ Southwest
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="10"
+ name="height_text_lbl9"
+ top_delta="0"
+ width="100">
+ Southeast
+ </text>
+<!-- southwest low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_0"
+ top_delta="15"
+ width="100" />
+<!-- southeast low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_2"
+ top_delta="0"
+ width="100" />
+<!--southwest high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_0"
+ top_delta="20"
+ width="100" />
+<!-- southeast high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_2"
+ top_delta="0"
+ width="100" />
+<!-- Terrain Download/Upload/Bake buttons -->
<button
follows="left|top"
height="20"
label="Download RAW terrain..."
layout="topleft"
- left_delta="2"
+ left="10"
name="download_raw_btn"
tool_tip="Available only to estate owners, not managers"
- top_pad="60"
- width="170" />
+ top="390"
+ width="160" />
<button
follows="left|top"
height="20"
label="Upload RAW terrain..."
layout="topleft"
- left="10"
+ left_pad="10"
+ top_delta="0"
name="upload_raw_btn"
tool_tip="Available only to estate owners, not managers"
- top="243"
- width="170" />
+ width="160" />
<button
follows="left|top"
height="20"
label="Bake Terrain"
layout="topleft"
- left="10"
+ left_pad="10"
name="bake_terrain_btn"
tool_tip="Set current terrain as mid-point for raise/lower limits"
- top="283"
+ width="100" />
+ <button
+ enabled="true"
+ follows="left|top"
+ height="20"
+ label="Apply"
+ layout="topleft"
+ left_delta="0"
+ name="apply_btn"
+ top="430"
width="100" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_texture.xml b/indra/newview/skins/default/xui/en/panel_region_texture.xml
deleted file mode 100644
index 5d910ea659..0000000000
--- a/indra/newview/skins/default/xui/en/panel_region_texture.xml
+++ /dev/null
@@ -1,327 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="top|left"
- height="320"
- help_topic="panel_region_texture_tab"
- label="Ground Textures"
- layout="topleft"
- left="0"
- name="Textures"
- top="320"
- width="480">
- <text
- type="string"
- length="1"
- follows="left|top"
- font="SansSerif"
- height="20"
- layout="topleft"
- left="10"
- name="region_text_lbl"
- top="10"
- width="100">
- Region:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- font="SansSerif"
- height="20"
- layout="topleft"
- left_delta="50"
- name="region_text"
- top_delta="0"
- width="400">
- unknown
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="detail_texture_text"
- top="36"
- width="300">
- Terrain Textures (requires 512x512, 24 bit .tga files)
- </text>
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_delta="0"
- name="texture_detail_0"
- top_delta="20"
- width="100" />
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_pad="10"
- name="texture_detail_1"
- top_delta="0"
- width="100" />
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_pad="10"
- name="texture_detail_2"
- top_delta="0"
- width="100" />
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_pad="10"
- name="texture_detail_3"
- top_delta="0"
- width="100" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl"
- top="146"
- width="65">
- 1 (Low)
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="45"
- name="height_text_lbl2"
- top_delta="0"
- width="100">
- 2
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl3"
- top_delta="0"
- width="100">
- 3
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl4"
- top_delta="0"
- width="100">
- 4 (High)
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl5"
- top="170"
- width="300">
- Texture Elevation Ranges
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="51"
- name="height_text_lbl6"
- top="185"
- width="100">
- Northwest
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl7"
- top_delta="0"
- width="100">
- Northeast
- </text>
-<!-- northwest low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_1"
- top_delta="15"
- width="100" />
-<!-- northeast low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_3"
- top_delta="0"
- width="100" />
-<!-- northwest high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_1"
- top_delta="20"
- width="100" />
-<!-- northeast high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_3"
- top_delta="0"
- width="100" />
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="51"
- name="height_text_lbl8"
- top_pad="10"
- width="100">
- Southwest
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl9"
- top_delta="0"
- width="100">
- Southeast
- </text>
-<!-- southwest low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_0"
- top_delta="15"
- width="100" />
-<!-- southeast low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_2"
- top_delta="0"
- width="100" />
-<!--southwest high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_0"
- top_delta="20"
- width="100" />
-<!-- southeast high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_2"
- top_delta="0"
- width="100" />
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl10"
- top_delta="30"
- width="400"
- word_wrap="true">
- These values represent the blend range for the textures above.
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="0"
- name="height_text_lbl11"
- top_delta="32"
- width="400"
- word_wrap="true">
- Measured in meters, the LOW value is the MAXIMUM height of Texture #1, and the HIGH value is the MINIMUM height of Texture #4.
- </text>
- <button
- enabled="false"
- follows="left|bottom"
- height="20"
- label="Apply"
- layout="topleft"
- left="350"
- name="apply_btn"
- top="290"
- width="100" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 6ef93406ec..0f330a7b98 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -142,6 +142,7 @@
mouse_opaque="false"
background_visible="true"
>
+ <badge location="top_left" location_percent_vcenter="50" location_percent_hcenter="95" />
<panel
class="sidepanel_inventory"
name="sidepanel_inventory"
diff --git a/indra/newview/skins/default/xui/en/panel_sound_devices.xml b/indra/newview/skins/default/xui/en/panel_sound_devices.xml
index ccae7c5350..46cbc1e87f 100644
--- a/indra/newview/skins/default/xui/en/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/en/panel_sound_devices.xml
@@ -7,33 +7,54 @@
layout="topleft"
name="device_settings_panel"
width="360">
- <panel.string
- name="default_text">
- Default
- </panel.string>
- <icon
- height="18"
- image_name="Microphone_On"
- left_delta="4"
- name="microphone_icon"
- mouse_opaque="false"
- top="7"
- layout="topleft"
- visible="true"
- width="18" />
- <text
+ <panel.string
+ name="default_text">
+ Default
+ </panel.string>
+ <string
+ name="name_no_device">
+ No Device
+ </string>
+ <string
+ name="name_default_system_device">
+ Default System Device
+ </string>
+ <icon
+ follows="left|top"
+ height="18"
+ image_name="Microphone_On"
+ left_delta="-5"
+ name="microphone_icon"
+ mouse_opaque="false"
+ top="7"
+ layout="topleft"
+ visible="true"
+ width="18" />
+ <icon
+ follows="left|top"
+ height="18"
+ image_name="Parcel_Voice_Dark"
+ layout="topleft"
+ left_pad="220"
+ name="speaker_icon"
+ mouse_opaque="false"
+ top_delta="0"
+ visible="true"
+ width="22" />
+ <text
type="string"
length="1"
- font.style="BOLD"
+ font.style="BOLD"
follows="left|top"
height="16"
layout="topleft"
- left_pad="3"
+ left_pad="-240"
+ top_delta="5"
name="Input"
- width="70">
- Input
- </text>
- <combo_box
+ width="60">
+ Input
+ </text>
+ <combo_box
height="23"
control_name="VoiceInputAudioDevice"
follows="left|top"
@@ -42,33 +63,57 @@
max_chars="128"
name="voice_input_device"
top_delta="-5"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
- layout="topleft"
- left_delta="-70"
- name="My volume label"
- top_pad="4"
- width="200">
- My volume:
- </text>
- <slider_bar
- control_name="AudioLevelMic"
- follows="top|right|left"
- height="17"
- increment="0.025"
- initial_value="1.0"
- layout="topleft"
- left_delta="-6"
- max_val="2"
- name="mic_volume_slider"
- tool_tip="Change the volume using this slider"
- top_pad="-1"
- width="220" />
- <text
+ width="150" />
+ <text
+ font.style="BOLD"
+ type="string"
+ length="1"
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left_pad="30"
+ name="Output"
+ top_delta="5"
+ width="60">
+ Output
+ </text>
+ <combo_box
+ control_name="VoiceOutputAudioDevice"
+ height="23"
+ follows="left|top"
+ layout="topleft"
+ left_pad="0"
+ max_chars="128"
+ name="voice_output_device"
+ top_delta="-4"
+ width="150" />
+ <text
+ type="string"
+ halign="left"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_delta="-300"
+ name="My volume label"
+ top_pad="14"
+ width="200">
+ My volume:
+ </text>
+ <slider_bar
+ control_name="AudioLevelMic"
+ follows="top|right|left"
+ height="17"
+ increment="0.025"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="95"
+ max_val="2"
+ name="mic_volume_slider"
+ tool_tip="Change the volume using this slider"
+ top_pad="-18"
+ width="110" />
+ <text
type="string"
text_color="EmphasisColor"
length="1"
@@ -79,8 +124,8 @@
name="wait_text"
top_delta="-1"
width="110">
- Please wait
- </text>
+ Please wait
+ </text>
<locate
follows="right|top"
height="20"
@@ -121,35 +166,4 @@
name="bar4"
top_delta="0"
width="20" />
- <icon
- height="18"
- image_name="Parcel_Voice_Light"
- left="5"
- name="speaker_icon"
- mouse_opaque="false"
- top_pad="3"
- visible="true"
- width="22" />
- <text
- font.style="BOLD"
- type="string"
- length="1"
- follows="left|top"
- height="15"
- layout="topleft"
- left_pad="0"
- name="Output"
- width="70">
- Output
- </text>
- <combo_box
- control_name="VoiceOutputAudioDevice"
- height="23"
- follows="left|top"
- layout="topleft"
- left_pad="0"
- max_chars="128"
- name="voice_output_device"
- top_delta="-3"
- width="200" />
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index d756dfb7de..c780cf2696 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -35,7 +35,7 @@
</panel.string>
<panel
height="18"
- left="-315"
+ left="-355"
width="95"
top="1"
follows="right|top"
@@ -77,19 +77,39 @@
top="0"
width="55" />
</panel>
+ <combo_box
+ follows="right|top"
+ drop_down_button.pad_left="10"
+ left_pad="5"
+ top="0"
+ width="120"
+ height="20"
+ pad_left="5"
+ name="mode_combo"
+ tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+ >
+ <combo_box.item
+ label="Basic Mode"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced Mode"
+ name="Advanced"
+ value="" />
+ </combo_box>
<text
+ left_pad="5"
type="string"
font="SansSerifSmall"
text_readonly_color="TimeTextColor"
follows="right|top"
- halign="right"
+ halign="center"
height="16"
top="5"
layout="topleft"
- left_pad="0"
name="TimeText"
tool_tip="Current time (Pacific)"
- width="145">
+ width="75">
24:00 AM PST
</text>
<button
@@ -100,7 +120,7 @@
image_pressed="Pause_Press"
image_pressed_selected="Play_Press"
is_toggle="true"
- left_pad="15"
+ left_pad="10"
top="1"
name="media_toggle_btn"
tool_tip="Start/Stop All Media (Music, Video, Web pages)"
diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
index 30d3064e14..79f29777ce 100644
--- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
@@ -88,6 +88,16 @@
visible="false"
width="14"
/>
+ <icon
+ follows="right|top"
+ height="13"
+ image_name="Parcel_SeeAVsOff_Light"
+ left="2"
+ name="see_avatars_icon"
+ top="3"
+ visible="false"
+ width="14"
+ />
<text
follows="right|top"
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index 8997c1a6d7..79a0ec7c72 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -9,7 +9,7 @@
min_width="240"
name="objects panel"
width="333">
- <panel
+ <panel
follows="all"
layout="topleft"
left="0"
@@ -19,24 +19,226 @@
height="570"
visible="true"
width="330">
- <panel
- class="panel_main_inventory"
- filename="panel_main_inventory.xml"
- follows="all"
- layout="topleft"
- left="0"
- name="panel_main_inventory"
- top="0"
- label=""
- height="545"
- width="330" />
+ <layout_stack
+ follows="left|right|top|bottom"
+ layout="topleft"
+ left="0"
+ top="0"
+ orientation="vertical"
+ name="inventory_layout_stack"
+ height="535"
+ width="330">
+ <layout_panel
+ name="main_inventory_layout_panel"
+ min_dim="150"
+ width="330"
+ follows="bottom|left|right"
+ user_resize="false"
+ height="480">
+ <panel
+ class="panel_main_inventory"
+ filename="panel_main_inventory.xml"
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="panel_main_inventory"
+ top="0"
+ label=""
+ height="480"
+ width="330" />
+ </layout_panel>
+ <layout_panel
+ width="330"
+ auto_resize="true"
+ user_resize="false"
+ follows="bottom|left|right"
+ name="inbox_layout_panel"
+ visible="false"
+ min_dim="35"
+ max_dim="200"
+ expanded_min_dim="90"
+ height="200">
+ <panel
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="marketplace_inbox"
+ class="panel_marketplace_inbox"
+ top="0"
+ label=""
+ height="200"
+ width="330">
+ <string name="InboxLabelWithArg">Received Items ([NUM])</string>
+ <string name="InboxLabelNoArg">Received Items</string>
+ <button
+ label="Received Items"
+ name="inbox_btn"
+ height="35"
+ width="308"
+ image_unselected="MarketplaceBtn_Off"
+ image_selected="MarketplaceBtn_Selected"
+ halign="left"
+ handle_right_mouse="false"
+ follows="top|left|right"
+ is_toggle="true"
+ tab_stop="false"
+ pad_left="35"
+ top="0"
+ left="10" />
+ <text
+ type="string"
+ length="1"
+ follows="right|top"
+ layout="topleft"
+ height="13"
+ top="10"
+ right="-20"
+ name="inbox_fresh_new_count"
+ font="SansSerifMedium"
+ halign="right"
+ text_color="EmphasisColor"
+ top_pad="0"
+ width="300">
+ [NUM] New
+ </text>
+ <panel
+ follows="all"
+ left="10"
+ bottom="200"
+ width="308"
+ top="35"
+ bg_opaque_color="InventoryBackgroundColor"
+ background_visible="true"
+ background_opaque="true"
+ tool_tip="Drag and drop items to your inventory to manage and use them"
+ >
+ <text
+ name="inbox_inventory_placeholder"
+ type="string"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ width="308"
+ height="165"
+ wrap="true"
+ halign="center">
+ Purchases from the marketplace will be delivered here.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel
+ width="330"
+ auto_resize="true"
+ user_resize="false"
+ follows="bottom|left|right"
+ name="outbox_layout_panel"
+ visible="false"
+ min_dim="35"
+ max_dim="200"
+ expanded_min_dim="90"
+ height="200">
+ <panel
+ follows="all"
+ layout="topleft"
+ left="10"
+ name="marketplace_outbox"
+ class="panel_marketplace_outbox"
+ top="0"
+ label=""
+ height="200"
+ width="310">
+ <button
+ label="Merchant Outbox"
+ is_toggle="true"
+ handle_right_mouse="false"
+ name="outbox_btn"
+ follows="top|left|right"
+ image_unselected="MarketplaceBtn_Off"
+ image_selected="MarketplaceBtn_Selected"
+ height="35"
+ tab_stop="false"
+ width="308"
+ halign="left"
+ pad_left="35"
+ top="0"
+ left="0" />
+ <button
+ image_unselected="OutboxPush_Off"
+ image_selected="OutboxPush_Selected"
+ image_hover_selected="OutboxPush_Selected_Over"
+ image_hover_unselected="OutboxPush_Over"
+ image_disabled_selected="OutboxPush_Selected_Disabled"
+ image_disabled="OutboxPush_Disabled"
+ image_pressed="OutboxPush_Press"
+ image_pressed_selected="OutboxPush_Selected_Press"
+ label=""
+ tool_tip="Push to my Marketplace Storefront"
+ is_toggle="false"
+ name="outbox_sync_btn"
+ follows="top|right"
+ tab_stop="false"
+ halign="center"
+ top="6"
+ left="-50"
+ height="23"
+ width="32"
+ enabled="false" />
+ <loading_indicator
+ follows="top|right"
+ name="outbox_sync_indicator"
+ top="6"
+ left="-50"
+ height="23"
+ width="32"
+ images_per_sec="1.15"
+ tab_stop="false"
+ visible="false">
+ <images>
+ <image name="OutboxPush_Progress_1"/>
+ <image name="OutboxPush_Progress_2"/>
+ <image name="OutboxPush_Progress_3"/>
+ <image name="OutboxPush_Progress_4"/>
+ <image name="OutboxPush_Progress_5"/>
+ <image name="OutboxPush_Progress_6"/>
+ </images>
+ </loading_indicator>
+ <panel
+ follows="all"
+ left="10"
+ bottom="200"
+ width="308"
+ top="35"
+ bg_opaque_color="InventoryBackgroundColor"
+ background_visible="true"
+ background_opaque="true"
+ tool_tip="Drag and drop items here to prepare them for sale on your storefront"
+ >
+ <text
+ name="outbox_inventory_placeholder"
+ type="string"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ width="308"
+ height="165"
+ wrap="true"
+ halign="center">
+ Set up your merchant account to use this feature.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel
follows="bottom|left|right"
- height="25"
+ height="30"
layout="topleft"
name="button_panel"
left="9"
- top_pad="-2"
+ top_pad="7"
width="308">
<layout_stack
follows="bottom|left|right"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 71f48c833d..2094275bed 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -18,6 +18,7 @@
<string name="StartupClearingCache">Clearing cache...</string>
<string name="StartupInitializingTextureCache">Initializing Texture Cache...</string>
<string name="StartupInitializingVFS">Initializing VFS...</string>
+ <string name="StartupRequireDriverUpdate">Graphics Initialization Failed. Please Update Your Graphics Driver!</string>
<!-- progress -->
<string name="ProgressRestoring">Restoring...</string>
@@ -43,6 +44,8 @@
<string name="LoginInitializingQuicktime">Initializing QuickTime...</string>
<string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string>
<string name="LoginQuicktimeOK">QuickTime initialized successfully.</string>
+ <string name="LoginRequestSeedCapGrant">Requesting region capabilities...</string>
+ <string name="LoginRetrySeedCapGrant">Requesting region capabilities, attempt [NUMBER]...</string>
<string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string>
<string name="LoginConnectingToRegion">Connecting to region...</string>
<string name="LoginDownloadingClothing">Downloading clothing...</string>
@@ -1759,10 +1762,10 @@ integer llGetParcelMaxPrims(vector pos, integer sim_wide)
Returns the maximum number of prims allowed on the parcel at pos
</string>
<string name="LSLTipText_llGetParcelDetails" translate="false">
-list llGetParcelDetails(vector pos, list params)
-Returns the parcel details specified in params for the parcel at pos.
-Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA
- </string>
+ list llGetParcelDetails(vector pos, list params)
+ Returns the parcel details specified in params for the parcel at pos.
+ Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA, _ID, _SEE_AVATARS
+ </string>
<string name="LSLTipText_llSetLinkPrimitiveParams" translate="false">
llSetLinkPrimitiveParams(integer linknumber, list rules)
Sets primitive parameters for linknumber based on rules
@@ -2021,6 +2024,8 @@ Returns a string with the requested data about the region
<string name="PlacesNoMatchingItems">Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search].</string>
<string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string>
<string name="InventoryNoTexture">You do not have a copy of this texture in your inventory</string>
+ <string name="InventoryInboxNoItems">Items purchased through the marketplace will be delivered here.</string>
+ <string name="InventoryOutboxNoItems">Drag items here in preparation for listing on your marketplace storefront.</string>
<!-- use value="" because they have preceding spaces -->
<string name="no_transfer" value=" (no transfer)" />
<string name="no_modify" value=" (no modify)" />
@@ -2067,7 +2072,6 @@ Returns a string with the requested data about the region
<!-- inventory folder -->
<string name="InvFolder My Inventory">My Inventory</string>
- <string name="InvFolder My Favorites">My Favorites</string>
<string name="InvFolder Library">Library</string>
<string name="InvFolder Textures">Textures</string>
<string name="InvFolder Sounds">Sounds</string>
@@ -2087,10 +2091,10 @@ Returns a string with the requested data about the region
<string name="InvFolder Uncompressed Sounds">Uncompressed Sounds</string>
<string name="InvFolder Animations">Animations</string>
<string name="InvFolder Gestures">Gestures</string>
- <string name="InvFolder Favorite">Favorites</string>
+ <string name="InvFolder Favorite">My Favorites</string>
<!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
We should localize both of them with the same value -->
- <string name="InvFolder favorite">Favorites</string>
+ <string name="InvFolder favorite">My Favorites</string>
<string name="InvFolder Current Outfit">Current Outfit</string>
<string name="InvFolder Initial Outfits">Initial Outfits</string>
<string name="InvFolder My Outfits">My Outfits</string>
@@ -2236,6 +2240,7 @@ Returns a string with the requested data about the region
<string name="Unknown">(Unknown)</string>
<string name="SummaryForTheWeek" value="Summary for this week, beginning on " />
<string name="NextStipendDay" value="The next stipend day is " />
+ <string name="GroupPlanningDate">[mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]</string>
<string name="GroupIndividualShare" value=" Group Individual Share" />
<string name="GroupColumn" value=" Group" />
<string name="Balance">Balance</string>
@@ -2250,6 +2255,9 @@ Returns a string with the requested data about the region
<string name="IMMainland">mainland</string>
<string name="IMTeen">teen</string>
+ <!-- floater about land -->
+ <string name="Anyone">anyone</string>
+
<!-- floater region info -->
<!-- The following will replace variable [ALL_ESTATES] in notifications EstateAllowed*, EstateBanned*, EstateManager* -->
<string name="RegionInfoError">error</string>
@@ -2352,6 +2360,10 @@ Returns a string with the requested data about the region
<string name="GroupOwned">Group Owned</string>
<string name="Public">Public</string>
+ <!-- Environment settings -->
+ <string name="LocalSettings">Local Settings</string>
+ <string name="RegionSettings">Region Settings</string>
+
<!-- panel classified -->
<string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string>
<string name="ClassifiedUpdateAfterPublish">(will update after publish)</string>
@@ -2385,6 +2397,7 @@ Returns a string with the requested data about the region
<string name="GroupMoneyBalance">Balance</string>
<string name="GroupMoneyCredits">Credits</string>
<string name="GroupMoneyDebits">Debits</string>
+ <string name="GroupMoneyDate">[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]</string>
<!-- viewer object -->
<string name="ViewerObjectContents">Contents</string>
@@ -3133,6 +3146,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="LocationCtrlAdultIconTooltip">Adult Region</string>
<string name="LocationCtrlModerateIconTooltip">Moderate Region</string>
<string name="LocationCtrlGeneralIconTooltip">General Region</string>
+ <string name="LocationCtrlSeeAVsTooltip">Avatars visible and chat allowed outside of this parcel</string>
<!-- Strings used by the (currently Linux) auto-updater app -->
<string name="UpdaterWindowTitle">
@@ -3400,6 +3414,34 @@ Abuse Report</string>
<string name="Female - Stick tougue out">Female - Stick tougue out</string>
<string name="Female - Wow">Female - Wow</string>
+ <string name="/bow1">/bow1</string>
+ <string name="/clap">/clap</string>
+ <string name="/count">/count</string>
+ <string name="/extinguish">/extinguish</string>
+ <string name="/kmb">/kmb</string>
+ <string name="/muscle">/muscle</string>
+ <string name="/no">/no</string>
+ <string name="/no!">/no!</string>
+ <string name="/paper">/paper</string>
+ <string name="/pointme">/pointme</string>
+ <string name="/pointyou">/pointyou</string>
+ <string name="/rock">/rock</string>
+ <string name="/scissor">/scissor</string>
+ <string name="/smoke">/smoke</string>
+ <string name="/stretch">/stretch</string>
+ <string name="/whistle">/whistle</string>
+ <string name="/yes">/yes</string>
+ <string name="/yes!">/yes!</string>
+ <string name="afk">afk</string>
+ <string name="dance1">dance1</string>
+ <string name="dance2">dance2</string>
+ <string name="dance3">dance3</string>
+ <string name="dance4">dance4</string>
+ <string name="dance5">dance5</string>
+ <string name="dance6">dance6</string>
+ <string name="dance7">dance7</string>
+ <string name="dance8">dance8</string>
+
<!-- birth date format shared by avatar inspector and profile panels -->
<string name="AvatarBirthDateFormat">[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
new file mode 100644
index 0000000000..2d4c02b092
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/badge.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Additional attributes:
+ -->
+<badge border_image="Badge_Border"
+ border_color="BadgeBorderColor"
+ font="SansSerifSmall"
+ image="Badge_Background"
+ image_color="BadgeImageColor"
+ label_color="BadgeLabelColor"
+ label_offset_horiz="0"
+ label_offset_vert="0"
+ location="top_left"
+ location_percent_hcenter="85"
+ location_percent_vcenter="85"
+ padding_horiz="7"
+ padding_vert="4"
+ requests_front="true"
+ mouse_opaque="false"
+ >
+</badge>
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 16241ed84e..302014eb24 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -25,5 +25,6 @@
pad_bottom="3"
height="23"
scale_image="true"
+ handle_right_mouse="true"
use_draw_context_alpha="true">
</button>
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
index d1f68a9ef9..82d620d1e6 100644
--- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
@@ -16,6 +16,9 @@
font="SansSerifSmall"
scale_image="true"
pad_right="24"
+ halign="left"
+ tab_stop="true"
+ follows="all"
image_unselected="DropDown_Off"
image_selected="DropDown_On"
image_pressed="DropDown_Press"
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
new file mode 100644
index 0000000000..95f5cf2ecd
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_folder_view_folder
+ folder_arrow_image="Folder_Arrow"
+ folder_indentation="8"
+ item_height="20"
+ item_top_pad="4"
+ selection_image="Rounded_Square"
+ >
+ <new_badge
+ label="New"
+ label_offset_horiz="-1"
+ location="right"
+ padding_horiz="4"
+ padding_vert="1"
+ location_percent_hcenter="70"
+ border_image=""
+ image="Badge_Background_New"
+ />
+</inbox_folder_view_folder>
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml
new file mode 100644
index 0000000000..830c27bdac
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_inventory_panel show_load_status="false" />
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 93875d66e6..00f4c43915 100644
--- a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml
@@ -3,4 +3,12 @@
bg_opaque_color="InventoryBackgroundColor"
background_visible="true"
background_opaque="true"
- />
+ show_load_status="true"
+ >
+ <scroll
+ name="Inventory Scroller"
+ follows="all"
+ reserve_scroll_corner="true"
+ tab_stop="true"
+ />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index 37d60f1671..44436fb6f2 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -123,6 +123,14 @@
font="SansSerifSmall"
text_color="TextFgColor"
/>
+ <see_avatars_icon
+ name="see_avatars_icon"
+ width="22"
+ height="18"
+ top="21"
+ follows="right|top"
+ image_name="Parcel_SeeAVsOff_Light"
+ />
<combo_button
name="Location History"
label=""
diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml
index 9bf99fa363..47a210d9b7 100644
--- a/indra/newview/skins/default/xui/en/widgets/panel.xml
+++ b/indra/newview/skins/default/xui/en/widgets/panel.xml
@@ -10,4 +10,5 @@
bg_alpha_image_overlay="White"
background_visible="false"
background_opaque="false"
- chrome="false"/> \ No newline at end of file
+ chrome="false"
+ accepts_badge="true"/> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/widgets/time.xml b/indra/newview/skins/default/xui/en/widgets/time.xml
new file mode 100644
index 0000000000..b5bdd564a6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/time.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<time text_enabled_color="LabelTextColor"
+ text_disabled_color="LabelDisabledColor"
+ font="SansSerifSmall"
+ label_width="40" >
+ <time.up_button name="SpinCtrl Up"
+ image_unselected="Stepper_Up_Off"
+ image_selected="Stepper_Up_Press"
+ tab_stop="false"
+ follows="left|bottom" />
+ <time.down_button name="SpinCtrl Down"
+ image_unselected="Stepper_Down_Off"
+ image_selected="Stepper_Down_Press"
+ tab_stop="false"
+ follows="left|bottom" />
+</time>
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index 1c4b965f46..83749fc535 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -133,12 +133,12 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
0
</text>
<button label="Comprar terreno" left="130" name="Buy Land..." width="125"/>
+ <button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
<button label="Información de scripts" name="Scripts..."/>
<button label="Comprar para el grupo" name="Buy For Group..."/>
<button label="Comprar un pase" left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/>
<button label="Abandonar el terreno" name="Abandon Land..."/>
<button label="Reclamar el terreno" name="Reclaim Land..."/>
- <button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
</panel>
<panel label="CONTRATO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -308,6 +308,9 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
<panel.string name="push_restrict_region_text">
Sin &apos;empujones&apos; (prevalece lo marcado en la región)
</panel.string>
+ <panel.string name="see_avs_text">
+ Ver a los residentes de esta parcela y chatear con ellos
+ </panel.string>
<text name="allow_label">
Permitir a otros Residentes:
</text>
@@ -370,6 +373,10 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Pulse para elegir una imagen"/>
+ <text name="allow_label5">
+ Permitir a los residentes de otras parcelas:
+ </text>
+ <check_box label="Ver los avatares" name="SeeAvatarsCheck" tool_tip="Permite que los residentes de otras parcelas vean a los residentes de ésta y chateen con ellos, y también que tú puedas verles y chatear con ellos."/>
<text name="landing_point">
Punto de llegada: [LANDING]
</text>
@@ -429,6 +436,11 @@ los media:
Sonido:
</text>
<check_box label="Restringir sonidos de objetos y gestos a esta parcela" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Sonidos de avatar:
+ </text>
+ <check_box label="Todos" name="all av sound check"/>
+ <check_box label="Grupo" name="group av sound check"/>
<text name="Voice settings:">
Voz:
</text>
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 9d63abd73c..a3e656cc17 100644
--- a/indra/newview/skins/default/xui/es/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPCIONES DE LA CUADRÃCULA">
- <spinner label="Unidad de la cuadrícula (metros)" label_width="192" name="GridResolution" width="250"/>
- <spinner label="Alcance de la cuadrícula (metros)" label_width="192" name="GridDrawSize" width="250"/>
+ <floater.string name="grid_screen_text">
+ Pantalla
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mundo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referencia
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Adjunto
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacidad de la cuadrícula">
+ Modo
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Elige qué cuadricula usar para posicionar el objeto">
+ <combo_box.item label="Mundo" name="World"/>
+ <combo_box.item label="Local" name="Local"/>
+ <combo_box.item label="Referencia" name="Reference"/>
+ </combo_box>
+ <spinner label="Unidades (metros)" label_width="192" name="GridResolution" width="250"/>
+ <spinner label="Extensión (metros)" label_width="192" name="GridDrawSize" width="250"/>
<check_box label="Activar subunidades" name="GridSubUnit"/>
<check_box label="Ver la sección transversal" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacidad de la cuadrícula">
diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
deleted file mode 100644
index 9c3ac1be0e..0000000000
--- a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITOR DEL CICLO DE UN DÃA">
- <tab_container name="Day Cycle Tabs">
- <panel label="Ciclo de un día" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 12 am
- </text>
- <text name="WL3am">
- 3 am
- </text>
- <text name="WL6am">
- 6 am
- </text>
- <text name="WL9amHash">
- 9 am
- </text>
- <text name="WL12pmHash">
- 12 pm
- </text>
- <text name="WL3pm">
- 3 pm
- </text>
- <text name="WL6pm">
- 6 pm
- </text>
- <text name="WL9pm">
- 9 pm
- </text>
- <text name="WL12am2">
- 12 am
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Añadir un punto" label_selected="Añadir un punto" name="WLAddKey"/>
- <button label="Quitar un punto" label_selected="Quitar un punto" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Configuración del fotograma clave:
- </text>
- <text name="WLCurKeyTimeText">
- Hora clave:
- </text>
- <spinner label="Hora" name="WLCurKeyHour"/>
- <spinner label="Min." name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Modelo predefinido:
- </text>
- <combo_box label="Predefinido" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Intervalo:
- </text>
- <combo_box label="5 min." name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Duración del ciclo:
- </text>
- <spinner label="Hora" name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Seg." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Vista previa:
- </text>
- <button label="Probar" label_selected="Probar" name="WLAnimSky"/>
- <button label="Parar" label_selected="Parar" name="WLStopAnimSky"/>
- <button label="Usar el horario del estado" label_selected="Ir al horario del estado" name="WLUseLindenTime"/>
- <button label="Guardar este tipo de día" label_selected="Guardar este tipo de día" name="WLSaveDayCycle"/>
- <button label="Cargar y probar un tipo de día" label_selected="Cargar y probar un tipo de día" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..5e7df8530e
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="ELIMINAR EL ENV PREDEFINIDO">
+ <string name="title_water">
+ Eliminar el agua predefinida
+ </string>
+ <string name="title_sky">
+ Eliminar cielo predefinido
+ </string>
+ <string name="title_day_cycle">
+ Eliminar ciclo del día
+ </string>
+ <string name="label_water">
+ Predefinido:
+ </string>
+ <string name="label_sky">
+ Predefinido:
+ </string>
+ <string name="label_day_cycle">
+ Ciclo del día:
+ </string>
+ <string name="msg_confirm_deletion">
+ ¿Estás seguro de que quieres eliminar el valor predefinido seleccionado?
+ </string>
+ <string name="msg_sky_is_referenced">
+ No se puede quitar un valor predefinido al que se hace referencia en otro u otros ciclos del día.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="label">
+ Predefinido:
+ </text>
+ <button label="Borrar" name="delete"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..6ac46351db
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Editar ciclo del día">
+ <string name="title_new">
+ Crear un ciclo del día nuevo
+ </string>
+ <string name="title_edit">
+ Editar ciclo del día
+ </string>
+ <string name="hint_new">
+ Asigna un nombre al ciclo del día, ajusta los controles para crearlo y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar el ciclo del día, ajusta los controles siguientes y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="label">
+ Nombre predefinido:
+ </text>
+ <text name="note">
+ Nota: Si cambias el nombre del valor predefinido, crearás un predefinido nuevo y el actual no se modificará.
+ </text>
+ <text name="hint_item1">
+ - Pulsa en una pestaña para editar la configuración y el tiempo de un cielo determinado.
+ </text>
+ <text name="hint_item2">
+ - Pulsa y arrastra las pestañas para ajustar los tiempos de transición.
+ </text>
+ <text name="hint_item3">
+ - Usa el depurador para obtener una vista previa del ciclo del día.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Añadir clave" label_selected="Añadir clave" name="WLAddKey"/>
+ <button label="Eliminar clave" label_selected="Eliminar clave" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 12 AM
+ </text>
+ <text name="WL3am">
+ 3 AM
+ </text>
+ <text name="WL6am">
+ 6 AM
+ </text>
+ <text name="WL9amHash">
+ 9 AM
+ </text>
+ <text name="WL12pmHash">
+ 12 PM
+ </text>
+ <text name="WL3pm">
+ 3 PM
+ </text>
+ <text name="WL6pm">
+ 6 PM
+ </text>
+ <text name="WL9pm">
+ 9 PM
+ </text>
+ <text name="WL12am2">
+ 12 AM
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Configuración del cielo:
+ </text>
+ <combo_box label="Predefinido" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Hora:
+ </text>
+ <time name="time" value="6 AM"/>
+ <check_box label="Convertir en mi nuevo ciclo del día" name="make_default_cb"/>
+ <button label="Guardar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..d2197b80fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Editar cielo predefinido">
+ <string name="title_new">
+ Crear un nuevo cielo predefinido
+ </string>
+ <string name="title_edit">
+ Editar cielo predefinido
+ </string>
+ <string name="hint_new">
+ Asigna un nombre al valor predefinido, ajusta los controles para crearlo y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar el cielo predefinido, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="hint">
+ Para editar el valor predefinido, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </text>
+ <text name="label">
+ Nombre predefinido:
+ </text>
+ <text name="note">
+ Nota: Si cambias el nombre del valor predefinido, crearás un predefinido nuevo y el actual no se modificará.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMÓSFERA" name="Atmosphere">
+ <text name="BHText">
+ Horizonte azul
+ </text>
+ <text name="BDensText">
+ Cantidad de bruma
+ </text>
+ <text name="BDensText2">
+ Saturación
+ </text>
+ <text name="HDText">
+ Densidad de la bruma
+ </text>
+ <text name="DensMultText">
+ Densidad
+ </text>
+ <text name="WLDistanceMultText">
+ Distancia
+ </text>
+ <text name="MaxAltText">
+ Altitud máx.
+ </text>
+ </panel>
+ <panel label="LUZ" name="Lighting">
+ <text name="SLCText">
+ Color del sol y de la luna
+ </text>
+ <text name="WLAmbientText">
+ Ambiental
+ </text>
+ <text name="SunGlowText">
+ Resplandor del sol
+ </text>
+ <slider label="Visión" name="WLGlowB"/>
+ <slider label="Tamaño" name="WLGlowR"/>
+ <text name="WLStarText">
+ Brillo de las estrellas
+ </text>
+ <text name="SceneGammaText">
+ Gamma de la escena
+ </text>
+ <text name="TODText">
+ Posición del sol y la luna
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 12 AM
+ </text>
+ <text name="WL6am">
+ 6 AM
+ </text>
+ <text name="WL12pmHash">
+ 12 PM
+ </text>
+ <text name="WL6pm">
+ 6 PM
+ </text>
+ <text name="WL12am2">
+ 12 AM
+ </text>
+ <time name="WLDayTime" value="6:00 AM"/>
+ <text name="WLEastAngleText">
+ Ãngulo de elevación
+ </text>
+ </panel>
+ <panel label="NUBES" name="Clouds">
+ <text name="WLCloudColorText">
+ Color de las nubes
+ </text>
+ <text name="WLCloudColorText2">
+ Posición/Densidad de las nubes
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Nubosidad
+ </text>
+ <text name="WLCloudScaleText">
+ Altitud de las nubes
+ </text>
+ <text name="WLCloudDetailText">
+ Detalle de las nubes (Posición/Densidad)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Velocidad de las nubes: X
+ </text>
+ <check_box label="Lock" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Velocidad de las nubes: Y
+ </text>
+ <check_box label="Lock" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Convertir este valor predefinido en mi nueva configuración de cielo" name="make_default_cb"/>
+ <button label="Guardar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..f90ad59f78
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Editar el agua predefinida">
+ <string name="title_new">
+ Crear una nueva agua predefinida
+ </string>
+ <string name="title_edit">
+ Editar el agua predefinida
+ </string>
+ <string name="hint_new">
+ Asigna un nombre al valor predefinido, ajusta los controles para crearlo y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar el agua predefinida, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="hint">
+ Para editar el valor predefinido, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </text>
+ <text name="label">
+ Nombre predefinido:
+ </text>
+ <text name="note">
+ Nota: Si cambias el nombre del valor predefinido, crearás un predefinido nuevo y el actual no se modificará.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Color del agua
+ </text>
+ <text name="water_fog_density_label">
+ Transparencia
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modificar la claridad del agua
+ </text>
+ <text name="BHText">
+ Sentido de las olas grandes
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Tamaño de las ondulaciones
+ </text>
+ <text name="HDText">
+ Escala de Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Coeficiente de reflexión
+ </text>
+ <text name="BHText2">
+ Sentido de las olas pequeñas
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Refracción de la superficie
+ </text>
+ <text name="WaterScaleBelowText">
+ Refracción bajo la superficie
+ </text>
+ <text name="MaxAltText">
+ Desenfoque
+ </text>
+ <text name="BHText3">
+ Vista Normal
+ </text>
+ </panel>
+ <check_box label="Convertir este valor predefinido en mi nueva configuración de agua" name="make_default_cb"/>
+ <button label="Guardar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml
deleted file mode 100644
index 195690f546..0000000000
--- a/indra/newview/skins/default/xui/es/floater_env_settings.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDITOR DEL ENTORNO">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Duración de
-un día
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <text name="EnvCloudText">
- Nubosidad
- </text>
- <text name="EnvWaterColorText">
- Color del
-agua
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Pulsa para abrir el selector de color"/>
- <text name="EnvWaterFogText">
- Claridad del
-agua
- </text>
- <button bottom="-144" label="Usar el horario del estado" name="EnvUseEstateTimeButton" width="155"/>
- <button label="Cielo avanzado" left="167" name="EnvAdvancedSkyButton" width="155"/>
- <button label="Agua avanzada" left="326" name="EnvAdvancedWaterButton" width="155"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_environment_settings.xml b/indra/newview/skins/default/xui/es/floater_environment_settings.xml
new file mode 100644
index 0000000000..a9c5705d52
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="CONFIGURACIÓN DE ENTORNO">
+ <text name="note">
+ Puedes personalizar la configuración del entorno de tu visor con las opciones siguientes.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar configuración de región" name="use_region_settings"/>
+ <radio_item label="Personalizar mi entorno" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Nota: La configuración personalizada no estará visible para otros usuarios.
+ </text>
+ <text name="water_settings_title">
+ Configuración de agua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Cielo/Ciclo del día
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo invariable" name="my_sky_settings"/>
+ <radio_item label="Ciclo del día" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
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 6208db75f9..36f988b25f 100644
--- a/indra/newview/skins/default/xui/es/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inactivo
</string>
+ <string name="status_parse_error">
+ Problema de análisis de DAE - consulta los datos en el registro.
+ </string>
<string name="status_reading_file">
Cargando...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Error: El número de intersección es superior a 65534. Cancelado.
</string>
+ <string name="bad_element">
+ Error: el elemento no es válido
+ </string>
<string name="high">
Alto
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Simplificando...
</string>
+ <string name="tbd">
+ TBD
+ </string>
<text name="name_label">
Nombre:
</text>
@@ -74,23 +83,26 @@
Nivel de detalle: Mínimo
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
- <text name="physics cost">
- Coste físico: [COSTE]
- </text>
- <text name="upload fee">
- Cuota de carga: N/A
- </text>
- </panel>
- <text name="status">
- [ESTADO]
+ <text name="warning_title">
+ ATENCIÓN:
+ </text>
+ <text name="warning_message">
+ 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.
+ </text>
+ <text name="weights_text">
+ Descargar:
+Física:
+Servidor:
+
+Equiv. en prims:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Valores predeterminados" name="reset_btn" tool_tip="Restablecer valores predeterminados"/>
- <button label="Subir" name="ok_btn" tool_tip="Cargar al simulador"/>
- <button label="Cancelar" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Nivel de detalle" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Precio de subida: L$ [FEE]
+ </text>
+ <button label="Establecer en valores predeterminados" name="reset_btn" tool_tip="Establecer en valores predeterminados"/>
+ <button label="Calcular pesos y precio" name="calculate_btn" tool_tip="Calcular pesos y precio"/>
+ <button label="Subir" name="ok_btn" tool_tip="Cargar al simulador"/>
+ <button label="Cancelar" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_model_wizard.xml b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
index 019c2d3829..86de557ed9 100644
--- a/indra/newview/skins/default/xui/es/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
@@ -2,190 +2,216 @@
<floater name="Model Wizard" title="CARGAR ASISTENTE DE MODELO">
<button label="5. Subir" name="upload_btn"/>
<button label="4. Revisar" name="review_btn"/>
- <button label="3. Física" name="physics2_btn"/>
<button label="3. Física" name="physics_btn"/>
<button label="2. Optimizar" name="optimize_btn"/>
<button label="1. Seleccionar archivo" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Cargar modelo
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Elige el archivo de modelo
</text>
</panel>
- <text name="description">
- Este asistente te ayudará a importar modelos de redes en Second Life. En primer lugar, especifica un archivo que contenga el modelo que desees importar. Second Life es compatible con los archivos de COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nombre del archivo:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Usuarios avanzados: si tienes experiencia con las herramientas de creación de contenidos 3D, quizá te interese utilizar la función de subida avanzada.
+ </text>
+ <button label="Cambiar al modo Avanzado" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Elige el archivo de modelo que deseas subir
+ </text>
+ <button label="Buscar..." label_selected="Buscar..." name="browse"/>
+ <text name="support_collada_text">
+ ‎Second Life admite los archivos COLLADA (.dae)
+ </text>
+ <text name="dimensions_label">
+ Dimensiones (metros):
</text>
- <button label="Examinar..." label_selected="Examinar..." name="browse"/>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ ATENCIÓN:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ No podrás completar el paso final de la subida de este modelo a los servidores de Second Life. [secondlife:///app/floater/learn_more Averigua cómo] configurar tu cuenta para subir modelos de malla.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Optimizar
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Optimizar el modelo
</text>
</panel>
- <text name="description">
- Este asistente ha optimizado tu modelo con el fin de mejorar el rendimiento. Puedes ajustar los resultados del proceso de optimización a continuación o hacer clic en Siguiente para continuar.
+ <text name="optimize_hint">
+ Hemos optimizado el rendimiento del modelo, pero puedes ajustarlo más si lo deseas.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Generando el nivel de detalle
+ </text>
<text name="high_detail_text">
- Generar nivel de detalle: Alto
+ Generar el nivel de detalle: Alto
</text>
<text name="medium_detail_text">
- Generar nivel de detalle: Media
+ Generar el nivel de detalle: Medio
</text>
<text name="low_detail_text">
- Generar nivel de detalle: Bajo
+ Generar el nivel de detalle: Bajo
</text>
<text name="lowest_detail_text">
- Generar nivel de detalle: Mínimo
+ Generar el nivel de detalle: Mínimo
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Vista previa de modelo:
+ <text name="optimize_performance_text">
+ Rendimiento
+ </text>
+ <text name="optimize_faster_rendering_text">
+ Renderizado más rápido
+Menos detalles
+Menos peso de prim
+ </text>
+ <text name="optimize_accuracy_text">
+ Precisión
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Renderizado más lento
+Más detalles
+Más peso de prim
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Nivel de detalle disponible en la vista previa">
- <combo_item name="high">
- Alto
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Recalcular la geometría" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Vista previa de geometría
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="LOD para ver en renderizado de prueba">
+ <combo_item name="preview_lod_high">
+ Detalle alto
</combo_item>
- <combo_item name="medium">
- Media
+ <combo_item name="preview_lod_medium">
+ Detalles medios
</combo_item>
- <combo_item name="low">
- Bajo
+ <combo_item name="preview_lod_low">
+ Detalle bajo
</combo_item>
- <combo_item name="lowest">
- Mínimo
+ <combo_item name="preview_lod_lowest">
+ Detalles mínimos
</combo_item>
</combo_box>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Ajustar la física
</text>
</panel>
- <text name="description">
- El asistente creará una forma física, que determinará la manera en la que el objeto interactúa con otros objetos y avatares. Selecciona con el controlador deslizante el nivel de detalle más adecuado en función del uso del objeto:
+ <text name="physics_hint">
+ Crearemos una forma para la apariencia exterior del modelo. Ajusta el nivel de detalle de la forma según se necesite para el propósito proyectado del modelo.
</text>
- <panel name="content">
- <text name="streaming cost">
- Coste de recursos: [COSTE]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Rendimiento
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <text name="physics_faster_rendering_text">
+ Renderizado más rápido
+Menos detalles
+Menos peso de prim
</text>
- </panel>
- <text name="description">
- Obtén una vista previa de la forma física a continuación y haz clic en Siguiente para continuar. Para modificar la forma física, haz clic en el botón Atrás.
- </text>
- <panel name="content">
- <text name="lod_label">
- Vista previa de modelo:
+ <text name="physics_accuracy_text">
+ Precisión
+ </text>
+ <text name="physics_slower_dendering_text">
+ Renderizado más lento
+Más detalles
+Más peso de prim
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Nivel de detalle disponible en la vista previa">
- <combo_item name="high">
- Alto
+ <text name="physics_example_1">
+ Ejemplos:
+Objetos en movimiento
+Objetos voladores
+Vehículos
+ </text>
+ <text name="physics_example_2">
+ Ejemplos:
+Objetos estáticos pequeños
+Objetos con menos detalles
+Muebles sencillos
+ </text>
+ <text name="physics_example_3">
+ Ejemplos:
+Objetos estáticos
+Objetos con detalles
+Edificios
+ </text>
+ <button label="Recalcular física" name="recalculate_physics_btn"/>
+ <button label="Recalculando..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Prueba de física
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="LOD para ver en renderizado de prueba">
+ <combo_item name="preview_lod2_high">
+ Detalle alto
</combo_item>
- <combo_item name="medium">
- Media
+ <combo_item name="preview_lod2_medium">
+ Detalles medios
</combo_item>
- <combo_item name="low">
- Bajo
+ <combo_item name="preview_lod2_low">
+ Detalle bajo
</combo_item>
- <combo_item name="lowest">
- Mínimo
+ <combo_item name="preview_lod2_lowest">
+ Detalles mínimos
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Revisar
</text>
</panel>
- <text name="description">
- Revisa los detalles que aparecen más abajo y, a continuación, haz clic. Selecciona la opción de carga para cargar el modelo. Se realizará el cargo en tu saldo de L$ cuando hagas clic en Cargar.
- </text>
- <panel name="content">
- <text name="lod_label">
- Vista previa de modelo:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impacto en la parcela/región: [EQUIV] equivalentes en prim
</text>
- <combo_box name="preview_lod_combo" tool_tip="Nivel de detalle disponible en la vista previa">
- <combo_item name="high">
- Alto
- </combo_item>
- <combo_item name="medium">
- Media
- </combo_item>
- <combo_item name="low">
- Bajo
- </combo_item>
- <combo_item name="lowest">
- Mínimo
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ Cargaremos en tu cuenta el precio de subida de L$ [FEE].
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Al pulsar en el botón de subida, confirmas que posees los derechos necesarios sobre el material que contiene el modelo.
</text>
</panel>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
- <text name="physics cost">
- Coste físico: [COSTE]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carga completa.
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Subida finalizada
</text>
</panel>
- <text name="description">
- ¡Felicidades! Tu modelo se ha cargado correctamente. Encontrarás el modelo en la carpeta Objetos del inventario.
+ <text name="model_uploaded_text">
+ Se ha subido tu modelo.
+ </text>
+ <text name="inventory_text">
+ Puedes buscar la carpeta Objetos en tu inventario.
+ </text>
+ <text name="charged_fee">
+ Se han cargado [FEE] L$ en tu cuenta.
</text>
</panel>
<button label="&lt;&lt; Atrás" name="back"/>
<button label="Siguiente &gt;&gt;" name="next"/>
+ <button label="Calcular pesos y precio &gt;&gt;" name="calculate"/>
+ <button label="Calculando..." name="calculating"/>
<button label="Subir" name="upload" tool_tip="Cargar al simulador"/>
<button label="Cancelar" name="cancel"/>
<button label="Cerrar" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inactivo
</string>
+ <string name="status_parse_error">
+ Problema de análisis de DAE - consulta los datos en el registro.
+ </string>
<string name="status_reading_file">
Cargando...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Error: El número de intersección es superior a 65534. Cancelado.
</string>
+ <string name="bad_element">
+ Error: el elemento no es válido
+ </string>
<string name="high">
Alto
</string>
diff --git a/indra/newview/skins/default/xui/es/floater_search.xml b/indra/newview/skins/default/xui/es/floater_search.xml
index 377b848530..e24d8064a1 100644
--- a/indra/newview/skins/default/xui/es/floater_search.xml
+++ b/indra/newview/skins/default/xui/es/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="ENCONTRAR">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Cargando...
</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
index bca1839f09..1da2e491e1 100644
--- a/indra/newview/skins/default/xui/es/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="CONFIGURACIONES DEL DEPURADOR">
<radio_group name="boolean_combo">
- <radio_item label="VERDADERO" name="TRUE" value="verdadero"/>
- <radio_item label="FALSO" name="FALSE" value=""/>
+ <radio_item label="VERDADERO" name="TRUE" />
+ <radio_item label="FALSO" name="FALSE" />
</radio_group>
<color_swatch label="Color" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 9d29bc40bf..f6e246ebae 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Pulsa y arrastra para seleccionar el terreno.
</floater.string>
- <floater.string name="grid_screen_text">
- Pantalla
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] objetos ( [PRIM_COUNT] prims[PE_STRING] ) seleccionados
</floater.string>
- <floater.string name="grid_local_text">
- Local
- </floater.string>
- <floater.string name="grid_world_text">
- Mundo
- </floater.string>
- <floater.string name="grid_reference_text">
- Referencia
- </floater.string>
- <floater.string name="grid_attachment_text">
- Añadido
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] equivalentes en prim
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Visión"/>
<button label="" label_selected="" name="button move" tool_tip="Mover"/>
@@ -65,21 +56,13 @@
</radio_group>
<check_box label="Editar las partes enlazadas" name="checkbox edit linked parts"/>
<button label="Enlazar" name="link_btn"/>
- <button label="Desenlazar" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Muestra cuánto se calcula que cuesta renderizar este objeto">
- þ: [COUNT]
- </text>
+ <button label="Desenlazar" name="unlink_btn" width="95"/>
<check_box label="" name="checkbox uniform"/>
<text label="Estirar ambos lados" name="checkbox uniform label">
Estirar ambos lados
</text>
<check_box initial_value="true" label="Estirar las texturas" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Usar la cuadrícula" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Elige qué cuadricula usar para posicionar el objeto" width="82">
- <combo_box.item label="Mundo" name="World"/>
- <combo_box.item label="Local" name="Local"/>
- <combo_box.item label="Referencia" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Intervalo" name="checkbox snap to grid"/>
<button label="Opciones..." label_selected="Opciones..." name="Options..." tool_tip="Ver más opciones de la cuadrícula"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -119,23 +102,11 @@
Fuerza
</text>
<button label="Aplicar" label_selected="Aplicar" left="146" name="button apply to selection" tool_tip="Modificar el terreno seleccionado"/>
- <text left="134" name="obj_count">
- Objetos: [COUNT]
- </text>
- <text left="134" name="prim_count">
- Primitivas: [COUNT]
- </text>
- <text name="linked_set_count">
- Conjuntos con enlaces: [RECUENTO]
- </text>
- <text name="linked_set_cost" tool_tip="Coste de los conjuntos con enlaces actualmente seleccionados como [prims], [complejidad física]">
- Coste: [COSTE] / [FÃSICO]
- </text>
- <text name="object_count">
- Objetos: [RECUENTO]
+ <text name="selection_empty">
+ No está seleccionado nada.
</text>
- <text name="object_cost" tool_tip="Coste de los objetos actualmente seleccionados como [prims] / [complejidad física]">
- Coste: [COSTE] / [FÃSICO]
+ <text name="selection_weight">
+ Peso de física [PHYS_WEIGHT], Coste de renderizado [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288">
<panel label="General" name="General">
@@ -353,7 +324,6 @@
<combo_box.item label="Toroide" name="Torus"/>
<combo_box.item label="Plano" name="Plane"/>
<combo_box.item label="Cilindro" name="Cylinder"/>
- <combo_box.item label="Red" name="Mesh"/>
</combo_box>
</panel>
<panel label="Caracter." name="Features">
@@ -405,7 +375,7 @@
</combo_box>
<spinner label="Gravedad" name="Physics Gravity"/>
<spinner label="Fricción" name="Physics Friction"/>
- <spinner label="Densidad" name="Physics Density"/>
+ <spinner label="Densidad en 100 kg/m^3" name="Physics Density"/>
<spinner label="Reemplazo" name="Physics Restitution"/>
</panel>
<panel label="Textura" name="Texture">
diff --git a/indra/newview/skins/default/xui/es/floater_voice_effect.xml b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
index 5ef4347958..1a265845af 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(¡Nuevo!)
</string>
+ <string name="effect_Arena">
+ Campo
+ </string>
+ <string name="effect_Beast">
+ Bestia
+ </string>
+ <string name="effect_Buff">
+ Musculoso
+ </string>
+ <string name="effect_Buzz">
+ Murmullo
+ </string>
+ <string name="effect_Camille">
+ Camila
+ </string>
+ <string name="effect_Creepy">
+ Aterrador
+ </string>
+ <string name="effect_CreepyBot">
+ Robot aterrador
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ Robot profundo
+ </string>
+ <string name="effect_Demon">
+ Diablo
+ </string>
+ <string name="effect_Flirty">
+ Coqueta
+ </string>
+ <string name="effect_Foxy">
+ Astuto
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Halloween_2010_Bonus
+ </string>
+ <string name="effect_Helium">
+ Helio
+ </string>
+ <string name="effect_Husky">
+ Corpulento
+ </string>
+ <string name="effect_Intercom">
+ Intercom
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Pesadilla
+ </string>
+ <string name="effect_PopBot">
+ Robot pop
+ </string>
+ <string name="effect_Rachel">
+ Raquel
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Robot
+ </string>
+ <string name="effect_Roxanne">
+ Roxana
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samanta
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Bajito
+ </string>
+ <string name="effect_Sneaky">
+ Furtivo
+ </string>
+ <string name="effect_Stallion">
+ Mujeriego
+ </string>
+ <string name="effect_Sultry">
+ Sensual
+ </string>
+ <string name="effect_Thunder">
+ Trueno
+ </string>
+ <string name="effect_Vixen">
+ Tigresa
+ </string>
+ <string name="effect_WhinyBot">
+ Robot llorica
+ </string>
<text name="preview_text">
Para probarla
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml
deleted file mode 100644
index 2c1f6cfbfb..0000000000
--- a/indra/newview/skins/default/xui/es/floater_water.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="EDITOR AVANZADO DEL AGUA">
- <text name="KeyFramePresetsText">
- Agua predefinida:
- </text>
- <button label="Nueva" label_selected="Nueva" name="WaterNewPreset"/>
- <button label="Guardar" label_selected="Guardar" name="WaterSavePreset"/>
- <button label="Borrar" label_selected="Borrar" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="CONFIGURACIÓN" name="Settings">
- <text name="BHText">
- Color del agua
- </text>
- <button label="?" left="175" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Pulsa para abrir el selector de color"/>
- <text name="WaterFogDensText">
- Transparencia
- </text>
- <button label="?" left="175" name="WaterFogDensityHelp"/>
- <text name="WaterUnderWaterFogModText">
- Modificar la claridad del agua
- </text>
- <button label="?" left="175" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Tamaño de las ondulaciones
- </text>
- <button label="?" left="405" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Escala de Fresnel
- </text>
- <button label="?" left="405" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Coeficiente de reflexión
- </text>
- <button label="?" left="405" name="WaterFresnelOffsetHelp"/>
- <text name="DensMultText">
- Refracción de la superficie
- </text>
- <button label="?" left="640" name="WaterScaleAboveHelp"/>
- <text name="WaterScaleBelowText">
- Refracción bajo la superficie
- </text>
- <button label="?" left="640" name="WaterScaleBelowHelp"/>
- <text name="MaxAltText">
- Desenfoque
- </text>
- <button label="?" left="640" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="IMAGEN" name="Waves">
- <text name="BHText">
- Sentido de la onda grande
- </text>
- <button label="?" left="170" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Sentido de la onda pequeña
- </text>
- <button label="?" left="170" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Vista Normal
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
deleted file mode 100644
index 585a42e429..0000000000
--- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="EDITOR AVANZADO DEL CIELO">
- <text name="KeyFramePresetsText">
- Cielos definidos:
- </text>
- <button label="Nuevo" label_selected="Nuevo" name="WLNewPreset"/>
- <button label="Guardar" label_selected="Guardar" name="WLSavePreset"/>
- <button label="Borrar" label_selected="Borrar" name="WLDeletePreset"/>
- <button font="SansSerifSmall" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" left_delta="90" name="WLDayCycleMenuButton" width="150"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMÓSFERA" name="Atmosphere">
- <text name="BHText">
- Coloración
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- V
- </text>
- <text name="BHText4">
- A
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Cantidad de bruma
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Saturación
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- V
- </text>
- <text name="BHText8">
- A
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densidad de la bruma
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Densidad
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Distancia
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitud máx.
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="LUZ" name="Lighting">
- <text name="SLCText">
- Color del Sol y de la Luna
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- A
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Posición del Sol y la Luna
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Ambiental
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- V
- </text>
- <text name="BHText7">
- A
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Ãngulo de elevación
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Resplandor del Sol
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Visión" name="WLGlowB"/>
- <slider label="Tamaño" name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma de la escena
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Brillo de las estrellas
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUBES" name="Clouds">
- <text name="WLCloudColorText">
- Color de las nubes
- </text>
- <button label="?" left="190" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- A
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Posición/Densidad de las nubes
- </text>
- <button label="?" left="190" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Nubosidad
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Altitud de las nubes
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text font="SansSerifSmall" name="WLCloudDetailText">
- Detalle de las nubes (Posición/Densidad)
- </text>
- <button label="?" name="WLCloudDetailHelp"/>
- <text bottom="-113" name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <slider bottom="-127" name="WLCloudDetailX"/>
- <text name="WLCloudScrollXText">
- Velocidad de X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Bloquear" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Velocidad de Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Bloquear" name="WLCloudLockY"/>
- <check_box label="Incluir nubes clásicas" name="DrawClassicClouds"/>
- <button label="?" left="618" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
index c27d624732..cabcacaed5 100644
--- a/indra/newview/skins/default/xui/es/menu_login.xml
+++ b/indra/newview/skins/default/xui/es/menu_login.xml
@@ -17,7 +17,7 @@
<menu_item_call label="Mostrar los &apos;TOS&apos;" name="TOS"/>
<menu_item_call label="Mostrar mensaje crítico" name="Critical"/>
<menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/>
- <menu_item_call label="Prueba de ventanas de contenidos web" name="Web Content Floater Test"/>
+ <menu_item_call label="Prueba de depuración de ventanas de contenido web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Mostrar el selector de Grid" name="Show Grid Picker"/>
<menu_item_call label="Mostrar la consola de notificaciones" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
index f0fe383c0c..1403e4db01 100644
--- a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
<menu_item_check label="Ordenar según distancia" name="sort_distance"/>
<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+ <menu_item_check label="Ver mapa" name="view_map"/>
<menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 0824e386d5..b0d16d1ca4 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Mis grupos" name="My Groups"/>
<menu_item_check label="Chat" name="Nearby Chat"/>
<menu_item_call label="Gente cerca" name="Active Speakers"/>
+ <menu_item_check label="Chat de voz" name="Nearby Voice"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_check label="Minimapa" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Mediodía" name="Noon"/>
<menu_item_call label="Atardecer" name="Sunset"/>
<menu_item_call label="Medianoche" name="Midnight"/>
- <menu_item_call label="Hora del Estado" name="Revert to Region Default"/>
- <menu_item_call label="Editor del entorno" name="Environment Editor"/>
+ </menu>
+ <menu label="Editor de entorno" name="Enviroment Editor">
+ <menu_item_call label="Configuración de entorno..." name="Enviroment Settings"/>
+ <menu label="Agua predefinida" name="Water Presets">
+ <menu_item_call label="Nuevo predefinido..." name="new_water_preset"/>
+ <menu_item_call label="Editar predefinido..." name="edit_water_preset"/>
+ <menu_item_call label="Eliminar predefinido..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Cielos predefinidos" name="Sky Presets">
+ <menu_item_call label="Nuevo predefinido..." name="new_sky_preset"/>
+ <menu_item_call label="Editar predefinido..." name="edit_sky_preset"/>
+ <menu_item_call label="Eliminar predefinido..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Días predefinidos" name="Day Presets">
+ <menu_item_call label="Nuevo predefinido..." name="new_day_preset"/>
+ <menu_item_call label="Editar predefinido..." name="edit_day_preset"/>
+ <menu_item_call label="Eliminar predefinido..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Construir" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Desactivar los límites de la cámara" name="Disable Camera Distance"/>
<menu_item_check label="Foto en Alta Resolución" name="HighResSnapshot"/>
<menu_item_check label="Silenciar el Guardar una foto" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Comprimir las fotos para el disco duro" name="CompressSnapshotsToDisk"/>
<menu label="Herramientas de rendimiento" name="Performance Tools">
<menu_item_call label="Medidor de lag" name="Lag Meter"/>
<menu_item_check label="Estadísticas" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
index 9d9ce75e53..ec13f99a01 100644
--- a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Editar el vestuario" name="edit"/>
<menu_item_call label="Quitarme" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copiar la lista del vestuario al portapapeles" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index b2131fc038..2ec1b333a9 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1560,6 +1560,11 @@ Vuelve a intentarlo más tarde.
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Has intentado hacer [OFFERS] ofertas de teleporte,
+excediendo el límite de [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
¿Obligar a este Residente a ir a tu localización?
<form name="form">
@@ -1980,6 +1985,10 @@ Linden Lab
¿Estás seguro de que quieres borrar tu historial web, de viajes y de búsquedas?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ ¿Estás seguro de que quieres vaciar la caché del visor?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
¿Estás seguro de que quieres limpiar tus cookies?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/>
@@ -2005,48 +2014,30 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
¿Quieres sobrescribir la preselección guardada?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
- <notification name="WLDeletePresetAlert">
- ¿Quieres borrar [SKY]?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
- </notification>
<notification name="WLNoEditDefault">
No puedes editar ni borrar una preselección por defecto.
</notification>
<notification name="WLMissingSky">
Este archivo del ciclo de un día se refiere a un archivo perdido de cielo: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Ya existe un efecto de procesamiento. ¿Quieres sobreescribirlo?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
+ <notification name="WLRegionApplyFail">
+ No se pudo aplicar la configuración a la región. El problema podría solucionarse saliendo de la región y regresando a ella. La razón especificada fue: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Dame un nombre para el cielo nuevo.
- <form name="form">
- <input name="message">
- Preselección nueva
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- ¡Esa preselección ya existe!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ No se puede eliminar la última clave de este ciclo del día, ya que no puedes vaciar la caché del día. En lugar de intentar eliminar la última clave restante y después intentar crear una nueva, debes modificarla.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Dame un nombre para la nueva preselección de agua.
- <form name="form">
- <input name="message">
- Preselección nueva
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ No se pueden añadir más fotogramas clave a este ciclo del día. El número máximo de fotogramas clave para ciclos del día de alcance [SCOPE] es [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- ¡Esa preselección ya existe!
+ <notification name="EnvUpdateRate">
+ La configuración de entorno de la región sólo puede actualizarse cada [WAIT] segundos. Espera por lo menos este tiempo y vuelve intentarlo.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- No puedes editar o borrar una preselección por defecto.
+ <notification name="PPSaveEffectAlert">
+ Ya existe un efecto de procesamiento. ¿Quieres sobreescribirlo?
+ <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="ChatterBoxSessionStartError">
No se puede empezar una nueva sesión de chat con [RECIPIENT].
@@ -2075,13 +2066,14 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
<usetemplate ignoretext="Ponerme la ropa que estoy creando mientras modifico mi apariencia" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="NotAgeVerified">
- Debes haber verificado tu edad para visitar este sitio. ¿Quieres ir al sitio web de [SECOND_LIFE] y verificarla?
+ Para acceder al contenido Adulto y los lugares de Second Life 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]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=es
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="No he verificado mi edad" name="okcancelignore" notext="No" yestext="Sí"/>
+ <usetemplate ignoretext="No he verificado mi edad" name="okcancelignore" notext="Cancelar" yestext="Ir a Verificación de la edad"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Para visitar este sitio debes haber aportado información de pago en tu cuenta. ¿Quieres ir al sitio web de [SECOND_LIFE] y configurar esto?
@@ -2337,6 +2329,9 @@ Aquí no puedes volar.
<notification name="NoBuild">
Este terreno tiene desactivado el poder construir. Aquí no puedes ni construir ni crear objetos.
</notification>
+ <notification name="SeeAvatars">
+ Esta parcela oculta los avatares y el chat de texto de otras parcelas. No podrás ver a los residentes que estén fuera la parcela ni ellos podrán verte a ti. El chat de texto regular del canal 0 también está bloqueado.
+ </notification>
<notification name="ScriptsStopped">
Un administrador ha detenido temporalmente los scripts en esta región.
</notification>
@@ -2431,7 +2426,7 @@ Por favor, vuelve a intentarlo en unos momentos.
</notification>
<notification name="ObjectGiveItem">
Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Guardar"/>
<button name="Discard" text="Descartar"/>
@@ -2763,7 +2758,15 @@ Se mostrará cuando haya suficiente espacio.
Selecciona los residentes con quienes deseas compartir.
</notification>
<notification name="MeshUploadError">
- No se ha cargado [ETIQUETA]: [MENSAJE] [IDENTIFICADOR] [IDENTIFICADOR_FALTA_VALIDEZ]
+ [LABEL] no se pudo subir: [MESSAGE] [IDENTIFIER]
+
+Consulta los detalles en el archivo de registro.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Error al solicitar los permisos para subir la malla.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ No se ha podido obtener la capacidad de la región &apos;[CAPABILITY]&apos;.
</notification>
<notification name="ShareItemsConfirmation">
¿Estás seguro de que quieres compartir los elementos siguientes?
diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
index 9b101ee4ba..cda465da9c 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Guardar" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Cancelar" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_list.xml b/indra/newview/skins/default/xui/es/panel_outfits_list.xml
index 661b44e419..3f8057f242 100644
--- a/indra/newview/skins/default/xui/es/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="¿No encuentras lo que buscas? Inténtalo con [secondlife:///app/search/all/[SEARCH_TERM] Buscar]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Todavía no tienes vestuario. Inténtalo con [secondlife:///app/search/all/ Buscar]"/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Ver más opciones"/>
+ <menu_button name="options_gear_btn" tool_tip="Ver más opciones"/>
<button name="trash_btn" tool_tip="Eliminar el vestuario seleccionado"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 01149e412d..2fcbb00aed 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -66,17 +66,17 @@
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml
index 3c363859a4..e1cf1332e2 100644
--- a/indra/newview/skins/default/xui/es/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_place_profile.xml
@@ -64,6 +64,8 @@
<text name="scripts_value" value="Sí"/>
<text name="damage_label" value="Daño:"/>
<text name="damage_value" value="No"/>
+ <text name="see_avatars_label" value="Ver los avatares:"/>
+ <text name="see_avatars_value" value="No"/>
<button label="Acerca del terreno" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
index 4c90a7e6b4..e9984b4512 100644
--- a/indra/newview/skins/default/xui/es/panel_places.xml
+++ b/indra/newview/skins/default/xui/es/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
index 96e63e6fa0..620a95de4d 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Caché:
+ </text>
+ <spinner label="Tamaño de la caché (64 - 9984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Vaciar la caché" label_selected="Vaciar la caché" name="clear_cache"/>
+ <text name="Cache location">
+ Localización de la caché:
+ </text>
+ <button label="Elegir" label_selected="Elegir" name="set_cache"/>
+ <button label="Ubicación predeterminada" label_selected="Ubicación predeterminada" name="default_cache_location"/>
<text name="UI Size:">
Tamaño de la UI:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
index e6e4c13203..d47a6d718a 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
@@ -39,6 +39,6 @@
<text name="floater_opacity">
Opacidad de la ventana:
</text>
- <slider label="Activo:" name="active"/>
- <slider label="Inactivo:" name="inactive"/>
+ <slider label="Activa:" name="active"/>
+ <slider label="Inactiva:" name="inactive"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
index fa7806a75a..5cb1654c70 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
@@ -12,13 +12,14 @@
<slider label="Ambiental" name="Wind Volume"/>
<slider label="Efectos de sonido" name="SFX Volume"/>
<slider label="Música en streaming" name="Music Volume"/>
- <check_box label="Activados" name="enable_music"/>
+ <check_box label="Activada" name="enable_music"/>
<slider label="Multimedia" name="Media Volume"/>
<check_box label="Activados" name="enable_media"/>
<slider label="Chat de voz" name="Voice Volume"/>
<check_box label="Activado" name="enable_voice_check"/>
<check_box label="Permitir la ejecución automática de los media" name="media_auto_play_btn" tool_tip="Marcar esto para permitir la ejecución automática de los media" value="true"/>
<check_box label="Ejecutar para otros avatares los media anexados" name="media_show_on_others_btn" tool_tip="Al desmarcar esto se esconderán los media anexados a otros avatares cercanos" value="true"/>
+ <check_box label="Reproducir sonidos de los gestos" name="gesture_audio_play_btn" tool_tip="Selecciona esta opción para escuchar los sonidos de los gestos" value="verdadero"/>
<text name="voice_chat_settings">
Configuración del chat de voz
</text>
@@ -35,28 +36,5 @@
<button label="Elegir la tecla" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Reconfigurarlo al botón medio del ratón"/>
<button label="Dispositivos de entrada y salida" name="device_settings_btn" width="210"/>
- <panel label="Configuración de dispositivos" name="device_settings_panel">
- <panel.string name="default_text">
- Por defecto
- </panel.string>
- <panel.string name="default system device">
- Dispositivo del sistema por defecto
- </panel.string>
- <panel.string name="no device">
- Ningún dispositivo
- </panel.string>
- <text name="Input">
- Entrada
- </text>
- <text name="My volume label">
- Mi volumen:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen usando este deslizable"/>
- <text name="wait_text">
- Por favor, espera
- </text>
- <text name="Output">
- Salida
- </text>
- </panel>
+ <panel label="Configuración de dispositivos" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_environment.xml b/indra/newview/skins/default/xui/es/panel_region_environment.xml
new file mode 100644
index 0000000000..a73f1deed4
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Entorno" name="panel_env_info">
+ <text name="water_settings_title">
+ Selecciona la configuración de agua y cielo/ciclo del día que deseas que vean todos los visitantes de tu región. Más información
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar los valores predeterminados de Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Usar la configuración siguiente" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Configuración de agua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Cielo/Ciclo del día
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo invariable" name="my_sky_settings"/>
+ <radio_item label="Ciclo del día" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Aplicar" name="apply_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_terrain.xml b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
index 98b10e4895..cb6c03dbb5 100644
--- a/indra/newview/skins/default/xui/es/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
@@ -7,21 +7,56 @@
desconocida
</text>
<spinner label="Nivel del agua" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Límite de elevación &#10;del terreno" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Límite de bajada del &#10;terreno" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Usar el Sol del estado" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Fijar el Sol" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Fase" name="sun_hour_slider"/>
+ <spinner label="Límite de elevación
+del terreno" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Límite de bajada del
+terreno" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Texturas del terreno (requiere archivos .tga de 512x512, 24 bits)
+ </text>
+ <text name="height_text_lbl">
+ 1 (bajo)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (alto)
+ </text>
+ <text name="height_text_lbl5">
+ Intervalos de elevación de textura
+ </text>
+ <text name="height_text_lbl10">
+ Estos valores representan la gama de mezclas para las texturas anteriores.
+ </text>
+ <text name="height_text_lbl11">
+ El valor BAJA mide en metros la altura MÃXIMA de la textura n.º 1, y el valor ALTA es la altura MÃNIMA de la textura n.º 4.
+ </text>
+ <text name="height_text_lbl6">
+ Noroeste
+ </text>
+ <text name="height_text_lbl7">
+ Noreste
+ </text>
+ <spinner label="Bajo" name="height_start_spin_1"/>
+ <spinner label="Bajo" name="height_start_spin_3"/>
+ <spinner label="Alto" name="height_range_spin_1"/>
+ <spinner label="Alto" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Suroeste
+ </text>
+ <text name="height_text_lbl9">
+ Sureste
+ </text>
+ <spinner label="Bajo" name="height_start_spin_0"/>
+ <spinner label="Bajo" name="height_start_spin_2"/>
+ <spinner label="Alto" name="height_range_spin_0"/>
+ <spinner label="Alto" name="height_range_spin_2"/>
+ <button label="Descargar el RAW del terreno..." name="download_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores" width="230"/>
+ <button label="Subir un RAW para el terreno..." name="upload_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores" width="230"/>
+ <button label="Predeterminar este terreno" name="bake_terrain_btn" tool_tip="Definir el terreno actual como punto medio para los límites de elevación/bajada" width="230"/>
<button label="Aplicar" name="apply_btn"/>
- <button width="230" label="Descargar el RAW del terreno..." name="download_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
- <button left="246" label="?" name="download_raw_help"/>
- <button width="230" label="Subir un RAW para el terreno..." name="upload_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
- <button left="246" label="?" name="upload_raw_help"/>
- <button width="230" label="Predeterminar este terreno" name="bake_terrain_btn" tool_tip="Definir el terreno actual como punto medio para los límites de elevación/bajada"/>
- <button left="246" label="?" name="bake_terrain_help"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_sound_devices.xml b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
index acf5c68cda..9531b99cc8 100644
--- a/indra/newview/skins/default/xui/es/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Por defecto
</panel.string>
+ <string name="name_no_device">
+ Ningún dispositivo
+ </string>
+ <string name="name_default_system_device">
+ Dispositivo del sistema por defecto
+ </string>
<text name="Input">
Entrada
</text>
+ <text name="Output">
+ Salida
+ </text>
<text name="My volume label">
Mi volumen:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Por favor, espera
</text>
- <text name="Output">
- Salida
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
index b233fdd734..84d19c703b 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Cosas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Objetos recibidos ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Objetos recibidos
+ </string>
+ <button label="Objetos recibidos" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] Nuevos
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Aquí se entregarán las compras realizadas en el mercado.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Buzón de salida de comerciante" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Poner en el escaparate de Mi Mercado"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Configura tu cuenta de comerciante para utilizar esta función.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index b759eed738..2c33177ab4 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -25,6 +25,9 @@
<string name="StartupInitializingVFS">
Iniciando VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Error de inicialización de gráficos. Actualiza tu controlador de gráficos.
+ </string>
<string name="ProgressRestoring">
Restaurando...
</string>
@@ -79,6 +82,12 @@
<string name="LoginQuicktimeOK">
QuickTime se ha iniciado adecuadamente.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Solicitando capacidades de la región...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Solicitando capacidades de la región, intento [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
Esperando la conexión con la región...
</string>
@@ -1171,6 +1180,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="InventoryNoTexture">
No tienes en tu inventario una copia de esta textura
</string>
+ <string name="InventoryInboxNoItems">
+ Aquí se entregarán los objetos comprados en el mercado.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Arrastra objetos aquí para preparar una lista del escaparate de tu mercado.
+ </string>
<string name="no_transfer" value="(no transferible)"/>
<string name="no_modify" value="(no modificable)"/>
<string name="no_copy" value="(no copiable)"/>
@@ -1211,9 +1226,6 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="InvFolder My Inventory">
Mi Inventario
</string>
- <string name="InvFolder My Favorites">
- Mis Favoritos
- </string>
<string name="InvFolder Library">
Biblioteca
</string>
@@ -1272,10 +1284,10 @@ Intenta iniciar sesión de nuevo en unos instantes.
Gestos
</string>
<string name="InvFolder Favorite">
- Favoritos
+ Mis Favoritos
</string>
<string name="InvFolder favorite">
- Favoritos
+ Mis Favoritos
</string>
<string name="InvFolder Current Outfit">
Vestuario actual
@@ -1298,6 +1310,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="InvFolder All">
Todas
</string>
+ <string name="no_attachments">
+ No tienes puestos anexos
+ </string>
<string name="Buy">
Comprar
</string>
@@ -1607,6 +1622,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
</string>
<string name="SummaryForTheWeek" value="Resumen de esta semana, empezando el "/>
<string name="NextStipendDay" value=". El próximo día de pago es el "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value="Grupo Aportaciones individuales"/>
<string name="GroupColumn" value="Grupo"/>
<string name="Balance">
@@ -1633,6 +1651,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="IMTeen">
teen
</string>
+ <string name="Anyone">
+ cualquiera
+ </string>
<string name="RegionInfoError">
error
</string>
@@ -1849,6 +1870,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="Public">
Público
</string>
+ <string name="LocalSettings">
+ Configuración local
+ </string>
+ <string name="RegionSettings">
+ Configuración de la región
+ </string>
<string name="ClassifiedClicksTxt">
Clics: [TELEPORT] teleportes, [MAP] mapa, [PROFILE] perfil
</string>
@@ -1921,6 +1948,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="GroupMoneyDebits">
Débitos
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Contenidos
</string>
@@ -3640,6 +3670,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Región General
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Los avatares están visibles y está permitido el chat fuera de esta parcela
+ </string>
<string name="UpdaterWindowTitle">
Actualizar [APP_NAME]
</string>
@@ -4056,6 +4089,87 @@ Denuncia de infracción
<string name="Female - Wow">
Mujer - Admiración
</string>
+ <string name="/bow">
+ /reverencia
+ </string>
+ <string name="/clap">
+ /aplaudir
+ </string>
+ <string name="/count">
+ /contar
+ </string>
+ <string name="/extinguish">
+ /apagar
+ </string>
+ <string name="/kmb">
+ /bmc
+ </string>
+ <string name="/muscle">
+ /músculo
+ </string>
+ <string name="/no">
+ /no
+ </string>
+ <string name="/no!">
+ /¡no!
+ </string>
+ <string name="/paper">
+ /papel
+ </string>
+ <string name="/pointme">
+ /señalarme
+ </string>
+ <string name="/pointyou">
+ /señalarte
+ </string>
+ <string name="/rock">
+ /piedra
+ </string>
+ <string name="/scissor">
+ /tijera
+ </string>
+ <string name="/smoke">
+ /fumar
+ </string>
+ <string name="/stretch">
+ /estirar
+ </string>
+ <string name="/whistle">
+ /silbar
+ </string>
+ <string name="/yes">
+ /sí
+ </string>
+ <string name="/yes!">
+ /¡sí!
+ </string>
+ <string name="afk">
+ ausente
+ </string>
+ <string name="dance1">
+ baile1
+ </string>
+ <string name="dance2">
+ baile2
+ </string>
+ <string name="dance3">
+ baile3
+ </string>
+ <string name="dance4">
+ baile4
+ </string>
+ <string name="dance5">
+ baile5
+ </string>
+ <string name="dance6">
+ baile6
+ </string>
+ <string name="dance7">
+ baile7
+ </string>
+ <string name="dance8">
+ baile8
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index bef41bb1ba..55dd913a22 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -135,12 +135,12 @@
0
</text>
<button label="Acheter du terrain" label_selected="Acheter le terrain..." left_delta="60" name="Buy Land..." width="125"/>
+ <button label="Vente Linden" label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
<button label="Infos sur les scripts" name="Scripts..." width="110"/>
<button label="Acheter pour le groupe" label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
<button label="Acheter un pass" label_selected="Acheter un pass..." left_delta="-127" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
<button label="Abandonner le terrain" label_selected="Abandonner le terrain..." name="Abandon Land..."/>
<button label="Récupérer le terrain" label_selected="Redemander le terrain…" name="Reclaim Land..."/>
- <button label="Vente Linden" label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
</panel>
<panel label="RÈGLEMENT" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -312,6 +312,9 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
<panel.string name="push_restrict_region_text">
Pas de bousculades (les règles de la région priment)
</panel.string>
+ <panel.string name="see_avs_text">
+ Voir et chatter avec les résidents sur cette parcelle
+ </panel.string>
<text name="allow_label">
Autoriser les autres résidents à :
</text>
@@ -374,6 +377,10 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
Photo :
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
+ <text name="allow_label5">
+ Autoriser les résidents sur les autres parcelles à :
+ </text>
+ <check_box label="Voir les avatars" name="SeeAvatarsCheck" tool_tip="Permettre aux résidents présents sur d&apos;autres parcelles de voir et chatter avec les résidents présents sur cette parcelle et vous permettre de les voir et de chatter avec eux."/>
<text name="landing_point">
Lieu d&apos;arrivée : [LANDING]
</text>
@@ -434,6 +441,11 @@ musique :
Son :
</text>
<check_box label="Limiter les gestes et sons d&apos;objet à cette parcelle" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Sons d&apos;avatar :
+ </text>
+ <check_box label="Tout le monde" name="all av sound check"/>
+ <check_box label="Groupe" name="group av sound check"/>
<text name="Voice settings:">
Voix :
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
index cad00ea866..a200ed192f 100644
--- a/indra/newview/skins/default/xui/fr/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPTIONS DE LA GRILLE">
+ <floater.string name="grid_screen_text">
+ Écran
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Locale
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Monde
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Référence
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Élément attaché
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacité de la grille">
+ Mode
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Choisir le type d&apos;axe de grille pour le positionnement de l&apos;objet.">
+ <combo_box.item label="Grille du monde" name="World"/>
+ <combo_box.item label="Grille locale" name="Local"/>
+ <combo_box.item label="Grille de référence" name="Reference"/>
+ </combo_box>
<spinner label="Unités (mètres)" name="GridResolution"/>
- <spinner label="Mesures (mètres)" name="GridDrawSize"/>
+ <spinner label="Étendue (mètres)" name="GridDrawSize"/>
<check_box label="Fixation des sous-unités" name="GridSubUnit"/>
<check_box label="Afficher les sections transversales" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacité de la grille">
diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
deleted file mode 100644
index 0ce17b9dc6..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITEUR DU CYCLE DU JOUR">
- <tab_container name="Day Cycle Tabs">
- <panel label="Cycle du jour" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- Min.
- </text>
- <text name="WL3am">
- 3h
- </text>
- <text name="WL6am">
- 6h
- </text>
- <text name="WL9amHash">
- 9h
- </text>
- <text name="WL12pmHash">
- Midi
- </text>
- <text name="WL3pm">
- 15h
- </text>
- <text name="WL6pm">
- 18h
- </text>
- <text name="WL9pm">
- 21h
- </text>
- <text name="WL12am2">
- Min.
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Ajouter clé" label_selected="Ajouter clé" name="WLAddKey"/>
- <button label="Supprimer clé" label_selected="Supprimer clé" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Réglages des images-clés :
- </text>
- <text name="WLCurKeyTimeText">
- Heure de la clé :
- </text>
- <spinner label="Heure" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Préréglages clés :
- </text>
- <combo_box label="Préréglage" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Snap :
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Durée du cycle :
- </text>
- <spinner label="Heure" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sec" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Aperçu :
- </text>
- <button label="Lire" label_selected="Lire" name="WLAnimSky"/>
- <button label="Arrêter" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Utiliser heure domaine" label_selected="Aller heure domaine" name="WLUseLindenTime"/>
- <button label="Enregistrer jour test" label_selected="Enregistrer jour test" name="WLSaveDayCycle"/>
- <button label="Charger jour test" label_selected="Charger jour test" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..035bdbe5f3
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="SUPPRIMER PRÉRÉGLAGE ENV.">
+ <string name="title_water">
+ Supprimer un préréglage de l&apos;eau
+ </string>
+ <string name="title_sky">
+ Supprimer un préréglage du ciel
+ </string>
+ <string name="title_day_cycle">
+ Supprimer un cycle du jour
+ </string>
+ <string name="label_water">
+ Préréglage :
+ </string>
+ <string name="label_sky">
+ Préréglage :
+ </string>
+ <string name="label_day_cycle">
+ Cycle du jour :
+ </string>
+ <string name="msg_confirm_deletion">
+ Voulez-vous vraiment supprimer le préréglage sélectionné ?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Impossible de supprimer un préréglage référencé dans un ou plusieurs cycles du jour.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="label">
+ Préréglage :
+ </text>
+ <button label="Supprimer" name="delete"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..0100419bc5
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Modifier un cycle du jour">
+ <string name="title_new">
+ Créer un nouveau cycle du jour
+ </string>
+ <string name="title_edit">
+ Modifier un cycle du jour
+ </string>
+ <string name="hint_new">
+ Donnez un nom au cycle du jour, ajustez les contrôles afin de le créer, puis cliquez sur Enregistrer.
+ </string>
+ <string name="hint_edit">
+ Pour modifier le cycle du jour, ajustez les contrôles ci-dessous, puis cliquez sur Enregistrer.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="label">
+ Nom du préréglage :
+ </text>
+ <text name="note">
+ Remarque : si vous changez votre préréglage de nom, un nouveau préréglage sera créé et celui existant restera tel quel.
+ </text>
+ <text name="hint_item1">
+ - Cliquez sur un repère pour modifier le réglage du ciel et l&apos;heure associés.
+ </text>
+ <text name="hint_item2">
+ - Cliquez sur les repères et faites-les glisser afin de définir les heures de transition.
+ </text>
+ <text name="hint_item3">
+ - Déplacez le marqueur en forme de triangle pour afficher un aperçu du cycle du jour.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Ajouter clé" label_selected="Ajouter clé" name="WLAddKey"/>
+ <button label="Supprimer clé" label_selected="Supprimer clé" name="WLDeleteKey"/>
+ <text name="WL12am">
+ Min.
+ </text>
+ <text name="WL3am">
+ 3h
+ </text>
+ <text name="WL6am">
+ 6h
+ </text>
+ <text name="WL9amHash">
+ 9h
+ </text>
+ <text name="WL12pmHash">
+ Midi
+ </text>
+ <text name="WL3pm">
+ 15h
+ </text>
+ <text name="WL6pm">
+ 18h
+ </text>
+ <text name="WL9pm">
+ 21h
+ </text>
+ <text name="WL12am2">
+ Min.
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Réglage du ciel :
+ </text>
+ <combo_box label="Préréglage" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Heure :
+ </text>
+ <time name="time" value="6h"/>
+ <check_box label="Appliquer ce nouveau cycle du jour" name="make_default_cb"/>
+ <button label="Enregistrer" name="save"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..4ec9bbb3dd
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Modifier un préréglage du ciel">
+ <string name="title_new">
+ Créer un nouveau préréglage du ciel
+ </string>
+ <string name="title_edit">
+ Modifier un préréglage du ciel
+ </string>
+ <string name="hint_new">
+ Donnez un nom à votre préréglage, ajustez les contrôles afin de le créer, puis cliquez sur Enregistrer.
+ </string>
+ <string name="hint_edit">
+ Pour modifier le préréglage du ciel, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="hint">
+ Pour modifier le préréglage, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </text>
+ <text name="label">
+ Nom du préréglage :
+ </text>
+ <text name="note">
+ Remarque : si vous changez votre préréglage de nom, un nouveau préréglage sera créé et celui existant restera tel quel.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSPHÈRE" name="Atmosphere">
+ <text name="BHText">
+ Bleu de l&apos;horizon
+ </text>
+ <text name="BDensText">
+ Quantité de brume
+ </text>
+ <text name="BDensText2">
+ Densité du bleu
+ </text>
+ <text name="HDText">
+ Densité de la brume
+ </text>
+ <text name="DensMultText">
+ Multiplicateur de densité
+ </text>
+ <text name="WLDistanceMultText">
+ Multiplicateur de distance
+ </text>
+ <text name="MaxAltText">
+ Altitude maximum
+ </text>
+ </panel>
+ <panel label="LUMIÈRE" name="Lighting">
+ <text name="SLCText">
+ Couleur soleil/lune
+ </text>
+ <text name="WLAmbientText">
+ Éclairage ambiant
+ </text>
+ <text name="SunGlowText">
+ Rayonnement du soleil
+ </text>
+ <slider label="Netteté" name="WLGlowB"/>
+ <slider label="Taille" name="WLGlowR"/>
+ <text name="WLStarText">
+ Éclat des étoiles
+ </text>
+ <text name="SceneGammaText">
+ Gamma de la scène
+ </text>
+ <text name="TODText">
+ Position soleil/lune
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ Min.
+ </text>
+ <text name="WL6am">
+ 6h
+ </text>
+ <text name="WL12pmHash">
+ Midi
+ </text>
+ <text name="WL6pm">
+ 18h
+ </text>
+ <text name="WL12am2">
+ Min.
+ </text>
+ <time name="WLDayTime" value="6h"/>
+ <text name="WLEastAngleText">
+ Angle du levant
+ </text>
+ </panel>
+ <panel label="NUAGES" name="Clouds">
+ <text name="WLCloudColorText">
+ Couleur des nuages
+ </text>
+ <text name="WLCloudColorText2">
+ Nuages - XY/Densité
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Couverture nuageuse
+ </text>
+ <text name="WLCloudScaleText">
+ Altitude des nuages
+ </text>
+ <text name="WLCloudDetailText">
+ Détails des nuages - XY/Densité
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Direction et vitesse X
+ </text>
+ <check_box label="Verrouiller" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Direction et vitesse Y
+ </text>
+ <check_box label="Verrouiller" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Appliquer ce nouveau préréglage pour le ciel" name="make_default_cb"/>
+ <button label="Enregistrer" name="save"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..81d9d34cfb
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Modifier un préréglage de l&apos;eau">
+ <string name="title_new">
+ Créer un nouveau préréglage de l&apos;eau
+ </string>
+ <string name="title_edit">
+ Modifier un préréglage de l&apos;eau
+ </string>
+ <string name="hint_new">
+ Donnez un nom à votre préréglage, ajustez les contrôles afin de le créer, puis cliquez sur Enregistrer.
+ </string>
+ <string name="hint_edit">
+ Pour modifier le préréglage de l&apos;eau, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="hint">
+ Pour modifier le préréglage, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </text>
+ <text name="label">
+ Nom du préréglage :
+ </text>
+ <text name="note">
+ Remarque : si vous changez votre préréglage de nom, un nouveau préréglage sera créé et celui existant restera tel quel.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Couleur du brouillard dans l&apos;eau
+ </text>
+ <text name="water_fog_density_label">
+ Densité du brouillard
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Brouillard sous-marin
+ </text>
+ <text name="BHText">
+ Direction grande vague
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Échelle des vaguelettes
+ </text>
+ <text name="HDText">
+ Échelle Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Décalage Fresnel
+ </text>
+ <text name="BHText2">
+ Direction petite vague
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Réfraction au-dessus
+ </text>
+ <text name="WaterScaleBelowText">
+ Réfraction en dessous
+ </text>
+ <text name="MaxAltText">
+ Multiplicateur de flou
+ </text>
+ <text name="BHText3">
+ Normal Map
+ </text>
+ </panel>
+ <check_box label="Appliquer ce nouveau préréglage pour l&apos;eau" name="make_default_cb"/>
+ <button label="Enregistrer" name="save"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
deleted file mode 100644
index dd714e85b6..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="ÉDITEUR D&apos;ENVIRONNEMENT">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text bottom="-45" name="EnvTimeText" top="29">
- Heure de la
-journée
- </text>
- <text bottom_delta="-36" name="EnvTimeText2">
- Midi
- </text>
- <text name="EnvCloudText">
- Couverture
-nuageuse
- </text>
- <text bottom="-45" name="EnvWaterColorText" top="29">
- Couleur de
-l&apos;eau
- </text>
- <color_swatch name="EnvWaterColor" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
- <text name="EnvWaterFogText">
- Brouillard
-dans l&apos;eau
- </text>
- <button bottom="-144" label="Utiliser heure du domaine" name="EnvUseEstateTimeButton" width="152"/>
- <button label="Ciel avancé" left="162" name="EnvAdvancedSkyButton" width="145"/>
- <button label="Eau avancée" left="316" name="EnvAdvancedWaterButton" width="145"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_environment_settings.xml b/indra/newview/skins/default/xui/fr/floater_environment_settings.xml
new file mode 100644
index 0000000000..9ea47a3dd7
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="PARAMÈTRES D&apos;ENVIRONNEMENT">
+ <text name="note">
+ Utilisez les options ci-dessous pour personnaliser l&apos;environnement de votre client.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Utiliser les réglages de la région" name="use_region_settings"/>
+ <radio_item label="Personnaliser mon environnement" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Remarque : les autres utilisateurs ne pourront pas voir votre configuration personnalisée.
+ </text>
+ <text name="water_settings_title">
+ Réglage de l&apos;eau
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciel / Cycle du jour
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Ciel fixe" name="my_sky_settings"/>
+ <radio_item label="Cycle du jour" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_model_preview.xml b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
index 213847bbd0..2639339be5 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inactif
</string>
+ <string name="status_parse_error">
+ Problème d&apos;analyse de fichier .dae ; reportez-vous au journal pour plus de détails.
+ </string>
<string name="status_reading_file">
Chargement...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Erreur : valeur de sommet supérieure à 65534. Opération abandonnée.
</string>
+ <string name="bad_element">
+ Erreur : élément non valide
+ </string>
<string name="high">
Élevé
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Simplification...
</string>
+ <string name="tbd">
+ TBD
+ </string>
<text name="name_label">
Nom :
</text>
@@ -74,23 +83,26 @@
Niveau de détail : Le plus faible
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
- <text name="physics cost">
- Coût des propriétés physiques : [COST]
- </text>
- <text name="upload fee">
- Frais de chargement : N/A
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ AVERTISSEMENT :
+ </text>
+ <text name="warning_message">
+ Vous ne pourrez pas effectuer le chargement final du modèle sur les serveurs Second Life. [[VURL] Découvrez comment] activer le chargement des modèles de maillage.
+ </text>
+ <text name="weights_text">
+ Téléchargement :
+Propriétés physiques :
+Serveur :
+
+Équiv. en prims :
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Valeurs par défaut" name="reset_btn" tool_tip="Rétablir les valeurs par défaut."/>
- <button label="Charger" name="ok_btn" tool_tip="Charger dans le simulateur."/>
- <button label="Annuler" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Niveau de détail" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Frais de chargement : [FEE] L$
+ </text>
+ <button label="Réinitialiser" name="reset_btn" tool_tip="Rétablir les paramètres par défaut."/>
+ <button label="Calculer les poids et les frais" name="calculate_btn" tool_tip="Calculer les poids et les frais."/>
+ <button label="Charger" name="ok_btn" tool_tip="Charger dans le simulateur."/>
+ <button label="Annuler" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
index bb64361959..f564b6f71a 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="ASSISTANT DE CHARGEMENT DE MODÈLE">
<button label="5. Chargement" name="upload_btn"/>
<button label="4. Vérification" name="review_btn"/>
- <button label="3. Propriétés physiques" name="physics2_btn"/>
<button label="3. Propriétés physiques" name="physics_btn"/>
<button label="2. Optimisation" name="optimize_btn"/>
<button label="1. Sélection du fichier" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Charger le modèle
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Choisir un fichier de modèle
</text>
</panel>
- <text name="description">
- Cet Assistant vous aidera à importer des modèles de maillage dans Second Life. Commencez par spécifier un fichier contenant le modèle à importer. Second Life prend en charge les fichiers COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nom du fichier :
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Utilisateurs expérimentés : si vous êtes habitué à utiliser des outils de création de contenu en 3D, l&apos;outil de chargement avancé est mis à votre disposition.
+ </text>
+ <button label="Passer à Avancé" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Choisir un fichier de modèle à charger
</text>
<button label="Parcourir..." label_selected="Parcourir..." name="browse"/>
+ <text name="support_collada_text">
+ Second Life prend en charge les fichiers COLLADA (.dae).
+ </text>
+ <text name="dimensions_label">
+ Dimensions (mètres) :
+ </text>
<text name="dimensions">
- X : Y : Z :
+ X Y Z
+ </text>
+ <text name="warning_label">
+ AVERTISSEMENT :
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Vous ne pourrez pas effectuer l&apos;étape de chargement finale du modèle sur les serveurs Second Life. [secondlife:///app/floater/learn_more Découvrez comment] configurer votre compte pour les chargements de modèle de maillage.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Optimisation
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Optimiser le modèle
</text>
</panel>
- <text name="description">
- Cet Assistant a optimisé votre modèle afin d&apos;améliorer les performances. Vous pouvez ajuster les résultats du processus d&apos;optimisation ci-dessous ou cliquer sur Suiv. pour continuer.
+ <text name="optimize_hint">
+ Le modèle a été optimisé en termes de performances. Vous pouvez l&apos;ajuster si vous le souhaitez.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Génération du niveau de détail
+ </text>
<text name="high_detail_text">
Générer le niveau de détail : Élevé
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Aperçu du modèle :
+ <text name="optimize_performance_text">
+ Performances
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
- <combo_item name="high">
- Élevé
+ <text name="optimize_faster_rendering_text">
+ Rendu plus rapide
+Moins de détail
+Poids en prims inférieur
+ </text>
+ <text name="optimize_accuracy_text">
+ Précision
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Rendu plus lent
+Plus de détail
+Poids en prims supérieur
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Recalcul géométrique" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Aperçu de la géométrie
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
+ <combo_item name="preview_lod_high">
+ Niveau de détail élevé
</combo_item>
- <combo_item name="medium">
- Moyen
+ <combo_item name="preview_lod_medium">
+ Niveau de détail moyen
</combo_item>
- <combo_item name="low">
- Faible
+ <combo_item name="preview_lod_low">
+ Niveau de détail faible
</combo_item>
- <combo_item name="lowest">
- Le plus faible
+ <combo_item name="preview_lod_lowest">
+ Niveau de détail le plus faible
</combo_item>
</combo_box>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
- <text name="dimensions">
- X : Y : Z :
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Propriétés physiques
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Ajuster les propriétés physiques
</text>
</panel>
- <text name="description">
- Cet Assistant créera une forme physique déterminant le mode d&apos;interaction de l&apos;objet avec les autres objets et avatars. Réglez le curseur sur le niveau de détail le plus approprié à l&apos;utilisation de l&apos;objet :
+ <text name="physics_hint">
+ Une forme va être créée pour l&apos;enveloppe externe du modèle. Ajustez le niveau de détail de la forme en fonction de l&apos;objectif souhaité pour votre modèle.
</text>
- <panel name="content">
- <text name="streaming cost">
- Coût de la ressource : [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Performances
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Propriétés physiques
+ <text name="physics_faster_rendering_text">
+ Rendu plus rapide
+Moins de détail
+Poids en prims inférieur
</text>
- </panel>
- <text name="description">
- Prévisualisez la forme physique ci-dessous, puis cliquez sur Suiv. pour continuer. Le bouton Préc. permet de modifier cette forme, le cas échéant.
- </text>
- <panel name="content">
- <text name="lod_label">
- Aperçu du modèle :
+ <text name="physics_accuracy_text">
+ Précision
+ </text>
+ <text name="physics_slower_dendering_text">
+ Rendu plus lent
+Plus de détail
+Poids en prims supérieur
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
- <combo_item name="high">
- Élevé
+ <text name="physics_example_1">
+ Exemples :
+Objets mobiles
+Objets volants
+Véhicules
+ </text>
+ <text name="physics_example_2">
+ Exemples :
+Petits objets statiques
+Objets moins détaillés
+Mobilier simple
+ </text>
+ <text name="physics_example_3">
+ Exemples :
+Objets statiques
+Objets détaillés
+Bâtiments
+ </text>
+ <button label="Recalcul physique" name="recalculate_physics_btn"/>
+ <button label="Recalcul en cours..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Aperçu des propriétés physiques
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
+ <combo_item name="preview_lod2_high">
+ Niveau de détail élevé
</combo_item>
- <combo_item name="medium">
- Moyen
+ <combo_item name="preview_lod2_medium">
+ Niveau de détail moyen
</combo_item>
- <combo_item name="low">
- Faible
+ <combo_item name="preview_lod2_low">
+ Niveau de détail faible
</combo_item>
- <combo_item name="lowest">
- Le plus faible
+ <combo_item name="preview_lod2_lowest">
+ Niveau de détail le plus faible
</combo_item>
</combo_box>
- <text name="dimensions">
- X : Y : Z :
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Vérification
</text>
</panel>
- <text name="description">
- Vérifiez les détails ci-dessous, puis cliquez sur Charger pour charger le modèle. Votre solde en L$ sera alors débité.
- </text>
- <panel name="content">
- <text name="lod_label">
- Aperçu du modèle :
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impact sur la parcelle/région : équivalent à [EQUIV] prims
</text>
- <combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
- <combo_item name="high">
- Élevé
- </combo_item>
- <combo_item name="medium">
- Moyen
- </combo_item>
- <combo_item name="low">
- Faible
- </combo_item>
- <combo_item name="lowest">
- Le plus faible
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X : Y : Z :
+ <text name="review_fee">
+ Votre compte sera débité de [FEE] L$ de frais de chargement.
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ En cliquant sur le bouton de chargement, vous confirmez que vous disposez des droits appropriés sur le contenu du modèle.
</text>
</panel>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
- <text name="physics cost">
- Coût des propriétés physiques : [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Chargement terminé !
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Chargement terminé
</text>
</panel>
- <text name="description">
- Félicitations ! Votre modèle a été chargé. Il se trouve dans le dossier Objets de votre inventaire.
+ <text name="model_uploaded_text">
+ Votre modèle a été chargé.
+ </text>
+ <text name="inventory_text">
+ Vous le trouverez dans le dossier Objets de votre inventaire.
+ </text>
+ <text name="charged_fee">
+ Votre compte a été débité de [FEE] L$.
</text>
</panel>
<button label="&lt;&lt; Préc." name="back"/>
<button label="Suiv. &gt;&gt;" name="next"/>
+ <button label="Calculer les poids et les frais &gt;&gt;" name="calculate"/>
+ <button label="Calcul en cours..." name="calculating"/>
<button label="Charger" name="upload" tool_tip="Charger dans le simulateur."/>
<button label="Annuler" name="cancel"/>
<button label="Fermer" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inactif
</string>
+ <string name="status_parse_error">
+ Problème d&apos;analyse de fichier .dae ; reportez-vous au journal pour plus de détails.
+ </string>
<string name="status_reading_file">
Chargement...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Erreur : valeur de sommet supérieure à 65534. Opération abandonnée.
</string>
+ <string name="bad_element">
+ Erreur : élément non valide
+ </string>
<string name="high">
Élevé
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_search.xml b/indra/newview/skins/default/xui/fr/floater_search.xml
index 672024466a..32800182ea 100644
--- a/indra/newview/skins/default/xui/fr/floater_search.xml
+++ b/indra/newview/skins/default/xui/fr/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="RECHERCHER">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Chargement...
</floater.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 09d77a8d34..bf687c412b 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Cliquez et faites glisser pour sélectionner le terrain.
</floater.string>
- <floater.string name="grid_screen_text">
- Écran
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] objets ( [PRIM_COUNT] prims[PE_STRING] ) sélectionnés
</floater.string>
- <floater.string name="grid_local_text">
- Local
- </floater.string>
- <floater.string name="grid_world_text">
- Monde
- </floater.string>
- <floater.string name="grid_reference_text">
- Référence
- </floater.string>
- <floater.string name="grid_attachment_text">
- Pièce jointe
+ <floater.string name="status_selectprimequiv">
+ , équiv. prims de [SEL_WEIGHT]
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
@@ -66,20 +57,12 @@
<check_box label="Modification liée" name="checkbox edit linked parts"/>
<button label="Lien" name="link_btn"/>
<button label="Annuler le lien" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Affiche le coût du rendu calculé pour cet objet">
- þ : [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Étirer les deux côtés" name="checkbox uniform label">
Étirer les deux côtés
</text>
<check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Fixer sur la grille" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Choisissez le type d&apos;axe de grille pour le positionnement de l&apos;objet">
- <combo_box.item label="Grille du monde" name="World"/>
- <combo_box.item label="Grille locale" name="Local"/>
- <combo_box.item label="Grille de référence" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Fixer" name="checkbox snap to grid"/>
<button label="Options..." label_selected="Options..." name="Options..." tool_tip="Afficher d&apos;autres options de grille"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
@@ -119,23 +102,11 @@
Force
</text>
<button label="Appliquer" label_selected="Appliquer" left="176" name="button apply to selection" tool_tip="Modifier le terrain sélectionné"/>
- <text name="obj_count">
- Objets : [COUNT]
- </text>
- <text name="prim_count">
- Prims : [COUNT]
- </text>
- <text name="linked_set_count">
- Groupes liés : [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Coût des groupes liés actuellement sélectionnés en tant que [prims],[physics complexity].">
- Coût : [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Objets : [COUNT]
+ <text name="selection_empty">
+ Aucune sélection effectuée.
</text>
- <text name="object_cost" tool_tip="Coût des objets actuellement sélectionnés en tant que [prims] / [physics complexity].">
- Coût : [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Poids physique [PHYS_WEIGHT], Coût de rendu [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs">
<panel label="Général" name="General">
@@ -353,7 +324,6 @@
<combo_box.item label="Tore" name="Torus"/>
<combo_box.item label="Plan" name="Plane"/>
<combo_box.item label="Cylindre" name="Cylinder"/>
- <combo_box.item label="Maillage" name="Mesh"/>
</combo_box>
</panel>
<panel label="Attributs" name="Features">
@@ -405,7 +375,7 @@
</combo_box>
<spinner label="Gravité" name="Physics Gravity"/>
<spinner label="Friction" name="Physics Friction"/>
- <spinner label="Densité" name="Physics Density"/>
+ <spinner label="Densité en 100 kg/m^3" name="Physics Density"/>
<spinner label="Restitution" name="Physics Restitution"/>
</panel>
<panel label="Texture" name="Texture">
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
index 56cb654440..92ee6ecf24 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Nouveau !)
</string>
+ <string name="effect_Arena">
+ Stade
+ </string>
+ <string name="effect_Beast">
+ Brute
+ </string>
+ <string name="effect_Buff">
+ Nasal
+ </string>
+ <string name="effect_Buzz">
+ Friture
+ </string>
+ <string name="effect_Camille">
+ Camille
+ </string>
+ <string name="effect_Creepy">
+ Effrayant
+ </string>
+ <string name="effect_CreepyBot">
+ BotEffrayant
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ BotGrave
+ </string>
+ <string name="effect_Demon">
+ Démon
+ </string>
+ <string name="effect_Flirty">
+ Flirt
+ </string>
+ <string name="effect_Foxy">
+ Séduction
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Halloween_2010_Bonus
+ </string>
+ <string name="effect_Helium">
+ Hélium
+ </string>
+ <string name="effect_Husky">
+ Rauque
+ </string>
+ <string name="effect_Intercom">
+ Interphone
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Cauchemar
+ </string>
+ <string name="effect_PopBot">
+ BotPop
+ </string>
+ <string name="effect_Rachel">
+ Rachel
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Robot
+ </string>
+ <string name="effect_Roxanne">
+ Roxanne
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samantha
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Petite voix
+ </string>
+ <string name="effect_Sneaky">
+ Sournois
+ </string>
+ <string name="effect_Stallion">
+ Étalon
+ </string>
+ <string name="effect_Sultry">
+ Sensuel
+ </string>
+ <string name="effect_Thunder">
+ Tonnerre
+ </string>
+ <string name="effect_Vixen">
+ Mégère
+ </string>
+ <string name="effect_WhinyBot">
+ BotPleurnichard
+ </string>
<text name="preview_text">
Aperçu
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml
deleted file mode 100644
index 7d1e3cd65c..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_water.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ÉDITEUR D&apos;EAU AVANCÉ">
- <floater.string name="WLDefaultWaterNames">
- Valeur par défaut:Transparente:Bassin:Trouble:Première plaie:SERPENT !!!:Valdez
- </floater.string>
- <text name="KeyFramePresetsText" width="120">
- Préréglages :
- </text>
- <button label="Nouveau" label_selected="Nouveau" name="WaterNewPreset"/>
- <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WaterSavePreset" width="75"/>
- <button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="PARAMÈTRES" name="Settings">
- <text name="BHText">
- Couleur du brouillard dans l&apos;eau
- </text>
- <color_swatch left="75" name="WaterFogColor" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
- <text name="WaterFogDensText">
- Densité du brouillard
- </text>
- <text name="WaterUnderWaterFogModText">
- Brouillard sous-marin
- </text>
- <text name="BDensText">
- Échelle des vaguelettes
- </text>
- <slider label="1" name="WaterNormalScaleX"/>
- <slider label="2" name="WaterNormalScaleY"/>
- <slider label="3" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Échelle Fresnel
- </text>
- <text name="FresnelOffsetText">
- Décalage Fresnel
- </text>
- <text name="DensMultText">
- Réfraction au-dessus
- </text>
- <text name="WaterScaleBelowText">
- Réfraction en dessous
- </text>
- <text name="MaxAltText">
- Multiplicateur de flou
- </text>
- </panel>
- <panel label="IMAGE" name="Waves">
- <text name="BHText">
- Direction grande vague
- </text>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Direction petite vague
- </text>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Normal Map
- </text>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
deleted file mode 100644
index 657e5f5051..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706">
- <text name="KeyFramePresetsText">
- Préréglages :
- </text>
- <button label="Nouveau" label_selected="Nouveau" name="WLNewPreset"/>
- <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WLSavePreset" width="75"/>
- <button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WLDeletePreset"/>
- <button label="Éditeur du cycle du jour" label_selected="Éditeur du cycle du jour" left_delta="95" left_pad="20" name="WLDayCycleMenuButton" width="150"/>
- <tab_container name="WindLight Tabs" width="706">
- <panel label="ATMOSPHÈRE" name="Atmosphere">
- <text name="BHText">
- Bleu de l&apos;horizon
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- V
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Quantité de brume
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Densité du bleu
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- V
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densité de la brume
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Multiplicateur de densité
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Multiplicateur de distance
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitude maximum
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="LUMIÈRE" name="Lighting">
- <text name="SLCText">
- Couleur soleil/lune
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Position soleil/lune
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Éclairage ambiant
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- V
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Angle du levant
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Rayonnement du soleil
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Netteté " name="WLGlowB"/>
- <slider label="Taille " name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma de la scène
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Éclat des étoiles
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUAGES" name="Clouds">
- <text name="WLCloudColorText">
- Couleur des nuages
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Nuages XY/densité
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Couverture nuageuse
- </text>
- <button label="?" left="407" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Altitude des nuages
- </text>
- <button label="?" left="407" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Détails nuages (XY/densité)
- </text>
- <button bottom_delta="-2" label="?" left="407" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Direction et vitesse X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Verrouiller" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Direction et vitesse Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Verrouiller" name="WLCloudLockY"/>
- <check_box label="Nuages classiques" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-Minuit:A-Midi:A-3h:A-15h:A-16h30:A-6h:A-18h:A-9h:A-21h:Barcelone:Blizzard:Bleu mi-journée:Après-midi sur la côte:Coucher de soleil (côte):Valeur par défaut:Coucher de soleil (désert):Belle journée:Gros nuages floconneux:Brumeux:Funky Funky:Funky Funky Funky:Gelatto:Fantôme:Vérités incohérentes:Mi-journée 1:Mi-journée 2:Mi-journée 3:Mi-journée 4:Nuit:Pirate:Mauve:Rêve de navigateur:Sensualité pure
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml
index 400c77e51a..6b96a16e75 100644
--- a/indra/newview/skins/default/xui/fr/menu_login.xml
+++ b/indra/newview/skins/default/xui/fr/menu_login.xml
@@ -18,7 +18,7 @@
<menu_item_call label="Afficher les conditions d&apos;utilisation" name="TOS"/>
<menu_item_call label="Afficher le message critique" name="Critical"/>
<menu_item_call label="Test du navigateur de médias" name="Web Browser Test"/>
- <menu_item_call label="Test de la fenêtre flottante du contenu Web" name="Web Content Floater Test"/>
+ <menu_item_call label="Test de débogage de la fenêtre flottante du contenu Web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Afficher le sélecteur de grille" name="Show Grid Picker"/>
<menu_item_call label="Afficher la console des notifications" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
index 45f97e062e..0aad174fbd 100644
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
<menu_item_check label="Trier par nom" name="sort_name"/>
<menu_item_check label="Trier par distance" name="sort_distance"/>
<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+ <menu_item_check label="Afficher la carte" name="view_map"/>
<menu_item_call label="Afficher les résidents et les objets interdits" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index d614cfe00c..46adc79a00 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Mes groupes" name="My Groups"/>
<menu_item_check label="Chat près de moi" name="Nearby Chat"/>
<menu_item_call label="Personnes près de moi" name="Active Speakers"/>
+ <menu_item_check label="Chat vocal près de vous" name="Nearby Voice"/>
</menu>
<menu label="Monde" name="World">
<menu_item_check label="Mini-carte" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Milieu de journée" name="Noon"/>
<menu_item_call label="Coucher de soleil" name="Sunset"/>
<menu_item_call label="Minuit" name="Midnight"/>
- <menu_item_call label="Heure du domaine" name="Revert to Region Default"/>
- <menu_item_call label="Éditeur d&apos;environnement" name="Environment Editor"/>
+ </menu>
+ <menu label="Éditeur d&apos;environnement" name="Enviroment Editor">
+ <menu_item_call label="Paramètres d&apos;environnement..." name="Enviroment Settings"/>
+ <menu label="Préréglages de l&apos;eau" name="Water Presets">
+ <menu_item_call label="Nouveau préréglage..." name="new_water_preset"/>
+ <menu_item_call label="Modifier un préréglage..." name="edit_water_preset"/>
+ <menu_item_call label="Supprimer un préréglage..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Préréglages du ciel" name="Sky Presets">
+ <menu_item_call label="Nouveau préréglage..." name="new_sky_preset"/>
+ <menu_item_call label="Modifier un préréglage..." name="edit_sky_preset"/>
+ <menu_item_call label="Supprimer un préréglage..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Préréglages du jour" name="Day Presets">
+ <menu_item_call label="Nouveau préréglage..." name="new_day_preset"/>
+ <menu_item_call label="Modifier un préréglage..." name="edit_day_preset"/>
+ <menu_item_call label="Supprimer un préréglage..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Construire" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Désactiver les contraintes de la caméra" name="Disable Camera Distance"/>
<menu_item_check label="Photo haute résolution" name="HighResSnapshot"/>
<menu_item_check label="Photos discrètes sur disque" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Compresser les photos sur disque" name="CompressSnapshotsToDisk"/>
<menu label="Outils de performance" name="Performance Tools">
<menu_item_call label="Mesure du lag" name="Lag Meter"/>
<menu_item_check label="Barre de statistiques" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
index 0ca9fe1879..c3d9d908b0 100644
--- a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Modifier la tenue" name="edit"/>
<menu_item_call label="Enlever" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copier la liste de la tenue dans le presse-papiers" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 6bfab25087..ef95a1a389 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1550,6 +1550,11 @@ Veuillez réessayer ultérieurement.
<button name="Cancel" text="Annuler"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Vous avez essayé d&apos;effectuer [OFFERS] offres de téléportation,
+or ce nombre dépasse la limite autorisée fixée à [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Exiger du résident qu&apos;il vienne vous rejoindre ?
<form name="form">
@@ -1971,6 +1976,10 @@ Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
Êtes-vous certain de vouloir supprimer l&apos;historique de vos visites et recherches ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Voulez-vous vraiment vider le cache de votre client ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Êtes-vous certain de vouloir supprimer vos cookies ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
@@ -1996,48 +2005,30 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
Voulez-vous écraser l&apos;option précédemment enregistrée ?
<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
</notification>
- <notification name="WLDeletePresetAlert">
- Voulez-vous supprimer [SKY] ?
- <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
- </notification>
<notification name="WLNoEditDefault">
Vous ne pouvez pas modifier ou supprimer un préréglage par défaut.
</notification>
<notification name="WLMissingSky">
Une dossier semble manquer au Cycle du jour : [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
- <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ <notification name="WLRegionApplyFail">
+ Impossible d&apos;appliquer les réglages à la région. Le problème est parfois résolu en quittant la région puis en y revenant. Motif fourni : [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Nommez le nouveau ciel.
- <form name="form">
- <input name="message">
- Nouveau préréglage
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annuler"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- Ce préréglage existe déjà !
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Impossible de supprimer la dernière clé de ce cycle du jour car ce dernier ne peut pas être vide. Modifiez la dernière clé restante au lieu d&apos;essayer de la supprimer puis d&apos;en créer une nouvelle.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Nommez ce nouveau préréglage d&apos;eau.
- <form name="form">
- <input name="message">
- Nouveau préréglage
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annuler"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Impossible d&apos;ajouter plus d&apos;images-clés à ce cycle du jour. Un maximum de [MAX] images-clés peut être associé aux cycles du jour de type [SCOPE].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- Ce préréglage existe déjà !
+ <notification name="EnvUpdateRate">
+ Vous ne pouvez mettre à jour les paramètres d&apos;environnement d&apos;une région que toutes les [WAIT] secondes. Veuillez patienter pendant au moins ce délai avant de réessayer.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Vous ne pouvez pas modifier ou supprimer un préréglage par défaut.
+ <notification name="PPSaveEffectAlert">
+ Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
@@ -2066,13 +2057,14 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
<usetemplate ignoretext="Porter automatiquement tout en modifiant mon apparence" name="okcancelignore" notext="Non" yestext="Oui"/>
</notification>
<notification name="NotAgeVerified">
- Pour pouvoir pénétrer dans cette zone, vous devez avoir procédé à la vérification de votre âge. Souhaitez-vous aller sur [SECOND_LIFE] 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 Second Life. Visitez la page de vérification de l&apos;âge afin de confirmer que vous avez plus de 18 ans.
+Cette opération lancera votre navigateur Web.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=fr
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Non" yestext="Oui"/>
+ <usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Annuler" yestext="Accéder à la page de vérification de l&apos;âge"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement. Souhaitez-vous aller sur [SECOND_LIFE] et enregistrer vos informations de paiement ?
@@ -2329,6 +2321,9 @@ Vous ne pouvez pas voler ici.
<notification name="NoBuild">
La construction est interdite dans cette zone. Vous ne pouvez pas construite ou rezzer d&apos;objets ici.
</notification>
+ <notification name="SeeAvatars">
+ Cette parcelle masque les avatars et le chat écrit des autres parcelles. Vous ne pouvez pas voir les résidents qui se trouvent en dehors, et ceux qui se trouvent en dehors ne peuvent pas vous voir. Le chat écrit habituel sur le canal 0 est également bloqué.
+ </notification>
<notification name="ScriptsStopped">
Un administrateur a temporairement stoppé les scripts dans cette région.
</notification>
@@ -2423,7 +2418,7 @@ Veuillez réessayer dans quelques minutes.
</notification>
<notification name="ObjectGiveItem">
Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous a donné un objet de type [OBJECTTYPE] :
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Garder"/>
<button name="Discard" text="Jeter"/>
@@ -2756,7 +2751,15 @@ Le bouton sera affiché quand il y aura suffisamment de place.
Sélectionnez les résidents avec lesquels partager l&apos;élément.
</notification>
<notification name="MeshUploadError">
- Échec de chargement de [LABEL] : [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ Échec de chargement de [LABEL] : [MESSAGE] [IDENTIFIER]
+
+Voir le fichier journal pour plus de détails.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Erreur lors de la demande des autorisations de chargement de maillage.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Impossible d&apos;obtenir la capacité de région : [CAPABILITY].
</notification>
<notification name="ShareItemsConfirmation">
Voulez-vous vraiment partager les articles suivants :
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
index 2364d9bbb2..247e18da82 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Enregistrer" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Annuler" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_list.xml b/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
index ab352deec4..416353e1d4 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/all/[SEARCH_TERM] Rechercher]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Aucune tenue n&apos;est actuellement en votre possession. Essayez [secondlife:///app/search/all Rechercher]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
+ <menu_button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
<button name="trash_btn" tool_tip="Supprimer la tenue sélectionnée"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index 166f04b3e4..f035853efc 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -66,17 +66,17 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Appel" name="call_btn" tool_tip="Appeler ce résident"/>
+ <layout_panel name="call_btn_lp">
+ <button label="Appel" name="call_btn" tool_tip="Appeler ce résident."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
+ <layout_panel name="share_btn_lp">
+ <button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation."/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
index 3c2c1b9d37..30be838896 100644
--- a/indra/newview/skins/default/xui/fr/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
@@ -68,6 +68,8 @@
<text name="scripts_value" value="Activé"/>
<text name="damage_label" value="Dégâts :"/>
<text name="damage_value" value="Désactivé"/>
+ <text name="see_avatars_label" value="Voir les avatars :"/>
+ <text name="see_avatars_value" value="Désactivé"/>
<button label="À propos du terrain" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index e252c224f8..5ec48c44c7 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -24,9 +24,9 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
- <button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit"/>
+ <button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit."/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_close_ls3">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 3468afbafe..3f3d0f51f4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache :
+ </text>
+ <spinner label="Taille du cache (64 - 9984 Mo)" name="cachesizespinner"/>
+ <text name="text_box5">
+ Mo
+ </text>
+ <button label="Vider le cache" label_selected="Vider le cache" name="clear_cache"/>
+ <text name="Cache location">
+ Emplacement du cache :
+ </text>
+ <button label="Parcourir" label_selected="Parcourir" name="set_cache"/>
+ <button label="Par défaut" label_selected="Par défaut" name="default_cache_location"/>
<text name="UI Size:">
Taille d&apos;interface :
</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index a404aae483..deaec2e14f 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Activé" name="enable_voice_check"/>
<check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cochez pour autoriser la lecture automatique du média" value="true"/>
<check_box label="Lecture du média aux autres avatars" name="media_show_on_others_btn" tool_tip="Décochez pour masquer le média aux autres avatars près de vous" value="true"/>
+ <check_box label="Lire les sons des gestes" name="gesture_audio_play_btn" tool_tip="Cochez cette case pour entendre les sons associés aux gestes." value="true"/>
<text name="voice_chat_settings">
Paramètres du chat vocal
</text>
@@ -35,28 +36,5 @@
<button label="Définir la touche" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Réinitialiser sur le bouton central de la souris"/>
<button label="Périphériques d&apos;entrée/de sortie" name="device_settings_btn"/>
- <panel label="Paramètres du matériel" name="device_settings_panel">
- <panel.string name="default_text">
- Défaut
- </panel.string>
- <panel.string name="default system device">
- Périphérique système par défaut
- </panel.string>
- <panel.string name="no device">
- Aucun périphérique
- </panel.string>
- <text name="Input">
- Entrée
- </text>
- <text name="My volume label">
- Mon volume :
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume avec le curseur"/>
- <text name="wait_text">
- Veuillez patienter
- </text>
- <text name="Output">
- Sortie
- </text>
- </panel>
+ <panel label="Paramètres du matériel" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_environment.xml b/indra/newview/skins/default/xui/fr/panel_region_environment.xml
new file mode 100644
index 0000000000..d18503db86
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Environnement" name="panel_env_info">
+ <text name="water_settings_title">
+ Sélectionnez les réglages d&apos;eau et de ciel/cycle du jour que vous souhaitez afficher pour tous les résidents visitant votre région. En savoir plus
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Utiliser les réglages par défaut de Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Utiliser les réglages suivants" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Réglage de l&apos;eau
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciel / Cycle du jour
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Ciel fixe" name="my_sky_settings"/>
+ <radio_item label="Cycle du jour" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Appliquer" name="apply_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
index 4d7652eb6f..d7e321d06d 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
@@ -7,21 +7,56 @@
(inconnue)
</text>
<spinner label="Niveau de l&apos;eau" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Limite d&apos;élévation du &#10;terrain" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Limite d&apos;abaissement &#10;du terrain" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Utiliser le soleil du domaine" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Soleil fixe" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Phase" name="sun_hour_slider"/>
- <button label="Appliquer" name="apply_btn"/>
+ <spinner label="Limite d&apos;élévation du
+terrain" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Limite d&apos;abaissement
+du terrain" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Textures du terrain (fichiers .tga 512 x 512, 24 bit requis)
+ </text>
+ <text name="height_text_lbl">
+ 1 (Bas)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Haut)
+ </text>
+ <text name="height_text_lbl5">
+ Limites d&apos;élévation de texture
+ </text>
+ <text name="height_text_lbl10">
+ Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
+ </text>
+ <text name="height_text_lbl11">
+ En mètres, la valeur BAS correspond à la hauteur MAXIMUM de la texture n°1 et la valeur HAUT à la hauteur MINIMUM de la texture n°4.
+ </text>
+ <text name="height_text_lbl6">
+ Nord-ouest
+ </text>
+ <text name="height_text_lbl7">
+ Nord-est
+ </text>
+ <spinner label="Bas" name="height_start_spin_1"/>
+ <spinner label="Bas" name="height_start_spin_3"/>
+ <spinner label="Haut" name="height_range_spin_1"/>
+ <spinner label="Haut" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Sud-ouest
+ </text>
+ <text name="height_text_lbl9">
+ Sud-est
+ </text>
+ <spinner label="Bas" name="height_start_spin_0"/>
+ <spinner label="Bas" name="height_start_spin_2"/>
+ <spinner label="Haut" name="height_range_spin_0"/>
+ <spinner label="Haut" name="height_range_spin_2"/>
<button label="Télécharger le terrain au format RAW..." name="download_raw_btn" tool_tip="Réservé aux propriétaires de domaine, pas aux gérants" width="230"/>
- <button label="?" name="download_raw_help" left="246" />
<button label="Charger le terrain au format RAW..." name="upload_raw_btn" tool_tip="Réservé aux propriétaires de domaine, pas aux gérants" width="230"/>
- <button label="?" name="upload_raw_help" left="246" />
<button label="Figer le terrain" name="bake_terrain_btn" tool_tip="Définir le terrain actuel comme point central pour les limites d&apos;élévation/abaissement"/>
- <button label="?" name="bake_terrain_help"/>
+ <button label="Appliquer" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
index a9802312dc..460b269f7c 100644
--- a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Valeur par défaut
</panel.string>
+ <string name="name_no_device">
+ Aucun périphérique
+ </string>
+ <string name="name_default_system_device">
+ Périphérique système par défaut
+ </string>
<text name="Input">
Entrée
</text>
+ <text name="Output">
+ Sortie
+ </text>
<text name="My volume label">
Mon volume :
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Veuillez patienter
</text>
- <text name="Output">
- Sortie
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index 3c4d2626c1..83543e3d0b 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Choses" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Articles reçus ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Articles reçus
+ </string>
+ <button label="Articles reçus" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nouv.
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Ici seront livrés les achats effectués sur la Place du marché.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Boîte d&apos;envoi vendeur" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Vers ma vitrine de la Place du marché"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Configurez votre compte de vendeur de façon à pouvoir utiliser cette fonctionnalité.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 3ec85551da..e6d407f727 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -34,6 +34,9 @@
<string name="StartupInitializingVFS">
Initialisation VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Échec d&apos;initialisation des graphiques. Veuillez mettre votre pilote graphique à jour.
+ </string>
<string name="ProgressRestoring">
Restauration...
</string>
@@ -91,6 +94,12 @@
<string name="LoginQuicktimeOK">
Initialisation de Quicktime réussie.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Capacités de la région demandées...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Capacités de la région demandées... Tentative n° [NUMBER].
+ </string>
<string name="LoginWaitingForRegionHandshake">
Liaison avec la région en cours de création...
</string>
@@ -1192,6 +1201,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="InventoryNoTexture">
Vous n&apos;avez pas de copie de cette texture dans votre inventaire
</string>
+ <string name="InventoryInboxNoItems">
+ Ici seront livrés les articles achetés sur la Place du marché.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Faites glisser des articles ici en vue de les publier sur votre vitrine de la Place du marché.
+ </string>
<string name="no_transfer" value=" (pas de transfert)"/>
<string name="no_modify" value=" (pas de modification)"/>
<string name="no_copy" value=" (pas de copie)"/>
@@ -1238,9 +1253,6 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="InvFolder My Inventory">
Mon inventaire
</string>
- <string name="InvFolder My Favorites">
- Mes Favoris
- </string>
<string name="InvFolder Library">
Bibliothèque
</string>
@@ -1299,10 +1311,10 @@ Veuillez réessayer de vous connecter dans une minute.
Gestes
</string>
<string name="InvFolder Favorite">
- Favoris
+ Mes Favoris
</string>
<string name="InvFolder favorite">
- Favoris
+ Mes Favoris
</string>
<string name="InvFolder Current Outfit">
Tenue actuelle
@@ -1325,6 +1337,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="InvFolder All">
Tout
</string>
+ <string name="no_attachments">
+ Aucun élément attaché porté
+ </string>
<string name="Buy">
Acheter
</string>
@@ -1634,6 +1649,9 @@ Veuillez réessayer de vous connecter dans une minute.
</string>
<string name="SummaryForTheWeek" value="Récapitulatif de la semaine, début le "/>
<string name="NextStipendDay" value=". Prochaine prime le "/>
+ <string name="GroupPlanningDate">
+ [day,datetime,utc]/[mthnum,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value=" Groupe Part individuelle"/>
<string name="GroupColumn" value="Groupe"/>
<string name="Balance">
@@ -1660,6 +1678,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="IMTeen">
teen
</string>
+ <string name="Anyone">
+ n&apos;importe qui
+ </string>
<string name="RegionInfoError">
erreur
</string>
@@ -1882,6 +1903,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="Public">
Public
</string>
+ <string name="LocalSettings">
+ Réglages locaux
+ </string>
+ <string name="RegionSettings">
+ Réglages de la région
+ </string>
<string name="ClassifiedClicksTxt">
Clics : [TELEPORT] téléportation, [MAP] carte, [PROFILE] profil
</string>
@@ -1954,6 +1981,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="GroupMoneyDebits">
Débits
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [day,datetime,utc] [mth,datetime,utc] [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Contenus
</string>
@@ -3727,6 +3757,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Région de type Général
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatars visibles et chat autorisé en dehors de cette parcelle
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] - Mise à jour
</string>
@@ -4152,6 +4185,87 @@ de l&apos;infraction signalée
<string name="Female - Wow">
Femme - Ouah !
</string>
+ <string name="/bow">
+ /s&apos;incliner
+ </string>
+ <string name="/clap">
+ /applaudir
+ </string>
+ <string name="/count">
+ /compter
+ </string>
+ <string name="/extinguish">
+ /éteindre
+ </string>
+ <string name="/kmb">
+ /vatefairevoir
+ </string>
+ <string name="/muscle">
+ /montrersesmuscles
+ </string>
+ <string name="/no">
+ /non
+ </string>
+ <string name="/no!">
+ /non !
+ </string>
+ <string name="/paper">
+ /papier
+ </string>
+ <string name="/pointme">
+ /memontrerdudoigt
+ </string>
+ <string name="/pointyou">
+ /montrerl&apos;autredudoigt
+ </string>
+ <string name="/rock">
+ /pierre
+ </string>
+ <string name="/scissor">
+ /ciseaux
+ </string>
+ <string name="/smoke">
+ /fumer
+ </string>
+ <string name="/stretch">
+ /s&apos;étirer
+ </string>
+ <string name="/whistle">
+ /siffler
+ </string>
+ <string name="/yes">
+ /oui
+ </string>
+ <string name="/yes!">
+ /oui !
+ </string>
+ <string name="afk">
+ absent
+ </string>
+ <string name="dance1">
+ danse1
+ </string>
+ <string name="dance2">
+ danse2
+ </string>
+ <string name="dance3">
+ danse3
+ </string>
+ <string name="dance4">
+ danse4
+ </string>
+ <string name="dance5">
+ danse5
+ </string>
+ <string name="dance6">
+ danse6
+ </string>
+ <string name="dance7">
+ danse7
+ </string>
+ <string name="dance8">
+ danse8
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index a96433d7aa..cf0f8f2f6f 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -136,12 +136,12 @@ Vai al menu Mondo &gt; Informazioni sul terreno oppure seleziona un altro appezz
0
</text>
<button label="Acquista il terreno..." label_selected="Acquista il terreno..." left="130" name="Buy Land..." width="125"/>
+ <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di proprietà, con contenuto impostato, e non già messa all&apos;asta."/>
<button label="Informazioni script" name="Scripts..."/>
<button label="Acquista per il gruppo" name="Buy For Group..."/>
<button label="Compra Pass..." label_selected="Compra Pass..." left="130" name="Buy Pass..." tool_tip="Un pass ti da un accesso temporaneo in questo territorio." width="125"/>
<button label="Abbandona la terra" name="Abandon Land..."/>
<button label="Reclama la terra" name="Reclaim Land..."/>
- <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di proprietà, con contenuto impostato, e non già messa all&apos;asta."/>
</panel>
<panel label="REGOLAMENTO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -313,6 +313,9 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
<panel.string name="push_restrict_region_text">
Nessuna spinta (Impostazione regionale)
</panel.string>
+ <panel.string name="see_avs_text">
+ Vedi i residenti in questo lotto e chatta con loro
+ </panel.string>
<text name="allow_label">
Permetti ad altri residenti di:
</text>
@@ -375,6 +378,10 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Fotografia:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clicca per scegliere una immagine"/>
+ <text name="allow_label5">
+ Permetti ai residenti in altri lotti di:
+ </text>
+ <check_box label="Vedi avatar" name="SeeAvatarsCheck" tool_tip="Consente ai residenti in altri lotti di vedere i residenti in questo lotto e chattare con loro, e ti consente di vederli e chattare con loro."/>
<text name="landing_point">
Punto di atterraggio: [LANDING]
</text>
@@ -434,6 +441,11 @@ Media:
Audio:
</text>
<check_box label="Limita l&apos;audio per oggetti e gesture a questo lotto" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Suoni avatar:
+ </text>
+ <check_box label="Tutti" name="all av sound check"/>
+ <check_box label="Gruppo" name="group av sound check"/>
<text name="Voice settings:">
Voce:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
index 326aab1a31..080e396642 100644
--- a/indra/newview/skins/default/xui/it/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPZIONI DELLA GRIGLIA">
- <spinner label="Unità griglia (metri)" label_width="192" name="GridResolution" width="250"/>
- <spinner label="Estensione della griglia (metri)" label_width="192" name="GridDrawSize" width="250"/>
+ <floater.string name="grid_screen_text">
+ Schermo
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Locale
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mondo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Riferimento
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Allegato
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacità della griglia">
+ Modalità
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l&apos;oggetto">
+ <combo_box.item label="Griglia del mondo" name="World"/>
+ <combo_box.item label="Griglia locale" name="Local"/>
+ <combo_box.item label="Griglia di riferimento" name="Reference"/>
+ </combo_box>
+ <spinner label="Unità (metri)" label_width="192" name="GridResolution" width="250"/>
+ <spinner label="Ampiezza (metri)" label_width="192" name="GridDrawSize" width="250"/>
<check_box label="Usa sottounità" name="GridSubUnit"/>
<check_box label="Guarda le sezioni trasversali" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacità della griglia">
diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
deleted file mode 100644
index 98c385d29f..0000000000
--- a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITOR DELLE CICLO GIORNO/NOTTE">
- <tab_container name="Day Cycle Tabs">
- <panel label="Ciclo giorno/notte" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 0:00
- </text>
- <text name="WL3am">
- 3:00
- </text>
- <text name="WL6am">
- 6:00
- </text>
- <text name="WL9amHash">
- 9:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 24:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Aggiungi voce" label_selected="Aggiungi voce" name="WLAddKey"/>
- <button label_selected="Cancella voce" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Impostazioni del fotogramma chiave:
- </text>
- <text name="WLCurKeyTimeText">
- Tempo:
- </text>
- <spinner label="Ora" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Impostazione chiave:
- </text>
- <combo_box label="Programma:" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Raggruppa:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Lunghezza del ciclo:
- </text>
- <spinner label="Ore" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sec" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Anteprima:
- </text>
- <button label="Avvia" label_selected="Avvia" name="WLAnimSky"/>
- <button label="Arresta!" label_selected="Arresta" name="WLStopAnimSky"/>
- <button label="Usa l&apos;ora della proprietà" label_selected="Vai all&apos;ora della proprietà" name="WLUseLindenTime"/>
- <button label="Salva il test del giorno" label_selected="Salva il test del giorno" name="WLSaveDayCycle"/>
- <button label="Carica il test del giorno" label_selected="Carica il test del giorno" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..71071825af
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="CANCELLA PREDEFINITO AMB">
+ <string name="title_water">
+ Cancella valore predefinito acqua
+ </string>
+ <string name="title_sky">
+ Cancella valore predefinito cielo
+ </string>
+ <string name="title_day_cycle">
+ Cancella ciclo giornata
+ </string>
+ <string name="label_water">
+ Valori predefiniti:
+ </string>
+ <string name="label_sky">
+ Valori predefiniti:
+ </string>
+ <string name="label_day_cycle">
+ Ciclo giornata:
+ </string>
+ <string name="msg_confirm_deletion">
+ Sei sicuro di volere eliminare il valore predefinito selezionato?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Impossibile rimuovere un valore predefinito che viene utilizzato in uno o più cicli di giornata.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="label">
+ Valori predefiniti:
+ </text>
+ <button label="Elimina" name="delete"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..c922b2e4f7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Modifica ciclo giornata">
+ <string name="title_new">
+ Crea un nuovo ciclo giornata
+ </string>
+ <string name="title_edit">
+ Modifica ciclo giornata
+ </string>
+ <string name="hint_new">
+ Dai un nome al ciclo della giornata, modifica i controlli per crearlo e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="hint_edit">
+ Per modificare il ciclo della giornata, modifica i controlli seguenti e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="label">
+ Nome predefinito:
+ </text>
+ <text name="note">
+ Nota: se cambi il nome del valore predefinito, in realtà ne crei uno nuovo e quello esistente non viene cambiato.
+ </text>
+ <text name="hint_item1">
+ - Fai clic su una scheda per modificare gli orari e le impostazioni cielo specifiche.
+ </text>
+ <text name="hint_item2">
+ - Fai clic e trascina le schede per impostare i tempi di transizione.
+ </text>
+ <text name="hint_item3">
+ - Usa lo scrubber per visualizzare in anteprima il ciclo giornata.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Aggiungi chiave" label_selected="Aggiungi chiave" name="WLAddKey"/>
+ <button label="Tasto cancella" label_selected="Tasto cancella" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 00:00
+ </text>
+ <text name="WL3am">
+ 03:00:00
+ </text>
+ <text name="WL6am">
+ 06:00:00
+ </text>
+ <text name="WL9amHash">
+ 09:00:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00:00
+ </text>
+ <text name="WL3pm">
+ 15:00:00
+ </text>
+ <text name="WL6pm">
+ 18:00:00
+ </text>
+ <text name="WL9pm">
+ 21:00:00
+ </text>
+ <text name="WL12am2">
+ 00:00
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Impostazioni cielo:
+ </text>
+ <combo_box label="Valori predefiniti" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Giorno/ora:
+ </text>
+ <time name="time" value="06:00:00"/>
+ <check_box label="Usa come nuovo ciclo giornata" name="make_default_cb"/>
+ <button label="Salva" name="save"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..571027fd29
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Modifica predefiniti cielo">
+ <string name="title_new">
+ Crea un nuovo valore predefinito per il cielo
+ </string>
+ <string name="title_edit">
+ Modifica predefiniti cielo
+ </string>
+ <string name="hint_new">
+ Dai un nome al valore predefinito, modifica i controlli per crearlo e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="hint_edit">
+ Per modificare il valore predefinito per il cielo, modifica i controlli e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="hint">
+ Per modificare i valori predefiniti, modifica i controlli e quindi fai clic su &quot;Salva&quot;
+ </text>
+ <text name="label">
+ Nome predefinito:
+ </text>
+ <text name="note">
+ Nota: se cambi il nome del valore predefinito, in realtà ne crei uno nuovo e quello esistente non viene cambiato.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSFERA" name="Atmosphere">
+ <text name="BHText">
+ Orizzonte blu
+ </text>
+ <text name="BDensText">
+ Orizzonte foschia
+ </text>
+ <text name="BDensText2">
+ Densità blu
+ </text>
+ <text name="HDText">
+ Densità foschia
+ </text>
+ <text name="DensMultText">
+ Fattore moltiplicativo densità
+ </text>
+ <text name="WLDistanceMultText">
+ Fattore moltiplicativo distanza
+ </text>
+ <text name="MaxAltText">
+ Altitudine massima
+ </text>
+ </panel>
+ <panel label="ILLUMINAZIONE" name="Lighting">
+ <text name="SLCText">
+ Colore sole/luna
+ </text>
+ <text name="WLAmbientText">
+ Ambiente
+ </text>
+ <text name="SunGlowText">
+ Bagliore sole
+ </text>
+ <slider label="Centro focale" name="WLGlowB"/>
+ <slider label="Dimensioni" name="WLGlowR"/>
+ <text name="WLStarText">
+ Luminosità cielo
+ </text>
+ <text name="SceneGammaText">
+ Gamma scena
+ </text>
+ <text name="TODText">
+ Posizione sole/luna
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 00:00
+ </text>
+ <text name="WL6am">
+ 06:00:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00:00
+ </text>
+ <text name="WL6pm">
+ 18:00:00
+ </text>
+ <text name="WL12am2">
+ 00:00
+ </text>
+ <time name="WLDayTime" value="06:00:00"/>
+ <text name="WLEastAngleText">
+ Angolo est
+ </text>
+ </panel>
+ <panel label="NUVOLE" name="Clouds">
+ <text name="WLCloudColorText">
+ Colore nuvole
+ </text>
+ <text name="WLCloudColorText2">
+ XY/Densità nuvole
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Copertura nuvole
+ </text>
+ <text name="WLCloudScaleText">
+ Scala nuvole
+ </text>
+ <text name="WLCloudDetailText">
+ Dettaglio nuvole (XY/Densità)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Scorrimento nuvole X
+ </text>
+ <check_box label="Blocca" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Scorrimento nuvole Y
+ </text>
+ <check_box label="Blocca" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Usa questo valore predefinito come nuova impostazione per il cielo" name="make_default_cb"/>
+ <button label="Salva" name="save"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..7bffc60ba2
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Modifica un valore predefinito acqua">
+ <string name="title_new">
+ Crea un nuovo valore predefinito per l&apos;acqua
+ </string>
+ <string name="title_edit">
+ Modifica un valore predefinito per l&apos;acqua
+ </string>
+ <string name="hint_new">
+ Dai un nome al valore predefinito, modifica i controlli per crearlo e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="hint_edit">
+ Per modificare il valore predefinito per l&apos;acqua, modifica i controlli e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="hint">
+ Per modificare i valori predefiniti, modifica i controlli e quindi fai clic su &quot;Salva&quot;
+ </text>
+ <text name="label">
+ Nome predefinito:
+ </text>
+ <text name="note">
+ Nota: se cambi il nome del valore predefinito, in realtà ne crei uno nuovo e quello esistente non viene cambiato.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Colore nebbia acqua
+ </text>
+ <text name="water_fog_density_label">
+ Esponente densità nebbia
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modificatore nebbia sott&apos;acqua
+ </text>
+ <text name="BHText">
+ Direzione onda grande
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Scala wavelet riflesso
+ </text>
+ <text name="HDText">
+ Scala Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Spostamento Fresnel
+ </text>
+ <text name="BHText2">
+ Direzione onda piccola
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Scala wavelet sopra
+ </text>
+ <text name="WaterScaleBelowText">
+ Scala wavelet sotto
+ </text>
+ <text name="MaxAltText">
+ Fattore moltiplicativo blu
+ </text>
+ <text name="BHText3">
+ Mappa normale
+ </text>
+ </panel>
+ <check_box label="Usa questo valore predefinito come nuova impostazione per l&apos;acqua" name="make_default_cb"/>
+ <button label="Salva" name="save"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml
deleted file mode 100644
index 1c17c18e84..0000000000
--- a/indra/newview/skins/default/xui/it/floater_env_settings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDITOR DELL&apos;AMBIENTE">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Ora del
-giorno
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <text name="EnvCloudText">
- Intensità delle
-Nuvole
- </text>
- <text name="EnvWaterColorText">
- Colore
-dell&apos;Acqua
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Clicca per aprire il selettore dei colori"/>
- <text name="EnvWaterFogText">
- Nebbiosità
-dell&apos;acqua
- </text>
- <button bottom="-144" label="Usa orario della regione" name="EnvUseEstateTimeButton" width="145"/>
- <button label="Cielo avanzato" name="EnvAdvancedSkyButton"/>
- <button label="Acqua avanzata" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_environment_settings.xml b/indra/newview/skins/default/xui/it/floater_environment_settings.xml
new file mode 100644
index 0000000000..f191078fad
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="IMPOSTAZIONI AMBIENTE">
+ <text name="note">
+ Usa le opzioni seguenti per personalizzare le impostazioni dell&apos;ambiente per il tuo viewer.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usa impostazioni regione" name="use_region_settings"/>
+ <radio_item label="Personalizza il mio ambiente" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Nota: gli altri utenti non vedranno le tue impostazioni personalizzate.
+ </text>
+ <text name="water_settings_title">
+ Impostazione Acqua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo giornata / cielo
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo fisso" name="my_sky_settings"/>
+ <radio_item label="Ciclo giornata" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_model_preview.xml b/indra/newview/skins/default/xui/it/floater_model_preview.xml
index a17b8b36c2..931fe7d382 100644
--- a/indra/newview/skins/default/xui/it/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Pausa
</string>
+ <string name="status_parse_error">
+ Problema nell&apos;elaborazione DAE - vedi il registro per informazioni al riguardo.
+ </string>
<string name="status_reading_file">
Caricamento in corso...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Errore: numero di vertici maggiore di 65534, annullato.
</string>
+ <string name="bad_element">
+ Errore: elemento non valido
+ </string>
<string name="high">
Alto
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Semplificazione in corso...
</string>
+ <string name="tbd">
+ Da definire
+ </string>
<text name="name_label">
Nome:
</text>
@@ -74,23 +83,26 @@
Livello di dettaglio: Bassissimo
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
- <text name="physics cost">
- Costo fisica: [COST]
- </text>
- <text name="upload fee">
- Costo caricamento: N/D
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ ATTENZIONE:
+ </text>
+ <text name="warning_message">
+ Non sarà possibile completare il caricamento finale di questo modello sui server di Second Life. [[VURL] Scopri come] ricevere l&apos;autorizzazione per il caricamento dei modelli con reticolo.
+ </text>
+ <text name="weights_text">
+ Download:
+Fisica:
+Server:
+
+Prim equivalenti:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Predefiniti" name="reset_btn" tool_tip="Ripristina predefiniti"/>
- <button label="Carica sul server" name="ok_btn" tool_tip="Carica al simulatore"/>
- <button label="Annulla" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Livello di dettaglio" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Costo caricamento: L$ [FEE]
+ </text>
+ <button label="Imposta sui valori predefiniti" name="reset_btn" tool_tip="Imposta sui valori predefiniti"/>
+ <button label="Calcolare pesi e tariffa" name="calculate_btn" tool_tip="Calcolare pesi e tariffa"/>
+ <button label="Carica sul server" name="ok_btn" tool_tip="Carica al simulatore"/>
+ <button label="Annulla" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_model_wizard.xml b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
index b17f731089..dbf41e2daf 100644
--- a/indra/newview/skins/default/xui/it/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="PROCEDURA GUIDATA CARICA MODELLO">
<button label="5. Carica sul server" name="upload_btn"/>
<button label="4. Rivedi" name="review_btn"/>
- <button label="3. Fisica" name="physics2_btn"/>
<button label="3. Fisica" name="physics_btn"/>
<button label="2. Ottimizza" name="optimize_btn"/>
<button label="1. Seleziona file" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carica modello
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Seleziona file modello
</text>
</panel>
- <text name="description">
- Questa procedura guidata permette di importare modelli di reticoli in Second Life. Specificare prima un file che contiene il modello da importare. Second Life supporta file COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nome file:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Utenti avanzati: Gli utenti che hanno dimestichezza con gli strumenti di creazione 3D possono usare le opzioni di caricamento avanzate.
+ </text>
+ <button label="Passa a modalità avanzata" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Scegli il file del modello da caricare
</text>
<button label="Sfoglia..." label_selected="Sfoglia..." name="browse"/>
+ <text name="support_collada_text">
+ Second Life supporta file COLLADA (.dae)
+ </text>
+ <text name="dimensions_label">
+ Dimensioni (metri):
+ </text>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ ATTENZIONE:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Non sarà possibile completare il passaggio finale per il caricamento finale di questo modello sui server di Second Life. [secondlife:///app/floater/learn_more Scopri come] impostare l&apos;account per il caricamento di modelli con reticolo.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Ottimizza
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Ottimizza modello
</text>
</panel>
- <text name="description">
- Questa procedura guidata ha ottimizzato il modello per migliorare le prestazioni. Si possono variare i risultati dell&apos;ottimizzazione in basso o fare clic su Avanti per continuare.
+ <text name="optimize_hint">
+ Abbiamo ottimizzato il modello per migliorare le prestazioni. Se necessario, può essere regolato ulteriormente.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Generazione livello di dettaglio
+ </text>
<text name="high_detail_text">
Genera livello di dettaglio: Alto
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Anteprima modello:
+ <text name="optimize_performance_text">
+ Prestazioni
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Livello di dettaglio per anteprima rendering">
- <combo_item name="high">
- Alto
+ <text name="optimize_faster_rendering_text">
+ Rendering più veloce
+Meno dettagli
+Peso prim più basso
+ </text>
+ <text name="optimize_accuracy_text">
+ Fedeltà
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Rendering più lento
+Più dettagli
+Peso prim più elevato
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Ricalcola geometria" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Anteprima geometria
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="Livello di dettaglio per anteprima rendering">
+ <combo_item name="preview_lod_high">
+ Molti dettagli
</combo_item>
- <combo_item name="medium">
- Medio
+ <combo_item name="preview_lod_medium">
+ Dettagli medi
</combo_item>
- <combo_item name="low">
- Basso
+ <combo_item name="preview_lod_low">
+ Meno dettagli
</combo_item>
- <combo_item name="lowest">
- Bassissimo
+ <combo_item name="preview_lod_lowest">
+ Dettaglio minimo
</combo_item>
</combo_box>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Fisica
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Modifica fisica
</text>
</panel>
- <text name="description">
- La procedura guidata permette di creare una forma fisica che determina come l&apos;oggetto interagisce con altri oggetti e avatar. Impostare il comando a scorrimento sul livello di dettaglio appropriato per l&apos;uso dell&apos;oggetto:
+ <text name="physics_hint">
+ Verrà creata una forma per lo scafo esterno del modello. Regola il livello di dettaglio della forma in base al fine desiderato del modello.
</text>
- <panel name="content">
- <text name="streaming cost">
- Costo risorsa: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Prestazioni
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Fisica
+ <text name="physics_faster_rendering_text">
+ Rendering più veloce
+Meno dettagli
+Peso prim più basso
</text>
- </panel>
- <text name="description">
- Visualizza in anteprima la forma fisica in basso, quindi fai clic su Avanti per continuare. Per modificare la forma fisica, fare clic su Indietro.
- </text>
- <panel name="content">
- <text name="lod_label">
- Anteprima modello:
+ <text name="physics_accuracy_text">
+ Fedeltà
+ </text>
+ <text name="physics_slower_dendering_text">
+ Rendering più lento
+Più dettagli
+Peso prim più elevato
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Livello di dettaglio per anteprima rendering">
- <combo_item name="high">
- Alto
+ <text name="physics_example_1">
+ Esempi:
+Oggetti in movimento
+Oggetti in volo
+Veicoli
+ </text>
+ <text name="physics_example_2">
+ Esempi:
+Piccoli oggetti statici
+Oggetti meno dettagliati
+Mobili semplici
+ </text>
+ <text name="physics_example_3">
+ Esempi:
+Oggetti statici
+Oggetti dettagliati
+Edifici
+ </text>
+ <button label="Ricalcola fisica" name="recalculate_physics_btn"/>
+ <button label="Ricalcolo in corso..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Anteprima fisica
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="Livello di dettaglio per anteprima rendering">
+ <combo_item name="preview_lod2_high">
+ Molti dettagli
</combo_item>
- <combo_item name="medium">
- Medio
+ <combo_item name="preview_lod2_medium">
+ Dettagli medi
</combo_item>
- <combo_item name="low">
- Basso
+ <combo_item name="preview_lod2_low">
+ Meno dettagli
</combo_item>
- <combo_item name="lowest">
- Bassissimo
+ <combo_item name="preview_lod2_lowest">
+ Dettaglio minimo
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Rivedi
</text>
</panel>
- <text name="description">
- Rivedere i dettagli in basso, quindi fare clic su Carica per caricare il modello. Il tuo saldo in L$ verrà addebitato quando fai clic su Carica.
- </text>
- <panel name="content">
- <text name="lod_label">
- Anteprima modello:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impatto sul lotto o sulla regione: [EQUIV] prim equivalenti
</text>
- <combo_box name="preview_lod_combo" tool_tip="Livello di dettaglio per anteprima rendering">
- <combo_item name="high">
- Alto
- </combo_item>
- <combo_item name="medium">
- Medio
- </combo_item>
- <combo_item name="low">
- Basso
- </combo_item>
- <combo_item name="lowest">
- Bassissimo
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ All&apos;account verrà accreditata una tariffa di caricamento pari a L$ [FEE].
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Facendo clic sul pulsante Carica, confermi di possedere i diritti relativi ai materiali contenuti nel modello.
</text>
</panel>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
- <text name="physics cost">
- Costo fisica: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Caricamento completato.
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Caricamento completato
</text>
</panel>
- <text name="description">
- Congratulazioni. Il modello è stato caricato correttamente e ora puoi trovarlo nella cartella Oggetti nel tuo inventario.
+ <text name="model_uploaded_text">
+ Il modello è stato caricato.
+ </text>
+ <text name="inventory_text">
+ Puoi trovarlo nella cartella Oggetti nel tuo inventario.
+ </text>
+ <text name="charged_fee">
+ La somma di L$ [FEE] è stata addebitata sul tuo account.
</text>
</panel>
<button label="&lt;&lt; Indietro" name="back"/>
<button label="Avanti &gt;&gt;" name="next"/>
+ <button label="Calcolare pesi e tariffa &gt;&gt;" name="calculate"/>
+ <button label="Calcolo in corso..." name="calculating"/>
<button label="Carica" name="upload" tool_tip="Carica al simulatore"/>
<button label="Annulla" name="cancel"/>
<button label="Chiudi" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Pausa
</string>
+ <string name="status_parse_error">
+ Problema nell&apos;elaborazione DAE - vedi il registro per informazioni al riguardo.
+ </string>
<string name="status_reading_file">
Caricamento in corso...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Errore: numero di vertici maggiore di 65534, annullato.
</string>
+ <string name="bad_element">
+ Errore: elemento non valido
+ </string>
<string name="high">
Alto
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml
index 05f5dfe719..ac3dc17aa3 100644
--- a/indra/newview/skins/default/xui/it/floater_search.xml
+++ b/indra/newview/skins/default/xui/it/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="TROVA">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Caricamento in corso...
</floater.string>
diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
index aab00a26ce..489d52d3b8 100644
--- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="PARAMETRI DI DEBUG">
<radio_group name="boolean_combo">
- <radio_item label="VERO" name="TRUE" value="vero"/>
- <radio_item label="FALSO" name="FALSE" value=""/>
+ <radio_item label="VERO" name="TRUE" />
+ <radio_item label="FALSO" name="FALSE" />
</radio_group>
<color_swatch label="Colore" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 23e01a3943..d3b1503742 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Clicca e trascina per selezionare il terreno
</floater.string>
- <floater.string name="grid_screen_text">
- Schermo
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] oggetti ( [PRIM_COUNT] prim [PE_STRING] ) selezionati
</floater.string>
- <floater.string name="grid_local_text">
- Locale
- </floater.string>
- <floater.string name="grid_world_text">
- Globale
- </floater.string>
- <floater.string name="grid_reference_text">
- Riferimento
- </floater.string>
- <floater.string name="grid_attachment_text">
- Accessorio
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] prim equivalenti
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Ingrandisci"/>
<button label="" label_selected="" name="button move" tool_tip="Sposta"/>
@@ -66,20 +57,12 @@
<check_box label="Modifica parti collegate" name="checkbox edit linked parts"/>
<button label="Collegamento" name="link_btn"/>
<button label="Scollega" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Mostra il costo di rendering calcolato per questo oggetto">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Allunga entrambi i lati" name="checkbox uniform label">
Allunga entrambi i lati
</text>
<check_box initial_value="true" label="Ridimensiona le texture" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Posiziona nella griglia" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l&apos;oggetto">
- <combo_box.item label="Rete del mondo" name="World"/>
- <combo_box.item label="Rete locale" name="Local"/>
- <combo_box.item label="Griglia di riferimento" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Scatto" name="checkbox snap to grid"/>
<button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni della griglia"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -120,23 +103,11 @@
Potenza
</text>
<button label="Applica" label_selected="Applica" name="button apply to selection" tool_tip="Modifica il terreno selezionato"/>
- <text name="obj_count">
- Oggetti: [COUNT]
- </text>
- <text name="prim_count">
- Prim: [COUNT]
- </text>
- <text name="linked_set_count">
- Set collegati: [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Costo dei set collegati attualmente selezionati come [prim],[complessità fisica]">
- Costo: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Oggetti: [COUNT]
+ <text name="selection_empty">
+ Nessuna selezione.
</text>
- <text name="object_cost" tool_tip="Costo degli oggetti attualmente selezionati come [prim] / [complessità fisica]">
- Costo: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Peso fisica [PHYS_WEIGHT], costo rendering [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs">
<panel label="Generale" name="General">
@@ -360,7 +331,6 @@
<combo_box.item label="Toroidale" name="Torus"/>
<combo_box.item label="Piana" name="Plane"/>
<combo_box.item label="Cilindrica" name="Cylinder"/>
- <combo_box.item label="Reticolo" name="Mesh"/>
</combo_box>
</panel>
<panel label="Caratteristiche" name="Features">
@@ -412,7 +382,7 @@
</combo_box>
<spinner label="Gravità" name="Physics Gravity"/>
<spinner label="Frizione" name="Physics Friction"/>
- <spinner label="Densità" name="Physics Density"/>
+ <spinner label="Densità in 100 kg/m^3" name="Physics Density"/>
<spinner label="Restituzione" name="Physics Restitution"/>
</panel>
<panel label="Texture" name="Texture">
diff --git a/indra/newview/skins/default/xui/it/floater_voice_effect.xml b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
index 4c440c45b6..a0e49525ea 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Nuovo!)
</string>
+ <string name="effect_Arena">
+ Arena
+ </string>
+ <string name="effect_Beast">
+ Bestia
+ </string>
+ <string name="effect_Buff">
+ Appassionato
+ </string>
+ <string name="effect_Buzz">
+ Euforia
+ </string>
+ <string name="effect_Camille">
+ Camilla
+ </string>
+ <string name="effect_Creepy">
+ Terrificante
+ </string>
+ <string name="effect_CreepyBot">
+ TerrificanteBot
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ ProfondoBot
+ </string>
+ <string name="effect_Demon">
+ Demonio
+ </string>
+ <string name="effect_Flirty">
+ Civettuolo
+ </string>
+ <string name="effect_Foxy">
+ Scaltro
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Halloween_2010_Bonus
+ </string>
+ <string name="effect_Helium">
+ Elio
+ </string>
+ <string name="effect_Husky">
+ Fusto
+ </string>
+ <string name="effect_Intercom">
+ Interfono
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Incubo
+ </string>
+ <string name="effect_PopBot">
+ PopBot
+ </string>
+ <string name="effect_Rachel">
+ Rachele
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Robot
+ </string>
+ <string name="effect_Roxanne">
+ Rosanna
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samanta
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Bassotto
+ </string>
+ <string name="effect_Sneaky">
+ Vile
+ </string>
+ <string name="effect_Stallion">
+ Stallone
+ </string>
+ <string name="effect_Sultry">
+ Focoso
+ </string>
+ <string name="effect_Thunder">
+ Tuono
+ </string>
+ <string name="effect_Vixen">
+ Maliziosa
+ </string>
+ <string name="effect_WhinyBot">
+ PiangiBot
+ </string>
<text name="preview_text">
Per l&apos;anteprima
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml
deleted file mode 100644
index b25f0a6266..0000000000
--- a/indra/newview/skins/default/xui/it/floater_water.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="EDITOR AVANZATO DELL&apos;ACQUA">
- <text name="KeyFramePresetsText" width="245">
- Impostazioni predeterminate dell&apos;acqua:
- </text>
- <combo_box left_delta="245" name="WaterPresetsCombo" width="150"/>
- <button label="Nuovo" label_selected="Nuovo" name="WaterNewPreset"/>
- <button label="Salva" label_selected="Salva" name="WaterSavePreset"/>
- <button label="Cancella" label_selected="Cancella" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="IMPOSTAZIONI" name="Settings">
- <text name="BHText">
- Colore della nebbiosità dell&apos;acqua
- </text>
- <button label="?" left="209" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Clicca per aprire il selettore dei colori"/>
- <text font="SansSerifSmall" name="WaterFogDensText">
- Esponente di densità della nebbia
- dell&apos;acqua
- </text>
- <slider bottom_delta="-40" name="WaterFogDensity"/>
- <button label="?" left="209" name="WaterFogDensityHelp"/>
- <text bottom="-140" font="SansSerifSmall" name="WaterUnderWaterFogModText">
- Regolatore effetto nebbia subacquea
- </text>
- <button label="?" left="209" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Scala di riflessione delle onde
- </text>
- <button label="?" left="415" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Scala Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Offset Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelOffsetHelp"/>
- <text font="SansSerifSmall" name="DensMultText">
- Scala di rifrazione nell&apos;acqua
- dall&apos;alto
- </text>
- <slider bottom_delta="-40" name="WaterScaleAbove"/>
- <button label="?" left="650" name="WaterScaleAboveHelp"/>
- <text bottom="-70" font="SansSerifSmall" name="WaterScaleBelowText">
- Scala di rifrazione nell&apos;acqua
- dal basso
- </text>
- <slider bottom_delta="-40" name="WaterScaleBelow"/>
- <button label="?" left="650" name="WaterScaleBelowHelp"/>
- <text bottom="-122" name="MaxAltText">
- Moltiplicatore della sfocatura
- </text>
- <button label="?" left="650" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="IMMAGINE" name="Waves">
- <text name="BHText">
- Direzione della grande onda
- </text>
- <button label="?" left="170" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Direzione della piccola onda
- </text>
- <button label="?" left="170" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Mappatura normale
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
deleted file mode 100644
index 6828d05be0..0000000000
--- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="EDITOR AVANZATO DEL CIELO">
- <text name="KeyFramePresetsText" width="105">
- Cieli predefiniti:
- </text>
- <combo_box left_delta="105" name="WLPresetsCombo"/>
- <button label="Nuovo" label_selected="Nuovo" name="WLNewPreset"/>
- <button label="Salva" label_selected="Salva" left_delta="72" name="WLSavePreset"/>
- <button label="Elimina" label_selected="Elimina" left_delta="72" name="WLDeletePreset"/>
- <button font="SansSerifSmall" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" left_delta="85" name="WLDayCycleMenuButton" width="165"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFERA" name="Atmosphere">
- <text name="BHText">
- Blu dell&apos;Orizzonte
- </text>
- <button label="?" left="189" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text font="SansSerifSmall" name="BDensText">
- Altezza della Foschia all&apos;Orizzonte
- </text>
- <button label="?" left="189" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Densità del Blu
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densità  della Foschia
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Moltiplicatore di Densità
- </text>
- <button label="?" left="645" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Moltiplicatore della Distanza
- </text>
- <button label="?" left="645" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitudine Massima
- </text>
- <button label="?" left="645" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="ILLUMINAZIONE" name="Lighting">
- <text name="SLCText">
- Colore Sole/Luna
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Posizione Sole/Luna
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Ambiente
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Angolo Est
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Corona intorno al sole
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Focus" name="WLGlowB"/>
- <slider label="Grandezza" name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma della Scena
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Luminosità  delle stelle
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUVOLE" name="Clouds">
- <text name="WLCloudColorText">
- Colore delle Nuvole
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Nuvole XY/Densità
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Copertura delle Nuvole
- </text>
- <button label="?" left="415" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Altitudine delle Nuvole
- </text>
- <button label="?" left="415" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Dettagli Nuvole (XY/ Densità)
- </text>
- <button label="?" left="415" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Scorrimento delle X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Blocca" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Scorrimento delle Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Blocca" name="WLCloudLockY"/>
- <check_box label="Mostra le Nuvole Classiche" name="DrawClassicClouds"/>
- <button label="?" left="645" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml
index bdf7d2094f..fe8bf703aa 100644
--- a/indra/newview/skins/default/xui/it/menu_login.xml
+++ b/indra/newview/skins/default/xui/it/menu_login.xml
@@ -17,7 +17,7 @@
<menu_item_call label="Mostra i Termini del servizio (TOS)" name="TOS"/>
<menu_item_call label="Mostra messaggio critico" name="Critical"/>
<menu_item_call label="Test browser multimedia" name="Web Browser Test"/>
- <menu_item_call label="Test finestra contenuti Web" name="Web Content Floater Test"/>
+ <menu_item_call label="Test debug finestra contenuti Web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Mostra selettore griglia" name="Show Grid Picker"/>
<menu_item_call label="Mostra Console notifiche" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
index aae2313702..2b5c235706 100644
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordina in base al nome" name="sort_name"/>
<menu_item_check label="Ordina in base alla distanza" name="sort_distance"/>
<menu_item_check label="Icone persone" name="view_icons"/>
+ <menu_item_check label="Visualizza mappa" name="view_map"/>
<menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index e4df0630d9..ef40cbda7c 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="I miei gruppi" name="My Groups"/>
<menu_item_check label="Chat nei dintorni" name="Nearby Chat"/>
<menu_item_call label="Persone vicine" name="Active Speakers"/>
+ <menu_item_check label="Voce nei dintorni" name="Nearby Voice"/>
</menu>
<menu label="Mondo" name="World">
<menu_item_check label="Mini mappa" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Mezzogiorno" name="Noon"/>
<menu_item_call label="Tramonto" name="Sunset"/>
<menu_item_call label="Mezzanotte" name="Midnight"/>
- <menu_item_call label="Orario della proprietà" name="Revert to Region Default"/>
- <menu_item_call label="Editor dell&apos;ambiente" name="Environment Editor"/>
+ </menu>
+ <menu label="Editor ambiente" name="Enviroment Editor">
+ <menu_item_call label="Impostazioni ambiente..." name="Enviroment Settings"/>
+ <menu label="Valori predefiniti acqua" name="Water Presets">
+ <menu_item_call label="Nuovo valore predefinito..." name="new_water_preset"/>
+ <menu_item_call label="Modifica valori predefiniti..." name="edit_water_preset"/>
+ <menu_item_call label="Cancella valore predefinito..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Valori predefiniti cielo" name="Sky Presets">
+ <menu_item_call label="Nuovo valore predefinito..." name="new_sky_preset"/>
+ <menu_item_call label="Modifica valori predefiniti..." name="edit_sky_preset"/>
+ <menu_item_call label="Cancella valore predefinito..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Valori predefiniti giornata" name="Day Presets">
+ <menu_item_call label="Nuovo valore predefinito..." name="new_day_preset"/>
+ <menu_item_call label="Modifica valori predefiniti..." name="edit_day_preset"/>
+ <menu_item_call label="Cancella valore predefinito..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Costruisci" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Disabilita vincoli fotocamera" name="Disable Camera Distance"/>
<menu_item_check label="Foto ad alta risoluzione" name="HighResSnapshot"/>
<menu_item_check label="Manda foto su disco senza avvisi" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Comprimi le foto su disco" name="CompressSnapshotsToDisk"/>
<menu label="Strumenti di performance" name="Performance Tools">
<menu_item_call label="Misuratore lag" name="Lag Meter"/>
<menu_item_check label="Barra statistiche" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
index 7c8eef64e5..de25f88aca 100644
--- a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Modifica vestiario" name="edit"/>
<menu_item_call label="Togli" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copia gruppo vestiti negli Appunti" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index f50051c004..d09f207af2 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1555,6 +1555,11 @@ Riprova più tardi.
<button name="Cancel" text="Annulla"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Hai cercato di fare [OFFERS] offerte di teleport,
+più del limite [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Chiedere, in qualità di Admin, al residente di raggiungerti?
<form name="form">
@@ -1977,6 +1982,10 @@ Desideri abbandonare la modalità &apos;Occupato&apos; prima di completare quest
Vuoi veramente eliminare la cronologia viaggi, web e ricerche fatte?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Sei sicuro di volere cancellare la cache del viewer?
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Confermi di volere cancellare i tuoi cookie?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/>
@@ -2002,48 +2011,30 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
Vuoi sovrascrivere le preimpostazioni salvate?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
- <notification name="WLDeletePresetAlert">
- Vuoi cancellare [SKY]?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
- </notification>
<notification name="WLNoEditDefault">
Non puoi modificare o cancellare una preimpostazione di fabbrica.
</notification>
<notification name="WLMissingSky">
Questo file di ciclo giornaliero fa riferimento ad un file di cielo mancante: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Effetto di post elaborazione già presente. Vuoi sovrascrivere?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
+ <notification name="WLRegionApplyFail">
+ Queste impostazioni non possono essere applicare alla regione. Uscendo dalla regione e ritornandoci potrebbe risolvere il problema. Il motivo fornito: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Fornisci il nome per il nuovo cielo.
- <form name="form">
- <input name="message">
- Nuova preimpostazione
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annulla"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- La preimpostazione esiste già!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Impossibile cancellare l&apos;ultima chiave in questo ciclo giornata. Il ciclo giornata non può essere vuoto. Invece di cancellare la chiave restante, modificala e quindi creane una nuova.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Fornisci il nome per la nuova preregolazione del livello dell&apos;acqua.
- <form name="form">
- <input name="message">
- Nuova preimpostazione
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annulla"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Non puoi aggiungere altri frame chiave a questo ciclo giornata. Il numero massimo di frame chiave per i cicli giornata nell&apos;ambito [SCOPE] è [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- La preimpostazione esiste già!
+ <notification name="EnvUpdateRate">
+ Puoi aggiornare le impostazioni dell&apos;ambiente della regione ogni [WAIT] secondi. Attendi e riprova.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Non puoi modificare o cancellare una preimpostazione.
+ <notification name="PPSaveEffectAlert">
+ Effetto di post elaborazione già presente. Vuoi sovrascrivere?
+ <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Impossibile iniziare una nuova sessione di chat con [RECIPIENT].
@@ -2072,13 +2063,14 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
<usetemplate ignoretext="Indossare gli abiti che creo mentre modifico il mio aspetto" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="NotAgeVerified">
- Per entrare in questa zona, devi avere eseguito la verifica dell&apos;età. Vuoi andare sul sito di [SECOND_LIFE] per verificare la tua età?
+ Per accedere ai contenuti e alle aree per adulti in Second Life devi avere almeno 18 anni. Visita la pagina di verifica dell&apos;età per confermare di avere almeno 18 anni.
+Verrà avviato il browser Web.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=it
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Non ho verificato la mia età" name="okcancelignore" notext="No" yestext="Si"/>
+ <usetemplate ignoretext="Non ho verificato la mia età" name="okcancelignore" notext="Annulla" yestext="Passa alla verifica dell&apos;età"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Per poter visitare questa zona devi avere devi aver fornito informazioni di pagamento a Linden Lab. Vuoi andare sul sito di [SECOND_LIFE] ed impostarle?
@@ -2334,6 +2326,9 @@ Qui non puoi volare.
<notification name="NoBuild">
In questa zona è proibita la costruzione. Qui non puoi costruire né rezzare oggetti.
</notification>
+ <notification name="SeeAvatars">
+ In questo lotto non si possono vedere avatar e chat di testo presenti in altri lotti. Non puoi vedere altri residenti fuori dal lotto e loro non possono vederti. Viene bloccata anche la normale chat di testo sul canale 0.
+ </notification>
<notification name="ScriptsStopped">
Un amministratore ha temporaneamente disabilitato gli script in questa regione.
</notification>
@@ -2425,7 +2420,7 @@ Riprova tra qualche istante.
</notification>
<notification name="ObjectGiveItem">
Un oggetto denominato &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; di proprietà di [NAME_SLURL] ti ha dato questo [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Prendi"/>
<button name="Discard" text="Rifiuta"/>
@@ -2758,7 +2753,15 @@ Il pulsante verrà visualizzato quando lo spazio sarà sufficiente.
Scegli i residenti con i quali condividere.
</notification>
<notification name="MeshUploadError">
- [LABEL] non è stato caricato: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] non è stato caricato: [MESSAGE] [IDENTIFIER]
+
+Per informazioni dettagliate, vedi il file del registro.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Errore durante la richiesta di autorizzazione al caricamento del reticolo.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Non è stata ottenuta la capacità della regione &apos;[CAPABILITY]&apos;.
</notification>
<notification name="ShareItemsConfirmation">
Sei sicuro di volere condividere gli oggetti
diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
index 8e464ca037..145b8cf4e3 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Salva luogo preferito" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Annulla" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_list.xml b/indra/newview/skins/default/xui/it/panel_outfits_list.xml
index e5194e95d7..d0c275e29f 100644
--- a/indra/newview/skins/default/xui/it/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/all/[SEARCH_TERM] Cerca]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Non hai ancora vestiario da indossare. Prova [secondlife:///app/search/all Cerca]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostra ulteriori opzioni"/>
+ <menu_button name="options_gear_btn" tool_tip="Mostra ulteriori opzioni"/>
<button name="trash_btn" tool_tip="Elimina il vestiario selezionato"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml
index b24a4055f7..f903ae6e2c 100644
--- a/indra/newview/skins/default/xui/it/panel_people.xml
+++ b/indra/newview/skins/default/xui/it/panel_people.xml
@@ -66,16 +66,16 @@ Stai cercando persone da frequentare? Prova la [secondlife:///app/worldmap Mappa
<layout_panel name="view_profile_btn_lp">
<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/it/panel_place_profile.xml b/indra/newview/skins/default/xui/it/panel_place_profile.xml
index c4ffe6af85..890dfc2458 100644
--- a/indra/newview/skins/default/xui/it/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_place_profile.xml
@@ -64,6 +64,8 @@
<text name="scripts_value" value="Attivo"/>
<text name="damage_label" value="Danni:"/>
<text name="damage_value" value="Disattivato"/>
+ <text name="see_avatars_label" value="Vedi avatar:"/>
+ <text name="see_avatars_value" value="Disattiva"/>
<button label="Informazioni sui terreni" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
index 61830f186f..69995fb5de 100644
--- a/indra/newview/skins/default/xui/it/panel_places.xml
+++ b/indra/newview/skins/default/xui/it/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
index b628a29206..224780f234 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache:
+ </text>
+ <spinner label="Dimensione cache (64 - 9984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Pulizia della cache" label_selected="Pulizia della cache" name="clear_cache"/>
+ <text name="Cache location">
+ Ubicazione della cache:
+ </text>
+ <button label="Sfoglia" label_selected="Sfoglia" name="set_cache"/>
+ <button label="Posizione predefinita" label_selected="Posizione predefinita" name="default_cache_location"/>
<text name="UI Size:">
Dimensioni UI:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
index bbfae5e9e8..d00512aaf7 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Abilitato" name="enable_voice_check"/>
<check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica" value="true"/>
<check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni" value="true"/>
+ <check_box label="Riproduci suoni dai gesti" name="gesture_audio_play_btn" tool_tip="Seleziona per ascoltare i suoni dai gesti" value="true"/>
<text name="voice_chat_settings">
Impostazioni Chat vocale
</text>
@@ -35,28 +36,5 @@
<button label="Imposta tasto" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Reimposta sul pulsante centrale del mouse"/>
<button label="Dispositivi di Input/Output" name="device_settings_btn" width="165"/>
- <panel label="Impostazioni del dispositivo" name="device_settings_panel">
- <panel.string name="default_text">
- Predefinito
- </panel.string>
- <panel.string name="default system device">
- Dispositivo di sistema predefinito
- </panel.string>
- <panel.string name="no device">
- Nessun dispositivo
- </panel.string>
- <text name="Input">
- Input
- </text>
- <text name="My volume label">
- Il mio volume:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questa barra"/>
- <text name="wait_text">
- Attendi
- </text>
- <text name="Output">
- Output
- </text>
- </panel>
+ <panel label="Impostazioni del dispositivo" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_environment.xml b/indra/newview/skins/default/xui/it/panel_region_environment.xml
new file mode 100644
index 0000000000..81bc8253f4
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ambiente" name="panel_env_info">
+ <text name="water_settings_title">
+ Seleziona le impostazioni del ciclo dell&apos;acqua e del cielo/giornata che vuoi che vedano tutti coloro che visitano la tua regione. Maggiori informazioni
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usa valori predefiniti di Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Usa le impostazioni seguenti" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Impostazione Acqua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo cielo / giornata
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo fisso" name="my_sky_settings"/>
+ <radio_item label="Ciclo giornata" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Applica" name="apply_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_terrain.xml b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
index 92044bae11..c61ac3ecce 100644
--- a/indra/newview/skins/default/xui/it/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
@@ -7,21 +7,56 @@
sconosciuto
</text>
<spinner label="Altezza dell&apos;acqua" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Limite di altezza del &#10;terreno" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Limite di abbassamento &#10;del terreno" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Usa il sole della regione" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Sole fisso" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Fase" name="sun_hour_slider"/>
- <button label="Applica" name="apply_btn"/>
+ <spinner label="Limite di altezza del
+terreno" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Limite di abbassamento
+del terreno" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Texture terreno (richiede file 512x512, 24 bit .tga)
+ </text>
+ <text name="height_text_lbl">
+ 1 (basso)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Alto)
+ </text>
+ <text name="height_text_lbl5">
+ Intervalli altitudine texture
+ </text>
+ <text name="height_text_lbl10">
+ Questi valori indicano la gamma di miscele per le texture di cui sopra.
+ </text>
+ <text name="height_text_lbl11">
+ Misurato in metri, il valore BASSO è la MASSIMA altezza della texture n. 1, e il valore ALTO è l&apos;altezza MINIMA della texture n. 4.
+ </text>
+ <text name="height_text_lbl6">
+ Nordovest
+ </text>
+ <text name="height_text_lbl7">
+ Nordest
+ </text>
+ <spinner label="Basso" name="height_start_spin_1"/>
+ <spinner label="Basso" name="height_start_spin_3"/>
+ <spinner label="Alto" name="height_range_spin_1"/>
+ <spinner label="Alto" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Sudovest
+ </text>
+ <text name="height_text_lbl9">
+ Sudest
+ </text>
+ <spinner label="Basso" name="height_start_spin_0"/>
+ <spinner label="Basso" name="height_start_spin_2"/>
+ <spinner label="Alto" name="height_range_spin_0"/>
+ <spinner label="Alto" name="height_range_spin_2"/>
<button label="Scarica terreno RAW..." name="download_raw_btn" tool_tip="Disponibile solo per i proprietari del terreno, non per i manager"/>
- <button label="?" name="download_raw_help"/>
<button label="Carica terreno RAW..." name="upload_raw_btn" tool_tip="Disponibile solo per i proprietari del terreno, non per i manager"/>
- <button label="?" name="upload_raw_help"/>
- <button width="170" label="Trasforma il terreno" name="bake_terrain_btn" tool_tip="Imposta il terreno corrente come punto medio per i limiti di innalzamento/abbassamento"/>
- <button left="190" label="?" name="bake_terrain_help"/>
+ <button label="Trasforma il terreno" name="bake_terrain_btn" tool_tip="Imposta il terreno corrente come punto medio per i limiti di innalzamento/abbassamento" width="170"/>
+ <button label="Applica" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_sound_devices.xml b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
index 8e7f0c8dc5..b1934fd515 100644
--- a/indra/newview/skins/default/xui/it/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Predefinito
</panel.string>
+ <string name="name_no_device">
+ Nessun dispositivo
+ </string>
+ <string name="name_default_system_device">
+ Dispositivo di sistema predefinito
+ </string>
<text name="Input">
Input
</text>
+ <text name="Output">
+ Output
+ </text>
<text name="My volume label">
Il mio volume:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Attendi
</text>
- <text name="Output">
- Output
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
index 1c1744d94b..72ca2f6d68 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Cose" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Elementi ricevuti ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Elementi ricevuti
+ </string>
+ <button label="Elementi ricevuti" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nuovi
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Gli acquisti dal mercato verranno consegnati qui.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Casella uscita commercianti" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Sposta al mercato"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Imposta il tuo account commercianti per usare questa funzione.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index cbe8ef24c4..1d335e55a6 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -31,6 +31,9 @@
<string name="StartupInitializingVFS">
Inizializzazione VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Inizializzazione grafica non riuscita. Aggiorna il driver della scheda grafica!
+ </string>
<string name="ProgressRestoring">
Ripristino in corso...
</string>
@@ -85,6 +88,12 @@
<string name="LoginQuicktimeOK">
QuickTime configurato con successo.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Richiesta capacità regione...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Richiesta capacità regione, tentativo [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
In attesa della risposta della regione...
</string>
@@ -1177,6 +1186,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="InventoryNoTexture">
Non hai una copia di questa texture nel tuo inventario
</string>
+ <string name="InventoryInboxNoItems">
+ Gli elementi acquistati attraverso il mercato verranno consegnati qui
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Trascina gli elementi qui per poi elencarli nel tuo mercato.
+ </string>
<string name="no_transfer" value="(nessun trasferimento)"/>
<string name="no_modify" value="(nessuna modifica)"/>
<string name="no_copy" value="(nessuna copia)"/>
@@ -1217,9 +1232,6 @@ Prova ad accedere nuovamente tra un minuto.
<string name="InvFolder My Inventory">
Il mio inventario
</string>
- <string name="InvFolder My Favorites">
- I miei preferiti
- </string>
<string name="InvFolder Library">
Libreria
</string>
@@ -1278,10 +1290,10 @@ Prova ad accedere nuovamente tra un minuto.
Gesture
</string>
<string name="InvFolder Favorite">
- Preferiti
+ I miei preferiti
</string>
<string name="InvFolder favorite">
- Preferiti
+ I miei preferiti
</string>
<string name="InvFolder Current Outfit">
Abbigliamento attuale
@@ -1304,6 +1316,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="InvFolder All">
Tutto
</string>
+ <string name="no_attachments">
+ Nessun allegato indossato
+ </string>
<string name="Buy">
Acquista
</string>
@@ -1613,6 +1628,9 @@ Prova ad accedere nuovamente tra un minuto.
</string>
<string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal "/>
<string name="NextStipendDay" value=". Il prossimo giorno di stipendio è "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/>
<string name="GroupColumn" value="Gruppo"/>
<string name="Balance">
@@ -1639,6 +1657,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="IMTeen">
teen
</string>
+ <string name="Anyone">
+ chiunque
+ </string>
<string name="RegionInfoError">
errore
</string>
@@ -1846,7 +1867,7 @@ Prova ad accedere nuovamente tra un minuto.
<string name="RegionNoCovenantOtherOwner">
Non esiste alcun regolamento per questa proprietà. Il terreno di questa proprietà è messo in vendita dal proprietario, non dalla Linden Lab. Contatta il proprietario del terreno per i dettagli della vendita.
</string>
- <string name="covenant_last_modified" value="Ultima modifica:"/>
+ <string name="covenant_last_modified" value="Ultima modifica: "/>
<string name="none_text" value="(nessuno)"/>
<string name="never_text" value="(mai)"/>
<string name="GroupOwned">
@@ -1855,6 +1876,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="Public">
Pubblica
</string>
+ <string name="LocalSettings">
+ Impostazioni locali
+ </string>
+ <string name="RegionSettings">
+ Impostazioni regione
+ </string>
<string name="ClassifiedClicksTxt">
Clicca: [TELEPORT] teleport, [MAP] mappa, [PROFILE] profilo
</string>
@@ -1927,6 +1954,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="GroupMoneyDebits">
Debiti
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Contenuto
</string>
@@ -3643,6 +3673,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Regione generale
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatar visibili e chat consentita fuori di questo lotto
+ </string>
<string name="UpdaterWindowTitle">
Aggiornamento [APP_NAME]
</string>
@@ -4056,6 +4089,87 @@ Segnala abuso
<string name="Female - Wow">
Femmina - Accipicchia
</string>
+ <string name="/bow">
+ /inchino
+ </string>
+ <string name="/clap">
+ /applausi
+ </string>
+ <string name="/count">
+ /numero
+ </string>
+ <string name="/extinguish">
+ /estingui
+ </string>
+ <string name="/kmb">
+ /chissene
+ </string>
+ <string name="/muscle">
+ /muscolo
+ </string>
+ <string name="/no">
+ /no
+ </string>
+ <string name="/no!">
+ /no!
+ </string>
+ <string name="/paper">
+ /carta
+ </string>
+ <string name="/pointme">
+ /indicome
+ </string>
+ <string name="/pointyou">
+ /indicotu
+ </string>
+ <string name="/rock">
+ /sasso
+ </string>
+ <string name="/scissor">
+ /forbici
+ </string>
+ <string name="/smoke">
+ /fumo
+ </string>
+ <string name="/stretch">
+ /stiracchiata
+ </string>
+ <string name="/whistle">
+ /fischietto
+ </string>
+ <string name="/yes">
+ /si
+ </string>
+ <string name="/yes!">
+ /si!
+ </string>
+ <string name="afk">
+ non alla tastiera
+ </string>
+ <string name="dance1">
+ danza1
+ </string>
+ <string name="dance2">
+ danza2
+ </string>
+ <string name="dance3">
+ danza3
+ </string>
+ <string name="dance4">
+ danza4
+ </string>
+ <string name="dance5">
+ danza5
+ </string>
+ <string name="dance6">
+ danza6
+ </string>
+ <string name="dance7">
+ danza7
+ </string>
+ <string name="dance8">
+ danza8
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index 2f578862d3..e870a8ace9 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -133,12 +133,12 @@
誤
</text>
<button label="土地ã®è³¼å…¥" label_selected="土地を購入..." left="130" name="Buy Land..." width="100"/>
+ <button label="リンデンセール" label_selected="Linden セール..." name="Linden Sale..." tool_tip="土地ãŒæ‰€æœ‰ã•ã‚Œã¦ãŠã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚オークションã®å¯¾è±¡ã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚å¿…è¦æ¡ä»¶ã§ã™ã€‚"/>
<button label="スクリプト情報" name="Scripts..." width="100"/>
<button label="グループã«è³¼å…¥" label_selected="グループ用ã«è³¼å…¥..." name="Buy For Group..."/>
<button label="入場許å¯ã‚’購入" label_selected="入場許å¯ã‚’購入..." left="130" name="Buy Pass..." tool_tip="ã“ã®åœŸåœ°ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" width="100"/>
<button label="土地ã®æ”¾æ£„" label_selected="土地を放棄..." name="Abandon Land..."/>
<button label="土地をå–り戻ã™" label_selected="土地ã®è¿”é‚„ã‚’è¦æ±‚..." name="Reclaim Land..."/>
- <button label="リンデンセール" label_selected="Linden セール..." name="Linden Sale..." tool_tip="土地ãŒæ‰€æœ‰ã•ã‚Œã¦ãŠã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚オークションã®å¯¾è±¡ã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚å¿…è¦æ¡ä»¶ã§ã™ã€‚"/>
</panel>
<panel label="約款" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -310,6 +310,9 @@
<panel.string name="push_restrict_region_text">
プッシュç¦æ­¢ (地域設定優先)
</panel.string>
+ <panel.string name="see_avs_text">
+ ã“ã®åŒºç”»ã«ã„ã‚‹ä½äººã¨ä¼šã£ã¦ãƒãƒ£ãƒƒãƒˆã™ã‚‹
+ </panel.string>
<text name="allow_label">
ä»–ã®ä½äººã¸ã®è¨±å¯ï¼š
</text>
@@ -372,6 +375,10 @@
スナップショット:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <text name="allow_label5">
+ ä»–ã®åŒºç”»ã«ã„ã‚‹ä½äººã¸ã®è¨±å¯ï¼š
+ </text>
+ <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã‚’表示" name="SeeAvatarsCheck" tool_tip="ä»–ã®åŒºç”»ã®ä½äººãŒã€ã“ã®åŒºç”»ã«ã„ã‚‹ä½äººã«ä¼šã£ã¦ãƒãƒ£ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚’許å¯ã—ã€ã‚ãªãŸã‚‚ãれらä½äººã«ä¼šã£ã¦ãƒãƒ£ãƒƒãƒˆã§ãるよã†ã«ã—ã¾ã™ã€‚"/>
<text name="landing_point">
ç€åœ°ç‚¹: [LANDING]
</text>
@@ -428,6 +435,11 @@
サウンド:
</text>
<check_box label="ジェスãƒãƒ£ãƒ¼ã¨ã‚ªãƒ–ジェクトã®éŸ³ã‚’ã“ã®åŒºç”»ã ã‘ã«é™å®šã™ã‚‹" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ ã‚¢ãƒã‚¿ãƒ¼ã®ã‚µã‚¦ãƒ³ãƒ‰ï¼š
+ </text>
+ <check_box label="全員" name="all av sound check"/>
+ <check_box label="グループ" name="group av sound check"/>
<text name="Voice settings:">
ボイス:
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml
index 8cb67ca521..6865409e7a 100644
--- a/indra/newview/skins/default/xui/ja/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/ja/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="グリッドオプション">
- <spinner label="グリッドå˜ä½ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰" name="GridResolution"/>
- <spinner label="グリッド゙範囲(メートル)" name="GridDrawSize"/>
+ <floater.string name="grid_screen_text">
+ ç”»é¢
+ </floater.string>
+ <floater.string name="grid_local_text">
+ ローカル
+ </floater.string>
+ <floater.string name="grid_world_text">
+ 世界
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ リファレンス
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ アタッãƒãƒ¡ãƒ³ãƒˆ
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="グリッドã®ä¸é€æ˜Žåº¦">
+ モード
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="オブジェクトã®é…ç½®ã«ä½¿ã†ã‚°ãƒªãƒƒãƒ‰ãƒ«ãƒ¼ãƒ©ã‚’é¸æŠž">
+ <combo_box.item label="インワールドグリッド" name="World"/>
+ <combo_box.item label="ローカルグリッド" name="Local"/>
+ <combo_box.item label="リファレンスグリッド" name="Reference"/>
+ </combo_box>
+ <spinner label="å˜ä½ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰" name="GridResolution"/>
+ <spinner label="範囲(メートル)" name="GridDrawSize"/>
<check_box label="より細ã‹ã„å˜ä½ã§ã‚¹ãƒŠãƒƒãƒ—フィット" name="GridSubUnit"/>
<check_box label="横断é¢ã‚’表示" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="グリッドã®ä¸é€æ˜Žåº¦">
diff --git a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
deleted file mode 100644
index b0949cd4e0..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="デイサイクル編集">
- <tab_container name="Day Cycle Tabs">
- <panel label="デイサイクル" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 深夜 12時
- </text>
- <text name="WL3am">
- åˆå‰ 3時
- </text>
- <text name="WL6am">
- åˆå‰ 6時
- </text>
- <text name="WL9amHash">
- åˆå‰ 9時
- </text>
- <text name="WL12pmHash">
- æ­£åˆ 12時
- </text>
- <text name="WL3pm">
- åˆå¾Œ 3時
- </text>
- <text name="WL6pm">
- åˆå¾Œ 6時
- </text>
- <text name="WL9pm">
- åˆå¾Œ 9時
- </text>
- <text name="WL12am2">
- 深夜 12時
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="キーã®è¿½åŠ " label_selected="キーã®è¿½åŠ " name="WLAddKey"/>
- <button label="キーã®å‰Šé™¤" label_selected="キーã®å‰Šé™¤" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- キーフレームã®è¨­å®šï¼š
- </text>
- <text name="WLCurKeyTimeText">
- キータイム:
- </text>
- <spinner label="時間" name="WLCurKeyHour"/>
- <spinner label="分" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- キーã®äº‹å‰è¨­å®šï¼š
- </text>
- <combo_box label="事å‰è¨­å®š" name="WLKeyPresets"/>
- <text name="DayCycleText">
- スナップ:
- </text>
- <combo_box label="5 分" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- サイクルã®é•·ã•ï¼š
- </text>
- <spinner label="時間" name="WLLengthOfDayHour"/>
- <spinner label="分" name="WLLengthOfDayMin"/>
- <spinner label="秒" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- プレビュー:
- </text>
- <button label="å†ç”Ÿ" label_selected="å†ç”Ÿ" name="WLAnimSky"/>
- <button label="åœæ­¢" label_selected="åœæ­¢" name="WLStopAnimSky"/>
- <button label="ä¸å‹•ç”£ã®æ™‚刻を使用" label_selected="ä¸å‹•ç”£ã®æ™‚刻ã«å¤‰æ›´" name="WLUseLindenTime"/>
- <button label="デイテストをä¿å­˜" label_selected="デイテストをä¿å­˜" name="WLSaveDayCycle"/>
- <button label="デイテストをロード" label_selected="デイテストをロード" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..eb39d1b336
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="環境ã®äº‹å‰è¨­å®šã‚’削除">
+ <string name="title_water">
+ æ°´ã®äº‹å‰è¨­å®šã‚’削除
+ </string>
+ <string name="title_sky">
+ 空ã®äº‹å‰è¨­å®šã‚’削除
+ </string>
+ <string name="title_day_cycle">
+ デイサイクルを削除
+ </string>
+ <string name="label_water">
+ 事å‰è¨­å®šï¼š
+ </string>
+ <string name="label_sky">
+ 事å‰è¨­å®šï¼š
+ </string>
+ <string name="label_day_cycle">
+ デイサイクル:
+ </string>
+ <string name="msg_confirm_deletion">
+ é¸æŠžã•ã‚ŒãŸäº‹å‰è¨­å®šã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
+ </string>
+ <string name="msg_sky_is_referenced">
+ デイサイクルã®å‚照先ã¨ã—ã¦ä½¿ã‚ã‚Œã¦ã„る事å‰è¨­å®šã¯å‰Šé™¤ã§ãã¾ã›ã‚“。
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="label">
+ 事å‰è¨­å®šï¼š
+ </text>
+ <button label="削除" name="delete"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..fd601672b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="デイサイクルを編集">
+ <string name="title_new">
+ æ–°ãŸãªãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã‚’作æˆ
+ </string>
+ <string name="title_edit">
+ デイサイクルを編集
+ </string>
+ <string name="hint_new">
+ æ–°ã—ã„デイサイクルã«åå‰ã‚’ã¤ã‘ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="hint_edit">
+ 自分ã§ä½œæˆã—ãŸãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="label">
+ 事å‰è¨­å®šã®åå‰ï¼š
+ </text>
+ <text name="note">
+ 注æ„:自分ã§ä½œæˆã—ãŸäº‹å‰è¨­å®šã®åå‰ã‚’変更ã™ã‚‹ã¨ã€æ–°ã—ã„事å‰è¨­å®šãŒåˆ¥ã«ä½œæˆã•ã‚Œã‚‹ã ã‘ã§ã€å…ƒã®äº‹å‰è¨­å®šã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。
+ </text>
+ <text name="hint_item1">
+ - 特定ã®ç©ºã®è¨­å®šã‚„時間を編集ã™ã‚‹ã«ã¯ã‚¿ãƒ–ã‚’1ã¤ã‚¯ãƒªãƒƒã‚¯ã—ã¾ã™ã€‚
+ </text>
+ <text name="hint_item2">
+ - 移行時間を設定ã™ã‚‹ã«ã¯ã‚¿ãƒ–をクリックã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚
+ </text>
+ <text name="hint_item3">
+ - デイサイクルをプレビューã™ã‚‹ã«ã¯ã‚¹ã‚¯ãƒ©ãƒãƒ¼ã‚’使ã„ã¾ã™ã€‚
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="キーã®è¿½åŠ " label_selected="キーã®è¿½åŠ " name="WLAddKey"/>
+ <button label="キーã®å‰Šé™¤" label_selected="キーã®å‰Šé™¤" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 12am
+ </text>
+ <text name="WL3am">
+ 3am
+ </text>
+ <text name="WL6am">
+ 6am
+ </text>
+ <text name="WL9amHash">
+ 9am
+ </text>
+ <text name="WL12pmHash">
+ 12pm
+ </text>
+ <text name="WL3pm">
+ 3pm
+ </text>
+ <text name="WL6pm">
+ 6pm
+ </text>
+ <text name="WL9pm">
+ 9pm
+ </text>
+ <text name="WL12am2">
+ 12am
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ 空ã®è¨­å®šï¼š
+ </text>
+ <combo_box label="事å‰è¨­å®š" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ 時間:
+ </text>
+ <time name="time" value="6:00 AM"/>
+ <check_box label="ã“れを新ã—ã„デイサイクルã«ã™ã‚‹" name="make_default_cb"/>
+ <button label="ä¿å­˜" name="save"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..68d0c70baa
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="空ã®äº‹å‰è¨­å®šã‚’編集">
+ <string name="title_new">
+ æ–°ã—ã„空ã®äº‹å‰è¨­å®šã‚’作æˆ
+ </string>
+ <string name="title_edit">
+ 空ã®äº‹å‰è¨­å®šã‚’編集
+ </string>
+ <string name="hint_new">
+ æ–°ã—ã„事å‰è¨­å®šã«åå‰ã‚’ã¤ã‘ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="hint_edit">
+ 空ã®äº‹å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="hint">
+ 事å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </text>
+ <text name="label">
+ 事å‰è¨­å®šã®åå‰ï¼š
+ </text>
+ <text name="note">
+ 注æ„:自分ã§ä½œæˆã—ãŸäº‹å‰è¨­å®šã®åå‰ã‚’変更ã™ã‚‹ã¨ã€æ–°ã—ã„事å‰è¨­å®šãŒåˆ¥ã«ä½œæˆã•ã‚Œã‚‹ã ã‘ã§ã€å…ƒã®äº‹å‰è¨­å®šã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="大気" name="Atmosphere">
+ <text name="BHText">
+ 空ã®é…色
+ </text>
+ <text name="BDensText">
+ 空ã¨é æ™¯ã®éœ²å…‰
+ </text>
+ <text name="BDensText2">
+ 空ã®é…色ã¨æ¿ƒåº¦
+ </text>
+ <text name="HDText">
+ 大気ã®ä¸é€æ˜Žåº¦
+ </text>
+ <text name="DensMultText">
+ 大気ã®ä¸é€æ˜Žåº¦ã®å¢—å¹…
+ </text>
+ <text name="WLDistanceMultText">
+ 視界ã®å¢—å¹…
+ </text>
+ <text name="MaxAltText">
+ 最大高度
+ </text>
+ </panel>
+ <panel label="ライティング" name="Lighting">
+ <text name="SLCText">
+ 太陽/月ã®è‰²
+ </text>
+ <text name="WLAmbientText">
+ 風
+ </text>
+ <text name="SunGlowText">
+ 太陽ã®è¼ã
+ </text>
+ <slider label="焦点" name="WLGlowB"/>
+ <slider label="サイズ" name="WLGlowR"/>
+ <text name="WLStarText">
+ 星ã®è¼ã
+ </text>
+ <text name="SceneGammaText">
+ 風景ガンマ
+ </text>
+ <text name="TODText">
+ 太陽/月ã®ä½ç½®
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 12am
+ </text>
+ <text name="WL6am">
+ 6am
+ </text>
+ <text name="WL12pmHash">
+ 12pm
+ </text>
+ <text name="WL6pm">
+ 6pm
+ </text>
+ <text name="WL12am2">
+ 12am
+ </text>
+ <time name="WLDayTime" value="6:00 AM"/>
+ <text name="WLEastAngleText">
+ æ±ã®è§’度
+ </text>
+ </panel>
+ <panel label="雲" name="Clouds">
+ <text name="WLCloudColorText">
+ 雲ã®è‰²
+ </text>
+ <text name="WLCloudColorText2">
+ 雲ã®XY/密度
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ 雲ã®é‡
+ </text>
+ <text name="WLCloudScaleText">
+ 雲ã®ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="WLCloudDetailText">
+ 雲ã®è©³ç´°ï¼ˆXY/密度)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ 雲ã®ç§»å‹•é€Ÿåº¦ï¼ˆXæ–¹å‘)
+ </text>
+ <check_box label="ロック" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ 雲ã®ç§»å‹•é€Ÿåº¦ï¼ˆY æ–¹å‘)
+ </text>
+ <check_box label="ロック" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="ã“ã®äº‹å‰è¨­å®šã‚’æ–°ã—ã„空ã®è¨­å®šã«ã™ã‚‹" name="make_default_cb"/>
+ <button label="ä¿å­˜" name="save"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..eddfbd4298
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="æ°´ã®äº‹å‰è¨­å®šã‚’編集">
+ <string name="title_new">
+ æ–°ã—ã„æ°´ã®äº‹å‰è¨­å®šã‚’作æˆ
+ </string>
+ <string name="title_edit">
+ æ°´ã®äº‹å‰è¨­å®šã‚’編集
+ </string>
+ <string name="hint_new">
+ æ–°ã—ã„事å‰è¨­å®šã«åå‰ã‚’ã¤ã‘ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="hint_edit">
+ æ°´ã®äº‹å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="hint">
+ 事å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </text>
+ <text name="label">
+ 事å‰è¨­å®šã®åå‰ï¼š
+ </text>
+ <text name="note">
+ 注æ„:自分ã§ä½œæˆã—ãŸäº‹å‰è¨­å®šã®åå‰ã‚’変更ã™ã‚‹ã¨ã€æ–°ã—ã„事å‰è¨­å®šãŒåˆ¥ã«ä½œæˆã•ã‚Œã‚‹ã ã‘ã§ã€å…ƒã®äº‹å‰è¨­å®šã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ 水中ã®ãƒ•ã‚©ã‚°åŠ¹æžœã®è‰²
+ </text>
+ <text name="water_fog_density_label">
+ 水中ã®é€æ˜Žåº¦æŒ‡æ•°
+ </text>
+ <text name="underwater_fog_modifier_label">
+ 水中ã®ãƒ•ã‚©ã‚°åŠ¹æžœåŠ æ¸›
+ </text>
+ <text name="BHText">
+ 大波ã®æ–¹å‘
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ ã•ã–æ³¢ã®å射スケール
+ </text>
+ <text name="HDText">
+ フレãƒãƒ«ãƒ»ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="FresnelOffsetText">
+ フレãƒãƒ«ãƒ»ã‚ªãƒ•ã‚»ãƒƒãƒˆ
+ </text>
+ <text name="BHText2">
+ å°æ³¢ã®æ–¹å‘
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ æ°´é¢ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="WaterScaleBelowText">
+ 水中ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="MaxAltText">
+ ä¸é€æ˜Žåº¦ã®å¢—å¹…
+ </text>
+ <text name="BHText3">
+ ノーマル・マップ
+ </text>
+ </panel>
+ <check_box label="ã“ã®äº‹å‰è¨­å®šã‚’æ–°ã—ã„æ°´ã®è¨­å®šã«ã™ã‚‹" name="make_default_cb"/>
+ <button label="ä¿å­˜" name="save"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_env_settings.xml b/indra/newview/skins/default/xui/ja/floater_env_settings.xml
deleted file mode 100644
index 1d5f26a6eb..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_env_settings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="自然環境エディター">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- 時刻
- </text>
- <text name="EnvTimeText2">
- æ­£åˆ 12:00
- </text>
- <text name="EnvCloudText">
- 雲ã®é‡
- </text>
- <text name="EnvWaterColorText">
- æ°´ã®è‰²
- </text>
- <color_swatch name="EnvWaterColor" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
- <text name="EnvWaterFogText">
- 水中照度
- </text>
- <button label="ä¸å‹•ç”£ã®æ™‚刻を使用" name="EnvUseEstateTimeButton"/>
- <button label="空ã®é«˜åº¦ãªè¨­å®š" name="EnvAdvancedSkyButton"/>
- <button label="æ°´ã®é«˜åº¦ãªè¨­å®š" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_environment_settings.xml b/indra/newview/skins/default/xui/ja/floater_environment_settings.xml
new file mode 100644
index 0000000000..0e3803119f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="自然環境ã®è¨­å®š">
+ <text name="note">
+ ビューワã®è‡ªç„¶ç’°å¢ƒã®è¨­å®šã¯ä»¥ä¸‹ã®ã‚ªãƒ—ションを使ã£ã¦ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãã¾ã™ã€‚
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="リージョンã®è¨­å®šã‚’使用" name="use_region_settings"/>
+ <radio_item label="自然環境をカスタマイズ" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ 注æ„:カスタム設定ã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è¦‹ãˆã¾ã›ã‚“。
+ </text>
+ <text name="water_settings_title">
+ æ°´ã®è¨­å®š
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ 空 / デイサイクル
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="空ã®å›ºå®š" name="my_sky_settings"/>
+ <radio_item label="デイサイクル" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
index 5eb141a28c..07667bb697 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
待機状態
</string>
+ <string name="status_parse_error">
+ Dae ã«å•é¡ŒãŒè¦‹ã¤ã‹ã‚Šã¾ã—㟠- 詳細ã«ã¤ã„ã¦ã¯ãƒ­ã‚°ã‚’ã”å‚ç…§ãã ã•ã„。
+ </string>
<string name="status_reading_file">
ローディング...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
エラー:頂点ã®æ•°ãŒ65534を超éŽã—ãŸã®ã§ä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚
</string>
+ <string name="bad_element">
+ エラー:è¦ç´ ãŒç„¡åŠ¹ã§ã™
+ </string>
<string name="high">
高
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
å˜ç´”化
</string>
+ <string name="tbd">
+ 未定
+ </string>
<text name="name_label">
åå‰ï¼š
</text>
@@ -74,23 +83,26 @@
æ画詳細度:最低
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
- <text name="physics cost">
- 物ç†åŠ¹æžœæ–™é‡‘: [COST]
- </text>
- <text name="upload fee">
- アップロード手数料:該当ãªã—
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ 警告:
+ </text>
+ <text name="warning_message">
+ ã“ã®ãƒ¢ãƒ‡ãƒ«ã‚’ Second Life サーãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。メッシュモデルã®ã‚¢ãƒƒãƒ—ロード手順ã«ã¤ã„ã¦ã¯ [[VURL] ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„]。
+ </text>
+ <text name="weights_text">
+ ダウンロード:
+物ç†æ¼”算:
+サーãƒãƒ¼è² è·ï¼š
+
+プリムæ›ç®—:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="デフォルト" name="reset_btn" tool_tip="デフォルトã«ãƒªã‚»ãƒƒãƒˆ"/>
- <button label="アップロード" name="ok_btn" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ロード"/>
- <button label="å–り消ã—" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="æ画詳細度" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ アップロード料金:L$ [FEE]
+ </text>
+ <button label="デフォルトã«è¨­å®š" name="reset_btn" tool_tip="デフォルトã«è¨­å®š"/>
+ <button label="ウェイトã¨æ–™é‡‘ã®è¨ˆç®—" name="calculate_btn" tool_tip="ウェイトã¨æ–™é‡‘ã®è¨ˆç®—"/>
+ <button label="アップロード" name="ok_btn" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ロード"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
index a785172f20..2f336fcbde 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="モデルウィザードをアップロード">
<button label="5. アップロード" name="upload_btn"/>
<button label="4. 確èª" name="review_btn"/>
- <button label="3. 物ç†åŠ¹æžœ" name="physics2_btn"/>
<button label="3. 物ç†åŠ¹æžœ" name="physics_btn"/>
<button label="2. 最é©åŒ–" name="optimize_btn"/>
<button label="1. ファイルをé¸æŠž" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- モデルをアップロード
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ モデルファイルをé¸æŠž
</text>
</panel>
- <text name="description">
- ã“ã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã‚’使ã†ã¨ã€ãƒ¡ãƒƒã‚·ãƒ¥ãƒ¢ãƒ‡ãƒ«ã‚’ç°¡å˜ã«Second Lifeã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ã¾ãšã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚Second Life 㯠COLLADA (.dae) ファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
- </text>
- <panel name="content">
- <text name="Cache location">
- ファイルå:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ 上級ユーザーã®å ´åˆï¼š3D コンテンツã®åˆ¶ä½œãƒ„ールを使ã„慣れãŸæ–¹ã¯ã€é«˜åº¦ãªã‚¢ãƒƒãƒ—ローダーもãŠè©¦ã—ãã ã•ã„。
+ </text>
+ <button label="アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ アップロードã™ã‚‹ãƒ¢ãƒ‡ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®é¸æŠž
</text>
<button label="å‚ç…§" label_selected="å‚ç…§" name="browse"/>
+ <text name="support_collada_text">
+ Second Life 㯠COLLADA (.dae) ファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+ </text>
+ <text name="dimensions_label">
+ サイズ(メートル):
+ </text>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ 警告:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ ã“ã®ãƒ¢ãƒ‡ãƒ«ã‚’ Second Life サーãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ãŸã‚ã®æœ€çµ‚手順を実行ã§ãã¾ã›ã‚“。[secondlife:///app/floater/learn_more ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦]ã€ãƒ¡ãƒƒã‚·ãƒ¥ãƒ¢ãƒ‡ãƒ«ã‚’アップロードã§ãるよã†ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’設定ã—ã¦ãã ã•ã„。
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- 最é©åŒ–
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ モデルを最é©åŒ–
</text>
</panel>
- <text name="description">
- ウィザードãŒãƒ¢ãƒ‡ãƒ«ã‚’最é©åŒ–ã—ã€ãƒ‘フォーマンスを改善ã—ã¾ã—ãŸã€‚以下ã§æœ€é©åŒ–プロセスã®çµæžœã‚’変更ã™ã‚‹ã‹ã€ã€Œæ¬¡ã¸ã€ã‚’クリックã—ã¦ç¶šã‘ã¾ã™ã€‚
+ <text name="optimize_hint">
+ パフォーマンスをé‡è¦–ã—ã¦ãƒ¢ãƒ‡ãƒ«ã‚’最é©åŒ–ã—ã¾ã—ãŸã€‚å¿…è¦ã«å¿œã˜ã¦èª¿æ•´ã—ã¦ãã ã•ã„。
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ 次ã®æ画詳細度を作æˆ
+ </text>
<text name="high_detail_text">
次ã®æ画詳細度を作æˆï¼šé«˜
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- モデルã®ãƒ—レビュー:
+ <text name="optimize_performance_text">
+ パフォーマンス
+ </text>
+ <text name="optimize_faster_rendering_text">
+ レンダリング速度ã®å‘上
+詳細度ã®ä½Žä¸‹
+プリムæ›ç®—ウェイトã®è»½æ¸›
+ </text>
+ <text name="optimize_accuracy_text">
+ 正確ã•
+ </text>
+ <text name="optimize_slower_rendering_text">
+ レンダリング速度ã®ä½Žä¸‹
+詳細化
+プリムæ›ç®—ウェイトã®å¢—加
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
</text>
- <combo_box name="preview_lod_combo2" tool_tip="プレビュー表示ã®LOD設定">
- <combo_item name="high">
- 高
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="ジオメトリをå†è¨ˆç®—" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ ジオメトリã®ãƒ—レビュー
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="プレビュー表示㮠LOD 設定">
+ <combo_item name="preview_lod_high">
+ 高ã„詳細度
</combo_item>
- <combo_item name="medium">
- 中
+ <combo_item name="preview_lod_medium">
+ 中ã®è©³ç´°åº¦
</combo_item>
- <combo_item name="low">
- 低
+ <combo_item name="preview_lod_low">
+ 低ã„詳細度
</combo_item>
- <combo_item name="lowest">
- 最低
+ <combo_item name="preview_lod_lowest">
+ 最低ã®è©³ç´°åº¦
</combo_item>
</combo_box>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- 物ç†åŠ¹æžœ
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ 物ç†ä½œç”¨ã®èª¿æ•´
</text>
</panel>
- <text name="description">
- ウィザードãŒä½œæˆã™ã‚‹å®Ÿåƒã«ã‚ˆã£ã¦ã€ã‚ªãƒ–ジェクトãŒä»–ã®ã‚ªãƒ–ジェクトやアãƒã‚¿ãƒ¼ã¨ã©ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ã‚·ãƒ§ãƒ³ã™ã‚‹ã‹ãŒæ±ºã¾ã‚Šã¾ã™ã€‚オブジェクトã®ç”¨é€”ã«æœ€é©ãªæ画詳細度ã«ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’設定ã—ã¦ãã ã•ã„:
+ <text name="physics_hint">
+ モデルã®å¤–殻構造ã®ã‚·ã‚§ã‚¤ãƒ—ã¯å¼Šç¤¾ãŒä½œæˆã—ã¾ã™ã€‚モデルã®ç›®çš„ã«å¿œã˜ã¦ã‚·ã‚§ã‚¤ãƒ—ã®è©³ç´°åº¦ã‚’調整ã—ã¦ãã ã•ã„。
</text>
- <panel name="content">
- <text name="streaming cost">
- リソース料金: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ パフォーマンス
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- 物ç†åŠ¹æžœ
+ <text name="physics_faster_rendering_text">
+ レンダリング速度ã®å‘上
+詳細度ã®ä½Žä¸‹
+プリムæ›ç®—ウェイトã®è»½æ¸›
</text>
- </panel>
- <text name="description">
- 下ã®å®Ÿåƒã‚’プレビューã—ã€ã€Œæ¬¡ã¸ã€ã‚’クリックã—ã¦ç¶šã‘ã¾ã™ã€‚実åƒã‚’修正ã™ã‚‹ã«ã¯ã€Œæˆ»ã‚‹ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚
- </text>
- <panel name="content">
- <text name="lod_label">
- モデルã®ãƒ—レビュー:
+ <text name="physics_accuracy_text">
+ 正確
+ </text>
+ <text name="physics_slower_dendering_text">
+ レンダリング速度ã®ä½Žä¸‹
+詳細化
+プリムæ›ç®—ウェイトã®å¢—加
</text>
- <combo_box name="preview_lod_combo3" tool_tip="プレビュー表示ã®LOD設定">
- <combo_item name="high">
- 高
+ <text name="physics_example_1">
+ 例:
+å‹•ãオブジェクト
+飛行オブジェクト
+車
+ </text>
+ <text name="physics_example_2">
+ 例:
+å°ã•ãªé™æ­¢ã‚ªãƒ–ジェクト
+比較的詳細度ã®ä½Žã„オブジェクト
+シンプルãªå®¶å…·
+ </text>
+ <text name="physics_example_3">
+ 例:
+é™æ­¢ã‚ªãƒ–ジェクト
+詳細ãªã‚ªãƒ–ジェクト
+建物
+ </text>
+ <button label="物ç†æ¼”算ウェイトをå†è¨ˆç®—" name="recalculate_physics_btn"/>
+ <button label="å†è¨ˆç®—中..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ 物ç†ä½œç”¨ã®ãƒ—レビュー
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="プレビュー表示㮠LOD 設定">
+ <combo_item name="preview_lod2_high">
+ 高ã„詳細度
</combo_item>
- <combo_item name="medium">
- 中
+ <combo_item name="preview_lod2_medium">
+ 中ã®è©³ç´°åº¦
</combo_item>
- <combo_item name="low">
- 低
+ <combo_item name="preview_lod2_low">
+ 低ã„詳細度
</combo_item>
- <combo_item name="lowest">
- 最低
+ <combo_item name="preview_lod2_lowest">
+ 最低ã®è©³ç´°åº¦
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
確èª
</text>
</panel>
- <text name="description">
- 以下ã®è©³ç´°ã‚’確èªã—ã¦ã‹ã‚‰ã€ã€Œã‚¢ãƒƒãƒ—ロードã€ã‚’クリックã™ã‚‹ã¨ãƒ¢ãƒ‡ãƒ«ãŒã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã™ã€‚「アップロードã€ã‚’クリックã—ãŸéš›ã«ã€æ–™é‡‘ãŒã‚ãªãŸã® L$ 残高ã‹ã‚‰å·®ã—引ã‹ã‚Œã¾ã™ã€‚
- </text>
- <panel name="content">
- <text name="lod_label">
- モデルã®ãƒ—レビュー:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ 区画/リージョンã¸ã®è² è·ï¼š[EQUIV] プリムæ›ç®—値
</text>
- <combo_box name="preview_lod_combo" tool_tip="プレビュー表示ã®LOD設定">
- <combo_item name="high">
- 高
- </combo_item>
- <combo_item name="medium">
- 中
- </combo_item>
- <combo_item name="low">
- 低
- </combo_item>
- <combo_item name="lowest">
- 最低
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ L$ [FEE] ã®ã‚¢ãƒƒãƒ—ロード料金ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«è«‹æ±‚ã•ã‚Œã¾ã™ã€‚
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ アップロードボタンをクリックã™ã‚‹ã¨ã€ãƒ¢ãƒ‡ãƒ«ã«å«ã¾ã‚Œã‚‹ãƒžãƒ†ãƒªã‚¢ãƒ«ã®æ‰€æœ‰æ¨©ã‚„使用許å¯ã‚’所æŒã™ã‚‹ã“ã¨ã‚’èªã‚ãŸã“ã¨ã«ãªã‚Šã¾ã™ã€‚
</text>
</panel>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
- <text name="physics cost">
- 物ç†åŠ¹æžœæ–™é‡‘: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- アップロード完了ï¼
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ アップロード完了
</text>
</panel>
- <text name="description">
- ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ãƒ¢ãƒ‡ãƒ«ãŒã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã—ãŸã€‚アップロードã•ã‚ŒãŸãƒ¢ãƒ‡ãƒ«ã¯ã€æŒã¡ç‰©ã®ã€Œã‚ªãƒ–ジェクトã€ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚ã‚Šã¾ã™ã€‚
+ <text name="model_uploaded_text">
+ モデルãŒã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã—ãŸã€‚
+ </text>
+ <text name="inventory_text">
+ ãã‚Œã¯æŒã¡ç‰©ã®ã€Œã‚ªãƒ–ジェクトã€ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚ã‚Šã¾ã™ã€‚
+ </text>
+ <text name="charged_fee">
+ ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã« L$ [FEE] ãŒè«‹æ±‚ã•ã‚Œã¾ã—ãŸã€‚
</text>
</panel>
<button label="&lt;&lt; 戻る" name="back"/>
<button label="次ã¸&gt;&gt;" name="next"/>
+ <button label="ウェイトã¨æ–™é‡‘ã®è¨ˆç®— &gt;&gt;" name="calculate"/>
+ <button label="計算中..." name="calculating"/>
<button label="アップロード" name="upload" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ロード"/>
<button label="å–り消ã—" name="cancel"/>
<button label="é–‰ã˜ã‚‹" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
待機状態
</string>
+ <string name="status_parse_error">
+ Dae ã«å•é¡ŒãŒè¦‹ã¤ã‹ã‚Šã¾ã—㟠- 詳細ã«ã¤ã„ã¦ã¯ãƒ­ã‚°ã‚’ã”å‚ç…§ãã ã•ã„。
+ </string>
<string name="status_reading_file">
ローディング...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
エラー:頂点ã®æ•°ãŒ65534を超éŽã—ãŸã®ã§ä¸­æ­¢ã•ã‚Œã¾ã—ãŸã€‚
</string>
+ <string name="bad_element">
+ エラー:è¦ç´ ãŒç„¡åŠ¹ã§ã™
+ </string>
<string name="high">
高
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_search.xml b/indra/newview/skins/default/xui/ja/floater_search.xml
index 289098a343..0723be0068 100644
--- a/indra/newview/skins/default/xui/ja/floater_search.xml
+++ b/indra/newview/skins/default/xui/ja/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="検索">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
ローディング...
</floater.string>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index f7d77d351e..a8b5febd54 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
土地をクリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦é¸æŠž
</floater.string>
- <floater.string name="grid_screen_text">
- ç”»é¢
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] 個ã®ã‚ªãƒ–ジェクト([PRIM_COUNT] 個ã®ãƒ—リム [PE_STRING])ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã™
</floater.string>
- <floater.string name="grid_local_text">
- ローカル
- </floater.string>
- <floater.string name="grid_world_text">
- インワールド
- </floater.string>
- <floater.string name="grid_reference_text">
- レファレンス
- </floater.string>
- <floater.string name="grid_attachment_text">
- アタッãƒãƒ¡ãƒ³ãƒˆ
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] プリムæ›ç®—値
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
<button label="" label_selected="" name="button move" tool_tip="å‹•ã‹ã™"/>
@@ -66,21 +57,13 @@
<check_box label="リンク部分を編集" name="checkbox edit linked parts"/>
<button label="リンク" name="link_btn"/>
<button label="リンクを外ã™" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="ã“ã®ã‚ªãƒ–ジェクトã«ã‹ã‹ã‚‹ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆã‚’表示">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="両å´ã‚’延ã°ã™" name="checkbox uniform label">
両å´ã‚’延ã°ã™
</text>
<check_box initial_value="true" label="テクスãƒãƒ£ã‚’引ã延ã°ã™" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="グリッドã«ã‚¹ãƒŠãƒƒãƒ—" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="オブジェクトã®é…ç½®ã«ä½¿ã†ã‚°ãƒªãƒƒãƒ‰ãƒ«ãƒ¼ãƒ©ã‚’é¸æŠžã—ã¾ã™" >
- <combo_box.item label="インワールドグリッド" name="World"/>
- <combo_box.item label="ローカルグリッド" name="Local"/>
- <combo_box.item label="リファレンスグリッド" name="Reference"/>
- </combo_box>
- <button label="オプション" label_selected="オプション" name="Options..." tool_tip="グリッドオプションを表示ã—ã¾ã™"/>
+ <check_box initial_value="true" label="スナップ" name="checkbox snap to grid"/>
+ <button label="オプション..." label_selected="オプション" name="Options..." tool_tip="グリッドオプションを表示ã—ã¾ã™"/>
<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
@@ -119,25 +102,13 @@
強度
</text>
<button label="é©ç”¨" label_selected="é©ç”¨" name="button apply to selection" tool_tip="é¸æŠžã—ãŸåœŸåœ°ã‚’修正ã—ã¾ã™"/>
- <text name="obj_count">
- オブジェクト: [COUNT]
- </text>
- <text name="prim_count">
- プリム: [COUNT]
- </text>
- <text name="linked_set_count">
- リンクセット:[COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="[prims] / [physics complexity] ã¨ã—ã¦ç¾åœ¨é¸æŠžã•ã‚Œã¦ã„るリンクセットã®ã‚³ã‚¹ãƒˆ">
- 料金: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- オブジェクト: [COUNT]
+ <text name="selection_empty">
+ 何もé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。
</text>
- <text name="object_cost" tool_tip="[prims] / [physics complexity] ã¨ã—ã¦ç¾åœ¨é¸æŠžã•ã‚Œã¦ã„るオブジェクトã®ã‚³ã‚¹ãƒˆ">
- 料金: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ 物ç†æ¼”算ウェイト [PHYS_WEIGHT]ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆ [DISP_WEIGHT]。
</text>
- <tab_container name="Object Info Tabs" >
+ <tab_container name="Object Info Tabs">
<panel label="一般" name="General">
<panel.string name="text deed continued">
譲渡
@@ -359,7 +330,6 @@
<combo_box.item label="トーラス" name="Torus"/>
<combo_box.item label="å¹³é¢" name="Plane"/>
<combo_box.item label="シリンダー" name="Cylinder"/>
- <combo_box.item label="メッシュ" name="Mesh"/>
</combo_box>
</panel>
<panel label="特徴" name="Features">
@@ -379,22 +349,22 @@
オブジェクトã®ç‰¹å¾´ã‚’編集:
</text>
<check_box label="フレキシブルパス" name="Flexible1D Checkbox Ctrl" tool_tip="Z 軸を中心ã«ã‚ªãƒ–ジェクトã®å±ˆæ›²ã‚’有効ã«ã—ã¾ã™ï¼ˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã®ã¿ï¼‰"/>
- <spinner label="柔軟性" name="FlexNumSections" />
- <spinner label="é‡åŠ›" name="FlexGravity" />
- <spinner label="ドラッグ" name="FlexFriction" />
- <spinner label="風" name="FlexWind" />
- <spinner label="ç·Šå¼µ" name="FlexTension" />
- <spinner label="X 軸方å‘ã®åŠ›" name="FlexForceX" />
- <spinner label="Y 軸方å‘ã®åŠ›" name="FlexForceY" />
- <spinner label="Z 軸方å‘ã®åŠ›" name="FlexForceZ" />
+ <spinner label="柔軟性" name="FlexNumSections"/>
+ <spinner label="é‡åŠ›" name="FlexGravity"/>
+ <spinner label="ドラッグ" name="FlexFriction"/>
+ <spinner label="風" name="FlexWind"/>
+ <spinner label="ç·Šå¼µ" name="FlexTension"/>
+ <spinner label="X 軸方å‘ã®åŠ›" name="FlexForceX"/>
+ <spinner label="Y 軸方å‘ã®åŠ›" name="FlexForceY"/>
+ <spinner label="Z 軸方å‘ã®åŠ›" name="FlexForceZ"/>
<check_box label="å…‰" name="Light Checkbox Ctrl" tool_tip="オブジェクトãŒç™ºå…‰ã—ã¾ã™"/>
<color_swatch label="" name="colorswatch" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
<texture_picker label="" name="light texture control" tool_tip="クリックã§æŠ•å½±ç”»ã‚’é¸æŠžã—ã¾ã™ï¼ˆé…延レンダリング有効時ã®ã¿ï¼‰"/>
- <spinner label="è¼åº¦" name="Light Intensity" />
+ <spinner label="è¼åº¦" name="Light Intensity"/>
<spinner label="FOV" name="Light FOV"/>
- <spinner label="åŠå¾„" name="Light Radius" />
+ <spinner label="åŠå¾„" name="Light Radius"/>
<spinner label="焦点" name="Light Focus"/>
- <spinner label="å¼±ã¾ã‚‹" name="Light Falloff" />
+ <spinner label="å¼±ã¾ã‚‹" name="Light Falloff"/>
<spinner label="環境" name="Light Ambiance"/>
<text name="label physicsshapetype">
実åƒã®ç¨®é¡žï¼š
@@ -411,7 +381,7 @@
</combo_box>
<spinner label="é‡åŠ›" name="Physics Gravity"/>
<spinner label="摩擦" name="Physics Friction"/>
- <spinner label="密度" name="Physics Density"/>
+ <spinner label="密度(100 kg/m^3)" name="Physics Density"/>
<spinner label="復元" name="Physics Restitution"/>
</panel>
<panel label="æ質" name="Texture">
@@ -496,18 +466,18 @@
</panel>
</panel>
<panel label="中身" name="Contents">
- <button label="æ–°ã—ã„スクリプト" label_selected="æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" name="button new script" />
- <button label="権é™" name="button permissions" />
+ <button label="æ–°ã—ã„スクリプト" label_selected="æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" name="button new script"/>
+ <button label="権é™" name="button permissions"/>
</panel>
</tab_container>
<panel name="land info panel">
<text name="label_parcel_info">
区画情報
</text>
- <text name="label_area_price" >
+ <text name="label_area_price">
価格: [AREA] 平方メートル L$ [PRICE]
</text>
- <text name="label_area" >
+ <text name="label_area">
é¢ç©ï¼š [AREA] 平方メートル
</text>
<button label="土地情報" label_selected="土地情報" name="button about land"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
index 4557815129..801b7a9db0 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(新登場ï¼ï¼‰
</string>
+ <string name="effect_Arena">
+ アリーナ
+ </string>
+ <string name="effect_Beast">
+ 野ç£
+ </string>
+ <string name="effect_Buff">
+ ãŒã£ã—ã‚Š
+ </string>
+ <string name="effect_Buzz">
+ ブザー
+ </string>
+ <string name="effect_Camille">
+ カミール
+ </string>
+ <string name="effect_Creepy">
+ 気味ã®æ‚ªã„
+ </string>
+ <string name="effect_CreepyBot">
+ 気味ã‚るボット
+ </string>
+ <string name="effect_Cyber">
+ サイãƒãƒ¼
+ </string>
+ <string name="effect_DeepBot">
+ ディープボット
+ </string>
+ <string name="effect_Demon">
+ デーモン
+ </string>
+ <string name="effect_Flirty">
+ æ°—ã®ã‚ã‚Šãã†ãª
+ </string>
+ <string name="effect_Foxy">
+ 魅惑的
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ ãƒãƒ­ã‚¦ã‚£ãƒ³_2010_ボーナス
+ </string>
+ <string name="effect_Helium">
+ ヘリウム
+ </string>
+ <string name="effect_Husky">
+ ãƒã‚¹ã‚­ãƒ¼
+ </string>
+ <string name="effect_Intercom">
+ インターホン
+ </string>
+ <string name="effect_Macho">
+ マッãƒãƒ§
+ </string>
+ <string name="effect_Micro">
+ ミクロ
+ </string>
+ <string name="effect_Mini">
+ ミニ
+ </string>
+ <string name="effect_Nano">
+ ナノ
+ </string>
+ <string name="effect_Nightmare">
+ 悪夢
+ </string>
+ <string name="effect_PopBot">
+ ãƒãƒƒãƒ—ボット
+ </string>
+ <string name="effect_Rachel">
+ レイãƒã‚§ãƒ«
+ </string>
+ <string name="effect_Radio">
+ ラジオ
+ </string>
+ <string name="effect_Robot">
+ ロボット
+ </string>
+ <string name="effect_Roxanne">
+ ロクサン
+ </string>
+ <string name="effect_Sabrina">
+ サブリナ
+ </string>
+ <string name="effect_Samantha">
+ サマンサ
+ </string>
+ <string name="effect_Sexy">
+ セクシー
+ </string>
+ <string name="effect_Shorty">
+ ãƒãƒ“
+ </string>
+ <string name="effect_Sneaky">
+ コソコソ
+ </string>
+ <string name="effect_Stallion">
+ 雄馬
+ </string>
+ <string name="effect_Sultry">
+ 艶ã‹ã—ã„
+ </string>
+ <string name="effect_Thunder">
+ サンダー
+ </string>
+ <string name="effect_Vixen">
+ 性悪ãª
+ </string>
+ <string name="effect_WhinyBot">
+ ä¸æ©Ÿå«Œãƒœãƒƒãƒˆ
+ </string>
<text name="preview_text">
プレビュー
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_water.xml b/indra/newview/skins/default/xui/ja/floater_water.xml
deleted file mode 100644
index fb64332e79..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_water.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="æ°´ã®é«˜åº¦ãªç·¨é›†">
- <floater.string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </floater.string>
- <text name="KeyFramePresetsText">
- æ°´ã®äº‹å‰è¨­å®šï¼š
- </text>
- <button label="æ–°è¦" label_selected="æ–°è¦" name="WaterNewPreset"/>
- <button label="ä¿å­˜" label_selected="ä¿å­˜" name="WaterSavePreset"/>
- <button label="削除" label_selected="削除" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="設定" name="Settings">
- <text name="BHText">
- 水中ã®ãƒ•ã‚©ã‚°åŠ¹æžœã®è‰²
- </text>
- <color_swatch name="WaterFogColor" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
- <text name="WaterFogDensText">
- 水中ã®é€æ˜Žåº¦æŒ‡æ•°
- </text>
- <text name="WaterUnderWaterFogModText">
- 水中ã®ãƒ•ã‚©ã‚°åŠ¹æžœåŠ æ¸›
- </text>
- <text name="BDensText">
- ã•ã–æ³¢ã®å射スケール
- </text>
- <slider label="1" name="WaterNormalScaleX"/>
- <slider label="2" name="WaterNormalScaleY"/>
- <slider label="3" name="WaterNormalScaleZ"/>
- <text name="HDText">
- フレãƒãƒ«ã®ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <text name="FresnelOffsetText">
- フレãƒãƒ«ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ
- </text>
- <text name="DensMultText">
- æ°´é¢ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <text name="WaterScaleBelowText">
- 水中ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <text name="MaxAltText">
- ä¸é€æ˜Žåº¦ã®å¢—å¹…
- </text>
- </panel>
- <panel label="ç”»åƒ" name="Waves">
- <text name="BHText">
- 大波ã®æ–¹å‘
- </text>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- å°æ³¢ã®æ–¹å‘
- </text>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- ノーマルマップ
- </text>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_windlight_options.xml b/indra/newview/skins/default/xui/ja/floater_windlight_options.xml
deleted file mode 100644
index feb94ef73e..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_windlight_options.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="空ã®é«˜åº¦ãªç·¨é›†">
- <text name="KeyFramePresetsText">
- 空ã®äº‹å‰è¨­å®šï¼š
- </text>
- <button label="æ–°è¦" label_selected="æ–°è¦" name="WLNewPreset"/>
- <button label="ä¿å­˜" label_selected="ä¿å­˜" name="WLSavePreset"/>
- <button label="削除" label_selected="削除" name="WLDeletePreset"/>
- <button label="デイサイクル編集" label_selected="デイサイクル編集" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="大気" name="Atmosphere">
- <text name="BHText">
- 空ã®é…色
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- 空ã¨é æ™¯ã®éœ²å…‰
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- 空ã®é…色ã¨æ¿ƒåº¦
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- 大気ã®ä¸é€æ˜Žåº¦
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- 大気ã®ä¸é€æ˜Žåº¦ã®å¢—å¹…
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- 視界ã®å¢—å¹…
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- 最大高度
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="ライティング" name="Lighting">
- <text name="SLCText">
- 太陽/月ã®è‰²
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- 太陽/月ã®ä½ç½®
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- アンビエント
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- æ±ã®è§’度
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- 太陽ã®è¼ã
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="フォーカス " name="WLGlowB"/>
- <slider label="サイズ " name="WLGlowR"/>
- <text name="SceneGammaText">
- 風景ガンマ
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- 星ã®è¼ã
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="雲" name="Clouds">
- <text name="WLCloudColorText">
- 雲ã®è‰²
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- 雲㮠XY/密度
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- 雲ã®é‡
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- 雲ã®ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- 雲ã®è©³ç´° (XY/密度)
- </text>
- <button label="?" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- 雲ã®ç§»å‹•é€Ÿåº¦ (X æ–¹å‘)
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="ロック" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- 雲ã®ç§»å‹•é€Ÿåº¦ (Y æ–¹å‘)
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="ロック" name="WLCloudLockY"/>
- <check_box label="従æ¥ã®é›²ã‚’æç”»" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml
index 265f3ebcd0..dca872e9b8 100644
--- a/indra/newview/skins/default/xui/ja/menu_login.xml
+++ b/indra/newview/skins/default/xui/ja/menu_login.xml
@@ -18,7 +18,7 @@
<menu_item_call label="利用è¦ç´„を表示" name="TOS"/>
<menu_item_call label="クリティカルメッセージを表示" name="Critical"/>
<menu_item_call label="メディアブラウザã®ãƒ†ã‚¹ãƒˆ" name="Web Browser Test"/>
- <menu_item_call label="Web コンテンツフローターã®ãƒ†ã‚¹ãƒˆ" name="Web Content Floater Test"/>
+ <menu_item_call label="Web コンテンツフローターã®ãƒ‡ãƒãƒƒã‚°ãƒ†ã‚¹ãƒˆ" name="Web Content Floater Debug Test"/>
<menu_item_check label="グリッドピッカーを表示ã™ã‚‹" name="Show Grid Picker"/>
<menu_item_call label="通知コンソールを表示ã™ã‚‹" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
index a31480158a..44c5438509 100644
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="最近ã®ç™ºè¨€è€…ã§ä¸¦ã¹æ›¿ãˆ" name="sort_by_recent_speakers"/>
<menu_item_check label="åå‰ã§ä¸¦ã¹æ›¿ãˆ" name="sort_name"/>
<menu_item_check label="è·é›¢ã§ä¸¦ã¹æ›¿ãˆ" name="sort_distance"/>
<menu_item_check label="人ã®ã‚¢ã‚¤ã‚³ãƒ³è¡¨ç¤º" name="view_icons"/>
+ <menu_item_check label="地図を表示" name="view_map"/>
<menu_item_call label="ブロックã•ã‚ŒãŸä½äººã¨ã‚ªãƒ–ジェクトを表示" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index ec9db02522..223c1e1f11 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="所属グループ" name="My Groups"/>
<menu_item_check label="è¿‘ãã®ãƒãƒ£ãƒƒãƒˆ" name="Nearby Chat"/>
<menu_item_call label="è¿‘ãã«ã„る人" name="Active Speakers"/>
+ <menu_item_check label="è¿‘ãã®ãƒœã‚¤ã‚¹" name="Nearby Voice"/>
</menu>
<menu label="世界" name="World">
<menu_item_check label="ミニマップ" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="æ­£åˆ" name="Noon"/>
<menu_item_call label="日没" name="Sunset"/>
<menu_item_call label="深夜" name="Midnight"/>
- <menu_item_call label="エステートタイム" name="Revert to Region Default"/>
- <menu_item_call label="自然環境エディター" name="Environment Editor"/>
+ </menu>
+ <menu label="自然環境エディター" name="Enviroment Editor">
+ <menu_item_call label="環境ã®è¨­å®š..." name="Enviroment Settings"/>
+ <menu label="æ°´ã®äº‹å‰è¨­å®š" name="Water Presets">
+ <menu_item_call label="æ–°ã—ã„事å‰è¨­å®š..." name="new_water_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’編集..." name="edit_water_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’削除..." name="delete_water_preset"/>
+ </menu>
+ <menu label="空ã®äº‹å‰è¨­å®š" name="Sky Presets">
+ <menu_item_call label="æ–°ã—ã„事å‰è¨­å®š..." name="new_sky_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’編集..." name="edit_sky_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’削除..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="デイã®äº‹å‰è¨­å®š" name="Day Presets">
+ <menu_item_call label="æ–°ã—ã„事å‰è¨­å®š..." name="new_day_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’編集..." name="edit_day_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’削除..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="制作" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="カメラã®è·é›¢ç§»å‹•ã‚’制é™ã—ãªã„" name="Disable Camera Distance"/>
<menu_item_check label="高解åƒåº¦ã‚¹ãƒŠãƒƒãƒ—ショット" name="HighResSnapshot"/>
<menu_item_check label="シャッター音ã¨ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãªã—ã§ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜ã™ã‚‹" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="圧縮ã—ã¦ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜ã™ã‚‹" name="CompressSnapshotsToDisk"/>
<menu label="パフォーマンスツール" name="Performance Tools">
<menu_item_call label="ラグ計測器" name="Lag Meter"/>
<menu_item_check label="統計ãƒãƒ¼" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
index 7a97538117..5334042dc9 100644
--- a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="アウトフットã®ç·¨é›†" name="edit"/>
<menu_item_call label="å–り外ã™" name="takeoff"/>
-</menu>
+ <menu_item_call label="アウトフィットã®ãƒªã‚¹ãƒˆã‚’クリップボードã«ã‚³ãƒ”ー" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index d63ca84035..6bff82bec4 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1590,6 +1590,11 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name ã‚’å‚ç…§ã—ã¦ãã ã
<button name="Cancel" text="å–り消ã—"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ [OFFERS] 回ã«ã‚ãŸã£ã¦ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚ã†ã¨ã—ã¾ã—ãŸãŒã€
+ãã‚Œã¯é™åº¦æ•° [LIMIT] を超ãˆã¦ã„ã¾ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
ç¾åœ¨åœ°ã«ä½äººã‚’ゴッドサモンã—ã¾ã™ã‹ï¼Ÿ
<form name="form">
@@ -2018,6 +2023,10 @@ Linden Lab
トラベルã€Webã€æ¤œç´¢ã®å±¥æ­´ã‚’ã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ ビューワã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’クリアã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
本当ã«ã‚¯ãƒƒã‚­ãƒ¼ã‚’クリアã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="ã¯ã„"/>
@@ -2043,48 +2052,30 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
ä¿å­˜ã•ã‚ŒãŸäº‹å‰è¨­å®šã‚’上書ãã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
- <notification name="WLDeletePresetAlert">
- 「 [SKY] ã€ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
- </notification>
<notification name="WLNoEditDefault">
デフォルトã®è¨­å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
</notification>
<notification name="WLMissingSky">
ã“ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®å­˜åœ¨ã—ãªã„「空ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å‚ç…§ã—ã¦ã„ã¾ã™ï¼š [SKY]。
</notification>
- <notification name="PPSaveEffectAlert">
- ãƒã‚¹ãƒˆãƒ—ロセス効果ãŒå­˜åœ¨ã—ã¾ã™ã€‚ 上書ãã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ <notification name="WLRegionApplyFail">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€è¨­å®šã‚’リージョンã«é©ç”¨ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚一度リージョンを出ã¦ã‹ã‚‰æˆ»ã‚‹ã¨ã€å•é¡ŒãŒè§£æ±ºã•ã‚Œã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。å•é¡Œã®ç™ºç”Ÿã—ãŸç†ç”±ï¼š[FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- æ–°ã—ã„空ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。
- <form name="form">
- <input name="message">
- æ–°ã—ã„事å‰è¨­å®š
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="キャンセル"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- 事å‰è¨­å®šãŒã™ã§ã«å­˜åœ¨ã—ã¾ã™ï¼
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ デイサイクルを空ã«ã¯ã§ããªã„ã®ã§ã€ã“ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã®æœ€å¾Œã®ã‚­ãƒ¼ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。最後ã®ã‚­ãƒ¼ã‚’削除ã—ã¦æ–°ã—ã„キーを作æˆã™ã‚‹ã®ã§ã¯ãªãã€æœ€å¾Œã®ã‚­ãƒ¼ã‚’変更ã—ã¦ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- æ–°ã—ã„æ°´ã®äº‹å‰è¨­å®šã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。
- <form name="form">
- <input name="message">
- æ–°ã—ã„事å‰è¨­å®š
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="キャンセル"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ ã“ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã«ã¯ã“れ以上キーフレームを追加ã§ãã¾ã›ã‚“。[SCOPE] ã®ç¯„囲ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã«è¿½åŠ ã§ãるキーフレーム数ã¯æœ€é«˜ [MAX] ã§ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- 事å‰è¨­å®šãŒã™ã§ã«å­˜åœ¨ã—ã¾ã™ï¼
+ <notification name="EnvUpdateRate">
+ リージョンã®è‡ªç„¶ç’°å¢ƒã®è¨­å®šã¯ [WAIT] 秒ã”ã¨ã«ã—ã‹æ›´æ–°ã§ãã¾ã›ã‚“。ãã®é–“隔を置ã„ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- デフォルトã®è¨­å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ <notification name="PPSaveEffectAlert">
+ ãƒã‚¹ãƒˆãƒ—ロセス効果ãŒå­˜åœ¨ã—ã¾ã™ã€‚ 上書ãã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification name="ChatterBoxSessionStartError">
[RECIPIENT] ã¨æ–°ã—ã„ãƒãƒ£ãƒƒãƒˆã‚’開始ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
@@ -2114,13 +2105,14 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<usetemplate ignoretext="「容姿ã€ã‚’編集中ã«ã€ä½œæˆã™ã‚‹è¡£é¡žã‚’装ç€ã™ã‚‹ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification name="NotAgeVerified">
- 年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã“ã®åŒºç”»ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§å¹´é½¢ã®ç¢ºèªã‚’è¡Œã„ã¾ã™ã‹ï¼Ÿ
+ Second Life 㧠Adult 指定ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„や領域ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã®ã¯ 18 歳以上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ã§ã™ã€‚年齢確èªãƒšãƒ¼ã‚¸ã§ 18 歳以上ã§ã‚ã‚‹ã“ã¨ã‚’証明ã—ã¦ãã ã•ã„。
+ã“れをクリックã™ã‚‹ã¨ã‚¦ã‚§ãƒ–ブラウザãŒé–‹ãã¾ã™ã€‚
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=ja
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="å¹´é½¢ã®ç¢ºèªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ <usetemplate ignoretext="å¹´é½¢ã®ç¢ºèªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="年齢確èªãƒšãƒ¼ã‚¸ã‚’é–‹ã"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
支払情報ãŒç™»éŒ²ã•ã‚Œã¦ã„ãªã„ã¨ã“ã®ã‚¨ãƒªã‚¢ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§ç™»éŒ²ã‚’è¡Œã„ã¾ã™ã‹ï¼Ÿ
@@ -2378,6 +2370,9 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<notification name="NoBuild">
ã“ã®ã‚¨ãƒªã‚¢ã§ã¯åˆ¶ä½œãŒç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ オブジェクトを制作ã—ãŸã‚Š Rez ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
</notification>
+ <notification name="SeeAvatars">
+ ã“ã®åŒºç”»ã«ã„ã‚‹ã‚¢ãƒã‚¿ãƒ¼ã‚„ã“ã®åŒºç”»å†…ã§è¡Œã‚れる文字ãƒãƒ£ãƒƒãƒˆã¯ã€ä»–ã®åŒºç”»ã‹ã‚‰è¦‹ãˆã¾ã›ã‚“。ã‚ãªãŸã«ã¯ã€ã“ã®åŒºç”»å¤–ã«ã„ã‚‹ä½äººãŒè¦‹ãˆãšã€å¤–ã®ä½äººã«ã¯ã‚ãªãŸã®å§¿ãŒè¦‹ãˆã¾ã›ã‚“。ãƒãƒ£ãƒ³ãƒãƒ« 0 ã§ã®é€šå¸¸ã®æ–‡å­—ãƒãƒ£ãƒƒãƒˆã‚‚ブロックã•ã‚Œã¾ã™ã€‚
+ </notification>
<notification name="ScriptsStopped">
管ç†è€…ãŒã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¹ã‚¯ãƒªãƒ—トを一時åœæ­¢ã—ã¾ã—ãŸã€‚
</notification>
@@ -2472,7 +2467,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
</notification>
<notification name="ObjectGiveItem">
[NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« [OBJECTTYPE] を渡ã—ã¾ã—ãŸï¼š
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="å—ã‘å–ã‚‹"/>
<button name="Discard" text="破棄"/>
@@ -2802,7 +2797,15 @@ M キーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚
共有ã™ã‚‹ä½äººã‚’é¸æŠžã—ã¾ã™ã€‚
</notification>
<notification name="MeshUploadError">
- [LABEL] をアップロードã§ãã¾ã›ã‚“ã§ã—ãŸï¼š [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] をアップロードã§ãã¾ã›ã‚“ã§ã—ãŸï¼š[MESSAGE] [IDENTIFIER]
+
+詳細ã«ã¤ã„ã¦ã¯ãƒ­ã‚°ã‚’ã”覧ãã ã•ã„。
+ </notification>
+ <notification name="MeshUploadPermError">
+ メッシュã®ã‚¢ãƒƒãƒ—ロード許å¯ã‚’リクエスト中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ リージョン㮠&apos;[CAPABILITY]&apos; ã¨ã„ã†æ©Ÿèƒ½ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
</notification>
<notification name="ShareItemsConfirmation">
次ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’共有ã—ã¾ã™ã‹ï¼Ÿ
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
index 4fb031b677..39ea1df1e3 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="ピックをä¿å­˜" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="å–り消ã—" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
index e9e36e4842..df9ef40113 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="ãŠæŽ¢ã—ã®ã‚‚ã®ã¯è¦‹ã¤ã‹ã‚Šã¾ã—ãŸã‹ï¼Ÿ[secondlife:///app/search/all/[SEARCH_TERM] 検索] ã‚’ãŠè©¦ã—ãã ã•ã„。"/>
+ <no_visible_tabs_text name="no_outfits_msg" value="アウトフィットãŒã¾ã ã‚ã‚Šã¾ã›ã‚“。[secondlife:///app/search/all 検索] ã‚’ãŠè©¦ã—ãã ã•ã„。"/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
+ <menu_button name="options_gear_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
<button name="trash_btn" tool_tip="é¸æŠžã—ãŸã‚¢ã‚¦ãƒˆãƒ•ã‚£ãƒƒãƒˆã‚’削除ã™ã‚‹"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index c7f71c6de0..1c90f7327e 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -66,16 +66,16 @@
<layout_panel name="view_profile_btn_lp">
<button label="プロフィール" name="view_profile_btn" tool_tip="写真ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãã®ä»–ä½äººæƒ…報を表示"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開ãã¾ã™"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="コール" name="call_btn" tool_tip="ã“ã®ä½äººã«ã‚³ãƒ¼ãƒ«ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="共有" name="share_btn" tool_tip="「æŒã¡ç‰©ã€ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’共有ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="テレãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/ja/panel_place_profile.xml b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
index 8a40d7aa5a..7235bc0f18 100644
--- a/indra/newview/skins/default/xui/ja/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
@@ -68,6 +68,8 @@
<text name="scripts_value" value="オン"/>
<text name="damage_label" value="ダメージ:"/>
<text name="damage_value" value="オフ"/>
+ <text name="see_avatars_label" value="ã‚¢ãƒã‚¿ãƒ¼ã‚’表示:"/>
+ <text name="see_avatars_value" value="オフ"/>
<button label="土地情報" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
index e19b86e552..9d3925afdc 100644
--- a/indra/newview/skins/default/xui/ja/panel_places.xml
+++ b/indra/newview/skins/default/xui/ja/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="プロフィール" name="profile_btn" tool_tip="場所ã®ãƒ—ロフィールを表示"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
index ccc5c3908b..dcaa23fee5 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ キャッシュ:
+ </text>
+ <spinner label="キャッシュサイズ(64~9,984MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="キャッシュをクリア" label_selected="キャッシュをクリア" name="clear_cache"/>
+ <text name="Cache location">
+ キャッシュã®ä¿å­˜å ´æ‰€ï¼š
+ </text>
+ <button label="å‚ç…§" label_selected="å‚ç…§" name="set_cache"/>
+ <button label="デフォルトã®å ´æ‰€" label_selected="デフォルトã®å ´æ‰€" name="default_cache_location"/>
<text name="UI Size:">
UI サイズ:
</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
index c11e636875..3a4c360ccc 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="有効" name="enable_voice_check"/>
<check_box label="メディアを自動å†ç”Ÿã™ã‚‹" name="media_auto_play_btn" tool_tip="ã“ã“ã«ãƒã‚§ãƒƒã‚¯ã‚’入れã¦ãƒ¡ãƒ‡ã‚£ã‚¢ã®è‡ªå‹•å†ç”Ÿã‚’許å¯ã—ã¾ã™" value="true"/>
<check_box label="ä»–ã®ã‚¢ãƒã‚¿ãƒ¼ã«å–り付ã‘られãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’å†ç”Ÿã™ã‚‹" name="media_show_on_others_btn" tool_tip="ã“ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã€è¿‘ãã«ã„ã‚‹ä»–ã®ã‚¢ãƒã‚¿ãƒ¼ã«å–り付ã‘られãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’éžè¡¨ç¤ºã«ã—ã¾ã™" value="true"/>
+ <check_box label="ジェスãƒãƒ£ãƒ¼ã®éŸ³ã‚’å†ç”Ÿ" name="gesture_audio_play_btn" tool_tip="ジェスãƒãƒ£ãƒ¼ã®éŸ³ã‚’èžãã«ã¯ã“れをé¸æŠž" value="true"/>
<text name="voice_chat_settings">
ボイスãƒãƒ£ãƒƒãƒˆã®è¨­å®š
</text>
@@ -35,28 +36,5 @@
<button label="キー設定" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="マウスã®ä¸­å¤®ãƒœã‚¿ãƒ³ã«ãƒªã‚»ãƒƒãƒˆ"/>
<button label="入力・出力機器" name="device_settings_btn"/>
- <panel label="機器ã®è¨­å®š" name="device_settings_panel">
- <panel.string name="default_text">
- デフォルト
- </panel.string>
- <panel.string name="default system device">
- デフォルトã®ã‚·ã‚¹ãƒ†ãƒ æ©Ÿå™¨
- </panel.string>
- <panel.string name="no device">
- 機器ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“
- </panel.string>
- <text name="Input">
- 入力
- </text>
- <text name="My volume label">
- ç§ã®éŸ³é‡ï¼š
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使ã£ã¦éŸ³é‡ã‚’調節ã—ã¾ã™"/>
- <text name="wait_text">
- ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。
- </text>
- <text name="Output">
- 出力
- </text>
- </panel>
+ <panel label="機器ã®è¨­å®š" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_environment.xml b/indra/newview/skins/default/xui/ja/panel_region_environment.xml
new file mode 100644
index 0000000000..f6ef3f0934
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="環境" name="panel_env_info">
+ <text name="water_settings_title">
+ ã‚ãªãŸã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã‚’訪れるユーザーã«è¦‹ã›ãŸã„ã€æ°´ã¨ç©º/デイサイクルã®è¨­å®šã‚’é¸æŠžã—ã¾ã™ã€‚詳細
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Second Life ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã‚’使用" name="use_sl_default_settings"/>
+ <radio_item label="次ã®è¨­å®šã‚’使用" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ æ°´ã®è¨­å®š
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ 空 / デイサイクル
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="空ã®å›ºå®š" name="my_sky_settings"/>
+ <radio_item label="デイサイクル" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="é©ç”¨" name="apply_btn"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_terrain.xml b/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
index 8df803b2dc..fb853c1925 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="地形" name="Terrain">
<text name="region_text_lbl">
地域:
@@ -6,25 +6,55 @@
<text name="region_text">
未知
</text>
- <spinner label="æ°´é¢ã®é«˜ã•" name="water_height_spin" />
- <button label="?" name="water_height_help" />
- <spinner label="地形ã®ä¸Šæ˜‡é™åº¦" name="terrain_raise_spin" />
- <button label="?" name="terrain_raise_help" />
- <spinner label="地形ã®ä¸‹é™é™åº¦" name="terrain_lower_spin" />
- <button label="?" name="terrain_lower_help" />
- <check_box label="ä¸å‹•ç”£å¤ªé™½ä½¿ç”¨" name="use_estate_sun_check" />
- <button label="?" name="use_estate_sun_help" />
- <check_box label="太陽固定" name="fixed_sun_check" />
- <button label="?" name="fixed_sun_help" />
- <slider label="段階" name="sun_hour_slider" />
- <button label="é©ç”¨" name="apply_btn" />
- <button label="RAW 地形ダウンロード..." name="download_raw_btn"
- tool_tip="ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™" />
- <button label="?" name="download_raw_help" />
- <button label="RAW 地形アップロード..." name="upload_raw_btn"
- tool_tip="ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™" />
- <button label="?" name="upload_raw_help" />
- <button label="地形ã®æ§‹ç¯‰" name="bake_terrain_btn"
- tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’上昇・下é™ç¯„囲ã®ä¸­é–“点ã¨ã—ã¦è¨­å®šã—ã¾ã™" />
- <button label="?" name="bake_terrain_help" />
+ <spinner label="æ°´é¢ã®é«˜ã•" name="water_height_spin"/>
+ <spinner label="地形ã®ä¸Šæ˜‡é™åº¦" name="terrain_raise_spin"/>
+ <spinner label="地形ã®ä¸‹é™é™åº¦" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ 地形テクスãƒãƒ£ï¼ˆ512x512 ã® 24 bit .tga ファイル)
+ </text>
+ <text name="height_text_lbl">
+ 1(低)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4(高)
+ </text>
+ <text name="height_text_lbl5">
+ 地形ã®éš†èµ·ç¯„囲
+ </text>
+ <text name="height_text_lbl10">
+ 数値ã¯ä¸Šã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ãƒ–レンド範囲を示ã—ã¾ã™ã€‚
+ </text>
+ <text name="height_text_lbl11">
+ 計測å˜ä½ã¯ãƒ¡ãƒ¼ãƒˆãƒ«ã§ã€ã€Œä½Žã€ã®å€¤ã¯ã€1番ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®é«˜ã•ã®ã€Œæœ€å¤§å€¤ã€ã§ã™ã€‚「高ã€ã®å€¤ã¯ã€4番ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®é«˜ã•ã®ã€Œæœ€ä½Žå€¤ã€ã§ã™ã€‚
+ </text>
+ <text name="height_text_lbl6">
+ 北西
+ </text>
+ <text name="height_text_lbl7">
+ 北æ±
+ </text>
+ <spinner label="低" name="height_start_spin_1"/>
+ <spinner label="低" name="height_start_spin_3"/>
+ <spinner label="高" name="height_range_spin_1"/>
+ <spinner label="高" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ å—西
+ </text>
+ <text name="height_text_lbl9">
+ å—æ±
+ </text>
+ <spinner label="低" name="height_start_spin_0"/>
+ <spinner label="低" name="height_start_spin_2"/>
+ <spinner label="高" name="height_range_spin_0"/>
+ <spinner label="高" name="height_range_spin_2"/>
+ <button label="RAW 地形ダウンロード..." name="download_raw_btn" tool_tip="ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™"/>
+ <button label="RAW 地形アップロード..." name="upload_raw_btn" tool_tip="ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™"/>
+ <button label="地形ã®æ§‹ç¯‰" name="bake_terrain_btn" tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’上昇・下é™ç¯„囲ã®ä¸­é–“点ã¨ã—ã¦è¨­å®šã—ã¾ã™"/>
+ <button label="é©ç”¨" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
index da103a2d60..0824504235 100644
--- a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
デフォルト
</panel.string>
+ <string name="name_no_device">
+ 機器ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“
+ </string>
+ <string name="name_default_system_device">
+ デフォルトã®ã‚·ã‚¹ãƒ†ãƒ æ©Ÿå™¨
+ </string>
<text name="Input">
入力
</text>
+ <text name="Output">
+ 出力
+ </text>
<text name="My volume label">
ç§ã®éŸ³é‡ï¼š
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。
</text>
- <text name="Output">
- 出力
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index e26d8717d1..7edda6e1a3 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ã‚‚ã®" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ å—ã‘å–ã£ãŸå•†å“([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ å—ã‘å–ã£ãŸå•†å“
+ </string>
+ <button label="å—ã‘å–ã£ãŸå•†å“" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] 新登場
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ マーケットプレイスã‹ã‚‰è³¼å…¥ã—ãŸå•†å“ã¯ã“ã“ã«é…é”ã•ã‚Œã¾ã™ã€‚
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="マーãƒãƒ£ãƒ³ãƒˆã®ã‚¢ã‚¦ãƒˆãƒœãƒƒã‚¯ã‚¹" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="自分ã®ãƒžãƒ¼ã‚±ãƒƒãƒˆãƒ—レイス店頭ã«ç§»å‹•"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒžãƒ¼ãƒãƒ£ãƒ³ãƒˆã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’セットアップã—ã¦ãã ã•ã„。
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index a6691fb764..f0c0d99a8e 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -34,6 +34,9 @@
<string name="StartupInitializingVFS">
VFS ã‚’åˆæœŸåŒ–中ã§ã™...
</string>
+ <string name="StartupRequireDriverUpdate">
+ グラフィックをåˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚グラフィックドライãƒã‚’æ›´æ–°ã—ã¦ãã ã•ã„。
+ </string>
<string name="ProgressRestoring">
復元中ã§ã™...
</string>
@@ -91,6 +94,12 @@
<string name="LoginQuicktimeOK">
QuickTime ãŒæ­£å¸¸ã«åˆæœŸåŒ–ã•ã‚Œã¾ã—ãŸã€‚
</string>
+ <string name="LoginRequestSeedCapGrant">
+ リージョンã®æ©Ÿèƒ½ã‚’リクエストã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ リージョンã®æ©Ÿèƒ½ã‚’リクエストã€è©¦è¡Œ [NUMBER] 回....
+ </string>
<string name="LoginWaitingForRegionHandshake">
リージョンã®ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚’å¾…ã£ã¦ã„ã¾ã™...
</string>
@@ -1192,6 +1201,12 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="InventoryNoTexture">
「æŒã¡ç‰©ã€å†…ã«ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ã‚³ãƒ”ーãŒã‚ã‚Šã¾ã›ã‚“
</string>
+ <string name="InventoryInboxNoItems">
+ マーケットプレイスã§è³¼å…¥ã—ãŸå•†å“ã¯ã“ã“ã«é…é”ã•ã‚Œã¾ã™ã€‚
+ </string>
+ <string name="InventoryOutboxNoItems">
+ マーケットプレイス店頭ã«æŽ²è¼‰ã™ã‚‹ãŸã‚ã®æº–å‚™ã¨ã—ã¦ã€ã“ã“ã«å•†å“をドラッグã—ã¾ã™ã€‚
+ </string>
<string name="no_transfer" value=" (å†è²©ãƒ»ãƒ—レゼントä¸å¯ï¼‰"/>
<string name="no_modify" value=" (編集ä¸å¯ï¼‰"/>
<string name="no_copy" value=" (コピーä¸å¯ï¼‰"/>
@@ -1238,9 +1253,6 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="InvFolder My Inventory">
æŒã¡ç‰©
</string>
- <string name="InvFolder My Favorites">
- ãŠæ°—ã«å…¥ã‚Š
- </string>
<string name="InvFolder Library">
ライブラリ
</string>
@@ -1325,6 +1337,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="InvFolder All">
全員
</string>
+ <string name="no_attachments">
+ ç€ç”¨ã—ã¦ã„るアタッãƒãƒ¡ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“
+ </string>
<string name="Buy">
è²·ã†
</string>
@@ -1634,6 +1649,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
</string>
<string name="SummaryForTheWeek" value="今週ã®ã¾ã¨ã‚。開始日ã¯"/>
<string name="NextStipendDay" value="ã§ã™ã€‚次回ã®ãŠå°é£ã„支給日:"/>
+ <string name="GroupPlanningDate">
+ [year,datetime,utc]/[mthnum,datetime,utc]/[day,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value=" グループ 個人ã®å‰²ã‚Šå½“ã¦"/>
<string name="GroupColumn" value="グループã®è¨­å®š"/>
<string name="Balance">
@@ -1660,6 +1678,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="IMTeen">
ティーン
</string>
+ <string name="Anyone">
+ 全員
+ </string>
<string name="RegionInfoError">
エラー
</string>
@@ -1882,6 +1903,12 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="Public">
パブリック
</string>
+ <string name="LocalSettings">
+ ローカル設定
+ </string>
+ <string name="RegionSettings">
+ リージョン(地域)ã®è¨­å®š
+ </string>
<string name="ClassifiedClicksTxt">
クリック数: [TELEPORT] テレãƒãƒ¼ãƒˆã€ [MAP] 地図〠[PROFILE] プロフィール
</string>
@@ -1954,6 +1981,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="GroupMoneyDebits">
支出
</string>
+ <string name="GroupMoneyDate">
+ [year,datetime,utc]年[mth,datetime,utc]月[day,datetime,utc]日[weekday,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
内容
</string>
@@ -3727,6 +3757,9 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="LocationCtrlGeneralIconTooltip">
General リージョン
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ ã“ã®åŒºç”»å¤–ã«ã‚¢ãƒã‚¿ãƒ¼ã‚’見ãˆã‚‹ã‚ˆã†ã«ã—ã¦ã€ãƒãƒ£ãƒƒãƒˆã‚‚許å¯
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] アップデート
</string>
@@ -3821,7 +3854,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
アドホックコンファレンス
</string>
<string name="conference-title-incoming">
- [AGENT_NAME]ã¨ã‚³ãƒ³ãƒ•ã‚¡ãƒ¬ãƒ³ã‚¹ã™ã‚‹
+ [AGENT_NAME] ã¨ã‚³ãƒ³ãƒ•ã‚¡ãƒ¬ãƒ³ã‚¹ã™ã‚‹
</string>
<string name="inventory_item_offered-im">
æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ã‚’é€ã‚Šã¾ã—ãŸ
@@ -4152,6 +4185,87 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="Female - Wow">
女性 - Wow
</string>
+ <string name="/bow">
+ /ãŠã˜ãŽã™ã‚‹
+ </string>
+ <string name="/clap">
+ /æ‹æ‰‹
+ </string>
+ <string name="/count">
+ /æ•°ãˆã‚‹
+ </string>
+ <string name="/extinguish">
+ /消ã™
+ </string>
+ <string name="/kmb">
+ /ãããらãˆ
+ </string>
+ <string name="/muscle">
+ /筋肉もりもり
+ </string>
+ <string name="/no">
+ /ã„ã„ãˆ
+ </string>
+ <string name="/no!">
+ /ã ã‚ï¼
+ </string>
+ <string name="/paper">
+ /パー
+ </string>
+ <string name="/pointme">
+ /自分を指差ã™
+ </string>
+ <string name="/pointyou">
+ /相手を指差ã™
+ </string>
+ <string name="/rock">
+ /グー
+ </string>
+ <string name="/scissor">
+ /ãƒãƒ§ã‚­
+ </string>
+ <string name="/smoke">
+ /ã‚¿ãƒã‚³ã‚’å¸ã†
+ </string>
+ <string name="/stretch">
+ /伸ã³ã‚’ã™ã‚‹
+ </string>
+ <string name="/whistle">
+ /å£ç¬›ã‚’å¹ã
+ </string>
+ <string name="/yes">
+ /ã¯ã„
+ </string>
+ <string name="/yes!">
+ /イエスï¼
+ </string>
+ <string name="afk">
+ 一時退席中
+ </string>
+ <string name="dance1">
+ ダンス1
+ </string>
+ <string name="dance2">
+ ダンス2
+ </string>
+ <string name="dance3">
+ ダンス3
+ </string>
+ <string name="dance4">
+ ダンス4
+ </string>
+ <string name="dance5">
+ ダンス5
+ </string>
+ <string name="dance6">
+ ダンス6
+ </string>
+ <string name="dance7">
+ ダンス7
+ </string>
+ <string name="dance8">
+ ダンス8
+ </string>
<string name="AvatarBirthDateFormat">
[year,datetime,slt]/[mthnum,datetime,slt]/[day,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml
deleted file mode 100644
index 1f3e045a75..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="DAGCYCLUS EDITOR">
- <tab_container name="Day Cycle Tabs">
- <panel label="Dagcyclus" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 0:00
- </text>
- <text name="WL3am">
- 3:00
- </text>
- <text name="WL6am">
- 6:00
- </text>
- <text name="WL9amHash">
- 9:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 0:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Key toevoegen" label_selected="Key toevoegen" name="WLAddKey"/>
- <button label="Key verwijderen" label_selected="Key verwijderen" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Gemarkeerde frame instelling:
- </text>
- <text name="WLCurKeyTimeText">
- Markering tijd:
- </text>
- <spinner label="Uur" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Markering voorinstelling:
- </text>
- <combo_box label="Voorinstelling" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Snap:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Lengte van cyclus:
- </text>
- <spinner label="Uur" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sec" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Voorbeeld:
- </text>
- <button label="Afspelen" label_selected="Afspelen" name="WLAnimSky"/>
- <button label="Stop!" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Gebruik estatetijd" label_selected="Ga naar Estate tijd" name="WLUseLindenTime"/>
- <button label="Opslaan testdag" label_selected="Opslaan testdag" name="WLSaveDayCycle"/>
- <button label="Laad testdag" label_selected="Laad testdag" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
deleted file mode 100644
index 3c207040d2..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_env_settings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="OMGEVING EDITOR">
- <text bottom="-42" name="EnvTimeText">
- Tijd van de
-dag
- </text>
- <text bottom_delta="-36" name="EnvTimeText2">
- 0:00
- </text>
- <text name="EnvCloudText">
- Wolkendek
- </text>
- <text name="EnvWaterColorText">
- Waterkleur
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Klik om de kleurkiezer te openen"/>
- <text name="EnvWaterFogText">
- Watermist
- </text>
- <button label="Gebruik estate tijd" name="EnvUseEstateTimeButton"/>
- <button label="Geavanceerde lucht" name="EnvAdvancedSkyButton"/>
- <button label="Geavanceerd water" name="EnvAdvancedWaterButton"/>
- <button label="?" name="EnvSettingsHelpButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml
deleted file mode 100644
index 1fb1ca241b..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_water.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="GEAVANCEERDE WATER EDITOR">
- <combo_box bottom="-50" height="18" left_delta="116" name="WaterPresetsCombo" width="150" />
- <text name="KeyFramePresetsText">
- Watervoorinstellingen
- </text>
- <button label="Nieuw" label_selected="Nieuw" name="WaterNewPreset" left_delta="190"/>
- <button label="Opslaan" label_selected="Opslaan" name="WaterSavePreset"/>
- <button label="Verwijderen" label_selected="Verwijderen" name="WaterDeletePreset" width="80"/>
- <tab_container name="Water Tabs">
- <panel label="Instellingen" name="Settings">
- <text name="BHText">
- Watermistkleur
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Klik om de kleurkiezer te openen"/>
- <text name="WaterFogDensText">
- Mistdichtheidsexponent
- </text>
- <button label="?" name="WaterFogDensityHelp"/>
- <text name="WaterUnderWaterFogModText">
- Onderwatermist wijziger
- </text>
- <button label="?" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Reflectie wavelet schaal
- </text>
- <button label="?" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Fresnelschaal
- </text>
- <button label="?" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Fresnelverplaatsing
- </text>
- <button label="?" name="WaterFresnelOffsetHelp"/>
- <text name="DensMultText">
- Refractieschaal boven
- </text>
- <button label="?" name="WaterScaleAboveHelp"/>
- <text name="WaterScaleBelowText">
- Refractieschaal onder
- </text>
- <button label="?" name="WaterScaleBelowHelp"/>
- <text name="MaxAltText">
- Wazigheidvermeerderaar
- </text>
- <button label="?" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="Afbeelding" name="Waves">
- <text name="BHText">
- Grote golven richting
- </text>
- <button label="?" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Kleine golf richting
- </text>
- <button label="?" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Normaalmap
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml b/indra/newview/skins/default/xui/nl/floater_windlight_options.xml
deleted file mode 100644
index b26dd7916e..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="GEAVANCEERDE LUCHT EDITOR">
- <combo_box allow_text_entry="false" follows="left|top" mouse_opaque="true" name="WLPresetsCombo"/>
- <text name="KeyFramePresetsText">
- Lucht voorinstellingen
- </text>
- <button label="Nieuw" label_selected="Nieuw" name="WLNewPreset"/>
- <button label="Opslaan" label_selected="Opslaan" name="WLSavePreset"/>
- <button label="Verwijderen" label_selected="Verwijderen" name="WLDeletePreset"/>
- <button label="Dag cyclus editor" label_selected="Dag cyclus editor" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="Atmosfeer" name="Atmosphere">
- <text name="BHText">
- Blauw Horizon
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Nevel horizon
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Blauw dichtheid
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Nevel dichtheid
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Dichtheidsfactor
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Afstandsfactor
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Max hoogte
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="Licht" name="Lighting">
- <text name="SLCText">
- Zon/maan kleur
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Zon/maan positie
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Omgeving
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Oosthoek
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Zonnegloed
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Focus " name="WLGlowB"/>
- <slider label="Grootte" name="WLGlowR"/>
- <text name="SceneGammaText">
- Scenegamma
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Ster helderheid
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="Wolken" name="Clouds">
- <text name="WLCloudColorText">
- Wolkenkleur
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Wolken (XY/Dichtheid)
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Wolkenbedekking
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Wolkenschaal
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Wolkendetail (XY/Dichtheid)
- </text>
- <button label="?" name="WLCloudDetailHelp" left="404"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Wolk verplaatsing X
- </text>
- <button label="?" name="WLCloudScrollXHelp" left="600"/>
- <check_box label="Vastzetten" name="WLCloudLockX" left="622"/>
- <text name="WLCloudScrollYText">
- Wolk verplaatsing Y
- </text>
- <button label="?" name="WLCloudScrollYHelp" left="600"/>
- <check_box label="Vastzetten" name="WLCloudLockY" left="622"/>
- <check_box label="Teken klassieke wolken" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="620"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml
index f27b83d3f9..06e6d8ae7a 100644
--- a/indra/newview/skins/default/xui/nl/notifications.xml
+++ b/indra/newview/skins/default/xui/nl/notifications.xml
@@ -2698,7 +2698,7 @@ Probeer het alstublieft opnieuw over enkele ogenblikken.
Geen geldig perceel kon gevonden worden.
</notification>
<notification name="ObjectGiveItem">
- Een object genaamd &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, eigendom van [NAME_SLURL], heeft u een [OBJECTTYPE] genaamd [ITEM_SLURL] gegeven.
+ Een object genaamd &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, eigendom van [NAME_SLURL], heeft u een [OBJECTTYPE] genaamd &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; gegeven.
<form name="form">
<button name="Keep" text="Behouden"/>
<button name="Discard" text="Afwijzen"/>
diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml
index a53c0769dc..ca6b8eb521 100644
--- a/indra/newview/skins/default/xui/nl/strings.xml
+++ b/indra/newview/skins/default/xui/nl/strings.xml
@@ -849,9 +849,6 @@
<string name="InvFolder My Inventory">
Mijn Inventaris
</string>
- <string name="InvFolder My Favorites">
- Mijn Favorieten
- </string>
<string name="InvFolder Library">
Bibliotheek
</string>
@@ -910,10 +907,10 @@
Gebaren
</string>
<string name="InvFolder Favorite">
- Favoriten
+ Mijn Favorieten
</string>
<string name="InvFolder favorite">
- Favoriten
+ Mijn Favorieten
</string>
<string name="InvFolder Current Outfit">
Huidige Uitrusting
@@ -1303,9 +1300,7 @@
<string name="RegionNoCovenantOtherOwner">
There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.
</string>
- <string name="covenant_last_modified">
- Laatst bewerkt:
- </string>
+ <string name="covenant_last_modified" value="Laatst bewerkt: " />
<string name="none_text" value="(none)"/>
<string name="never_text" value="(never)"/>
<string name="GroupOwned">
diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
deleted file mode 100644
index f3929df3e3..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDYTOR CYKLU DNIA">
- <tab_container name="Day Cycle Tabs">
- <panel label="Cykl dnia" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <multi_slider label="" name="WLTimeSlider"/>
- <multi_slider label="" name="WLDayCycleKeys"/>
- <text name="WL12am">
- 12am
- </text>
- <text name="WL3am">
- 3am
- </text>
- <text name="WL6am">
- 6am
- </text>
- <text name="WL9amHash">
- 9am
- </text>
- <text name="WL12pmHash">
- 12pm
- </text>
- <text name="WL3pm">
- 3pm
- </text>
- <text name="WL6pm">
- 6pm
- </text>
- <text name="WL9pm">
- 9pm
- </text>
- <text name="WL12am2">
- 12am
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Dodaj" label_selected="Dodaj" name="WLAddKey"/>
- <button label="Usuń" label_selected="Usuń" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Preferencje czasu:
- </text>
- <text name="WLCurKeyTimeText">
- Czas:
- </text>
- <spinner label="Godz" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Ustawienia:
- </text>
- <combo_box label="Preset" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Przerwij:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Długość cyklu:
- </text>
- <spinner label="Godz" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sek" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- PrzeglÄ…daj:
- </text>
- <button label="Start" label_selected="Start" name="WLAnimSky"/>
- <button label="Stop" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Używaj czasu regionu" label_selected="Używaj czasu regionu" name="WLUseLindenTime"/>
- <button label="Zapisz test dnia" label_selected="Zapisz test dnia" name="WLSaveDayCycle"/>
- <button label="Załaduj test dnia" label_selected="Załaduj test dnia" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
deleted file mode 100644
index 3ab854fbbb..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDYTOR ÅšRODOWISKA">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Czas
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <slider label="" name="EnvTimeSlider"/>
- <text name="EnvCloudText">
- Chmury:
- </text>
- <slider label="" name="EnvCloudSlider"/>
- <text name="EnvWaterColorText">
- Kolor wody
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij aby wybrać kolor"/>
- <text name="EnvWaterFogText">
- Zamglenie:
- </text>
- <slider label="" name="EnvWaterFogSlider"/>
- <button label="Używaj czasu regionu" name="EnvUseEstateTimeButton"/>
- <button label="Zaawansowane niebo" name="EnvAdvancedSkyButton"/>
- <button label="Zaawansowana woda" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
index 7c29d52e7b..131f92d56f 100644
--- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="USTAWIENIA DEBUGOWANIA">
<radio_group name="boolean_combo">
- <radio_item label="PRAWDA" name="TRUE" value="prawda"/>
- <radio_item label="NIEPRAWDA" name="FALSE" value=""/>
+ <radio_item label="PRAWDA" name="TRUE" />
+ <radio_item label="NIEPRAWDA" name="FALSE" />
</radio_group>
<color_swatch label="Kolor" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml
deleted file mode 100644
index 9720dae516..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_water.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY">
- <text name="KeyFramePresetsText">
- Ustawienia wody:
- </text>
- <button label="Nowe" label_selected="Nowe" name="WaterNewPreset"/>
- <button label="Zapisz" label_selected="Zapisz" name="WaterSavePreset"/>
- <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="USTAWIENIA" name="Settings">
- <text name="BHText">
- Kolor podwodnej mgły
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij aby wybrać kolor"/>
- <text name="WaterFogDensText">
- Wykładnik gęstości mgły
- </text>
- <button label="?" name="WaterFogDensityHelp"/>
- <slider label="" name="WaterFogDensity"/>
- <text name="WaterUnderWaterFogModText">
- Modyfikator mgły
- </text>
- <button label="?" name="WaterUnderWaterFogModHelp"/>
- <slider label="" name="WaterUnderWaterFogMod"/>
- <text name="BDensText">
- Skala zmarszczeń
- </text>
- <button label="?" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <slider label="" name="WaterNormalScaleX"/>
- <slider label="" name="WaterNormalScaleY"/>
- <slider label="" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Skala Fresnela
- </text>
- <button label="?" name="WaterFresnelScaleHelp"/>
- <slider label="" name="WaterFresnelScale"/>
- <text name="FresnelOffsetText">
- Przesunięcie Fresnela
- </text>
- <button label="?" name="WaterFresnelOffsetHelp"/>
- <slider label="" name="WaterFresnelOffset"/>
- <text name="DensMultText">
- Górna refrakcja
- </text>
- <button label="?" name="WaterScaleAboveHelp"/>
- <slider label="" name="WaterScaleAbove"/>
- <text name="WaterScaleBelowText">
- Dolna refrakcja
- </text>
- <button label="?" name="WaterScaleBelowHelp"/>
- <slider label="" name="WaterScaleBelow"/>
- <text name="MaxAltText">
- Mnożnik rozmycia
- </text>
- <button label="?" name="WaterBlurMultiplierHelp"/>
- <slider label="" name="WaterBlurMult"/>
- </panel>
- <panel label="OBRAZ" name="Waves">
- <text name="BHText">
- Kierunek dużych fal
- </text>
- <button label="?" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <slider label="" name="WaterWave1DirX"/>
- <slider label="" name="WaterWave1DirY"/>
- <text name="BHText2">
- Kierunek małych fal
- </text>
- <button label="?" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <slider label="" name="WaterWave2DirX"/>
- <slider label="" name="WaterWave2DirY"/>
- <text name="BHText3">
- Mapa normalnych
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- <texture_picker label="" name="WaterNormalMap"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
deleted file mode 100644
index 930e904464..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA">
- <text name="KeyFramePresetsText">
- Ustawienia nieba:
- </text>
- <button label="Nowe" label_selected="Nowe" name="WLNewPreset"/>
- <button label="Zapisz" label_selected="Zapisz" name="WLSavePreset"/>
- <button label="Usuń" label_selected="Usuń" name="WLDeletePreset"/>
- <button label="Edytor cyklu dnia" label_selected="Edytor cyklu dnia" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFERA" name="Atmosphere">
- <text name="BHText">
- Horyzont błękitu
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <slider label="" name="WLBlueHorizonR"/>
- <slider label="" name="WLBlueHorizonG"/>
- <slider label="" name="WLBlueHorizonB"/>
- <slider label="" name="WLBlueHorizonI"/>
- <text name="BDensText">
- Horyzont zamglenia
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <slider label="" name="WLHazeHorizon"/>
- <text name="BDensText2">
- Gęstość błękitu
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <slider label="" name="WLBlueDensityR"/>
- <slider label="" name="WLBlueDensityG"/>
- <slider label="" name="WLBlueDensityB"/>
- <slider label="" name="WLBlueDensityI"/>
- <text name="HDText">
- Gęstość zamglenia
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <slider label="" name="WLHazeDensity"/>
- <text name="DensMultText">
- Mnożnik gęsości
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <slider label="" name="WLDensityMult"/>
- <text name="WLDistanceMultText">
- Mnożnik dystansu
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <slider label="" name="WLDistanceMult"/>
- <text name="MaxAltText">
- Max wysokość
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- <slider label="" name="WLMaxAltitude"/>
- </panel>
- <panel label="ÅšWIATÅO" name="Lighting">
- <text name="SLCText">
- Kolor Słońca/Księżyca
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLSunlightR"/>
- <slider label="" name="WLSunlightG"/>
- <slider label="" name="WLSunlightB"/>
- <slider label="" name="WLSunlightI"/>
- <text name="TODText">
- Pozycja Słońca/Księżyca
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <slider label="" name="WLSunAngle"/>
- <text name="WLAmbientText">
- Otoczenie
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <slider label="" name="WLAmbientR"/>
- <slider label="" name="WLAmbientG"/>
- <slider label="" name="WLAmbientB"/>
- <slider label="" name="WLAmbientI"/>
- <text name="WLEastAngleText">
- Pozycja wschodu
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <slider label="" name="WLEastAngle"/>
- <text name="SunGlowText">
- Blask Słońca
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Ostrość" name="WLGlowB"/>
- <slider label="Rozmiar" name="WLGlowR"/>
- <text name="SceneGammaText">
- Jasność obrazu
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <slider label="" name="WLGamma"/>
- <text name="WLStarText">
- Blask gwiazd
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- <slider label="" name="WLStarAlpha"/>
- </panel>
- <panel label="CHMURY" name="Clouds">
- <text name="WLCloudColorText">
- Kolor chmur
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLCloudColorR"/>
- <slider label="" name="WLCloudColorG"/>
- <slider label="" name="WLCloudColorB"/>
- <slider label="" name="WLCloudColorI"/>
- <text name="WLCloudColorText2">
- Chmury (XY/Gęstość)
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- G
- </text>
- <slider label="" name="WLCloudX"/>
- <slider label="" name="WLCloudY"/>
- <slider label="" name="WLCloudDensity"/>
- <text name="WLCloudCoverageText">
- Pokrycie chmur
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <slider label="" name="WLCloudCoverage"/>
- <text name="WLCloudScaleText">
- Skala chmur
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <slider label="" name="WLCloudScale"/>
- <text name="WLCloudDetailText">
- Szczegóły (XY/gęstość)
- </text>
- <button label="?" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- G
- </text>
- <slider label="" name="WLCloudDetailX"/>
- <slider label="" name="WLCloudDetailY"/>
- <slider label="" name="WLCloudDetailDensity"/>
- <text name="WLCloudScrollXText">
- Przewijanie chmur X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Zablokuj" name="WLCloudLockX"/>
- <slider label="" name="WLCloudScrollX"/>
- <text name="WLCloudScrollYText">
- Przewijanie chmur Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Zablokuj" name="WLCloudLockY"/>
- <slider label="" name="WLCloudScrollY"/>
- <check_box label="Klasyczne chmury" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index e869806d04..fe4662c5a2 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -138,7 +138,6 @@
<menu_item_check label="Wyłącz ograniczenia zasięgu kamery" name="Disable Camera Distance"/>
<menu_item_check label="Wysoka rozdzielczość zdjęć" name="HighResSnapshot"/>
<menu_item_check label="Zapisuj zdjęcia na dysk twardy bez efektu dźwiękowego" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Skompresuj zdjęcie na dysk twardy" name="CompressSnapshotsToDisk"/>
<menu label="Narzędzia" name="Performance Tools">
<menu_item_call label="Pomiar lagów" name="Lag Meter"/>
<menu_item_check label="Statystyki" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 63f976a314..7d3225ea31 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -2385,7 +2385,7 @@ Spróbuj ponowanie za kilka minut.
</notification>
<notification name="ObjectGiveItem">
Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, należący do [NAME_SLURL] dał Tobie [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Zachowaj"/>
<button name="Discard" text="Wyrzuć"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
index 8a183c00cf..72c162f63d 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Zapisz obrazek" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Cofnij" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
index da9f84cb2e..ef52e2148b 100644
--- a/indra/newview/skins/default/xui/pl/panel_people.xml
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -66,16 +66,16 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml
index 34c105225d..d69d137d23 100644
--- a/indra/newview/skins/default/xui/pl/panel_places.xml
+++ b/indra/newview/skins/default/xui/pl/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profil" name="profile_btn" tool_tip="Pokaż profil miejsca"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index 6eceed46d3..6a8309cca5 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -1072,9 +1072,6 @@
<string name="InvFolder My Inventory">
Moja Szafa
</string>
- <string name="InvFolder My Favorites">
- Moje ulubione
- </string>
<string name="InvFolder Library">
Biblioteka
</string>
@@ -1133,10 +1130,10 @@
Gesturki
</string>
<string name="InvFolder Favorite">
- Ulubione
+ Moje ulubione
</string>
<string name="InvFolder favorite">
- Ulubione
+ Moje ulubione
</string>
<string name="InvFolder Current Outfit">
Obecny strój
@@ -1698,7 +1695,7 @@
<string name="RegionNoCovenantOtherOwner">
Brak umowy dla tego majątku. Każda posiadłość w tym majątku została sprzedana przez właściciela majątku nie Linden Lab. Skontaktuj się z właścicielem majątku w celu uzuskania szczegółów sprzedaży.
</string>
- <string name="covenant_last_modified" value="Ostatnio modyfikowano:"/>
+ <string name="covenant_last_modified" value="Ostatnio modyfikowano: "/>
<string name="none_text" value=" (żadne) "/>
<string name="never_text" value=" (nigdy) "/>
<string name="GroupOwned">
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index e48cac7d1f..514c7382f8 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -133,12 +133,12 @@ Vá para o menu Mundo &gt; Sobre o terreno ou selecione outro lote para mostrar
0
</text>
<button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/>
+ <button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possuído, estar com o conteúdo configurado e não estar pronto para leilão."/>
<button label="Dados do script" name="Scripts..."/>
<button label="Comprar para o grupo" name="Buy For Group..."/>
<button label="Comprar passe..." label_selected="Comprar passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a este terreno." width="125"/>
<button label="Abandonar terreno..." label_selected="Abandonar terreno..." name="Abandon Land..."/>
<button label="Pedir terreno" name="Reclaim Land..."/>
- <button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possuído, estar com o conteúdo configurado e não estar pronto para leilão."/>
</panel>
<panel label="CONTRATO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -308,6 +308,9 @@ Apenas lotes maiores podem ser listados na busca.
<panel.string name="push_restrict_region_text">
Proibido empurrar (regulamento da região)
</panel.string>
+ <panel.string name="see_avs_text">
+ Veja e bata papo com os residentes deste terreno
+ </panel.string>
<text name="allow_label">
Autorizar outros residentes a:
</text>
@@ -370,6 +373,10 @@ Apenas lotes maiores podem ser listados na busca.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clique para escolher uma imagem"/>
+ <text name="allow_label5">
+ Permitir que residentes de outros terrenos:
+ </text>
+ <check_box label="Ver avatares" name="SeeAvatarsCheck" tool_tip="Permite que residentes de outros terrenos vejam e conversem com os residentes deste terreno e vice-versa."/>
<text name="landing_point">
Ponto de Aterrissagem: [LANDING]
</text>
@@ -429,6 +436,11 @@ Mídia:
Som:
</text>
<check_box label="Limitar sons de gestos e objetos a esta parcela" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Ãudio de avatares:
+ </text>
+ <check_box label="Todos" name="all av sound check"/>
+ <check_box label="Grupo" name="group av sound check"/>
<text name="Voice settings:">
Voz:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
index 666e185819..acc462ea94 100644
--- a/indra/newview/skins/default/xui/pt/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPÇÕES DE GRADE">
- <spinner label="Unidade da grade (metros)" name="GridResolution"/>
- <spinner label="Ext. da Grade (metros)" name="GridDrawSize"/>
+ <floater.string name="grid_screen_text">
+ Tela
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mundo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referência
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anexo
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacidade da grade">
+ Modo
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Selecione o tipo de régua da grade onde o objeto será colocado">
+ <combo_box.item label="Grid SL" name="World"/>
+ <combo_box.item label="Grid local" name="Local"/>
+ <combo_box.item label="Grid de referência" name="Reference"/>
+ </combo_box>
+ <spinner label="Unidades (metros):" name="GridResolution"/>
+ <spinner label="Extensões (metros)" name="GridDrawSize"/>
<check_box label="Encaixar em sub-unidades" name="GridSubUnit"/>
<check_box label="Ver corte transversal" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacidade da grade">
diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
deleted file mode 100644
index 9560a3b418..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITOR DE CICLO DE DIA">
- <tab_container name="Day Cycle Tabs">
- <panel label="Ciclo do dia" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 0:00
- </text>
- <text name="WL3am">
- 3:00
- </text>
- <text name="WL6am">
- 6:00
- </text>
- <text name="WL9amHash">
- 9:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 24:00
- </text>
- <button label="Adicionar chave" label_selected="Adicionar chave" name="WLAddKey"/>
- <button label="Apagar chave" label_selected="Apagar chave" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Configurações de Quadro-chave:
- </text>
- <text name="WLCurKeyTimeText">
- Tempo-chave:
- </text>
- <spinner label="Hora" name="WLCurKeyHour"/>
- <spinner label="Minutos" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Ajuste-chave:
- </text>
- <combo_box label="Ajuste" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Grudar:
- </text>
- <combo_box label="5 minutos" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Duração do Ciclo:
- </text>
- <spinner label="Hora" name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Seg." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Visualizar
- </text>
- <button label="Tocar" label_selected="Tocar" name="WLAnimSky"/>
- <button label="Pare!" label_selected="Pare" name="WLStopAnimSky"/>
- <button label="Usar o horário da Propriedade" label_selected="Ir para o horário da Propriedade" name="WLUseLindenTime"/>
- <button label="Salvar o Dia teste" label_selected="Salvar o Dia teste" name="WLSaveDayCycle"/>
- <button label="Carregar o Dia teste" label_selected="Carregar o Dia teste" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..a8b5d8f67d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="EXCLUIR CONF AMBIENTE">
+ <string name="title_water">
+ Excluir pré-configuração da água
+ </string>
+ <string name="title_sky">
+ Excluir pré-configuração de céu
+ </string>
+ <string name="title_day_cycle">
+ Excluir pré-configuração dos dias
+ </string>
+ <string name="label_water">
+ Pré-configuração:
+ </string>
+ <string name="label_sky">
+ Pré-configuração:
+ </string>
+ <string name="label_day_cycle">
+ Ciclo dia:
+ </string>
+ <string name="msg_confirm_deletion">
+ Tem certeza de que quer excluir esta pré-configuração?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Impossível excluir pré-configuração utilizada por um ou mais ciclos de dia .
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="label">
+ Pré-configuração:
+ </text>
+ <button label="Excluir" name="delete"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..9e25938986
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Editar ciclo dos dias">
+ <string name="title_new">
+ Criar novo ciclo de dias
+ </string>
+ <string name="title_edit">
+ Editar ciclo dos dias
+ </string>
+ <string name="hint_new">
+ Dê um nome ao seu ciclo dos dias, ajuste os controles para criá-lo e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar sua configuração do dia, ajuste os controles e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="label">
+ Nome:
+ </text>
+ <text name="note">
+ Observação: trocar o nome de uma pré-configuração criará uma nova sem modificar a uma pré-configuração atual.
+ </text>
+ <text name="hint_item1">
+ - Clique em uma guia para editar as configurações e horário de um céu.
+ </text>
+ <text name="hint_item2">
+ - Clique e arraste as guias para definir as transições.
+ </text>
+ <text name="hint_item3">
+ - Use a seta para rever o ciclo dos dias.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Adicionar chave" label_selected="Adicionar chave" name="WLAddKey"/>
+ <button label="Excluir chave" label_selected="Excluir chave" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 24:00
+ </text>
+ <text name="WL3am">
+ 03:00
+ </text>
+ <text name="WL6am">
+ 06:00
+ </text>
+ <text name="WL9amHash">
+ 09:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL3pm">
+ 15:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL9pm">
+ 21:00
+ </text>
+ <text name="WL12am2">
+ 24:00
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Configuração do céu:
+ </text>
+ <combo_box label="Pré-configuração" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Hora:
+ </text>
+ <time name="time" value="06:00"/>
+ <check_box label="Usar como novo ciclo de dias" name="make_default_cb"/>
+ <button label="Salvar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..1f1fbcce7e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Editar pré-configuração do céu">
+ <string name="title_new">
+ Criar nova pré-configuração de céu
+ </string>
+ <string name="title_edit">
+ Editar pré-configuração do céu
+ </string>
+ <string name="hint_new">
+ Dê um nome à sua pré-configuração, ajuste os controles para criá-la e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar sua pré-configuração do céu, ajuste os controles e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="hint">
+ Para editar sua pré-configuração do céu, ajuste os controles e clique em &quot;Salvar&quot;.
+ </text>
+ <text name="label">
+ Nome:
+ </text>
+ <text name="note">
+ Observação: trocar o nome de uma pré-configuração criará uma nova sem modificar a pré-configuração atual.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSFERA" name="Atmosphere">
+ <text name="BHText">
+ Horizonte azul
+ </text>
+ <text name="BDensText">
+ Horizonte com névoa
+ </text>
+ <text name="BDensText2">
+ Densidade azul
+ </text>
+ <text name="HDText">
+ Densidade da névoa
+ </text>
+ <text name="DensMultText">
+ Multiplicador de densidade
+ </text>
+ <text name="WLDistanceMultText">
+ Multiplicador de distância
+ </text>
+ <text name="MaxAltText">
+ Altitude máxima
+ </text>
+ </panel>
+ <panel label="ILUMINAÇÃO" name="Lighting">
+ <text name="SLCText">
+ Cor do sol/lua
+ </text>
+ <text name="WLAmbientText">
+ Ambiente
+ </text>
+ <text name="SunGlowText">
+ Brilho do sol
+ </text>
+ <slider label="Foco" name="WLGlowB"/>
+ <slider label="Tamanho" name="WLGlowR"/>
+ <text name="WLStarText">
+ Brilho das estrelas
+ </text>
+ <text name="SceneGammaText">
+ Raios gama
+ </text>
+ <text name="TODText">
+ Posição do sol/lua
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 24:00
+ </text>
+ <text name="WL6am">
+ 06:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL12am2">
+ 24:00
+ </text>
+ <time name="WLDayTime" value="06:00"/>
+ <text name="WLEastAngleText">
+ Ângulo leste
+ </text>
+ </panel>
+ <panel label="NUVENS" name="Clouds">
+ <text name="WLCloudColorText">
+ Cor das nuvens
+ </text>
+ <text name="WLCloudColorText2">
+ XY / densidade das nuvens
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Cobertura das nuvens
+ </text>
+ <text name="WLCloudScaleText">
+ Escala das nuvens
+ </text>
+ <text name="WLCloudDetailText">
+ Detalhe das nuvens (XY / densidade)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Passagem das nuvens X
+ </text>
+ <check_box label="Fixar" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Passagem das nuvens Y
+ </text>
+ <check_box label="Fixar" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Usar esta pré-configuração como meu novo céu" name="make_default_cb"/>
+ <button label="Salvar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..7bde22851e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Editar pré-configuração da água">
+ <string name="title_new">
+ Criar nova pré-configuração de água
+ </string>
+ <string name="title_edit">
+ Editar pré-configuração da água
+ </string>
+ <string name="hint_new">
+ Dê um nome à sua pré-configuração, ajuste os controles para criá-la e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar sua pré-configuração de água, ajuste os controles e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="hint">
+ Para editar sua pré-configuração, ajuste os controles e clique em &quot;Salvar&quot;.
+ </text>
+ <text name="label">
+ Nome da pré-configuração:
+ </text>
+ <text name="note">
+ Observação: trocar o nome de uma pré-configuração criará uma nova sem modificar a configuração atual.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Cor da névoa da água
+ </text>
+ <text name="water_fog_density_label">
+ Expoente da densidade da névoa
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modificador de névoa submerso
+ </text>
+ <text name="BHText">
+ Direção de onda grande
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Escala de ondas de reflexo
+ </text>
+ <text name="HDText">
+ Escala de Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Recuo de Fresnel
+ </text>
+ <text name="BHText2">
+ Direção de onda pequena
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Escala de refração acima
+ </text>
+ <text name="WaterScaleBelowText">
+ Escala de refração abaixo
+ </text>
+ <text name="MaxAltText">
+ Multiplicador de distorção
+ </text>
+ <text name="BHText3">
+ Mapa normal
+ </text>
+ </panel>
+ <check_box label="Usar esta pré-configuração na minha água" name="make_default_cb"/>
+ <button label="Salvar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
deleted file mode 100644
index 3ca8d934c9..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_env_settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDITOR DO AMBIENTE">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Hora do Dia
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <text name="EnvCloudText">
- Cobertura de
-Nuvens
- </text>
- <text name="EnvWaterColorText">
- Cor da água
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Selecionar a cor"/>
- <text name="EnvWaterFogText">
- Névoa da
-água
- </text>
- <button bottom="-144" label="Usar hora da propriedade" name="EnvUseEstateTimeButton" width="155"/>
- <button label="Céu Avançado" left="167" name="EnvAdvancedSkyButton" width="155"/>
- <button label="Ãgua Avançada" left="326" name="EnvAdvancedWaterButton" width="155"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_environment_settings.xml b/indra/newview/skins/default/xui/pt/floater_environment_settings.xml
new file mode 100644
index 0000000000..4055ba97ef
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="AMBIENTE">
+ <text name="note">
+ Use as opções abaixo para personalizar as configurações de ambiente no visualizador.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar configurações da região" name="use_region_settings"/>
+ <radio_item label="Personalizar meu ambiente" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Observação: suas configurações não se aplicam aos outros usuários.
+ </text>
+ <text name="water_settings_title">
+ Configuração de água
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo céu / dia
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Céu fixo" name="my_sky_settings"/>
+ <radio_item label="Ciclo dia" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_model_preview.xml b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
index cdad55bded..4a537fafb1 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inativo
</string>
+ <string name="status_parse_error">
+ Dae parsing - erro, detalhes no log.
+ </string>
<string name="status_reading_file">
Carregando...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Erro: Número de Vertex acima de 65534. Abortado.
</string>
+ <string name="bad_element">
+ Erro: elemento inválido
+ </string>
<string name="high">
Alto
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Simplificando...
</string>
+ <string name="tbd">
+ A ser definido
+ </string>
<text name="name_label">
Nome:
</text>
@@ -74,23 +83,26 @@
Nível de detalhamento: Mais baixo
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
- <text name="physics cost">
- Custo físico: [COST]
- </text>
- <text name="upload fee">
- Taxa de upload: N/D
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ AVISO:
+ </text>
+ <text name="warning_message">
+ Não será possível concluir o upload final desse modelo para os servidores do Second Life. [[VURL] Saiba como] ativar o upload de modelos mesh.
+ </text>
+ <text name="weights_text">
+ Download:
+Físico:
+Servidor:
+
+Equivalente em prims:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Padrão" name="reset_btn" tool_tip="Valores padrão"/>
- <button label="Upload" name="ok_btn" tool_tip="Carregar no simulador"/>
- <button label="Cancelar" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Nível de detalhamento:" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Tarifa de upload: L$ [FEE]
+ </text>
+ <button label="Definir como padrão" name="reset_btn" tool_tip="Definir como padrão"/>
+ <button label="Calcular pesos e tarifa" name="calculate_btn" tool_tip="Calcular pesos e tarifa"/>
+ <button label="Upload" name="ok_btn" tool_tip="Carregar no simulador"/>
+ <button label="Cancelar" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
index 1064e16e83..a67a66a446 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
@@ -2,190 +2,216 @@
<floater name="Model Wizard" title="CARREGAR ASSISTENTE DE MODELAGEM">
<button label="5. Carregar" name="upload_btn"/>
<button label="4. Revisar" name="review_btn"/>
- <button label="3. Física" name="physics2_btn"/>
<button label="3. Física" name="physics_btn"/>
<button label="2. Otimizar" name="optimize_btn"/>
<button label="1. Selecionra arquivo" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carregar modelo
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Escolher arquivo de modelo
</text>
</panel>
- <text name="description">
- O assistente ajuda você a importar modelos mesh para o Second Life. Para começar, especifique o arquivo com o modelo a ser importado. O Second Life suporta arquivos COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nome do arquivo:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Usuários avançados: se você estiver familiarizado com ferramentas de criação de conteúdo 3D, use o Advanced Uploader.
+ </text>
+ <button label="Trocar para avançado" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Escolha o arquivo de modelo para upload
</text>
<button label="Procurar..." label_selected="Procurar..." name="browse"/>
+ <text name="support_collada_text">
+ O Second Life oferece suporte a arquivos COLLADA (.dae)
+ </text>
+ <text name="dimensions_label">
+ Dimensões (metros):
+ </text>
<text name="dimensions">
- X Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ AVISO:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Não será possível concluir a etapa final do upload desse modelo para os servidores do Second Life. [secondlife:///app/floater/learn_more Saiba como] configurar sua conta para uploads de modelos mesh.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Otimizar
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Otimizar modelo
</text>
</panel>
- <text name="description">
- O assistente otimizou seu modelo para melhorar o desempenho. Ajuste os resultados da otimização abaixou ou clique em Próximo para prosseguir.
+ <text name="optimize_hint">
+ O modelo foi ajustado para desempenho. Faça novos ajustes, se desejar.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Gerar nível de detalhes
+ </text>
<text name="high_detail_text">
- Gerar nível de detalhamento: Alto
+ Gerar nível de detalhes: Alto
</text>
<text name="medium_detail_text">
- Gerar nível de detalhamento: Médio
+ Gerar nível de detalhes: Médio
</text>
<text name="low_detail_text">
- Gerar nível de detalhamento: Baixo
+ Gerar nível de detalhes: Baixo
</text>
<text name="lowest_detail_text">
- Gerar nível de detalhamento: Mais baixo
+ Gerar nível de detalhes: mais baixo
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Visualizar modelo:
+ <text name="optimize_performance_text">
+ Desempenho
+ </text>
+ <text name="optimize_faster_rendering_text">
+ Renderização mais rápida
+Menos detalhes
+Peso menor do prim
+ </text>
+ <text name="optimize_accuracy_text">
+ Precisão
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Renderização mais lenta
+Mais detalhes
+Peso maior do prim
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
</text>
- <combo_box name="preview_lod_combo2" tool_tip="LOD para ver no renderizador de pré-visualização">
- <combo_item name="high">
- Alto
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Recalcular geometria" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Visualização da geometria
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="LOD para exibir na renderização de visualização">
+ <combo_item name="preview_lod_high">
+ Máximo de detalhes
</combo_item>
- <combo_item name="medium">
- Médio
+ <combo_item name="preview_lod_medium">
+ Detalhes médios
</combo_item>
- <combo_item name="low">
- Baixo
+ <combo_item name="preview_lod_low">
+ Poucos detalhes
</combo_item>
- <combo_item name="lowest">
- Mais baixo
+ <combo_item name="preview_lod_lowest">
+ Mínimo de detalhes
</combo_item>
</combo_box>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
- <text name="dimensions">
- X Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Ajustar físico
</text>
</panel>
- <text name="description">
- O assistente cria uma forma física que determina como o objeto interage com outros objetos e avatares. Ajuste a barra para o nível de detalhamento mais apropriado para a finalidade do seu objeto:
+ <text name="physics_hint">
+ Criaremos uma forma para o corpo externo do modelo. Ajuste o nível de detalhes como necessário para a finalidade desejada de seu modelo.
</text>
- <panel name="content">
- <text name="streaming cost">
- Custo do recurso: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Desempenho
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <text name="physics_faster_rendering_text">
+ Renderização mais rápida
+Menos detalhes
+Peso menor do prim
</text>
- </panel>
- <text name="description">
- Veja a forma física abaixo e clique em Próximo para prosseguir. Para modificar o formato físico, clique em Anterior.
- </text>
- <panel name="content">
- <text name="lod_label">
- Visualizar modelo:
+ <text name="physics_accuracy_text">
+ Precisão
+ </text>
+ <text name="physics_slower_dendering_text">
+ Renderização mais lenta
+Mais detalhes
+Peso maior do prim
</text>
- <combo_box name="preview_lod_combo3" tool_tip="LOD para ver no renderizador de pré-visualização">
- <combo_item name="high">
- Alto
+ <text name="physics_example_1">
+ Exemplos:
+Objetos em movimento
+Objetos voadores
+Veículos
+ </text>
+ <text name="physics_example_2">
+ Exemplos:
+Objetos estáticos pequenos
+Objetos menos detalhados
+Mobília simples
+ </text>
+ <text name="physics_example_3">
+ Exemplos:
+Objetos estáticos
+Objetos detalhados
+Construções
+ </text>
+ <button label="Recalcular físico" name="recalculate_physics_btn"/>
+ <button label="Recalculando..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Visualização do físico
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="LOD para exibir na renderização de visualização">
+ <combo_item name="preview_lod2_high">
+ Máximo de detalhes
</combo_item>
- <combo_item name="medium">
- Médio
+ <combo_item name="preview_lod2_medium">
+ Detalhes médios
</combo_item>
- <combo_item name="low">
- Baixo
+ <combo_item name="preview_lod2_low">
+ Poucos detalhes
</combo_item>
- <combo_item name="lowest">
- Mais baixo
+ <combo_item name="preview_lod2_lowest">
+ Mínimo de detalhes
</combo_item>
</combo_box>
- <text name="dimensions">
- X Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Revisar
</text>
</panel>
- <text name="description">
- Veja os detalhes abaixo e clique em Carregar para carregar seu modelo. Seu saldo L$ será cobrado quando você clicar em Carregar.
- </text>
- <panel name="content">
- <text name="lod_label">
- Visualizar modelo:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impacto no lote/região: [EQUIV] equivalentes de prim
</text>
- <combo_box name="preview_lod_combo" tool_tip="LOD para ver no renderizador de pré-visualização">
- <combo_item name="high">
- Alto
- </combo_item>
- <combo_item name="medium">
- Médio
- </combo_item>
- <combo_item name="low">
- Baixo
- </combo_item>
- <combo_item name="lowest">
- Mais baixo
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X Y: Z:
+ <text name="review_fee">
+ Uma tarifa de upload de L$ [FEE] será debitada da sua conta.
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Ao clicar no botão de upload, você confirma que detém os direitos apropriados sobre o material contido no modelo.
</text>
</panel>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
- <text name="physics cost">
- Custo físico: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carregado!
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Upload concluído
</text>
</panel>
- <text name="description">
- Parabéns! Seu modelo foi carregado com êxito. Procure-o na pasta Objetos de seu inventário.
+ <text name="model_uploaded_text">
+ Seu modelo foi carregado.
+ </text>
+ <text name="inventory_text">
+ Disponível na pasta Objetos do seu inventário.
+ </text>
+ <text name="charged_fee">
+ L$ [FEE] foram debitados da sua conta.
</text>
</panel>
<button label="&lt;&lt; Voltar" name="back"/>
<button label="Próximo &gt;&gt;" name="next"/>
+ <button label="Calcular pesos e tarifa &gt;&gt;" name="calculate"/>
+ <button label="Calculando..." name="calculating"/>
<button label="Carregar" name="upload" tool_tip="Carregar no simulador"/>
<button label="Cancelar" name="cancel"/>
<button label="Fechar" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inativo
</string>
+ <string name="status_parse_error">
+ Dae parsing - erro, detalhes no log.
+ </string>
<string name="status_reading_file">
Carregando...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Erro: Número de Vertex acima de 65534. Abortado.
</string>
+ <string name="bad_element">
+ Erro: elemento inválido
+ </string>
<string name="high">
Alto
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_search.xml b/indra/newview/skins/default/xui/pt/floater_search.xml
index 4bf7181180..3509cb786d 100644
--- a/indra/newview/skins/default/xui/pt/floater_search.xml
+++ b/indra/newview/skins/default/xui/pt/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="BUSCAR">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Carregando...
</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
index c6694d13b2..83f7b24572 100644
--- a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="DEBUG SETTINGS">
<radio_group name="boolean_combo">
- <radio_item label="TRUE" name="TRUE" value="verdadeiro"/>
- <radio_item label="FALSE" name="FALSE" value=""/>
+ <radio_item label="TRUE" name="TRUE" />
+ <radio_item label="FALSE" name="FALSE" />
</radio_group>
<color_swatch label="Cor" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index ed273d9f28..6850bf2d7c 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Clicar e arrastar para selecionar a terra
</floater.string>
- <floater.string name="grid_screen_text">
- Tela
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] objetos ( [PRIM_COUNT] prims[PE_STRING] ) selecionados
</floater.string>
- <floater.string name="grid_local_text">
- Local
- </floater.string>
- <floater.string name="grid_world_text">
- Mundo
- </floater.string>
- <floater.string name="grid_reference_text">
- Referência
- </floater.string>
- <floater.string name="grid_attachment_text">
- Anexo
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] equivalentes de prims
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Foco"/>
<button label="" label_selected="" name="button move" tool_tip="Mover"/>
@@ -66,20 +57,12 @@
<check_box label="Editar partes linkadas" name="checkbox edit linked parts"/>
<button label="Link" name="link_btn"/>
<button label="Desconectar links" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Esticar ambos lados" name="checkbox uniform label">
Esticar ambos lados
</text>
<check_box initial_value="true" label="Esticar texturas" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Mostrar na grade" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Selecione a régua da grade onde o objeto será colocado">
- <combo_box.item label="Grade SL" name="World"/>
- <combo_box.item label="Local" name="Local"/>
- <combo_box.item label="Referência" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Ajustar" name="checkbox snap to grid"/>
<button label="Opções..." label_selected="Opções..." name="Options..." tool_tip="Mais opções de grade"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -119,23 +102,11 @@
Força
</text>
<button label="Aplicar" label_selected="Aplicar" name="button apply to selection" tool_tip="Modificar a terra selecionada"/>
- <text left="134" name="obj_count">
- Objetos: [COUNT]
- </text>
- <text left="134" name="prim_count">
- Prims: [COUNT]
- </text>
- <text name="linked_set_count">
- Conjuntos linkados: [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Custo dos conjuntos selecionados [prims],[complexidade física]">
- Custo: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Objetos: [COUNT]
+ <text name="selection_empty">
+ Nada selecionado.
</text>
- <text name="object_cost" tool_tip="Custo dos objetos selecionados [prims] / [complexidade física]">
- Custo: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Peso do físico [PHYS_WEIGHT], custo de renderização [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs" tab_max_width="60" tab_min_width="30" width="288">
<panel label="Comum" name="General">
@@ -353,7 +324,6 @@
<combo_box.item label="Toróide" name="Torus"/>
<combo_box.item label="Plano" name="Plane"/>
<combo_box.item label="Cilindro" name="Cylinder"/>
- <combo_box.item label="Mesh" name="Mesh"/>
</combo_box>
</panel>
<panel label="Recursos" name="Features">
@@ -405,7 +375,7 @@
</combo_box>
<spinner label="Gravidade" name="Physics Gravity"/>
<spinner label="Fricção" name="Physics Friction"/>
- <spinner label="Densidade" name="Physics Density"/>
+ <spinner label="Densidade em 100 kg/m^3" name="Physics Density"/>
<spinner label="Restituição" name="Physics Restitution"/>
</panel>
<panel label="Textura" name="Texture">
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
index cb9b3c8c0d..4f01600d9f 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Novo!)
</string>
+ <string name="effect_Arena">
+ Arena
+ </string>
+ <string name="effect_Beast">
+ Fera
+ </string>
+ <string name="effect_Buff">
+ Entusiasmado
+ </string>
+ <string name="effect_Buzz">
+ Zumbido
+ </string>
+ <string name="effect_Camille">
+ Camille
+ </string>
+ <string name="effect_Creepy">
+ Assustador
+ </string>
+ <string name="effect_CreepyBot">
+ RobôAssustador
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ RobôVozGrossa
+ </string>
+ <string name="effect_Demon">
+ Demônio
+ </string>
+ <string name="effect_Flirty">
+ Paquerador
+ </string>
+ <string name="effect_Foxy">
+ Sensual
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Bônus_Halloween_2010
+ </string>
+ <string name="effect_Helium">
+ Hélio
+ </string>
+ <string name="effect_Husky">
+ Rouco
+ </string>
+ <string name="effect_Intercom">
+ Interfone
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Pesadelo
+ </string>
+ <string name="effect_PopBot">
+ RobôPop
+ </string>
+ <string name="effect_Rachel">
+ Rachel
+ </string>
+ <string name="effect_Radio">
+ Rádio
+ </string>
+ <string name="effect_Robot">
+ Robô
+ </string>
+ <string name="effect_Roxanne">
+ Roxanne
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samantha
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Baixinho
+ </string>
+ <string name="effect_Sneaky">
+ Sorrateiro
+ </string>
+ <string name="effect_Stallion">
+ Garanhão
+ </string>
+ <string name="effect_Sultry">
+ Ardente
+ </string>
+ <string name="effect_Thunder">
+ Trovão
+ </string>
+ <string name="effect_Vixen">
+ Maliciosa
+ </string>
+ <string name="effect_WhinyBot">
+ RobôReclamão
+ </string>
<text name="preview_text">
Visualizar
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
deleted file mode 100644
index b2a06f4ff2..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_water.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="EDITOR DE ÃGUA AVANÇADO">
- <text name="KeyFramePresetsText" width="175">
- Pré-configurações da Ãgua:
- </text>
- <combo_box left_delta="175" name="WaterPresetsCombo" width="150"/>
- <button label="Novo" label_selected="Novo" name="WaterNewPreset"/>
- <button label="Salvar" label_selected="Salvar" name="WaterSavePreset"/>
- <button label="Deletar" label_selected="Deletar" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="DEFINIÇÕES" name="Settings">
- <text name="BHText">
- Cor da névoa da Ãgua
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Selecionar a cor"/>
- <text name="WaterFogDensText">
- Expoente da Densidade de névoa
- </text>
- <button label="?" left="209" name="WaterFogDensityHelp"/>
- <text name="WaterUnderWaterFogModText">
- Modificador da névoa Subaquática
- </text>
- <button label="?" left="209" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Escala da Marola de Reflexão
- </text>
- <button label="?" left="415" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Escala de Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Deslocamento de Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelOffsetHelp"/>
- <text name="DensMultText">
- Refratar a Escala para Cima
- </text>
- <button label="?" left="640" name="WaterScaleAboveHelp"/>
- <text name="WaterScaleBelowText">
- Refratar a Escala para Baixo
- </text>
- <button label="?" left="640" name="WaterScaleBelowHelp"/>
- <text name="MaxAltText">
- Multiplicador de Difusão
- </text>
- <button label="?" left="640" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="IMAGEM" name="Waves">
- <text name="BHText">
- Direção da Onda Maior
- </text>
- <button label="?" left="170" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Direção da Onda Pequena
- </text>
- <button label="?" left="170" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Mapa Normal
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
deleted file mode 100644
index ec459bbb26..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="EDITOR DE CÉU AVANÇADO">
- <text name="KeyFramePresetsText" width="140">
- Pré-definições de Céu:
- </text>
- <combo_box left_delta="140" name="WLPresetsCombo"/>
- <button label="Novo" label_selected="Novo" name="WLNewPreset"/>
- <button label="Salvar" label_selected="Salvar" left_delta="72" name="WLSavePreset"/>
- <button label="Deletar" label_selected="Deletar" left_delta="72" name="WLDeletePreset"/>
- <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" left_delta="84" name="WLDayCycleMenuButton" width="150"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFERA" name="Atmosphere">
- <text name="BHText">
- Horizonte Azul
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Horizonte da Neblina
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Densidade de Azul
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densidade da Neblina
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Multiplicador de Densidade
- </text>
- <button label="?" left="635" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Multiplicador de Distância
- </text>
- <button label="?" left="635" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitude Máxima
- </text>
- <button label="?" left="635" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="ILUMINAÇÃO" name="Lighting">
- <text name="SLCText">
- Cor do Sol/Lua
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Posição do Sol/Lua
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Ambiente
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Ângulo Leste
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Brilho do Sol
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Foco" name="WLGlowB"/>
- <slider label="Tamanho" name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma da Cena
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Brilho da Estrela
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUVENS" name="Clouds">
- <text name="WLCloudColorText">
- Cor da Nuvem
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Densidade/ XY da Nuvem
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Cobertura da Nuvem
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Escala da Nuvem
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text font="SansSerifSmall" name="WLCloudDetailText">
- Detalhe da Nuvem (XY/Densidade)
- </text>
- <button label="?" left="421" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Rolagem X da Nuvem
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Travar" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Rolagem Y da Nuvem
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Travar" name="WLCloudLockY"/>
- <check_box label="Desenhar Nuvens Clássicas" name="DrawClassicClouds"/>
- <button label="?" left="645" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
index 3dff3d7c8a..1d3fa48fb3 100644
--- a/indra/newview/skins/default/xui/pt/menu_login.xml
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -17,7 +17,7 @@
<menu_item_call label="Mostrar TOS" name="TOS"/>
<menu_item_call label="Mostrar mensagem crítica" name="Critical"/>
<menu_item_call label="Teste de mídia do navegador" name="Web Browser Test"/>
- <menu_item_call label="Teste de conteúdo web" name="Web Content Floater Test"/>
+ <menu_item_call label="Test de Bugs de Conteúdo Web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/>
<menu_item_call label="Exibir painel de notificações" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
index 228ce46a31..0d32d58de4 100644
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Ordenar por conversas mais recentes" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordenar por nome" name="sort_name"/>
<menu_item_check label="Ordenar por distância" name="sort_distance"/>
<menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
+ <menu_item_check label="Ver Mapa" name="view_map"/>
<menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 4213db7440..ea54afed5e 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Meus grupos" name="My Groups"/>
<menu_item_check label="Bate-papo local" name="Nearby Chat"/>
<menu_item_call label="Pessoas por perto" name="Active Speakers"/>
+ <menu_item_check label="Voz por perto" name="Nearby Voice"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_check label="Mini Mapa" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Meio-dia" name="Noon"/>
<menu_item_call label="Pôr-do-Sol" name="Sunset"/>
<menu_item_call label="Meia-noite" name="Midnight"/>
- <menu_item_call label="Horário da propriedade" name="Revert to Region Default"/>
- <menu_item_call label="Editor de ambiente" name="Environment Editor"/>
+ </menu>
+ <menu label="Editor de ambientes" name="Enviroment Editor">
+ <menu_item_call label="Configurações de ambiente..." name="Enviroment Settings"/>
+ <menu label="Pré-configurações de água" name="Water Presets">
+ <menu_item_call label="Nova pré-configuração..." name="new_water_preset"/>
+ <menu_item_call label="Editar pré-configuração..." name="edit_water_preset"/>
+ <menu_item_call label="Excluir pré-configuração..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Pré-configurações de céu" name="Sky Presets">
+ <menu_item_call label="Nova pré-configuração..." name="new_sky_preset"/>
+ <menu_item_call label="Editar pré-configuração..." name="edit_sky_preset"/>
+ <menu_item_call label="Excluir pré-configuração..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Pré-configurações de dias" name="Day Presets">
+ <menu_item_call label="Nova pré-configuração..." name="new_day_preset"/>
+ <menu_item_call label="Editar pré-configuração..." name="edit_day_preset"/>
+ <menu_item_call label="Excluir pré-configuração..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Construir" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Disable Camera Constraints" name="Disable Camera Distance"/>
<menu_item_check label="Foto de alta resolução" name="HighResSnapshot"/>
<menu_item_check label="Compactar fotos para HD" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Compactar fotos para HD" name="CompressSnapshotsToDisk"/>
<menu label="Ferramentas de desempenho" name="Performance Tools">
<menu_item_call label="Medidor de lag" name="Lag Meter"/>
<menu_item_check label="Barra de estatísticas" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
index 7b6ce4d87e..75dca703cb 100644
--- a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Editar look" name="edit"/>
<menu_item_call label="Tirar" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copiar lista do look para a área de transferência" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 56a33f51e8..22de7edfdd 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -1541,6 +1541,10 @@ Por favor volte mais tarde.
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Você fez [OFFERS] ofertas de teletransporte, porém o seu limite é [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Convocar residente à sua localização com poderes de deus?
<form name="form">
@@ -1962,6 +1966,10 @@ Você gostaria de deixar o modo Ocupado antes de completar esta transação?
Tem certeza de que quer apagar todo o histórico de viagens, web e buscas?
<usetemplate name="okcancelbuttons" notext="Não" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Tem certeza que deseja apagar o cache do visualizador?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Você tem certeza de que deseja limpar os cookies?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sim"/>
@@ -1987,48 +1995,30 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
Você deseja substituir a pré-configuração salva?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
- <notification name="WLDeletePresetAlert">
- Você deseja apagar [SKY]?
- <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
- </notification>
<notification name="WLNoEditDefault">
Você não pode editar ou excluir um padrão predefinido.
</notification>
<notification name="WLMissingSky">
Este arquivo de ciclo de dia se refere a um arquivo de céu faltando: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Existe efeito de Pós-Processamento. Você deseja substituí-lo?
- <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
+ <notification name="WLRegionApplyFail">
+ As configurações não podem ser aplicadas à região. Talvez sair e votlar à região resolva. Motivo: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Me dê o nome para o novo céu.
- <form name="form">
- <input name="message">
- Novo padrão
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- Este padrão já existe!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Impossível excluir a última chave do ciclo pois um ciclo não pode ficar vazio. Modifique a última chave em vez de tentar apagá-la, depois crie uma chave nova.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Dê o nome para o novo padrão de água.
- <form name="form">
- <input name="message">
- Nova Apresentação
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Não é possível adicionar mais chaves de quadro a este ciclo. O máximo de chaves de quadro para ciclos de dia de [SCOPE] é [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- Este padrão já existe!
+ <notification name="EnvUpdateRate">
+ Cada configuração de ambiente só pode ser atualizada a cada [WAIT] segundos. Aguarde pelo menos isso e tente novamente.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Você não pode editar ou apagar um padrão predefinido.
+ <notification name="PPSaveEffectAlert">
+ Existe efeito de Pós-Processamento. Você deseja substituí-lo?
+ <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Não foi possível iniciar uma nova sessão bate-papo com [RECIPIENT].
@@ -2057,13 +2047,14 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
<usetemplate ignoretext="Vestir as roupas que eu criar enquanto edito minha aparência" name="okcancelignore" notext="Não" yestext="Sim"/>
</notification>
<notification name="NotAgeVerified">
- Ãrea restrita a residentes com idade comprovada. Deseja ir ao site do [SECOND_LIFE] para comprovar sua idade?
+ Você deve ter no mínimo 18 anos para acessar conteúdo e áreas adultas no Second Life. Visite nossa página de verificação de idade para confirmar que você tem mais de 18 anos.
+Isso abrirá o seu navegador.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=pt
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Ainda não comprovei minha idade" name="okcancelignore" notext="Não" yestext="Sim"/>
+ <usetemplate ignoretext="Ainda não comprovei minha idade" name="okcancelignore" notext="Cancelar" yestext="Ir para verificação de idade"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Ãrea restrita a residentes que já cadastraram seus dados de pagamento Deseja ir ao site do [SECOND_LIFE] para cuidar disso?
@@ -2316,6 +2307,9 @@ Logo, não é possível voar aqui.
<notification name="NoBuild">
Esta área desativou a opção de construir. Não é possível construir ou fazer rez de objetos nesta área.
</notification>
+ <notification name="SeeAvatars">
+ Este terreno oculta os avatares e bate-papo de outro terreno. Não é possível ver residentes fora do terreno e vice-versa. O bate-papo por texto no canal 0 também está bloqueado.
+ </notification>
<notification name="ScriptsStopped">
Um administrador não permitiu scripts temporariamente nesta região.
</notification>
@@ -2407,7 +2401,7 @@ Por favor, tente novamente em alguns instantes.
</notification>
<notification name="ObjectGiveItem">
Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], lhe deu este(a) [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Segure"/>
<button name="Discard" text="Descarte"/>
@@ -2740,7 +2734,15 @@ O botão será exibido quando houver espaço suficente.
Selecione os residentes com quem compartilhar.
</notification>
<notification name="MeshUploadError">
- [LABEL] não foi carregado: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] não foi carregado: [MESSAGE] [IDENTIFIER]
+
+Mais detalhes no log.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Erro ao solicitar permissões de upload de mesh.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Não foi possível obter o recurso &apos;[CAPABILITY]&apos; da região.
</notification>
<notification name="ShareItemsConfirmation">
Tem certeza de que quer compartilhar os itens abaixo?
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
index 432affcf09..5eb9987e71 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Salvar destaque" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Cancelar" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_list.xml b/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
index 2b2e7c1dbf..2d74e092a4 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/people/[SEARCH_TERM] Busca]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Você ainda não tem nenhum look. Tente encontrar um na [secondlife:///app/search/groups Busca]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
+ <menu_button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
<button name="trash_btn" tool_tip="Excluir o look selecionado"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index aece30738b..f3af15b991 100644
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -66,16 +66,16 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
index 7fc07483c0..8abe579702 100644
--- a/indra/newview/skins/default/xui/pt/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
@@ -64,6 +64,8 @@
<text name="scripts_value" value="Ligado"/>
<text name="damage_label" value="Dano:"/>
<text name="damage_value" value="Desligado"/>
+ <text name="see_avatars_label" value="Ver avatares:"/>
+ <text name="see_avatars_value" value="Desligar"/>
<button label="Sobre o terreno" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
index 828ef3e469..69f0baf65f 100644
--- a/indra/newview/skins/default/xui/pt/panel_places.xml
+++ b/indra/newview/skins/default/xui/pt/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
index bbe7e15ba2..c72928fc35 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache:
+ </text>
+ <spinner label="Cache (64 - 9984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Limpar cache" label_selected="Limpar cache" name="clear_cache"/>
+ <text name="Cache location">
+ Localização do cache:
+ </text>
+ <button label="Navegar" label_selected="Navegar" name="set_cache"/>
+ <button label="Localização padrão" label_selected="Localização padrão" name="default_cache_location"/>
<text name="UI Size:">
Interface:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
index 4164147e5c..d910a7b812 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Ativado" name="enable_voice_check"/>
<check_box label="Autorizar auto-play de mídias" name="media_auto_play_btn" tool_tip="Marque esta opção para auto-executar mídias, se elas quiserem" value="true"/>
<check_box label="Tocar mídia anexada em outros avatares" name="media_show_on_others_btn" tool_tip="Desmarque esta opção para ocultar mídias anexadas em avatares por perto" value="true"/>
+ <check_box label="Tocar áudio de gestos" name="gesture_audio_play_btn" tool_tip="Selecione para ouvir o áudio de gestos" value="verdadeiro"/>
<text name="voice_chat_settings">
Configuração de bate-papo de voz
</text>
@@ -35,28 +36,5 @@
<button label="Definir chave" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Redefinir como botão do meio do mouse"/>
<button label="Controles de entrada/saída" name="device_settings_btn" width="180"/>
- <panel label="Configuração dos dispositivo" name="device_settings_panel">
- <panel.string name="default_text">
- Padrão
- </panel.string>
- <panel.string name="default system device">
- Dispositivo padrão do sistema
- </panel.string>
- <panel.string name="no device">
- Nenhum
- </panel.string>
- <text name="Input">
- Entrada
- </text>
- <text name="My volume label">
- Meu volume:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume usando o controle deslizante"/>
- <text name="wait_text">
- Aguarde
- </text>
- <text name="Output">
- Saída
- </text>
- </panel>
+ <panel label="Configuração dos dispositivo" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_environment.xml b/indra/newview/skins/default/xui/pt/panel_region_environment.xml
new file mode 100644
index 0000000000..79eedebe5f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ambiente" name="panel_env_info">
+ <text name="water_settings_title">
+ Selecione as configurações de Ãgua e céu / Ciclo dos dias que todos os visitantes à sua região verão. Mais informações
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar o padrão do Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Usar as seguintes configurações" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Configuração de água
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo céu / dia
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Céu fixo" name="my_sky_settings"/>
+ <radio_item label="Ciclo dia" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Aplicar" name="apply_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
index b9b0e9d90f..74330a8946 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
@@ -7,21 +7,56 @@
nenhum
</text>
<spinner label="Altura da água" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Limite do aumento do &#10;terreno" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Limite mais baixo do &#10;terreno" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Usar o sol da propriedade" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Sol fixo" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Fase" name="sun_hour_slider"/>
- <button label="Aplicar" name="apply_btn"/>
+ <spinner label="Limite do aumento do
+terreno" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Limite mais baixo do
+terreno" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Texturas de terreno (exige arquivos .tga 512x512, 24 bit)
+ </text>
+ <text name="height_text_lbl">
+ 1 (Baixo)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Alto)
+ </text>
+ <text name="height_text_lbl5">
+ Intervalos de elevação de textura
+ </text>
+ <text name="height_text_lbl10">
+ Os valores representam o intervalo de mistura das texturas acima.
+ </text>
+ <text name="height_text_lbl11">
+ Em metros, o valor BAIXO é a altura MÃXIMA da Textura 1, e HIGH é a altura MÃNIMA da Textura 4.
+ </text>
+ <text name="height_text_lbl6">
+ Noroeste
+ </text>
+ <text name="height_text_lbl7">
+ Nordeste
+ </text>
+ <spinner label="Baixo" name="height_start_spin_1"/>
+ <spinner label="Baixo" name="height_start_spin_3"/>
+ <spinner label="Alto" name="height_range_spin_1"/>
+ <spinner label="Alto" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Sudoeste
+ </text>
+ <text name="height_text_lbl9">
+ Sudeste
+ </text>
+ <spinner label="Baixo" name="height_start_spin_0"/>
+ <spinner label="Baixo" name="height_start_spin_2"/>
+ <spinner label="Alto" name="height_range_spin_0"/>
+ <spinner label="Alto" name="height_range_spin_2"/>
<button label="Download de terreno RAW..." name="download_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
- <button label="?" name="download_raw_help"/>
<button label="Upload de terreno RAW..." name="upload_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
- <button label="?" name="upload_raw_help"/>
- <button width="170" label="Nivelar o terreno" name="bake_terrain_btn" tool_tip="Ajustar terreno atual como o ponto médio para os limites de aumento/decréscimo"/>
- <button left="190" label="?" name="bake_terrain_help"/>
+ <button label="Nivelar o terreno" name="bake_terrain_btn" tool_tip="Ajustar terreno atual como o ponto médio para os limites de aumento/decréscimo" width="170"/>
+ <button label="Aplicar" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
index fb612ca19b..66db89f48f 100644
--- a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Padrão
</panel.string>
+ <string name="name_no_device">
+ Nenhum
+ </string>
+ <string name="name_default_system_device">
+ Dispositivo padrão do sistema
+ </string>
<text name="Input">
Entrada
</text>
+ <text name="Output">
+ Saída
+ </text>
<text name="My volume label">
Meu volume:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Aguarde
</text>
- <text name="Output">
- Saída
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index 11ac6c106a..988e7c7076 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Coisas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Itens recebidos ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Itens recebidos
+ </string>
+ <button label="Itens recebidos" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] novos
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Compras do marketplace serão entregues aqui.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Caixa de saída de comerciante" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Enviar para minha vitrine no Marketplace"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Abra uma conta de comerciante para usar este recurso.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index c5268966c1..2f3b438564 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -25,6 +25,9 @@
<string name="StartupInitializingVFS">
Iniciando VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Falha na inicialização dos gráficos. Atualize seu driver gráfico!
+ </string>
<string name="ProgressRestoring">
Restaurando...
</string>
@@ -79,6 +82,12 @@
<string name="LoginQuicktimeOK">
O QuickTime foi inicializado com sucesso.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Solicitando recursos da região...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Solicitando recursos da região, tentativa [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
Aguardando handshake com a região...
</string>
@@ -1132,6 +1141,12 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="InventoryNoTexture">
Você não possui uma cópia desta textura no seu inventário
</string>
+ <string name="InventoryInboxNoItems">
+ Compras do marketplace serão entregues aqui.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Arraste seus itens aqui para preparar sua listagem na sua vitrine do Marketplace.
+ </string>
<string name="no_transfer" value="(não transferível)"/>
<string name="no_modify" value="(não modificável)"/>
<string name="no_copy" value="(não copiável)"/>
@@ -1172,9 +1187,6 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="InvFolder My Inventory">
Meu inventário
</string>
- <string name="InvFolder My Favorites">
- Meus favoritos
- </string>
<string name="InvFolder Library">
Biblioteca
</string>
@@ -1233,10 +1245,10 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
Gestos
</string>
<string name="InvFolder Favorite">
- Favoritos
+ Meus favoritos
</string>
<string name="InvFolder favorite">
- Favoritos
+ Meus favoritos
</string>
<string name="InvFolder Current Outfit">
Look atual
@@ -1259,6 +1271,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="InvFolder All">
Tudo
</string>
+ <string name="no_attachments">
+ Nenhum anexo vestido
+ </string>
<string name="Buy">
Comprar
</string>
@@ -1568,6 +1583,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
</string>
<string name="SummaryForTheWeek" value="Resumo para esta semana, com início em "/>
<string name="NextStipendDay" value=". Próximo dia de salário é "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value="Grupo Divisão individualI"/>
<string name="GroupColumn" value="Grupo"/>
<string name="Balance">
@@ -1594,6 +1612,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="IMTeen">
adolescente
</string>
+ <string name="Anyone">
+ qualquer um
+ </string>
<string name="RegionInfoError">
erro
</string>
@@ -1801,7 +1822,7 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="RegionNoCovenantOtherOwner">
Não foi definido um contrato para essa Região. O terreno nesta região está sendo vendido pelo Proprietário, não pela Linden Lab. Favor contatar o Proprietário da região para detalhes de venda.
</string>
- <string name="covenant_last_modified" value="Última modificação:"/>
+ <string name="covenant_last_modified" value="Última modificação: "/>
<string name="none_text" value="(nenhum)"/>
<string name="never_text" value="(nunca)"/>
<string name="GroupOwned">
@@ -1810,6 +1831,12 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="Public">
Público
</string>
+ <string name="LocalSettings">
+ Configurações locais
+ </string>
+ <string name="RegionSettings">
+ Configurações da região
+ </string>
<string name="ClassifiedClicksTxt">
Cliques: [TELEPORT] teletransporte, [MAP] mapa, [PROFILE] perfil
</string>
@@ -1882,6 +1909,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="GroupMoneyDebits">
Débitos
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Conteúdo
</string>
@@ -3597,6 +3627,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Região em geral
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatar visíveis e bate-papo permitido fora deste terreno
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] Atualização
</string>
@@ -4013,6 +4046,87 @@ Denunciar abuso
<string name="Female - Wow">
Wow - feminino
</string>
+ <string name="/bow">
+ /reverência
+ </string>
+ <string name="/clap">
+ /palmas
+ </string>
+ <string name="/count">
+ /contar
+ </string>
+ <string name="/extinguish">
+ /apagar
+ </string>
+ <string name="/kmb">
+ /dane_se
+ </string>
+ <string name="/muscle">
+ /músculos
+ </string>
+ <string name="/no">
+ /não
+ </string>
+ <string name="/no!">
+ /não!
+ </string>
+ <string name="/paper">
+ /papel
+ </string>
+ <string name="/pointme">
+ /apontar_eu
+ </string>
+ <string name="/pointyou">
+ /apontar_você
+ </string>
+ <string name="/rock">
+ /pedra
+ </string>
+ <string name="/scissor">
+ /tesoura
+ </string>
+ <string name="/smoke">
+ /fumar
+ </string>
+ <string name="/stretch">
+ /alongar
+ </string>
+ <string name="/whistle">
+ /assobiar
+ </string>
+ <string name="/yes">
+ /sim
+ </string>
+ <string name="/yes!">
+ /sim!
+ </string>
+ <string name="afk">
+ ldt
+ </string>
+ <string name="dance1">
+ dança1
+ </string>
+ <string name="dance2">
+ dança2
+ </string>
+ <string name="dance3">
+ dança3
+ </string>
+ <string name="dance4">
+ dança4
+ </string>
+ <string name="dance5">
+ dança5
+ </string>
+ <string name="dance6">
+ dança6
+ </string>
+ <string name="dance7">
+ dança7
+ </string>
+ <string name="dance8">
+ dança8
+ </string>
<string name="AvatarBirthDateFormat">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml
index bee940ddc1..0ac85d399e 100644
--- a/indra/newview/skins/default/xui/zh/floater_about.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about.xml
@@ -35,7 +35,7 @@ Qt Webkit 版本: [QT_WEBKIT_VERSION]
(無)
</floater.string>
<floater.string name="AboutTraffic">
- 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]%)
</floater.string>
<tab_container name="about_tab">
<panel label="資訊" name="support_panel">
@@ -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)
</text_editor>
</panel>
</tab_container>
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..e59a23fda0 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
</panel.string>
<panel.string name="area_text">
- Area
+ å€åŸŸ
</panel.string>
<panel.string name="area_size_text">
[AREA] m²
@@ -42,7 +42,7 @@
You must approve your purchase to modify this land.
</panel.string>
<panel.string name="group_owned_text">
- (社團所æ“有)
+ (群組所æ“有)
</panel.string>
<panel.string name="profile_text">
檔案
@@ -81,13 +81,13 @@
分級:
</text>
<text name="ContentRatingText">
- æˆäºº
+ 完全æˆäºº
</text>
<text name="Owner:">
æ“有者:
</text>
<text name="Group:">
- 社團:
+ 群組:
</text>
<button label="設定" name="Set..."/>
<check_box label="Allow Deed to Group" name="check deed" tool_tip="A group officer can deed this land to the group, so it will be supported by the group&apos;s land allocation."/>
@@ -133,7 +133,7 @@
</text>
<button label="購買土地" name="Buy Land..."/>
<button label="腳本資訊" name="Scripts..."/>
- <button label="Buy For Group" name="Buy For Group..."/>
+ <button label="為群組購買" name="Buy For Group..."/>
<button label="購買通行權" name="Buy Pass..." tool_tip="A pass gives you temporary access to this land."/>
<button label="放棄土地" name="Abandon Land..."/>
<button label="Reclaim Land" name="Reclaim Land..."/>
@@ -186,7 +186,7 @@
分級:
</text>
<text name="region_maturity_text">
- æˆäºº
+ 完全æˆäºº
</text>
<text name="resellable_lbl">
Resale:
@@ -238,7 +238,7 @@
<button label="顯示" label_selected="顯示" name="ShowOwner"/>
<button label="退回" name="ReturnOwner..." tool_tip="Return objects to their owners."/>
<text name="Set to group:">
- Set to group:
+ 設定群組:
</text>
<text name="group_objects_text">
[COUNT]
@@ -286,10 +286,10 @@ Only large parcels can be listed in search.
This option is disabled because you cannot modify this parcel&apos;s options.
</panel.string>
<panel.string name="mature_check_mature">
- Moderate Content
+ é©åº¦æˆäººå…§å®¹
</panel.string>
<panel.string name="mature_check_adult">
- æˆäººå…§å®¹
+ 完全æˆäººå…§å®¹
</panel.string>
<panel.string name="mature_check_mature_tooltip">
Your parcel information or content is considered moderate.
@@ -315,17 +315,17 @@ Only large parcels can be listed in search.
建造:
</text>
<check_box label="任何人" name="edit objects check"/>
- <check_box label="社團" name="edit group objects check"/>
+ <check_box label="群組" name="edit group objects check"/>
<text name="allow_label3">
物件進入:
</text>
<check_box label="任何人" name="all object entry check"/>
- <check_box label="社團" name="group object entry check"/>
+ <check_box label="群組" name="group object entry check"/>
<text name="allow_label4">
執行腳本:
</text>
<check_box label="任何人" name="check other scripts"/>
- <check_box label="社團" name="check group scripts"/>
+ <check_box label="群組" name="check group scripts"/>
<text name="land_options_label">
土地é¸é …:
</text>
@@ -335,7 +335,7 @@ Only large parcels can be listed in search.
<combo_box name="land category with adult">
<combo_box.item label="任何類別" name="item0"/>
<combo_box.item label="Linden Location" name="item1"/>
- <combo_box.item label="æˆäºº" name="item2"/>
+ <combo_box.item label="完全æˆäºº" name="item2"/>
<combo_box.item label="Arts &amp; Culture" name="item3"/>
<combo_box.item label="Business" name="item4"/>
<combo_box.item label="Educational" name="item5"/>
@@ -363,7 +363,7 @@ Only large parcels can be listed in search.
<combo_box.item label="Rental" name="item13"/>
<combo_box.item label="Other" name="item12"/>
</combo_box>
- <check_box label="Moderate Content" name="MatureCheck" tool_tip=" "/>
+ <check_box label="é©åº¦æˆäººå…§å®¹" name="MatureCheck" tool_tip=" "/>
<text name="Snapshot:">
快照:
</text>
@@ -416,12 +416,12 @@ Only large parcels can be listed in search.
</text>
<check_box label="Loop" name="media_loop" tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."/>
</panel>
- <panel label="SOUND" name="land_audio_panel">
+ <panel label="è²éŸ³" name="land_audio_panel">
<text name="MusicURL:">
- Music URL:
+ 音樂 URL:
</text>
<text name="Sound:">
- Sound:
+ è²éŸ³ï¼š
</text>
<check_box label="Restrict gesture and object sounds to this parcel" name="check sound local"/>
<text name="Voice settings:">
@@ -449,11 +449,11 @@ Only large parcels can be listed in search.
</text>
<check_box label="Payment Information on File [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Ban unidentified Residents."/>
<check_box label="年齡驗證 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."/>
- <check_box label="Allow Group Access: [GROUP]" name="GroupCheck" tool_tip="Set group in the General tab."/>
- <check_box label="Sell passes to:" name="PassCheck" tool_tip="Allows temporary access to this parcel"/>
+ <check_box label="å…許出入的群組:[GROUP]" name="GroupCheck" tool_tip="Set group in the General tab."/>
+ <check_box label="出售通行權給:" name="PassCheck" tool_tip="å…許暫時出入這個地段"/>
<combo_box name="pass_combo">
<combo_box.item label="Anyone" name="Anyone"/>
- <combo_box.item label="社團" name="Group"/>
+ <combo_box.item label="群組" name="Group"/>
</combo_box>
<spinner label="Price in L$:" name="PriceSpin"/>
<spinner label="Hours of access:" name="HoursSpin"/>
@@ -462,11 +462,11 @@ Only large parcels can be listed in search.
Allowed Residents
</text>
<name_list name="AccessList" tool_tip="([LISTED] listed, [MAX] max)"/>
- <button label="Add" name="add_allowed"/>
- <button label="Remove" label_selected="Remove" name="remove_allowed"/>
+ <button label="添加" name="add_allowed"/>
+ <button label="移除" label_selected="移除" name="remove_allowed"/>
</panel>
<panel name="Banned_layout_panel">
- <text label="Ban" name="BanCheck">
+ <text label="ç¦æ­¢" name="BanCheck">
被å°éŽ–çš„å±…æ°‘
</text>
<name_list name="BannedList" tool_tip="([LISTED] listed, [MAX] max)"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_animation_preview.xml b/indra/newview/skins/default/xui/zh/floater_animation_preview.xml
index b5d65119f7..baf68ffce6 100644
--- a/indra/newview/skins/default/xui/zh/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/zh/floater_animation_preview.xml
@@ -35,7 +35,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
Cannot get JOINT name.
</floater.string>
<floater.string name="E_ST_NO_OFFSET">
- Cannot find OFFSET.
+ 無法尋找ä½ç§»ã€‚
</floater.string>
<floater.string name="E_ST_NO_CHANNELS">
Cannot find CHANNELS.
diff --git a/indra/newview/skins/default/xui/zh/floater_auction.xml b/indra/newview/skins/default/xui/zh/floater_auction.xml
index eb1c9e55dc..b1862bc582 100644
--- a/indra/newview/skins/default/xui/zh/floater_auction.xml
+++ b/indra/newview/skins/default/xui/zh/floater_auction.xml
@@ -6,6 +6,6 @@
<check_box initial_value="true" label="Include yellow selection fence" name="fence_check"/>
<button label="Snapshot" label_selected="Snapshot" name="snapshot_btn"/>
<button label="Sell to Anyone" label_selected="Sell to Anyone" name="sell_to_anyone_btn"/>
- <button label="Clear Settings" label_selected="Clear Settings" name="reset_parcel_btn"/>
+ <button label="清除設定" label_selected="清除設定" name="reset_parcel_btn"/>
<button label="Start Auction" label_selected="Start Auction" name="start_auction_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
index 27a4199f8c..7e2d74c728 100644
--- a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
@@ -36,7 +36,7 @@
</panel>
<panel label="接近我" name="NearMePanel">
<text name="InstructSelectResident">
- é¸æ“‡ä¸€ä½é™„近的人:
+ é¸æ“‡ä¸€å€‹é™„近的人:
</text>
<slider label="範åœ" name="near_me_range"/>
<text name="meters">
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
index b1dc081f04..36dae7c798 100644
--- a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
@@ -17,31 +17,31 @@ Textures
<panel name="scroll_content_panel">
<texture_picker label="é ­é«®" name="hair-baked"/>
<texture_picker label="é ­é«®" name="hair_grain"/>
- <texture_picker label="Hair Alpha" name="hair_alpha"/>
+ <texture_picker label="é ­é«®åŠé€æ˜Ž" name="hair_alpha"/>
<texture_picker label="頭部" name="head-baked"/>
- <texture_picker label="Makeup" name="head_bodypaint"/>
- <texture_picker label="Head Alpha" name="head_alpha"/>
+ <texture_picker label="化å¦" name="head_bodypaint"/>
+ <texture_picker label="頭部åŠé€æ˜Ž" name="head_alpha"/>
<texture_picker label="頭部刺é’" name="head_tattoo"/>
<texture_picker label="眼ç›" name="eyes-baked"/>
<texture_picker label="眼ç›" name="eyes_iris"/>
- <texture_picker label="Eyes Alpha" name="eyes_alpha"/>
- <texture_picker label="Upper Body" name="upper-baked"/>
- <texture_picker label="Upper BodyPaint" name="upper_bodypaint"/>
+ <texture_picker label="眼ç›åŠé€æ˜Ž" name="eyes_alpha"/>
+ <texture_picker label="上åŠèº«åŠé€æ˜Ž" name="upper-baked"/>
+ <texture_picker label="上åŠèº«èº«é«”部ä½" name="upper_bodypaint"/>
<texture_picker label="內衣" name="upper_undershirt"/>
<texture_picker label="手套" name="upper_gloves"/>
<texture_picker label="襯衫" name="upper_shirt"/>
- <texture_picker label="Upper Jacket" name="upper_jacket"/>
- <texture_picker label="Upper Alpha" name="upper_alpha"/>
- <texture_picker label="Upper Tattoo" name="upper_tattoo"/>
- <texture_picker label="Lower Body" name="lower-baked"/>
- <texture_picker label="Lower BodyPaint" name="lower_bodypaint"/>
+ <texture_picker label="上åŠèº«å¤¾å…‹" name="upper_jacket"/>
+ <texture_picker label="上åŠèº«åŠé€æ˜Ž" name="upper_alpha"/>
+ <texture_picker label="上åŠèº«åˆºé’" name="upper_tattoo"/>
+ <texture_picker label="下åŠèº«" name="lower-baked"/>
+ <texture_picker label="下åŠèº«èº«é«”部ä½" name="lower_bodypaint"/>
<texture_picker label="內褲" name="lower_underpants"/>
<texture_picker label="襪å­" name="lower_socks"/>
<texture_picker label="éž‹å­" name="lower_shoes"/>
<texture_picker label="褲å­" name="lower_pants"/>
<texture_picker label="夾克" name="lower_jacket"/>
- <texture_picker label="Lower Alpha" name="lower_alpha"/>
- <texture_picker label="Lower Tattoo" name="lower_tattoo"/>
+ <texture_picker label="下åŠèº«åŠé€æ˜Ž" name="lower_alpha"/>
+ <texture_picker label="下åŠèº«åˆºé’" name="lower_tattoo"/>
<texture_picker label="裙å­" name="skirt-baked"/>
<texture_picker label="裙å­" name="skirt"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
index 629b0d17d5..660710fb7b 100644
--- a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="EDIT CONTENT PERMISSIONS">
+<floater name="floaterbulkperms" title="編輯內容物權é™">
<floater.string name="nothing_to_modify_text">
- Selection contains no editable contents.
+ é¸æ“‡æœªåŒ…å«å¯ç·¨è¼¯çš„內容物。
</floater.string>
<floater.string name="status_text">
- Setting permissions on [NAME]
+ 設定權é™æ–¼ [NAME]
</floater.string>
<floater.string name="start_text">
- Starting permission change requests...
+ 開始進行權é™è®Šæ›´è¦æ±‚...
</floater.string>
<floater.string name="done_text">
- Finished permission change requests.
+ 權é™è®Šæ›´è¦æ±‚已完æˆã€‚
</floater.string>
<icon name="icon_animation" tool_tip="動作"/>
<icon name="icon_bodypart" tool_tip="身體部ä½"/>
@@ -24,10 +24,10 @@
<button label="√ 全部" name="check_all"/>
<button label="清除" label_selected="無" name="check_none"/>
<text name="newperms">
- New Content Permissions
+ 新內容物權é™
</text>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="share_with_group"/>
<text name="AnyoneLabel">
@@ -39,7 +39,7 @@
</text>
<check_box label="修改" name="next_owner_modify"/>
<check_box label="覆製" name="next_owner_copy"/>
- <check_box initial_value="true" label="轉移" name="next_owner_transfer" tool_tip="Next owner can give away or resell this object"/>
+ <check_box initial_value="true" label="轉移" name="next_owner_transfer" tool_tip="下一個æ“有者能é€å‡ºæˆ–轉售這個物件"/>
<button label="確定" name="apply"/>
<button label="å–消" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_bumps.xml b/indra/newview/skins/default/xui/zh/floater_bumps.xml
index d2b7494b08..64c11af953 100644
--- a/indra/newview/skins/default/xui/zh/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/zh/floater_bumps.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_bumps" title="BUMPS, PUSHES &amp; HITS">
<floater.string name="none_detected">
- None detected
+ 未åµæ¸¬åˆ°
</floater.string>
<floater.string name="bump">
- [TIME] [NAME] bumped you
+ [TIME] [NAME] 碰撞你
</floater.string>
<floater.string name="llpushobject">
- [TIME] [NAME] pushed you with a script
+ [TIME] [NAME] 以腳本推撞你
</floater.string>
<floater.string name="selected_object_collide">
- [TIME] [NAME] hit you with an object
+ [TIME] [NAME] 以物件擊中你
</floater.string>
<floater.string name="scripted_object_collide">
- [TIME] [NAME] hit you with a scripted object
+ [TIME] [NAME] 以腳本物件擊中你
</floater.string>
<floater.string name="physical_object_collide">
- [TIME] [NAME] hit you with a physical object
+ [TIME] [NAME] 以物ç†ç‰©ä»¶æ“Šä¸­ä½ 
</floater.string>
<floater.string name="timeStr">
[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
index d8e9fb0ecc..f187a1ab40 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
@@ -7,7 +7,7 @@
你需è¦æ›´å¤š L$
</text>
<text name="contacting">
- Contacting LindeX...
+ è¯æŽ¥åˆ° LindeX 中...
</text>
<text name="info_buying">
購買 L$
@@ -28,7 +28,7 @@
1234
</line_editor>
<text name="buying_label">
- For the price
+ 以此價格
</text>
<text name="currency_est">
approx. [LOCALAMOUNT]
@@ -60,7 +60,7 @@
<button label="ç«‹å³è³¼è²·" name="buy_btn"/>
<button label="å–消" name="cancel_btn"/>
<text name="info_cannot_buy">
- Unable to Buy
+ 無法購買
</text>
- <button label="Continue to the Web" name="error_web"/>
+ <button label="繼續到網é " name="error_web"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_land.xml b/indra/newview/skins/default/xui/zh/floater_buy_land.xml
index 34401c11d0..c4a5d174ef 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_land.xml
@@ -16,7 +16,7 @@
You do not have permission to buy land for your active group.
</floater.string>
<floater.string name="no_land_selected">
- No land selected.
+ 無土地被é¸æ“‡ã€‚
</floater.string>
<floater.string name="multiple_parcels_selected">
Multiple different parcels selected.
@@ -32,7 +32,7 @@ Try selecting a smaller area.
The group already owns the parcel.
</floater.string>
<floater.string name="you_already_own">
- You already own the parcel.
+ 你已經æ“有這個地段。
</floater.string>
<floater.string name="set_to_sell_to_other">
The selected parcel is set to sell to another party.
@@ -47,7 +47,7 @@ Try selecting a smaller area.
<floater.string name="processing">
Processing your purchase...
-(This may take a minute or two.)
+(éŽç¨‹é€™å°‡æœƒèŠ±è²»ä¸€åˆ°å…©åˆ†é˜ï¼‰
</floater.string>
<floater.string name="fetching_error">
There has been an error while fetching land buying information.
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_object.xml b/indra/newview/skins/default/xui/zh/floater_buy_object.xml
index ef8bc183a4..507e482766 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_object.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="BUY COPY OF OBJECT">
+<floater name="contents" title="購買物件副本">
<floater.string name="title_buy_text">
購買
</floater.string>
diff --git a/indra/newview/skins/default/xui/zh/floater_camera.xml b/indra/newview/skins/default/xui/zh/floater_camera.xml
index 65d04583f5..f4db20684c 100644
--- a/indra/newview/skins/default/xui/zh/floater_camera.xml
+++ b/indra/newview/skins/default/xui/zh/floater_camera.xml
@@ -10,56 +10,56 @@
Move Camera Up and Down, Left and Right
</floater.string>
<floater.string name="camera_modes_title">
- Camera modes
+ æ”影機模å¼
</floater.string>
<floater.string name="pan_mode_title">
- Orbit Zoom Pan
+ 環繞縮放平移
</floater.string>
<floater.string name="presets_mode_title">
- Preset Views
+ é è¨­è¦–角
</floater.string>
<floater.string name="free_mode_title">
- View Object
+ 視角物件
</floater.string>
<panel name="controls">
<panel name="preset_views_list">
<panel_camera_item name="front_view">
<panel_camera_item.text name="front_view_text">
- Front View
+ å‰è¦–視角
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="group_view">
<panel_camera_item.text name="side_view_text">
- Side View
+ å´è¦–視角
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view">
<panel_camera_item.text name="rear_view_text">
- Rear View
+ 後視視角
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="camera_modes_list">
<panel_camera_item name="object_view">
<panel_camera_item.text name="object_view_text">
- Object View
+ 物件視角
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="mouselook_view">
<panel_camera_item.text name="mouselook_view_text">
- Mouselook View
+ 第一人稱視角
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="zoom">
<joystick_rotate name="cam_rotate_stick" tool_tip="Orbit camera around focus"/>
<slider_bar name="zoom_slider" tool_tip="Zoom camera toward focus"/>
- <joystick_track name="cam_track_stick" tool_tip="Move camera up and down, left and right"/>
+ <joystick_track name="cam_track_stick" tool_tip="移動æ”影機上下左å³"/>
</panel>
</panel>
<panel name="buttons">
- <button label="" name="presets_btn" tool_tip="Preset Views"/>
+ <button label="" name="presets_btn" tool_tip="é è¨­è¦–角"/>
<button label="" name="pan_btn" tool_tip="Orbit Zoom Pan"/>
- <button label="" name="avatarview_btn" tool_tip="Camera modes"/>
+ <button label="" name="avatarview_btn" tool_tip="æ”影機模å¼"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_choose_group.xml b/indra/newview/skins/default/xui/zh/floater_choose_group.xml
index 9968565bf2..9977bfc828 100644
--- a/indra/newview/skins/default/xui/zh/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/zh/floater_choose_group.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="社團">
+<floater name="groups" title="群組">
<text name="groupdesc">
- é¸æ“‡ä¸€å€‹ç¤¾åœ˜ï¼š
+ é¸æ“‡ä¸€å€‹ç¾¤çµ„:
</text>
<button label="確定" label_selected="確定" name="OK"/>
<button label="å–消" label_selected="å–消" name="Cancel"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_display_name.xml b/indra/newview/skins/default/xui/zh/floater_display_name.xml
index e12fc21166..39abfe0b8b 100644
--- a/indra/newview/skins/default/xui/zh/floater_display_name.xml
+++ b/indra/newview/skins/default/xui/zh/floater_display_name.xml
@@ -13,6 +13,6 @@
Type your new name again to confirm:
</text>
<button label="儲存" name="save_btn" tool_tip="Save your new Display Name"/>
- <button label="Reset" name="reset_btn" tool_tip="Make Display Name the same as Username"/>
+ <button label="é‡è¨­" name="reset_btn" tool_tip="Make Display Name the same as Username"/>
<button label="å–消" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_env_settings.xml b/indra/newview/skins/default/xui/zh/floater_env_settings.xml
index 65a97f0cff..534ee7f0d0 100644
--- a/indra/newview/skins/default/xui/zh/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/zh/floater_env_settings.xml
@@ -13,13 +13,13 @@
Cloud Cover
</text>
<text name="EnvWaterColorText">
- Water Color
+ 水色
</text>
<color_swatch name="EnvWaterColor" tool_tip="Click to open color picker"/>
<text name="EnvWaterFogText">
- Water Fog
+ 水霧
</text>
<button label="Use Estate Time" name="EnvUseEstateTimeButton"/>
- <button label="Advanced Sky" name="EnvAdvancedSkyButton"/>
- <button label="Advanced Water" name="EnvAdvancedWaterButton"/>
+ <button label="進階天空" name="EnvAdvancedSkyButton"/>
+ <button label="進階水文" name="EnvAdvancedWaterButton"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_gesture.xml b/indra/newview/skins/default/xui/zh/floater_gesture.xml
index 651a976774..a809cf085c 100644
--- a/indra/newview/skins/default/xui/zh/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/zh/floater_gesture.xml
@@ -4,7 +4,7 @@
載入中...
</floater.string>
<floater.string name="playing">
- (Playing)
+ (播放中)
</floater.string>
<floater.string name="copy_name">
Copy of [COPY_NAME]
diff --git a/indra/newview/skins/default/xui/zh/floater_god_tools.xml b/indra/newview/skins/default/xui/zh/floater_god_tools.xml
index fbe89ab2a6..448113bf74 100644
--- a/indra/newview/skins/default/xui/zh/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_god_tools.xml
@@ -2,25 +2,25 @@
<floater name="godtools floater" title="神之工具">
<tab_container name="GodTools Tabs">
<panel label="網格" name="grid">
- <button label="Flush This Region&apos;s Map Visibility Caches" label_selected="Flush This Region&apos;s Map Visibility Caches" name="Flush This Region&apos;s Map Visibility Caches"/>
+ <button label="刷新這個地å€çš„地圖å¯è¦–å¿«å–" label_selected="刷新這個地å€çš„地圖å¯è¦–å¿«å–" name="Flush This Region&apos;s Map Visibility Caches"/>
</panel>
<panel label="地å€" name="region">
<text name="Region Name:">
地å€å稱:
</text>
<check_box label="Prelude" name="check prelude" tool_tip="Set this to make the region a prelude"/>
- <check_box label="Fixed Sun" name="check fixed sun" tool_tip="Fix the sun position (like in Region/Estate &gt; Terrain"/>
+ <check_box label="固定太陽" name="check fixed sun" tool_tip="Fix the sun position (like in Region/Estate &gt; Terrain"/>
<check_box label="Reset Home On Teleport" name="check reset home" tool_tip="When Resident teleports out, reset their home to the destination position."/>
<check_box label="Visible" name="check visible" tool_tip="Set this to make the region visible to non-gods"/>
- <check_box label="Damage" name="check damage" tool_tip="Set this to enable damage in this region"/>
- <check_box label="Block Traffic Tracking" name="block dwell" tool_tip="Set this to make the region not compute traffic"/>
- <check_box label="Block Terraform" name="block terraform" tool_tip="Set this to disallow people terraforming their land"/>
- <check_box label="Sandbox" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/>
- <button label="Bake Terrain" label_selected="Bake Terrain" name="Bake Terrain" tool_tip="Save the current terrain as default"/>
+ <check_box label="傷害" name="check damage" tool_tip="Set this to enable damage in this region"/>
+ <check_box label="阻止æµé‡è¿½è¹¤" name="block dwell" tool_tip="Set this to make the region not compute traffic"/>
+ <check_box label="阻止變形" name="block terraform" tool_tip="Set this to disallow people terraforming their land"/>
+ <check_box label="沙盒" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/>
+ <button label="Bake Terrain" label_selected="Bake Terrain" name="Bake Terrain" tool_tip="儲存目å‰çš„地形為é è¨­"/>
<button label="Revert Terrain" label_selected="Revert Terrain" name="Revert Terrain" tool_tip="Replace the current terrain with default"/>
<button label="Swap Terrain" label_selected="Swap Terrain" name="Swap Terrain" tool_tip="Swap current terrain with default"/>
<text name="estate id">
- Estate ID:
+ 領地 ID:
</text>
<text name="parent id">
Parent ID:
@@ -40,14 +40,14 @@
<text name="land cost text">
L$ per m²:
</text>
- <button label="Refresh" label_selected="Refresh" name="Refresh" tool_tip="Click here to refresh the above information"/>
- <button label="套用" label_selected="套用" name="Apply" tool_tip="Click here to apply any changes from above"/>
+ <button label="é‡æ–°æ•´ç†" label_selected="é‡æ–°æ•´ç†" name="Refresh" tool_tip="Click here to refresh the above information"/>
+ <button label="套用" label_selected="套用" name="Apply" tool_tip="點擊此處以接å—套用上述變更"/>
<button label="é¸æ“‡åœ°å€" label_selected="é¸æ“‡åœ°å€" name="Select Region" tool_tip="Select the whole region with the land tool"/>
<button label="ç«‹å³è‡ªå‹•å„²å­˜" label_selected="ç«‹å³è‡ªå‹•å„²å­˜" name="Autosave now" tool_tip="Save gzipped state to autosave directory"/>
</panel>
<panel label="物件" name="objects">
<panel.string name="no_target">
- (no target)
+ (無目標)
</panel.string>
<text name="Region Name:">
地å€å稱:
@@ -61,7 +61,7 @@
<button label="套用" label_selected="套用" name="Apply" tool_tip="Click here to apply any changes from above"/>
<button label="Set Target" label_selected="Set Target" name="Set Target" tool_tip="Set the target avatar for object deletion"/>
<text name="target_avatar_name">
- (no target)
+ (無目標)
</text>
<button label="Delete Target&apos;s Scripted Objects On Others Land" label_selected="Delete Target&apos;s Scripted Objects On Others Land" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Delete all scripted objects owned by the target on land not owned by the target. (no copy) objects will be returned."/>
<button label="Delete Target&apos;s Scripted Objects On *Any* Land" label_selected="Delete Target&apos;s Scripted Objects On *Any* Land" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Delete all scripted objects owned by the target in this region. (no copy) objects will be returned."/>
diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
index fcd702b16d..a41be7ef9a 100644
--- a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
@@ -46,7 +46,7 @@
</text>
<check_box label="覆製" name="CheckEveryoneCopy"/>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="CheckShareWithGroup"/>
<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
index a4ede92ab1..370ab32b9f 100644
--- a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Inventory Finder" title="最近_收ç´å€_物å“">
<check_box label="動作" name="check_animation"/>
- <check_box label="Calling Cards" name="check_calling_card"/>
+ <check_box label="å片" name="check_calling_card"/>
<check_box label="æœè£" name="check_clothing"/>
<check_box label="姿勢" name="check_gesture"/>
<check_box label="地標" name="check_landmark"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
index 3d9d391a21..1d172f63e1 100644
--- a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="MY LAND">
+<floater name="land holdings floater" title="我的土地">
<floater.string name="area_string">
[AREA] m²
</floater.string>
<scroll_list name="parcel list">
<scroll_list.columns label="地段" name="name"/>
<scroll_list.columns label="地å€" name="location"/>
- <scroll_list.columns label="Type" name="type"/>
- <scroll_list.columns label="Area" name="area"/>
+ <scroll_list.columns label="é¡žåž‹" name="type"/>
+ <scroll_list.columns label="å€åŸŸ" name="area"/>
</scroll_list>
- <button label="瞬間傳é€" label_selected="瞬間傳é€" name="Teleport" tool_tip="Teleport to the center of this land."/>
- <button label="地圖" label_selected="地圖" name="Show on Map" tool_tip="Show this land on the world map"/>
+ <button label="瞬間傳é€" label_selected="瞬間傳é€" name="Teleport" tool_tip="瞬間傳é€åˆ°é€™åœŸåœ°çš„中央。"/>
+ <button label="地圖" label_selected="地圖" name="Show on Map" tool_tip="將這塊土地顯示在世界地圖上。"/>
<text name="contrib_label">
Contributions to your groups:
</text>
<scroll_list name="grant list">
- <scroll_list.columns label="社團" name="group"/>
- <scroll_list.columns label="Area" name="area"/>
+ <scroll_list.columns label="群組" name="group"/>
+ <scroll_list.columns label="å€åŸŸ" name="area"/>
</scroll_list>
<text name="allowed_label">
Allowed land holdings at current payment plan:
diff --git a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
index e6f6e32352..fe61c312ed 100644
--- a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
@@ -9,7 +9,7 @@
<floater.string name="Title">
腳本:[NAME]
</floater.string>
- <button label="Reset" label_selected="Reset" name="Reset"/>
- <check_box initial_value="true" label="Running" name="running"/>
+ <button label="é‡è¨­" label_selected="é‡è¨­" name="Reset"/>
+ <check_box initial_value="true" label="執行中" name="running"/>
<check_box initial_value="true" label="Mono" name="mono"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_moveview.xml b/indra/newview/skins/default/xui/zh/floater_moveview.xml
index 3e44f458e7..e1155bdf34 100644
--- a/indra/newview/skins/default/xui/zh/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/zh/floater_moveview.xml
@@ -43,33 +43,33 @@
å‘下飛(按下 C éµï¼‰
</string>
<string name="jump_tooltip">
- Jump (press E)
+ è·³èºï¼ˆæŒ‰ä¸‹ E éµï¼‰
</string>
<string name="crouch_tooltip">
- Crouch (press C)
+ 蹲下(按下 C éµï¼‰
</string>
<string name="walk_title">
- Walk
+ 行走
</string>
<string name="run_title">
- Run
+ è·‘æ­¥
</string>
<string name="fly_title">
飛行
</string>
<panel name="panel_actions">
- <button name="turn left btn" tool_tip="Turn left (press Left Arrow or A)"/>
- <joystick_slide name="move left btn" tool_tip="Walk left (press Shift + Left Arrow or A)"/>
- <button name="turn right btn" tool_tip="Turn right (press Right Arrow or D)"/>
- <joystick_slide name="move right btn" tool_tip="Walk right (press Shift + Right Arrow or D)"/>
- <joystick_turn name="forward btn" tool_tip="Walk forward (press up arrow or W)"/>
- <joystick_turn name="backward btn" tool_tip="Walk backward (press down arrow or S)"/>
+ <button name="turn left btn" tool_tip="左轉(按下左方å‘éµæˆ–按 A éµï¼‰"/>
+ <joystick_slide name="move left btn" tool_tip="å‘左走(按下 Shift 加左方å‘éµæˆ–按 A éµï¼‰"/>
+ <button name="turn right btn" tool_tip="å³è½‰ï¼ˆæŒ‰ä¸‹å³æ–¹å‘éµæˆ–按 D éµï¼‰"/>
+ <joystick_slide name="move right btn" tool_tip="å‘å³èµ°ï¼ˆæŒ‰ä¸‹ Shift 加å³æ–¹å‘éµæˆ–按 D éµï¼‰"/>
+ <joystick_turn name="forward btn" tool_tip="å‘å‰èµ°ï¼ˆæŒ‰å‘上方å‘éµæˆ–按 W éµï¼‰"/>
+ <joystick_turn name="backward btn" tool_tip="å‘後退(按å‘下方å‘éµæˆ–按 S éµï¼‰"/>
<button name="move up btn" tool_tip="å‘上飛(按下 E éµï¼‰"/>
<button name="move down btn" tool_tip="å‘下飛(按下 C 建)"/>
</panel>
<panel name="panel_modes">
- <button label="" name="mode_walk_btn" tool_tip="Walking mode"/>
- <button label="" name="mode_run_btn" tool_tip="Running mode"/>
+ <button label="" name="mode_walk_btn" tool_tip="行走模å¼"/>
+ <button label="" name="mode_run_btn" tool_tip="跑步模å¼"/>
<button label="" name="mode_fly_btn" tool_tip="飛行模å¼"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_mute_object.xml b/indra/newview/skins/default/xui/zh/floater_mute_object.xml
index 7d76f4de08..606e061395 100644
--- a/indra/newview/skins/default/xui/zh/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/zh/floater_mute_object.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="block by name" title="BLOCK OBJECT BY NAME">
+<floater name="block by name" title="ä¾å稱å°éŽ–物件">
<text name="message">
Block an object:
</text>
<line_editor name="object_name">
- Object name
+ 物件å稱
</line_editor>
<text name="note">
* Only blocks object text, not sounds
diff --git a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
index e33183a0dc..a557e1c2e3 100644
--- a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
+++ b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
@@ -6,6 +6,6 @@
儲存我正在穿的為新è£æ‰®ï¼š
</text>
<line_editor name="name ed">
- [DESC] (new)
+ [DESC] (新)
</line_editor>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_pay.xml b/indra/newview/skins/default/xui/zh/floater_pay.xml
index b4841df0ff..0a823cd82e 100644
--- a/indra/newview/skins/default/xui/zh/floater_pay.xml
+++ b/indra/newview/skins/default/xui/zh/floater_pay.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money">
<string name="payee_group">
- 支付社團
+ 支付群組
</string>
<string name="payee_resident">
支付居民
diff --git a/indra/newview/skins/default/xui/zh/floater_pay_object.xml b/indra/newview/skins/default/xui/zh/floater_pay_object.xml
index 2a2aec93b9..39259524d7 100644
--- a/indra/newview/skins/default/xui/zh/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/zh/floater_pay_object.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money">
<string name="payee_group">
- 支付社團
+ 支付群組
</string>
<string name="payee_resident">
支付居民
diff --git a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
index 31b8133a18..498848ee56 100644
--- a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="perm prefs" title="é è¨­ä¸Šå‚³æ¬Šé™">
<panel label="權é™" name="permissions">
- <check_box label="與社團分享" name="share_with_group"/>
+ <check_box label="與群組分享" name="share_with_group"/>
<check_box label="å…許任何人覆製" name="everyone_copy"/>
<text name="NextOwnerLabel">
下一個æ“有者å¯ä»¥ï¼š
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
index 0649ecb791..ad49370423 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
@@ -40,7 +40,7 @@
<combo_box label="ç„¡" name="modifier_combo"/>
<combo_box label="ç„¡" name="key_combo"/>
<text name="library_label">
- Library:
+ 資æºåº«ï¼š
</text>
<scroll_list name="library_list">
<scroll_list.rows name="action_animation" value="動作"/>
@@ -48,7 +48,7 @@
<scroll_list.rows name="action_chat" value="èŠå¤©"/>
<scroll_list.rows name="action_wait" value="等待"/>
</scroll_list>
- <button label="Add &gt;&gt;" name="add_btn"/>
+ <button label="添加 &gt;&gt;" name="add_btn"/>
<text name="steps_label">
Steps:
</text>
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
index 3c2f913a6d..9447939801 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview notecard" title="記事å¡ï¼š">
<floater.string name="no_object">
- Unable to find object containing this notecard.
+ 未發ç¾ç‰©ä»¶åŒ…å«æ­¤è¨˜äº‹å¡ã€‚
</floater.string>
<floater.string name="not_allowed">
- You do not have permission to view this notecard.
+ 你並沒有權é™åŽ»å¯Ÿçœ‹æ­¤è¨˜äº‹å¡ã€‚
</floater.string>
<floater.string name="Title">
記事å¡ï¼š [NAME]
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_sound.xml b/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
index d9854a85b6..d99d13669f 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview_sound">
<floater.string name="Title">
- Sound: [NAME]
+ è²éŸ³ï¼š [NAME]
</floater.string>
<text name="desc txt">
æ述:
diff --git a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
index acec1efcb0..5f0ffea182 100644
--- a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
+++ b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
@@ -5,7 +5,7 @@
Remember, Classified fees are non-refundable.
</text>
- <spinner label="價格: L$" name="price_for_listing" tool_tip="Price for listing." value="50"/>
- <button label="Publish" name="publish_btn"/>
+ <spinner label="價格: L$" name="price_for_listing" tool_tip="刊登費用。" value="50"/>
+ <button label="發布" name="publish_btn"/>
<button label="å–消" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml b/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
index b16a3bd9cc..4ff2a3fc79 100644
--- a/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
+++ b/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="region_debug_console" title="Region Debug"/>
+<floater name="region_debug_console" title="地å€é™¤éŒ¯"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_script_preview.xml b/indra/newview/skins/default/xui/zh/floater_script_preview.xml
index 75ef4ebe73..c3d05402c0 100644
--- a/indra/newview/skins/default/xui/zh/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/zh/floater_script_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
<floater.string name="Title">
- SCRIPT: [NAME]
+ 腳本:[NAME]
</floater.string>
<text name="desc txt">
æ述:
diff --git a/indra/newview/skins/default/xui/zh/floater_script_queue.xml b/indra/newview/skins/default/xui/zh/floater_script_queue.xml
index 4062db5014..ff02946d86 100644
--- a/indra/newview/skins/default/xui/zh/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/zh/floater_script_queue.xml
@@ -7,13 +7,13 @@
Done.
</floater.string>
<floater.string name="Resetting">
- Resetting
+ é‡è¨­ä¸­
</floater.string>
<floater.string name="Running">
- Running
+ 執行中
</floater.string>
<floater.string name="NotRunning">
- Not running
+ éžåŸ·è¡Œä¸­
</floater.string>
<button label="關閉" label_selected="關閉" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_search.xml b/indra/newview/skins/default/xui/zh/floater_search.xml
index 5b247350b8..bb693b7a70 100644
--- a/indra/newview/skins/default/xui/zh/floater_search.xml
+++ b/indra/newview/skins/default/xui/zh/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="FIND">
+<floater name="floater_search" title="尋找">
<floater.string name="loading_text">
載入中...
</floater.string>
diff --git a/indra/newview/skins/default/xui/zh/floater_settings_debug.xml b/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
index bba075cf08..56a31bc292 100644
--- a/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
@@ -4,10 +4,10 @@
<radio_item label="TRUE" name="TRUE" value="true"/>
<radio_item label="FALSE" name="FALSE" value=""/>
</radio_group>
- <color_swatch label="Color" name="val_color_swatch"/>
+ <color_swatch label="é¡è‰²" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
<spinner label="x" name="val_spinner_3"/>
<spinner label="x" name="val_spinner_4"/>
- <button label="Reset to default" name="default_btn"/>
+ <button label="回復至é è¨­å€¼" name="default_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml
index eebd5df3f7..582572d0e2 100644
--- a/indra/newview/skins/default/xui/zh/floater_stats.xml
+++ b/indra/newview/skins/default/xui/zh/floater_stats.xml
@@ -50,9 +50,9 @@
<stat_bar label="物件" name="simobjects"/>
<stat_bar label="Active Objects" name="simactiveobjects"/>
<stat_bar label="Active Scripts" name="simactivescripts"/>
- <stat_bar label="Script Events" name="simscripteps"/>
- <stat_bar label="Packets In" name="siminpps"/>
- <stat_bar label="Packets Out" name="simoutpps"/>
+ <stat_bar label="腳本事件" name="simscripteps"/>
+ <stat_bar label="進入å°åŒ…" name="siminpps"/>
+ <stat_bar label="出去å°åŒ…" name="simoutpps"/>
<stat_bar label="擱置下載" name="simpendingdownloads"/>
<stat_bar label="擱置上傳" name="simpendinguploads"/>
<stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml
index 300d7ee63b..c70e70451e 100644
--- a/indra/newview/skins/default/xui/zh/floater_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_tools.xml
@@ -49,13 +49,13 @@
</text>
<radio_group name="focus_radio_group">
<radio_item label="Zoom" name="radio zoom"/>
- <radio_item label="Orbit (Ctrl)" name="radio orbit"/>
- <radio_item label="Pan (Ctrl+Shift)" name="radio pan"/>
+ <radio_item label="環繞(Ctrl)" name="radio orbit"/>
+ <radio_item label="平移(Ctrl+Shift)" name="radio pan"/>
</radio_group>
<slider_bar initial_value="0.125" name="slider zoom"/>
<radio_group name="move_radio_group">
<radio_item label="移動" name="radio move"/>
- <radio_item label="Lift (Ctrl)" name="radio lift"/>
+ <radio_item label="舉起(Ctrl)" name="radio lift"/>
<radio_item label="Spin (Ctrl+Shift)" name="radio spin"/>
</radio_group>
<radio_group name="edit_radio_group">
@@ -178,10 +178,10 @@
æ“有者:
</text>
<text name="Group:">
- 社團:
+ 群組:
</text>
<name_box initial_value="載入中..." name="Group Name Proxy"/>
- <button name="button set group" tool_tip="é¸æ“‡ä¸€å€‹ç¤¾åœ˜ä»¥åˆ†äº«é€™ç‰©ä»¶æ¬Šé™"/>
+ <button name="button set group" tool_tip="é¸æ“‡ä¸€å€‹ç¾¤çµ„以分享這物件權é™"/>
<check_box label="分享" name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/>
<button label="Deed" label_selected="Deed" name="button deed" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."/>
<text name="label click action">
@@ -480,7 +480,7 @@
<check_box label="顯示æ“有者" name="checkbox show owners" tool_tip="Colorize the parcels according to the type of owner:
綠色 = 你的土地
-æ°´è— = 你社團的土地
+æ°´è— = 你群組的土地
紅色 = 其他人所有
黃色 = 出售
紫色 = æ‹è³£
diff --git a/indra/newview/skins/default/xui/zh/floater_top_objects.xml b/indra/newview/skins/default/xui/zh/floater_top_objects.xml
index 074a4a1881..0e7e0c5b1a 100644
--- a/indra/newview/skins/default/xui/zh/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/zh/floater_top_objects.xml
@@ -22,7 +22,7 @@
ç©åˆ†
</floater.string>
<floater.string name="none_descriptor">
- None found.
+ 未發ç¾ã€‚
</floater.string>
<text name="title_text">
載入中...
@@ -39,7 +39,7 @@
<text name="id_text">
物件 ID:
</text>
- <button label="Show Beacon" name="show_beacon_btn"/>
+ <button label="顯示指標" name="show_beacon_btn"/>
<text name="obj_name_text">
物件å稱:
</text>
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
index 4d650eaaee..c27b80e9c5 100644
--- a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
@@ -4,13 +4,13 @@
NEARBY VOICE
</string>
<string name="title_group">
- Group Call with [GROUP]
+ 與 [GROUP] 進行群組通話
</string>
<string name="title_adhoc">
- Conference Call
+ 會議通話
</string>
<string name="title_peer_2_peer">
- Call with [NAME]
+ 與 [NAME] 進行通話
</string>
<string name="no_one_near">
No one near has voice enabled
@@ -22,7 +22,7 @@
<layout_panel name="leave_call_panel">
<layout_stack name="voice_effect_and_leave_call_stack">
<layout_panel name="leave_call_btn_panel">
- <button label="Leave Call" name="leave_call_btn"/>
+ <button label="çµæŸé€šè©±" name="leave_call_btn"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_web_content.xml b/indra/newview/skins/default/xui/zh/floater_web_content.xml
index a756498b81..be6bf8bb27 100644
--- a/indra/newview/skins/default/xui/zh/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/zh/floater_web_content.xml
@@ -2,13 +2,13 @@
<floater name="floater_web_content" title="">
<layout_stack name="stack1">
<layout_panel name="nav_controls">
- <button name="back" tool_tip="Navigate back"/>
- <button name="forward" tool_tip="Navigate forward"/>
+ <button name="back" tool_tip="å‘後導覽"/>
+ <button name="forward" tool_tip="å‘å‰å°Žè¦½"/>
<button name="stop" tool_tip="åœæ­¢å°Žè¦½"/>
<button name="reload" tool_tip="é‡è¼‰é é¢"/>
<combo_box name="address" tool_tip="在此輸入 URL ä½ç½®"/>
- <icon name="media_secure_lock_flag" tool_tip="Secured Browsing"/>
- <button name="popexternal" tool_tip="Open current URL in your desktop browser"/>
+ <icon name="media_secure_lock_flag" tool_tip="加密的ç€è¦½"/>
+ <button name="popexternal" tool_tip="在你的桌é¢ç€è¦½å™¨ä¸­é–‹å•Ÿç›®å‰çš„ URL ä½å€"/>
</layout_panel>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
index 36e00049f0..967e36ead7 100644
--- a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="whitelist_entry" title="WHITELIST ENTRY">
+<floater name="whitelist_entry" title="許å¯çš„項目清單">
<text name="media_label">
- Enter a URL or URL pattern to add to the list of allowed domains
+ 輸入一個 URL ä½å€æˆ– URL æ ¼å¼ä»¥æ·»åŠ åˆ°å…許的網域清單中
</text>
- <line_editor name="whitelist_entry" tool_tip="Enter a URL or URL pattern to White List"/>
+ <line_editor name="whitelist_entry" tool_tip="輸入一個 URL ä½å€æˆ– URL æ ¼å¼åˆ°ç™½åå–®"/>
<button label="確定" name="ok_btn"/>
<button label="å–消" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_windlight_options.xml b/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
index fce851cc90..383e35d50d 100644
--- a/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
@@ -4,16 +4,16 @@
A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
</floater.string>
<text name="KeyFramePresetsText">
- Sky Presets:
+ 天空é è¨­å€¼ï¼š
</text>
<button label="新增" label_selected="新增" name="WLNewPreset"/>
<button label="儲存" label_selected="儲存" name="WLSavePreset"/>
<button label="刪除" label_selected="刪除" name="WLDeletePreset"/>
- <button label="Day Cycle Editor" label_selected="Day Cycle Editor" name="WLDayCycleMenuButton"/>
+ <button label="日循環編輯器" label_selected="日循環編輯器" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
- <panel label="ATMOSPHERE" name="Atmosphere">
+ <panel label="大氣" name="Atmosphere">
<text name="BHText">
- Blue Horizon
+ è—天水平線
</text>
<text name="BHText2">
R
@@ -28,10 +28,10 @@
I
</text>
<text name="BDensText">
- Haze Horizon
+ 陰霾水平線
</text>
<text name="BDensText2">
- Blue Density
+ è—天密度
</text>
<text name="BHText6">
R
@@ -46,21 +46,21 @@
I
</text>
<text name="HDText">
- Haze Density
+ 陰霾密度
</text>
<text name="DensMultText">
- Density Multiplier
+ 密度å€å¢ž
</text>
<text name="WLDistanceMultText">
- Distance Multiplier
+ è·é›¢å€å¢ž
</text>
<text name="MaxAltText">
- Max Altitude
+ 最大高度
</text>
</panel>
- <panel label="LIGHTING" name="Lighting">
+ <panel label="照明" name="Lighting">
<text name="SLCText">
- Sun/Moon Color
+ æ—¥ï¼æœˆ é¡è‰²
</text>
<text name="BHText">
R
@@ -75,10 +75,10 @@
I
</text>
<text name="TODText">
- Sun/Moon Position
+ æ—¥ï¼æœˆ ä½ç½®
</text>
<text name="WLAmbientText">
- Ambient
+ 環境
</text>
<text name="BHText5">
R
@@ -93,23 +93,23 @@
I
</text>
<text name="WLEastAngleText">
- East Angle
+ æ±å‡è§’度
</text>
<text name="SunGlowText">
- Sun Glow
+ 太陽光è¼
</text>
- <slider label="Focus" name="WLGlowB"/>
+ <slider label="焦點" name="WLGlowB"/>
<slider label="尺寸" name="WLGlowR"/>
<text name="SceneGammaText">
- Scene Gamma
+ 場景 Gamma 值
</text>
<text name="WLStarText">
- Star Brightness
+ 星空é‡åº¦
</text>
</panel>
- <panel label="CLOUDS" name="Clouds">
+ <panel label="雲彩" name="Clouds">
<text name="WLCloudColorText">
- Cloud Color
+ 雲彩é¡è‰²
</text>
<text name="BHText">
R
@@ -124,7 +124,7 @@
I
</text>
<text name="WLCloudColorText2">
- Cloud XY/Density
+ 雲彩 XY 軸 / 密度
</text>
<text name="BHText5">
X
@@ -136,13 +136,13 @@
D
</text>
<text name="WLCloudCoverageText">
- Cloud Coverage
+ 雲彩覆蓋
</text>
<text name="WLCloudScaleText">
- Cloud Scale
+ 雲彩è¦æ¨¡
</text>
<text name="WLCloudDetailText">
- Cloud Detail (XY/Density)
+ 雲彩細節(XY 軸 / 密度)
</text>
<text name="BHText8">
X
@@ -154,14 +154,14 @@
D
</text>
<text name="WLCloudScrollXText">
- Cloud Scroll X
+ 雲彩 X 滾軸
</text>
- <check_box label="Lock" name="WLCloudLockX"/>
+ <check_box label="鎖定" name="WLCloudLockX"/>
<text name="WLCloudScrollYText">
- Cloud Scroll Y
+ 雲彩 Y 滾軸
</text>
- <check_box label="Lock" name="WLCloudLockY"/>
- <check_box label="Draw Classic Clouds" name="DrawClassicClouds"/>
+ <check_box label="鎖定" name="WLCloudLockY"/>
+ <check_box label="æ繪傳統雲彩" name="DrawClassicClouds"/>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_world_map.xml b/indra/newview/skins/default/xui/zh/floater_world_map.xml
index 552bb02582..6ac6fb76b7 100644
--- a/indra/newview/skins/default/xui/zh/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/zh/floater_world_map.xml
@@ -2,45 +2,45 @@
<floater name="worldmap" title="世界地圖">
<panel name="layout_panel_1">
<text name="events_label">
- Legend
+ 圖例
</text>
</panel>
<panel name="layout_panel_2">
- <button name="Show My Location" tool_tip="Center map on my avatar&apos;s location"/>
+ <button name="Show My Location" tool_tip="以我的化身所在ä½ç½®å±…中地圖"/>
<text name="me_label">
- Me
+ 自己
</text>
<text name="person_label">
人
</text>
<text name="infohub_label">
- Infohub
+ 資訊中心
</text>
<text name="land_sale_label">
- Land Sale
+ 土地出售
</text>
<text name="auction_label">
- land auction
+ 土地æ‹è³£
</text>
<text name="by_owner_label">
- by owner
+ ä¾æ“有者
</text>
<button name="Go Home" tool_tip="瞬間傳é€åˆ°æˆ‘的家ä½ç½®"/>
<text name="Home_label">
家
</text>
<text name="events_label">
- Events:
+ 事件:
</text>
<text name="pg_label">
- 一般
+ 一般普級
</text>
<check_box initial_value="true" name="events_mature_chk"/>
<text name="events_mature_label">
- Moderate
+ é©åº¦æˆäºº
</text>
<text name="events_adult_label">
- æˆäºº
+ 完全æˆäºº
</text>
</panel>
<panel name="layout_panel_3">
@@ -55,8 +55,8 @@
<combo_box label="我的地標" name="landmark combo" tool_tip="將地標ä½ç½®é¡¯ç¤ºåœ¨åœ°åœ–上">
<combo_box.item label="我的地標" name="item1"/>
</combo_box>
- <search_editor label="Regions by Name" name="location" tool_tip="輸入一個地å€çš„å稱"/>
- <button label="Find" name="DoSearch" tool_tip="Search for region"/>
+ <search_editor label="地å€ä¾å稱" name="location" tool_tip="輸入一個地å€çš„å稱"/>
+ <button label="尋找" name="DoSearch" tool_tip="æœå°‹åœ°å€"/>
<button name="Clear" tool_tip="Clear tracking lines and reset map"/>
<text name="events_label">
ä½ç½®ï¼š
diff --git a/indra/newview/skins/default/xui/zh/inspect_group.xml b/indra/newview/skins/default/xui/zh/inspect_group.xml
index 3583976646..ac331be203 100644
--- a/indra/newview/skins/default/xui/zh/inspect_group.xml
+++ b/indra/newview/skins/default/xui/zh/inspect_group.xml
@@ -5,16 +5,16 @@
-->
<floater name="inspect_group">
<string name="PrivateGroup">
- ç§äººç¤¾åœ˜
+ ç§äººç¾¤çµ„
</string>
<string name="FreeToJoin">
å…費加入
</string>
<string name="CostToJoin">
- L$[AMOUNT] to join
+ 花費 L$[AMOUNT] 加入
</string>
<string name="YouAreMember">
- You are a member
+ 你是æˆå“¡
</string>
<text name="group_subtitle">
123 members
diff --git a/indra/newview/skins/default/xui/zh/inspect_remote_object.xml b/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
index 26f49ce69a..bed19d6d78 100644
--- a/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
+++ b/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
@@ -17,6 +17,6 @@
http://slurl.com/Ahern/50/50/50
</text>
<button label="地圖" name="map_btn"/>
- <button label="Block" name="block_btn"/>
+ <button label="å°éŽ–" name="block_btn"/>
<button label="關閉" name="close_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
index a04d59bc81..885c4b9add 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
@@ -5,13 +5,13 @@
<menu_item_call label="加為朋å‹" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="通話" name="Call"/>
- <menu_item_call label="邀請加入社團" name="Invite..."/>
+ <menu_item_call label="邀請加入群組" name="Invite..."/>
<menu_item_call label="å°éŽ–" name="Avatar Mute"/>
<menu_item_call label="回報" name="abuse"/>
<menu_item_call label="å‡çµ" name="Freeze..."/>
<menu_item_call label="踢出" name="Eject..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
- <menu_item_call label="Zoom In" name="Zoom In"/>
+ <menu_item_call label="放大" name="Zoom In"/>
<menu_item_call label="支付" name="Pay..."/>
<menu_item_call label="物件檔案" name="Object Inspect"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
index e3a791cde5..1911a1aeff 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
@@ -9,7 +9,7 @@
<menu_item_call label="編輯我的è£æ‰®" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="我的朋å‹" name="Friends..."/>
- <menu_item_call label="我的社團" name="Groups..."/>
+ <menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的檔案" name="Profile..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
<menu_item_call label="丟棄" name="Drop"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
index acf98dfdfa..260571eb54 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
@@ -5,7 +5,7 @@
<menu_item_call label="加為朋å‹" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="通話" name="Call"/>
- <menu_item_call label="邀請加入社團" name="Invite..."/>
+ <menu_item_call label="邀請加入群組" name="Invite..."/>
<menu_item_call label="Block" name="Avatar Mute"/>
<menu_item_call label="回報" name="abuse"/>
<menu_item_call label="å‡çµ" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
index 646edcf563..d516e3ab58 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
@@ -15,7 +15,7 @@
<menu_item_call label="內褲" name="Self Underpants"/>
<menu_item_call label="刺é’" name="Self Tattoo"/>
<menu_item_call label="Physics" name="Self Physics"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
+ <menu_item_call label="åŠé€æ˜Ž" name="Self Alpha"/>
<menu_item_call label="全部衣æœ" name="All Clothes"/>
</context_menu>
<context_menu label="HUD" name="Object Detach HUD"/>
@@ -26,7 +26,7 @@
<menu_item_call label="編輯我è£æ‰®" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="我的朋å‹" name="Friends..."/>
- <menu_item_call label="我的社團" name="Groups..."/>
+ <menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的檔案" name="Profile..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
index e053eb2388..a331c47a6e 100644
--- a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_gesture_gear">
- <menu_item_call label="Add/Remove from Favorites" name="activate"/>
+ <menu_item_call label="由我的最愛中 添加/移除" name="activate"/>
<menu_item_call label="覆製" name="copy_gesture"/>
<menu_item_call label="貼上" name="paste"/>
<menu_item_call label="覆製 UUID" name="copy_uuid"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_group_plus.xml b/indra/newview/skins/default/xui/zh/menu_group_plus.xml
index 77c2c92491..d4a5a69104 100644
--- a/indra/newview/skins/default/xui/zh/menu_group_plus.xml
+++ b/indra/newview/skins/default/xui/zh/menu_group_plus.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_call label="Join Group..." name="item_join"/>
- <menu_item_call label="New Group..." name="item_new"/>
+ <menu_item_call label="加入群組..." name="item_join"/>
+ <menu_item_call label="新群組..." name="item_new"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
index 2577c582a7..4664fcb027 100644
--- a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
+++ b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="IMChiclet Group Menu">
- <menu_item_call label="社團資訊" name="Show Profile"/>
+ <menu_item_call label="群組資訊" name="Show Profile"/>
<menu_item_call label="顯示會話" name="Chat"/>
<menu_item_call label="çµæŸæœƒè©±" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
index 0f14057c07..7385764e4c 100644
--- a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
@@ -5,7 +5,7 @@
<menu_item_call label="IM" name="im"/>
<menu_item_call label="通話" name="call"/>
<menu_item_call label="瞬間傳é€" name="teleport"/>
- <menu_item_call label="Invite to Group" name="invite_to_group"/>
+ <menu_item_call label="邀請加入群組" name="invite_to_group"/>
<menu_item_call label="Block" name="block"/>
<menu_item_call label="Unblock" name="unblock"/>
<menu_item_call label="回報" name="report"/>
@@ -14,7 +14,7 @@
<menu_item_call label="踢出" name="kick"/>
<menu_item_call label="CSR" name="csr"/>
<menu_item_call label="æ質除錯" name="debug"/>
- <menu_item_call label="Find On Map" name="find_on_map"/>
+ <menu_item_call label="在地圖上尋找" name="find_on_map"/>
<menu_item_call label="Zoom In" name="zoom_in"/>
<menu_item_call label="支付" name="pay"/>
<menu_item_call label="分享" name="share"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
index 2d7da70bfc..1c75705743 100644
--- a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
@@ -14,7 +14,7 @@
<menu_item_call label="內衣" name="Self Undershirt"/>
<menu_item_call label="內褲" name="Self Underpants"/>
<menu_item_call label="刺é’" name="Self Tattoo"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
+ <menu_item_call label="åŠé€æ˜Ž" name="Self Alpha"/>
<menu_item_call label="全部衣æœ" name="All Clothes"/>
</context_menu>
<context_menu label="HUD" name="Object Detach HUD"/>
@@ -25,7 +25,7 @@
<menu_item_call label="編輯我的è£æ‰®" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="我的朋å‹" name="Friends..."/>
- <menu_item_call label="我的社團" name="Groups..."/>
+ <menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的檔案" name="Profile..."/>
<menu_item_call label="æ質除錯" name="Debug..."/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml
index a93e8be149..49a50c97c6 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml
@@ -23,9 +23,9 @@
<menu_item_call label="新手套" name="New Gloves"/>
<menu_item_call label="新內衣" name="New Undershirt"/>
<menu_item_call label="新內褲" name="New Underpants"/>
- <menu_item_call label="New Alpha Mask" name="New Alpha Mask"/>
+ <menu_item_call label="æ–°åŠé€æ˜Žé®ç½©" name="New Alpha Mask"/>
<menu_item_call label="新刺é’" name="New Tattoo"/>
- <menu_item_call label="New Physics" name="New Physics"/>
+ <menu_item_call label="新身體物ç†" name="New Physics"/>
</menu>
<menu label="新身體部ä½" name="New Body Parts">
<menu_item_call label="新體形" name="New Shape"/>
@@ -51,7 +51,7 @@
<menu_item_call label="å–代目å‰çš„è£æ‰®" name="Replace Outfit"/>
<menu_item_call label="添加到目å‰è£æ‰®" name="Add To Outfit"/>
<menu_item_call label="由目å‰çš„è£æ‰®ç§»é™¤" name="Remove From Outfit"/>
- <menu_item_call label="Find Original" name="Find Original"/>
+ <menu_item_call label="尋找原件" name="Find Original"/>
<menu_item_call label="Purge Item" name="Purge Item"/>
<menu_item_call label="Restore Item" name="Restore Item"/>
<menu_item_call label="é–‹å•Ÿ" name="Open"/>
@@ -71,7 +71,7 @@
<menu_item_call label="Play Inworld" name="Animation Play"/>
<menu_item_call label="Play Locally" name="Animation Audition"/>
<menu_item_call label="é€å‡ºå³æ™‚訊æ¯" name="Send Instant Message"/>
- <menu_item_call label="Offer Teleport..." name="Offer Teleport..."/>
+ <menu_item_call label="發給瞬間傳é€è«‹æ±‚..." name="Offer Teleport..."/>
<menu_item_call label="Start Conference Chat" name="Conference Chat"/>
<menu_item_call label="Activate" name="Activate"/>
<menu_item_call label="Deactivate" name="Deactivate"/>
@@ -81,7 +81,7 @@
<menu label="Attach To" name="Attach To"/>
<menu label="Attach To HUD" name="Attach To HUD"/>
<menu_item_call label="編輯" name="Wearable Edit"/>
- <menu_item_call label="Add" name="Wearable Add"/>
+ <menu_item_call label="添加" name="Wearable Add"/>
<menu_item_call label="脫下" name="Take Off"/>
<menu_item_call label="-- ç„¡é¸é … --" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
index 9199608200..a0fc060e27 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
@@ -21,9 +21,9 @@
<menu_item_call label="新手套" name="New Gloves"/>
<menu_item_call label="新內衣" name="New Undershirt"/>
<menu_item_call label="新內褲" name="New Underpants"/>
- <menu_item_call label="New Alpha" name="New Alpha"/>
+ <menu_item_call label="æ–°åŠé€æ˜Ž" name="New Alpha"/>
<menu_item_call label="新刺é’" name="New Tattoo"/>
- <menu_item_call label="New Physics" name="New Physics"/>
+ <menu_item_call label="新身體物ç†" name="New Physics"/>
</menu>
<menu label="新身體部ä½" name="New Body Parts">
<menu_item_call label="新體形" name="New Shape"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
index f51b27d9ce..74b90ada5e 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
@@ -11,7 +11,7 @@
<menu_item_call label="清空 Lost and Found" name="empty_lostnfound"/>
<menu_item_call label="儲存æ質為" name="Save Texture As"/>
<menu_item_call label="分享" name="Share"/>
- <menu_item_call label="Find Original" name="Find Original"/>
- <menu_item_call label="Find All Links" name="Find All Links"/>
+ <menu_item_call label="尋找原件" name="Find Original"/>
+ <menu_item_call label="尋找全部è¯çµ" name="Find All Links"/>
<menu_item_call label="清空垃圾筒" name="empty_trash"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
index cf47020bd9..90704fee65 100644
--- a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
@@ -13,8 +13,8 @@
<menu_item_call label="新手套" name="New Gloves"/>
<menu_item_call label="新內衣" name="New Undershirt"/>
<menu_item_call label="新內褲" name="New Underpants"/>
- <menu_item_call label="New Alpha" name="New Alpha"/>
- <menu_item_call label="New Physics" name="New Physics"/>
+ <menu_item_call label="æ–°åŠé€æ˜Ž" name="New Alpha"/>
+ <menu_item_call label="新身體物ç†" name="New Physics"/>
<menu_item_call label="新刺é’" name="New Tattoo"/>
</menu>
<menu label="新身體部ä½" name="New Body Parts">
diff --git a/indra/newview/skins/default/xui/zh/menu_participant_list.xml b/indra/newview/skins/default/xui/zh/menu_participant_list.xml
index 3737e3d041..81ae6e4e85 100644
--- a/indra/newview/skins/default/xui/zh/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/zh/menu_participant_list.xml
@@ -8,7 +8,7 @@
<menu_item_call label="通話" name="Call"/>
<menu_item_call label="分享" name="Share"/>
<menu_item_call label="支付" name="Pay"/>
- <menu_item_check label="View People Icons" name="View Icons"/>
+ <menu_item_check label="察看人群圖示" name="View Icons"/>
<menu_item_check label="Block Voice" name="Block/Unblock"/>
<menu_item_check label="Block Text" name="MuteText"/>
<context_menu label="Moderator Options" name="Moderator Options">
diff --git a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
index 2b0c461312..59854faeec 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
@@ -2,7 +2,7 @@
<toggleable_menu name="menu_group_plus">
<menu_item_check label="ä¾å稱排åº" name="sort_name"/>
<menu_item_check label="ä¾ç‹€æ…‹æŽ’åº" name="sort_status"/>
- <menu_item_check label="View People Icons" name="view_icons"/>
- <menu_item_check label="View Permissions Granted" name="view_permissions"/>
- <menu_item_call label="Show Blocked Residents &amp; Objects" name="show_blocked_list"/>
+ <menu_item_check label="察看人群圖示" name="view_icons"/>
+ <menu_item_check label="察看許å¯æ¬Šé™" name="view_permissions"/>
+ <menu_item_call label="顯示被å°éŽ–的居民與物件" name="show_blocked_list"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
index cf36507d74..1be5c69b94 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_group_plus">
- <menu_item_check label="顯示社團圖示" name="Display Group Icons"/>
- <menu_item_call label="脫離所é¸æ“‡çš„社團" name="Leave Selected Group"/>
+ <menu_item_check label="顯示群組圖示" name="Display Group Icons"/>
+ <menu_item_call label="脫離所é¸æ“‡çš„群組" name="Leave Selected Group"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
index 49fa775424..9faa35001c 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
@@ -9,5 +9,5 @@
<menu_item_call label="分享" name="Share"/>
<menu_item_call label="支付" name="Pay"/>
<menu_item_check label="Block/Unblock" name="Block/Unblock"/>
- <menu_item_call label="Offer Teleport" name="teleport"/>
+ <menu_item_call label="發給瞬間傳é€è«‹æ±‚" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
index c7aff48df4..1380e0b307 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
@@ -6,5 +6,5 @@
<menu_item_call label="通話" name="Call"/>
<menu_item_call label="分享" name="Share"/>
<menu_item_call label="支付" name="Pay"/>
- <menu_item_call label="Offer Teleport" name="teleport"/>
+ <menu_item_call label="發給瞬間傳é€è«‹æ±‚" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
index 5cf54b117b..a7f5c74b82 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Sort by Recent Speakers" name="sort_by_recent_speakers"/>
+ <menu_item_check label="ä¾æœ€è¿‘說話者排åº" name="sort_by_recent_speakers"/>
<menu_item_check label="ä¾å稱排åº" name="sort_name"/>
<menu_item_check label="ä¾è·é›¢æŽ’åº" name="sort_distance"/>
- <menu_item_check label="View People Icons" name="view_icons"/>
- <menu_item_call label="Show Blocked Residents &amp; Objects" name="show_blocked_list"/>
+ <menu_item_check label="察看人群圖示" name="view_icons"/>
+ <menu_item_call label="顯示笨å°éŽ–的居民與物件" name="show_blocked_list"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
index d0b9438cfc..95f8917234 100644
--- a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
+++ b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_folder_gear">
- <menu_item_call label="Add Folder" name="add_folder"/>
+ <menu_item_call label="添加資料夾" name="add_folder"/>
<menu_item_call label="添加地標" name="add_landmark"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_url_group.xml b/indra/newview/skins/default/xui/zh/menu_url_group.xml
index 2cbdd602cb..de97bb731f 100644
--- a/indra/newview/skins/default/xui/zh/menu_url_group.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="顯示社團資訊" name="show_group"/>
- <menu_item_call label="覆製社團到剪貼簿" name="url_copy_label"/>
+ <menu_item_call label="顯示群組資訊" name="show_group"/>
+ <menu_item_call label="覆製群組到剪貼簿" name="url_copy_label"/>
<menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 6d70ac4c1f..a51e26c3f4 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -26,7 +26,7 @@
</menu>
<menu label="æºé€š" name="Communicate">
<menu_item_call label="我的朋å‹" name="My Friends"/>
- <menu_item_call label="我的社團" name="My Groups"/>
+ <menu_item_call label="我的群組" name="My Groups"/>
<menu_item_check label="附近的èŠå¤©" name="Nearby Chat"/>
<menu_item_call label="附近的人群" name="Active Speakers"/>
</menu>
@@ -96,7 +96,7 @@
<menu label="腳本" name="Scripts">
<menu_item_call label="é‡æ–°ç·¨è­¯è…³æœ¬ï¼ˆMono)" name="Mono"/>
<menu_item_call label="é‡æ–°ç·¨è­¯è…³æœ¬ï¼ˆLSL)" name="LSL"/>
- <menu_item_call label="Reset Scripts" name="Reset Scripts"/>
+ <menu_item_call label="é‡è¨­è…³æœ¬" name="Reset Scripts"/>
<menu_item_call label="設定腳本為執行中" name="Set Scripts to Running"/>
<menu_item_call label="設定腳本為éžåŸ·è¡Œä¸­" name="Set Scripts to Not Running"/>
</menu>
@@ -139,7 +139,6 @@
<menu_item_check label="Disable Camera Constraints" name="Disable Camera Distance"/>
<menu_item_check label="高解æžåº¦å¿«ç…§" name="HighResSnapshot"/>
<menu_item_check label="éœéŸ³æ‹æ”快照到硬碟" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="壓縮快照存到硬碟" name="CompressSnapshotsToDisk"/>
<menu label="效能工具" name="Performance Tools">
<menu_item_call label="Lag Meter" name="Lag Meter"/>
<menu_item_check label="統計列" name="Statistics Bar"/>
@@ -155,7 +154,7 @@
</menu>
<menu label="Rendering Types" name="Rendering Types">
<menu_item_check label="Simple" name="Simple"/>
- <menu_item_check label="Alpha" name="Alpha"/>
+ <menu_item_check label="åŠé€æ˜Ž" name="Alpha"/>
<menu_item_check label="Tree" name="Tree"/>
<menu_item_check label="Avatars" name="Character"/>
<menu_item_check label="SurfacePath" name="SurfacePath"/>
@@ -179,21 +178,21 @@
<menu_item_check label="Flexible Objects" name="Flexible Objects"/>
</menu>
<menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/>
- <menu_item_call label="Clear Group Cache" name="ClearGroupCache"/>
- <menu_item_check label="Mouse Smoothing" name="Mouse Smoothing"/>
+ <menu_item_call label="清除群組快å–資料" name="ClearGroupCache"/>
+ <menu_item_check label="滑鼠平滑移動" name="Mouse Smoothing"/>
<menu label="快速éµ" name="Shortcuts">
<menu_item_call label="圖åƒï¼ˆL$[COST])..." name="Upload Image"/>
<menu_item_check label="æœå°‹" name="Search"/>
<menu_item_call label="釋出按éµ" name="Release Keys"/>
<menu_item_call label="設定使用者界é¢å¤§å°è‡³é è¨­å€¼" name="Set UI Size to Default"/>
- <menu_item_check label="Show Advanced Menu - legacy shortcut" name="Show Advanced Menu - legacy shortcut"/>
+ <menu_item_check label="顯示進階é¸å–® ï¼ èˆŠç‰ˆæ·å¾‘" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="關閉視窗" name="Close Window"/>
<menu_item_call label="關閉全部視窗" name="Close All Windows"/>
- <menu_item_call label="Snapshot to Disk" name="Snapshot to Disk"/>
+ <menu_item_call label="æ‹æ”快照到硬碟" name="Snapshot to Disk"/>
<menu_item_call label="第一人稱視角" name="Mouselook"/>
<menu_item_check label="Joystick Flycam" name="Joystick Flycam"/>
- <menu_item_call label="Reset View" name="Reset View"/>
- <menu_item_call label="Look at Last Chatter" name="Look at Last Chatter"/>
+ <menu_item_call label="é‡è¨­è¦–角" name="Reset View"/>
+ <menu_item_call label="注視上一ä½èŠå¤©è€…" name="Look at Last Chatter"/>
<menu label="é¸æ“‡å»ºé€ å·¥å…·" name="Select Tool">
<menu_item_call label="èšç„¦å·¥å…·" name="Focus"/>
<menu_item_call label="移動工具" name="Move"/>
@@ -218,10 +217,10 @@
<menu_item_check label="Fast Timers" name="Fast Timers"/>
<menu_item_check label="記憶體" name="Memory"/>
<menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/>
- <menu_item_call label="Group Info to Debug Console" name="Group Info to Debug Console"/>
+ <menu_item_call label="群組資訊至除錯控制å°" name="Group Info to Debug Console"/>
<menu_item_call label="Capabilities Info to Debug Console" name="Capabilities Info to Debug Console"/>
<menu_item_check label="Camera" name="Camera"/>
- <menu_item_check label="Wind" name="Wind"/>
+ <menu_item_check label="風力" name="Wind"/>
<menu_item_check label="FOV" name="FOV"/>
<menu_item_check label="Badge" name="Badge"/>
</menu>
@@ -232,17 +231,17 @@
<menu_item_check label="Show Matrices" name="Show Matrices"/>
<menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/>
<menu_item_check label="顯示記憶體" name="Show Memory"/>
- <menu_item_check label="Show Updates to Objects" name="Show Updates"/>
- </menu>
- <menu label="Force an Error" name="Force Errors">
- <menu_item_call label="Force Breakpoint" name="Force Breakpoint"/>
- <menu_item_call label="Force LLError And Crash" name="Force LLError And Crash"/>
- <menu_item_call label="Force Bad Memory Access" name="Force Bad Memory Access"/>
- <menu_item_call label="Force Infinite Loop" name="Force Infinite Loop"/>
- <menu_item_call label="Force Driver Crash" name="Force Driver Carsh"/>
- <menu_item_call label="Force Software Exception" name="Force Software Exception"/>
- <menu_item_call label="Force Disconnect Viewer" name="Force Disconnect Viewer"/>
- <menu_item_call label="Simulate a Memory Leak" name="Memory Leaking Simulation"/>
+ <menu_item_check label="顯示更新到物件" name="Show Updates"/>
+ </menu>
+ <menu label="強制錯誤" name="Force Errors">
+ <menu_item_call label="強制中斷點" name="Force Breakpoint"/>
+ <menu_item_call label="強制腳本錯誤並崩潰" name="Force LLError And Crash"/>
+ <menu_item_call label="強制ä¸è‰¯çš„記憶體存å–" name="Force Bad Memory Access"/>
+ <menu_item_call label="強制無é™è¿´åœˆ" name="Force Infinite Loop"/>
+ <menu_item_call label="強制驅動程å¼å´©æ½°" name="Force Driver Carsh"/>
+ <menu_item_call label="強制軟體例外異常" name="Force Software Exception"/>
+ <menu_item_call label="強制ç€è¦½å™¨æ–·ç·š" name="Force Disconnect Viewer"/>
+ <menu_item_call label="模擬記憶體ä¸è¶³" name="Memory Leaking Simulation"/>
</menu>
<menu label="Render Tests" name="Render Tests">
<menu_item_check label="Camera Offset" name="Camera Offset"/>
@@ -278,8 +277,8 @@
<menu_item_check label="Global Illumination (experimental)" name="Global Illumination"/>
<menu_item_check label="Debug GL" name="Debug GL"/>
<menu_item_check label="Debug Pipeline" name="Debug Pipeline"/>
- <menu_item_check label="Automatic Alpha Masks (deferred)" name="Automatic Alpha Masks (deferred)"/>
- <menu_item_check label="Automatic Alpha Masks (non-deferred)" name="Automatic Alpha Masks (non-deferred)"/>
+ <menu_item_check label="自動åŠé€æ˜Žé®ç½©ï¼ˆéžå»¶ï¼‰" name="Automatic Alpha Masks (deferred)"/>
+ <menu_item_check label="自動åŠé€æ˜Žé®ç½©ï¼ˆéžéžå»¶ï¼‰" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Animation Textures" name="Animation Textures"/>
<menu_item_check label="Disable Textures" name="Disable Textures"/>
<menu_item_check label="Full Res Textures" name="Rull Res Textures"/>
@@ -310,7 +309,7 @@
<menu_item_check label="Sim Sun Override" name="Sim Sun Override"/>
<menu_item_check label="Cheesy Beacon" name="Cheesy Beacon"/>
<menu_item_check label="Fixed Weather" name="Fixed Weather"/>
- <menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/>
+ <menu_item_call label="傾å°åœ°å€ç‰©ä»¶å¿«å–" name="Dump Region Object Cache"/>
</menu>
<menu label="UI" name="UI">
<menu_item_call label="Media Browser Test" name="Web Browser Test"/>
@@ -325,10 +324,10 @@
<menu_item_check label="Region Debug Console" name="Region Debug Console"/>
<menu_item_check label="Debug SelectMgr" name="Debug SelectMgr"/>
<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
- <menu_item_check label="Debug Views" name="Debug Views"/>
+ <menu_item_check label="視角除錯" name="Debug Views"/>
<menu_item_check label="Debug Name Tooltips" name="Debug Name Tooltips"/>
- <menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
- <menu_item_check label="Debug Keys" name="Debug Keys"/>
+ <menu_item_check label="滑鼠事件除錯" name="Debug Mouse Events"/>
+ <menu_item_check label="按éµé™¤éŒ¯" name="Debug Keys"/>
<menu_item_check label="Debug WindowProc" name="Debug WindowProc"/>
</menu>
<menu label="XUI" name="XUI">
@@ -336,7 +335,7 @@
<menu_item_call label="Show Font Test" name="Show Font Test"/>
<menu_item_check label="Show XUI Names" name="Show XUI Names"/>
<menu_item_call label="é€å‡ºæ¸¬è©¦ IMs" name="Send Test IMs"/>
- <menu_item_call label="Flush Names Caches" name="Flush Names Caches"/>
+ <menu_item_call label="æ²–æ´—å稱快å–資料" name="Flush Names Caches"/>
</menu>
<menu label="化身" name="Character">
<menu label="Grab Baked Texture" name="Grab Baked Texture">
@@ -380,14 +379,14 @@
<menu label="Admin" name="Admin">
<menu label="Object">
<menu_item_call label="å–得副本" name="Take Copy"/>
- <menu_item_call label="Force Owner To Me" name="Force Owner To Me"/>
+ <menu_item_call label="強制æ“有者為我" name="Force Owner To Me"/>
<menu_item_call label="Force Owner Permissive" name="Force Owner Permissive"/>
<menu_item_call label="刪除" name="Delete"/>
<menu_item_call label="Lock" name="Lock"/>
<menu_item_call label="Get Assets IDs" name="Get Assets IDs"/>
</menu>
<menu label="地段" name="Parcel">
- <menu_item_call label="Force Owner To Me" name="Owner To Me"/>
+ <menu_item_call label="強制æ“有者為我" name="Owner To Me"/>
<menu_item_call label="Set to Linden Content" name="Set to Linden Content"/>
<menu_item_call label="Claim Public Land" name="Claim Public Land"/>
</menu>
@@ -410,9 +409,9 @@
<menu_item_call label="內衣" name="Menu Undershirt"/>
<menu_item_call label="內褲" name="Menu Underpants"/>
<menu_item_call label="裙å­" name="Skirt"/>
- <menu_item_call label="Alpha" name="Alpha"/>
- <menu_item_call label="Tattoo" name="Tattoo"/>
- <menu_item_call label="Physics" name="Physics"/>
+ <menu_item_call label="åŠé€æ˜Ž" name="Alpha"/>
+ <menu_item_call label="刺é’" name="Tattoo"/>
+ <menu_item_call label="身體物ç†" name="Physics"/>
<menu_item_call label="全部衣æœ" name="All Clothes"/>
</menu>
<menu label="幫助" name="Help">
diff --git a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
index c5c1f661fb..2eea314dd8 100644
--- a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
@@ -2,7 +2,7 @@
<context_menu name="Outfit Wearable Context Menu">
<menu_item_call label="å–代" name="wear_replace"/>
<menu_item_call label="Wear" name="wear_wear"/>
- <menu_item_call label="Add" name="wear_add"/>
+ <menu_item_call label="添加" name="wear_add"/>
<menu_item_call label="Take Off / Detach" name="take_off_or_detach"/>
<menu_item_call label="å¸ä¸‹" name="detach"/>
<context_menu label="Attach to" name="wearable_attach_to"/>
diff --git a/indra/newview/skins/default/xui/zh/mime_types.xml b/indra/newview/skins/default/xui/zh/mime_types.xml
index 3498942f9b..89fe92fabc 100644
--- a/indra/newview/skins/default/xui/zh/mime_types.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types.xml
@@ -5,7 +5,7 @@
網é å…§å®¹
</label>
<tooltip name="web_tooltip">
- This location has Web content
+ 這ä½ç½®æœ‰ç¶²é å…§å®¹
</tooltip>
<playtip name="web_playtip">
顯示網é å…§å®¹
@@ -35,7 +35,7 @@
</widgetset>
<widgetset name="audio">
<label name="audio_label">
- Audio
+ 音頻
</label>
<tooltip name="audio_tooltip">
There is audio at this location
@@ -61,12 +61,12 @@
</mimetype>
<mimetype name="audio/*">
<label name="audio2_label">
- Audio
+ 音頻
</label>
</mimetype>
<mimetype name="video/*">
<label name="video2_label">
- Video
+ 視頻
</label>
</mimetype>
<mimetype name="image/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -86,7 +86,7 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ Ogg 音頻/視頻
</label>
</mimetype>
<mimetype name="application/pdf">
@@ -106,7 +106,7 @@
</mimetype>
<mimetype name="application/smil">
<label name="application/smil_label">
- Synchronized Multimedia Integration Language (SMIL)
+ åŒæ­¥å¤šåª’體整åˆèªžè¨€ï¼ˆSMIL)
</label>
</mimetype>
<mimetype name="application/xhtml+xml">
@@ -121,22 +121,22 @@
</mimetype>
<mimetype name="audio/mid">
<label name="audio/mid_label">
- Audio (MIDI)
+ 音頻(MIDI)
</label>
</mimetype>
<mimetype name="audio/mpeg">
<label name="audio/mpeg_label">
- Audio (MP3)
+ 音頻(MP3)
</label>
</mimetype>
<mimetype name="audio/x-aiff">
<label name="audio/x-aiff_label">
- Audio (AIFF)
+ 音頻(AIFF)
</label>
</mimetype>
<mimetype name="audio/x-wav">
<label name="audio/x-wav_label">
- Audio (WAV)
+ 音頻(WAV)
</label>
</mimetype>
<mimetype name="image/bmp">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- 影片(MPEG)
+ 視頻(MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- 影片(MP4)
+ 視頻(MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- 影片(Windows Media ASF)
+ 視頻(Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- 影片(Windows Media WMV)
+ 視頻(Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- 影片(AVI)
+ 視頻(AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/zh/mime_types_linux.xml b/indra/newview/skins/default/xui/zh/mime_types_linux.xml
index 3498942f9b..08839abe6a 100644
--- a/indra/newview/skins/default/xui/zh/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types_linux.xml
@@ -35,7 +35,7 @@
</widgetset>
<widgetset name="audio">
<label name="audio_label">
- Audio
+ 音頻
</label>
<tooltip name="audio_tooltip">
There is audio at this location
@@ -61,7 +61,7 @@
</mimetype>
<mimetype name="audio/*">
<label name="audio2_label">
- Audio
+ 音頻
</label>
</mimetype>
<mimetype name="video/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -86,7 +86,7 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ Ogg 音頻/視頻
</label>
</mimetype>
<mimetype name="application/pdf">
@@ -121,22 +121,22 @@
</mimetype>
<mimetype name="audio/mid">
<label name="audio/mid_label">
- Audio (MIDI)
+ 音頻(MIDI)
</label>
</mimetype>
<mimetype name="audio/mpeg">
<label name="audio/mpeg_label">
- Audio (MP3)
+ 音頻(MP3)
</label>
</mimetype>
<mimetype name="audio/x-aiff">
<label name="audio/x-aiff_label">
- Audio (AIFF)
+ 音頻(AIFF)
</label>
</mimetype>
<mimetype name="audio/x-wav">
<label name="audio/x-wav_label">
- Audio (WAV)
+ 音頻(WAV)
</label>
</mimetype>
<mimetype name="image/bmp">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- 影片(MPEG)
+ 視頻(MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- 影片(MP4)
+ 視頻(MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- 影片(Windows Media ASF)
+ 視頻(Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- 影片(Windows Media WMV)
+ 視頻(Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- 影片(AVI)
+ 視頻(AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/zh/mime_types_mac.xml b/indra/newview/skins/default/xui/zh/mime_types_mac.xml
index 3f38c528a6..7958f64219 100644
--- a/indra/newview/skins/default/xui/zh/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types_mac.xml
@@ -27,21 +27,21 @@
圖åƒ
</label>
<tooltip name="image_tooltip">
- There is an image at this location
+ 有一個影åƒåœ¨æ­¤ä½ç½®
</tooltip>
<playtip name="image_playtip">
- View this location&apos;s image
+ 察看在此ä½ç½®çš„å½±åƒ
</playtip>
</widgetset>
<widgetset name="audio">
<label name="audio_label">
- Audio
+ 音頻
</label>
<tooltip name="audio_tooltip">
- There is audio at this location
+ 有一個音頻在此ä½ç½®
</tooltip>
<playtip name="audio_playtip">
- Play this location&apos;s audio
+ 播放在此ä½ç½®çš„音頻
</playtip>
</widgetset>
<scheme name="rtsp">
@@ -61,12 +61,12 @@
</mimetype>
<mimetype name="audio/*">
<label name="audio2_label">
- Audio
+ 音頻
</label>
</mimetype>
<mimetype name="video/*">
<label name="video2_label">
- Video
+ 視頻
</label>
</mimetype>
<mimetype name="image/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- 影片 (QuickTime)
+ 視頻 (QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -86,7 +86,7 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ OGG 音頻/視頻
</label>
</mimetype>
<mimetype name="application/pdf">
@@ -106,7 +106,7 @@
</mimetype>
<mimetype name="application/smil">
<label name="application/smil_label">
- Synchronized Multimedia Integration Language (SMIL)
+ åŒæ­¥å¤šåª’體整åˆèªžè¨€ï¼ˆSMIL)
</label>
</mimetype>
<mimetype name="application/xhtml+xml">
@@ -121,22 +121,22 @@
</mimetype>
<mimetype name="audio/mid">
<label name="audio/mid_label">
- Audio (MIDI)
+ 音頻 (MIDI)
</label>
</mimetype>
<mimetype name="audio/mpeg">
<label name="audio/mpeg_label">
- Audio (MP3)
+ 音頻(MP3)
</label>
</mimetype>
<mimetype name="audio/x-aiff">
<label name="audio/x-aiff_label">
- Audio (AIFF)
+ 音頻(AIFF)
</label>
</mimetype>
<mimetype name="audio/x-wav">
<label name="audio/x-wav_label">
- Audio (WAV)
+ 音頻(WAV)
</label>
</mimetype>
<mimetype name="image/bmp">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- 影片(MPEG)
+ 視頻(MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- 影片(MP4)
+ 視頻(MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- 影片(Windows Media ASF)
+ 視頻(Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- 影片(Windows Media WMV)
+ 視頻(Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- 影片(AVI)
+ 視頻(AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 65bb8ce517..1c89e9b522 100644
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<notifications>
<global name="skipnexttime">
- Don&apos;t show me this again
+ ä¸å†é¡¯ç¤ºæ­¤æ醒
</global>
<global name="alwayschoose">
- Always choose this option
+ 總是é¸å–這個é¸é …
</global>
<global name="implicitclosebutton">
關閉
@@ -44,7 +44,7 @@
<button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
</form>
</template>
- <notification label="Unknown Notification Message" name="MissingAlert">
+ <notification label="未知的通知訊æ¯" name="MissingAlert">
Your version of [APP_NAME] does not know how to display the notification it just received. Please verify that you have the latest Viewer installed.
Error details: The notification called &apos;[_NAME]&apos; was not found in notifications.xml.
@@ -72,9 +72,9 @@ Error details: The notification called &apos;[_NAME]&apos; was not found in noti
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="LoginFailedNoNetwork">
- Could not connect to the [SECOND_LIFE_GRID].
+ 無法連接到[SECOND_LIFE_GRID].
&apos;[DIAGNOSTIC]&apos;
-Make sure your Internet connection is working properly.
+請確定你的網際網路是正常é‹ä½œçš„。
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="MessageTemplateNotFound">
@@ -82,7 +82,7 @@ Make sure your Internet connection is working properly.
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="WearableSave">
- Save changes to current clothing/body part?
+ 除存變更到目å‰çš„è¡£æœ/身體部ä½ï¼Ÿ
<usetemplate canceltext="å–消" name="yesnocancelbuttons" notext="ä¸è¦å„²å­˜" yestext="儲存"/>
</notification>
<notification name="CompileQueueSaveText">
@@ -132,7 +132,7 @@ Do you want to grant modify rights for the selected Residents?
<usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="UnableToCreateGroup">
- Unable to create group.
+ 無法建立新群組。
[MESSAGE]
<usetemplate name="okbutton" yestext="確定"/>
</notification>
@@ -142,7 +142,7 @@ Do you want to grant modify rights for the selected Residents?
<usetemplate canceltext="å–消" name="yesnocancelbuttons" notext="忽視變更" yestext="套用變更"/>
</notification>
<notification name="MustSpecifyGroupNoticeSubject">
- You must specify a subject to send a group notice.
+ 你必須指定一個主旨以é€å‡ºç¾¤çµ„通知。
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="AddGroupOwnerWarning">
@@ -150,7 +150,7 @@ Do you want to grant modify rights for the selected Residents?
Members cannot be removed from that role.
The members must resign from the role themselves.
Are you sure you want to continue?
- <usetemplate ignoretext="Confirm before I add a new group Owner" name="okcancelignore" notext="å¦" yestext="是"/>
+ <usetemplate ignoretext="在我添加一個新的群組æ“有者å‰ç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="AssignDangerousActionWarning">
You are about to add the Ability &apos;[ACTION_NAME]&apos; to the Role &apos;[ROLE_NAME]&apos;.
@@ -173,17 +173,17 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
<notification name="AttachmentDrop">
You are about to drop your attachment.
Are you sure you want to continue?
- <usetemplate ignoretext="Confirm before dropping attachments" name="okcancelignore" notext="å¦" yestext="是"/>
+ <usetemplate ignoretext="在丟下附件å‰ç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="JoinGroupCanAfford">
- Joining this group costs L$[COST].
-Do you wish to proceed?
- <usetemplate name="okcancelbuttons" notext="å–消" yestext="Join"/>
+ 加入此群組須花費 L$[COST]。
+你確定è¦ç¹¼çºŒå—Žï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–消" yestext="加入"/>
</notification>
<notification name="JoinGroupNoCost">
You are joining group [NAME].
Do you wish to proceed?
- <usetemplate name="okcancelbuttons" notext="å–消" yestext="Join"/>
+ <usetemplate name="okcancelbuttons" notext="å–消" yestext="加入"/>
</notification>
<notification name="JoinGroupCannotAfford">
Joining this group costs L$[COST].
@@ -193,7 +193,7 @@ You do not have enough L$ to join this group.
Creating this group will cost L$100.
Groups need more than one member, or they are deleted forever.
Please invite members within 48 hours.
- <usetemplate canceltext="å–消" name="okcancelbuttons" notext="å–消" yestext="Create group for L$100"/>
+ <usetemplate canceltext="å–消" name="okcancelbuttons" notext="å–消" yestext="花費 L$100 建立群組"/>
</notification>
<notification name="LandBuyPass">
For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hours. Buy a pass?
@@ -341,7 +341,7 @@ There is no reimbursement for fees paid.
<notification name="DeleteMedia">
You have selected to delete the media associated with this face.
Are you sure you want to continue?
- <usetemplate ignoretext="Confirm before I delete media from an object" name="okcancelignore" notext="å¦" yestext="是"/>
+ <usetemplate ignoretext="在我由一個部件中刪除媒體å‰ç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="ClassifiedSave">
Save changes to classified [NAME]?
@@ -370,14 +370,14 @@ Are you sure you want to continue?
Please select a proposal to view.
</notification>
<notification name="SelectHistoryItemToView">
- Please select a history item to view.
+ è«‹é¸æ“‡ä¸€å€‹æ­·å²ç´€éŒ„物å“去察看。
</notification>
<notification name="CacheWillClear">
- Cache will be cleared after you restart [APP_NAME].
+ 當你é‡æ–°å•Ÿå‹• [APP_NAME] 後快å–資料將會被清除。
</notification>
<notification name="CacheWillBeMoved">
- Cache will be moved after you restart [APP_NAME].
-Note: This will clear the cache.
+ 當你é‡æ–°å•Ÿå‹• [APP_NAME] 後快å–資料將被移動。
+注æ„:這將會清除快å–資料。
</notification>
<notification name="ChangeConnectionPort">
Port settings take effect after you restart [APP_NAME].
@@ -519,7 +519,7 @@ Do you really want to give these items?
<usetemplate canceltext="å–消" name="yesnocancelbuttons" notext="踢出並å°éŽ–" yestext="踢出"/>
</notification>
<notification name="EjectAvatarNoBan">
- 將這一ä½åŒ–身由你的土地踢出?
+ 將這一個化身由你的土地踢出?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="踢出"/>
</notification>
<notification name="EjectAvatarFullnameNoBan">
@@ -527,10 +527,10 @@ Do you really want to give these items?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="踢出"/>
</notification>
<notification name="EjectAvatarFromGroup">
- 你已將 [AVATAR_NAME] 由社團 [GROUP_NAME] 中踢出
+ 你已將 [AVATAR_NAME] 由群組 [GROUP_NAME] 中踢出
</notification>
<notification name="AcquireErrorTooManyObjects">
- ACQUIRE ERROR: Too many objects selected.
+ å–得錯誤:太多物件被é¸å–。
</notification>
<notification name="AcquireErrorObjectSpan">
ACQUIRE ERROR: Objects span more than one region.
@@ -605,7 +605,7 @@ Expected [VALIDS]
[FILE]
</notification>
<notification name="SoundFileInvalidTooLong">
- Audio file is too long (10 second maximum):
+ 音頻檔太長(最大值 10 秒):
[FILE]
</notification>
<notification name="ProblemWithFile">
@@ -738,8 +738,8 @@ If you continue to get this message, please check the [SUPPORT_SITE].
收ç´å€åŠŸèƒ½ç›®å‰ç„¡æ³•ä½¿ç”¨ã€‚
</notification>
<notification name="CannotSetLandOwnerNothingSelected">
- Unable to set land owner:
-No parcel selected.
+ 無法設定土地æ“有者:
+無地段被é¸å–。
</notification>
<notification name="CannotSetLandOwnerMultipleRegions">
Unable to force land ownership because selection spans multiple regions. Please select a smaller area and try again.
@@ -762,8 +762,8 @@ No region selected.
No parcel selected.
</notification>
<notification name="CannotReleaseLandNoRegion">
- Unable to abandon land:
-Cannot find region.
+ 無法放棄土地:
+無法尋找地å€ã€‚
</notification>
<notification name="CannotBuyLandNothingSelected">
Unable to buy land:
@@ -778,11 +778,11 @@ Cannot find the region this land is in.
</notification>
<notification name="CannotDeedLandNothingSelected">
Unable to deed land:
-No parcel selected.
+無地段被é¸å–。
</notification>
<notification name="CannotDeedLandNoGroup">
Unable to deed land:
-No Group selected.
+無群組被é¸å–。
</notification>
<notification name="CannotDeedLandNoRegion">
Unable to deed land:
@@ -1377,11 +1377,11 @@ We must restart [APP_NAME] to install the update.
<notification name="DeedObjectToGroup">
Deeding this object will cause the group to:
* Receive L$ paid into the object
- <usetemplate ignoretext="Confirm before I deed an object to a group" name="okcancelignore" notext="å–消" yestext="Deed"/>
+ <usetemplate ignoretext="在我讓渡一個物件給群組å‰ç¢ºèª" name="okcancelignore" notext="å–消" yestext="Deed"/>
</notification>
<notification name="WebLaunchExternalTarget">
- Do you want to open your Web browser to view this content?
- <usetemplate ignoretext="Launch my browser to view a web page" name="okcancelignore" notext="å–消" yestext="確定"/>
+ 你確定è¦é–‹å•Ÿç¶²é ç€è¦½å™¨åŽ»å¯Ÿçœ‹é€™å€‹å…§å®¹ï¼Ÿ
+ <usetemplate ignoretext="啟動我的網é ç€è¦½å™¨åŽ»å¯Ÿçœ‹ç¶²é " name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="WebLaunchJoinNow">
å‰å¾€ä½ çš„[http://secondlife.com/account/ 塗鴉牆]以進行管ç†ä½ çš„帳戶?
@@ -1389,37 +1389,37 @@ We must restart [APP_NAME] to install the update.
</notification>
<notification name="WebLaunchSecurityIssues">
Visit the [SECOND_LIFE] Wiki for details of how to report a security issue.
- <usetemplate ignoretext="Launch my browser to learn how to report a Security Issue" name="okcancelignore" notext="å–消" yestext="確定"/>
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å­¸ç¿’如何回報一個安全性的議題" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="WebLaunchQAWiki">
- Visit the [SECOND_LIFE] QA Wiki.
- <usetemplate ignoretext="Launch my browser to view the QA Wiki" name="okcancelignore" notext="å–消" yestext="確定"/>
+ 拜訪 [SECOND_LIFE] å•èˆ‡ç­”維基。
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨åŽ»å¯Ÿçœ‹å•èˆ‡ç­”維基" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="WebLaunchPublicIssue">
- Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and other issues.
- <usetemplate ignoretext="Launch my browser to use the Public Issue Tracker" name="okcancelignore" notext="å–消" yestext="å‰å¾€é é¢"/>
+ 拜訪 [SECOND_LIFE] 公共議題追蹤,那裡你將å¯ä»¥å›žå ±è‡­èŸ²èˆ‡å…¶ä»–議題。
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥ä½¿ç”¨å…¬å…±è­°é¡Œè¿½è¹¤ã€‚" name="okcancelignore" notext="å–消" yestext="å‰å¾€é é¢"/>
</notification>
<notification name="WebLaunchSupportWiki">
å‰å¾€æž—登官方部è½æ ¼ï¼Œä»¥å–得最新的新èžèˆ‡è³‡è¨Šã€‚
- <usetemplate ignoretext="Launch my browser to view the blog" name="okcancelignore" notext="å–消" yestext="確定"/>
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å¯Ÿçœ‹éƒ¨è½æ ¼" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="WebLaunchLSLGuide">
- Do you want to open the Scripting Guide for help with scripting?
- <usetemplate ignoretext="Launch my browser to view the Scripting Guide" name="okcancelignore" notext="å–消" yestext="確定"/>
+ ä½ è¦é–‹å•Ÿè…³æœ¬æ’°å¯«æŒ‡å¼•ä»¥å¹«åŠ©ä½ é–‹ç™¼è…³æœ¬å—Žï¼Ÿ
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å¯Ÿçœ‹è…³æœ¬æ’°å¯«æŒ‡å¼•" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="WebLaunchLSLWiki">
- Do you want to visit the LSL Portal for help with scripting?
- <usetemplate ignoretext="Launch my browser to view the LSL Portal" name="okcancelignore" notext="å–消" yestext="å‰å¾€é é¢"/>
+ ä½ è¦æ‹œè¨ª LSL å…¥å£ä»¥å–得腳本設計的幫助嗎?
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å¯Ÿçœ‹ LSL å…¥å£" name="okcancelignore" notext="å–消" yestext="å‰å¾€é é¢"/>
</notification>
<notification name="ReturnToOwner">
- Are you sure you want to return the selected objects to their owners? Transferable deeded objects will be returned to their previous owners.
+ 你確定è¦é€€å›žæ‰€é¸æ“‡çš„物件給它們的æ“有者嗎? å¯è½‰ç§»ä¸¦è®“渡的物件將會退回給它們的å‰ä¸€ä½æ“有者。
-*WARNING* No-transfer deeded objects will be deleted!
- <usetemplate ignoretext="Confirm before I return objects to their owners" name="okcancelignore" notext="å–消" yestext="確定"/>
+*警告* éžå¯è½‰ç§»ä¸¦è®“渡的物件將會被刪除!
+ <usetemplate ignoretext="在我退回物件給它們的æ“有者å‰ç¢ºèª" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- You are currently a member of the group [GROUP].
-Leave Group?
+ ä½ ç›®å‰æ˜¯ [GROUP] 群組的æˆå“¡ã€‚
+是å¦è¦é›¢é–‹ç¾¤çµ„?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="確定"/>
</notification>
<notification name="ConfirmKick">
@@ -1452,12 +1452,12 @@ Leave Group?
<notification name="BusyModeSet">
Busy mode is set.
Chat and instant messages will be hidden. Instant messages will get your Busy mode response. All teleportation offers will be declined. All inventory offers will go to your Trash.
- <usetemplate ignoretext="I change my status to Busy mode" name="okignore" yestext="確定"/>
+ <usetemplate ignoretext="我變更我的狀態為忙碌模å¼" name="okignore" yestext="確定"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
You have reached your maximum number of groups. Please leave another group before joining this one, or decline the offer.
[NAME] has invited you to join a group as a member.
- <usetemplate name="okcancelbuttons" notext="Decline" yestext="Join"/>
+ <usetemplate name="okcancelbuttons" notext="Decline" yestext="加入"/>
</notification>
<notification name="JoinedTooManyGroups">
You have reached your maximum number of groups. Please leave some group before joining or creating a new one.
@@ -1757,7 +1757,7 @@ Publish this classified now for L$[AMOUNT]?
<usetemplate canceltext="å–消" name="yesnocancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="SetGroupMature">
- Does this group contain Moderate content?
+ 這個群組將包å«é©åº¦æˆäººå…§å®¹ï¼Ÿ
<usetemplate canceltext="å–消" name="yesnocancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification label="Confirm restart" name="ConfirmRestart">
@@ -1894,7 +1894,7 @@ Move the inventory item(s)?
</notification>
<notification name="DeleteItems">
[QUESTION]
- <usetemplate ignoretext="Confirm before deleting items" name="okcancelignore" notext="å–消" yestext="確定"/>
+ <usetemplate ignoretext="刪除物å“å‰ç¢ºèª" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
@@ -1955,37 +1955,37 @@ Do you want to replace it with the selected object?
Would you like to leave Busy Mode before completing this transaction?
<form name="form">
- <ignore name="ignore" text="I am about to pay a person or object while I am in Busy mode"/>
- <button ignore="Always leave Busy Mode" name="Yes" text="確定"/>
- <button ignore="Never leave Busy Mode" name="No" text="å–消"/>
+ <ignore name="ignore" text="當我在忙碌模å¼æ™‚,將è¦æ”¯ä»˜é‡‘錢或給他人物件"/>
+ <button ignore="總是離開忙碌模å¼" name="Yes" text="確定"/>
+ <button ignore="絕ä¸é›¢é–‹å¿™ç¢Œæ¨¡å¼" name="No" text="å–消"/>
</form>
</notification>
<notification name="ConfirmDeleteProtectedCategory">
- The folder &apos;[FOLDERNAME]&apos; is a system folder. Deleting system folders can cause instability. Are you sure you want to delete it?
- <usetemplate ignoretext="Confirm before I delete a system folder" name="okcancelignore" notext="å–消" yestext="確定"/>
+ 資料夾 &apos;[FOLDERNAME]&apos; 是系統資料夾。刪除系統資料夾將導致ä¸ç©©å®šã€‚你確定你è¦åˆªé™¤å®ƒï¼Ÿ
+ <usetemplate ignoretext="在我刪除系統資料夾å‰ç¢ºèª" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="ConfirmEmptyTrash">
- Are you sure you want to permanently delete the contents of your Trash?
- <usetemplate ignoretext="Confirm before I empty the inventory Trash folder" name="okcancelignore" notext="å–消" yestext="確定"/>
+ 你確定你è¦å°ä½ åžƒåœ¾ç­’中的內容進行刪除?
+ <usetemplate ignoretext="在我清空收ç´å€åžƒåœ¾ç­’資料夾å‰ç¢ºèª" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="ConfirmClearBrowserCache">
- Are you sure you want to delete your travel, web, and search history?
+ 你確定è¦åˆªé™¤ä½ çš„æ—…è¡Œã€ç¶²é åŠæœå°‹æ­·å²ç´€éŒ„嗎?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="確定"/>
</notification>
<notification name="ConfirmClearCookies">
- Are you sure you want to clear your cookies?
+ 你確定è¦æ¸…除你的 cookies 嗎?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="是"/>
</notification>
<notification name="ConfirmClearMediaUrlList">
- Are you sure you want to clear your list of saved URLs?
+ 你確定è¦æ¸…除你所儲存的 Url 清單嗎?
<usetemplate name="okcancelbuttons" notext="å–消" yestext="是"/>
</notification>
<notification name="ConfirmEmptyLostAndFound">
- Are you sure you want to permanently delete the contents of your Lost And Found?
- <usetemplate ignoretext="Confirm before I empty the inventory Lost And Found folder" name="okcancelignore" notext="å¦" yestext="是"/>
+ 你確定你è¦é€²è¡Œåˆªé™¤æ‰€æœ‰ Lost And Found 資料夾中的內容?
+ <usetemplate ignoretext="在我清空收ç´å€ä¸­çš„ Lost And Found 資料夾å‰é€²è¡Œç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="CopySLURL">
- The following SLurl has been copied to your clipboard:
+ 下列的 SLurl ä½ç½®å·²ç¶“覆製到你的剪貼簿上:
[SLURL]
Link to this from a web page to give others easy access to this location, or try it out yourself by pasting it into the address bar of any web browser.
@@ -1994,11 +1994,11 @@ Link to this from a web page to give others easy access to this location, or try
</form>
</notification>
<notification name="WLSavePresetAlert">
- Do you wish to overwrite the saved preset?
- <usetemplate name="okcancelbuttons" notext="No" yestext="是"/>
+ ä½ è¦è¦†å¯«å·²å„²å­˜çš„é è¨­é…置嗎?
+ <usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="WLDeletePresetAlert">
- Do you wish to delete [SKY]?
+ ä½ è¦åˆªé™¤ [SKY]?
<usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="WLNoEditDefault">
@@ -2015,7 +2015,7 @@ Link to this from a web page to give others easy access to this location, or try
Give me a name for the new sky.
<form name="form">
<input name="message">
- New Preset
+ æ–°é è¨­é…é…ç½®
</input>
<button name="OK" text="確定"/>
<button name="Cancel" text="å–消"/>
@@ -2094,13 +2094,13 @@ Link to this from a web page to give others easy access to this location, or try
[MESSAGE]
</notification>
<notification name="Cancelled">
- Cancelled
+ å·²å–消
</notification>
<notification name="CancelledSit">
- Cancelled Sit
+ å–消å下
</notification>
<notification name="CancelledAttach">
- Cancelled Attach
+ å–消貼上
</notification>
<notification name="ReplacedMissingWearable">
Replaced missing clothing/body part with default.
@@ -2131,13 +2131,13 @@ Link to this from a web page to give others easy access to this location, or try
In-world snapshot upload done
</notification>
<notification name="TerrainDownloaded">
- Terrain.raw downloaded
+ 地形 .raw 檔已下載
</notification>
<notification name="GestureMissing">
- Hmm. Gesture [NAME] is missing from the database.
+ 嗯,姿勢 [NAME] 在資料庫中éºå¤±ã€‚
</notification>
<notification name="UnableToLoadGesture">
- Unable to load gesture [NAME].
+ 無法載入姿勢 [NAME]。
</notification>
<notification name="LandmarkMissing">
資料庫中的地標éºå¤±ã€‚
@@ -2146,30 +2146,30 @@ Link to this from a web page to give others easy access to this location, or try
無法載入地標,請å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="CapsKeyOn">
- Your Caps Lock key is on.
-This might affect your password.
+ 你的大寫éµå·²å•Ÿç”¨ã€‚
+這將å¯èƒ½æœƒå½±éŸ¿åˆ°ä½ è¼¸å…¥çš„密碼。
</notification>
<notification name="NotecardMissing">
- Notecard is missing from database.
+ 記事å¡åœ¨è³‡æ–™åº«ä¸­éºå¤±ã€‚
</notification>
<notification name="NotecardNoPermissions">
- You don&apos;t have permission to view this notecard.
+ 你並沒有權é™åŽ»å¯Ÿçœ‹é€™å€‹è¨˜äº‹å¡ã€‚
</notification>
<notification name="RezItemNoPermissions">
- Insufficient permissions to rez object.
+ 產生物件時發生權é™è¡çªã€‚
</notification>
<notification name="UnableToLoadNotecard">
- Unable to load notecard.
-Please try again.
+ 無法載入記事å¡ã€‚
+è«‹å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="ScriptMissing">
- Script is missing from database.
+ 腳本在資料庫中éºå¤±ã€‚
</notification>
<notification name="ScriptNoPermissions">
- Insufficient permissions to view script.
+ 察看腳本時發生權é™è¡çªã€‚
</notification>
<notification name="UnableToLoadScript">
- Unable to load script. Please try again.
+ 無法載入腳本。請å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="IncompleteInventory">
The complete contents you are offering are not yet locally available. Please try offering those items again in a minute.
@@ -2193,31 +2193,31 @@ Please try again.
Please select a single object.
</notification>
<notification name="ObjectNotForSale">
- This object is not for sale.
+ 這物件ä¸å‡ºå”®ã€‚
</notification>
<notification name="EnteringGodMode">
- Entering god mode, level [LEVEL]
+ 進入神之模å¼ä¸­ï¼Œç­‰ç´š [LEVEL]
</notification>
<notification name="LeavingGodMode">
- Now leaving god mode, level [LEVEL]
+ ç¾åœ¨é›¢é–‹ç¥žä¹‹æ¨¡å¼ï¼Œç­‰ç´š [LEVEL]
</notification>
<notification name="CopyFailed">
- You don&apos;t have permission to copy this.
+ 你並沒有權é™åŽ»è¦†è£½é€™å€‹ã€‚
</notification>
<notification name="InventoryAccepted">
- [NAME] received your inventory offer.
+ [NAME] 接收到你æ供的收ç´å€ç‰©å“。
</notification>
<notification name="InventoryDeclined">
- [NAME] declined your inventory offer.
+ [NAME] 拒絕你æ供的收ç´å€ç‰©å“。
</notification>
<notification name="ObjectMessage">
[NAME]: [MESSAGE]
</notification>
<notification name="CallingCardAccepted">
- Your calling card was accepted.
+ ä½ çš„å片已被接å—。
</notification>
<notification name="CallingCardDeclined">
- Your calling card was declined.
+ ä½ çš„å片已被拒絕。
</notification>
<notification name="TeleportToLandmark">
You can teleport to locations like &apos;[NAME]&apos; by opening the Places panel on the right side of your screen, and then select the Landmarks tab.
@@ -2249,12 +2249,12 @@ Try selecting a smaller piece of land.
[MESSAGE]
</notification>
<notification name="EventNotification">
- Event Notification:
+ 活動通知:
[NAME]
[DATE]
<form name="form">
- <button name="Details" text="Details"/>
+ <button name="Details" text="細節"/>
<button name="Cancel" text="å–消"/>
</form>
</notification>
@@ -2312,8 +2312,8 @@ Non-transferable objects that are deeded to the group have been deleted.
You can be hurt here. If you die, you will be teleported to your home location.
</notification>
<notification name="NoFly">
- This area has flying disabled.
-You can&apos;t fly here.
+ 這å€åŸŸé—œé–‰ä¸¦ç¦æ­¢é£›è¡Œã€‚
+ä½ ä¸èƒ½åœ¨æ­¤è™•é£›è¡Œã€‚
</notification>
<notification name="PushRestricted">
This area does not allow pushing. You can&apos;t push others here unless you own the land.
@@ -2353,13 +2353,13 @@ Please go to the Knowledge Base for details on accessing areas with this maturit
You do not have proper payment status to enter this region.
</notification>
<notification name="MustGetAgeRgion">
- You must be age-verified to enter this region.
+ 你必須通éŽå¹´é½¡èªè­‰ä»¥é€²å…¥é€™åœ°å€ã€‚
</notification>
<notification name="MustGetAgeParcel">
- You must be age-verified to enter this parcel.
+ 你必須通éŽå¹´é½¡é©—證以進入這地段。
</notification>
<notification name="NoDestRegion">
- No destination region found.
+ 無目的地地å€ç™¼ç¾ã€‚
</notification>
<notification name="NotAllowedInDest">
You are not allowed into the destination.
@@ -2381,10 +2381,10 @@ Please go to the Knowledge Base for details on accessing areas with this maturit
Please try again in a few moments.
</notification>
<notification name="GeneralFailure">
- General failure.
+ 一般故障。
</notification>
<notification name="RoutedWrongRegion">
- Routed to wrong region. Please try again.
+ 路由導å‘到錯誤地å€ã€‚è«‹å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="NoValidAgentID">
No valid agent id.
@@ -2418,7 +2418,7 @@ Please try again in a few moments.
</notification>
<notification name="ObjectGiveItem">
An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] has given you this [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Keep"/>
<button name="Discard" text="Discard"/>
@@ -2442,7 +2442,7 @@ Please try again in a few moments.
<notification name="JoinGroup">
[MESSAGE]
<form name="form">
- <button name="Join" text="Join"/>
+ <button name="Join" text="加入"/>
<button name="Decline" text="Decline"/>
<button name="Info" text="資訊"/>
</form>
@@ -2709,15 +2709,15 @@ They will be blocked for a few seconds for your security.
<notification name="IMToast">
[MESSAGE]
<form name="form">
- <button name="respondbutton" text="Respond"/>
+ <button name="respondbutton" text="回應"/>
</form>
</notification>
<notification name="ConfirmCloseAll">
- Are you sure you want to close all IMs?
- <usetemplate ignoretext="Confirm before I close all IMs" name="okcancelignore" notext="å–消" yestext="確定"/>
+ 你確定è¦é—œé–‰å…¨éƒ¨ IMs å°è©±è¦–窗?
+ <usetemplate ignoretext="在我關閉全部的 IMs å°è©±è¦–窗å‰ç¢ºèªã€‚" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification name="AttachmentSaved">
- Attachment has been saved.
+ 附件已儲存。
</notification>
<notification name="UnableToFindHelpTopic">
Unable to find the help topic for this element.
@@ -2831,7 +2831,7 @@ This will also cause all residents that later join the call to be
muted, even after you have left the call.
Mute everyone?
- <usetemplate ignoretext="Confirm before I mute all participants in a group call" name="okcancelignore" notext="å–消" yestext="確定"/>
+ <usetemplate ignoretext="在我å°æ‰€æœ‰ç¾¤çµ„通話的åƒèˆ‡è€…予以éœéŸ³å‰ç¢ºèª" name="okcancelignore" notext="å–消" yestext="確定"/>
</notification>
<notification label="èŠå¤©" name="HintChat">
To join the conversation, type into the chat field below.
@@ -2875,10 +2875,10 @@ Click and drag anywhere on the world to rotate your view
Here&apos;s your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
</notification>
<notification name="PopupAttempt">
- A pop-up was prevented from opening.
+ 一個çªé¡¯å¼è¦–窗開啟時被阻擋。
<form name="form">
- <ignore name="ignore" text="Enable all pop-ups"/>
- <button name="open" text="Open pop-up window"/>
+ <ignore name="ignore" text="啟用全部的çªé¡¯å¼è¦–窗"/>
+ <button name="open" text="é–‹å•Ÿçªé¡¯å¼è¦–窗"/>
</form>
</notification>
<notification name="AuthRequest">
@@ -2943,10 +2943,10 @@ If you continue to have problems, please visit the [SUPPORT_SITE].
- Your system memory does not meet the minimum requirements.
</global>
<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
- If you own a piece of land, you can make it your home location.
-Otherwise, you can look at the Map and find places marked &quot;Infohub&quot;.
+ 若你æ“有一塊土地,你å¯ä»¥æ¨™è¨˜å®ƒæˆç‚ºä½ çš„家的ä½ç½®ã€‚
+或者,你å¯ä»¥å¯Ÿçœ‹åœ°åœ–尋找標記為 &quot;資訊中心&quot; 的地方。
</global>
<global name="You died and have been teleported to your home location">
- You died and have been teleported to your home location.
+ 你已經死亡並且被瞬間傳é€å›žä½ çš„家的ä½ç½®ã€‚
</global>
</notifications>
diff --git a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
index 9ef4258f0b..1dfa024138 100644
--- a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
@@ -3,8 +3,8 @@
<text name="title_text">
å°éŽ–清單
</text>
- <scroll_list name="blocked" tool_tip="List of currently blocked Residents"/>
- <button label="Block person" name="Block resident..." tool_tip="Pick a Resident to block"/>
- <button label="Block object by name" name="Block object by name..." tool_tip="Pick an object to block by name"/>
- <button label="Unblock" name="Unblock" tool_tip="Remove Resident or object from blocked list"/>
+ <scroll_list name="blocked" tool_tip="ç›®å‰å°éŽ–的居民清單"/>
+ <button label="å°éŽ–他人" name="Block resident..." tool_tip="挑é¸ä¸€ä½å±…民以進行å°éŽ–"/>
+ <button label="ä¾å稱å°éŽ–物件" name="Block object by name..." tool_tip="ä¾å稱挑é¸ä¸€å€‹ç‰©ä»¶é€²è¡Œå°éŽ–"/>
+ <button label="解除å°éŽ–" name="Unblock" tool_tip="將居民或物件由å°éŽ–清單中移除"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_classified_info.xml b/indra/newview/skins/default/xui/zh/panel_classified_info.xml
index 94edb7ab71..cf3113ef1c 100644
--- a/indra/newview/skins/default/xui/zh/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/zh/panel_classified_info.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
<panel.string name="type_mature">
- Moderate
+ é©åº¦æˆäºº
</panel.string>
<panel.string name="type_pg">
- General Content
+ 一般普級內容
</panel.string>
<panel.string name="l$_price">
L$[PRICE]
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml b/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
index 73c59d9ae3..6b17302bf1 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
@@ -2,11 +2,11 @@
<panel name="edit_alpha_panel">
<scroll_container name="avatar_alpha_color_panel_scroll">
<panel name="avatar_alpha_color_panel">
- <texture_picker label="Lower Alpha" name="Lower Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Upper Alpha" name="Upper Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Head Alpha" name="Head Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Eye Alpha" name="Eye Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Hair Alpha" name="Hair Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="下åŠèº«åŠé€æ˜Ž" name="Lower Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="上åŠèº«åŠé€æ˜Ž" name="Upper Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="頭部åŠé€æ˜Ž" name="Head Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="眼ç›åŠé€æ˜Ž" name="Eye Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="é ­é«®åŠé€æ˜Ž" name="Hair Alpha" tool_tip="點擊以挑é¸åœ–片"/>
</panel>
</scroll_container>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
index e749d9e3e7..f12701c981 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
@@ -32,9 +32,9 @@
<button label="Set to Current Location" name="set_to_curr_location_btn"/>
<text name="category_label" value="Category:"/>
<text name="content_type_label" value="Content type:"/>
- <icons_combo_box label="General Content" name="content_type">
- <icons_combo_box.item label="Moderate Content" name="mature_ci" value="Mature"/>
- <icons_combo_box.item label="General Content" name="pg_ci" value="PG"/>
+ <icons_combo_box label="一般普級內容" name="content_type">
+ <icons_combo_box.item label="é©åº¦æˆäººå…§å®¹" name="mature_ci" value="Mature"/>
+ <icons_combo_box.item label="一般普級內容" name="pg_ci" value="PG"/>
</icons_combo_box>
<check_box label="Auto renew each week" name="auto_renew"/>
<text name="price_for_listing_label" value="Price for listing:"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_physics.xml b/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
index 77ee4fd36d..26fedb59be 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
@@ -2,12 +2,12 @@
<panel name="edit_physics_panel">
<panel label="" name="accordion_panel">
<accordion name="physics_accordion">
- <accordion_tab name="physics_breasts_updown_tab" title="Breasts Bounce"/>
- <accordion_tab name="physics_breasts_inout_tab" title="Breasts Cleavage"/>
- <accordion_tab name="physics_breasts_leftright_tab" title="Breasts Sway"/>
- <accordion_tab name="physics_belly_tab" title="Belly Bounce"/>
- <accordion_tab name="physics_butt_tab" title="Butt Bounce"/>
- <accordion_tab name="physics_butt_leftright_tab" title="Butt Sway"/>
+ <accordion_tab name="physics_breasts_updown_tab" title="乳房彈性"/>
+ <accordion_tab name="physics_breasts_inout_tab" title="ä¹³æºæ·±æ·º"/>
+ <accordion_tab name="physics_breasts_leftright_tab" title="乳房æ–擺"/>
+ <accordion_tab name="physics_belly_tab" title="腹部彈性"/>
+ <accordion_tab name="physics_butt_tab" title="臀部彈性"/>
+ <accordion_tab name="physics_butt_leftright_tab" title="臀部æ–擺"/>
<accordion_tab name="physics_advanced_tab" title="進階åƒæ•¸"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
index 7bf923b4ca..675caf9e2e 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
@@ -2,7 +2,7 @@
<panel name="edit_shoes_panel">
<panel name="avatar_shoes_color_panel">
<texture_picker label="æ質" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/>
- <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/>
+ <color_swatch label="é¡è‰²/色調" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
index 936a2651ab..066b1fd389 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
@@ -40,13 +40,13 @@
Editing Underpants
</string>
<string name="edit_alpha_title">
- Editing Alpha Mask
+ åŠé€æ˜Žé®ç½©ç·¨è¼¯ä¸­
</string>
<string name="edit_tattoo_title">
- Editing Tattoo
+ 刺é’編輯中
</string>
<string name="edit_physics_title">
- Editing Physics
+ 身體物ç†ç·¨è¼¯ä¸­
</string>
<string name="shape_desc_text">
體形:
@@ -88,13 +88,13 @@
內褲:
</string>
<string name="alpha_desc_text">
- Alpha Mask:
+ åŠé€æ˜Žé®ç½©ï¼š
</string>
<string name="tattoo_desc_text">
刺é’:
</string>
<string name="physics_desc_text">
- Physics:
+ 身體物ç†ï¼š
</string>
<labeled_back_button label="儲存" name="back_btn" tool_tip="回到編輯è£æ‰®"/>
<text name="edit_wearable_title" value="體形編輯中"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
index 1e3c18f522..3915e80d43 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
@@ -2,16 +2,16 @@
<panel name="panel_im_control_panel">
<layout_stack name="vertical_stack">
<layout_panel name="group_info_btn_panel">
- <button label="社團檔案" name="group_info_btn"/>
+ <button label="群組檔案" name="group_info_btn"/>
</layout_panel>
<layout_panel name="call_btn_panel">
- <button label="Call Group" name="call_btn"/>
+ <button label="群組通話" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
- <button label="Leave Call" name="end_call_btn"/>
+ <button label="çµæŸé€šè©±" name="end_call_btn"/>
</layout_panel>
<layout_panel name="voice_ctrls_btn_panel">
- <button label="Open Voice Controls" name="voice_ctrls_btn"/>
+ <button label="開啟語音控制" name="voice_ctrls_btn"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_general.xml b/indra/newview/skins/default/xui/zh/panel_group_general.xml
index a97a35056b..f70fbf22a8 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_general.xml
@@ -6,7 +6,7 @@
Hover your mouse over the options for more help.
</panel.string>
<panel.string name="group_info_unchanged">
- 一般社團資訊已經被變更
+ 一般群組資訊已經被變更
</panel.string>
<panel.string name="incomplete_member_data_str">
Retrieving member data
@@ -22,7 +22,7 @@ Hover your mouse over the options for more help.
<button label="ç¾åœ¨å°±åŠ å…¥!!" name="btn_join"/>
</panel>
<text_editor name="charter">
- Group Charter
+ 群組è¦ç« 
</text_editor>
<name_list name="visible_members">
<name_list.columns label="æˆå“¡" name="name"/>
@@ -36,11 +36,11 @@ Hover your mouse over the options for more help.
我的頭銜:
</text>
<combo_box name="active_title" tool_tip="Sets the title that appears in your avatar&apos;s name tag when this group is active."/>
- <check_box label="接å—社團通知" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."/>
+ <check_box label="接å—群組通知" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."/>
<check_box label="顯示在我的檔案中" name="list_groups_in_profile" tool_tip="Sets whether you want to show this group in your profile"/>
<panel name="preferences_container">
<text name="group_settngs_label">
- 社團
+ 群組
</text>
<check_box label="任何人都å¯ä»¥åŠ å…¥" name="open_enrollement" tool_tip="Sets whether this group allows new members to join without being invited."/>
<check_box label="加入費用" name="check_enrollment_fee" tool_tip="Sets whether to require an enrollment fee to join the group"/>
@@ -49,8 +49,8 @@ Hover your mouse over the options for more help.
<combo_item name="select_mature">
- é¸æ“‡å…§å®¹åˆ†ç´š -
</combo_item>
- <combo_box.item label="Moderate Content" name="mature"/>
- <combo_box.item label="一般內容" name="pg"/>
+ <combo_box.item label="é©åº¦æˆäººå…§å®¹" name="mature"/>
+ <combo_box.item label="一般普級內容" name="pg"/>
</combo_box>
<check_box initial_value="true" label="顯示在æœå°‹ä¸­" name="show_in_group_list" tool_tip="Let people see this group in search results"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
index 320645ea5e..db01edcdb3 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="社團檔案" name="GroupInfo">
+<panel label="群組檔案" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- There are unsaved changes
+ 變更未儲存
</panel.string>
<panel.string name="want_apply_text">
- Do you want to save these changes?
+ ä½ è¦å„²å­˜é€™äº›è®Šæ›´å—Žï¼Ÿ
</panel.string>
<panel.string name="group_join_btn">
- Join (L$[AMOUNT])
+ 加入(L$[AMOUNT])
</panel.string>
<panel.string name="group_join_free">
- Free
+ å…è²»
</panel.string>
<panel name="group_info_top">
<text_editor name="group_name" value="(載入中...)"/>
- <line_editor label="Type your new group name here" name="group_name_editor"/>
+ <line_editor label="在此輸入你的新群組å稱" name="group_name_editor"/>
</panel>
<layout_stack name="layout">
<layout_panel name="group_accordions">
@@ -31,11 +31,11 @@
<button label="èŠå¤©" name="btn_chat"/>
</layout_panel>
<layout_panel name="call_btn_lp">
- <button label="Group Call" name="btn_call" tool_tip="Call this group"/>
+ <button label="群組通話" name="btn_call" tool_tip="與此群組進行通話"/>
</layout_panel>
<layout_panel name="btn_apply_lp">
<button label="儲存" label_selected="儲存" name="btn_apply"/>
- <button label="創造社團" name="btn_create" tool_tip="創造一個新社團"/>
+ <button label="創造群組" name="btn_create" tool_tip="創造一個新群組"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_invite.xml b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
index a1395f454b..07dcb2303e 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
@@ -12,7 +12,7 @@
<text name="help_text">
You can select multiple Residents to invite to your group. Click &apos;Open Resident Chooser&apos; to start.
</text>
- <button label="Open Resident Chooser" name="add_button"/>
+ <button label="é–‹å•Ÿå±…æ°‘é¸æ“‡è¦–窗" name="add_button"/>
<name_list name="invitee_list" tool_tip="Hold the Ctrl key and click Resident names to multi-select"/>
<button label="Remove Selected from List" name="remove_button" tool_tip="Removes the Residents selected above from the invite list"/>
<text name="role_text">
@@ -22,6 +22,6 @@
<button label="é€å‡ºé‚€è«‹" name="ok_button"/>
<button label="å–消" name="cancel_button"/>
<string name="GroupInvitation">
- 社團邀請
+ 群組邀請
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
index 58022c2279..1bf3929683 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
@@ -7,7 +7,7 @@
You don&apos;t have permission to view group owned land
</panel.string>
<panel.string name="epmty_view_group_land_text">
- No entries
+ 沒有項目
</panel.string>
<panel.string name="cant_view_group_accounting_text">
You don&apos;t have permission to view the group&apos;s accounting information.
@@ -16,7 +16,7 @@
載入中...
</panel.string>
<panel.string name="land_contrib_error">
- Unable to set your land contribution
+ 無法設定你的土地æç»
</panel.string>
<panel name="layout_panel_landmoney">
<scroll_list name="group_parcel_list">
@@ -46,7 +46,7 @@
[AREA] m²
</text>
<text name="your_contribution_label">
- Your contribution:
+ ä½ çš„æç»ï¼š
</text>
<text name="your_contribution_units">
m²
@@ -58,7 +58,7 @@
More land credits are needed to support land in use
</text>
<text name="group_money_heading">
- 社團 L$
+ 群組 L$
</text>
</panel>
<tab_container name="group_money_tab_container">
diff --git a/indra/newview/skins/default/xui/zh/panel_group_notices.xml b/indra/newview/skins/default/xui/zh/panel_group_notices.xml
index 65c07e7137..26273dd9ce 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_notices.xml
@@ -10,7 +10,7 @@ You can turn off Notices on the General tab.
</panel.string>
<text name="lbl2">
通知ä¿ç•™ 14 天。
-æ¯å€‹ç¤¾åœ˜ä¸€å¤©æœ€å¤š 200 則
+æ¯å€‹ç¾¤çµ„一天最多 200 則
</text>
<scroll_list name="notice_list">
<scroll_list.columns label="主旨" name="subject"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_notify.xml b/indra/newview/skins/default/xui/zh/panel_group_notify.xml
index 803f34d5a7..00462d8b0b 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_notify.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="instant_message" name="panel_group_notify">
+<panel label="å³æ™‚訊æ¯" name="panel_group_notify">
<string name="message_max_lines_count" value="7"/>
<string name="subject_font" value="SANSSERIF_BIG"/>
<string name="date_font" value="SANSSERIF"/>
<panel label="header" name="header">
<text name="title" value="Sender Name / Group Name"/>
</panel>
- <text_editor name="message" value="message"/>
+ <text_editor name="message" value="訊æ¯"/>
<text name="attachment" value="Attachment"/>
<button label="確定" name="btn_ok"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
index fff4383893..cf5fc26d14 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="æˆå“¡èˆ‡è§’色" name="roles_tab">
<panel.string name="default_needs_apply_text">
- There are unsaved changes
+ 未儲存的設定
</panel.string>
<panel.string name="want_apply_text">
- Do you want to save your changes?
+ ä½ è¦å„²å­˜ä½ çš„變更嗎?
</panel.string>
<tab_container name="roles_tab_container">
<panel label="æˆå“¡" name="members_sub_tab" tool_tip="æˆå“¡">
<panel.string name="help_text">
- You can add or remove Roles assigned to Members.
-Select multiple Members by holding the Ctrl key and
-clicking on their names.
+ ä½ å¯ä»¥æ·»åŠ æˆ–移除一個角色指派給æˆå“¡ã€‚
+é¸è²¬å¤šå€‹æˆå“¡æ™‚åŒæ™‚按著 Ctrl éµä¸”
+使用滑鼠左éµé»žæ“Šä»–們的å字。
</panel.string>
<panel.string name="donation_area">
[AREA] m²
@@ -55,12 +55,12 @@ things in this group. There&apos;s a broad variety of Abilities.
</tab_container>
<panel name="members_footer">
<text name="static">
- Assigned Roles
+ 指派角色
</text>
<text name="static2">
- Allowed Abilities
+ å…許的能力
</text>
- <scroll_list name="member_allowed_actions" tool_tip="For details of each allowed ability see the abilities tab"/>
+ <scroll_list name="member_allowed_actions" tool_tip="想瞭解有關於å…許的能力的細節請查閱能力é ç±¤"/>
</panel>
<panel name="roles_footer">
<text name="static">
@@ -73,23 +73,23 @@ things in this group. There&apos;s a broad variety of Abilities.
æè¿°
</text>
<text name="static4">
- Assigned Members
+ 指派角色
</text>
<check_box label="Reveal members" name="role_visible_in_list" tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group."/>
<text name="static5">
- Allowed Abilities
+ å…許的能力
</text>
- <scroll_list name="role_allowed_actions" tool_tip="For details of each allowed ability see the abilities tab"/>
+ <scroll_list name="role_allowed_actions" tool_tip="想瞭解有關於æ¯ä¸€é …å…許的能力的細節請查閱能力é ç±¤"/>
</panel>
<panel name="actions_footer">
<text_editor name="action_description">
This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
</text_editor>
<text name="static2">
- Roles with this ability
+ 有此能力的角色
</text>
<text name="static3">
- Members with this ability
+ 有此能力的æˆå“¡
</text>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_landmarks.xml b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
index fa907e3d90..eea406170a 100644
--- a/indra/newview/skins/default/xui/zh/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
@@ -4,12 +4,12 @@
<accordion_tab name="tab_favorites" title="最愛列"/>
<accordion_tab name="tab_landmarks" title="我的地標"/>
<accordion_tab name="tab_inventory" title="我的收ç´å€"/>
- <accordion_tab name="tab_library" title="Library"/>
+ <accordion_tab name="tab_library" title="資æºåº«"/>
</accordion>
<panel name="bottom_panel">
<layout_stack name="bottom_panel">
<layout_panel name="options_gear_btn_panel">
- <menu_button name="options_gear_btn" tool_tip="Show additional options"/>
+ <menu_button name="options_gear_btn" tool_tip="顯示é¡å¤–é¸é …"/>
</layout_panel>
<layout_panel name="add_btn_panel">
<button name="add_btn" tool_tip="添加新地標"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
index 059a78cf7d..3e44f2a584 100644
--- a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
@@ -14,7 +14,7 @@
ç›®å‰é é¢ï¼š
</text>
<text name="current_url" tool_tip="The current page for this media source" value=""/>
- <button label="Reset" name="current_url_reset_btn"/>
+ <button label="é‡è¨­" name="current_url_reset_btn"/>
<check_box initial_value="false" label="Auto Loop" name="auto_loop"/>
<check_box initial_value="false" label="First Click Interacts" name="first_click_interact"/>
<check_box initial_value="false" label="Auto Zoom" name="auto_zoom"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
index 3645f471ce..ec62b61c54 100644
--- a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
@@ -17,7 +17,7 @@
<check_box initial_value="false" label="Allow Navigation &amp; Interactivity" name="perms_owner_interact"/>
<check_box initial_value="false" label="顯示控制列" name="perms_owner_control"/>
<text name="group_label">
- 社團:
+ 群組:
</text>
<check_box initial_value="false" label="Allow Navigation &amp; Interactivity" name="perms_group_interact"/>
<check_box initial_value="false" label="顯示控制列" name="perms_group_control"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
index ef56c34b5c..aaaf6bfb94 100644
--- a/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
@@ -4,7 +4,7 @@
<text name="home_url_fails_some_items_in_whitelist">
Entries that the home page fails against are marked:
</text>
- <button label="Add" name="whitelist_add"/>
+ <button label="添加" name="whitelist_add"/>
<button label="刪除" name="whitelist_del"/>
<text name="home_url_fails_whitelist">
Warning: the home page specified in the General tab fails to pass this whitelist. It has been disabled until a valid entry has been added.
diff --git a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
index 1748d117f4..60a5767d09 100644
--- a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
@@ -9,8 +9,8 @@
<combo_editor label="æœå°‹ [SECOND_LIFE]" name="search_combo_editor"/>
</search_combo_box>
</panel>
- <favorites_bar name="favorite" tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!">
- <label name="favorites_bar_label" tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!">
+ <favorites_bar name="favorite" tool_tip="拖曳傳é€åœ°æ¨™åˆ°æ­¤ä»¥ä¾¿è®“你在第二人生中能快速傳é€åˆ°ä½ æœ€æ„›çš„地點!!">
+ <label name="favorites_bar_label" tool_tip="拖曳傳é€åœ°æ¨™åˆ°æ­¤ä»¥ä¾¿è®“你在第二人生中能快速傳é€åˆ°ä½ æœ€æ„›çš„地點!!">
最愛列
</label>
<chevron_button name="&gt;&gt;" tool_tip="顯示更多我的最愛"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
index 5ab6837569..6a4b5fcf35 100644
--- a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
@@ -30,9 +30,9 @@
</text>
<combo_box name="show_combo">
<combo_box.item label="全部" name="All"/>
- <combo_box.item label="In this Parcel" name="WithinParcel"/>
- <combo_box.item label="Outside this Parcel" name="OutsideParcel"/>
- <combo_box.item label="On other Avatars" name="OnOthers"/>
+ <combo_box.item label="在此地段內" name="WithinParcel"/>
+ <combo_box.item label="在此地段外部" name="OutsideParcel"/>
+ <combo_box.item label="在其他化身身上" name="OnOthers"/>
</combo_box>
<scroll_list name="media_list">
<scroll_list.columns label="Proximity" name="media_proximity"/>
@@ -53,10 +53,10 @@
<button name="pause_btn" tool_tip="æš«åœæ‰€é¸æ“‡çš„媒體"/>
</layout_panel>
<layout_panel name="volume_slider_ctrl">
- <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Audio volume for selected media"/>
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="所é¸æ“‡çš„媒體之音頻音é‡"/>
</layout_panel>
<layout_panel name="mute">
- <button name="mute_btn" tool_tip="Mute audio on selected media"/>
+ <button name="mute_btn" tool_tip="éœéŸ³æ‰€é¸æ“‡çš„媒體音頻"/>
</layout_panel>
<layout_panel name="zoom">
<button name="zoom_btn" tool_tip="Zoom into selected media"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_notes.xml b/indra/newview/skins/default/xui/zh/panel_notes.xml
index f68fd74d1f..5d0e6760ff 100644
--- a/indra/newview/skins/default/xui/zh/panel_notes.xml
+++ b/indra/newview/skins/default/xui/zh/panel_notes.xml
@@ -27,7 +27,7 @@
<button label="地圖" name="show_on_map_btn" tool_tip="Show the Resident on the map"/>
</layout_panel>
<layout_panel name="teleport_btn_lp">
- <button label="瞬間傳é€" name="teleport" tool_tip="Offer teleport"/>
+ <button label="瞬間傳é€" name="teleport" tool_tip="發給瞬間傳é€è«‹æ±‚"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
index 39a9bcb848..693cdcdeca 100644
--- a/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Wearing">
<panel name="bottom_panel">
- <menu_button name="options_gear_btn" tool_tip="Show additional options"/>
+ <menu_button name="options_gear_btn" tool_tip="顯示é¡å¤–é¸é …"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_people.xml b/indra/newview/skins/default/xui/zh/panel_people.xml
index 8da75e334e..c97ff2ae96 100644
--- a/indra/newview/skins/default/xui/zh/panel_people.xml
+++ b/indra/newview/skins/default/xui/zh/panel_people.xml
@@ -14,18 +14,18 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<string name="no_filtered_friends_msg">
Didn&apos;t find what you&apos;re looking for? Try [secondlife:///app/search/people/[SEARCH_TERM] Search].
</string>
- <string name="people_filter_label" value="Filter People"/>
- <string name="groups_filter_label" value="Filter Groups"/>
- <string name="no_filtered_groups_msg" value="Didn&apos;t find what you&apos;re looking for? Try [secondlife:///app/search/groups/[SEARCH_TERM] Search]."/>
- <string name="no_groups_msg" value="Looking for Groups to join? Try [secondlife:///app/search/groups Search]."/>
- <string name="MiniMapToolTipMsg" value="[REGION](Double-click to open Map, shift-drag to pan)"/>
- <string name="AltMiniMapToolTipMsg" value="[REGION](Double-click to teleport, shift-drag to pan)"/>
- <filter_editor label="Filter" name="filter_input"/>
+ <string name="people_filter_label" value="人員éŽæ¿¾å™¨"/>
+ <string name="groups_filter_label" value="群組éŽæ¿¾å™¨"/>
+ <string name="no_filtered_groups_msg" value="沒有發ç¾ä½ è¦æ‰¾çš„嗎?何ä¸è©¦è©¦ [secondlife:///app/search/groups/[SEARCH_TERM] æœå°‹]。"/>
+ <string name="no_groups_msg" value="想找尋群組加入嗎?何ä¸è©¦è©¦ [secondlife:///app/search/groups æœå°‹]。"/>
+ <string name="MiniMapToolTipMsg" value="[REGION](雙擊以開啟地圖,按下 shift éµæ‹–曳來平移)"/>
+ <string name="AltMiniMapToolTipMsg" value="[REGION](雙擊以瞬間傳é€ï¼ŒæŒ‰ä¸‹ shift éµæ‹–曳來平移)"/>
+ <filter_editor label="éŽæ¿¾å™¨" name="filter_input"/>
<tab_container name="tabs">
<panel label="附近" name="nearby_panel">
<panel label="bottom_panel" name="bottom_panel">
<menu_button name="nearby_view_sort_btn" tool_tip="é¸é …"/>
- <button name="add_friend_btn" tool_tip="Add selected Resident to your friends List"/>
+ <button name="add_friend_btn" tool_tip="添加已é¸æ“‡çš„居民到Ad你的朋å‹æ¸…å–®"/>
</panel>
</panel>
<panel label="我的朋å‹" name="friends_panel">
@@ -39,55 +39,55 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<menu_button name="friends_viewsort_btn" tool_tip="顯示é¡å¤–é¸é …"/>
</layout_panel>
<layout_panel name="add_btn_panel">
- <button name="add_btn" tool_tip="Offer friendship to a Resident"/>
+ <button name="add_btn" tool_tip="å‘å±…æ°‘æ出加為好å‹é‚€è«‹"/>
</layout_panel>
<layout_panel name="trash_btn_panel">
- <dnd_button name="del_btn" tool_tip="Remove selected person from your Friends list"/>
+ <dnd_button name="del_btn" tool_tip="由你的朋å‹æ¸…單移除所é¸æ“‡çš„人"/>
</layout_panel>
</layout_stack>
</panel>
</panel>
- <panel label="我的社團" name="groups_panel">
+ <panel label="我的群組" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
<menu_button name="groups_viewsort_btn" tool_tip="é¸é …"/>
- <button name="plus_btn" tool_tip="Join group/Create new group"/>
- <button name="activate_btn" tool_tip="Activate selected group"/>
+ <button name="plus_btn" tool_tip="加入群組/創立新群組"/>
+ <button name="activate_btn" tool_tip="啟用所é¸æ“‡çš„群組"/>
</panel>
</panel>
- <panel label="RECENT" name="recent_panel">
+ <panel label="最近" name="recent_panel">
<panel label="bottom_panel" name="bottom_panel">
<menu_button name="recent_viewsort_btn" tool_tip="é¸é …"/>
- <button name="add_friend_btn" tool_tip="Add selected Resident to your friends List"/>
+ <button name="add_friend_btn" tool_tip="添加所é¸çš„居民到你的朋å‹æ¸…å–®"/>
</panel>
</panel>
</tab_container>
<panel name="button_bar">
<layout_stack name="bottom_bar_ls">
<layout_panel name="view_profile_btn_lp">
- <button label="檔案" name="view_profile_btn" tool_tip="Show picture, groups, and other Residents information"/>
+ <button label="檔案" name="view_profile_btn" tool_tip="顯示圖片ã€ç¾¤çµ„與其他居民資訊"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
<button label="IM" name="im_btn" tool_tip="é–‹å•Ÿå³æ™‚訊æ¯æœƒè©±"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="通話" name="call_btn" tool_tip="Call this Resident"/>
+ <button label="通話" name="call_btn" tool_tip="與此居民進行通話"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
<button label="分享" name="share_btn" tool_tip="分享一個收ç´å€ç‰©å“"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="瞬間傳é€" name="teleport_btn" tool_tip="Offer teleport"/>
+ <button label="瞬間傳é€" name="teleport_btn" tool_tip="發給瞬間傳é€è«‹æ±‚"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
<layout_panel name="group_info_btn_lp">
- <button label="社團檔案" name="group_info_btn" tool_tip="顯示社團資訊"/>
+ <button label="群組檔案" name="group_info_btn" tool_tip="顯示群組資訊"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="Group Chat" name="chat_btn" tool_tip="é–‹å•ŸèŠå¤©æœƒè©±"/>
+ <button label="群組èŠå¤©" name="chat_btn" tool_tip="é–‹å•ŸèŠå¤©æœƒè©±"/>
</layout_panel>
<layout_panel name="group_call_btn_lp">
- <button label="Group Call" name="group_call_btn" tool_tip="Call this group"/>
+ <button label="群組通話" name="group_call_btn" tool_tip="與此群組進行通話"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_picks.xml b/indra/newview/skins/default/xui/zh/panel_picks.xml
index a233092dc2..15733b71b0 100644
--- a/indra/newview/skins/default/xui/zh/panel_picks.xml
+++ b/indra/newview/skins/default/xui/zh/panel_picks.xml
@@ -19,7 +19,7 @@
<button label="資訊" name="info_btn" tool_tip="顯示精é¸åœ°é»žè³‡è¨Š"/>
</layout_panel>
<layout_panel name="teleport_btn_lp">
- <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°ç›¸å°æ‡‰çš„å€åŸŸ"/>
+ <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°çš„å€åŸŸ"/>
</layout_panel>
<layout_panel name="show_on_map_btn_lp">
<button label="地圖" name="show_on_map_btn" tool_tip="在世界地圖上顯示相å°æ‡‰çš„å€åŸŸ"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_place_profile.xml b/indra/newview/skins/default/xui/zh/panel_place_profile.xml
index aa7b036398..d7bcb0d027 100644
--- a/indra/newview/skins/default/xui/zh/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_place_profile.xml
@@ -4,33 +4,33 @@
<string name="off" value="Off"/>
<string name="anyone" value="Anyone"/>
<string name="available" value="available"/>
- <string name="allocated" value="allocated"/>
+ <string name="allocated" value="已分é…"/>
<string name="title_place" value="地點檔案"/>
<string name="title_teleport_history" value="瞬間傳é€æ­·å²ç´€éŒ„"/>
- <string name="not_available" value="(N\A)"/>
+ <string name="not_available" value="(N\A)"/>
<string name="unknown" value="(未知)"/>
<string name="public" value="(公開)"/>
<string name="none_text" value="(無)"/>
<string name="sale_pending_text" value="(擱置銷售)"/>
- <string name="group_owned_text" value="(社團所æ“有)"/>
+ <string name="group_owned_text" value="(群組所æ“有)"/>
<string name="price_text" value="L$"/>
<string name="area_text" value="m²"/>
<string name="all_residents_text" value="全部居民"/>
- <string name="group_text" value="社團"/>
+ <string name="group_text" value="群組"/>
<string name="can_resell">
- Purchased land in this region may be resold.
+ 購買這地å€çš„土地å…許轉售。
</string>
<string name="can_not_resell">
- Purchased land in this region may not be resold.
+ 購買這地å€çš„土地ä¸å…許轉售。
</string>
<string name="can_change">
- Purchased land in this region may be joined or subdivided.
+ 購買這地å€çš„土地å…許進行åˆä½µæˆ–分割。
</string>
<string name="can_not_change">
- Purchased land in this region may not be joined or subdivided.
+ 購買這地å€çš„土地ä¸å…許進行åˆä½µæˆ–分割。
</string>
<string name="server_update_text">
- Place information not available without server update.
+ 地點資訊因無伺æœå™¨æ›´æ–°æ•…無法æ供。
</string>
<string name="server_error_text">
Information about this location is unavailable at this time, please try again later.
@@ -41,7 +41,7 @@
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
- <button name="back_btn" tool_tip="Back"/>
+ <button name="back_btn" tool_tip="返回"/>
<text name="title" value="地點檔案"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
@@ -56,7 +56,7 @@
<panel name="parcel_characteristics_panel">
<text name="rating_label" value="分級:"/>
<text name="rating_value" value="未知"/>
- <text name="voice_label" value="Voice:"/>
+ <text name="voice_label" value="語音:"/>
<text name="voice_value" value="On"/>
<text name="fly_label" value="飛行:"/>
<text name="fly_value" value="On"/>
@@ -66,7 +66,7 @@
<text name="build_value" value="On"/>
<text name="scripts_label" value="腳本:"/>
<text name="scripts_value" value="On"/>
- <text name="damage_label" value="Damage:"/>
+ <text name="damage_label" value="商害:"/>
<text name="damage_value" value="Off"/>
<button label="關於土地" name="about_land_btn"/>
</panel>
@@ -78,10 +78,10 @@
<text name="region_type_label" value="類型:"/>
<text name="region_type" value="Moose"/>
<text name="region_rating_label" value="分級:"/>
- <text name="region_rating" value="æˆäºº"/>
+ <text name="region_rating" value="完全æˆäºº"/>
<text name="region_owner_label" value="æ“有者:"/>
<text name="region_owner" value="moose Van Moose extra long name moose"/>
- <text name="region_group_label" value="社團:"/>
+ <text name="region_group_label" value="群組:"/>
<text name="region_group">
The Mighty Moose of mooseville soundvillemoose
</text>
@@ -104,8 +104,8 @@
<text name="traffic_label" value="æµé‡ï¼š"/>
<text name="primitives_label" value="Primitives:"/>
<text name="parcel_scripts_label" value="腳本:"/>
- <text name="terraform_limits_label" value="Terraform limits:"/>
- <text name="subdivide_label" value="Subdivide/Join ability:"/>
+ <text name="terraform_limits_label" value="土地變形é™åˆ¶ï¼š"/>
+ <text name="subdivide_label" value="分割土地/åˆä½µåœŸåœ°èƒ½åŠ›ï¼š"/>
<text name="resale_label" value="ReSale ability:"/>
<text name="sale_to_label" value="出售給:"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml
index c141201ab2..8ac464271e 100644
--- a/indra/newview/skins/default/xui/zh/panel_places.xml
+++ b/indra/newview/skins/default/xui/zh/panel_places.xml
@@ -11,7 +11,7 @@
<button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°æ‰€é¸æ“‡çš„å€åŸŸ"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="地圖" name="map_btn" tool_tip="Show the corresponding area on the World Map"/>
+ <button label="地圖" name="map_btn" tool_tip="在世界地圖上顯示相å°æ‡‰çš„å€åŸŸ"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
index c691edb11c..c083d40a82 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
@@ -10,7 +10,7 @@
</radio_group>
<check_box initial_value="true" label="èŠå¤©æ™‚播放打字動作" name="play_typing_animation"/>
<check_box label="當我離線時將收到的 IM 訊æ¯éƒµå¯„給我" name="send_im_to_email"/>
- <check_box label="Enable plain text IM and chat history" name="plain_text_chat_history"/>
+ <check_box label="啟用純本文 IM 與èŠå¤©æ­·å²ç´€éŒ„" name="plain_text_chat_history"/>
<check_box label="èŠå¤©æ³¡æ³¡" name="bubble_text_chat"/>
<text name="show_ims_in_label">
顯示 IMs 於:
@@ -23,14 +23,14 @@
<radio_item label="é ç±¤" name="radio2" value="1"/>
</radio_group>
<text name="disable_toast_label">
- Enable incoming chat popups:
+ 啟用傳入èŠå¤©çš„çªé¡¯ç¤ºè¦–窗:
</text>
- <check_box label="Group Chats" name="EnableGroupChatPopups" tool_tip="Check to see popups when a Group Chat message arrives"/>
- <check_box label="IM èŠå¤©" name="EnableIMChatPopups" tool_tip="Check to see popups when an instant message arrives"/>
+ <check_box label="群組èŠå¤©" name="EnableGroupChatPopups" tool_tip="當群組èŠå¤©è¨Šæ¯æŠµé”時查看çªé¡¯å¼è¦–窗"/>
+ <check_box label="IM èŠå¤©" name="EnableIMChatPopups" tool_tip="當å³æ™‚訊æ¯æŠµé”時查看çªé¡¯å¼è¦–窗"/>
<spinner label="Nearby chat toasts life time:" name="nearby_toasts_lifetime"/>
<spinner label="Nearby chat toasts fading time:" name="nearby_toasts_fadingtime"/>
<text name="translate_chb_label">
- Use machine translation while chatting (powered by Google)
+ èŠå¤©æ™‚使用機器自動進行翻譯(由 Google 所æ供)
</text>
<text name="translate_language_text">
èŠå¤©ç¿»è­¯ç‚ºï¼š
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
index b7449dad10..cabe13adb8 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
@@ -23,9 +23,9 @@
我想è¦èƒ½é€²å‡ºå…§å®¹åˆ†ç´šçš„地å€ç‚ºï¼š
</text>
<combo_box name="maturity_desired_combobox">
- <combo_box.item label="General, Moderate, Adult" name="Desired_Adult"/>
- <combo_box.item label="General and Moderate" name="Desired_Mature"/>
- <combo_box.item label="一般" name="Desired_PG"/>
+ <combo_box.item label="一般普級,é©åº¦æˆäººï¼Œå®Œå…¨æˆäºº" name="Desired_Adult"/>
+ <combo_box.item label="一般普級與é©åº¦æˆäºº" name="Desired_Mature"/>
+ <combo_box.item label="一般普級" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
開始ä½ç½®ï¼š
@@ -45,9 +45,9 @@
</radio_group>
<check_box label="我的åå­—" name="show_my_name_checkbox1"/>
<check_box label="使用者å稱" name="show_slids" tool_tip="顯示使用者åç¨±ï¼Œå°±åƒ bobsmith123 這類的"/>
- <check_box label="社團頭銜" name="show_all_title_checkbox1" tool_tip="顯示社團頭銜,åƒæ˜¯ Officer 或æˆå“¡"/>
- <check_box label="高亮顯示朋å‹" name="show_friends" tool_tip="高亮顯示你朋å‹çš„å稱標籤"/>
- <check_box label="View Display Names" name="display_names_check" tool_tip="Check to use display names in chat, IM, name tags, etc."/>
+ <check_box label="群組頭銜" name="show_all_title_checkbox1" tool_tip="顯示群組頭銜,åƒæ˜¯ Officer 或æˆå“¡"/>
+ <check_box label="高亮標示朋å‹" name="show_friends" tool_tip="高亮顯示你朋å‹çš„å稱標籤"/>
+ <check_box label="察看顯示å稱" name="display_names_check" tool_tip="Check to use display names in chat, IM, name tags, etc."/>
<text name="inworld_typing_rg_label">
按下字æ¯éµï¼š
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
index 8c728bf779..ee8cd9794a 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
@@ -1,47 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="圖形" name="Display panel">
<text name="QualitySpeed">
- Quality and speed:
+ å“質與速度:
</text>
<text name="FasterText">
- Faster
+ 最快
</text>
<text name="BetterText">
- Better
+ 最佳
</text>
<text name="ShadersPrefText">
- Low
+ 低
</text>
<text name="ShadersPrefText2">
- Mid
+ 中
</text>
<text name="ShadersPrefText3">
- High
+ 高
</text>
<text name="ShadersPrefText4">
- Ultra
+ 超高
</text>
<panel label="自訂圖形" name="CustomGraphics Panel">
<text name="ShadersText">
- Shaders:
+ 著色器:
</text>
- <check_box initial_value="true" label="Transparent Water" name="TransparentWater"/>
- <check_box initial_value="true" label="Bump mapping and shiny" name="BumpShiny"/>
- <check_box initial_value="true" label="Basic shaders" name="BasicShaders" tool_tip="Disabling this option may prevent some graphics card drivers from crashing"/>
- <check_box initial_value="true" label="Atmospheric shaders" name="WindLightUseAtmosShaders"/>
+ <check_box initial_value="true" label="清澈é€æ˜Žçš„æ°´" name="TransparentWater"/>
+ <check_box initial_value="true" label="凹凸映射與光澤效果" name="BumpShiny"/>
+ <check_box initial_value="true" label="基本著色" name="BasicShaders" tool_tip="關閉此一é¸é …å¯èƒ½é¿å…部分顯示å¡é©…動程å¼æ毀當機"/>
+ <check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/>
<text name="reflection_label">
- Water Reflections:
+ æ°´æ–‡å射:
</text>
<combo_box name="Reflections">
- <combo_box.item label="Minimal" name="0"/>
- <combo_box.item label="Terrain and trees" name="1"/>
+ <combo_box.item label="最å°" name="0"/>
+ <combo_box.item label="地形與樹木" name="1"/>
<combo_box.item label="全部éœæ…‹ç‰©ä»¶" name="2"/>
<combo_box.item label="全部化身與物件" name="3"/>
- <combo_box.item label="Everything" name="4"/>
+ <combo_box.item label="一切" name="4"/>
</combo_box>
- <slider label="Avatar Physics:" name="AvatarPhysicsDetail"/>
+ <slider label="化身物ç†ï¼š" name="AvatarPhysicsDetail"/>
<text name="AvatarPhysicsDetailText">
- Low
+ 低
</text>
<slider label="æ繪è·é›¢ï¼š" name="DrawDistance"/>
<text name="DrawDistanceMeterText2">
@@ -49,54 +49,54 @@
</text>
<slider label="Max. particle count:" name="MaxParticleCount"/>
<slider label="Max. # of non-impostor avatars:" name="MaxNumberAvatarDrawn"/>
- <slider label="Post process quality:" name="RenderPostProcess"/>
+ <slider label="後製å“質:" name="RenderPostProcess"/>
<text name="MeshDetailText">
- Mesh detail:
+ 網é¢ç´°ç¯€ï¼š
</text>
- <slider label="Objects:" name="ObjectMeshDetail"/>
+ <slider label="物件:" name="ObjectMeshDetail"/>
<slider label="Flexiprims:" name="FlexibleMeshDetail"/>
- <slider label="Trees:" name="TreeMeshDetail"/>
- <slider label="Avatars:" name="AvatarMeshDetail"/>
- <slider label="Terrain:" name="TerrainMeshDetail"/>
- <slider label="Sky:" name="SkyMeshDetail"/>
+ <slider label="樹木:" name="TreeMeshDetail"/>
+ <slider label="化身:" name="AvatarMeshDetail"/>
+ <slider label="地形:" name="TerrainMeshDetail"/>
+ <slider label="天空:" name="SkyMeshDetail"/>
<text name="PostProcessText">
- Low
+ 低
</text>
<text name="ObjectMeshDetailText">
- Low
+ 低
</text>
<text name="FlexibleMeshDetailText">
- Low
+ 低
</text>
<text name="TreeMeshDetailText">
- Low
+ 低
</text>
<text name="AvatarMeshDetailText">
- Low
+ 低
</text>
<text name="TerrainMeshDetailText">
- Low
+ 低
</text>
<text name="SkyMeshDetailText">
- Low
+ 低
</text>
<text name="AvatarRenderingText">
Avatar Rendering:
</text>
<check_box initial_value="true" label="Avatar impostors" name="AvatarImpostors"/>
<check_box initial_value="true" label="Hardware skinning" name="AvatarVertexProgram"/>
- <check_box initial_value="true" label="Avatar cloth" name="AvatarCloth"/>
+ <check_box initial_value="true" label="化身衣æœ" name="AvatarCloth"/>
<text name="TerrainDetailText">
- Terrain detail:
+ 地形細節:
</text>
<radio_group name="TerrainDetailRadio">
- <radio_item label="Low" name="0"/>
- <radio_item label="High" name="2"/>
+ <radio_item label="低" name="0"/>
+ <radio_item label="高" name="2"/>
</radio_group>
--&gt;
</panel>
<button label="套用" label_selected="套用" name="Apply"/>
- <button label="Reset" name="Defaults"/>
+ <button label="é‡è¨­" name="Defaults"/>
<button label="進階" name="Advanced"/>
<button label="硬體" label_selected="硬體" name="GraphicsHardwareButton"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
index de296f72f3..57e3540b3d 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
@@ -5,20 +5,20 @@
<text name="heading2">
自動ä½ç§»ï¼š
</text>
- <check_box label="建造 / 編輯" name="edit_camera_movement" tool_tip="Use automatic camera positioning when entering and exiting edit mode"/>
- <check_box label="編輯外觀" name="appearance_camera_movement" tool_tip="Use automatic camera positioning while in edit mode"/>
- <check_box initial_value="true" label="å´é‚Šæ¬„" name="appearance_sidebar_positioning" tool_tip="Use automatic camera positioning for sidebar"/>
+ <check_box label="建造 / 編輯" name="edit_camera_movement" tool_tip="使用進入或離開編輯模å¼æ™‚自動調整æ”影機ä½ç½®åŠŸèƒ½"/>
+ <check_box label="編輯外觀" name="appearance_camera_movement" tool_tip="使用編輯模å¼æ™‚自動調整æ”影機ä½ç½®åŠŸèƒ½"/>
+ <check_box initial_value="true" label="å´é‚Šæ¬„" name="appearance_sidebar_positioning" tool_tip="使用開啟å´é‚Šæ¬„時自動調整æ”影機ä½ç½®åŠŸèƒ½"/>
<check_box label="將我顯示於第一人稱視角中" name="first_person_avatar_visible"/>
<text name=" Mouse Sensitivity">
- Mouselook mouse sensitivity:
+ 第一人稱視角滑鼠æ•æ„Ÿåº¦ï¼š
</text>
<check_box label="å轉" name="invert_mouse"/>
<check_box label="總是使用方å‘éµç§»å‹•" name="arrow_keys_move_avatar_check"/>
- <check_box label="Tap-tap-hold to run" name="tap_tap_hold_to_run"/>
+ <check_box label="連點按ä½å¾Œè·‘æ­¥" name="tap_tap_hold_to_run"/>
<check_box label="雙擊以D:" name="double_click_chkbox"/>
<radio_group name="double_click_action">
<radio_item label="瞬間傳é€" name="radio_teleport"/>
- <radio_item label="Auto-pilot" name="radio_autopilot"/>
+ <radio_item label="自動導航駕駛" name="radio_autopilot"/>
</radio_group>
<button label="其他設備" name="joystick_setup_button"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
index 89a1a48abf..bd6d465572 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
@@ -8,8 +8,8 @@
(ä½ç½®ã€åœ–åƒã€ç¶²é ã€æœå°‹çš„æ­·å²ç´€éŒ„)
</text>
<check_box label="將我顯示在æœå°‹çš„çµæžœä¸­" name="online_searchresults"/>
- <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¤¾åœ˜çŸ¥é“我在線上" name="online_visibility"/>
- <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¤¾åœ˜å¯ä»¥ IM 或與我通話。" name="voice_call_friends_only_check"/>
+ <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¾¤çµ„知é“我在線上" name="online_visibility"/>
+ <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¾¤çµ„å¯ä»¥ IM 或與我通話。" name="voice_call_friends_only_check"/>
<check_box label="當通話çµæŸæ™‚關閉麥克風" name="auto_disengage_mic_check"/>
<check_box label="登入時顯示我最愛的地標ä½ç½®ï¼ˆç¶“ç”± &apos;開始於&apos; 的下拉å¼é¸å–®ï¼‰" name="favorites_on_login_check"/>
<text name="Logs:">
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
index e7a934c5cc..efefb92df6 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
@@ -21,7 +21,7 @@
å¿«å–ä½ç½®ï¼š
</text>
<button label="ç€è¦½" label_selected="ç€è¦½" name="set_cache"/>
- <button label="é‡è¨­" label_selected="é‡è¨­" name="reset_cache"/>
+ <button label="" label_selected="é‡è¨­" name="reset_cache"/>
<text name="Web:">
網é ï¼š
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
index 305d1e2ac9..3280b9357b 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
@@ -9,7 +9,7 @@
最å°åŒ–時éœéŸ³
</text>
<slider label="按éµéŸ³" name="UI Volume"/>
- <slider label="Ambient" name="Wind Volume"/>
+ <slider label="環境音" name="Wind Volume"/>
<slider label="音效" name="SFX Volume"/>
<slider label="串æµéŸ³æ¨‚" name="Music Volume"/>
<check_box label="已啟用" name="enable_music"/>
@@ -33,7 +33,7 @@
<check_box label="Toggle speak on/off when I press:" name="push_to_talk_toggle_check" tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
<line_editor label="Push-to-Speak trigger" name="modifier_combo"/>
<button label="設定按éµ" name="set_voice_hotkey_button"/>
- <button name="set_voice_middlemouse_button" tool_tip="Reset to Middle Mouse Button"/>
+ <button name="set_voice_middlemouse_button" tool_tip="é‡è¨­æ»‘鼠中éµæŒ‰éˆ•"/>
<button label="輸入 / 輸出設備" name="device_settings_btn"/>
<panel label="設備設定" name="device_settings_panel">
<panel.string name="default_text">
diff --git a/indra/newview/skins/default/xui/zh/panel_profile.xml b/indra/newview/skins/default/xui/zh/panel_profile.xml
index fcf7bb64db..502449ac3a 100644
--- a/indra/newview/skins/default/xui/zh/panel_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_profile.xml
@@ -36,9 +36,9 @@
<text name="title_acc_status_text" value="帳戶狀態:"/>
<text name="title_partner_text" value="é…å¶ï¼š"/>
<panel name="partner_data_panel">
- <text initial_value="(retrieving)" name="partner_text"/>
+ <text initial_value="(檢索中)" name="partner_text"/>
</panel>
- <text name="title_groups_text" value="社團:"/>
+ <text name="title_groups_text" value="群組:"/>
</panel>
</scroll_container>
</layout_panel>
@@ -47,7 +47,7 @@
<layout_panel name="profile_buttons_panel">
<layout_stack name="bottom_bar_ls">
<layout_panel name="add_friend_btn_lp">
- <button label="加為朋å‹" name="add_friend" tool_tip="Offer friendship to the Resident"/>
+ <button label="加為朋å‹" name="add_friend" tool_tip="發出交å‹é‚€è«‹çµ¦é€™å±…æ°‘"/>
</layout_panel>
<layout_panel name="im_btn_lp">
<button label="IM" name="im" tool_tip="é–‹å•Ÿå³æ™‚訊æ¯æœƒè©±"/>
@@ -56,7 +56,7 @@
<button label="通話" name="call" tool_tip="與這ä½å±…民通話"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="瞬間傳é€" name="teleport" tool_tip="Offer teleport"/>
+ <button label="瞬間傳é€" name="teleport" tool_tip="發給瞬間傳é€è«‹æ±‚"/>
</layout_panel>
<layout_panel name="overflow_btn_lp">
<menu_button label="â–¼" name="overflow_btn" tool_tip="支付金錢,或分享收ç´å€çµ¦å±…æ°‘"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
index 315bc0ac8e..ad94c4c7e9 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
@@ -36,7 +36,7 @@
<text_editor name="covenant_editor">
There is no Covenant provided for this Estate.
</text_editor>
- <button label="Reset" name="reset_covenant"/>
+ <button label="é‡è¨­" name="reset_covenant"/>
<text name="covenant_help_text">
Changes to the covenant will show on all parcels in the estate.
</text>
@@ -62,7 +62,7 @@
分級:
</text>
<text name="region_maturity_text">
- æˆäºº
+ 完全æˆäºº
</text>
<text name="resellable_lbl">
轉售:
diff --git a/indra/newview/skins/default/xui/zh/panel_region_debug.xml b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
index 1ffbcbf8fd..ed5e6e9d2c 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
@@ -7,8 +7,8 @@
未知
</text>
<check_box label="關閉腳本" name="disable_scripts_check" tool_tip="關閉這個地å€ç¾åœ¨çš„全部腳本"/>
- <check_box label="Disable Collisions" name="disable_collisions_check" tool_tip="Disable non-avatar collisions in this region"/>
- <check_box label="Disable Physics" name="disable_physics_check" tool_tip="Disable all physics in this region"/>
+ <check_box label="關閉碰撞" name="disable_collisions_check" tool_tip="關閉這個地å€ç¾åœ¨çš„éžåŒ–身碰撞"/>
+ <check_box label="關閉物ç†" name="disable_physics_check" tool_tip="關閉這個地å€ç¾åœ¨çš„全部物ç†"/>
<button label="套用" name="apply_btn"/>
<text name="objret_text_lbl">
物件退回
@@ -23,12 +23,12 @@
<text name="options_text_lbl">
é¸é …:
</text>
- <check_box label="With scripts" name="return_scripts" tool_tip="åªé€€å›žR包å«è…³æœ¬çš„物件"/>
- <check_box label="On someone else&apos;s land" name="return_other_land" tool_tip="Return only objects which are on land belonging to someone else"/>
- <check_box label="In every region of this estate" name="return_estate_wide" tool_tip="Return objects in all of the regions that make up this estate"/>
+ <check_box label="包å«æœ‰è…³æœ¬" name="return_scripts" tool_tip="åªé€€å›žåŒ…å«è…³æœ¬çš„物件"/>
+ <check_box label="ä½æ–¼å…¶ä»–人土地上" name="return_other_land" tool_tip="åªé€€å›žç‰©ä»¶åœ¨å±¬æ–¼æŸå€‹å…¶ä»–人土地上的物件"/>
+ <check_box label="於這個領地內的æ¯ä¸€å€‹åœ°å€" name="return_estate_wide" tool_tip="退回這個領地內全部地å€ä¸­æ¨™è¨˜ç‚ºä»–的物件"/>
<button label="退回" name="return_btn"/>
- <button label="Get Top Colliders..." name="top_colliders_btn" tool_tip="List of objects experiencing the most potential collisions"/>
- <button label="Get Top Scripts..." name="top_scripts_btn" tool_tip="List of objects spending the most time running scripts"/>
+ <button label="å–得最常碰撞的物件..." name="top_colliders_btn" tool_tip="æ¢åˆ—出目å‰é‹ä½œä¸­æœ€å¸¸ç¢°æ’žçš„物件清單"/>
+ <button label="å–得最耗能腳本..." name="top_scripts_btn" tool_tip="æ¢åˆ—出目å‰é‹ä½œä¸­æœ€è€—能的腳本清單"/>
<button label="地å€é‡æ–°å•Ÿå‹•" name="restart_btn" tool_tip="給予兩分é˜å€’數計時並é‡æ–°å•Ÿå‹•"/>
<button label="延é²é‡æ–°å•Ÿå‹•" name="cancel_restart_btn" tool_tip="延é²åœ°å€é‡æ–°å•Ÿå‹•ä¸€å°æ™‚"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_estate.xml b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
index 1f1676167b..efa3be2f51 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="領地" name="Estate">
<text name="estate_help_text">
- Changes to settings on this tab will affect all regions in the estate.
+ 變更此夜籤中的設定會影響這個領地內的全部地å€è¨­å®šã€‚
</text>
<text name="estate_text">
領地:
@@ -16,9 +16,9 @@
(未知)
</text>
<check_box label="Use Global Time" name="use_global_time_check"/>
- <check_box label="Fixed Sun" name="fixed_sun_check"/>
+ <check_box label="固定太陽" name="fixed_sun_check"/>
<slider label="Phase" name="sun_hour_slider"/>
- <check_box label="Allow Public Access" name="externally_visible_check"/>
+ <check_box label="å…許公開出入" name="externally_visible_check"/>
<text name="Only Allow">
Restrict Access to accounts verified by:
</text>
@@ -40,7 +40,7 @@
<button label="移除..." name="remove_allowed_avatar_btn"/>
<button label="添加..." name="add_allowed_avatar_btn"/>
<text name="allow_group_label">
- å…許的社團:
+ å…許的群組:
</text>
<button label="移除..." name="remove_allowed_group_btn"/>
<button label="添加..." name="add_allowed_group_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_general.xml b/indra/newview/skins/default/xui/zh/panel_region_general.xml
index dce75c997d..38fde494aa 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_general.xml
@@ -18,10 +18,10 @@
<text name="region_type">
未知
</text>
- <check_box label="Block Terraform" name="block_terraform_check"/>
- <check_box label="Block Fly" name="block_fly_check"/>
- <check_box label="Allow Damage" name="allow_damage_check"/>
- <check_box label="Restrict Pushing" name="restrict_pushobject"/>
+ <check_box label="阻止變形" name="block_terraform_check"/>
+ <check_box label="阻止飛行" name="block_fly_check"/>
+ <check_box label="å…許傷害" name="allow_damage_check"/>
+ <check_box label="é™åˆ¶æŽ¨æ’ž" name="restrict_pushobject"/>
<check_box label="å…許土地轉售" name="allow_land_resell_check"/>
<check_box label="å…許土地 åˆä½µ/分割" name="allow_parcel_changes_check"/>
<check_box label="阻擋土地顯示於æœå°‹ä¸­" name="block_parcel_search_check" tool_tip="Let people see this region and its parcels in search results"/>
@@ -30,13 +30,13 @@
<text label="Maturity" name="access_text">
分級:
</text>
- <icons_combo_box label="Moderate" name="access_combo">
- <icons_combo_box.item label="æˆäºº" name="Adult" value="42"/>
- <icons_combo_box.item label="Moderate" name="Mature" value="21"/>
- <icons_combo_box.item label="一般" name="PG" value="13"/>
+ <icons_combo_box label="é©åº¦æˆäºº" name="access_combo">
+ <icons_combo_box.item label="完全æˆäºº" name="Adult" value="42"/>
+ <icons_combo_box.item label="é©åº¦æˆäºº" name="Mature" value="21"/>
+ <icons_combo_box.item label="一般普級" name="PG" value="13"/>
</icons_combo_box>
<button label="套用" name="apply_btn"/>
- <button label="強制瞬間傳é€ä¸€ä½å±…民回家..." name="kick_btn"/>
+ <button label="強制瞬間傳é€ä¸€å€‹å±…民回家..." name="kick_btn"/>
<button label="強制瞬間傳é€æ‰€æœ‰å±…民回家..." name="kick_all_btn"/>
<button label="é€å‡ºè¨Šæ¯åˆ°åœ°å€..." name="im_btn"/>
<button label="管ç†çž¬é–“傳é€ä¸­å¿ƒ..." name="manage_telehub_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
index e42d904f32..1dc7c1e089 100644
--- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
@@ -4,10 +4,10 @@
載入中...
</panel.string>
<panel.string name="can_not_view">
- You can not view or edit this script, since it has been set as &quot;no copy&quot;. You need full permissions to view or edit a script inside an object.
+ ä½ ä¸å¯Ÿçœ‹æˆ–編輯此腳本,自從它被設定為 &quot;no copy&quot; 後。你需è¦å®Œæ•´æ¬Šé™åŽ»å¯Ÿçœ‹æˆ–編輯有包å«è…³æœ¬åœ¨å…§çš„物件。
</panel.string>
<panel.string name="public_objects_can_not_run">
- Public Objects cannot run scripts
+ 公開物件ä¸èƒ½åŸ·è¡Œè…³æœ¬
</panel.string>
<panel.string name="script_running">
執行中
@@ -16,7 +16,7 @@
腳本:[NAME]
</panel.string>
<panel.string name="external_editor_not_set">
- Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting.
+ 由環境變數設定 LL_SCRIPT_EDITOR 或是 ExternalEditor 設定來é¸æ“‡ä¸€å€‹ç·¨è¼¯å™¨ã€‚
</panel.string>
<menu_bar name="script_menu">
<menu label="檔案" name="File">
diff --git a/indra/newview/skins/default/xui/zh/panel_side_tray.xml b/indra/newview/skins/default/xui/zh/panel_side_tray.xml
index 625213e376..b706f1839a 100644
--- a/indra/newview/skins/default/xui/zh/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_side_tray.xml
@@ -13,7 +13,7 @@
</sidetray_tab>
<sidetray_tab description="Find your friends, contacts and people nearby." name="sidebar_people" tab_title="People">
<panel_container name="panel_container">
- <panel label="社團檔案" name="panel_group_info_sidetray"/>
+ <panel label="群組檔案" name="panel_group_info_sidetray"/>
<panel label="Blocked Residents &amp; Objects" name="panel_block_list_sidetray"/>
</panel_container>
</sidetray_tab>
diff --git a/indra/newview/skins/default/xui/zh/panel_status_bar.xml b/indra/newview/skins/default/xui/zh/panel_status_bar.xml
index 9a59d627d0..808e14f3c3 100644
--- a/indra/newview/skins/default/xui/zh/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/zh/panel_status_bar.xml
@@ -16,12 +16,12 @@
L$ [AMT]
</panel.string>
<panel name="balance_bg">
- <text name="balance" tool_tip="Click to refresh your L$ balance" value="L$20"/>
+ <text name="balance" tool_tip="點擊以é‡æ–°æ›´æ–°ä½ çš„ L$ 帳戶餘é¡" value="L$20"/>
<button label="購買 L$" name="buyL" tool_tip="點擊以購買更多 L$"/>
</panel>
<text name="TimeText" tool_tip="ç›®å‰æ™‚å€ï¼ˆå¤ªå¹³æ´‹ï¼‰">
24:00 AM PST
</text>
<button name="media_toggle_btn" tool_tip="開始 / åœæ­¢å…¨éƒ¨åª’體(音樂ã€å½±ç‰‡ã€ç¶²é ï¼‰"/>
- <button name="volume_btn" tool_tip="Global Volume Control"/>
+ <button name="volume_btn" tool_tip="全域音é‡æŽ§åˆ¶"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_world_map.xml b/indra/newview/skins/default/xui/zh/panel_world_map.xml
index ad28361a7f..b5aa659bf0 100644
--- a/indra/newview/skins/default/xui/zh/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/zh/panel_world_map.xml
@@ -4,7 +4,7 @@
載入中...
</panel.string>
<panel.string name="InvalidLocation">
- Invalid Location
+ 無效的ä½ç½®
</panel.string>
<panel.string name="world_map_north">
N
diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml
index 534c0f39fc..d5c3096b22 100644
--- a/indra/newview/skins/default/xui/zh/role_actions.xml
+++ b/indra/newview/skins/default/xui/zh/role_actions.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
<action_set description="These Abilities include powers to add and remove group Members, and allow new Members to join without an invitation." name="Membership">
- <action description="Invite People to this Group" longdescription="Invite People to this Group using the &apos;Invite&apos; button in the Roles section &gt; Members tab." name="member invite" value="1"/>
- <action description="將會員由這個社團中踢出" longdescription="Eject Members from this Group using the &apos;Eject&apos; button in the Roles section &gt; Members tab. An Owner can eject anyone except another Owner. If you&apos;re not an Owner, a Member can be ejected from a group if, and only if, they&apos;re only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the &apos;Remove Members from Roles&apos; Ability." name="member eject" value="2"/>
+ <action description="邀請他人加入這個群組" longdescription="邀請他人加入這個群組,請按下於角色å€æ®µä¸­çš„æˆå“¡é ç±¤ä¸­çš„ &apos;邀請&apos; 按鈕。" name="member invite" value="1"/>
+ <action description="將會員由這個群組中踢出" longdescription="Eject Members from this Group using the &apos;Eject&apos; button in the Roles section &gt; Members tab. An Owner can eject anyone except another Owner. If you&apos;re not an Owner, a Member can be ejected from a group if, and only if, they&apos;re only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the &apos;Remove Members from Roles&apos; Ability." name="member eject" value="2"/>
<action description="Toggle &apos;Open Enrollment&apos; and change &apos;Enrollment fee&apos;" longdescription="Toggle &apos;Open Enrollment&apos; to let new Members join without an invitation, and change the &apos;Enrollment fee&apos; in the General section." name="member options" value="3"/>
</action_set>
<action_set description="These Abilities include powers to add, remove, and change group Roles, add and remove Members in Roles, and assign Abilities to Roles." name="Roles">
- <action description="Create new Roles" longdescription="Create new Roles in the Roles section &gt; Roles tab." name="role create" value="4"/>
+ <action description="創立一個新角色" longdescription="創立一個新角色於角色å€æ®µ &gt; 角色é ç±¤ã€‚" name="role create" value="4"/>
<action description="刪除角色" longdescription="Delete Roles in the Roles section &gt; Roles tab." name="role delete" value="5"/>
<action description="Change Role names, titles, descriptions, and whether Role members are publicly revealed" longdescription="Change Role names, titles, descriptions, and whether Role members are publicly revealed. This is done at the bottom of the the Roles section &gt; Roles tab after selecting a Role." name="role properties" value="6"/>
<action description="Assign Members to Assigner&apos;s Roles" longdescription="Assign Members to Roles in the list of Assigned Roles (Roles section &gt; Members tab). A Member with this Ability can only add Members to a Role that the assigner is already in." name="role assign member limited" value="7"/>
@@ -50,7 +50,7 @@
<action_set description="These Abilities include powers to allow members to return objects and place and move Linden plants. This is useful for Members to clean up litter and do landscaping, but it should also be used with care, because there&apos;s no undo for returning objects." name="Parcel Content">
<action description="Return objects owned by group" longdescription="Return objects on group-owned parcels that are owned by the group in About Land &gt; Objects tab." name="land return group owned" value="48"/>
<action description="Return objects set to group" longdescription="Return objects on group-owned parcels that are set to the group in About Land &gt; Objects tab." name="land return group set" value="33"/>
- <action description="Return non-group objects" longdescription="Return objects on group-owned parcels that are non-group in About Land &gt; Objects tab." name="land return non group" value="34"/>
+ <action description="退回éžç¾¤çµ„物件" longdescription="Return objects on group-owned parcels that are non-group in About Land &gt; Objects tab." name="land return non group" value="34"/>
<action description="Landscaping using Linden plants" longdescription="Landscaping ability to place and move Linden trees, plants, and grasses. These items can be found in your inventory&apos;s Library &gt; Objects folder, or they can be created via the Build menu." name="land gardening" value="35"/>
</action_set>
<action_set description="These Abilities include powers to deed, modify, and sell group-owned objects. These changes are done in the Build Tools &gt; General tab. Right-click an object and Edit to see its settings." name="Object Management">
@@ -66,8 +66,8 @@
<action description="接收通知與察看éŽåŽ»é€šçŸ¥" longdescription="Members in a Role with this Ability can receive Notices and view past Notices in Group &gt; Notices section." name="notices receive" value="43"/>
</action_set>
<action_set description="These Abilities include powers to allow or restrict access to group chat sessions and group voice chat." name="Chat">
- <action description="Join Group Chat" longdescription="Members in a Role with this Ability can join group chat sessions, for text and voice." name="join group chat" value="16"/>
- <action description="Join Group Voice Chat" longdescription="Members in a Role with this Ability can join group voice chat sessions. NOTE: The Join Group Chat ability is required to access the voice chat session." name="join voice chat" value="27"/>
- <action description="Moderate Group Chat" longdescription="Members in a Role with this Ability can control access and participation in group voice and text chat sessions." name="moderate group chat" value="37"/>
+ <action description="加入群組èŠå¤©" longdescription="Members in a Role with this Ability can join group chat sessions, for text and voice." name="join group chat" value="16"/>
+ <action description="加入群組語音èŠå¤©" longdescription="Members in a Role with this Ability can join group voice chat sessions. NOTE: The Join Group Chat ability is required to access the voice chat session." name="join voice chat" value="27"/>
+ <action description="é©åº¦æˆäººå…§å®¹çš„群組èŠå¤©" longdescription="Members in a Role with this Ability can control access and participation in group voice and text chat sessions." name="moderate group chat" value="37"/>
</action_set>
</role_actions>
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
index f28638d93d..adc815fb4b 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
@@ -52,7 +52,7 @@
</text>
<check_box label="覆製" name="CheckEveryoneCopy"/>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="CheckShareWithGroup" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/>
<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
index f308f2d4d0..5aad4568bd 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
@@ -7,19 +7,19 @@
Deed
</panel.string>
<panel.string name="text modify info 1">
- You can modify this object
+ ä½ å¯ä»¥ä¿®æ”¹é€™å€‹ç‰©ä»¶
</panel.string>
<panel.string name="text modify info 2">
- You can modify these objects
+ ä½ å¯ä»¥ä¿®æ”¹é€™äº›ç‰©ä»¶
</panel.string>
<panel.string name="text modify info 3">
- You can&apos;t modify this object
+ ä½ ä¸å¯ä»¥ä¿®æ”¹é€™å€‹ç‰©ä»¶
</panel.string>
<panel.string name="text modify info 4">
- You can&apos;t modify these objects
+ ä½ ä¸å¯ä»¥ä¿®æ”¹é€™äº›ç‰©ä»¶
</panel.string>
<panel.string name="text modify warning">
- This object has linked parts
+ 這個物件有è¯çµåˆ°å…¶ä»–部分
</panel.string>
<panel.string name="Cost Default">
價格: L$
@@ -28,13 +28,13 @@
總價: L$
</panel.string>
<panel.string name="Cost Per Unit">
- Price Per: L$
+ 單價: L$
</panel.string>
<panel.string name="Cost Mixed">
- Mixed Price
+ æ··åˆåƒ¹æ ¼
</panel.string>
<panel.string name="Sale Mixed">
- Mixed Sale
+ æ··åˆéŠ·å”®
</panel.string>
<text name="title" value="物件檔案"/>
<text name="where" value="(Inworld)"/>
@@ -52,9 +52,9 @@
æ“有者:
</text>
<text name="Group_label">
- 社團:
+ 群組:
</text>
- <button name="button set group" tool_tip="Choose a group to share this object&apos;s permissions"/>
+ <button name="button set group" tool_tip="é¸æ“‡ä¸€å€‹ç¾¤çµ„以分享這個物件的權é™"/>
<name_box initial_value="載入中..." name="Group Name Proxy"/>
<button label="Deed" label_selected="Deed" name="button deed" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."/>
<text name="label click action">
@@ -77,7 +77,7 @@
<check_box label="覆製" name="checkbox allow everyone copy"/>
<check_box label="移動" name="checkbox allow everyone move"/>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/>
<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 986ab82523..0949e61fa1 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -38,25 +38,25 @@
回存中...
</string>
<string name="ProgressChangingResolution">
- Changing Resolution...
+ 變更解æžåº¦...
</string>
<string name="Fullbright">
- Fullbright (Legacy)
+ 全亮(舊版)
</string>
<string name="LoginInProgress">
- Logging in. [APP_NAME] may appear frozen. Please wait.
+ 登入中。[APP_NAME] å¯èƒ½å‡ºç¾å‡çµç‹€æ…‹ã€‚è«‹è€å¿ƒç¨ç­‰ã€‚
</string>
<string name="LoginInProgressNoFrozen">
- Logging in...
+ 登入中...
</string>
<string name="LoginAuthenticating">
- Authenticating
+ 身份驗證中
</string>
<string name="LoginMaintenance">
- Performing account maintenance...
+ 進行帳戶維護...
</string>
<string name="LoginAttempt">
- Previous login attempt failed. Logging in, attempt [NUMBER]
+ å…ˆå‰ä¼åœ–嘗試登入失敗。ç¾ç™»å…¥ä¸­ï¼Œå˜—試 [NUMBER]
</string>
<string name="LoginPrecaching">
世界載入中...
@@ -101,7 +101,7 @@
æœè£ä¸‹è¼‰ä¸­...
</string>
<string name="InvalidCertificate">
- The server returned an invalid or corrupt certificate. Please contact the Grid administrator.
+ 伺æœå™¨å›žå‚³ä¸€å€‹ç„¡æ•ˆæžœæ壞的憑證。請連繫網格管ç†è€…。
</string>
<string name="CertInvalidHostname">
An invalid hostname was used to access the server, please check your SLURL or Grid hostname.
@@ -146,7 +146,7 @@
你已經被所在的地å€ä¸­æ–·è¯çµã€‚
</string>
<string name="SentToInvalidRegion">
- You were sent to an invalid region.
+ 你被傳é€åˆ°ä¸€å€‹ç„¡æ•ˆçš„地å€ã€‚
</string>
<string name="TestingDisconnect">
測試ç€è¦½å™¨æ–·ç·š
@@ -155,28 +155,28 @@
人
</string>
<string name="TooltipNoName">
- (no name)
+ (無å稱)
</string>
<string name="TooltipOwner">
æ“有者:
</string>
<string name="TooltipPublic">
- Public
+ 公開
</string>
<string name="TooltipIsGroup">
- (社團)
+ (群組)
</string>
<string name="TooltipForSaleL$">
出售: L$[AMOUNT]
</string>
<string name="TooltipFlagGroupBuild">
- Group Build
+ 群組建造
</string>
<string name="TooltipFlagNoBuild">
ç¦æ­¢å»ºé€ 
</string>
<string name="TooltipFlagNoEdit">
- 社團建造
+ 群組建造
</string>
<string name="TooltipFlagNotSafe">
éžå®‰å…¨
@@ -185,7 +185,7 @@
ç¦æ­¢é£›è¡Œ
</string>
<string name="TooltipFlagGroupScripts">
- 社團腳本
+ 群組腳本
</string>
<string name="TooltipFlagNoScripts">
ç¦æ­¢è…³æœ¬
@@ -210,10 +210,10 @@
瞭解更多有關這個居民
</string>
<string name="TooltipAgentMute">
- Click to mute this Resident
+ 點擊以å°éŽ–這ä½å±…æ°‘
</string>
<string name="TooltipAgentUnmute">
- Click to unmute this Resident
+ 點擊以解除å°éŽ–這ä½å±…æ°‘
</string>
<string name="TooltipAgentIM">
點擊開始 IM 這ä½å±…æ°‘
@@ -222,47 +222,47 @@
點擊以支付這ä½å±…æ°‘
</string>
<string name="TooltipAgentOfferTeleport">
- Click to offer a teleport request to this Resident
+ 點擊以é€å‡ºçž¬é–“傳é€é‚€è«‹çµ¦é€™ä½å±…æ°‘
</string>
<string name="TooltipAgentRequestFriend">
- Click to send a friend request to this Resident
+ 點擊以é€å‡ºäº¤å‹é‚€è«‹çµ¦é€™ä½å±…æ°‘
</string>
<string name="TooltipGroupUrl">
- Click to view this group&apos;s description
+ 點擊以察看這個群組的æè¿°
</string>
<string name="TooltipEventUrl">
- Click to view this event&apos;s description
+ 點擊以察看這個活動的æè¿°
</string>
<string name="TooltipClassifiedUrl">
Click to view this classified
</string>
<string name="TooltipParcelUrl">
- Click to view this parcel&apos;s description
+ 點擊以察看這個地段的æè¿°
</string>
<string name="TooltipTeleportUrl">
- Click to teleport to this location
+ 點擊以傳é€åˆ°é€™å€‹ä½ç½®
</string>
<string name="TooltipObjectIMUrl">
- Click to view this object&apos;s description
+ 點擊以察看這個物件的æè¿°
</string>
<string name="TooltipMapUrl">
- Click to view this location on a map
+ 點擊以察看此處在地圖上的ä½ç½®
</string>
<string name="TooltipSLAPP">
- Click to run the secondlife:// command
+ 點擊以執行 secondlife:// 指令
</string>
- <string name="CurrentURL" value="CurrentURL: [CurrentURL]"/>
+ <string name="CurrentURL" value="ç›®å‰ç¶²å€ï¼š[CurrentURL]"/>
<string name="SLurlLabelTeleport">
瞬間傳é€åˆ°
</string>
<string name="SLurlLabelShowOnMap">
- Show Map for
+ 顯示地圖為了
</string>
<string name="SLappAgentMute">
- Mute
+ å°éŽ–
</string>
<string name="SLappAgentUnmute">
- Unmute
+ 解除å°éŽ–
</string>
<string name="SLappAgentIM">
IM
@@ -271,7 +271,7 @@
支付
</string>
<string name="SLappAgentOfferTeleport">
- Offer Teleport to
+ 發給瞬間傳é€è«‹æ±‚到
</string>
<string name="SLappAgentRequestFriend">
交å‹è¦æ±‚
@@ -295,7 +295,7 @@
脫下
</string>
<string name="BUTTON_DOCK">
- Dock
+ åœæ³Šå›ºå®š
</string>
<string name="BUTTON_HELP">
顯示幫助
@@ -307,22 +307,22 @@
未發ç¾ã€‚
</string>
<string name="RetrievingData">
- Retrieving...
+ 檢索...
</string>
<string name="ReleaseNotes">
- Release Notes
+ 釋出版本說明
</string>
<string name="LoadingData">
載入中...
</string>
<string name="AvatarNameNobody">
- (nobody)
+ (沒有人)
</string>
<string name="AvatarNameWaiting">
- (waiting)
+ (等待中)
</string>
<string name="AvatarNameMultiple">
- (multiple)
+ (多個)
</string>
<string name="GroupNameNone">
(無)
@@ -334,25 +334,25 @@
無錯誤
</string>
<string name="AssetErrorRequestFailed">
- Asset request: failed
+ 資產請求:失敗
</string>
<string name="AssetErrorNonexistentFile">
- Asset request: non-existent file
+ 資產è¦æ±‚:éžå·²å­˜åœ¨æª”案
</string>
<string name="AssetErrorNotInDatabase">
- Asset request: asset not found in database
+ 資產è¦æ±‚:資產並未發ç¾æ–¼è³‡æ–™åº«ä¸­
</string>
<string name="AssetErrorEOF">
- End of file
+ 檔案çµå°¾
</string>
<string name="AssetErrorCannotOpenFile">
- Cannot open file
+ 無法開啟檔案
</string>
<string name="AssetErrorFileNotFound">
- File not found
+ 檔案未發ç¾
</string>
<string name="AssetErrorTCPTimeout">
- File transfer timeout
+ 檔案傳輸逾時
</string>
<string name="AssetErrorCircuitGone">
Circuit gone
@@ -370,13 +370,13 @@
è²éŸ³
</string>
<string name="calling card">
- calling card
+ å片
</string>
<string name="landmark">
地標
</string>
<string name="legacy script">
- legacy script
+ 舊版腳本
</string>
<string name="clothing">
æœè£
@@ -427,16 +427,16 @@
姿勢
</string>
<string name="simstate">
- simstate
+ 模擬器狀態
</string>
<string name="favorite">
- favorite
+ 我的最愛
</string>
<string name="symbolic link">
- link
+ è¯çµ
</string>
<string name="symbolic folder link">
- folder link
+ 資料夾è¯çµ
</string>
<string name="AvatarEditingAppearance">
(外觀編輯中)
@@ -448,13 +448,13 @@
忙碌
</string>
<string name="AvatarMuted">
- Blocked
+ å°éŽ–çš„
</string>
<string name="anim_express_afraid">
- Afraid
+ 害怕
</string>
<string name="anim_express_anger">
- Angry
+ 生氣
</string>
<string name="anim_away">
Away
@@ -472,19 +472,19 @@
Blow Kiss
</string>
<string name="anim_express_bored">
- Bored
+ ç„¡èŠ
</string>
<string name="anim_bow">
Bow
</string>
<string name="anim_clap">
- Clap
+ æ‹æ‰‹
</string>
<string name="anim_courtbow">
Court Bow
</string>
<string name="anim_express_cry">
- Cry
+ å“­æ³£
</string>
<string name="anim_dance1">
Dance 1
@@ -541,19 +541,19 @@
Kiss My Butt
</string>
<string name="anim_express_kiss">
- Kiss
+ 親å»
</string>
<string name="anim_laugh_short">
- Laugh
+ 笑
</string>
<string name="anim_musclebeach">
Muscle Beach
</string>
<string name="anim_no_unhappy">
- No (Unhappy)
+ ä¸ï¼ˆä¸å¿«æ¨‚)
</string>
<string name="anim_no_head">
- No
+ ä¸
</string>
<string name="anim_nyanya">
Nya-nya-nya
@@ -598,10 +598,10 @@
Roundhouse Kick
</string>
<string name="anim_express_sad">
- Sad
+ 傷心
</string>
<string name="anim_salute">
- Salute
+ 敬禮
</string>
<string name="anim_shout">
Shout
@@ -610,7 +610,7 @@
Shrug
</string>
<string name="anim_express_smile">
- Smile
+ 微笑
</string>
<string name="anim_smoke_idle">
Smoke Idle
@@ -622,7 +622,7 @@
Smoke Throw Down
</string>
<string name="anim_express_surprise">
- Surprise
+ 驚喜
</string>
<string name="anim_sword_strike_r">
Sword Strike
@@ -637,22 +637,22 @@
Wave
</string>
<string name="anim_whisper">
- Whisper
+ 耳語
</string>
<string name="anim_whistle">
- Whistle
+ å¹å£å“¨
</string>
<string name="anim_express_wink">
- Wink
+ 眨眼
</string>
<string name="anim_wink_hollywood">
- Wink (Hollywood)
+ 眨眼(好èŠå¡¢ï¼‰
</string>
<string name="anim_express_worry">
- Worry
+ 擔心
</string>
<string name="anim_yes_happy">
- Yes (Happy)
+ 是(快樂)
</string>
<string name="anim_yes_head">
是
@@ -679,25 +679,25 @@
Can&apos;t find ROOT or JOINT.
</string>
<string name="whisper">
- whispers:
+ 低語:
</string>
<string name="shout">
- shouts:
+ å¶å–Šï¼š
</string>
<string name="ringing">
- Connecting to in-world Voice Chat...
+ è¯æŽ¥åˆ°è™›æ“¬ä¸–界的語音功能中...
</string>
<string name="connected">
- Connected
+ å·²è¯æŽ¥
</string>
<string name="unavailable">
- Voice not available at your current location
+ 語音èŠå¤©åŠŸèƒ½æ–¼ä½ ç›®å‰æ‰€åœ¨çš„ä½ç½®ç„¡æ³•ä½¿ç”¨
</string>
<string name="hang_up">
- Disconnected from in-world Voice Chat
+ 虛擬世界中的語音èŠå¤©ä¸­æ–·
</string>
<string name="reconnect_nearby">
- You will now be reconnected to Nearby Voice Chat
+ ç¾åœ¨ä½ å°‡é‡æ–°è¯æŽ¥åˆ°é™„近的語音èŠå¤©
</string>
<string name="ScriptQuestionCautionChatGranted">
&apos;[OBJECTNAME]&apos;, an object owned by &apos;[OWNERNAME]&apos;, located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS].
@@ -706,7 +706,7 @@
&apos;[OBJECTNAME]&apos;, an object owned by &apos;[OWNERNAME]&apos;, located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].
</string>
<string name="ScriptTakeMoney">
- Take Linden dollars (L$) from you
+ 由你身上拿走林登幣(L$)
</string>
<string name="ActOnControlInputs">
Act on your control inputs
@@ -730,25 +730,25 @@
Add and remove joints with other objects
</string>
<string name="ChangePermissions">
- Change its permissions
+ 變更它的權é™
</string>
<string name="TrackYourCamera">
- Track your camera
+ 追蹤你的æ”影機
</string>
<string name="ControlYourCamera">
- Control your camera
+ 控制你的æ”影機
</string>
<string name="NotConnected">
- Not Connected
+ 未è¯æŽ¥
</string>
<string name="SIM_ACCESS_PG">
- 一般
+ 一般普級
</string>
<string name="SIM_ACCESS_MATURE">
- Moderate
+ é©åº¦æˆäºº
</string>
<string name="SIM_ACCESS_ADULT">
- æˆäºº
+ 完全æˆäºº
</string>
<string name="SIM_ACCESS_DOWN">
離線
@@ -796,16 +796,16 @@
Bitmap 圖åƒ
</string>
<string name="avi_movie_file">
- AVI 影片檔案
+ AVI 視頻檔案
</string>
<string name="xaf_animation_file">
XAF Anim File
</string>
<string name="xml_file">
- XML File
+ XML 檔案
</string>
<string name="raw_file">
- RAW File
+ RAW 檔案
</string>
<string name="compressed_image_files">
壓縮的圖åƒ
@@ -868,13 +868,13 @@
裙å­
</string>
<string name="alpha">
- Alpha
+ åŠé€æ˜Ž
</string>
<string name="tattoo">
刺é’
</string>
<string name="physics">
- Physics
+ 身體物ç†
</string>
<string name="invalid">
無效
@@ -910,13 +910,13 @@
裙å­æœªç©¿
</string>
<string name="alpha_not_worn">
- Alpha not worn
+ åŠé€æ˜Žæœªç©¿
</string>
<string name="tattoo_not_worn">
刺é’未穿
</string>
<string name="physics_not_worn">
- Physics not worn
+ 身體物ç†æœªç©¿
</string>
<string name="invalid_not_worn">
無效
@@ -961,13 +961,13 @@
創造新裙å­
</string>
<string name="create_new_alpha">
- Create new alpha
+ 創造新åŠé€æ˜Ž
</string>
<string name="create_new_tattoo">
創造新刺é’
</string>
<string name="create_new_physics">
- Create new physics
+ 創造新身體物ç†
</string>
<string name="create_new_invalid">
無效
@@ -982,10 +982,10 @@
確定
</string>
<string name="GroupNotifyGroupNotice">
- 社團通知
+ 群組通知
</string>
<string name="GroupNotifyGroupNotices">
- 社團通知
+ 群組通知
</string>
<string name="GroupNotifySentBy">
é€å‡ºç”±
@@ -1012,34 +1012,34 @@
你有約 %d 通知
</string>
<string name="BodyPartsRightArm">
- Right Arm
+ å³è‡‚
</string>
<string name="BodyPartsHead">
頭部
</string>
<string name="BodyPartsLeftArm">
- Left Arm
+ 左臂
</string>
<string name="BodyPartsLeftLeg">
- Left Leg
+ 左腿
</string>
<string name="BodyPartsTorso">
軀幹
</string>
<string name="BodyPartsRightLeg">
- Right Leg
+ å³è…¿
</string>
<string name="GraphicsQualityLow">
- Low
+ 低
</string>
<string name="GraphicsQualityMid">
- Mid
+ 中
</string>
<string name="GraphicsQualityHigh">
- High
+ 高
</string>
<string name="LeaveMouselook">
- Press ESC to return to World View
+ 按下 ESC éµå›žå¾©åˆ°ä¸–界的視角
</string>
<string name="InventoryNoMatchingItems">
Didn&apos;t find what you&apos;re looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].
@@ -1053,19 +1053,19 @@
<string name="InventoryNoTexture">
You do not have a copy of this texture in your inventory
</string>
- <string name="no_transfer" value="(no transfer)"/>
- <string name="no_modify" value="(no modify)"/>
- <string name="no_copy" value="(no copy)"/>
- <string name="worn" value="(worn)"/>
- <string name="link" value="(link)"/>
- <string name="broken_link" value="(broken_link)"/>
+ <string name="no_transfer" value="(ç¦æ­¢è½‰è®“)"/>
+ <string name="no_modify" value="(ç¦æ­¢ä¿®æ”¹ï¼‰"/>
+ <string name="no_copy" value="(ç¦æ­¢è¤‡è£½ï¼‰"/>
+ <string name="worn" value="(已穿)"/>
+ <string name="link" value="(è¯çµï¼‰"/>
+ <string name="broken_link" value="(æ壞的è¯çµï¼‰"/>
<string name="LoadingContents">
內容載入中...
</string>
<string name="NoContents">
- No contents
+ 無內容
</string>
- <string name="WornOnAttachmentPoint" value="(worn on [ATTACHMENT_POINT])"/>
+ <string name="WornOnAttachmentPoint" value="(已穿 [ATTACHMENT_POINT])"/>
<string name="ActiveGesture" value="[GESLABEL] (active)"/>
<string name="PermYes">
是
@@ -1084,7 +1084,7 @@
<string name="ViewAllGestures" value="察看全部 &gt;&gt;"/>
<string name="GetMoreGestures" value="å–得更多 &gt;&gt;"/>
<string name="Animations" value="動作,"/>
- <string name="Calling Cards" value="Calling Cards,"/>
+ <string name="Calling Cards" value="å片,"/>
<string name="Clothing" value="æœè£,"/>
<string name="Gestures" value="姿勢,"/>
<string name="Landmarks" value="地標,"/>
@@ -1093,17 +1093,17 @@
<string name="Scripts" value="腳本,"/>
<string name="Sounds" value="è²éŸ³,"/>
<string name="Textures" value="æ質,"/>
- <string name="Snapshots" value="Snapshots,"/>
+ <string name="Snapshots" value="å¿«ç…§,"/>
<string name="No Filters" value="No"/>
<string name="Since Logoff" value="- 自上次登出"/>
<string name="InvFolder My Inventory">
我的收ç´å€
</string>
<string name="InvFolder My Favorites">
- My Favorites
+ 我的最愛
</string>
<string name="InvFolder Library">
- Library
+ 資æºåº«
</string>
<string name="InvFolder Textures">
æ質
@@ -1112,7 +1112,7 @@
è²éŸ³
</string>
<string name="InvFolder Calling Cards">
- Calling Cards
+ å片
</string>
<string name="InvFolder Landmarks">
地標
@@ -1151,7 +1151,7 @@
Lost And Found
</string>
<string name="InvFolder Uncompressed Sounds">
- Uncompressed Sounds
+ 無壓縮è²éŸ³
</string>
<string name="InvFolder Animations">
動作
@@ -1160,10 +1160,10 @@
姿勢
</string>
<string name="InvFolder Favorite">
- Favorites
+ 我的最愛
</string>
<string name="InvFolder favorite">
- Favorites
+ 我的最愛
</string>
<string name="InvFolder Current Outfit">
ç›®å‰è£æ‰®
@@ -1220,34 +1220,34 @@
Ctrl
</string>
<string name="Chest">
- Chest
+ 胸部
</string>
<string name="Skull">
- Skull
+ 頭顱
</string>
<string name="Left Shoulder">
- Left Shoulder
+ 左肩
</string>
<string name="Right Shoulder">
- Right Shoulder
+ å³è‚©
</string>
<string name="Left Hand">
- Left Hand
+ 左手
</string>
<string name="Right Hand">
- Right Hand
+ å³æ‰‹
</string>
<string name="Left Foot">
- Left Foot
+ 左腳
</string>
<string name="Right Foot">
- Right Foot
+ å³è…³
</string>
<string name="Spine">
- Spine
+ 脊椎
</string>
<string name="Pelvis">
- Pelvis
+ 骨盆
</string>
<string name="Mouth">
嘴
@@ -1271,46 +1271,46 @@
é¼»å­
</string>
<string name="R Upper Arm">
- R Upper Arm
+ å³ä¸Šè‡‚
</string>
<string name="R Forearm">
- R Forearm
+ å³å‰è‡‚
</string>
<string name="L Upper Arm">
- L Upper Arm
+ 左上臂
</string>
<string name="L Forearm">
- L Forearm
+ å·¦å‰è‡‚
</string>
<string name="Right Hip">
- Right Hip
+ å³è‡€
</string>
<string name="R Upper Leg">
- R Upper Leg
+ å³å¤§è…¿
</string>
<string name="R Lower Leg">
- R Lower Leg
+ å³å°è…¿
</string>
<string name="Left Hip">
- Left Hip
+ 左臀
</string>
<string name="L Upper Leg">
- L Upper Leg
+ 左大腿
</string>
<string name="L Lower Leg">
- L Lower Leg
+ å·¦å°è…¿
</string>
<string name="Stomach">
- Stomach
+ 腹肌
</string>
<string name="Left Pec">
- Left Pec
+ 左胸肌
</string>
<string name="Right Pec">
- Right Pec
+ å³èƒ¸è‚Œ
</string>
<string name="Invalid Attachment">
- Invalid Attachment Point
+ 無效的附件è¯æŽ¥é»ž
</string>
<string name="YearsMonthsOld">
[AGEYEARS] [AGEMONTHS] old
@@ -1328,7 +1328,7 @@
[AGEDAYS] old
</string>
<string name="TodayOld">
- 高日剛加入
+ 今日剛加入
</string>
<string name="AgeYearsA">
[COUNT] å¹´
@@ -1397,40 +1397,40 @@
No Payment Info On File
</string>
<string name="AgeVerified">
- Age-verified
+ 已年齡驗證
</string>
<string name="NotAgeVerified">
- Not Age-verified
+ 未年齡驗證
</string>
<string name="Center 2">
- Center 2
+ 中央 2
</string>
<string name="Top Right">
- Top Right
+ å³ä¸Š
</string>
<string name="Top">
- Top
+ 上方
</string>
<string name="Top Left">
- Top Left
+ 左上
</string>
<string name="Center">
- Center
+ 中央
</string>
<string name="Bottom Left">
- Bottom Left
+ 左下
</string>
<string name="Bottom">
- Bottom
+ 下方
</string>
<string name="Bottom Right">
- Bottom Right
+ å³ä¸‹
</string>
<string name="CompileQueueDownloadedCompiling">
- Downloaded, now compiling
+ 已下載,ç¾åœ¨é€²è¡Œç·¨è­¯ä¸­
</string>
<string name="CompileQueueScriptNotFound">
- Script not found on server.
+ 伺æœå™¨ä¸Šæœªç™¼ç¾è…³æœ¬ã€‚
</string>
<string name="CompileQueueProblemDownloading">
Problem downloading
@@ -1445,16 +1445,16 @@
Unknown failure to download
</string>
<string name="CompileQueueTitle">
- Recompilation Progress
+ é‡æ–°ç·¨è­¯é€²åº¦
</string>
<string name="CompileQueueStart">
- recompile
+ é‡æ–°ç·¨è­¯
</string>
<string name="ResetQueueTitle">
- Reset Progress
+ é‡è¨­é€²åº¦
</string>
<string name="ResetQueueStart">
- reset
+ é‡è¨­
</string>
<string name="RunQueueTitle">
設定執行中程åº
@@ -1481,19 +1481,19 @@
腳本(物件超出範åœï¼‰
</string>
<string name="GodToolsObjectOwnedBy">
- Object [OBJECT] owned by [OWNER]
+ 物件 [OBJECT] 為 [OWNER] 所æ“有
</string>
<string name="GroupsNone">
ç„¡
</string>
- <string name="Group" value="(社團)"/>
+ <string name="Group" value="(群組)"/>
<string name="Unknown">
(未知)
</string>
<string name="SummaryForTheWeek" value="Summary for this week, beginning on"/>
<string name="NextStipendDay" value="The next stipend day is"/>
<string name="GroupIndividualShare" value="Group Individual Share"/>
- <string name="GroupColumn" value="社團"/>
+ <string name="GroupColumn" value="群組"/>
<string name="Balance">
Balance
</string>
@@ -1534,7 +1534,7 @@
Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
- Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS])
+ å…許的群群組:([ALLOWEDGROUPS],最大 [MAXACCESS])
</string>
<string name="ScriptLimitsParcelScriptMemory">
地段腳本記憶體
@@ -1549,7 +1549,7 @@
Memory used: [COUNT] kb
</string>
<string name="ScriptLimitsParcelScriptURLs">
- Parcel Script URLs
+ 地段腳本 URLs
</string>
<string name="ScriptLimitsURLsUsed">
URLs used: [COUNT] out of [MAX]; [AVAILABLE] available
@@ -1561,7 +1561,7 @@
Error requesting information
</string>
<string name="ScriptLimitsRequestNoParcelSelected">
- No Parcel Selected
+ 無地段被é¸æ“‡
</string>
<string name="ScriptLimitsRequestWrongRegion">
Error: script information is only available in your current region
@@ -1576,46 +1576,46 @@
Sitting On
</string>
<string name="ATTACH_CHEST">
- Chest
+ 胸部
</string>
<string name="ATTACH_HEAD">
頭部
</string>
<string name="ATTACH_LSHOULDER">
- Left Shoulder
+ 左肩
</string>
<string name="ATTACH_RSHOULDER">
- Right Shoulder
+ å³è‚©
</string>
<string name="ATTACH_LHAND">
- Left Hand
+ 左手
</string>
<string name="ATTACH_RHAND">
- Right Hand
+ å³æ‰‹
</string>
<string name="ATTACH_LFOOT">
- Left Foot
+ 左腳
</string>
<string name="ATTACH_RFOOT">
- Right Foot
+ å³è…³
</string>
<string name="ATTACH_BACK">
- Back
+ 背部
</string>
<string name="ATTACH_PELVIS">
- Pelvis
+ 骨盆
</string>
<string name="ATTACH_MOUTH">
- Mouth
+ 嘴巴
</string>
<string name="ATTACH_CHIN">
下巴
</string>
<string name="ATTACH_LEAR">
- Left Ear
+ 左耳
</string>
<string name="ATTACH_REAR">
- Right Ear
+ å³è€³
</string>
<string name="ATTACH_LEYE">
左眼
@@ -1627,43 +1627,43 @@
é¼»å­
</string>
<string name="ATTACH_RUARM">
- Right Upper Arm
+ å³ä¸Šè‡‚
</string>
<string name="ATTACH_RLARM">
- Right Lower Arm
+ å³å‰è‡‚
</string>
<string name="ATTACH_LUARM">
- Left Upper Arm
+ 左上臂
</string>
<string name="ATTACH_LLARM">
- Left Lower Arm
+ å·¦å‰è‡‚
</string>
<string name="ATTACH_RHIP">
- Right Hip
+ å³è‡€
</string>
<string name="ATTACH_RULEG">
- Right Upper Leg
+ å³å¤§è…¿
</string>
<string name="ATTACH_RLLEG">
- Right Lower Leg
+ å³å°è…¿
</string>
<string name="ATTACH_LHIP">
- Left Hip
+ 左臀
</string>
<string name="ATTACH_LULEG">
- Left Upper Leg
+ 左大腿
</string>
<string name="ATTACH_LLLEG">
- Left Lower Leg
+ å·¦å°è…¿
</string>
<string name="ATTACH_BELLY">
- Belly
+ 腹部
</string>
<string name="ATTACH_RPEC">
- Right Pec
+ å³èƒ¸è‚Œ
</string>
<string name="ATTACH_LPEC">
- Left Pec
+ 左胸肌
</string>
<string name="ATTACH_HUD_CENTER_2">
HUD Center 2
@@ -1702,13 +1702,13 @@
[mthnum,datetime,slt]/[day,datetime,slt]
</string>
<string name="PanelContentsTooltip">
- Content of object
+ 物件的內容
</string>
<string name="PanelContentsNewScript">
- New Script
+ 新腳本
</string>
<string name="BusyModeResponseDefault">
- The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.
+ 你傳é€è¨Šæ¯çš„å±…æ°‘ç›®å‰è™•æ–¼å¿™ç¢Œæ¨¡å¼ä¸­ï¼Œé€™æ„味著他è¦æ±‚ä¸è¢«æ‰“擾。你所傳的訊æ¯ä»å°‡æœƒç•™å­˜ä¸¦é¡¯ç¤ºæ–¼ IM é¢æ¿ä¸Šä¾›ä»–ç¨å¾Œæ™‚查閱。
</string>
<string name="MuteByName">
(由å稱)
@@ -1720,22 +1720,22 @@
(物件)
</string>
<string name="MuteGroup">
- (社團)
+ (群組)
</string>
<string name="MuteExternal">
- (External)
+ (外部)
</string>
<string name="RegionNoCovenant">
- There is no Covenant provided for this Estate.
+ 此領地未æ供任何契約è¦æ±‚。
</string>
<string name="RegionNoCovenantOtherOwner">
There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.
</string>
- <string name="covenant_last_modified" value="Last Modified:"/>
+ <string name="covenant_last_modified" value="最後修改於:"/>
<string name="none_text" value="(無)"/>
<string name="never_text" value="(絕ä¸ï¼‰"/>
<string name="GroupOwned">
- 社團所æ“有
+ 群組所æ“有
</string>
<string name="Public">
公開
@@ -1744,7 +1744,7 @@
Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile
</string>
<string name="ClassifiedUpdateAfterPublish">
- (will update after publish)
+ (將於發布後自動更新)
</string>
<string name="NoPicksClassifiedsText">
You haven&apos;t created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.
@@ -1765,10 +1765,10 @@
An object named
</string>
<string name="InvOfferOwnedByGroup">
- owned by the group
+ 群組所æ“有
</string>
<string name="InvOfferOwnedByUnknownGroup">
- owned by an unknown group
+ 由一個未知的群組所æ“有
</string>
<string name="InvOfferOwnedBy">
owned by
@@ -1955,7 +1955,7 @@
Linden Location
</string>
<string name="Adult">
- æˆäºº
+ 完全æˆäºº
</string>
<string name="Arts&amp;Culture">
Arts &amp; Culture
@@ -2060,7 +2060,7 @@ If this message persists, restart your computer.
Would you like to send a crash report?
</string>
<string name="MBAlert">
- Notification
+ 通知
</string>
<string name="MBNoDirectX">
[APP_NAME] is unable to detect DirectX 9.0b or greater.
@@ -2069,7 +2069,7 @@ Would you like to send a crash report?
Do you wish to continue?
</string>
<string name="MBWarning">
- Warning
+ 警告
</string>
<string name="MBNoAutoUpdate">
Automatic updating is not yet implemented for Linux.
@@ -2079,7 +2079,7 @@ Please download the latest version from www.secondlife.com.
RegisterClass failed
</string>
<string name="MBError">
- Error
+ 錯誤
</string>
<string name="MBFullScreenErr">
Unable to run fullscreen at [WIDTH] x [HEIGHT].
@@ -3577,13 +3577,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Health
</string>
<string name="LocationCtrlAdultIconTooltip">
- æˆäººåœ°å€
+ 完全æˆäººåœ°å€
</string>
<string name="LocationCtrlModerateIconTooltip">
- Moderate Region
+ é©åº¦æˆäººåœ°å€
</string>
<string name="LocationCtrlGeneralIconTooltip">
- 一般地å€
+ 一般普級地å€
</string>
<string name="UpdaterWindowTitle">
[APP_NAME] æ›´æ–°
@@ -3640,10 +3640,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Your text chat has been disabled by a Group Moderator.
</string>
<string name="IM_default_text_label">
- Click here to instant message.
+ 點擊此處以傳é€å³æ™‚訊æ¯ã€‚
</string>
<string name="IM_to_label">
- To
+ 至
</string>
<string name="IM_moderator_label">
(Moderator)
@@ -3742,10 +3742,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Error while moderating.
</string>
<string name="removed">
- You have been removed from the group.
+ 你已經由群組中被移除。
</string>
<string name="removed_from_group">
- You have been removed from the group.
+ 你已經由群組中被移除。
</string>
<string name="close_on_no_ability">
You no longer have the ability to be in the chat session.
@@ -3793,10 +3793,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
for deeding land
</string>
<string name="to create a group">
- 以創造社團
+ 以創造群組
</string>
<string name="to join a group">
- 以加入社團
+ 以加入群組
</string>
<string name="to upload">
以上傳
@@ -3826,7 +3826,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Officers
</string>
<string name="group_role_owners">
- Owners
+ æ“有者
</string>
<string name="group_member_status_online">
上線
@@ -3876,16 +3876,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
新裙å­
</string>
<string name="New Alpha">
- New Alpha
+ æ–°åŠé€æ˜Ž
</string>
<string name="New Tattoo">
新刺é’
</string>
<string name="New Physics">
- New Physics
+ 新身體物ç†
</string>
<string name="Invalid Wearable">
- Invalid Wearable
+ 無效的å¯ç©¿è£æ‰®
</string>
<string name="New Gesture">
新姿勢
diff --git a/indra/newview/skins/default/xui/zh/teleport_strings.xml b/indra/newview/skins/default/xui/zh/teleport_strings.xml
index b18eb4a390..ffb4c903bb 100644
--- a/indra/newview/skins/default/xui/zh/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/zh/teleport_strings.xml
@@ -3,25 +3,25 @@
<message_set name="errors">
<message name="invalid_tport">
Problem encountered processing your teleport request. You may need to log back in before you can teleport.
-If you continue to get this message, please check the [SUPPORT_SITE].
+如果你æŒçºŒå¾—到此訊æ¯ï¼Œè«‹æŸ¥é–± [SUPPORT_SITE]。
</message>
<message name="invalid_region_handoff">
Problem encountered processing your region crossing. You may need to log back in before you can cross regions.
-If you continue to get this message, please check the [SUPPORT_SITE].
+如果你æŒçºŒå¾—到此訊æ¯ï¼Œè«‹æŸ¥é–± [SUPPORT_SITE]。
</message>
<message name="blocked_tport">
- Sorry, teleport is currently blocked. Try again in a moment.
-If you still cannot teleport, please log out and log back in to resolve the problem.
+ 抱歉,目å‰çž¬é–“傳é€å·²è¢«é˜»æ“‹ã€‚è«‹ç¨å¾Œå†è©¦ã€‚
+如果你ä»ç„¡æ³•é€²è¡Œçž¬é–“傳é€ï¼Œè«‹ç™»å‡ºå¾Œé‡æ–°å…¥ä¾†è§£æ±ºæ­¤ä¸€å•é¡Œã€‚
</message>
<message name="nolandmark_tport">
- Sorry, but system was unable to locate landmark destination.
+ 抱歉,ä¸éŽç³»çµ±ç„¡æ³•æ‰¾åˆ°åœ°æ¨™æ‰€åœ¨ç›®çš„地。
</message>
<message name="timeout_tport">
- Sorry, but system was unable to complete the teleport connection.
-Try again in a moment.
+ 抱歉,ä¸éŽç³»çµ±ç„¡æ³•å®Œæˆçž¬é–“傳é€çš„è¯æŽ¥ã€‚
+è«‹ç¨å¾Œå†è©¦ã€‚
</message>
<message name="noaccess_tport">
- Sorry, you do not have access to that teleport destination.
+ 抱歉,你並沒有權é™é€²å…¥è¦çž¬é–“傳é€çš„目的地。
</message>
<message name="missing_attach_tport">
Your attachments have not arrived yet. Try waiting for a few more seconds or log out and back in again before attempting to teleport.
@@ -47,7 +47,7 @@ Try again in a moment.
Sending to destination.
</message>
<message name="redirecting">
- Redirecting to different location.
+ é‡æ–°å°Žå‘至ä¸åŒä½ç½®ã€‚
</message>
<message name="relaying">
Relaying to destination.
diff --git a/indra/newview/skins/minimal/xui/da/notifications.xml b/indra/newview/skins/minimal/xui/da/notifications.xml
index e77eeee8df..3d003ea3b3 100644
--- a/indra/newview/skins/minimal/xui/da/notifications.xml
+++ b/indra/newview/skins/minimal/xui/da/notifications.xml
@@ -1327,7 +1327,7 @@ Prøv igen om lidt.
No valid parcel could be found.
</notification>
<notification name="ObjectGiveItem">
- Et objekt ved navn &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] tilbyder dig [ITEM_SLURL]. For at bruge denne genstand skal du skifte til avanceret tilstand, hvor du kan finde genstanden i din beholdning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes på login skærmbilledet.
+ Et objekt ved navn &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] tilbyder dig &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. For at bruge denne genstand skal du skifte til avanceret tilstand, hvor du kan finde genstanden i din beholdning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes på login skærmbilledet.
<form name="form">
<button name="Keep" text="Behold genstand"/>
<button name="Discard" text="Afvis genstand"/>
diff --git a/indra/newview/skins/minimal/xui/da/panel_people.xml b/indra/newview/skins/minimal/xui/da/panel_people.xml
index 49cd2c71f2..8be4d695bd 100644
--- a/indra/newview/skins/minimal/xui/da/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/da/panel_people.xml
@@ -66,16 +66,16 @@ Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor.
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Ã…ben session med privat besked (IM)"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Opkald" name="call_btn" tool_tip="Kald til denne beboer"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/de/notifications.xml b/indra/newview/skins/minimal/xui/de/notifications.xml
index 1eee1d1c9b..9abf8cdbb9 100644
--- a/indra/newview/skins/minimal/xui/de/notifications.xml
+++ b/indra/newview/skins/minimal/xui/de/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, bietet Ihnen [ITEM_SLURL] an. Zur Verwendung dieses Artikels müssen Sie in den erweiterten Modus umschalten, wo Sie den Artikel in Ihrem Inventar finden werden. Um in den erweiterten Modus umzuschalten, beenden Sie die Anwendung, starten Sie sie neu und ändern Sie die Moduseinstellung auf dem Anmeldebildschirm.
+ Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, bietet Ihnen &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; an. Zur Verwendung dieses Artikels müssen Sie in den erweiterten Modus umschalten, wo Sie den Artikel in Ihrem Inventar finden werden. Um in den erweiterten Modus umzuschalten, beenden Sie die Anwendung, starten Sie sie neu und ändern Sie die Moduseinstellung auf dem Anmeldebildschirm.
<form name="form">
<button name="Keep" text="Artikel behalten"/>
<button name="Discard" text="Artikel ablehnen"/>
diff --git a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
index 0ef2234fec..56c2310f2f 100644
--- a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Unbekannt"/>
<layout_stack name="button_stack">
<layout_panel name="view_profile_btn_panel">
<button label="Profil" name="view_profile_btn"/>
@@ -11,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Teilen" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Bezahlen" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Anrufen" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Anruf beenden" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Voice-Steuerung" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Ignorieren" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Freischalten" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Anrufvolumen" value="0,5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml
index 4f8f70ad17..1b6565eb73 100644
--- a/indra/newview/skins/minimal/xui/de/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/de/panel_people.xml
@@ -48,13 +48,13 @@
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="IM-Sitzung öffnen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
index cc551f7d58..477f210352 100644
--- a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
@@ -3,14 +3,13 @@
legacy_header_height="18"
can_resize="true"
can_minimize="false"
- height="360"
+ height="460"
layout="topleft"
min_height="360"
- left="645"
+ left="10000"
top="10"
- min_width="345"
+ min_width="335"
name="floater_help_browser"
- save_rect="true"
single_instance="true"
title="HOW TO"
width="335">
@@ -22,7 +21,7 @@
name="done_text">
</floater.string>
<layout_stack
- bottom="360"
+ bottom="460"
follows="left|right|top|bottom"
layout="topleft"
left="5"
@@ -38,7 +37,7 @@
user_resize="false"
width="325">
<web_browser
- trusted_content="true"
+ trusted_content="true"
bottom="-5"
follows="left|right|top|bottom"
layout="topleft"
diff --git a/indra/newview/skins/minimal/xui/en/floater_web_content.xml b/indra/newview/skins/minimal/xui/en/floater_web_content.xml
index 50cb5b14ce..1d9a967d5a 100644
--- a/indra/newview/skins/minimal/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/minimal/xui/en/floater_web_content.xml
@@ -17,6 +17,7 @@
follows="left|right|top|bottom"
layout="topleft"
left="5"
+ animate="false"
name="stack1"
orientation="vertical"
top="20"
@@ -155,14 +156,20 @@
name="external_controls"
top_delta="0"
user_resize="false"
+ auto_resize="true"
width="585">
<web_browser
- bottom="-22"
+ bottom="-2"
follows="all"
layout="topleft"
left="0"
name="webbrowser"
top="0"/>
+ </layout_panel>
+ <layout_panel name="status_bar"
+ height="23"
+ auto_resize="false"
+ user_resize="false">
<text
type="string"
length="200"
@@ -173,7 +180,7 @@
name="statusbartext"
parse_urls="false"
text_color="0.4 0.4 0.4 1"
- top_pad="5"
+ top_pad="3"
width="495"/>
<progress_bar
color_bar="0.3 1.0 0.3 1"
diff --git a/indra/newview/skins/minimal/xui/en/main_view.xml b/indra/newview/skins/minimal/xui/en/main_view.xml
index 6e8ad9adaf..0ce6cbc984 100644
--- a/indra/newview/skins/minimal/xui/en/main_view.xml
+++ b/indra/newview/skins/minimal/xui/en/main_view.xml
@@ -187,9 +187,9 @@
name="status_bar_container"
tab_stop="false"
height="30"
- left="-70"
+ left="-160"
top="0"
- width="70"
+ width="160"
visible="false"/>
<panel follows="top|bottom"
height="500"
diff --git a/indra/newview/skins/minimal/xui/en/notifications.xml b/indra/newview/skins/minimal/xui/en/notifications.xml
index 84da9472cc..7b7cdb5fc6 100644
--- a/indra/newview/skins/minimal/xui/en/notifications.xml
+++ b/indra/newview/skins/minimal/xui/en/notifications.xml
@@ -24,7 +24,7 @@
icon="notify.tga"
name="ObjectGiveItem"
type="offer">
- An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] is offering you [ITEM_SLURL]. Using this item requires you to switch to Advanced mode where you will find the item in your Inventory. To switch to Advanced mode, quit and restart this application and change the mode setting on the login screen.
+ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] is offering you &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Using this item requires you to switch to Advanced mode where you will find the item in your Inventory. To switch to Advanced mode, quit and restart this application and change the mode setting on the login screen.
<form name="form">
<button
index="0"
diff --git a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
index be13bc1bb7..2cb77bcdf3 100644
--- a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
@@ -23,102 +23,172 @@
orientation="vertical"
top_pad="5"
width="145">
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="20"
- layout="topleft"
- left="2"
- min_height="20"
- width="140"
- name="view_profile_btn_panel"
- top="0"
- user_resize="false">
- <button
- follows="left|top|right"
- height="23"
- label="Profile"
- name="view_profile_btn"
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="20"
+ layout="topleft"
+ left="2"
+ min_height="20"
+ width="140"
+ name="view_profile_btn_panel"
top="0"
- width="140" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="25"
- layout="topleft"
- min_height="25"
- width="140"
- name="add_friend_btn_panel"
- user_resize="false">
- <button
- follows="left|top|right"
- height="23"
- label="Add Friend"
- name="add_friend_btn"
- top="5"
- width="140" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="25"
- layout="topleft"
- min_height="25"
- width="140"
- name="teleport_btn_panel"
- user_resize="false">
- <button
- auto_resize="false"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Profile"
+ name="view_profile_btn"
+ top="0"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="add_friend_btn_panel"
+ user_resize="false">
+ <button
follows="left|top|right"
height="23"
- label="Teleport"
- name="teleport_btn"
- tool_tip = "Offer to teleport this person"
+ label="Add Friend"
+ name="add_friend_btn"
+ top="5"
width="140" />
- </layout_panel>
- <layout_panel
+ </layout_panel>
+ <layout_panel
auto_resize="false"
follows="top|left|right"
height="25"
layout="topleft"
min_height="25"
width="140"
- name="call_btn_panel"
+ name="teleport_btn_panel"
user_resize="false">
- <button
- follows="left|top|right"
- height="23"
- label="Call"
- name="call_btn"
- width="140" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="25"
- layout="topleft"
- min_height="25"
- width="140"
- name="end_call_btn_panel"
- user_resize="false"
- visible="false">
- <button
- follows="left|top|right"
- height="23"
- label="End Call"
- name="end_call_btn"
- width="140" />
- </layout_panel>
- <layout_panel
- mouse_opaque="false"
- auto_resize="true"
- follows="top|left"
- height="0"
- layout="topleft"
- min_height="0"
- width="140"
- name="spacer"
- user_resize="false" />
+ <button
+ auto_resize="false"
+ follows="left|top|right"
+ height="23"
+ label="Teleport"
+ name="teleport_btn"
+ tool_tip = "Offer to teleport this person"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="call_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Call"
+ name="call_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="end_call_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="End Call"
+ name="end_call_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="block_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Block"
+ name="block_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="unblock_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Unblock"
+ name="unblock_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="54"
+ width="140"
+ name="volume_ctrl_panel"
+ visible="false"
+ user_resize="false">
+ <slider
+ follows="top|left"
+ height="23"
+ increment="0.01"
+ left="0"
+ max_val="0.95"
+ min_val="0.05"
+ name="volume_slider"
+ show_text="false"
+ tool_tip="Call Volume"
+ top_pad="32"
+ value="0.5"
+ width="125" />
+ <button
+ follows="top|left"
+ height="16"
+ image_disabled="Audio_Off"
+ image_disabled_selected="AudioMute_Off"
+ image_hover_selected="AudioMute_Over"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ left_pad="0"
+ top_delta="4"
+ name="mute_btn"
+ width="16" />
+ </layout_panel>
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="true"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ min_height="0"
+ width="140"
+ name="spacer"
+ user_resize="false" />
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_login.xml b/indra/newview/skins/minimal/xui/en/panel_login.xml
index 3903658e71..40d2df78e1 100644
--- a/indra/newview/skins/minimal/xui/en/panel_login.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_login.xml
@@ -124,27 +124,27 @@ label="Remember password"
height="15"
left_pad="10"
name="mode_selection_text"
-top="20"
+ top="20"
width="130">
- Mode:
- </text>
-<combo_box
+ Mode:
+ </text>
+ <combo_box
follows="left|bottom"
height="23"
max_chars="128"
- top_pad="0"
tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+ top_pad="0"
name="mode_combo"
- width="120">
-<combo_box.item
- label="Basic"
- name="Basic"
- value="settings_minimal.xml" />
-<combo_box.item
- label="Advanced"
- name="Advanced"
- value="" />
-</combo_box>
+ width="110">
+ <combo_box.item
+ label="Basic"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced"
+ name="Advanced"
+ value="" />
+ </combo_box>
</layout_panel>
<layout_panel
tab_stop="false"
diff --git a/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
index 6dc1a1c9b0..73a8564274 100644
--- a/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
@@ -63,7 +63,7 @@ width="31" />
mouse_opaque="false"
name="location_combo"
top_delta="0"
- width="440">
+ width="325">
</location_input>
<icon follows="right"
height="20"
diff --git a/indra/newview/skins/minimal/xui/en/panel_people.xml b/indra/newview/skins/minimal/xui/en/panel_people.xml
index 76baacb091..4739f86e95 100644
--- a/indra/newview/skins/minimal/xui/en/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_people.xml
@@ -428,7 +428,7 @@ Looking for people to hang out with? Try the Destinations button below.
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="im_btn_lp"
user_resize="false"
auto_resize="true"
width="41">
@@ -449,7 +449,7 @@ Looking for people to hang out with? Try the Destinations button below.
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="call_btn_lp"
user_resize="false"
auto_resize="true"
width="52">
@@ -470,7 +470,7 @@ Looking for people to hang out with? Try the Destinations button below.
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="teleport_btn_lp"
user_resize="false"
auto_resize="true"
width="77">
diff --git a/indra/newview/skins/minimal/xui/en/panel_status_bar.xml b/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
index 6ccd0e938d..fdd6b5d6ec 100644
--- a/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
@@ -12,7 +12,7 @@
name="status"
top="19"
tab_stop="false"
- width="70">
+ width="185">
<panel.string
name="packet_loss_tooltip">
Packet Loss
@@ -33,6 +33,27 @@
name="buycurrencylabel">
L$ [AMT]
</panel.string>
+ <combo_box
+ follows="right|top"
+ left_pad="5"
+ drop_down_button.pad_left="10"
+ left="0"
+ top="5"
+ pad_left="5"
+ width="120"
+ height="23"
+ name="mode_combo"
+ tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+ >
+ <combo_box.item
+ label="Basic Mode"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced Mode"
+ name="Advanced"
+ value="" />
+ </combo_box>
<button
follows="right|top"
height="16"
@@ -41,7 +62,7 @@
image_pressed="Pause_Press"
image_pressed_selected="Play_Press"
is_toggle="true"
- left="15"
+ left_pad="5"
top="7"
name="media_toggle_btn"
tool_tip="Start/Stop All Media (Music, Video, Web pages)"
diff --git a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
index fe06a2d816..ba148cf421 100644
--- a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
@@ -113,6 +113,14 @@
font="SansSerifSmall"
text_color="TextFgColor"
/>
+ <see_avatars_icon
+ name="see_avatars_icon"
+ width="0"
+ height="0"
+ visible="false"
+ top="21"
+ follows="right|top"
+ />
<combo_button
name="Location History"
label=""
diff --git a/indra/newview/skins/minimal/xui/es/notifications.xml b/indra/newview/skins/minimal/xui/es/notifications.xml
index b08ebb5f76..78b617c429 100644
--- a/indra/newview/skins/minimal/xui/es/notifications.xml
+++ b/indra/newview/skins/minimal/xui/es/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ofrece un/a [ITEM_SLURL]. Para utilizar este ítem, cambia al modo Avanzado y búscalo en el inventario. Para cambiar al modo Avanzado, sal de la aplicación, reiníciala y cambia el ajuste de modo en la pantalla de inicio de sesión.
+ Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ofrece un/a &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Para utilizar este ítem, cambia al modo Avanzado y búscalo en el inventario. Para cambiar al modo Avanzado, sal de la aplicación, reiníciala y cambia el ajuste de modo en la pantalla de inicio de sesión.
<form name="form">
<button name="Keep" text="Conservar ítem"/>
<button name="Discard" text="Rechazar ítem"/>
diff --git a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
index 1be6997813..93b6526f77 100644
--- a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
@@ -10,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Compartir" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Pagar" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Llamar" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Colgar" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de la voz" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Ignorar" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="No ignorar" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volumen de la llamada" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_people.xml b/indra/newview/skins/minimal/xui/es/panel_people.xml
index 1e1c3411ae..a06f3010d7 100644
--- a/indra/newview/skins/minimal/xui/es/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/es/panel_people.xml
@@ -49,14 +49,14 @@
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/minimal/xui/fr/notifications.xml b/indra/newview/skins/minimal/xui/fr/notifications.xml
index 41dd42c39f..05fa03cdc1 100644
--- a/indra/newview/skins/minimal/xui/fr/notifications.xml
+++ b/indra/newview/skins/minimal/xui/fr/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous offre [ITEM_SLURL]. Pour utiliser cet article, vous devez passer en mode Avancé. L&apos;article se trouve dans votre inventaire. Pour changer de mode, quittez l&apos;application, redémarrez-la, puis sélectionnez un autre mode sur l&apos;écran de connexion.
+ Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous offre &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Pour utiliser cet article, vous devez passer en mode Avancé. L&apos;article se trouve dans votre inventaire. Pour changer de mode, quittez l&apos;application, redémarrez-la, puis sélectionnez un autre mode sur l&apos;écran de connexion.
<form name="form">
<button name="Keep" text="Garder l&apos;article"/>
<button name="Discard" text="Refuser l&apos;article"/>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
index fdc5aeca49..1643cf3229 100644
--- a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Inconnu"/>
<layout_stack name="button_stack">
<layout_panel name="view_profile_btn_panel">
<button label="Profil" name="view_profile_btn"/>
@@ -11,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne."/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Partager" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Payer" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Appeler" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Quitter l&apos;appel" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Contrôles vocaux" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Ignorer" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Ne plus ignorer" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volume de l&apos;appel." value="0,5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_people.xml b/indra/newview/skins/minimal/xui/fr/panel_people.xml
index 72fb4d807f..427a420b91 100644
--- a/indra/newview/skins/minimal/xui/fr/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/fr/panel_people.xml
@@ -49,14 +49,14 @@ Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouto
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation."/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/minimal/xui/it/notifications.xml b/indra/newview/skins/minimal/xui/it/notifications.xml
index 05e13bc4f3..998e38ff5a 100644
--- a/indra/newview/skins/minimal/xui/it/notifications.xml
+++ b/indra/newview/skins/minimal/xui/it/notifications.xml
@@ -2418,7 +2418,7 @@ Riprova tra qualche istante.
Non è stato trovato nessun territorio valido.
</notification>
<notification name="ObjectGiveItem">
- Un oggetto denominato &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; di proprietà di [NAME_SLURL] ti ha offerto [ITEM_SLURL]: Per usare questo oggetto è necessario passare alla modalità Avanzata e cercarlo nell&apos;Inventario. Per passare alla modalità Avanzata, esci e riavvia l&apos;applicazione e cambia le impostazioni della modalità nella schermata di accesso.
+ Un oggetto denominato &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; di proprietà di &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; ti ha offerto [ITEM_SLURL]: Per usare questo oggetto è necessario passare alla modalità Avanzata e cercarlo nell&apos;Inventario. Per passare alla modalità Avanzata, esci e riavvia l&apos;applicazione e cambia le impostazioni della modalità nella schermata di accesso.
<form name="form">
<button name="Keep" text="Mantieni oggetto"/>
<button name="Discard" text="Rifiuta oggetto"/>
diff --git a/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml
index 756db84c1c..269931a1a4 100644
--- a/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml
@@ -10,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Condividi" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Paga" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Chiama" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Chiudi chiamata" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Regolazione voce" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Blocca" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Sblocca" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volume chiamata" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/it/panel_people.xml b/indra/newview/skins/minimal/xui/it/panel_people.xml
index 068c8bb808..81e886acf0 100644
--- a/indra/newview/skins/minimal/xui/it/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/it/panel_people.xml
@@ -66,16 +66,16 @@ Stai cercando persone da frequentare? Prova il pulsante Destinazioni in basso.
<layout_panel name="view_profile_btn_lp">
<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/ja/notifications.xml b/indra/newview/skins/minimal/xui/ja/notifications.xml
index 6ad0ed1ac6..43934c9317 100644
--- a/indra/newview/skins/minimal/xui/ja/notifications.xml
+++ b/indra/newview/skins/minimal/xui/ja/notifications.xml
@@ -2465,7 +2465,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
有効ãªåŒºç”»ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
</notification>
<notification name="ObjectGiveItem">
- [NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« [ITEM_SLURL] を渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’使ã†ã«ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒå¿…è¦ã§ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ãªãŠã™ã¨ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ãŒè¦‹ã¤ã‹ã‚Šã¾ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã«ã¯ã€ã“ã®ã‚¢ãƒ—リケーションを終了ã—ã¦å†èµ·å‹•ã—ã€ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ã§ãƒ¢ãƒ¼ãƒ‰è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。
+ [NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; を渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’使ã†ã«ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒå¿…è¦ã§ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ãªãŠã™ã¨ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ãŒè¦‹ã¤ã‹ã‚Šã¾ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã«ã¯ã€ã“ã®ã‚¢ãƒ—リケーションを終了ã—ã¦å†èµ·å‹•ã—ã€ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ã§ãƒ¢ãƒ¼ãƒ‰è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。
<form name="form">
<button name="Keep" text="アイテムをå—ã‘å–ã‚‹"/>
<button name="Discard" text="アイテムを拒å¦ã™ã‚‹"/>
diff --git a/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml
index f2429ac12a..14c38c796f 100644
--- a/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="ä¸æ˜Ž"/>
<layout_stack name="button_stack">
<layout_panel name="view_profile_btn_panel">
<button label="プロフィール" name="view_profile_btn"/>
@@ -11,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="ã“ã®äººã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="共有" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="支払ã†" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="コール" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="コール終了" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="ボイスコントロール" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="ブロック" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="ブロック解除" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="コールã®éŸ³é‡" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/ja/panel_people.xml b/indra/newview/skins/minimal/xui/ja/panel_people.xml
index 9eb45d9a80..5caeebc151 100644
--- a/indra/newview/skins/minimal/xui/ja/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/ja/panel_people.xml
@@ -66,16 +66,16 @@
<layout_panel name="view_profile_btn_lp">
<button label="プロフィール" name="view_profile_btn" tool_tip="写真ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãã®ä»–ä½äººæƒ…報を表示"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開ãã¾ã™"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="コール" name="call_btn" tool_tip="ã“ã®ä½äººã«ã‚³ãƒ¼ãƒ«ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="共有" name="share_btn" tool_tip="「æŒã¡ç‰©ã€ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’共有ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="テレãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/pl/notifications.xml b/indra/newview/skins/minimal/xui/pl/notifications.xml
index 6e62478ed0..6475a37465 100644
--- a/indra/newview/skins/minimal/xui/pl/notifications.xml
+++ b/indra/newview/skins/minimal/xui/pl/notifications.xml
@@ -2384,7 +2384,7 @@ Spróbuj ponowanie za kilka minut.
Nieważana posiadłość.
</notification>
<notification name="ObjectGiveItem">
- Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, którego właścicielem jest [NAME_SLURL] oferuje Tobie [ITEM_SLURL]. Korzystanie z tego obieku wymaga przelączenia się na tryb zaawansowany, w którym będzie można odszukać obiekt w Twojej Szafie. W celu przełączenia trybu życia na zaawansowany, zamknij i uruchom ponownie aplikację. Przed ponownym zalogowaniem zmień tryb życia na ekranie logowania.
+ Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, którego właścicielem jest [NAME_SLURL] oferuje Tobie &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Korzystanie z tego obieku wymaga przelączenia się na tryb zaawansowany, w którym będzie można odszukać obiekt w Twojej Szafie. W celu przełączenia trybu życia na zaawansowany, zamknij i uruchom ponownie aplikację. Przed ponownym zalogowaniem zmień tryb życia na ekranie logowania.
<form name="form">
<button name="Keep" text="Zaakceptuj obiekt"/>
<button name="Discard" text="Odrzuć obiekt"/>
diff --git a/indra/newview/skins/minimal/xui/pl/panel_people.xml b/indra/newview/skins/minimal/xui/pl/panel_people.xml
index dbfee739f4..3b3aaa0987 100644
--- a/indra/newview/skins/minimal/xui/pl/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/pl/panel_people.xml
@@ -66,16 +66,16 @@ Chcesz spotkać ludzi? Skorzystaj z przycisku &quot;Atrakcje turystyczne&quot; p
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/pt/notifications.xml b/indra/newview/skins/minimal/xui/pt/notifications.xml
index 30ba6f68bf..9e5ff6fe60 100644
--- a/indra/newview/skins/minimal/xui/pt/notifications.xml
+++ b/indra/newview/skins/minimal/xui/pt/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], está lhe oferecendo [ITEM_SLURL]. Esta ação requer o modo Avançado. Passe para o modo Avançado e você verá o item em seu Inventário. Para passar para o modo Avançado, feche e reinicialize esse aplicativo e mude o modo (indicado na tela de login).
+ Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], está lhe oferecendo &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Esta ação requer o modo Avançado. Passe para o modo Avançado e você verá o item em seu Inventário. Para passar para o modo Avançado, feche e reinicialize esse aplicativo e mude o modo (indicado na tela de login).
<form name="form">
<button name="Keep" text="Guardar item"/>
<button name="Discard" text="Recusar item"/>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
index d223ee9c69..190323c3b0 100644
--- a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
@@ -10,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Compartilhar" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Pagar" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Ligar" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Encerrar ligação" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de voz" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Bloquear" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Desbloquear" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volume da ligação" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_people.xml b/indra/newview/skins/minimal/xui/pt/panel_people.xml
index d46c440eb9..0e98c586c6 100644
--- a/indra/newview/skins/minimal/xui/pt/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/pt/panel_people.xml
@@ -49,13 +49,13 @@ Em busca de alguém para conversar? Confira o botão Destinos abaixo.
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/tests/lldir_stub.cpp b/indra/newview/tests/lldir_stub.cpp
new file mode 100644
index 0000000000..18cf4e7419
--- /dev/null
+++ b/indra/newview/tests/lldir_stub.cpp
@@ -0,0 +1,62 @@
+/**
+ * @file lldir_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+// Use me only if you need to stub out some helper functions, not if you e.g. need sane numbers from countFilesInDir
+
+LLDir::LLDir() {}
+LLDir::~LLDir() {}
+BOOL LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask) { return true; }
+void LLDir::setChatLogsDir(const std::string &path) {}
+void LLDir::setPerAccountChatLogsDir(const std::string &first, const std::string &last) {}
+void LLDir::setLindenUserDir(const std::string &first, const std::string &last) {}
+void LLDir::setSkinFolder(const std::string &skin_folder) {}
+bool LLDir::setCacheDir(const std::string &path) { return true; }
+void LLDir::dumpCurrentDirectories() {}
+
+class LLDir_stub : public LLDir
+{
+public:
+ LLDir_stub() {}
+ ~LLDir_stub() {}
+
+ /*virtual*/ void initAppDirs(const std::string &app_name) {}
+
+ /*virtual*/ std::string getCurPath() { return "CUR_PATH_FROM_LLDIR"; }
+ /*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask) { return 42; }
+ /*virtual*/ BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname, BOOL wrap) { fname = fname + "_NEXT"; return false; }
+ /*virtual*/ void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname) { fname = "RANDOM_FILE"; }
+ /*virtual*/ BOOL fileExists(const std::string &filename) const { return false; }
+};
+
+LLDir_stub gDirUtil;
+
+LLDir* gDirUtilp = &gDirUtil;
+
+std::string LLDir::getExpandedFilename(ELLPath loc, const std::string& subdir, const std::string& filename) const
+{
+ return subdir + " --- " + filename + " --- expanded!";
+}
+
diff --git a/indra/newview/tests/llglslshader_stub.cpp b/indra/newview/tests/llglslshader_stub.cpp
new file mode 100644
index 0000000000..8947a632c8
--- /dev/null
+++ b/indra/newview/tests/llglslshader_stub.cpp
@@ -0,0 +1,39 @@
+/**
+ * @file llglslshader_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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 "llglslshader.h"
+
+void LLGLSLShader::uniform1f(const std::string& uniform, F32 num)
+{
+}
+
+void LLGLSLShader::uniform3fv(const std::string& uniform, U32 count, const GLfloat *v)
+{
+}
+
+void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)
+{
+}
diff --git a/indra/newview/tests/llpipeline_stub.cpp b/indra/newview/tests/llpipeline_stub.cpp
new file mode 100644
index 0000000000..ad112cbf6a
--- /dev/null
+++ b/indra/newview/tests/llpipeline_stub.cpp
@@ -0,0 +1,32 @@
+/**
+ * @file llpipeline_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+class LLPipeline
+{
+public: BOOL canUseWindLightShaders() const;
+};
+BOOL LLPipeline::canUseWindLightShaders() const {return TRUE;}
+LLPipeline gPipeline;
diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp
index daa10819fc..0235400976 100644
--- a/indra/newview/tests/llsechandler_basic_test.cpp
+++ b/indra/newview/tests/llsechandler_basic_test.cpp
@@ -86,6 +86,9 @@ std::string LLControlGroup::getString(const std::string& name)
return "";
}
+// Stub for --no-verify-ssl-cert
+BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; }
+
LLSD LLCredential::getLoginParams()
{
LLSD result = LLSD::emptyMap();
diff --git a/indra/newview/tests/llsky_stub.cpp b/indra/newview/tests/llsky_stub.cpp
new file mode 100644
index 0000000000..241d740635
--- /dev/null
+++ b/indra/newview/tests/llsky_stub.cpp
@@ -0,0 +1,37 @@
+/**
+ * @file llsky_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+class LLSky
+{
+public:
+ void setOverrideSun(BOOL override);
+ void setSunDirection(const LLVector3 &sun_direction, const LLVector3 &sun_ang_velocity);
+};
+
+void LLSky::setOverrideSun(BOOL override) {}
+void LLSky::setSunDirection(const LLVector3 &sun_direction, const LLVector3 &sun_ang_velocity) {}
+
+LLSky gSky;
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
index dd7761475e..3c89b64d52 100644
--- a/indra/newview/tests/llviewernetwork_test.cpp
+++ b/indra/newview/tests/llviewernetwork_test.cpp
@@ -164,7 +164,7 @@ namespace tut
std::string("https://secondlife.com/helpers/"));
ensure_equals("Agni login page is correct",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure("Agni is a favorite",
grid.has(GRID_IS_FAVORITE_VALUE));
ensure("Agni is a system grid",
@@ -208,7 +208,7 @@ namespace tut
std::string("https://secondlife.com/helpers/"));
ensure_equals("Agni login page the same after grid file",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure("Agni still a favorite after grid file",
grid.has(GRID_IS_FAVORITE_VALUE));
ensure("Agni system grid still set after grid file",
@@ -310,7 +310,7 @@ namespace tut
std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/"));
ensure_equals("Override known grid login uri: login page is not set",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
// Override with loginuri
// override custom grid
@@ -359,7 +359,7 @@ namespace tut
std::string("https://my.helper.uri/mycustomhelpers"));
ensure_equals("Override known grid helper uri: login page is not changed",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
// Override with helperuri
// override custom grid
@@ -451,9 +451,9 @@ namespace tut
ensure_equals("getHelperURI", LLGridManager::getInstance()->getHelperURI(),
std::string("https://secondlife.com/helpers/"));
ensure_equals("getLoginPage", LLGridManager::getInstance()->getLoginPage(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure_equals("getLoginPage2", LLGridManager::getInstance()->getLoginPage("util.agni.lindenlab.com"),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure("Is Agni a production grid", LLGridManager::getInstance()->isInProductionGrid());
std::vector<std::string> uris;
LLGridManager::getInstance()->getLoginURIs(uris);
diff --git a/indra/newview/tests/llviewershadermgr_stub.cpp b/indra/newview/tests/llviewershadermgr_stub.cpp
new file mode 100644
index 0000000000..18eff72f3c
--- /dev/null
+++ b/indra/newview/tests/llviewershadermgr_stub.cpp
@@ -0,0 +1,50 @@
+/**
+ * @file llglslshader_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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 "../llviewershadermgr.h"
+
+LLShaderMgr::LLShaderMgr() {}
+LLShaderMgr::~LLShaderMgr() {}
+
+LLViewerShaderMgr::LLViewerShaderMgr() {}
+LLViewerShaderMgr::~LLViewerShaderMgr() {}
+
+LLViewerShaderMgr* stub_instance = NULL;
+
+LLViewerShaderMgr* LLViewerShaderMgr::instance() {
+ if(NULL == stub_instance)
+ {
+ stub_instance = new LLViewerShaderMgr();
+ }
+
+ return stub_instance;
+}
+LLViewerShaderMgr::shader_iter fake_iter;
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::beginShaders() const {return fake_iter;}
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::endShaders() const {return fake_iter;}
+
+void LLViewerShaderMgr::updateShaderUniforms(LLGLSLShader* shader) {return;}
+std::string LLViewerShaderMgr::getShaderDirPrefix() {return "SHADER_DIR_PREFIX-";}
diff --git a/indra/newview/tests/llwlanimator_stub.cpp b/indra/newview/tests/llwlanimator_stub.cpp
new file mode 100644
index 0000000000..f5e15b2e7b
--- /dev/null
+++ b/indra/newview/tests/llwlanimator_stub.cpp
@@ -0,0 +1,29 @@
+/**
+ * @file llwlanimator_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+LLWLAnimator::LLWLAnimator(void) {}
+void LLWLAnimator::update(LLWLParamSet& set) {}
+void LLWLAnimator::setTrack(std::map<F32, LLWLParamKey>& track, F32 dayRate, F64 dayTime, bool run) {}
diff --git a/indra/newview/tests/llwldaycycle_stub.cpp b/indra/newview/tests/llwldaycycle_stub.cpp
new file mode 100644
index 0000000000..a7bc9a7b83
--- /dev/null
+++ b/indra/newview/tests/llwldaycycle_stub.cpp
@@ -0,0 +1,52 @@
+/**
+ * @file llwldaycycle_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+LLWLDayCycle::LLWLDayCycle(void)
+{
+}
+
+LLWLDayCycle::~LLWLDayCycle(void)
+{
+}
+
+bool LLWLDayCycle::getKeytime(LLWLParamKey keyFrame, F32& keyTime)
+{
+ keyTime = 0.5;
+ return true;
+}
+
+bool LLWLDayCycle::removeKeyframe(F32 time)
+{
+ return true;
+}
+
+void LLWLDayCycle::loadDayCycleFromFile(const std::string& fileName)
+{
+}
+
+void LLWLDayCycle::removeReferencesTo(const LLWLParamKey &keyframe)
+{
+}
diff --git a/indra/newview/tests/llwlparammanager_test.cpp b/indra/newview/tests/llwlparammanager_test.cpp
new file mode 100644
index 0000000000..be0dc9fd0c
--- /dev/null
+++ b/indra/newview/tests/llwlparammanager_test.cpp
@@ -0,0 +1,271 @@
+/**
+ * @file llwlparammanager_test.cpp
+ * @brief LLWLParamManager tests
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+// Precompiled headers
+#include "../llviewerprecompiledheaders.h"
+
+// Class to test
+#include "../llwlparammanager.h"
+
+// Dependencies
+#include "linden_common.h"
+
+// TUT header
+#include "lltut.h"
+
+// Stubs
+#include "llwldaycycle_stub.cpp"
+#include "llwlparamset_stub.cpp"
+#include "llwlanimator_stub.cpp"
+#include "llglslshader_stub.cpp"
+#include "lldir_stub.cpp"
+#include "llsky_stub.cpp"
+#include "llpipeline_stub.cpp"
+#include "llviewershadermgr_stub.cpp"
+
+void assert_glerror(void) {}
+LLViewerCamera::LLViewerCamera() {}
+void LLViewerCamera::setView(F32 vertical_fov_rads) {}
+std::string LLTrans::getString(const std::string &xml_desc, const LLStringUtil::format_map_t& args) { return std::string(""); }
+
+char* curl_unescape(const char* c_str, int length)
+{
+ char* copy = new char[length+4];
+ memcpy(copy, c_str, length);
+ copy[length+0] = 'E';
+ copy[length+1] = 'S';
+ copy[length+2] = 'C';
+ copy[length+3] = '\0';
+ return copy;
+}
+void curl_free(void* p) {delete[] ((char*)p);}
+char* curl_escape(const char* c_str, int length) {
+ char* copy = new char[length+6];
+ memcpy(copy, c_str, length);
+ copy[length+0] = 'U';
+ copy[length+1] = 'N';
+ copy[length+2] = 'E';
+ copy[length+3] = 'S';
+ copy[length+4] = 'C';
+ copy[length+5] = '\0';
+ return copy;
+}
+
+namespace tut
+{
+ // Main Setup
+ struct LLWLParamManagerFixture
+ {
+ class LLWLParamManagerTest
+ {
+ };
+
+ LLWLParamManager* mTestManager;
+
+ LLWLParamManagerFixture()
+ : mTestManager(LLWLParamManager::getInstance())
+ {
+ }
+
+ ~LLWLParamManagerFixture()
+ {
+ }
+ };
+ typedef test_group<LLWLParamManagerFixture> factory;
+ typedef factory::object object;
+ factory tf("LLWLParamManager test");
+
+ // Tests
+ template<> template<>
+ void object::test<1>()
+ {
+ try
+ {
+ std::string preset =
+ "<llsd>\
+ <map>\
+ <key>ambient</key>\
+ <array>\
+ <real>1.0499999523162842</real>\
+ <real>1.0499999523162842</real>\
+ <real>1.0499999523162842</real>\
+ <real>0.34999999403953552</real>\
+ </array>\
+ <key>blue_density</key>\
+ <array>\
+ <real>0.2447581488182351</real>\
+ <real>0.44872328639030457</real>\
+ <real>0.75999999046325684</real>\
+ <real>0.38000004053115788</real>\
+ </array>\
+ <key>blue_horizon</key>\
+ <array>\
+ <real>0.49548382097675159</real>\
+ <real>0.49548381382419748</real>\
+ <real>0.63999999284744291</real>\
+ <real>0.31999999642372146</real>\
+ </array>\
+ <key>cloud_color</key>\
+ <array>\
+ <real>0.40999999165535073</real>\
+ <real>0.40999999165535073</real>\
+ <real>0.40999999165535073</real>\
+ <real>0.40999999165535073</real>\
+ </array>\
+ <key>cloud_pos_density1</key>\
+ <array>\
+ <real>1.6884100437164307</real>\
+ <real>0.52609699964523315</real>\
+ <real>0.99999999999999289</real>\
+ <real>1</real>\
+ </array>\
+ <key>cloud_pos_density2</key>\
+ <array>\
+ <real>1.6884100437164307</real>\
+ <real>0.52609699964523315</real>\
+ <real>0.125</real>\
+ <real>1</real>\
+ </array>\
+ <key>cloud_scale</key>\
+ <array>\
+ <real>0.4199999868869746</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>cloud_scroll_rate</key>\
+ <array>\
+ <real>10.199999809265137</real>\
+ <real>10.01099967956543</real>\
+ </array>\
+ <key>cloud_shadow</key>\
+ <array>\
+ <real>0.26999998092651367</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>density_multiplier</key>\
+ <array>\
+ <real>0.00017999998817685818</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>distance_multiplier</key>\
+ <array>\
+ <real>0.80000001192093606</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>east_angle</key>\
+ <real>0</real>\
+ <key>enable_cloud_scroll</key>\
+ <array>\
+ <boolean>1</boolean>\
+ <boolean>1</boolean>\
+ </array>\
+ <key>gamma</key>\
+ <array>\
+ <real>1</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>glow</key>\
+ <array>\
+ <real>5</real>\
+ <real>0.0010000000474974513</real>\
+ <real>-0.47999998927116394</real>\
+ <real>1</real>\
+ </array>\
+ <key>haze_density</key>\
+ <array>\
+ <real>0.69999998807907104</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>haze_horizon</key>\
+ <array>\
+ <real>0.18999999761581243</real>\
+ <real>0.19915600121021271</real>\
+ <real>0.19915600121021271</real>\
+ <real>1</real>\
+ </array>\
+ <key>lightnorm</key>\
+ <array>\
+ <real>0</real>\
+ <real>0.70710659027099609</real>\
+ <real>-0.70710694789886475</real>\
+ <real>0</real>\
+ </array>\
+ <key>max_y</key>\
+ <array>\
+ <real>1605</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>preset_num</key>\
+ <integer>22</integer>\
+ <key>star_brightness</key>\
+ <real>0</real>\
+ <key>sun_angle</key>\
+ <real>2.3561947345733643</real>\
+ <key>sunlight_color</key>\
+ <array>\
+ <real>0.73421055078505759</real>\
+ <real>0.78157895803450828</real>\
+ <real>0.89999997615813498</real>\
+ <real>0.29999998211860301</real>\
+ </array>\
+ </map>\
+ </llsd>";
+
+ std::stringstream preset_stream(preset);
+ mTestManager->loadPresetFromXML(LLWLParamKey("test1", LLWLParamKey::SCOPE_LOCAL), preset_stream);
+ LLWLParamSet dummy;
+ ensure("Couldn't get ParamSet after loading it", mTestManager->getParamSet(LLWLParamKey("test1", LLWLParamKey::SCOPE_LOCAL), dummy));
+ }
+ catch (...)
+ {
+ fail("loadPresetFromXML test crashed!");
+ }
+ }
+
+ template<> template<>
+ void object::test<2>()
+ {
+ mTestManager->propagateParameters();
+ ensure_equals("Wrong value from getDomeOffset()", mTestManager->getDomeOffset(), 0.96f);
+ ensure_equals("Wrong value from getDomeRadius()", mTestManager->getDomeRadius(), 15000.f);
+ ensure_equals("Wrong value from getLightDir()", mTestManager->getLightDir(), LLVector4(-0,0,1,0));
+ ensure_equals("Wrong value from getClampedLightDir()", mTestManager->getClampedLightDir(), LLVector4(-0,0,1,0));
+ ensure_equals("Wrong value from getRotatedLightDir()", mTestManager->getRotatedLightDir(), LLVector4(0,0,0,1));
+ }
+}
diff --git a/indra/newview/tests/llwlparamset_stub.cpp b/indra/newview/tests/llwlparamset_stub.cpp
new file mode 100644
index 0000000000..ccb99db475
--- /dev/null
+++ b/indra/newview/tests/llwlparamset_stub.cpp
@@ -0,0 +1,41 @@
+/**
+ * @file llwlparamset_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&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$
+ */
+
+LLWLParamSet::LLWLParamSet(void)
+{
+}
+
+void LLWLParamSet::updateCloudScrolling()
+{
+}
+
+void LLWLParamSet::set(const std::string& name, const LLVector4& val)
+{
+}
+
+void LLWLParamSet::update(LLGLSLShader *shader) const
+{
+}
diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp
index acc6e814bc..102294959a 100644
--- a/indra/newview/tests/llworldmap_test.cpp
+++ b/indra/newview/tests/llworldmap_test.cpp
@@ -27,7 +27,6 @@
// Dependencies
#include "linden_common.h"
-#include "llapr.h"
#include "llsingleton.h"
#include "lltrans.h"
#include "lluistring.h"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 8aa94616d6..0a21d8714c 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -31,6 +31,7 @@ import os.path
import re
import tarfile
import time
+import random
viewer_dir = os.path.dirname(__file__)
# add llmanifest library to our path so we don't have to muck with PYTHONPATH
sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
@@ -62,6 +63,26 @@ class ViewerManifest(LLManifest):
# include the entire shaders directory recursively
self.path("shaders")
+ # include the extracted list of contributors
+ contributor_names = self.extract_names("../../doc/contributions.txt")
+ self.put_in_file(contributor_names, "contributors.txt")
+ # include the extracted list of translators
+ translator_names = self.extract_names("../../doc/translations.txt")
+ self.put_in_file(translator_names, "translators.txt")
+ # include the list of Lindens (if any)
+ # see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits
+ linden_names_path = os.getenv("linden_credits")
+ if linden_names_path :
+ try:
+ linden_file = open(linden_names_path,'r')
+ # all names should be one line, but the join below also converts to a string
+ linden_names = ', '.join(linden_file.readlines())
+ self.put_in_file(linden_names, "lindens.txt")
+ linden_file.close()
+ except IOError:
+ print "No Linden names found at '%s', using built-in list" % linden_names_path
+ pass
+
# ... and the entire windlight directory
self.path("windlight")
self.end_prefix("app_settings")
@@ -143,6 +164,21 @@ class ViewerManifest(LLManifest):
def channel_lowerword(self):
return self.channel_oneword().lower()
+ def icon_path(self):
+ icon_path="icons/"
+ channel_type=self.channel_lowerword()
+ if channel_type == 'release' \
+ or channel_type == 'development' \
+ :
+ icon_path += channel_type
+ elif channel_type == 'betaviewer' :
+ icon_path += 'beta'
+ elif re.match('project.*',channel_type) :
+ icon_path += 'project'
+ else :
+ icon_path += 'test'
+ return icon_path
+
def flags_list(self):
""" Convenience function that returns the command-line flags
for the grid"""
@@ -174,6 +210,28 @@ class ViewerManifest(LLManifest):
return " ".join((channel_flags, grid_flags, setting_flags)).strip()
+ def extract_names(self,src):
+ try:
+ contrib_file = open(src,'r')
+ except IOError:
+ print "Failed to open '%s'" % src
+ raise
+ lines = contrib_file.readlines()
+ contrib_file.close()
+
+ # All lines up to and including the first blank line are the file header; skip them
+ lines.reverse() # so that pop will pull from first to last line
+ while not re.match("\s*$", lines.pop()) :
+ pass # do nothing
+
+ # A line that starts with a non-whitespace character is a name; all others describe contributions, so collect the names
+ names = []
+ for line in lines :
+ if re.match("\S", line) :
+ names.append(line.rstrip())
+ # It's not fair to always put the same people at the head of the list
+ random.shuffle(names)
+ return ', '.join(names)
class WindowsManifest(ViewerManifest):
def final_exe(self):
@@ -609,12 +667,11 @@ class DarwinManifest(ViewerManifest):
self.path("featuretable_mac.txt")
self.path("SecondLife.nib")
- # If we are not using the default channel, use the 'Firstlook
- # icon' to show that it isn't a stable release.
- if self.default_channel() and self.default_grid():
+ icon_path = self.icon_path()
+ if self.prefix(src=icon_path, dst="") :
self.path("secondlife.icns")
- else:
- self.path("secondlife_firstlook.icns", "secondlife.icns")
+ self.end_prefix(icon_path)
+
self.path("SecondLife.nib")
# Translations
@@ -693,7 +750,7 @@ class DarwinManifest(ViewerManifest):
"libexpat.1.5.2.dylib",
"libexception_handler.dylib",
"libGLOD.dylib",
- "libcollada14dom.dylib"
+ "libcollada14dom.dylib"
):
target_lib = os.path.join('../../..', libfile)
self.run_command("ln -sf %(target)r %(link)r" %
@@ -795,9 +852,7 @@ class DarwinManifest(ViewerManifest):
# will use the release .DS_Store, and will look broken.
# - Ambroff 2008-08-20
dmg_template = os.path.join(
- 'installers',
- 'darwin',
- '%s-dmg' % "".join(self.channel_unique().split()).lower())
+ 'installers', 'darwin', '%s-dmg' % self.channel_lowerword())
if not os.path.exists (self.src_path_of(dmg_template)):
dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
@@ -853,7 +908,6 @@ class LinuxManifest(ViewerManifest):
def construct(self):
super(LinuxManifest, self).construct()
self.path("licenses-linux.txt","licenses.txt")
- self.path("res/ll_icon.png","secondlife_icon.png")
if self.prefix("linux_tools", dst=""):
self.path("client-readme.txt","README-linux.txt")
self.path("client-readme-voice.txt","README-linux-voice.txt")
@@ -879,6 +933,15 @@ class LinuxManifest(ViewerManifest):
# recurse
self.end_prefix("res-sdl")
+ # Get the icons based on the channel
+ icon_path = self.icon_path()
+ if self.prefix(src=icon_path, dst="") :
+ self.path("secondlife_256.png","secondlife_icon.png")
+ if self.prefix(src="",dst="res-sdl") :
+ self.path("secondlife_256.BMP","ll_icon.BMP")
+ self.end_prefix("res-sdl")
+ self.end_prefix(icon_path)
+
self.path("../viewer_components/updater/scripts/linux/update_install", "bin/update_install")
# plugins
@@ -964,15 +1027,15 @@ class Linux_i686Manifest(LinuxManifest):
self.path("libbreakpad_client.so.0.0.0")
self.path("libbreakpad_client.so.0")
self.path("libbreakpad_client.so")
- self.path("libcollada14dom.so")
+ self.path("libcollada14dom.so")
self.path("libdb-5.1.so")
self.path("libdb-5.so")
self.path("libdb.so")
self.path("libcrypto.so.1.0.0")
self.path("libexpat.so.1.5.2")
self.path("libssl.so.1.0.0")
- self.path("libglod.so")
- self.path("libminizip.so")
+ self.path("libglod.so")
+ self.path("libminizip.so")
self.path("libuuid.so")
self.path("libuuid.so.16")
self.path("libuuid.so.16.0.22")
diff --git a/indra/test/io.cpp b/indra/test/io.cpp
index c06c1b153b..c8e53e77a0 100644
--- a/indra/test/io.cpp
+++ b/indra/test/io.cpp
@@ -823,22 +823,19 @@ namespace tut
class PumpAndChainTestData
{
protected:
- apr_pool_t* mPool;
LLPumpIO* mPump;
LLPumpIO::chain_t mChain;
public:
PumpAndChainTestData()
{
- apr_pool_create(&mPool, NULL);
- mPump = new LLPumpIO(mPool);
+ mPump = new LLPumpIO();
}
~PumpAndChainTestData()
{
mChain.clear();
delete mPump;
- apr_pool_destroy(mPool);
}
};
typedef test_group<PumpAndChainTestData> PumpAndChainTestGroup;
@@ -910,10 +907,8 @@ namespace tut
pipe_and_pump_fitness()
{
LLFrameTimer::updateFrameTime();
- apr_pool_create(&mPool, NULL);
- mPump = new LLPumpIO(mPool);
+ mPump = new LLPumpIO();
mSocket = LLSocket::create(
- mPool,
LLSocket::STREAM_TCP,
SERVER_LISTEN_PORT);
}
@@ -922,7 +917,6 @@ namespace tut
{
mSocket.reset();
delete mPump;
- apr_pool_destroy(mPool);
}
protected:
@@ -948,7 +942,6 @@ namespace tut
new LLPipeStringInjector("suckers never play me"));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS);
@@ -963,7 +956,7 @@ namespace tut
// Set up the client
//lldebugs << "fitness_test_object::test<1> - connecting client."
// << llendl;
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -995,7 +988,6 @@ namespace tut
emitter_t* emitter = new emitter_t(new LLIOFuzz(1000000));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS);
@@ -1006,7 +998,7 @@ namespace tut
pump_loop(mPump, 0.1f);
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1038,7 +1030,6 @@ namespace tut
emitter_t* emitter = new emitter_t(new LLIOFuzz(1000000));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS);
@@ -1049,7 +1040,7 @@ namespace tut
pump_loop(mPump, 0.1f);
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1081,7 +1072,6 @@ namespace tut
emitter_t* emitter = new emitter_t(new LLIOFuzz(1000000));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS + 1.80f);
@@ -1092,7 +1082,7 @@ namespace tut
pump_loop(mPump, 0.1f);
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1122,7 +1112,6 @@ namespace tut
sleeper_t* sleeper = new sleeper_t(new LLIOSleeper);
boost::shared_ptr<LLChainIOFactory> factory(sleeper);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(1.0);
@@ -1135,7 +1124,7 @@ namespace tut
lldebugs << "** Server is up." << llendl;
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1249,19 +1238,16 @@ namespace tut
}
};
- apr_pool_t* mPool;
LLPumpIO* mPump;
LLPumpIO::chain_t mChain;
LLSimpleRPCClient* mClient;
LLSD mResponse;
rpc_server_data() :
- mPool(NULL),
mPump(NULL),
mClient(NULL)
{
- apr_pool_create(&mPool, NULL);
- mPump = new LLPumpIO(mPool);
+ mPump = new LLPumpIO();
mClient = new LLSimpleRPCClient(&mResponse);
mChain.push_back(LLIOPipe::ptr_t(mClient));
mChain.push_back(LLIOPipe::ptr_t(new LLFilterSD2XMLRPCRequest));
@@ -1276,8 +1262,6 @@ namespace tut
mChain.clear();
delete mPump;
mPump = NULL;
- apr_pool_destroy(mPool);
- mPool = NULL;
}
void pump_loop(const LLSD& request)
{
diff --git a/indra/test/lliohttpserver_tut.cpp b/indra/test/lliohttpserver_tut.cpp
index 2fdc455f45..b7274b662d 100644
--- a/indra/test/lliohttpserver_tut.cpp
+++ b/indra/test/lliohttpserver_tut.cpp
@@ -104,11 +104,8 @@ namespace tut
LLPipeStringInjector* injector = new LLPipeStringInjector(httpRequest);
LLPipeStringExtractor* extractor = new LLPipeStringExtractor();
- apr_pool_t* pool;
- apr_pool_create(&pool, NULL);
-
LLPumpIO* pump;
- pump = new LLPumpIO(pool);
+ pump = new LLPumpIO();
LLPumpIO::chain_t chain;
LLSD context;
@@ -131,7 +128,6 @@ namespace tut
chain.clear();
delete pump;
- apr_pool_destroy(pool);
if(mResponse.notNull() && timeout)
{
diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp
index 6e1c82bb24..fb3dd18fd3 100644
--- a/indra/test/lltemplatemessagebuilder_tut.cpp
+++ b/indra/test/lltemplatemessagebuilder_tut.cpp
@@ -29,7 +29,6 @@
#include "linden_common.h"
#include "lltut.h"
-#include "llapr.h"
#include "llmessagetemplate.h"
#include "llmath.h"
#include "llquaternion.h"
@@ -54,7 +53,6 @@ namespace tut
static bool init = false;
if(! init)
{
- ll_init_apr();
const F32 circuit_heartbeat_interval=5;
const F32 circuit_timeout=100;
diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp
index d971b33475..9a6ccd4d68 100644
--- a/indra/test/message_tut.cpp
+++ b/indra/test/message_tut.cpp
@@ -29,7 +29,6 @@
#include "linden_common.h"
#include "lltut.h"
-#include "llapr.h"
#include "llmessageconfig.h"
#include "llsdserialize.h"
#include "llversionserver.h"
@@ -62,7 +61,6 @@ namespace tut
static bool init = false;
if(!init)
{
- ll_init_apr();
//init_prehash_data();
init = true;
}
diff --git a/indra/test/test.cpp b/indra/test/test.cpp
index ffdb0cb976..45e8aef99a 100644
--- a/indra/test/test.cpp
+++ b/indra/test/test.cpp
@@ -37,8 +37,8 @@
#include "linden_common.h"
#include "llerrorcontrol.h"
#include "lltut.h"
+#include "llaprpool.h"
-#include "apr_pools.h"
#include "apr_getopt.h"
// the CTYPE_WORKAROUND is needed for linux dev stations that don't
@@ -349,17 +349,12 @@ int main(int argc, char **argv)
ctype_workaround();
#endif
- apr_initialize();
- apr_pool_t* pool = NULL;
- if(APR_SUCCESS != apr_pool_create(&pool, NULL))
- {
- std::cerr << "Unable to initialize pool" << std::endl;
- return 1;
- }
+ LLAPRPool pool;
+ pool.create();
apr_getopt_t* os = NULL;
- if(APR_SUCCESS != apr_getopt_init(&os, pool, argc, argv))
+ if(APR_SUCCESS != apr_getopt_init(&os, pool(), argc, argv))
{
- std::cerr << "Unable to pool" << std::endl;
+ std::cerr << "Unable to initialize the arguments for parsing by apr_getopt()." << std::endl;
return 1;
}
@@ -477,8 +472,6 @@ int main(int argc, char **argv)
s.close();
}
- apr_terminate();
-
int retval = (success ? 0 : 1);
return retval;
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 884b00f0cc..d5ee09c5bc 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -27,7 +27,6 @@
#include "linden_common.h"
#include "indra_constants.h"
-#include "llapr.h"
#include "llerrorcontrol.h"
#include <math.h>
@@ -186,9 +185,6 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
std::cout << "Unable to read bookmarks from file: " << bookmarks_filename << std::endl;
};
- // initialize linden lab APR module
- ll_init_apr();
-
// Set up llerror logging
{
LLError::initForApplication(".");
diff --git a/indra/viewer_components/updater/CMakeLists.txt b/indra/viewer_components/updater/CMakeLists.txt
index 0e288bb496..ef82290b47 100644
--- a/indra/viewer_components/updater/CMakeLists.txt
+++ b/indra/viewer_components/updater/CMakeLists.txt
@@ -17,8 +17,8 @@ include_directories(
${LLCOMMON_INCLUDE_DIRS}
${LLMESSAGE_INCLUDE_DIRS}
${LLPLUGIN_INCLUDE_DIRS}
- ${LLVFS_INCLUDE_DIRS}
- ${CURL_INCLUDE_DIRS}
+ ${LLVFS_INCLUDE_DIRS}
+ ${CURL_INCLUDE_DIRS}
)
set(updater_service_SOURCE_FILES
@@ -51,7 +51,7 @@ target_link_libraries(llupdaterservice
${LLCOMMON_LIBRARIES}
${LLMESSAGE_LIBRARIES}
${LLPLUGIN_LIBRARIES}
- ${LLVFS_LIBRARIES}
+ ${LLVFS_LIBRARIES}
)
if(LL_TESTS)
diff --git a/indra/viewer_components/updater/llupdateinstaller.cpp b/indra/viewer_components/updater/llupdateinstaller.cpp
index c7b70c2de8..24ba00ad8e 100644
--- a/indra/viewer_components/updater/llupdateinstaller.cpp
+++ b/indra/viewer_components/updater/llupdateinstaller.cpp
@@ -26,6 +26,7 @@
#include "linden_common.h"
#include <apr_file_io.h>
#include "llapr.h"
+#include "llscopedvolatileaprpool.h"
#include "llprocesslauncher.h"
#include "llupdateinstaller.h"
#include "lldir.h"
@@ -45,7 +46,8 @@ namespace {
{
std::string scriptFile = gDirUtilp->getBaseFileName(path);
std::string newPath = gDirUtilp->getExpandedFilename(LL_PATH_TEMP, scriptFile);
- apr_status_t status = apr_file_copy(path.c_str(), newPath.c_str(), APR_FILE_SOURCE_PERMS, gAPRPoolp);
+ LLScopedVolatileAPRPool pool;
+ apr_status_t status = apr_file_copy(path.c_str(), newPath.c_str(), APR_FILE_SOURCE_PERMS, pool);
if(status != APR_SUCCESS) throw RelocateError();
return newPath;
diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt
index 990dc6783e..5329c89554 100644
--- a/indra/win_crash_logger/CMakeLists.txt
+++ b/indra/win_crash_logger/CMakeLists.txt
@@ -89,4 +89,4 @@ if (WINDOWS)
)
endif (WINDOWS)
-ll_deploy_sharedlibs_command(windows-crash-logger) \ No newline at end of file
+ll_deploy_sharedlibs_command(windows-crash-logger)
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp
index 51ff754c27..170babbb98 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.cpp
+++ b/indra/win_crash_logger/llcrashloggerwindows.cpp
@@ -296,6 +296,7 @@ void LLCrashLoggerWindows::gatherPlatformSpecificFiles()
bool LLCrashLoggerWindows::mainLoop()
{
+ llinfos << "CrashSubmitBehavior is " << mCrashBehavior << llendl;
// Note: parent hwnd is 0 (the desktop). No dlg proc. See Petzold (5th ed) HexCalc example, Chapter 11, p529
// win_crash_logger.rc has been edited by hand.
@@ -308,6 +309,7 @@ bool LLCrashLoggerWindows::mainLoop()
if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
{
+ llinfos << "Showing crash report submit progress window." << llendl;
ShowWindow(gHwndProgress, SW_SHOW );
sendCrashLogs();
}
@@ -354,7 +356,7 @@ bool LLCrashLoggerWindows::mainLoop()
void LLCrashLoggerWindows::updateApplication(const std::string& message)
{
- LLCrashLogger::updateApplication();
+ LLCrashLogger::updateApplication(message);
if(!message.empty()) show_progress(message);
update_messages();
}
@@ -370,6 +372,3 @@ bool LLCrashLoggerWindows::cleanup()
PostQuitMessage(0);
return true;
}
-
-
-
diff --git a/indra/win_crash_logger/llcrashloggerwindows.h b/indra/win_crash_logger/llcrashloggerwindows.h
index 24c564457c..5c45a998b3 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.h
+++ b/indra/win_crash_logger/llcrashloggerwindows.h
@@ -41,7 +41,6 @@ public:
virtual void updateApplication(const std::string& message = LLStringUtil::null);
virtual bool cleanup();
virtual void gatherPlatformSpecificFiles();
- //void annotateCallStack();
void setHandle(HINSTANCE hInst) { mhInst = hInst; }
private:
void ProcessDlgItemText(HWND hWnd, int nIDDlgItem);
diff --git a/indra/win_crash_logger/win_crash_logger.cpp b/indra/win_crash_logger/win_crash_logger.cpp
index 5c22053317..8e916ae437 100644
--- a/indra/win_crash_logger/win_crash_logger.cpp
+++ b/indra/win_crash_logger/win_crash_logger.cpp
@@ -24,51 +24,30 @@
* $/LicenseInfo$
*/
-// win_crash_logger.cpp : Defines the entry point for the application.
-//
-
-// Must be first include, precompiled headers.
#include "linden_common.h"
-
#include "stdafx.h"
-
#include <stdlib.h>
-
#include "llcrashloggerwindows.h"
-
-
-//
-// Implementation
-//
-
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
- llinfos << "Starting crash reporter" << llendl;
+ llinfos << "Starting crash reporter." << llendl;
LLCrashLoggerWindows app;
app.setHandle(hInstance);
- bool ok = app.init();
- if(!ok)
+ app.parseCommandOptions(__argc, __argv);
+
+ if (! app.init())
{
llwarns << "Unable to initialize application." << llendl;
return -1;
}
- // Run the application main loop
- if(!LLApp::isQuitting()) app.mainLoop();
-
- if (!app.isError())
- {
- //
- // We don't want to do cleanup here if the error handler got called -
- // the assumption is that the error handler is responsible for doing
- // app cleanup if there was a problem.
- //
- app.cleanup();
- }
+ app.mainLoop();
+ app.cleanup();
+ llinfos << "Crash reporter finished normally." << llendl;
return 0;
}
diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester
index 52b1c8f31d..52b1c8f31d 100755..100644
--- a/scripts/gpu_table_tester
+++ b/scripts/gpu_table_tester
diff --git a/viewer-hg-convert.shamap b/viewer-hg-convert.shamap
deleted file mode 100644
index 1371d2cf76..0000000000
--- a/viewer-hg-convert.shamap
+++ /dev/null
@@ -1,14803 +0,0 @@
-01da24a6ed088e1519f98a56f03bf7e5d270a552 003dd9461bfa479049afcc34545ab3431b147c7c
-87461c6ded106005bb2500744bd9ec08d6d79af0 003dd9461bfa479049afcc34545ab3431b147c7c
-2fb52a24cc33c2400896cee7c4ab398289b41b63 003dd9461bfa479049afcc34545ab3431b147c7c
-da40a1e2ad70916ce6a51a40f7d00ef2411fecb7 003dd9461bfa479049afcc34545ab3431b147c7c
-f20e02626409ce9640d763e3e4992f1d7b6b19e1 003dd9461bfa479049afcc34545ab3431b147c7c
-8d3db2d9afd8310522e1c74985960c92fb7fe36f 003dd9461bfa479049afcc34545ab3431b147c7c
-e4df740b2ed6cffff36fd830d07c4c67987f3160 003dd9461bfa479049afcc34545ab3431b147c7c
-8870c48b6c53b3b7ec6855ef67aa4e6821f51b22 003dd9461bfa479049afcc34545ab3431b147c7c
-6aabeb15d17a2345291b04af809136e24459132d 003dd9461bfa479049afcc34545ab3431b147c7c
-7ff6f2e9a425d11d4d69b9bb05596f524ebb7a45 003dd9461bfa479049afcc34545ab3431b147c7c
-edcaa89a115d8fdd379eb6903f31cb1e00359bb5 003dd9461bfa479049afcc34545ab3431b147c7c
-c28c22a8187b0cf37dc0b23f41f57cf2045fd4fc fce4a4f0e408d3225184cb880c19aa820bbe1f89
-2584917b2fc0a0fcfe9dafb6720a0298667161d1 fce4a4f0e408d3225184cb880c19aa820bbe1f89
-7fcc0d3e5568ce6e23de224d01282d64d4c7d7aa d5e3f55e8e369efde317e463781786d2129513a7
-d3b869ec80bd4c8e4c26a05c4693188470a8209b d5e3f55e8e369efde317e463781786d2129513a7
-a7b9c3f2d54943fa190e0cf9787cd1114555c7ca d5e3f55e8e369efde317e463781786d2129513a7
-802bda3786af872b8a05c73984edfdf880e2f318 d5e3f55e8e369efde317e463781786d2129513a7
-11428aa2a0cebf25c0d8ebaded69815feeea62cf d5e3f55e8e369efde317e463781786d2129513a7
-34bf4dc5f11c0b1f57a25aee9a20637b29ce9386 8250383746d878de00673d5bc09f872ef4f1ec0b
-5a2f9f9a3aa146a7e6c754993c88e30d6624aa04 57ef29dc0074776a12a899855ac6279f0b5892d3
-420d86e68dd37ccc6bdbedc0fd21630b3746036e 57ef29dc0074776a12a899855ac6279f0b5892d3
-543b64e29a8275ee804c75480216078090a08478 aa295beecf3e69b079ad315dbff7f5a6411805b5
-e71043567f090eb21b1bf72c4a2aa5a12500c723 aa295beecf3e69b079ad315dbff7f5a6411805b5
-6548f0cf448aaad10d16d28aeb1faa98307c80ea aa295beecf3e69b079ad315dbff7f5a6411805b5
-15412f690bc89d63fb2253389c765b0161f6a9a9 c7425a1902cc35755f8792bca2b685d0d2df4452
-5e06558839ab58894bb43086def74158d5010d07 c7425a1902cc35755f8792bca2b685d0d2df4452
-a56926ba4c0de068b589b51c0b9a38b9cf507e25 c7425a1902cc35755f8792bca2b685d0d2df4452
-6e041f6406ad89d2d968d52073397c3458c32c3c b31ff6b9cf0ff0c77de6aa0354ce5eb33c2556da
-b46093ec3e76b39584e2ffc543c0b85abda9f85d b31ff6b9cf0ff0c77de6aa0354ce5eb33c2556da
-7dc275263aba6645dea70fc70a27d17804a5d640 48aeaa42ac6d6a359e40211d759afc52ab3e7e13
-66c937591263ebef07a7acc77cebd38503e2d190 99ccf41e82ac9094378f8cbf7f2d7d9f48dcc5ac
-5dab0b7e87611a2f52ef9ec29da45e9a48e44219 689a04f6cf839b7ae4b9d2820f9d5b0d7d6c3675
-c3f070b2d433ce0aab0b472427c78657cd32d766 689a04f6cf839b7ae4b9d2820f9d5b0d7d6c3675
-40b082bcfd5190403787bafe4953bfa43d4af1d0 689a04f6cf839b7ae4b9d2820f9d5b0d7d6c3675
-30420100dc164c709594ed4fc2d57a0f09078abb 689a04f6cf839b7ae4b9d2820f9d5b0d7d6c3675
-aee85009e9332f88d56848b3b91bb79eb971ab38 da2502695a39900430c1dadbbfdda2f0bf331402
-5759a29934230885c11f4e674e3899df20ce0ead 8989107d73db14b678d2f7928dc116ae4379e788
-cd711e97d46d83021006111d92fbef5ad452d60f 8989107d73db14b678d2f7928dc116ae4379e788
-83cc15eba708aeadb5e7f51481a1e20e6eb2a6fd 8989107d73db14b678d2f7928dc116ae4379e788
-475fd4cfea58606495d82223ebec83b4e1a526ec 8989107d73db14b678d2f7928dc116ae4379e788
-edec93aba453f3b5555535384c6d01330a58dfbb 8989107d73db14b678d2f7928dc116ae4379e788
-5935fdddfc502a8cfa23c3937f0147fdcd1c1be9 8989107d73db14b678d2f7928dc116ae4379e788
-412b3f01ab343233a67443d3d1dc6fbb001e0546 8989107d73db14b678d2f7928dc116ae4379e788
-6e1566a5b6752f36b98dbec6d7295e31fc9a6eb8 8989107d73db14b678d2f7928dc116ae4379e788
-c6827bf0d1527e2a82f8af2664e86f2b45287f95 8989107d73db14b678d2f7928dc116ae4379e788
-a7d3353c0841f7d4c5d93532fbc4d587009867cf 8989107d73db14b678d2f7928dc116ae4379e788
-9be4d2a6507fffc44efdfdc2ad25e54755dc0dd8 8989107d73db14b678d2f7928dc116ae4379e788
-4b9bfbe1687599817f95647022a3dbaca40162e7 c51bc2366a873510aed78aa1b33277c56f954d65
-15ba8f4756961674dd82fc54b2fdd532c9be9ac6 c51bc2366a873510aed78aa1b33277c56f954d65
-a4cb7ddab2c7857bccd778df9dfe0ae6fc4f5eb0 f62e3dfeeb8f64ca24dec4fcb52ad5cfb8bd173a
-9eea8580917901bc94055876e32ba7f01c1609f8 c4f010eda4778da4ee4586a9b26d0d226c87c590
-b915e24864f09dae51e5772fbf4fd2f65622342b c4f010eda4778da4ee4586a9b26d0d226c87c590
-4ceb95dac40d507f649dc8254549af5c812a3dfe c4f010eda4778da4ee4586a9b26d0d226c87c590
-d66e15a29eb055aae47fb9bd21aa0e9d2acb9c2a c4f010eda4778da4ee4586a9b26d0d226c87c590
-60abbce993c2dbf615cb0d981abcf933204928f5 c4f010eda4778da4ee4586a9b26d0d226c87c590
-36d34d595527a3a1cbb455aabd2150e53310b9c0 c4f010eda4778da4ee4586a9b26d0d226c87c590
-d35acb921ea14fcd4c38f09aef5728361168876e c4f010eda4778da4ee4586a9b26d0d226c87c590
-ac735895d2cd85465dc8ee6a3e0a69c3c7700d65 c4f010eda4778da4ee4586a9b26d0d226c87c590
-e3b5294edfafefd363b126911aa5516a101f45a6 c4f010eda4778da4ee4586a9b26d0d226c87c590
-8874a02a29befd1ac5b114c10c3ea048c6e5d221 ab56459661a163a89453de2e4404a9c4720a046c
-803ec2015e9600126cb6171e0a5609421705b602 ab56459661a163a89453de2e4404a9c4720a046c
-b5544f2a1ad952115a6afdc542a27f2c88d1342c 72065cccc15aa0c7dd4ca01d4e94a0d940e95074
-2730f6768992f49283edb69d1aac9d37cb809087 72065cccc15aa0c7dd4ca01d4e94a0d940e95074
-5d4f7056ed59e59623bbbd85b2f74e556249c7e0 52c27c99a4f69c0eb9e476d6020562b6221598c9
-afe2e2475079bd87cd258efe80162976b466789a 52c27c99a4f69c0eb9e476d6020562b6221598c9
-26c4e2713b0e6800fb5d2b82ee3993f3ec435e0c 52c27c99a4f69c0eb9e476d6020562b6221598c9
-4a42b435e56dbb371ecd358f73cf2818c145fdf5 52c27c99a4f69c0eb9e476d6020562b6221598c9
-6656765e7214c393cd5a33f371676dc15f399529 52c27c99a4f69c0eb9e476d6020562b6221598c9
-c3056239fc370a8b785a30c500a47168fed66dbf 52c27c99a4f69c0eb9e476d6020562b6221598c9
-e92b5699144ac78d19f68371f22a40f51dad173f 52c27c99a4f69c0eb9e476d6020562b6221598c9
-4050d599b128b7d378b1b72e985a3e9253dbd667 669a0345f0ac1c23363d1f0bdeba842b2c630613
-bbd95885abac8867f71a5234d006aa95e9690981 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-170efa99ebf354dffa356fedfff56cc26923d1db 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-074c3510feef4e4f7e0a67c9a3175aa4ecc6ed83 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-c9842a67f0a1a557f7a0669cbb415c64df956a56 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-e79efd59cf7e022bfdf0cbd78b4e678d123e78f6 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-46e92c19577c315836366d35d83bd31afc58c27b 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-652cef3020b5bf3653590b1c2510c5a75a0645e2 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-5fe5c6705df67fcdd2039b38b82cf3bb491431aa 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-7090705d83167bcda4b78be399039360ced1671c 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-cd31153b56e34e4fc593b7c9d0bf838252622cf4 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-dffcf89c5318eec4d06a88f38384482add4e5b4f 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-cc02b8140dc87f42ec348c35c573a9e07a09efec 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-4c0646630d8570e55b04856908b8c7da411594f4 6f0f6fcec388996a6bcf5d8a19287d3cc4ada013
-fbe8f7164d649e0d1c5651112edf1b7629bb62d8 e86bab074974510912bfd0ba0861d03f0a03adee
-b49df6a1e6df19af76c97da35d3a0973b82c841c e86bab074974510912bfd0ba0861d03f0a03adee
-7f459c64a8635355f5c74e3b6adee9e39d4f56fa 4c1383fc9e63f8e00378feb6d676589afdd32142
-01d053119f17f966d0702b0400677ea14cb5b64c 4c1383fc9e63f8e00378feb6d676589afdd32142
-4686f654f0a8e16334bcc42d42a343169447e8ff d80f8ead391a944af3489bba1a9955fa85305dc3
-1ca6bfaa1e9b0f1cd07366cc07b33ea4bcdd834f 3ab8e9bbc1db9875699e32375e238c27da8758de
-7043e9f8a7b357ad1263e5f2790051856700b094 3ab8e9bbc1db9875699e32375e238c27da8758de
-ebd21aeea7ef665b0ee84f1ab201c070c8f93def 3ab8e9bbc1db9875699e32375e238c27da8758de
-54f08412077005ca2621786d910ad3cf982d328a 6c65ca27c6debb4ca1e9be91363ff7098110b065
-ba200da19e62d06274f5d7b8f4d735efbe571cde e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-391d03925a1a8d6d0cc70c2eb584b054310a4382 e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-ee91dcc179677763f3452995f6d3c47323822508 e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-1f2f513fa2a954e4cbf8970c9730c50aa4584ee7 e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-960a491d8bbbef7840838252537f6c346168d411 e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-3ba7486051730ea362d645059dfb118a12b8aeea e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-47366fd364b91c0848091d77fe8de75647948ec4 e150b68267f6fd53ca35d1a15d39bbf9e91b8706
-664ddc1ef372f31071c9dc404f32dc195f22c3d8 2f8b66257cc50dff199bdf4cd9cc3904035f51fb
-c94f6bcd82199c47fa19d619522a9c466a8415fd 2f8b66257cc50dff199bdf4cd9cc3904035f51fb
-28111dbcbbffdc28f90fb79ba05b082cb39c2972 2f8b66257cc50dff199bdf4cd9cc3904035f51fb
-72ee02be532d6fafa6dda6865d8c4671cf7a9327 2f8b66257cc50dff199bdf4cd9cc3904035f51fb
-ea6a383ce993508a220ebe200878ccf716188afe dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-2eb03e28a28467dee2f31ea2b134a13a59d5c3c0 dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-a860edc592824056c8be1573ac0a04d951712249 dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-0db24dc267dbe22fc87f7ed532ba4644dbc79739 dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-5ce0413fc7a5f43b48cb26e9d32c62c57adabfb4 dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-eb757b8c4b0cd55def09a4420c1fc8b734cd7104 dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-b384dcd47a267741ba5402ca94d29e7b4d4a0bce dd954fc18e3204fa2a1275ca86cf344ee401c4a5
-43770637f052f6c838ed22165a5ea79d06c9e765 44383c9752c33153b5988412bb42831458a962b8
-2b785598fa235d5103fb79adc3fd3961dd559c44 f628c702887f3070bf53f9440bfd4272952a1d68
-b3856eb3965f519f450c153bdc93e08698aa6110 f628c702887f3070bf53f9440bfd4272952a1d68
-6c970dd7bdfa05d8886d28be67162f616cb40edc dd8db13fa6a68ec268ac038485db5b90d59ecfbd
-f70066a526bcef07fee4c3d835bf27c401a647c1 c7b024760b2a0d69a1445770f4cbcfd59a930354
-20d9a86a7fe46a2ce97fd8c016a423e757060ca4 566800ed48ae7204e424e3a2957bcec608032fa8
-1d062d27c341f38601b55acd65eba70a660f8dfa 566800ed48ae7204e424e3a2957bcec608032fa8
-3fc6d2d0e4876eb0897ba3233a2dc81ba9bda116 566800ed48ae7204e424e3a2957bcec608032fa8
-2561237054061969dd27ad5e50dea3de989b4e28 566800ed48ae7204e424e3a2957bcec608032fa8
-1bd81bf6a7dae1daa293026101aaf2104d77138a 566800ed48ae7204e424e3a2957bcec608032fa8
-d026acd490ff7b33f4c77510b49f85caac775a3e 9543854ad509ad6952a9e143d240aa572ef87fc7
-8f49e6a9ec792eab0d1f5b385b2e3a87db5c35a4 b42fc250839ba55eec1ecc186a8cbbe3378685c6
-939f905e065fda4de0f8f99ce6bd42bf1d8a59b7 a75322711262831110ca6b3e09816b24e72ce2a1
-571443c9e213df3475e1fbd05094917751401d19 a75322711262831110ca6b3e09816b24e72ce2a1
-5df04fceeba112aedccbf221457dac7608419b91 a75322711262831110ca6b3e09816b24e72ce2a1
-d9544f9fcb202e40eb91f0b10a4f3929af4b2563 a75322711262831110ca6b3e09816b24e72ce2a1
-4b0ad44a4746cfa66e8b323ba1bee0a453e4b9f5 a75322711262831110ca6b3e09816b24e72ce2a1
-9c0bf350c2b9fad5ccf2ce7a5a209beb2f7f5b4f a75322711262831110ca6b3e09816b24e72ce2a1
-b6ea0f4ab765988adedc941108480221b3737c55 a75322711262831110ca6b3e09816b24e72ce2a1
-a96db67f7469ab4b92fcbf3adb8ff6fb3cebd631 a75322711262831110ca6b3e09816b24e72ce2a1
-3419a0148dc6452f2056f5066900ae201c356dc7 a75322711262831110ca6b3e09816b24e72ce2a1
-bffcd52b62a8b5d67a4b3154ee88ebad07bdbc17 68df217b6b58b9fbdd15bea6d3aa9384589925d9
-e777858dd59d5eed4c58729cbd8a43d4ae15fd47 afe9a45d40d2b2f8d65031a20c2f104dd084f6ae
-fe67d27f63bdc2fe21de5b42016acb52a8fec3de 484e4e48d21f94dfa3ac47d8d16d89471dcabb1c
-52b866538a952374e280d03a4a58a4c3d7692284 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-7ec3c9a2b182fffbc89747d045995cc622e790b6 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-a251979c59bc5674184af96c11f845ca1b27f96e 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-3d5477b795833ac6a1b503cd6cc1ab4a8292da9d 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-9c324913bcfae19d721a8ccaa4de49d569ac0a4a 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-07472bbc56a1fb5810c4f790d8a1ce40f666a7cd 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-a1e3dc70113ecd979e460c5f0a233b991f2bf752 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-4221bf8eb140a4205a287e599e4339e6230f5aee 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-7bf97a76d0039b276385d1156af1807a51c63629 29ad2974dfec1584ea80b6ea1b3bfd6ee6777bd5
-dbb0b145bed3e1ca67f11e4006596d2f79c8d435 c13b288b0e0d5d60c4b7261c73696aa71ede610b
-f4a1cd02ca0448b36482b00453aca395eba65f2a c13b288b0e0d5d60c4b7261c73696aa71ede610b
-cd91280759149762ea79c7498eb50eaf0301f7a9 c13b288b0e0d5d60c4b7261c73696aa71ede610b
-3090dff78250f4eaef2b479092d1d82ce545b618 c13b288b0e0d5d60c4b7261c73696aa71ede610b
-f0d0173ccd024ab9a318e4508b15d9472053aa41 c13b288b0e0d5d60c4b7261c73696aa71ede610b
-a120c0bd308e80fe0d0cbd639e41f2f486ddc6d9 c13b288b0e0d5d60c4b7261c73696aa71ede610b
-5f28ffd442a1cb2dc0c143977086c7af9706c6f1 c13b288b0e0d5d60c4b7261c73696aa71ede610b
-97a8e5ea31e8ed3401482dacd7341f49c11e6587 e38a54402532c3d46fd4698364a9992c333a1661
-0144f77f87b1e73c6ca33fdd5b4de67a1ea075ff e38a54402532c3d46fd4698364a9992c333a1661
-f756c2c14f14b61fe59b2d2b04c158b387bc0331 e38a54402532c3d46fd4698364a9992c333a1661
-7e9703b99e9f1ebf15b096db50690d2931a860c0 e38a54402532c3d46fd4698364a9992c333a1661
-afe9b2fa20a5fc7c2a3f55f5a014c8d2d2c220b9 e38a54402532c3d46fd4698364a9992c333a1661
-c9558488f37c1449933fc07a7b0eb898da6f0dc3 e38a54402532c3d46fd4698364a9992c333a1661
-f7db101e6db7347104d784cbddb5f5868f02b802 e38a54402532c3d46fd4698364a9992c333a1661
-304b5b83aeeb9344b3a79ab50d4ea7aeaf615c3a e38a54402532c3d46fd4698364a9992c333a1661
-8b37a199620a1974b234e235dc5a3694d3549e4c e38a54402532c3d46fd4698364a9992c333a1661
-ada0b999f257a0990ef5429da67a2414d17e8115 e38a54402532c3d46fd4698364a9992c333a1661
-c1883ada25992170950310d72a7be7dc3d6bef8a e38a54402532c3d46fd4698364a9992c333a1661
-041afe629660f66c95bc6503504f38f1f5d6a130 604f02ff395d03f3cb1ebad4f6c416232ae1473e
-8706f88e29516635161187b02052fd8b2ac7ca54 604f02ff395d03f3cb1ebad4f6c416232ae1473e
-44371616e3c0a71a8c0196c2586266cd0fba0c0c 604f02ff395d03f3cb1ebad4f6c416232ae1473e
-1f57c789b1f0376ddfcfb6b35691436e067a837d 604f02ff395d03f3cb1ebad4f6c416232ae1473e
-bc3d00581f06066b3895f3a810977b2f1ac31c73 9f38d88c584f68bfa6836ed83ea564d17b5d9422
-c6c759c10531f192fa234108a840917ee01f3747 9f38d88c584f68bfa6836ed83ea564d17b5d9422
-811d0063de2d322c5ec4c6dcf44ea5ad0fa9ceae 9f38d88c584f68bfa6836ed83ea564d17b5d9422
-4d3bfe27240eb358eb46667df15017fb5e75293c ec3f3bb2e87516c4ba22b2e77d58ecd6be590a31
-52ae47a6dd7d6b253ee2f02f8ba689991e728268 ec3f3bb2e87516c4ba22b2e77d58ecd6be590a31
-65903365bef71011cf64648d1363aee945759c23 ec3f3bb2e87516c4ba22b2e77d58ecd6be590a31
-e77d3c5156813187eae9d0b435fd33fe3762b0cd 165a77880e49eb64b2204ef7bee8edb0a95acba3
-e064c9d1ca90e8743fbdb6b8be10c77d13e56ec0 165a77880e49eb64b2204ef7bee8edb0a95acba3
-63db5dc0dd6a66c7f7f186ee9eb0b448dbf4d379 165a77880e49eb64b2204ef7bee8edb0a95acba3
-ede151d90b6da9922fac974c86aefacaa26dc4f9 d57f62aec7ef33babc00f331683a796a0e16d3dd
-e3a4e152bac2e459e91ba7dea63aedd08f3fcf61 d57f62aec7ef33babc00f331683a796a0e16d3dd
-ff51796dd4524a9f97fff46b44f6c231cdc3e9d7 3485cca526a7229fee5a1e4550ec57dd30c026d2
-dda735d5169e6b604911fc3fa34eaa75d972a473 3485cca526a7229fee5a1e4550ec57dd30c026d2
-bc4945ae955eb3c3d7c4c6fa29570f52f3964d4f 3485cca526a7229fee5a1e4550ec57dd30c026d2
-ca0269b3fcd0c2679190f09ee860f22da4fc27ff 151a8104a4c6b3a1216c8a9fb1037c05b413a6c3
-d2e01b326c6841b6d3cbed4436d6f5ca7ba7ba33 151a8104a4c6b3a1216c8a9fb1037c05b413a6c3
-e96241a82b17828b6ccea31f2d188dca70f524b7 3fd88edec111f402ba54f7da1427115ea3b24233
-a3f2d265d2d53353ec1c1488c381f7dc92606bc0 65c52d18c879061595e0f24076abf4ddd67d4546
-54ceba56a244e1c85477926a9ca1cd0ef2fdba3d 65c52d18c879061595e0f24076abf4ddd67d4546
-2371f9f570c03a28dd6a8487ad169df64529b5b0 65c52d18c879061595e0f24076abf4ddd67d4546
-11217b16465a5a38ad1f11a020e4bfe3280e29d5 391a360fc918ce86c4197ad6907675e22fc0de09
-d9ec86750c7db6fba154a1e10ad8a55f92a1433e 1011565c1a9eb7d18e21c487ab6083dc1e4d9a6c
-ffa33e6da08e5d8950327e44f81668abdd00237c 1011565c1a9eb7d18e21c487ab6083dc1e4d9a6c
-75d9a45ea9fe52c05462f61ba749fb4076a2460c 1011565c1a9eb7d18e21c487ab6083dc1e4d9a6c
-cb85645d092207a654d8c2d75146abf7a6ca75e4 1011565c1a9eb7d18e21c487ab6083dc1e4d9a6c
-538c31c0225baf4caf030570fc841ec24343c4aa 1011565c1a9eb7d18e21c487ab6083dc1e4d9a6c
-bc5b8607538446a98d500804f1cb5351d719f9ac 3c98e3c9e1145dfec522c14e1917b0e1ee942954
-c9488392bbeb3cd16dcc187e12e0a2e79d14bda7 3c98e3c9e1145dfec522c14e1917b0e1ee942954
-c4d4dac7353d01f2da89a7e4a867936ffe4a0be8 3c98e3c9e1145dfec522c14e1917b0e1ee942954
-02610d69d51fda6ad23855a2fc97041280a0f288 3c98e3c9e1145dfec522c14e1917b0e1ee942954
-3de6f5284ca953f8303664d4d6f333c0babc6a23 3c98e3c9e1145dfec522c14e1917b0e1ee942954
-1a492b9f0ada98a18acc6849fcb910f7286bac80 3c98e3c9e1145dfec522c14e1917b0e1ee942954
-6286ac55844569be83bccb9a12b7a045e5199ecd b46e391b5af7cc7f22f7b4fb5b14d0a5792356e1
-0ec000c323161995a79b19bc0c2b2b12621357fb b46e391b5af7cc7f22f7b4fb5b14d0a5792356e1
-bdbdfb2a83bb29e1220954448f3fce404817bf65 22c6def32c847098521a43b0ac7b194e3b45e838
-c4edd536817b151e5fd107b8c51ecf74904a7f6d 22c6def32c847098521a43b0ac7b194e3b45e838
-c7760225a05776218fd78286e024bcc3958f8a54 22c6def32c847098521a43b0ac7b194e3b45e838
-c6681ce3799fe67b497ef10ddc99cf5b4714b256 22c6def32c847098521a43b0ac7b194e3b45e838
-46e31d1d76620253007240d82908fab1ebbcf1fd 22c6def32c847098521a43b0ac7b194e3b45e838
-79282b91532882d0e40cd0edb3c76dd9ab8f4af7 22c6def32c847098521a43b0ac7b194e3b45e838
-d4e9527993a09c741bbc812ffcc92d06ffb1ba4a 8e15a8b2ad0808829d8ec6d5ff1829cc891cf5c1
-c642c5cf94336be688cca91a4d2c0f36234ab4b6 8e15a8b2ad0808829d8ec6d5ff1829cc891cf5c1
-d1ab22ae72d8ae891a84d4126ca7e3c342b4511b b5b3cb7c024dd974bc44500fa1e23afb010b1bb7
-5a0647a16b8ae97a226040e8bd59cc98d12bf62a 3475bb1ceaf93c05dea6c840d7c5f3339cf0ee01
-352425e96d10c9481330c26439183ba9ebdc0862 4f40f9d87aaf045d475a93c4bbb4bf98604a97c5
-741ddf9e5b670d217460d9c6f63c420d87bbe0de a96546775e16ebbc7508dc72d20b36cc488ec708
-a5327c522985f8134b03fbfb5b8c1d3c8dc767d5 4b62d4130c2d78f75098865ae0ea7bac1f83a08a
-92cdd7e685ac79f8aa6add54c5bbd173b3e5f69f 4db5303bdddbc62ab0a27c2e9fa679545bd64ace
-c186ec9976f04a3124f9c3ce9b48d9236f4449d2 4db5303bdddbc62ab0a27c2e9fa679545bd64ace
-a623febba55c36d3239417f7abba0c7ffc1706df 1080fcc57995cbfa4c13ec71daafc153e9f26c06
-5dcea6c62cbc3080a4895c010697d563b9630ec9 22cfc0577dae9e60e1407545127145186ab8f5da
-c4ef86e19ad2778c5fb34f7adae4bbf8c7f941e3 22cfc0577dae9e60e1407545127145186ab8f5da
-2a0a92023cd02269ea7b44b878a1e65b53a2e538 22cfc0577dae9e60e1407545127145186ab8f5da
-a4a3d7bc7f44dfd4dee2d55f206a1e8447f2c80b 0ca624511900aff14fab5b4040b969e71a883deb
-02f16628d8201231d35ca8027711e0b1dc831f08 0ca624511900aff14fab5b4040b969e71a883deb
-32bb0f90f8636680f3c88747b8c2d2e385a236a2 058c7487867b6e8120cb2bb1b1146b0b745cb44e
-727cda26868b97e6e5e7497af3165fdcd8eb41d1 058c7487867b6e8120cb2bb1b1146b0b745cb44e
-af80afd648841204617a498e3d6a74acbd8b4f9b 058c7487867b6e8120cb2bb1b1146b0b745cb44e
-31798a6ab030811bf5cabd486a87285ab59ed085 9a239f1c448121edbf1d35ea834244edd0029c09
-7494b61b8681e2962fab4997e8ac13a18c3b0bc1 9a239f1c448121edbf1d35ea834244edd0029c09
-3f4d7a4a7fde8d052e57f2f482c748ff04bf7112 9a239f1c448121edbf1d35ea834244edd0029c09
-7cb45796b80aa5b75fcc6d516e27efa60fe97a80 9a239f1c448121edbf1d35ea834244edd0029c09
-f2e87ce7a6411a6383c91b80fca1c17d45007030 9a239f1c448121edbf1d35ea834244edd0029c09
-389dd9ba4984d4accbf6caee7ca09e8945fa88d3 9a239f1c448121edbf1d35ea834244edd0029c09
-130d82c58e08abc5dff9aaa17dd0221e96c49ca5 fcde59dc584a22f871c4bed8c68a41560383c06e
-feba2604517a978b293e1441d6239ca233a1fafe fcde59dc584a22f871c4bed8c68a41560383c06e
-e9aa0981b48f56f170394fec05148c5856a31e12 fcde59dc584a22f871c4bed8c68a41560383c06e
-965a885a42678f3106a634c0e8f52dbde57a3178 f580752681199a73b1a0e28a28b2293d7403cd66
-dd01a5b9d0d1e42e7a014db3c6ce2cd4ee7e130a f580752681199a73b1a0e28a28b2293d7403cd66
-f18e84ecd9360b3ff01d3edd1a7ed4c63ee21d1d f580752681199a73b1a0e28a28b2293d7403cd66
-72bbd845a07f81e73915728d26c5d8e15d93acc7 f580752681199a73b1a0e28a28b2293d7403cd66
-06ba0a8726b365c52bac5766c24778065f0cebe9 f580752681199a73b1a0e28a28b2293d7403cd66
-dc22c926bdf4e41981ac7823f438b6ed0daf3f56 f580752681199a73b1a0e28a28b2293d7403cd66
-cb198ca0f41e4ab6ff8986fa9d20bb418c3d265b 62b4a6bb3efd3e4c2f467435453f1e4af3e3c01c
-2877f26300ec90002a9abc34e31fe52aa6163374 4dfc8a82a33a63a5663bbdebc3ae486da56b9402
-1a37fe0f61b5b476309b1c320f26b107495fcc37 b7a5f8bc7a542ec77e64ac71f9d8dbfa64d9aeb9
-bdc7251e88899213140bf4c5e46eef61aff2e282 1fdc56b13039e6d1f6bc09f695de578ec66e86e8
-335d05e78828b6dff6d7f7fd970e5e06f1386193 1fdc56b13039e6d1f6bc09f695de578ec66e86e8
-f362c39edbd1939dc6a5ba09571de5eff4512bf6 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-5d961bd401837c9fffbb7bfaf9eb04fd7289cd7d c819829dd832fcf4bf37ee50bb9776a1c508dc38
-d7de4efa23122862d8de13b9342cd30a26b51914 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-2be406de38732ebb4cd40146276bda4896c6529e c819829dd832fcf4bf37ee50bb9776a1c508dc38
-0e689208612f9752e53ea0ce98112d58ff0c4839 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-b19d51e34049a9a063300c629192beebc32c9a18 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-0efd6fc3ad62c3c5ebdd8da463b4f2ee7932e83e c819829dd832fcf4bf37ee50bb9776a1c508dc38
-85acbc4a4946d50d9b038656f4fb917cb0351049 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-355bd6141cba94645bc87851f95a84dd0c352897 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-5f65474cc6521acad388492e15c9dbe014f08c2d c819829dd832fcf4bf37ee50bb9776a1c508dc38
-07d8363a4f00b69a4c6c5aff1ad5ee939b78bde3 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-123f43861518d8ee37df1447e2697782656c2592 c819829dd832fcf4bf37ee50bb9776a1c508dc38
-615dd97c36f13b28d983cfe6d612d7cb88eeb403 774af8f7dfbba895fc582cba177d077b4f4f3f18
-633a88fb29e87bf954c27fc9a531b122406bcbb6 5e6b9525e6868acc3354205b140553b286ed08e1
-ec29a54755306e0755ea0d0c73c79502bd221bf5 5e6b9525e6868acc3354205b140553b286ed08e1
-7f2b6eef436ddaecd8b4bcb1d95e7b7f805b7891 5e6b9525e6868acc3354205b140553b286ed08e1
-3c37a2ba8dafab5bf297706d0798b08965e344ac 5e6b9525e6868acc3354205b140553b286ed08e1
-18509af0203fea33d543fa266f8e4f2b53a3a60f 5e6b9525e6868acc3354205b140553b286ed08e1
-ee81788bdff0e1d1e0f1da80aa4d284d6f957531 5e6b9525e6868acc3354205b140553b286ed08e1
-0ce65ec9a4d93d4ef9b245c92b30c512bb835589 5e6b9525e6868acc3354205b140553b286ed08e1
-4d184bd4f22094bedfee5110162b91526c2cbb52 5e6b9525e6868acc3354205b140553b286ed08e1
-f147d3810ecc84112187b70a51719f3dcb6bcefb 5e6b9525e6868acc3354205b140553b286ed08e1
-d30d91115e3aeec3c0f6c752fb4614f0147d2bb9 19548fb13e5cb6f26e306ae284452ba73af1ca0d
-147841925c418e282491f844443c01cc418f4def ab83734f28acc1963f78e3c6020bc1b110b8768c
-2999b14d32a7637deebd0cd57349fcc95bc38dc6 ab83734f28acc1963f78e3c6020bc1b110b8768c
-eb7d6fabbd11dbe7342e7c2200775758808f6635 5f994a0bcde960f9293ed3e525682ff65e202b7d
-04b26c420f2a1890fa97f2e6b8875226df2b312b 5f994a0bcde960f9293ed3e525682ff65e202b7d
-b1477c06441b8dbe5f268556968e8d52934c2511 5f994a0bcde960f9293ed3e525682ff65e202b7d
-8f461a9db012e8de346908209a2c8227bc779995 5f994a0bcde960f9293ed3e525682ff65e202b7d
-febeccd706a4a75a7cab9fd844a59a3c80260324 5f994a0bcde960f9293ed3e525682ff65e202b7d
-d594554e464bf066a2920295f63861d8fa0de706 5f994a0bcde960f9293ed3e525682ff65e202b7d
-dcd9a997448b0fc8ccfb278ad688d14e31b32c78 5f994a0bcde960f9293ed3e525682ff65e202b7d
-4a79889120dbf3711c36b40f8dcc93c32b365811 5f994a0bcde960f9293ed3e525682ff65e202b7d
-6e33a5346fc446c9f2258234f82db40050d5f4fa 5f994a0bcde960f9293ed3e525682ff65e202b7d
-2b1e4cdec3588ebc12c554284df0947372087cd7 5f994a0bcde960f9293ed3e525682ff65e202b7d
-6573e224a81d46ed38cac1c048e2d748a1625227 5f994a0bcde960f9293ed3e525682ff65e202b7d
-26097a77657668ee5426f5fb552efe0defb24ca7 9789fc444a32f5f06ffb463e0e2ee1d168c2c47b
-353d806624b6c95b571acb48bc5f8c145f8a8a6b 9789fc444a32f5f06ffb463e0e2ee1d168c2c47b
-ae37eb3e45fbf1040468abe37ddcf5e725b7dc0b 9789fc444a32f5f06ffb463e0e2ee1d168c2c47b
-0611cd9706548a90f7f395c634b7b37ef323caa9 9789fc444a32f5f06ffb463e0e2ee1d168c2c47b
-e9e349c71f86438218cf85f9b6b23220feaec1a4 9789fc444a32f5f06ffb463e0e2ee1d168c2c47b
-bd512c576ac4ad0332078991946695e4edc33646 9789fc444a32f5f06ffb463e0e2ee1d168c2c47b
-d6932b5db99a49dd77880e9c97b16b0ea079ae5d 9c97f22ae000a6f0fc73fd133daae280027c825f
-b4a491c7621969062a0c6bdb8589b512e1ca8a42 9c97f22ae000a6f0fc73fd133daae280027c825f
-07c429d00411a2e6d634395357b3cdd661c44e2b 9c97f22ae000a6f0fc73fd133daae280027c825f
-bd9db2f3481a1ed54881b8c25920add929db6e1d 9c97f22ae000a6f0fc73fd133daae280027c825f
-fd59a8cfd1c94842a95945c9b5fc507c69eb8800 eea7edb1df58d957c7fe8f27d42facd3ff15c2c2
-c440960afe9035947fb391ed5a55ad7d27ded23f eea7edb1df58d957c7fe8f27d42facd3ff15c2c2
-ce3b4a85db4aa5ea815b5a4f91aaf0de10497681 eea7edb1df58d957c7fe8f27d42facd3ff15c2c2
-aef98258f69e1d55f593d1b2ff0f57ec198c1bea eea7edb1df58d957c7fe8f27d42facd3ff15c2c2
-2c1204608f01aabd63b4a67c7a9f469746210e20 eea7edb1df58d957c7fe8f27d42facd3ff15c2c2
-a4509196efd3a715c1df40403ab1e3392da0d779 36ce122a2cc249b527184ac873a804fbf1f1d41a
-5421cc6e29fd3074a141913e02ba8f0d389e3ed8 36ce122a2cc249b527184ac873a804fbf1f1d41a
-b5ce319c3c1f7eaf7fe95a008ed2053764936728 36ce122a2cc249b527184ac873a804fbf1f1d41a
-95ef340a5cf0ed75b3da488abf9358439df68210 f4c6b5b54f09b4ae76bcdf78de42499c7484542e
-1b91399c097ee6d1969fe2843d554ee54e2c13d2 f4c6b5b54f09b4ae76bcdf78de42499c7484542e
-79395cdf4bcf2331a7b6ffb55e2747bedc005033 f4c6b5b54f09b4ae76bcdf78de42499c7484542e
-833cc5f09846fd5122158285575a9c7cb4c9f9ba f4c6b5b54f09b4ae76bcdf78de42499c7484542e
-36580973912d2d1c45f4af0f8554e1b2568a0383 f4c6b5b54f09b4ae76bcdf78de42499c7484542e
-99e48fcafcb8e2cb959a2cf57adc88a9937a8361 b7a7b0cdf55be9ea8d3e36cdb94fc48128381cd9
-d394794d57b169107cbcc16869f2a38d4c6b4676 ee57104b02a3549356e11b5e7f309dba2ba8101f
-d84b2ab0931dceda32617448d3c297aaae52d213 62e80d1cc9640d86ef7404a699495631bed314d0
-7bd895b11b944793e21b95ed1c6c9918122330df 62e80d1cc9640d86ef7404a699495631bed314d0
-90e4c9d40729a0b79bb63d10814ceb70522ca912 62e80d1cc9640d86ef7404a699495631bed314d0
-0b7909efdc7726f518ed4d3975e8a95eeed686cf 9af565b7bcef55ac85ca05fcb96c0f617e8e12bc
-693743a639184173a7b2acaed22aee385e2f6b6c 9af565b7bcef55ac85ca05fcb96c0f617e8e12bc
-450c684686d0f3217620131c414e4591d2b0027d 9af565b7bcef55ac85ca05fcb96c0f617e8e12bc
-6f7090f6b5f54151cace13ef326ca1734729cc2f 9af565b7bcef55ac85ca05fcb96c0f617e8e12bc
-427fe47610b9d2e2550ef7447ab82029589a2107 eb6d223babee562b23f9cd90b4a734f5fcbe061c
-a0d1a7eedc7c5939e577c0dc899710acfb479688 7889f70b251906e33fd8b71ba71f715caf0ae0e8
-a45f3b77a1a1161686cdd5e460f4ac66d8ea6bc4 98e6b2e680834a2d0f1f4ea8de10ed6cd9668eee
-09d9299642bf79e49d6c8c6352f4c7bc1b959b63 98e6b2e680834a2d0f1f4ea8de10ed6cd9668eee
-7d755bcb6d55bcfa3a117f142a8f47047a878530 f50f60d9291ea4abd88c287fba0de5182ee33823
-96e822b45d1c18e1ab2eca7649280ecd4ce5d223 954a5902e29b426663175fd7ef6d1535252e7e1c
-1cee28fe6d2c199f4e87986e6489840cd035d2b4 954a5902e29b426663175fd7ef6d1535252e7e1c
-11566cf7df2baf69641345ab52cd10da701442f4 954a5902e29b426663175fd7ef6d1535252e7e1c
-3d5d3d52da33e2df5a4dc3569015f15bfea0a2f4 954a5902e29b426663175fd7ef6d1535252e7e1c
-fee73462d16936bb2c2268872bbbd1d5a9ff7c9f af10caa0dacd66df93113120eefe472e081e6c3c
-e9e53c0dc5d7c6808f7ac0ee8aace3cc64429b14 08e82e62de9fc4ab93b7bf31b7e024b82d667a77
-6c54516d72dc000c763677d115e1722f4257d5e2 08e82e62de9fc4ab93b7bf31b7e024b82d667a77
-4585b3102fdd5373215ac74cdb84207add5a9520 9fdf973ec47b48d15d99358aecfb44aad103dd19
-8549a53cbaa53113a0b1f8bd9d41eef242ac4d9f 9fdf973ec47b48d15d99358aecfb44aad103dd19
-33da38a239062d87007d0e768c409058424c2d4b 7748cb09774262d3ad3670e9a593d8a5fed6f8d2
-b5ca2052ea4eda06ffb98c4cb399baaa635c4cc1 1c945bdfe883b39ad52bf58320d01a6c2b7258f0
-ce11069fac907dbf1965dbea0d7eea2948611edd 97cf05821b3051028c6cdc1391caed061aa0139e
-7ca27eb76887251fab128d8534404c82bf76e7cb 97cf05821b3051028c6cdc1391caed061aa0139e
-94c1331564a5dad9e9e90914aeffd82211651587 97cf05821b3051028c6cdc1391caed061aa0139e
-7a391e3a5094648c5f28d3fd0fee53715c707d7c 97cf05821b3051028c6cdc1391caed061aa0139e
-e1f9865646a609732d532beb5898708dcaaf4e4f 97cf05821b3051028c6cdc1391caed061aa0139e
-9c2f3c5cab578c29df91fe1c16cf4aee431b9b0f f463f33142508f423515b1f0cd21e2aa06b517ad
-48d277eae1c2d55e108c85b21902a06618e4d915 f463f33142508f423515b1f0cd21e2aa06b517ad
-d9e0f1973d8fa1ddc2a700c7ad599e9f69039d77 f463f33142508f423515b1f0cd21e2aa06b517ad
-b172ac631048d6b69c9aeef5248ed31c4afe7ee3 f463f33142508f423515b1f0cd21e2aa06b517ad
-d6e821203ce60ce0b016e98e40c4137bbeb6ef32 f463f33142508f423515b1f0cd21e2aa06b517ad
-960ff09b9cfbe4f7d4dbcaa20504d66c737b2ea9 f463f33142508f423515b1f0cd21e2aa06b517ad
-3b524cb1b3eed54b3c02569ccb14167d60fec9c7 f463f33142508f423515b1f0cd21e2aa06b517ad
-516b6a76af44e78a36489dfaebf92480be2eb889 f463f33142508f423515b1f0cd21e2aa06b517ad
-9efe4eef9aa5d6347cd66a4ad36162244388e896 f463f33142508f423515b1f0cd21e2aa06b517ad
-660d90151d4f05d12fc6c8fb279d0bd50b55f75a f463f33142508f423515b1f0cd21e2aa06b517ad
-9ed0713b30e799c8524a8b5638116b9ed6d8ef1a f463f33142508f423515b1f0cd21e2aa06b517ad
-1cbd421e4daedefb0f25636d1037ff3a06671a09 f463f33142508f423515b1f0cd21e2aa06b517ad
-91ec6b8451ea809f698667750bd393fac951c0ef f463f33142508f423515b1f0cd21e2aa06b517ad
-9fbe683e331966f1789d1c4858d1d259b2bc2b8e f463f33142508f423515b1f0cd21e2aa06b517ad
-3caf1ec340327c2c0f607096af2cb72ccf52ef31 f463f33142508f423515b1f0cd21e2aa06b517ad
-e3b2a78107e0293a550f2974a107f8e379ed1d2a 9482722265fa87b62eb30ef46cf11ae42d64eea5
-b4e3aa121c96606025ee07511f71362c31ce45ac 60425b2353bd92196039121f2d5de05c4901ec8d
-bdf641acf1aea44abb1c7b61e6c4e58c93c2c2a0 e84cbbf16bb3b274c051ed7d70a4a68131d15123
-4b4c598710b4baa44cf1f15bffae534c7db37f65 e84cbbf16bb3b274c051ed7d70a4a68131d15123
-e02c5a96c489005012bf6349172a844845f13cc6 e84cbbf16bb3b274c051ed7d70a4a68131d15123
-2d9c4ac1b3135b6440a977e8e2b95c6406e9d44e 3c11b712ac9f71a74725d864c252076e52a44eda
-c66f833de8b3f36e7f80aea540d2677a595c3614 3c11b712ac9f71a74725d864c252076e52a44eda
-c84f620ed251b122950320f293643dd7bab297e3 3c11b712ac9f71a74725d864c252076e52a44eda
-264700851369a4591a1a953c7cdb155580cd30ad 3c11b712ac9f71a74725d864c252076e52a44eda
-00a85bad8d973705735e4c6e313c5fee6e000c2f 3c11b712ac9f71a74725d864c252076e52a44eda
-606783b68882dff331d5302e046acc43e14eb1ae 3c11b712ac9f71a74725d864c252076e52a44eda
-f99f399d49dac5d7bb83f6eac9daa807ad000c3d 3c11b712ac9f71a74725d864c252076e52a44eda
-bfc5f124cba832156933af3b4486e122bc89c4eb 3c11b712ac9f71a74725d864c252076e52a44eda
-df7bfac0ec8836cf24e1c0096ca27e74cba61d74 3c11b712ac9f71a74725d864c252076e52a44eda
-9371de42f797a9a240044f54021dd614e02a1bb4 189cc12132166bcf0fdaa4a6faf72967ac98b122
-68b61902416568a789546b79fbf18b3a8a96d88f 189cc12132166bcf0fdaa4a6faf72967ac98b122
-977226c7ce417a968274975a09d849d4b6ce5d00 189cc12132166bcf0fdaa4a6faf72967ac98b122
-0486546d867567b2bcf83b59a70907b8f749b55f 189cc12132166bcf0fdaa4a6faf72967ac98b122
-9a57d0079e67ed9f57b147d67645a54fe2c3c97b 189cc12132166bcf0fdaa4a6faf72967ac98b122
-f7182c0801a28580d24957c61a93828735184f8d 189cc12132166bcf0fdaa4a6faf72967ac98b122
-643277d120c782f2be3afed52586faf8e0d5a653 189cc12132166bcf0fdaa4a6faf72967ac98b122
-92aa2723b5946963ba6c9a6a6f992963e7911cab 189cc12132166bcf0fdaa4a6faf72967ac98b122
-ee35d13c3a41ccd774249618daab5bfeb7808ce8 189cc12132166bcf0fdaa4a6faf72967ac98b122
-19a9e97d5eca6e02228432ed9b7959aca91093dd 189cc12132166bcf0fdaa4a6faf72967ac98b122
-6464ddfaff295b1d7f18afa944998e3079b35bf1 189cc12132166bcf0fdaa4a6faf72967ac98b122
-ebc6fcb54232d862d46690bc0689c8dfe5f363a1 189cc12132166bcf0fdaa4a6faf72967ac98b122
-2edea3d7c609624a58c23a79db078dd8dac77b69 189cc12132166bcf0fdaa4a6faf72967ac98b122
-c65872314a8766753d72c99a12e0eb47ff83384e 189cc12132166bcf0fdaa4a6faf72967ac98b122
-b2a382105c7a72674d978246a5185e75b23df888 72d30abbe3e1ac8d206d8707e1a5afb7b5cfe9d1
-22b823828ff5c30b0eedb7f115591400ebb3247c 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-43adf1df1b7d15c04d92feaad6f3f4638b128296 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-930c43ef120845392c911f779263ddd8dbc49b4d 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-6b2b4e904d05a954461af77187400d6497bd33f0 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-ea7fde7364e34a82e82b12566cb460e676d9d9f4 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-021fd644ff0d8b6f3c7fc690b958e3eae12762cc 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-4e2705ce00d085d4c0255d323567f7cb390f64db 35952d8bdff87a40edd2bf71d6f102b03c5a2fcd
-83821afb3e14819a9dfe178e6519220265eae5b3 a188721b0aba2d8d26b7895f921f3e5c91051a4d
-098345523985460aa2781d8232dc11780daa54f3 71ece6053a93f2c06ae9a8bfe863adb6e2f18981
-dfef87f7548cb10387bed1ad37a94fd2cb276177 97189f4067ed714bfbf3340e5975167fc51047a0
-39a07fe80436b43efab2ecc3a98b939210fc81cf 60b48a0cff430ed572e95b5fb6683f04c68c1bee
-846485a648e589281d112f541cdb69a06ea42e85 925c77431454641dbd6fdd0dc090377f3faa71a2
-78274e76db7383b987f177c3d50ebf7002d809f5 c39432490f7640f60aee7f2bdac837208ce88b16
-a8b82db9945f23e909eebb1e0dd3e22b87440449 745c540ed56104faf541c85fbc1c3d712ccfb20f
-2525cd68adb312c020fa71edf1318ebf2ebb9dac 745c540ed56104faf541c85fbc1c3d712ccfb20f
-f56ca02c7a1f205df2c0ded2570b141b4d3105ec 745c540ed56104faf541c85fbc1c3d712ccfb20f
-3d9aa8a474cf9b1255b69793a42f5e25280aeca9 0f1a16d52c468c4bdd0077d6f4f06bdb12affddc
-6af11c4085f42ab65aa483a04dc661538bd6fe14 d5c1315f0ab91f8967f5cd1fed94a6b25378e2ed
-da070262236decb31394606fe35efec3fb0d669e d5c1315f0ab91f8967f5cd1fed94a6b25378e2ed
-c3bb4a6d50cc7f011593ab7a624c2ab4e41b5fd0 d5c1315f0ab91f8967f5cd1fed94a6b25378e2ed
-d0e0422d8ac93bd18f18925efd80242960b32acb 175227de95e0d10c44e8b876d72e40a68cb0f0b8
-113321453081317de059351f987a254e34a934df 175227de95e0d10c44e8b876d72e40a68cb0f0b8
-bf4cd00725aecd8f6bfca028b5fab5b6b9666784 91400e8a0d8830e777a33e68c829779074e391f1
-dcd652fcc52e9c93a5539468640ffcff8455d758 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-91589d3fbd4e627f79b25e1d23b44a7a8ab14dbb 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-de2252c4c96c28a7f0c3a834cdbba456eaf4028a 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-299b195d303a1c8cd4b8210502769b72e0e98e57 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-92d610dce043ac64680c73a1e671c2153521cb11 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-8b68d178c8357024d3a1a891a511f10b0497bd69 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-67fca100345df74d4a5f7ea37012ec58fed18c9b 1de8e5b9c1f77b31b396acd1dcc4dc93eac2d36e
-b5c8db11d5989d761fefd4ac0435e1e559e148a0 f3cc4aafeaca1832f772df51e1cd889cbca21616
-71823edf5bdd19945bcc24ff9566b85dc304d652 f3cc4aafeaca1832f772df51e1cd889cbca21616
-0eb98b4442bf28ed516fc5be8c1bdc710d94077e 42aa2208877d58260596095b0a3d6c1b6d9377ca
-68dd494f57a6c5ea3d9c7c32ac4cf2b8998a7a4c 42aa2208877d58260596095b0a3d6c1b6d9377ca
-e9a69022a7732b4d154e82616fac15c2e10783d2 42aa2208877d58260596095b0a3d6c1b6d9377ca
-4ceec89038e93ba1790541d710590fb30e4797a0 42aa2208877d58260596095b0a3d6c1b6d9377ca
-4819f1923d99e1b638cc27128d7ae864d5180e83 42aa2208877d58260596095b0a3d6c1b6d9377ca
-cb0c5c1a6922e361da8c7da0bfa56522f35e06fa 42aa2208877d58260596095b0a3d6c1b6d9377ca
-ea3e7d87226c38c7bc42fd0e7ca06024b90b7d43 42aa2208877d58260596095b0a3d6c1b6d9377ca
-2994ae61386a5f74528a0674f12954330340a17a 42aa2208877d58260596095b0a3d6c1b6d9377ca
-a8aa634d762b534b0bac4db8ac5b80d445b2139f 42aa2208877d58260596095b0a3d6c1b6d9377ca
-1b6af2ad6fb70e7415f63edb2be0eb6494b200b3 42aa2208877d58260596095b0a3d6c1b6d9377ca
-0756ce26d310e09c17cd843ca7bc9dc4a08edfa0 42aa2208877d58260596095b0a3d6c1b6d9377ca
-75d5f59eaafb44e28cf891e17992fe3d852d380c 42aa2208877d58260596095b0a3d6c1b6d9377ca
-5703ec497e5e43cd36fd654eba770b58e976bd4f 42aa2208877d58260596095b0a3d6c1b6d9377ca
-32bd12ad489a9ebc3adec4a46643495e405a5dfd 42aa2208877d58260596095b0a3d6c1b6d9377ca
-307f10153cbb644b874841dd97494ad27fae28de 42aa2208877d58260596095b0a3d6c1b6d9377ca
-f6ed4cd34b4a2efaf4fcfa99febff3d0839dae3b 3575a1d82f85474d8f9fc1c64a86863fd2cb7d05
-3a60539a7c359ecf8bdb5118617dca7736663da5 f327627aa220dd35917e406690451783c5287bf3
-fc924d9cb269d392b1e3b856cfc3093f8a62627e f327627aa220dd35917e406690451783c5287bf3
-27a555fe646234af0b247db76b96a30aeae8b5bd f327627aa220dd35917e406690451783c5287bf3
-136c74ba7317eb06eb7af845fba37949972a4b0f f327627aa220dd35917e406690451783c5287bf3
-5002fbd7a71998b9a8ad4e72299d0698ebc66b85 f327627aa220dd35917e406690451783c5287bf3
-dc3e09b9453f3315f1d64659919b6ec7d5c13e6e f327627aa220dd35917e406690451783c5287bf3
-fd7fc4d314e37feecc529cfc6ae663f9128d037b f327627aa220dd35917e406690451783c5287bf3
-fa721c648a6c5d9987278ee99c7a860f3379a0b2 f327627aa220dd35917e406690451783c5287bf3
-8ab82c93f67ff1ca4e9ac044e402bbc04b6237e7 f327627aa220dd35917e406690451783c5287bf3
-cafc23cadcf8372a5d372c4038f9ded5ac4a7042 f327627aa220dd35917e406690451783c5287bf3
-1058b795d4c58415945ce559364a44b7afeaeae2 f327627aa220dd35917e406690451783c5287bf3
-edd029ed3f9a3dc4d947739fdf1fee513aa8e381 f327627aa220dd35917e406690451783c5287bf3
-35f5d3e5a1b3be54c053e505633a6d094794b04e 775f4bcd25dad6731e707b1a06027aabe5592ce5
-a2297b089ae1e521c0426163ac2237b4e081097f 775f4bcd25dad6731e707b1a06027aabe5592ce5
-6209c4e9e039256171bbaed00d38bd611591ad8d 775f4bcd25dad6731e707b1a06027aabe5592ce5
-8ecf0599fdddd585943b8cd75c1a39d8ba921dba 775f4bcd25dad6731e707b1a06027aabe5592ce5
-0d2e4015787c35b9944bbe21a22c282c3b8baab3 775f4bcd25dad6731e707b1a06027aabe5592ce5
-03ed280e990e684e76dfb866fffd9750f29a4480 7fc69dcec3eea69498527f9547c8932a2800e495
-65dc508c5ab06db47692e61948ce5d1d28ef53e8 7fc69dcec3eea69498527f9547c8932a2800e495
-0ab529b4827be4f087e9fe799029e266e2f94d5a 66ce162de3bb1157bd726a3d994b7527f53c8782
-ecb3fdd66e78c696765942a7f2f7a5839b7f7f01 66ce162de3bb1157bd726a3d994b7527f53c8782
-b1860c97689593135c21b022560b09aef6d6c487 66ce162de3bb1157bd726a3d994b7527f53c8782
-1dd38326b57ccf1d782d54f421e34a081520a5e8 66ce162de3bb1157bd726a3d994b7527f53c8782
-19fed79594b6597d94ef7920c69e57e789d77cfc 7c0fba25fadf81237fe8818e57c766b4365ca937
-abb7130fb6a0ff60731eeca3187988618b0a8950 7c0fba25fadf81237fe8818e57c766b4365ca937
-edfa01f8784d8381f5ae7d0deb90bfa26011178f 7c0fba25fadf81237fe8818e57c766b4365ca937
-be6377063ed8057ca57e6a27d7b55179406ad36b 7c0fba25fadf81237fe8818e57c766b4365ca937
-ea3d8d0e509adbb7eab5f2e8b4788fd9f5e3ffb3 7c0fba25fadf81237fe8818e57c766b4365ca937
-d96e69a3f5c958ed5107f5ef95a1a7e7700f675c 7c0fba25fadf81237fe8818e57c766b4365ca937
-478453eaec8d1cbe55d45d27032bc133ad738102 7c0fba25fadf81237fe8818e57c766b4365ca937
-df49e15279c2802bba4a868f6f9229fb246f8c59 7c0fba25fadf81237fe8818e57c766b4365ca937
-69da31a8aa19646a275e609f8a9c232c41e4ec70 7c0fba25fadf81237fe8818e57c766b4365ca937
-b0f66714352e40ed98dd714f503940dec11f866d 7c0fba25fadf81237fe8818e57c766b4365ca937
-5a28ce5b290a051fe339550044730f26e2830168 7c0fba25fadf81237fe8818e57c766b4365ca937
-c484b6cce489a2825faa49424043959b271cbf4d 7c0fba25fadf81237fe8818e57c766b4365ca937
-06c0f9f8b10e57f1476e45a98cecfe5c84c61b1e 7c0fba25fadf81237fe8818e57c766b4365ca937
-244accba4f76f1eefe65b756be2fca7b4a7e0ef0 7c0fba25fadf81237fe8818e57c766b4365ca937
-b449c2fc43f62ba2255f092b892e5d4a8244d2a7 310abcacc74b8b3d3a52598cdf6de05d354e8094
-69ae1816842e655e8e340029c0d58a0249597d59 310abcacc74b8b3d3a52598cdf6de05d354e8094
-997c6889ab549566407cc6b255a5dc762f73120f 310abcacc74b8b3d3a52598cdf6de05d354e8094
-baa27cf88709423174d8778135d9c46b3e7e7dc4 310abcacc74b8b3d3a52598cdf6de05d354e8094
-814191e966c98e811452e60ac3558d846cde9355 310abcacc74b8b3d3a52598cdf6de05d354e8094
-7631b94885300bd777d9017154904d1aa1017a9d 310abcacc74b8b3d3a52598cdf6de05d354e8094
-070310f98d545181e0a90c3e4f9ccd0506f10685 310abcacc74b8b3d3a52598cdf6de05d354e8094
-3693dfa24a02c8c5f824e17d4fd980552c2e9f48 310abcacc74b8b3d3a52598cdf6de05d354e8094
-347a95855d1b9affd13377506a5f28630ddcf455 310abcacc74b8b3d3a52598cdf6de05d354e8094
-944831dc8d97c90dfb96fc0af83aaf9fcd8ea8c3 6e7c3f25e101124c2431cfeafd2b4fe956602221
-c7e514454898d663ab22dc1fb046fb82964ce101 6e7c3f25e101124c2431cfeafd2b4fe956602221
-0c4590b362b6bc974c476c6ba6c769b16325d763 6e7c3f25e101124c2431cfeafd2b4fe956602221
-bf98d1c679aa0fb3c1cb12323785e59e1b627517 6e7c3f25e101124c2431cfeafd2b4fe956602221
-6f9a94b7c41aaf18848259a50991921f72b3bfec 17947546138c6f1f9ff6aac2a41b62076e08fad2
-c9b9f93bd8f78d034a8f33f0909ca5e5d4984a69 17947546138c6f1f9ff6aac2a41b62076e08fad2
-914dfa6e3c45861de0b03ead37f9ad438b64e3ea 17947546138c6f1f9ff6aac2a41b62076e08fad2
-8432e3e70046b5f5bcce91ccbdad68311211c53f 47a41f6a34d1a18cb2b1ebe1d096cf08bae5a263
-7e407eb750e10ffcaff1af0bb9513403c5fe72ee 47a41f6a34d1a18cb2b1ebe1d096cf08bae5a263
-2fc8eb76e420b449f2a51aca41ff285cf50be55c 7544a6a165c177ef73497521b10dd210055aa789
-d4736567a4263ee623bc5900e124917a66f3f15b 7544a6a165c177ef73497521b10dd210055aa789
-bc2db9a49ee2faf34bbd574e7673c222e77c7fc8 7544a6a165c177ef73497521b10dd210055aa789
-cee221bb44239421cac7ae8351f61282151576fc 7544a6a165c177ef73497521b10dd210055aa789
-570e36b1e8d148410de0e95722ccc93c61fac23d 7544a6a165c177ef73497521b10dd210055aa789
-52730cc1c90bef142691f1df732c35b4a5c6d9ad 28d823183abde68635df95b0046434d7d05f8995
-9f667080b65a445b76ee218253b31354f035792a 28d823183abde68635df95b0046434d7d05f8995
-31310800de93031c3a981a8973c75d55b4b0d81a 28d823183abde68635df95b0046434d7d05f8995
-ffacf3d909ac46ca5e8fdf1623488f93179c4413 28d823183abde68635df95b0046434d7d05f8995
-d63114671a5e493529f2d5ade6d9949d0a939884 28d823183abde68635df95b0046434d7d05f8995
-45a17a411d1931161ab5259b5ac9e5bc2db238b7 694a106cd9e26104507d1b99bb70139ac6d8837c
-55872bae7229c5b28edb70c74e4c303b241b4b73 694a106cd9e26104507d1b99bb70139ac6d8837c
-d25272fd321f378bc1f5f99ab668be6700692bc3 694a106cd9e26104507d1b99bb70139ac6d8837c
-bab6c4327b67a0568fdb6fa40ab0ec86f68e57ae 694a106cd9e26104507d1b99bb70139ac6d8837c
-481c1236ebefa0665d51019069d57afbb283f368 694a106cd9e26104507d1b99bb70139ac6d8837c
-719ae08498e7860e5d8e9c70a35c5f7c1239e63d 694a106cd9e26104507d1b99bb70139ac6d8837c
-57328c87f7acc09b83d8df7eaddf2bc8d8f8aadd 694a106cd9e26104507d1b99bb70139ac6d8837c
-3376df2b68bae6cb4514282b9a499e2ee90b5699 694a106cd9e26104507d1b99bb70139ac6d8837c
-9520862fb4d0cb0d851f4c8261eec70e7accef71 694a106cd9e26104507d1b99bb70139ac6d8837c
-083bb8a2d7f87ef567d97749231b2b7420d6f487 694a106cd9e26104507d1b99bb70139ac6d8837c
-4ff6453859e477ded82614aef510f58c5cf32a24 694a106cd9e26104507d1b99bb70139ac6d8837c
-61dd5d0db834113929fe72d0d7852acda64574f6 694a106cd9e26104507d1b99bb70139ac6d8837c
-5e6cbc3e9d0c86aa94f42a184f8062b1683dafae 694a106cd9e26104507d1b99bb70139ac6d8837c
-9d89b0a2a346a8c8791a71343f544bba03a285ec 694a106cd9e26104507d1b99bb70139ac6d8837c
-b260a4dcec3e93cad279587236f2961469e981e8 694a106cd9e26104507d1b99bb70139ac6d8837c
-8a2c5dd99b1fd5e0af3f11c0f5cac6f34d5a75b4 694a106cd9e26104507d1b99bb70139ac6d8837c
-f0a7992cc276f5d331635799c06b70612bff1872 694a106cd9e26104507d1b99bb70139ac6d8837c
-973d6388d577039642f2ac6bddbe9a2c44434ddb d50f8e1abf06c796911ce2042676bfb2cd3f4699
-1a130d716f09203d5088c2453b5e3ad0768d8c72 d50f8e1abf06c796911ce2042676bfb2cd3f4699
-7d992e646d3d46c3d72999814edba85547cf54bf d50f8e1abf06c796911ce2042676bfb2cd3f4699
-f9ba777a1ee74f9a46818092b2165b06a30205ad d50f8e1abf06c796911ce2042676bfb2cd3f4699
-ba3c3c32860f7d179d415a642dbc13fcab7d7206 d50f8e1abf06c796911ce2042676bfb2cd3f4699
-2310a34a9126bf90b60b6663d141c65473684dbe d50f8e1abf06c796911ce2042676bfb2cd3f4699
-4cf6a05b849fb85849e3a49afdce6f40957da56d d50f8e1abf06c796911ce2042676bfb2cd3f4699
-dd36e37d5d176d4f55eb7e91ae9c8e0c20efe39a d50f8e1abf06c796911ce2042676bfb2cd3f4699
-6a5a0e788b7758517b33aa249544c24f09e08757 3deaed18acfb9227b326eab6c4c54235527d8ee6
-8d67876e4e2aa9b6c3490130ac8bb9f5c2d6a97b 1da646f504fadcf595b71f8d9c2bd247e120036c
-fd844a8b44a1ba16ce123e2771f5104a777e173a 1da646f504fadcf595b71f8d9c2bd247e120036c
-52fe24eaf905b63aa2b0341cb8f9ba1bc2fa60b0 1da646f504fadcf595b71f8d9c2bd247e120036c
-0dc295a7e95e7f14ef1a1ac22ca0b2fa0a513756 3d801efd07328dc96e5b45cbf52e5a9699351e9a
-c7baf89c7755399446c42f06bc0edcb63cd59c32 38b843aa39cc5f4d033faa8aa56822896c49dbb7
-b56050782022b7ee9ef40d0dd50de504cd0a3c35 c3b7582408cc27dc4a622b927735198e10bda950
-0731a415e104659ff37451affa27f1d3b31ae9ba c3b7582408cc27dc4a622b927735198e10bda950
-06074dfacf7305afbd6ace7bb3e21a93e8ea05a2 c3b7582408cc27dc4a622b927735198e10bda950
-446372b2fb8ca2bfba5fe2aca1c0eb5cb76c6a21 c3b7582408cc27dc4a622b927735198e10bda950
-64204999879f67b071a99fd4225fae4c74fefdd5 c3b7582408cc27dc4a622b927735198e10bda950
-3fc1dd33ddd32bafd12c7a087ed815f1fe2886a5 0fe0aa1a13e031db72acf5c554ff6dfa7f3a69b9
-05751bbe11361ce85403366a9ed4d4a1d57f6524 0f5e524f1c3ce6b1f225a23559a6e03dc4266ab7
-5a143a039eb1c0c02fa4f9ae031832a2189ffb0a 91dab8a0996c688824d4a9f06c56b30f01eff1c5
-ed2dd692b57300b4d2067e61c24641578539ca2a 91dab8a0996c688824d4a9f06c56b30f01eff1c5
-61c761a53c3d4b189283b1487770319371eb3d7f 82d399f7e5214afb1c190a55a442e44e6193578b
-722b69391a364177bc80b0357912836db04fbf7b 82d399f7e5214afb1c190a55a442e44e6193578b
-0d01251868cacf13141f1bc7d5991d996e4c07b5 fb29857cc0030a11a4a7862c4b4373d0d64e9a5d
-e32a12e1f3306e5897a13e9ab8c02fade7a33b9a fb29857cc0030a11a4a7862c4b4373d0d64e9a5d
-dafb131805ecb752111abaffe66c5fc37fcefb38 fb29857cc0030a11a4a7862c4b4373d0d64e9a5d
-f1fd9d7946b7f41255d3c51d5822854555443ffc fb29857cc0030a11a4a7862c4b4373d0d64e9a5d
-162bcd2d5c1d9ee7ca4c48755347e96a6bd64daf fb29857cc0030a11a4a7862c4b4373d0d64e9a5d
-72336253c9809c57baca70253292f08df731d6f0 fe29fcb7dc761dc8f89c4bbfbf9ff779e2ec56c2
-83c911d9aa32d6bb73039f4cd4ef8fd26a35a7b5 fe29fcb7dc761dc8f89c4bbfbf9ff779e2ec56c2
-62e84844c6b203f2b23e20acef7947cdf07ca1a2 8a1cbf335a2eafd6504e2d63f3c0a24b75a1ee10
-03554f697107438ce0503a1b02c745a48568799d f91bea1f33302800da9791674674e68035e781c2
-54cfa07eb7e11ec6106527b49629bcaf83339b07 f91bea1f33302800da9791674674e68035e781c2
-6f97f1801cbf3e359b8ad887f6bece9efb58faff f91bea1f33302800da9791674674e68035e781c2
-98dc0dd0482d800216642f6756a3aa9d94b46e7f f91bea1f33302800da9791674674e68035e781c2
-f4a88bfecd1d8d4baed4003860442f17c0601fdd f91bea1f33302800da9791674674e68035e781c2
-9220ba15fdf0da26a9e81fb36e28871aed095629 f91bea1f33302800da9791674674e68035e781c2
-67eb224bad5d1b9d2c7905d90ab8e95ce5b60218 f91bea1f33302800da9791674674e68035e781c2
-0e715b4ff38f2912130f8cabf1fa1e1055a583af 0ce39980a2c93cfe92b3394d183f4d992b757f70
-62b4dbf5effc489392814488da65be7c96680486 dce39ecf54ef075ec3da2f9677d10a0de4b086d2
-32fd043087e06ed28bfdb03099504f18751afedc 17d5f3bd3666fbab5ce68e4bcb52aa658ada2eda
-03d2246299b5bd153a063014a1419ba740d7e2ca 75ebe60537b1a19e87992f68aef30a3b1ff4b819
-436f68e6659689a549e904bdb33f33f9ad897c55 d8cce6c38884a3afda49011b6d509444fba3a851
-7a4a9fedb7e337685992ad5cd24392513f1d6996 4d506d1d00e08ae8e7aed20c76ba4cef46bb549a
-7e6b347c31b8018dabef8f6d91607987ac41a0d3 fb167acb354cd2b4ffb6546187d1e1ecc3948bfd
-ca4213716a3cf6bae308f0d60a7a399f500ceb98 fb167acb354cd2b4ffb6546187d1e1ecc3948bfd
-18e4e0e4e32ed525d041a767a1a24cfd158cdf91 fb167acb354cd2b4ffb6546187d1e1ecc3948bfd
-ea9c9d93f2e2bb6c2440015836f876ba9d747fa1 fb167acb354cd2b4ffb6546187d1e1ecc3948bfd
-9403ec58b70615a0d7642b1ba6290375cf31abc6 3788b28ef9841a7a75446f601a7cb68957924735
-9355a9e466a937ab2afeefa9151e33217023f0e3 3788b28ef9841a7a75446f601a7cb68957924735
-c472ce8f7b4814581bf775ff1ee7fadefa85c864 3788b28ef9841a7a75446f601a7cb68957924735
-87dc8b3035422bfa6a83019a8fd12a7618080d7b 3788b28ef9841a7a75446f601a7cb68957924735
-ed65444765b48dd6cc9f9a33299583ff75f5296c 3788b28ef9841a7a75446f601a7cb68957924735
-8dd4f01df290528dd36ad3218ddfc039e3cb7418 3788b28ef9841a7a75446f601a7cb68957924735
-3b0d8a903330646ba4639ab4d1ff3a8159d663b3 80f180a1841f0a4beef926c4fc37b2d65ea9e69b
-12c6121ad0faf840d1e4bda215b86055b52ce91c d1f82742bce2e4b38f5dff48469de774fe8a45c7
-93c36cb944bdae28205a4125867aa1db6efc1a6a 21d9abc29b55a3c36cd4d020282e3fdd2e908bb9
-ed4365dde2c924de7f5a25209f5089b537717e38 1b543bd33cb299f551f7051d66bc267234e1eae9
-e146e013b0a48a059e26d533d0bb11cf4dc4a48d bfebdce98bbffcc8534ceb49f54c7caf06be79b5
-d47e9304407cc5562d46b2de03846985910f9af4 bfebdce98bbffcc8534ceb49f54c7caf06be79b5
-3b94f50e0beb8b459b7a6736defb991e245c87ae 50129149e56b90d4b8a541fa291b65a0c474eab9
-9a122c11b41ef2951a0a418a6deb3906999e5730 c4d6699b4bbf1dbde739ca6d69cb4c12a4d36075
-a5abfd3585246f06be30eafa1376522e2fc2b1fd c4d6699b4bbf1dbde739ca6d69cb4c12a4d36075
-cdffc6b557994b8f855a7672e850e2056daa2035 c4d6699b4bbf1dbde739ca6d69cb4c12a4d36075
-b2bf74f705449d450c1ba32d8603fa29ce2c88e1 c4d6699b4bbf1dbde739ca6d69cb4c12a4d36075
-b20c3c83aacede96b4ab90cc71e7716788284ad4 198c3535d3f6ad8681cfe29db065012d49cdee9f
-59afc71c1e059a35112f0c7d7d1c9edf61e7d0d3 bb16531c53260e09c673e7c849870ef6b4424389
-576692d3b155e78de9f25dec82d2760a05093aa7 141ae0121664dfdaa2a82469a645974a261854de
-ce5c10a51c9c78732d20c39b47e00df580f5877a 141ae0121664dfdaa2a82469a645974a261854de
-830bc16b281d00e7f3fb61bd68ea1228ce9a77ab 141ae0121664dfdaa2a82469a645974a261854de
-367872cd815cd4ad902706bb9cbf7a0d30b6356d 141ae0121664dfdaa2a82469a645974a261854de
-3da4eb53bf320f96379e55e9b9b1b76ad6c0a642 141ae0121664dfdaa2a82469a645974a261854de
-9b756401f28db8866dad5aac9838c197ef8eebab 141ae0121664dfdaa2a82469a645974a261854de
-e164018119ddb6400c63c2d1cf39868aab1ab3ce d3baa4410dffbabea4f8a503f2184fb67bf111fb
-d1067a6e4033a222103343c7deeedfd091896539 d3baa4410dffbabea4f8a503f2184fb67bf111fb
-db596a1133fc24f0a8c3cc0ea1ab06ff93e8419b d3baa4410dffbabea4f8a503f2184fb67bf111fb
-10c2464cc58e530cb33aaaf7ae253501e63e7a67 c417d0859a3545d97cd7fa477f4238d9e24729fe
-712899f6edcba40fec2e098b4d7ea3a1235a977f 80aa0ca3ce4c6de78da7c5fab5db292f244fb9cf
-f728fde206678ecb7cc13bb3f1828219ae7fe8a0 80aa0ca3ce4c6de78da7c5fab5db292f244fb9cf
-e62c759e39ccd0652b2740ff6d46d5c7d952f4e2 63cbbcd050616e9463d0d1183802161e383ee686
-57cfc3b091a2cc2f8a0c3047df072f4fbac5f6b9 63cbbcd050616e9463d0d1183802161e383ee686
-7a85047ae236b23612417bada7751af364da50cd 63cbbcd050616e9463d0d1183802161e383ee686
-dcc5beb58351f2b791f0c7608f7350fa962bb793 63cbbcd050616e9463d0d1183802161e383ee686
-e9b9fb45040810ded8afb0525827e360de87f83e 9076a4c575975cd4eb74ae6c3ca6c66e4e3bedc9
-ce5c3bdddd3ecfb4df23c3f3999acede8de3b467 9076a4c575975cd4eb74ae6c3ca6c66e4e3bedc9
-04ddc3e138ff5bfa0e53d6f9d60ec2b4160fc23d 9076a4c575975cd4eb74ae6c3ca6c66e4e3bedc9
-81675165d0c2df0b73ac635a5dd041918f9c3dcf 9076a4c575975cd4eb74ae6c3ca6c66e4e3bedc9
-dc44a53ff3421a710440a3f7bba02421e16ac7b9 d64d86c9073d38411314e167654f5058577538d0
-f2b2f205a4a89de48aa28f92c214cd734cea1ec7 e2a504e04cb86f6085bcda8c39d4d284cffc83fa
-ce2ced03fe90f580928c545c159bc940ca48e023 e139c24434667a0b9c06d31f8d69a1197595b123
-c2cb7c04329702b754195f5b60594e1d2f6a0c89 e139c24434667a0b9c06d31f8d69a1197595b123
-9e4bdb8a5aec1713d30a4e6afb800bb0d949ba86 e139c24434667a0b9c06d31f8d69a1197595b123
-04f17dfac220803ad4a90eb66d6a2e1a420ba619 e139c24434667a0b9c06d31f8d69a1197595b123
-3bc59a815e96e4dca8c2191da94d5062621222e8 7efdc235eaa6159c55cdd6db47d69a7aa3c83a30
-be14c799bfb37a2c68504173641e1e10f37ba15b 7efdc235eaa6159c55cdd6db47d69a7aa3c83a30
-e88696c4181fb91ada62d6b362b9d51ca28b45a0 7efdc235eaa6159c55cdd6db47d69a7aa3c83a30
-410150e1a6fd053062a5cb4da3d620bf594e688d e3e60459fe59ea1797aa9a289c20845daca10543
-a5ac423b65b37742005dd3843efca42a94278927 e3e60459fe59ea1797aa9a289c20845daca10543
-67c643a99d79fc0fd9c69f367c0545e129c425cb e3e60459fe59ea1797aa9a289c20845daca10543
-4a4d9d03a8c49c4fc58d5fccd88b6f1e6520cbea e3e60459fe59ea1797aa9a289c20845daca10543
-922cf902831cdfb1974c02cd12344ed2ad19159b e3e60459fe59ea1797aa9a289c20845daca10543
-994f4df89a4bb385b92c60cf7f12361d4dda4c42 e3e60459fe59ea1797aa9a289c20845daca10543
-e554ca6ad6f07966c322397ebd843880a5f567db e3e60459fe59ea1797aa9a289c20845daca10543
-ff6d19a186bd935d340d12561833e75850f6fb22 3198b7366337af38905d4a0e8809c5c947d15c92
-0abbb0909d9d5a04461004f05d6cfbb68d2747fa 3198b7366337af38905d4a0e8809c5c947d15c92
-7807246268385e4aa8e5266ff86c6bb4687f97e3 3198b7366337af38905d4a0e8809c5c947d15c92
-edfbac700c39845aad19cafc93bade88450f4284 d7790b88d4899b604f1c39330822fbb36e5c32fb
-a13278ae80ef4228270eb7210a0c4b0d5f4303ee d7790b88d4899b604f1c39330822fbb36e5c32fb
-dd1018f006ce25d6160c25c9198e0657345c71d4 f9338f85f37f6c8dd5cad2d968ed55893abb8163
-403ecaef33f03f6e75ce2b0d434fd4281a1c4ef5 180905bd81864ba3a133cfe108874c50cb0d2388
-71944db4582e07a71002d214a56d1cf20fb26542 180905bd81864ba3a133cfe108874c50cb0d2388
-dbed3f790b06f66270bddb73cdbf5e22dffd574c 50bbc1957db40419fe28c91a383cd468597aa845
-d4c435aad0667e96983bd09ad2d2b0ae93f99987 50bbc1957db40419fe28c91a383cd468597aa845
-8b6d9a69e349b29bd12b7b2321afc4d655d25fc5 32614a460ab517451b7eb5d8861c2de4650cedd5
-8e820e05aeb84160518f47613eeb4bb97d0c541e 924bc9d4ea783e9f51a2cc2c787628ada5505fee
-30895c51ead75971044cda03afa5993ea6c975c3 924bc9d4ea783e9f51a2cc2c787628ada5505fee
-7b32fdad10d42f8e02d603a6f0de38f3a5d068fa 924bc9d4ea783e9f51a2cc2c787628ada5505fee
-a6caa227bba867cf9bea438c54d9725719c0885a 924bc9d4ea783e9f51a2cc2c787628ada5505fee
-0b0a0e54643d92a19222f8afc9e49b0f865ff7b2 924bc9d4ea783e9f51a2cc2c787628ada5505fee
-1295421cb2d1f458a5d4ac3219633c3a76c1dd83 a4da5b2e6d2bf93e46870ad3489277a319205d57
-a9af260d6eeee4751a73ac4ddd1fca39ea68b167 a4da5b2e6d2bf93e46870ad3489277a319205d57
-72c177f33b939a942368afb36fca30e0e6797099 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-5b86d301c7c2d42677c3c8ec118dae02b3a6e84e 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-b49497b9751a63bb6c0767852c8946ec8d268bcf 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-65d02d7705b7ab6871feb719cd4834e8a4c97cd3 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-c181adc89a49cd1eb734283fd4743789fd9d14bb 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-ad3877b756c1a2f9589c51c8c57a344e18d0f23a 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-51feda398a34fa6aa6071a2d536359bf9356df90 7cbc8a46dacb1ec1ac1c3e361e8d54848bc6ac83
-ef917fc0f72860bcfec008449e98389fed2b655b fe526e2a6b98447cdee30317d24331d4277aec04
-90d8b573c542e8312c131ffd105f63d47e3775c8 fe526e2a6b98447cdee30317d24331d4277aec04
-7440c0cda70793090f471c1367999e1999b56849 b0b282f8574f9efd52bb12b9475c991ef4cd8f46
-a5ea56bab4a45fb79838cffb83c0e938f904c732 b0b282f8574f9efd52bb12b9475c991ef4cd8f46
-5d65e9f188eb46968e64146c1f18f0a0dd89dc3b b0b282f8574f9efd52bb12b9475c991ef4cd8f46
-8abba1d9d79b08d7830c5a16692f76988ff245e8 d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-16341416d67dfcd5b6e93aba5bd608808f40bd73 d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-194a753d8f8bc2cca468541ec203cb50384f29fb d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-984051211ed5340dc082885fac5425b887522273 d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-ed0b71c34ef2dbd3694dfe01b1295afe92b766b2 d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-ab8226e719cc7eecde4abdc3b4047dff88904296 d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-b74afb968c2b6864996c1e70dc3a5cec27f7fccc d51e0336dbb054faf9d3c5d8204763d498e4aaaf
-c4c85fe5a43311060d4bb4cb51afa967c869884a 29e9e082572f4dce6ca384b138987365a629c030
-ea4f0b86f3851a2c2c32480c4bd73100bcf03757 176bc637629b667619e5478bf7a73f50309199e7
-69b321082dac7413d1d4ded32b1c9cba2c7db3de 176bc637629b667619e5478bf7a73f50309199e7
-596788fd9409cba42cee7399512e5dcd33716e6b 176bc637629b667619e5478bf7a73f50309199e7
-faaa844842984f5555cce480b96d7b2a1e6d9d1f 176bc637629b667619e5478bf7a73f50309199e7
-a3fe8edc0daa2a731dfbbc7387f56725d52b36c6 176bc637629b667619e5478bf7a73f50309199e7
-d8f3cb37b7d7a535c904e14e7bf8acae1af4c5ca 176bc637629b667619e5478bf7a73f50309199e7
-baf1879c5fab831ae3e06e99d675fc96fa90048c 176bc637629b667619e5478bf7a73f50309199e7
-1a8da479652e6a63a70b6d99e9985da6be4745bf 176bc637629b667619e5478bf7a73f50309199e7
-efccf4dcab8695c1c42bf1eef182b8b4e1840701 176bc637629b667619e5478bf7a73f50309199e7
-c44d75c5fb36ed11fce887de14796ebd25bea993 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-48fdf12511633045073a7d332825faf3d43eb7ad 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-cb296d1b1ec9c6d95036cb46f672da25b0c77b71 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-3a7301ddb81cc1a48a67cc1d30f9ad0fa0587119 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-e667a1f36ac5b17edcc7641160b3cab4dcd21398 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-9c319b320fcc0344f078014b908589a7b3e43121 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-67e309544394cb932d0470105529ca69be8d6348 3f57b6865f9b4d9cdf71d5abb7ba81b3ad6102c2
-9e3cddabe2d2383a2817c91387d990e3ff0a59d8 ce53f1f46e0d68799cff002e21fa65b5b56bb789
-571547650658d7b713d7acd704ea348a179bcde9 ce53f1f46e0d68799cff002e21fa65b5b56bb789
-d2150bd620a279708038729ae5dd0c167fcec256 ce53f1f46e0d68799cff002e21fa65b5b56bb789
-62bdc6771fc28244408f064b1c2c8bb170697077 ce53f1f46e0d68799cff002e21fa65b5b56bb789
-0d054c4f340df75c14381b9f0e963be917f5fc42 ce53f1f46e0d68799cff002e21fa65b5b56bb789
-7dd10d01a007ac6d300079e3a59a0f75a0ae5d23 ce53f1f46e0d68799cff002e21fa65b5b56bb789
-b307672056454bd3e7dfbfd5a2f4cca999c26d8d ce53f1f46e0d68799cff002e21fa65b5b56bb789
-6573c1786ada62617c333b46ba6ac1bdca70f6a1 29d2b9b5dfac7328cbdfb8f45e2f6ec46ea6563a
-973cfdfb0157c349f0c78a7e8e64f2e199627420 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-ed3bd376aed4c1c57cb386266a9d16bc570bd362 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-1b53380eca133784526338a2cc1354d00c645acc e269c7ddfb3fc4faa32789d249a327a4a05caca3
-2c9122f224ada6dc06d6cb19c2bc9856c844a371 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-19b261ca52ae0aa53a8652adfc4b84ee39ccb683 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-f55f91434c147a471e9a2cd9a3c1e9fe669390a8 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-2983b3033e922f4c8d4999cb20e8074243ed15a4 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-514052a93c8bdec308400ddba4bc5663061c437e e269c7ddfb3fc4faa32789d249a327a4a05caca3
-5082206f40f38c37c9884df94a2be64afefe5b71 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-3c22b746f801a521ca9a718fa2c5ccb9260f288e e269c7ddfb3fc4faa32789d249a327a4a05caca3
-737a2a81d6ceaeb2720d83c0798fa118cc24f065 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-db69eafdb355e8079c3fec57b6ec52867d627069 e269c7ddfb3fc4faa32789d249a327a4a05caca3
-299e5b01888dddedfcbbc312750869c774d5f78b e269c7ddfb3fc4faa32789d249a327a4a05caca3
-d880fd1e98d6ecdf3ca96455e1b74f1b344a303b b416cc33d366acd1dab614bfec4b3395762ce8bb
-83ba4933576a35f09ce3dfd039a1212c55dd5ac8 b416cc33d366acd1dab614bfec4b3395762ce8bb
-7db8f3e60b4ae56d2913ef1d769f0fd1f00ede2c b416cc33d366acd1dab614bfec4b3395762ce8bb
-c378f8768f4435e79633bde59b746627001ad052 b416cc33d366acd1dab614bfec4b3395762ce8bb
-a3ff16ae61a01a4a1db5f54ea7f813adfce1004d b416cc33d366acd1dab614bfec4b3395762ce8bb
-753e37f56c6e21571b59248df29ed1279bec83d2 7eb4b93204087a39e68f42470a8c2ec094635ce5
-3adf3bda050faed8311aade085834a845763eb43 7eb4b93204087a39e68f42470a8c2ec094635ce5
-ef44a57010360f3993be9021b8229630bf709bca 7eb4b93204087a39e68f42470a8c2ec094635ce5
-fdb4a5160563cc7be131398f49e43a12bc29d525 7eb4b93204087a39e68f42470a8c2ec094635ce5
-d825843d4a21c52fd0307417e2e19a477304d82f 7eb4b93204087a39e68f42470a8c2ec094635ce5
-ce6cdaaf9513cee6dbc06f34c2e01bb4624d6c70 7eb4b93204087a39e68f42470a8c2ec094635ce5
-5fb505599a5f69da4c877095a955c958b001f926 7eb4b93204087a39e68f42470a8c2ec094635ce5
-38d574741645e56cd97d011d855add1b3ff9aada 7eb4b93204087a39e68f42470a8c2ec094635ce5
-3da3c0c410de6fe7bce5b0bc6bf6f79e3de8f732 0c4b5237ce8e3c39dccb48fd08bb7ae92a66266d
-05c95a93454ebbb35a7f619cd4ef162b85d69ca5 9674c3fa26784057aafe05586fa70e7dce4687fe
-dae1cde0495bc8dbf882a90b546f5252a2f432d4 c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-e4bd733a4c62fe138ad728127396570bea85490e c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-c114090448cca354d02edd7e4a1928ab0f5e282e c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-08ff876aaefc8997b9c022146f11d64e5db531fb c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-812e85c7be3b6a4e4a37b5f4e03362a6c2e614c4 c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-94d4408b9a0521d5c73b9a9406fc871fc6c989db c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-c8e7ddc40288c19e19f852b93b57176f766613a8 c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-18782cff6d4a57c42705aae8aa2b403ff5c806b6 c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-6f6bbb3431df754abe61560bbbf50d11d478ffe0 c6150460aa1fdb0bd51a8c4346855bd1f4e2c1b6
-a4334cf0d4644390c748fdf4e0485eefce1cdb37 5d511fc66816ebaaca2425aba5d72d9edfb257d2
-2f8ff17f5bf428f60817e4b8a3b964f65e4c0fcb 5d511fc66816ebaaca2425aba5d72d9edfb257d2
-24e780c4a944b6714031f8182411253eaf03a289 62c00228253d31ed77ba5c4ee11457a8e254dfe4
-65ac43c2238056dee700d4023e85516392c6e388 1ec1a721e9e37a35881d646b691477cc55b20a63
-633cc5e0b76b7bab6cf498b8839c8297f464c572 1ec1a721e9e37a35881d646b691477cc55b20a63
-4b9f42291a88f0baa5c92687a6133151f158ad9e 1ec1a721e9e37a35881d646b691477cc55b20a63
-a10129e4fe99c136ead14a30fb15765678ae7894 1ec1a721e9e37a35881d646b691477cc55b20a63
-15fbdd266d74aa4c8186b945f389ca4e300c0b64 1ec1a721e9e37a35881d646b691477cc55b20a63
-24a1c2a907ecf99c2b3bde45da5e72e35558169f 1ec1a721e9e37a35881d646b691477cc55b20a63
-5df4fca2e6351ca104a9658b798fa10880e971b5 9144940ea0aea822a5e16046dbc8cd25a64085f7
-03bdef4488a73284a33142e1b1a8e7f5ea69e63d 9144940ea0aea822a5e16046dbc8cd25a64085f7
-83cdd108719c4c114cdc9e0d31fb3bb45cf34357 9144940ea0aea822a5e16046dbc8cd25a64085f7
-3de664d60fd2cd7f9fd1320f2ab0b68872ba5af7 9144940ea0aea822a5e16046dbc8cd25a64085f7
-0948e3c24be46912a92ee23c439b8e3394cd4765 e2ee3c99fa584cdf37c62767be9ef37336cbde03
-ee443204ef7158f821280fc22be2ca60325c97fe e2ee3c99fa584cdf37c62767be9ef37336cbde03
-fbc92e31374ea832e616eae2342884230ca427ea 969371bb59e1e9f0e3e6e1a64407ebc4e925c431
-4480c69e8ae54716e2485f2b94caa0e483ad3def 2d7afc11889a2e2c5b62d17b832281b9e87ae8db
-faec679fca1dbca54db5c6fbb1adfba56eb09228 c6a08bee23e87e3d26ba4787f9a400b1ef0592ed
-16246b7b11bcf5cdd14c5454076874f6a9636fa4 59a13465d1b757814446a51347bf1abcb6058b68
-ae9e2fca5ca4aac821bfb1e1eb5a358b37830247 59a13465d1b757814446a51347bf1abcb6058b68
-e6329916561a2beb889bfd01144053d1060a1a66 59a13465d1b757814446a51347bf1abcb6058b68
-dfc17c6f9dae0bedde837a999bfe449654cacf41 59a13465d1b757814446a51347bf1abcb6058b68
-59a3d7ec341ffb238cb38f7039df5a630398dd7f 59a13465d1b757814446a51347bf1abcb6058b68
-c4101db5978eb640867d350f077490558029ccce 59a13465d1b757814446a51347bf1abcb6058b68
-45910d6fb117db5f12706bae3dbea50e88977c30 3f27e3a13ff8fa069322b0547236497efc02937e
-447a133d10445c308c8b09de81f44071e48c10d4 3f27e3a13ff8fa069322b0547236497efc02937e
-7237542fd2b55963da95522e1bcf643bc8eaa17d 3f27e3a13ff8fa069322b0547236497efc02937e
-4922de462c653d681dc563294f479409db575166 3f27e3a13ff8fa069322b0547236497efc02937e
-51adee615bf63112a6c3a7bd4ad85d5d3aa46f62 2ee4ceb55ec5c0c5a7fbfc2ec41898d81a749cf7
-6e0e9ead1ff52212d44c9a2c8a36b95b1678eac9 18b15efccde88a07fd8eab40372ba9d4598fd0e1
-b82b93ebe025f9f08097852df460d160d47b9cd0 18b15efccde88a07fd8eab40372ba9d4598fd0e1
-2295c5dae773453f62f2ea394bea2720262840c1 883cf165567be124fe96f88869fc5e739e2d586f
-e04be3af42e214f47ba1ef482fd53cc0f39a2b78 883cf165567be124fe96f88869fc5e739e2d586f
-64abc506be8bac69891b1f9c32d01678e89f6c64 731c1c77804f1d76b628367ffe3e35cff2aab749
-837445b81145bff844b12d91efb9a1ecc2189001 731c1c77804f1d76b628367ffe3e35cff2aab749
-40344c98d79f1c6adc783983248df01b73cd8838 4ad786bafea6d1102eeb6e40c4b6c93a6ca1f8ea
-0b982303cb1d76e67b979daef3ee0398e575a2d3 869af08d9658453037f43365677c962fa362b546
-3735902566c7499fe65cedafe0c7847bcadeb0ab 855a340a388698ebaaa60188a819db662de129a9
-c8e7732fd1beb2612a09ba47c47a5ede433a0871 855a340a388698ebaaa60188a819db662de129a9
-2b5150d35f977e99e2c962946efcd5d1415adb97 855a340a388698ebaaa60188a819db662de129a9
-04092bac5ac16977834a32c2d4534d1b52d2415b c85c42707897d73e7c6bd166de4f003eb17deba7
-81bafd8c0ae4373e8b59eb4db04edd34997a5504 c85c42707897d73e7c6bd166de4f003eb17deba7
-cbefc52c1f620e6dccf253b530c4a3de1ea4da51 c85c42707897d73e7c6bd166de4f003eb17deba7
-61bf244b17dc597d0e2843ed55099c9b083b446b c85c42707897d73e7c6bd166de4f003eb17deba7
-d2c2aec0dd8b129b855c722a5f1c00a6663211cd c85c42707897d73e7c6bd166de4f003eb17deba7
-906eefe30759e48831793edaa80331b762269516 c85c42707897d73e7c6bd166de4f003eb17deba7
-414ffd3abbf4e4da8a6e194ede3e9a94fa651be6 4a47efb567033fd900a375c8d1069534640b10a1
-66cc2ea5fc062d9924aff4a51fb02dacd70f6b69 4a47efb567033fd900a375c8d1069534640b10a1
-1a515787ed35f69b7dc3ca8c008ac6c837863c95 4a47efb567033fd900a375c8d1069534640b10a1
-fba111bf70a5c0d350371244a636fd58afee26a9 4a47efb567033fd900a375c8d1069534640b10a1
-498396e0bc0ad3c51747cb8d9fa68104147db4ab 4a47efb567033fd900a375c8d1069534640b10a1
-e8c5a44c99b60d911905e27212cc4027d0efa796 c65ef9cbffdd0482a0d07f4694e050ea8cb38ddf
-4981a41522375797d35c335833800a193a978666 52356c0d0b612ef2a688a5e65eea490b42303033
-a2523608d8fda57934b0c49a186fb07a1491bcc9 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-9159b3fb2f3f788de57f1995e7d6e35c0a3daaed 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-c5b6a93f152e3ba67e1d09251637c4ae24403722 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-24616017e8082df10a028399641cf7b9854dbee9 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-a59eb08a9f56b01ed6d57c8e33e3b9e84600c5e9 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-9bef6f2040063626a01291a78cccf4e8ee889c2e 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-c97fdce822f5df9fd687a0771f65b0862e6fd10c 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-a313ffb7a3616710b58c39fc4c77dc20f3178907 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-6fe553613185dc18fc7affe8e4177ce77cb221d8 0ec3916d4bd5f0acd997ed19c81f569c5abc662b
-9c867498adadf05c4941f6aa67033b98d21acc83 26a09f503b0bef2dbfc8ea7dd6b958bf782bf242
-f9a6aae195ffecb8c291b896215d5ce57b5f12c9 a2b73045719d1f69792d3bb72a2ea01a5adbcbba
-d9a5df5d84d7c587040f062b28caedba40142adc ebeef4ce37db3ed79ddd7302e454c90bda1d2cc4
-f0abea55081b14e9bdaa2b7d8b2c9df8bc0794d2 8ef90bdcdba8771cc89ba4f4a03f92fad4537c72
-8c55c67590fc1aadb4c10f45a2c5c926019c2b90 8ef90bdcdba8771cc89ba4f4a03f92fad4537c72
-cd197874de6f8b8542f4b4f5a465f990acd8fbd9 8ef90bdcdba8771cc89ba4f4a03f92fad4537c72
-afb2bea17c8ccc47c32d46993c7c99d93090619a 7a2806f0ba686da9a9c3ce1116ec64eeece680c7
-91d699601f914edd9b30dbda11c5fb5e6c304259 7a2806f0ba686da9a9c3ce1116ec64eeece680c7
-fe293006b7f1188047f0f7c75b693bc4abf178fe 5a3ba79bd8aafacf59d8d0f874a626c05a66db05
-9d6a88f43232d3be05fcd456d5b222c796fbfc60 5a3ba79bd8aafacf59d8d0f874a626c05a66db05
-bef4e87c7169aec34c423e4971adf06afe462134 a1e921bc1bfe89d05e1baa33d06a2cad4932f824
-930581ad81e568a1dfbb9d5f82a42857989369fb a1e921bc1bfe89d05e1baa33d06a2cad4932f824
-1fc552c69c17539f7ef891b43f722480524239c4 a1e921bc1bfe89d05e1baa33d06a2cad4932f824
-b8bb6aea60945b06d66a407af126125185078346 a1e921bc1bfe89d05e1baa33d06a2cad4932f824
-2467402d751fbb99882d2cf92c7996f370954dab a1e921bc1bfe89d05e1baa33d06a2cad4932f824
-20ce64007dd030d5bce6d9df353747702f369993 a1e921bc1bfe89d05e1baa33d06a2cad4932f824
-a1ba2f76a888b5ae2c03079e0f4f9dc816a98a7e 996040acb3d9840fda986dbacb539508c77790b4
-c4bbffe13179f4d5799f2ab71d2453ac41ac3bba 996040acb3d9840fda986dbacb539508c77790b4
-28d0c5fd18a03390a65c93ba1a9c6bd73fbac2f1 5c653829ee3b99364b5d826c0a59563f3297f095
-297a9ba140ccfaaaa26022448f290c836f2ee5f4 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-e13dbe47977e82b2a39140dc45ed2907269c839a 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-009799a3473cfc0553823120435478c8070882f4 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-f97d2fdd2e47d72b18654f4e55d9d284b4a68137 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-322f949a28f07b304c0c5ede09fe025dc1dcd59b 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-093f39a7d46f5a10e7abc38e15272077562a7afc 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-c27438ec23ba726ac9e46a6ecf6a34eff61b45a8 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-084e4459a0ee69342a6dab02b5b667e46c8c2a68 752ff88d8a5ef774f51a3368d82cfad85e7c1522
-d76e9c1a02374bd8c6e072c98ec7d70b7d412ef9 3bc0ed50d7ba83dc273b1116b2eda8d3d02eba77
-b164c41115df2c18a8173d40f3fe2d90ae305a95 3bc0ed50d7ba83dc273b1116b2eda8d3d02eba77
-7dda553b4d6a0a179d3e7e9c3a2e64648c77c85a 3bc0ed50d7ba83dc273b1116b2eda8d3d02eba77
-db874aea66c427d05b370b988022f2464a871077 113cc985eff7c24db618fb6d6200f20549be6f63
-f963c6ef34c2ea6245b9f7569bf9e242efd6fcbd 113cc985eff7c24db618fb6d6200f20549be6f63
-69e436753b080b1049ea96278e0674d1ae8f2b50 113cc985eff7c24db618fb6d6200f20549be6f63
-15b11c77382a5a5a80ba557bab61f6de67f8bef9 113cc985eff7c24db618fb6d6200f20549be6f63
-147cc305957084eb7f86f9b822dc4e2249933d30 113cc985eff7c24db618fb6d6200f20549be6f63
-0e3a0ea0efcf5ea2021cb2b13ad54e69ea2081c2 113cc985eff7c24db618fb6d6200f20549be6f63
-c67166b5f735a93101a5bbfd43e25c69973b70f4 113cc985eff7c24db618fb6d6200f20549be6f63
-085964d3f647cc8872c067754ee52208e7963b39 113cc985eff7c24db618fb6d6200f20549be6f63
-1fe3ed745b551bb7bf0784c6170a9064941a3eb1 113cc985eff7c24db618fb6d6200f20549be6f63
-897054146bdf59be1afea01ca2777bbdd07d8b02 a902062513fa460e5081017a287fe3c14a6125ac
-260d9108d4d574b8bfc993db8d9dc2553c0bb09a a902062513fa460e5081017a287fe3c14a6125ac
-b183417c8a70c9104ccace3f0fdcc964823ac845 a902062513fa460e5081017a287fe3c14a6125ac
-2b0f047412f6df76e4ff50c53fa17f79bc437e26 a902062513fa460e5081017a287fe3c14a6125ac
-d82d9295f7f3524439bfb58c3b9d5e9758e587fd a902062513fa460e5081017a287fe3c14a6125ac
-2293b8549f104bdc923677ea94092ca778f9875e d8e329c828f7feb126c22cae42c70ef460bf1936
-a9e294932457cbb784dc32f8003962424717e222 d8e329c828f7feb126c22cae42c70ef460bf1936
-dc1acb6ae5640054c7b2e15a1351fd603bd3b392 d8e329c828f7feb126c22cae42c70ef460bf1936
-5560cc0ce0a5b884dd17921b58c4d0f13d96efc5 d8e329c828f7feb126c22cae42c70ef460bf1936
-0704e9578c61299c1969b7b6d56f84eba215c5a8 d8e329c828f7feb126c22cae42c70ef460bf1936
-61d98ebafa26b54040107a289425b3c8d4b8962f 2f3d8bda00e62ba658c3843fa2dbd2d6fc4d46c9
-10f7f79549496dab33aa11f911252d6a5b9f7bb9 2f3d8bda00e62ba658c3843fa2dbd2d6fc4d46c9
-99688bf67c5b7de7632dbf4e4ed7dcada92307df 5b6a58c7100811991e2b125047883b756ace1bd4
-b36e817eaa1cd6cc95eb6742f7d1d1b047352b46 5b6a58c7100811991e2b125047883b756ace1bd4
-559e60341d061e457cd867e785e6d20019f680b4 5b6a58c7100811991e2b125047883b756ace1bd4
-6e469dfdc160a266f4d265e7a4a38703e6ca2127 5b6a58c7100811991e2b125047883b756ace1bd4
-1f0c624b324efdf27a25a3d353997775c341e50d 5b6a58c7100811991e2b125047883b756ace1bd4
-8ea2911e9ad184117e2466c140465d70a2455c65 5b6a58c7100811991e2b125047883b756ace1bd4
-f0324d8c44caa8ee043b25f9a38354079a1204dd 5b6a58c7100811991e2b125047883b756ace1bd4
-a13460d15cbdcb8e5bba8910bf89b34771e03b5d 928d359bacc3e1570b725575377472ae050eff0e
-52155a0bcef13059c80581a7cb08a701d1aee54e ffe5ab970a494dd2d9b405d66cdcbf015119fb82
-3d496edee0a89830d0f307c0cb5c0a7051a85c7e d934498a28489651132bf3eee1265b26f931770d
-4f8b581bc5f9e91d049ce12dafd87af99f705c82 d934498a28489651132bf3eee1265b26f931770d
-f0a616c7ebf927d12c5b35b97de2b280b912b8f0 abab00ec34ead0d229a091b36f3cc76c01f6bf4b
-7a31535102f0fdcb6514f6dd989479271173486e abab00ec34ead0d229a091b36f3cc76c01f6bf4b
-9e318e5edd1efdd21b3ab691acfcc429e92245c8 5d89fd467f336084323a7c851a94535221020145
-db7be221622dff021a82e8174196953b50688efb 5d89fd467f336084323a7c851a94535221020145
-d5aa119cc5066448593be1043a2c3240db6b1a98 5d89fd467f336084323a7c851a94535221020145
-f2b7cee83220acd77b7b0ee031f414fbb12c424c 7f85a773fe8e421608b13f6e067153d03b808d9f
-5209d394f1244e4d64af0a310741ce30832c4f72 7f85a773fe8e421608b13f6e067153d03b808d9f
-a4b04e9f5093f69adb1554a7efe5d45c1a6cd7cc 62d9394d61562bb2ac3668960d95dd81a503dcc2
-3d6bc43d82e7ba95279efa3ed240987a831bdc6a 62d9394d61562bb2ac3668960d95dd81a503dcc2
-f13e33390a953ccc61c84b9ae33151423e635d40 539f06a894721e2d30c5801e9beeeedc19b1b732
-28f0fe101b90d1c489d5c3150b341aa27c79a229 539f06a894721e2d30c5801e9beeeedc19b1b732
-e070b65c07335d016be6225d20c28360f339f934 539f06a894721e2d30c5801e9beeeedc19b1b732
-c9549e14757b88c06cb6b0701028140ce1bc0cb7 8ec34b31ca3811c542ed5520bbcae2d2ca936599
-69dc81befd5cd566fbaa32c72b18bf956dfb3d40 8ec34b31ca3811c542ed5520bbcae2d2ca936599
-bc0ffef76e5e35bea1549cb65ddc772201924583 2e294190b605ac9a767d4b48a3d87594b1c616b7
-ee7627b311fd1314381fcf723c150583d336d904 2e294190b605ac9a767d4b48a3d87594b1c616b7
-59dbeadb2dfc375abd5002695151583b84ab0f25 2e294190b605ac9a767d4b48a3d87594b1c616b7
-2d308f99c816c8bee95fa81a0f7a8407f9edbe26 2e294190b605ac9a767d4b48a3d87594b1c616b7
-e71a06bd9dfdf4194e72ad7284ff4b76e8387ad1 2e294190b605ac9a767d4b48a3d87594b1c616b7
-2fc4522b282c73d3f2e661c7f96094811997e1c4 2e294190b605ac9a767d4b48a3d87594b1c616b7
-63a4aa7b3136143bd99c57a335e7078da055fdc9 2e294190b605ac9a767d4b48a3d87594b1c616b7
-586cbea78025fb6214d94d4044f600d28b32a554 94f9ca4c9adff4505d87b46597487e6047d9b8e4
-78056bc6d9c9ae4c6a5bb76c52b091170b276b05 94f9ca4c9adff4505d87b46597487e6047d9b8e4
-b04e1c15bbdb89e74968374ad8ca690f8366a504 71b5fdf55fd0645d251e0f8a6cfa27b56805adc6
-4821a380663bade7327fa27dd45615ffe87454a5 71b5fdf55fd0645d251e0f8a6cfa27b56805adc6
-eb1ef841edff8894170b32d8e1c1ec44fb01ea52 775e659b16c6e6c324ef08193710f9cd69d1e516
-5cf18cd9fc8c5bf7bba28063007e14d8b533a5c5 775e659b16c6e6c324ef08193710f9cd69d1e516
-9448db60ca1c5164b1435ec2ec6c978cc2d923c8 775e659b16c6e6c324ef08193710f9cd69d1e516
-9f36c900ca896ebd80edb94db9dafa61c0074a0c 775e659b16c6e6c324ef08193710f9cd69d1e516
-8848e6909abf0cc3228eccc679595a0c7d93e594 775e659b16c6e6c324ef08193710f9cd69d1e516
-adb1f9b7e89ccb2936e6e9043bc3021cf29cfd40 775e659b16c6e6c324ef08193710f9cd69d1e516
-a07f7c640d84cd371ae86a7e301c7095ca8bf9fd 775e659b16c6e6c324ef08193710f9cd69d1e516
-645488396b6461f0990a8115215486d849ee7175 775e659b16c6e6c324ef08193710f9cd69d1e516
-df0ea9c5dde3548a1514abdc592bb11c9232a840 3fcce8f84ea92bb348d3037bc8793678b915f4cf
-00f7c3870b4e732893d797c3fa1a9b1efcf6dd14 3258d58ab3c31e7b941076ae6d15085459911592
-d85eab2eb400db2885747dc14dbdf1798fc61755 38aef42ff64f20d155871d7ee69858a2eae0a494
-57087cd472cbe945b59803303acbe0375f6e61b5 d9988c1f85dde9e04acbb2d3ab609fac0e6635a7
-59b1bc853ee36a248bc45dbf684a3de6804cba64 dcd9586b39270f651a3de01f91749eb762b4852f
-0eaf97f6b5b4b339c905a318dfb2abe78752ad45 0dd7d030f0ae3221582d627b5feba67ff450fad8
-25838a1cebcb2d99815b909006f7eedca736f5b5 0b4095f47ea709f7f5e36aa10c2cd6c9913f791c
-cf56a14329360c8f42fbb4380970f8ae705f4dcc 0b4095f47ea709f7f5e36aa10c2cd6c9913f791c
-bd74a28da8692ce588ee7ab3828f3a2b37043bc8 0b4095f47ea709f7f5e36aa10c2cd6c9913f791c
-c920beb50a81e6a308d9e45d77c5d238e2ffbc60 0b4095f47ea709f7f5e36aa10c2cd6c9913f791c
-090a4c7b606b1eda5c0fb74c36a11cab8ab6442c 0b4095f47ea709f7f5e36aa10c2cd6c9913f791c
-5f77373acea1afdbb9c4f1ea462507047e789360 0b4095f47ea709f7f5e36aa10c2cd6c9913f791c
-09498b98d6e27d0f4d4147fcedd75e96f4b59aee a0e6b7eac470cbf5bf9e535d752691ca67f6c982
-cf482dc9b9d766324e8ec55557dda367aafafd67 a0e6b7eac470cbf5bf9e535d752691ca67f6c982
-7004ee2d2401d4cefb18e942185c6b38228894b4 f6dcefccac4c2edffed450031b076b896ba7a7f0
-6031d683131d144da67d8d207fd785f583bcfc5a f6dcefccac4c2edffed450031b076b896ba7a7f0
-f366c807cfa8e492cecabd3c0d256e014fae88b9 e0725c2aaff466ba5350238fc1686d5a02377433
-53af635424e940c9230e7be9b483194249a3ef12 e0725c2aaff466ba5350238fc1686d5a02377433
-5b3bdf6b660b5859451c8f770fa51166164d6436 e0725c2aaff466ba5350238fc1686d5a02377433
-15f522d3eb2e80d99e3d492290e18fa38a73e2f3 e0725c2aaff466ba5350238fc1686d5a02377433
-aed8f35245c64fca36bd74c91acd60f4a1b126a0 e0725c2aaff466ba5350238fc1686d5a02377433
-9a6d4ed2b0d22bb4a03ac3a4f734d84822128fcd 86233f2e49a6254138a3b0ddefdaa357ca27777f
-3d4464131501f31ff4b3d175a31a63b50cd218b4 86233f2e49a6254138a3b0ddefdaa357ca27777f
-df0b76f440787dc68dbe313bdbe604e3a0936e44 1457efd870b81b76f449682b8e5fe5e1779ee95a
-a725aac541514ff0a59ac3155fa0dadd5da8b393 1457efd870b81b76f449682b8e5fe5e1779ee95a
-64d9e02e8f4ae7f57a2d174f9bd534a16c169ec1 1457efd870b81b76f449682b8e5fe5e1779ee95a
-bd0cd12e7bb8760906b2051c4eb2ccf6f33fc205 090ca1cffc3a4eea9e6827d7c63a96188370e2e7
-62f642def57899c5610644a06a6661825a00f516 090ca1cffc3a4eea9e6827d7c63a96188370e2e7
-a734f9074fdde441d2bc690b981d6afd14cb2ab1 da6b82527397cd3c2a0aa6185cac68d97291788b
-68a04ad3dadca4b7bd49a486cdb96297aa8f3d96 da6b82527397cd3c2a0aa6185cac68d97291788b
-e0d8d153e19982ed0a843595e00cec1011c37a92 da6b82527397cd3c2a0aa6185cac68d97291788b
-8f1efc5e9ee430fba29215b8c7d974ad25edc2c6 da6b82527397cd3c2a0aa6185cac68d97291788b
-c96ea3fc360bf8bd8137b36a5ca63d213ab1ce14 da6b82527397cd3c2a0aa6185cac68d97291788b
-2cb2c8adab8d9a9986d580f6f8ca9af274f10af3 ee67568f5d549b32e4c8e0053349290e4fdd6db8
-299d053bf139eeef7db946cdd9cf6aeb0ad619d4 66ac4047d423e6b8623c80095cdfc634bddb9085
-a6ec92f94d14b27a44bb717a3bbfa180005a557d 66ac4047d423e6b8623c80095cdfc634bddb9085
-bb38d9bb668d7df8aa32890b65edd11f715c435a 66ac4047d423e6b8623c80095cdfc634bddb9085
-78a990e292fe2caf2cc5c8e0844cf6d096847870 3761017d037e057d223d37e5059e06001c67621b
-0ac28febefb6e8f38d97f27568c69b96ceaa67bb 3761017d037e057d223d37e5059e06001c67621b
-34e8c3fe5ac552a24c57d8ca49cb58f2ca631d08 e56cf3377a83d37072630622ba009b592b4bcb3c
-03e23081df9f6ba37125b2a7ba57bbf65066ebaf aba42631ee039873575cd48bb90b41786e1642ea
-a1b48bae48c5dbc85fca893789c814ee390b5170 0d3337d1c4321a6488ab4513753b84cf84c8f792
-18a9db9a0c565cd29be9ffacf121226ed1e06688 0d3337d1c4321a6488ab4513753b84cf84c8f792
-41de42da37515d989c7907f6f091b0a4f18bea47 0d3337d1c4321a6488ab4513753b84cf84c8f792
-2222b76f244ac9dd8afbaff9e0ca47b1c6a8a876 0d3337d1c4321a6488ab4513753b84cf84c8f792
-b9f61d747be85e4deb4c83c344ceaad19358e8db 0d3337d1c4321a6488ab4513753b84cf84c8f792
-acd8de4320e8dca13347d3a4b46bb1d532f37050 e97bbbb6e8a0e0654ab783a9eb338173f1485c39
-efe8dad320fc7452234dabea3000a65a78b2e7fd dd5df2702a45aad95eb1061fcfaeec7ed869d424
-c2d22b40f66b1b783cb9d57a3484c482a4f69648 8c0846c5acfa283c0dfb9005bed332840f07e9e5
-a8ffec3bdb2f5afbd4ed7de179aafca15d938850 8c0846c5acfa283c0dfb9005bed332840f07e9e5
-f17a688a113dfbf6895096c5d3660929cfb45153 d370ede8b9d0be7193afa5132353f12fd4fb8975
-88814fefe980a183bfa24d12e5ac412f9db4546f 5559164255431c045f56062ef41f682656ba66a1
-7af1e0f78360c26df3b88c5fd20655dadf103456 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-268cecf3d0d016c30dec6fb7fbe9723515305d8e 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-09745f46c227710564de2c45771e97c842f33b40 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-3a8079114fcf55895d7292d83a03d01725363cac 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-19877ddab4c6270149b62b923537d25a18b3cc11 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-3c38cea6608fb91dd5d1d1a45664958b3faf24cf 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-4a8909e10ffc268c40fed8c7be013fef710e05d6 103d8c3f3a7483272beb0ce1160b1c264e6e1ed2
-29c50ec5954ed3a8dcc549f6d3c464a38852fb33 1d4f9db90e13c50b821a7e1d2ad597448c11341f
-748cb1f0107630f7577c89b3220df83befbf7f97 1d4f9db90e13c50b821a7e1d2ad597448c11341f
-f27917c67833a05aea8ed3d44c807edd80a28821 1d4f9db90e13c50b821a7e1d2ad597448c11341f
-bd11c9f05481ae8050f26fcc27bb163898caefc3 1d4f9db90e13c50b821a7e1d2ad597448c11341f
-c2b7d48407139581f9194e2bc350f3141e027b67 ad03c7010b7ed0af104cb6f80a578055780cc6bc
-87e661714eb0e11c08ebb9df74341988e61038ac ad03c7010b7ed0af104cb6f80a578055780cc6bc
-3f5e8c9895970c45e92b0cc6bbdd972cc1e3693e ad03c7010b7ed0af104cb6f80a578055780cc6bc
-fa02bee9bd629d8e13aae73d023e75ef19b517c3 ad03c7010b7ed0af104cb6f80a578055780cc6bc
-21bc191e90dd67ff183cd1c4c8abf499e9e12d21 ad03c7010b7ed0af104cb6f80a578055780cc6bc
-10c190ac72b993b782d9f837dc2fc99870f25b8a ad03c7010b7ed0af104cb6f80a578055780cc6bc
-2665f911841dddbad09675050c4867183f88fefe ad03c7010b7ed0af104cb6f80a578055780cc6bc
-568d63512522acf146ca0645a83b58d81a515a36 09b65014af93102c1bf653d7c4d582db27d5ec03
-f9bb9f84c30849aa46a23f9e6ac6fe000dadcb26 09b65014af93102c1bf653d7c4d582db27d5ec03
-61613280102140fdeb98c29c47a8bdf1053ee803 09b65014af93102c1bf653d7c4d582db27d5ec03
-c27e609943c4e1dc522d7104eab0fd9825f32178 09b65014af93102c1bf653d7c4d582db27d5ec03
-d637191c0ede0b30e4ffe85c224770708e177d2f 62984904b0caf1c6e766e7a2d8485665f2cc6be5
-5fabe383158085c4325a322028367e70caba33f4 62984904b0caf1c6e766e7a2d8485665f2cc6be5
-96b4c06826ee184cb3cb0730d2be75a14d06cbea 62984904b0caf1c6e766e7a2d8485665f2cc6be5
-77ffe3e3863c8ff98d1c8b323f5cc3e291b96db3 62984904b0caf1c6e766e7a2d8485665f2cc6be5
-534fdebf923ce892b2aa0c532271b0bfe3612f8e d04bb9e7606bca3f1c88a07d0fe5b330a7956864
-ee29303da1f68003977d37a421e0c1437d215b73 7dd0d01cf9c1ac61632ee0d52570fd4afed72b24
-dd59b74236a7fee1f0956855fa07b8e3a28ed5bc 1d9be119f65204c6d76a49d6e1086719e9847afd
-39d1f359509b67c438e9e34a0d62f0c06f881a7a 1d9be119f65204c6d76a49d6e1086719e9847afd
-c32ce658fea54b44928826f06df72ea0b9fc99be 1d9be119f65204c6d76a49d6e1086719e9847afd
-4cebf3e4ec8b72602f36dbd6465060644b60996a 1d9be119f65204c6d76a49d6e1086719e9847afd
-c42e1c28b206971779d84b7836d6d9423003fc65 1d9be119f65204c6d76a49d6e1086719e9847afd
-f951b9dad5f708e9b4592e2db6fd33cc2a51c03b 1d9be119f65204c6d76a49d6e1086719e9847afd
-390b4f7bd08c88742e37995d7ab8dc86cd17d915 1d9be119f65204c6d76a49d6e1086719e9847afd
-f07597d952e54e3ef8085b4a36e51d3ed95ba94d 1d9be119f65204c6d76a49d6e1086719e9847afd
-a8b0bf6912be99ec93a90ce6b6c6c83660fb1d9e 1d9be119f65204c6d76a49d6e1086719e9847afd
-30009310ac93b109b0709b2134ddb0b6aea8e2a9 59d77c33af7fc5f36384a2b6f613725c394832b3
-ad72febedfcd98380fb1dc9b7d982e1efb81ae57 59d77c33af7fc5f36384a2b6f613725c394832b3
-1ade7fb43a521e585ffb1fc9dc6060e1155af30d 59d77c33af7fc5f36384a2b6f613725c394832b3
-0f92e4809a3a5371ae6b7210fa4fae8e8c7a0c2b c43b50587713516490e55e9eddc26724312dcfc5
-1275b8c2b11a35b50b2fd15b12047531ba3d908d a503ec673df477dba4fe443678fa26d767bdd735
-3e5b6553d6417b442b93304f150fcf9ec44e8289 a503ec673df477dba4fe443678fa26d767bdd735
-eb5a5370b90412fc222c8d7117d5213bc07c608e a503ec673df477dba4fe443678fa26d767bdd735
-ce1b8ea256550a9f321cfb0087d888d135665631 df45dcb1d1eb78a4a73120ed04338dff4d5a0a68
-fdb91a19175b91d2d3a591e93d9bc1b81cc43397 0b1d3531e0f754520509161ddd8a64ba33ee3367
-997e995693e75169fdf37b72ed678f85c49625a1 0b1d3531e0f754520509161ddd8a64ba33ee3367
-8be91fc53a7aae8addf6f4fa3210f7609f4b1ff4 0b1d3531e0f754520509161ddd8a64ba33ee3367
-24963fd4ab2f1ee5dc9e4f0de8ddbf0771ccc734 0b1d3531e0f754520509161ddd8a64ba33ee3367
-11fff661364d685d036f190de15479bb147f14d1 0b1d3531e0f754520509161ddd8a64ba33ee3367
-a24dc935a5d40d939a24301ea59ed23ecbe46f98 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-e804cfe026e3a030450b44ab6ae746696bd35a35 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-d2010fcfba5117ea9523f028e142ba0de880004d b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-31e690dfbfa8645cb48d89a735a148ddd5101ecc b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-34787f72efdf0b4d96f375e1101630f780b42b97 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-8e0e95c6cf92401275cd309670528adc30bf685f b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-7454092fa7b3a370262c0ba46599ed420b0b856a b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-13dcaa4078da254979201f77d9dea1713f5a97cd b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-430e9642240b564e721885a75278458fea17b224 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-d562e84af6822d5fde65e0d2bf74eae9d3734b5e b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-2209f7f5b4cc9f84f79e0a15400802cd4843fb7d b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-571394be7d5ed8db7e7284db3c5eef3884e50285 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-109c27ad05ab1ed6001fba193ff7b2744379d4c2 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-ab5a527a4a6877ec1d51974dfaa9e9c6f2b40acd b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-30723e75fbd7da6a814aa986404511caac40b617 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-91103f7210da986cd08694be9367eca54e93d0ec b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-155ecff6258e33c2192d279e1c1f7e1fb870f3a4 b66b9b642a42479b60f7ce4dc246a4f31da7a9c2
-364855ff798177a5086cd3c860b417635ab2c410 6448d9b3c3f195e904092dc976fee758a0874cdd
-eb34591432578645471d7ad4fa396accb02462c9 6448d9b3c3f195e904092dc976fee758a0874cdd
-6bc947881cfc9125e83ecb7c319fb3ec464b943b 6448d9b3c3f195e904092dc976fee758a0874cdd
-ed12470a6b9abbeb335d41a1e05a1adeee34d8d9 6448d9b3c3f195e904092dc976fee758a0874cdd
-6f64300a298d83fbb1c8f78310ebd6d3f0e32273 6448d9b3c3f195e904092dc976fee758a0874cdd
-e66be825dc21006ae825fecf7ec12af22644f758 6448d9b3c3f195e904092dc976fee758a0874cdd
-85dc5ea3bab39033ffe4a179999e410db564180f 6448d9b3c3f195e904092dc976fee758a0874cdd
-5271b52ad1eff96154271e73d936afd22e7cd102 6448d9b3c3f195e904092dc976fee758a0874cdd
-58db81f1bc478bcd253e7107c74f6d395151f141 7af9a0f8976a03912158fddf1ef5d17458d3ce74
-6b8b11c88d1bd7bf4577c0c092f84732daecbcc2 19fa1d3b126a9ee040e0cb18be8c1f1e45973619
-5d1e8a1fcb48bc7898ae58cbca970c33e185f0fa 19fa1d3b126a9ee040e0cb18be8c1f1e45973619
-d7c4ef385171efe967d56c4109e6fceb20af2002 64b6a82be459e2dd623db6d97f6dfa2192f2d644
-eb87c8326d3922eb6007cce65606e04100d10c0f 64b6a82be459e2dd623db6d97f6dfa2192f2d644
-89f211b366067c5508c360fe199c6a425dc113b3 64b6a82be459e2dd623db6d97f6dfa2192f2d644
-0bbbc87b9350234532c02a82860c139b5825d60b 64b6a82be459e2dd623db6d97f6dfa2192f2d644
-bd909ae51f6f7ab98fc7d20002c73692f22313e2 64b6a82be459e2dd623db6d97f6dfa2192f2d644
-22ac389267c2b1acbabc53bd418a75e40d4f8ed0 d06cfcf03b5e71fb0987da9bdbe0f9d105e830a9
-aba7b12ec2a43f55a39894466d9ab4bd0e8aa65a d06cfcf03b5e71fb0987da9bdbe0f9d105e830a9
-dd2ee56ff7080062fac73c5f4606e140309f2ebd d06cfcf03b5e71fb0987da9bdbe0f9d105e830a9
-77f0b82cd76c5496f969e7662c797f74198cf512 d06cfcf03b5e71fb0987da9bdbe0f9d105e830a9
-4504e7a9012a566a2b1ca83f4c84bb6cc7f6e5ca c0b35b183078becaca3af3341873ae8aebdc1c72
-0ec8e6bb38c1d5196b502bfbfb24973878d9cf42 959e7089edca62ebb68fd7f7047f1ded79861ad2
-892fb0529759c77771eff94e863402a8a1be7738 959e7089edca62ebb68fd7f7047f1ded79861ad2
-426be93a6a4f2402706978207ac520732594ce21 959e7089edca62ebb68fd7f7047f1ded79861ad2
-52c8217163ffb4925002aff3e1d151a4a0cf56c2 fd185dc86ebb97078fe12a5d5a4b033622a7d434
-d7d27bfcbc5da4a3e6031966b3c810439427ef14 fd185dc86ebb97078fe12a5d5a4b033622a7d434
-b87589c9f2cc196c5b334120db73b5e07b89c3a1 fd185dc86ebb97078fe12a5d5a4b033622a7d434
-36a9831fd0f4a00a3df78d9cfb37dbcb738db1b7 fd185dc86ebb97078fe12a5d5a4b033622a7d434
-1f9b5e33e28849fab77f25f595fcc226928fd612 fd185dc86ebb97078fe12a5d5a4b033622a7d434
-56a588fe31764601668d16dc2ad3328edf7280c4 fd185dc86ebb97078fe12a5d5a4b033622a7d434
-88648a64e48f84b6dd04bc6ea0d5eed1f796b517 d826ffe0530edfc4093778c02d4adcaeec615225
-d3f85b9e3b0795388726704776a3362479476a80 d826ffe0530edfc4093778c02d4adcaeec615225
-2fd408498d18702835a5bad94ddfaa499359e492 d826ffe0530edfc4093778c02d4adcaeec615225
-fbf6ae64ced45497325ad20b32487fb561d5bfec d826ffe0530edfc4093778c02d4adcaeec615225
-7d41bbf22cccf8e380f1e08898b5cf506ce28aa0 d826ffe0530edfc4093778c02d4adcaeec615225
-c29d38c74a174f8395dd96603ef277d85ac6bc03 d826ffe0530edfc4093778c02d4adcaeec615225
-0871fe27986dbf88a851cf8a7fae7b350d4ac0de d826ffe0530edfc4093778c02d4adcaeec615225
-41abece0c58e9d6b595ffa14b3f119ca55252742 661aff2b878b9d2a5e01d2b83024310287585fb4
-10576adef5a89a7eb9767103aa2a3d6113693829 18d9d6ee7e43885fb5e27bdcfc4b4a6914c12a31
-08f97f871c55e42458a2398293822399fe7c5607 e9f429caf9afa0f5414ce3ded9d66dc9f991e5f0
-e9979aa9aaffa5bbebdbdaad8b64260615eb82b4 e9f429caf9afa0f5414ce3ded9d66dc9f991e5f0
-67a0d51cba4de5a2a4950769e8063e135bc689c0 e9f429caf9afa0f5414ce3ded9d66dc9f991e5f0
-59f9ed60a0771dbad0cb2b643cccb8fd0a05b1d1 1684bfc64a7f9f6f18ae8dafc883566e6c884998
-80f5e0fd2bf5da58f99ed26f5fcf4ec9ea439447 1684bfc64a7f9f6f18ae8dafc883566e6c884998
-7cf1b5a11934fe8cfa4935b3e6d5fdcad4e877cf 6199c90f599e40c837e41cb860a238c7f23cb38e
-cc09aac0f728c33022c42ef27bc7cee3f99e1055 504f553c1e864a0e2e7fc212afbc0f17fdbe9eef
-ab7835af40782068bec95154c4ab9018f91ac322 504f553c1e864a0e2e7fc212afbc0f17fdbe9eef
-2075c589cb4559d0933995e69881a4e43eca6f47 504f553c1e864a0e2e7fc212afbc0f17fdbe9eef
-1b8fe21a07392c9cb055115177d5e08a58f9e1bf 504f553c1e864a0e2e7fc212afbc0f17fdbe9eef
-4a3c674c0b13a90f82ca82a64b6b87ef577fc609 9ed7490c0426cb61563ebac9f6cde708fbc1cfc6
-7ba653b128d86801d75d498ad20b16e75efc9469 87d8fb0d736e3d2492f812bc7268b3f547a70e66
-51a8d0decc5282f1751ddea845c7507581a20095 87d8fb0d736e3d2492f812bc7268b3f547a70e66
-c435a4a6232c74564bc8d3c33e8346c494d9c3cd 87d8fb0d736e3d2492f812bc7268b3f547a70e66
-b1c6702b5f720dfd9e0bf828b0bcf21b253116d2 6b035c04990bee5dc3e869b43c6b63fb0eb8cdfd
-ed4b700cc59d25b62a72b875af78a699ca3a41f9 a02a4296b9c887666d35ff59b8f608601efdb57c
-4ba2fc6bae654c361509b64f91a6de9231736239 416fe901236ba0127c9d77fa630a5ff0bd37faa9
-d25c49854c2536553ee44e3b3df8f00d3353280e 416fe901236ba0127c9d77fa630a5ff0bd37faa9
-55fa28cdb7d6ccf1f238ba6e2c91a7e547ed0db2 416fe901236ba0127c9d77fa630a5ff0bd37faa9
-dc120c9d285f7d5b8ecfa7d756f5c089bcc71ea4 416fe901236ba0127c9d77fa630a5ff0bd37faa9
-2d72c7cca2fff4e58b78b3bf67e9fbe4f105cd8f 416fe901236ba0127c9d77fa630a5ff0bd37faa9
-64395305ab08a262fdc2aae938ba2b044739fbc2 40582e61f2d50d4c5194a6cdd70bdf32af4b9c8c
-1273184f6ea300343ba4b9dcc3ebc6d14f646d1f 40582e61f2d50d4c5194a6cdd70bdf32af4b9c8c
-47667d94e3e693fe69cbbaeca5e312a65942cb54 5765429e1daace05bc350738e6f82b3f71e52096
-160fceca737cbcf1a7f4fcf1d58ad3ae75146efa 5765429e1daace05bc350738e6f82b3f71e52096
-d1dc0968ba73eca49be8809abaa2b1f33d936e46 5765429e1daace05bc350738e6f82b3f71e52096
-cd7848ee0264670a6d685f9da840e39f00787c0b b962cc088f09939b1659e18198170fd7fb9de019
-8876669ea359173bd3fe478fc674c916152050f0 b962cc088f09939b1659e18198170fd7fb9de019
-4625411ca5d1e24ca30d479d3151e59fba771e52 b962cc088f09939b1659e18198170fd7fb9de019
-6fd6d9906d3f0649dad526bf96d4bd50bddf3123 a6371cdd24be0823fcc922fdd076fcd65fe8d769
-e5a25c3965bfe963e449ceb70731d1d7641ecec2 a6371cdd24be0823fcc922fdd076fcd65fe8d769
-403335bfdce2c922603e431fbd3f9e2b7bc8f57c a447efb5fa4b097ee90df93959e2152b0f60608b
-2fbd2f0b6629ae57c87200a0907e12a11d13f3b4 0aa4567bd9621695d8e0647e123759e48eaff562
-a94765f849f74bbf64d6783e0749b93a1b6cc81e 7e7b4deeddeb4a42bb8a186d499f10b9c73384cf
-dc34fde3f3fa139762a86dd93b903943c86b742b 7e7b4deeddeb4a42bb8a186d499f10b9c73384cf
-7c6cf1a3f106e94960f0d82de71a31dc29c881ee 7e7b4deeddeb4a42bb8a186d499f10b9c73384cf
-6f31d4d662219afaa301759d6287d4db65fdf719 26884eebb1b69e3eceaa761f0f39fea218911e9f
-3f1889ddbe9684f6a748a5ae1e1604a8900d103c 26884eebb1b69e3eceaa761f0f39fea218911e9f
-d0eb181dd794f9044bfebbbaa67017d4a398a9da 19c5223b5a03da855e4b27555c9d02d5e32fed7d
-6705286c339db4e4f749e6d7a1b721aec49f31d7 41d8eb20129e2742a5a123815d214c94fcccaee0
-3f91e041c9f7265b5a86203b5886a5257ff0ac50 41d8eb20129e2742a5a123815d214c94fcccaee0
-bb0ec46e3bf8d1df3b9627d4c156f7d20d761a2d ed772ce7a6cd80bf6dbc8ae624ea313b079a33a7
-e458221874cd78068832a9336d2b958ea6d086ad ed772ce7a6cd80bf6dbc8ae624ea313b079a33a7
-6b098cb8c300aba7843c97aae093bc0d614a8ff2 ed772ce7a6cd80bf6dbc8ae624ea313b079a33a7
-fd39a30c7f87294894c351cd92fbcecd2068af56 c9bbdef02e56e1d5345345306cca79cbc5dcc191
-272d935a13871b748a957650e44b63ea26d4f2a0 c9bbdef02e56e1d5345345306cca79cbc5dcc191
-66c9f0eb1e8f8359a8e28f625e1f7deeadcbf345 7fb0411a6422260b0a92f7b69e45874f75b775a7
-b76f9de1583b70a900ae8adeb606d293e37fe742 0d9918086ae961ba886d9195a9681ae7a04af307
-96c7115c66f4d0336efe35498ed8ffffecba3ad4 0d9918086ae961ba886d9195a9681ae7a04af307
-f158814fa6f2026fa87d3d8271fe65f66a0021cc 0d9918086ae961ba886d9195a9681ae7a04af307
-dac9729a85539026a49bc175da101534fc70d723 0d9918086ae961ba886d9195a9681ae7a04af307
-79d5e5118cff82b425126b2673e00f9e5ee5b7fc 0d9918086ae961ba886d9195a9681ae7a04af307
-b783012c041553a51d7b1c3c32547abe19a628bb 0d9918086ae961ba886d9195a9681ae7a04af307
-87d0a6e5b7511c165f1b20b0aea9978d72b56811 0d9918086ae961ba886d9195a9681ae7a04af307
-f60c756f902332280d3c75a9dcf9a1eb6fc3f5cd 828082e4c3b9c10316747332bd2d881faa812b78
-2e70f3ca57b97a7c7c3e64038b2a302667f489cc 828082e4c3b9c10316747332bd2d881faa812b78
-e3efae34780012b6c608e3d96147f570314e92b1 828082e4c3b9c10316747332bd2d881faa812b78
-3bf7f3284cda28adf1d19abc5d5e3286fc359e1e 828082e4c3b9c10316747332bd2d881faa812b78
-dba991c276081cf440b2512ac9bc748d4edabdca 828082e4c3b9c10316747332bd2d881faa812b78
-5d05c0049c2f31b7ed31ed7bf9eb9a863142e3e1 828082e4c3b9c10316747332bd2d881faa812b78
-87ef19676feae2d876bc62c30436e03fc2021973 828082e4c3b9c10316747332bd2d881faa812b78
-5eda0ce6e544dc9177532d55ae51fb0be4757ec2 828082e4c3b9c10316747332bd2d881faa812b78
-0a48091aafacafe872aa6135345caa1dd0074b40 dbc21c74db0abc6468f6a0a32f3b5e5e9e44de5e
-9bc1e7e01561b6ee3c656d3a5bcac8529e1aed14 dbc21c74db0abc6468f6a0a32f3b5e5e9e44de5e
-586ccb41c3b242f1870239d1af9e2012498671bc dbc21c74db0abc6468f6a0a32f3b5e5e9e44de5e
-7dacb1fbc3b8ba13d13687de4b45e6abcfe1862c dbc21c74db0abc6468f6a0a32f3b5e5e9e44de5e
-a6e0c99c31e9101d1034824eee96158bef48003d 92f7fcb38d1476edb8126916737ae3389e20b7e2
-8f2ba970733063dccea637809cf64be572c898c2 92f7fcb38d1476edb8126916737ae3389e20b7e2
-a654c9397293cbcd85288f268ddad24c2335ac4a 92f7fcb38d1476edb8126916737ae3389e20b7e2
-3f704c652644576fc1ee0815bae7967720743bde 92f7fcb38d1476edb8126916737ae3389e20b7e2
-c439d8c6774609a2f2e3c6ac2d3958257e494a02 92f7fcb38d1476edb8126916737ae3389e20b7e2
-429656516c2043913c01339650dabc545c3dd689 92f7fcb38d1476edb8126916737ae3389e20b7e2
-f5627d82b13fa0d07c74e1ce771b44ff5495874d 92f7fcb38d1476edb8126916737ae3389e20b7e2
-d559e59d23f0fc934ad6f84635fd83920f86a52c 92f7fcb38d1476edb8126916737ae3389e20b7e2
-cd6fffac2f07625be068d03d28e6f83642021227 92f7fcb38d1476edb8126916737ae3389e20b7e2
-a5de433efc28f5e5a3af76365ced62315764469b 92f7fcb38d1476edb8126916737ae3389e20b7e2
-a9da12824b165c00688c0c2be0b339d3b857661a 92f7fcb38d1476edb8126916737ae3389e20b7e2
-ecb1f90d31cacbf9e6fd7c6292ef5a8742566210 d70e44320133f8abb017d9abae52974569667a69
-ba102088bd5c13d614623f6cd34e30ff4bf6dc0b d70e44320133f8abb017d9abae52974569667a69
-9e59358c76bae94945864264623cc9bf6222e43e d70e44320133f8abb017d9abae52974569667a69
-15dcd167f644162db7af44a3403215018f507f2e b18bb377e4f3f78e71f0cdefeaff2d50e7c90d99
-4d73a0987f410e023299e69295ee3cb4a6712609 b18bb377e4f3f78e71f0cdefeaff2d50e7c90d99
-426f062bc45b04510456780d0301f26f727b3b59 b18bb377e4f3f78e71f0cdefeaff2d50e7c90d99
-c497cbfc5ecbc4ad3181beee4e2e9e00c3ee3517 7685c97e4d5b4aec18fbcd405717e046af2159c6
-0256fc36d37ba2e2f80bebcdc7a6ed1703d1e874 7685c97e4d5b4aec18fbcd405717e046af2159c6
-63e922e99d09909fe132c74505c0492eadb5fbd5 654e7028f1318cbd2f872de94ba378c5a658435b
-6366e234fbbb0afed3ab5bc6e4478d170b413932 654e7028f1318cbd2f872de94ba378c5a658435b
-2fd07fddce0a816622682542681e3ed9f957fc0a 654e7028f1318cbd2f872de94ba378c5a658435b
-9f517ea5c4a6a8d0b38c95d7807be6e461a6523a 12c2257a340c9145f815fbc214cd9c0732b746dd
-3738d5e1ec69682297ef94cb01b6046d2dc41c63 1d2706cca1340d3f494fc1fc9783e7a7a292d0e5
-fe165355c833ae99d749bf416471f813b19f3b40 1d2706cca1340d3f494fc1fc9783e7a7a292d0e5
-03e1c4bf4e63e1229430d4a4b24997fe45686fb9 1d2706cca1340d3f494fc1fc9783e7a7a292d0e5
-44c5845d8d3362bd3606e4e2646d2695bfd37510 3de2081d5ad482d94045eeef559abc6d709ef39c
-224030461f8ae6097953b4d4b3653517cb14a60b 3de2081d5ad482d94045eeef559abc6d709ef39c
-6a9533bfaf72c7490bd832380a81cb5389a358f7 3de2081d5ad482d94045eeef559abc6d709ef39c
-7915ce42465ab4d1a025985724231fde1b26ff21 3de2081d5ad482d94045eeef559abc6d709ef39c
-91c046bc9097328819d8b226bd4ab4398a702ce7 3de2081d5ad482d94045eeef559abc6d709ef39c
-9c1291c9c0e96383215c5f161019b84cea1d45f2 689f855ffc348efe13ce176f07962e7d52a594c3
-80dc612641d6a1c91e8683b6a2f6dfd3ef3856af 689f855ffc348efe13ce176f07962e7d52a594c3
-b9f15d216d7a82d2d814e4dd2b7d0fce16b61718 689f855ffc348efe13ce176f07962e7d52a594c3
-5b017e89e2983ac4bbfc055b0b37adae6d4fdbc4 b4b897a6518078a83928c27d5e9bbbdca4114a62
-078f92c37b4a297dfccec2e10d4fad4beb613656 b4b897a6518078a83928c27d5e9bbbdca4114a62
-bb4e1116c84e8eecdbe2d12777ad27502c5aba21 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-fdba541d8394cea1d382849ccc0a9e1ed547dfee 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-93d9cee8a0ff3d36f1a9d96091300c33ec869efd 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-009e1dede58f278a17a1023c5a0676214ea2d4fe 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-ab27766af567a0aadbebcc5ea91106d444475480 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-8b58e782fa504a6309dd784ae49dd2e7f306a955 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-420d2d877b1e1ff587edff8e77b4217690ac51f2 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-b7933ad343376584543f8aaabeb338bff460227a 74cbba7643b249cfa1ae02945fca06b636b5f6ac
-a2ab0e90277c69af62b09ec6667f244ef686e262 b5e033e2ba0dc861db6c4b84e21d28b16596e259
-aa3a3206d83d669a229325fac9eeb0cb7eb3fe7a b5e033e2ba0dc861db6c4b84e21d28b16596e259
-8825fb8518e3f8be9a045e2bf08e28b5325ddc22 b5e033e2ba0dc861db6c4b84e21d28b16596e259
-49d0c6e11032bf46ca4fa8012c5297085112462e 0e532d8fe8197127a3981fa757535b535897934e
-20fd15f4fef8a7da9cedaa97225688160c4c0925 433fdbf1db74130cfecda77909633f958d42c1c3
-ad03095c0fb63faa213531f4436bfdc9f6020609 4960acaa6d97e564fae6da06f43c733aaed54fee
-9fc90100350bc838882a7fdbca9f9fcd0f0b8066 4960acaa6d97e564fae6da06f43c733aaed54fee
-f4a1502f357c247b73b484a30dd7c8a5756afe6c 001c1f8b85ead1b1d0afb76dfa81a7a49b6ff711
-711c44449bf56ec9511d5dd7e9b6c0a8b37db630 001c1f8b85ead1b1d0afb76dfa81a7a49b6ff711
-2be07103d0900200005a86e71c57f60fa6be6126 001c1f8b85ead1b1d0afb76dfa81a7a49b6ff711
-7b80c8f84e13fb83f58b7a92d3779b4598a9c907 5d3734cf464dc26e3d783c4e778bee5b184c5707
-9ccb8b03f7e9589469cb29cf40133d791c00862e 8f6a35a409d4d3b1c43b98eba6b111235e73e2dd
-2a9b5a9aa747e8b6353f98a2ac00b0a09ea93a23 afa29d0d3c1641fe7bf2980437d7aadf9fda182e
-cbca92909a40bb0ed81ede9430795423bffe33f2 4c9ece8cd4e6dc0fe4a6dee6bb3dce8620f068ad
-cf0495a3de7677fafeae1b3291a1ecb693a2f400 4c9ece8cd4e6dc0fe4a6dee6bb3dce8620f068ad
-d0e91611369a35adbe7f0d687192c7b2135538f8 4c9ece8cd4e6dc0fe4a6dee6bb3dce8620f068ad
-d0220baa24b557b5c3a0562ec16e5bd47ee94f1f 4c9ece8cd4e6dc0fe4a6dee6bb3dce8620f068ad
-3c504fc3c9a12cc2c31ae250a15ad13a7a8c743c ee3f49fb66ad8f0d85387baae80d388ca44ffd66
-7460a69e4184968e7127ff891c06f5a69f767369 7b0ff77d55d1402ebb2463c95e0b8712e6754e93
-bf9e85a60f5e921208aea74e064e22b31b157a5a 2aaa4c0b4262a8cae61627c9ed804de05d78541c
-87f087b86e3c374a656c2cf64f15c859cea92c82 57a61fe9a42f77041752d2dc095307fa314178c3
-f86ca3d424e2fa44115f70aa712489abc836f525 57a61fe9a42f77041752d2dc095307fa314178c3
-ac94e66bcf2995c9ddc0429b0eae6c84f9bb5dca 57a61fe9a42f77041752d2dc095307fa314178c3
-767352876d2709ed08d1ccb535afbbd9fb436c1b 57a61fe9a42f77041752d2dc095307fa314178c3
-ab71585856d8b8dc9252018cababb4672a96104a 57a61fe9a42f77041752d2dc095307fa314178c3
-c6b092582d0d8f4d24421a561b3e58ed1ec82f87 0aa0a3d9bd5f0613be146b2060ce9a6e1a911071
-bc36bea8182f164f262ea5f70d957ddb5f74b6d9 f50dcbc27b84d4e47676d72462e6944f71d77636
-30d319138c49124f48840ded3df4c10e3e3792d4 f50dcbc27b84d4e47676d72462e6944f71d77636
-273479af58871aa7219e44c964d02e3bb685ce4d f50dcbc27b84d4e47676d72462e6944f71d77636
-67624ba4ad62949e0e308bbbafa209a93bf52893 748ad107869c4f201b54e94bec16c4c9ab239035
-3464bc710e637a6d931353b8018a8bb73655f156 a68ec59a1a1942e0dd81f2c81b14e20c664beee9
-bd1e6b76eb69c3c976281e1e0d3590c14af805dd 6fa5396e7e71774c479ad4b2e1a92a50a35dfb24
-e4eb8114ef6f7b9a939c8412c368f3c27806db2d 6fa5396e7e71774c479ad4b2e1a92a50a35dfb24
-3f416bb9fb3c00387d8ccebcab9e8e9b941d95ab f0a796acebf36ce43be1503ee39dc5f730a2f150
-31250bd54f526d24d4c1e035013c3282499b019b 52188955b1fd79d2bbfd7512144fee64342c2472
-c1ebf5bee9f1941350dc0baf59b55444d4cc2bc0 52188955b1fd79d2bbfd7512144fee64342c2472
-67024c268f1019266c8fa6aaf81068e94852056b 52188955b1fd79d2bbfd7512144fee64342c2472
-c6d54c753b3726e606ef5ce5ba053255943172c3 52188955b1fd79d2bbfd7512144fee64342c2472
-76c381ad5a2e2548e58374f6b3baabc403b052b3 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-59bc5b0abf7babaf53159387893127d107461c4d 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-db3975a9452af45f8f4179104a52a111f1a8968c 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-5182e83b8b29ef6b8591526c6e476f5bcfbdb2bc 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-cf19e664c81b202fa7eb3087172575825201fb9f 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-290adfd3b9d460e93cdeeea4ff23272f218717f3 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-129f20964fac67af7a036624199d6fd41fd7598b 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-4e52355d664950bf0b1e0b00d3bf345d02585152 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-bda11b2676bd4bc7dbe551bbf5e801a9fc8a6697 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-c1a6ca47f2baace5eb158a79bf26d40b70fc8cdc 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-69834417aec2b45177ffe2e49182626ac132d987 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-50225e88c0cdedb5dbde60bf215222bab25d8005 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-4ae16c5c28edd50ee6c8d0c4d674455c0a4b4c82 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-3927a2120656fc507ebc1465e203585624debec4 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-ecdb059e2439eece28da7632309a01c4aadfebe4 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-3e3a0676f3eeca56f9532a5e5018a12f30ba0d3b 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-801b823f3770ab14af08f853a231188e03da1f21 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-9740e7198b3f7dbe4fa9d3c51bb7b7ce8f8c7dbe 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-260067b23a32f9adc7e4957b000bf58153ea68a1 2ca0dc8d3c9bd9a68563f3acb71686b65323cce6
-879a3e980f93982f6a3ce973ff6ff709b154966b 1c7ee96dfd1d51487627ed008b3e815ba45d0453
-3c1d8ffb57380988fa8015148dad4167b149107e 4fc2d988ac86f9be903f9cbf2a6ee3e7b33adfcc
-93d31683a73445e3b1ff26d2d6efff53597b6c98 e16552dfc5ae63d08556649f401582f01f01ff5d
-9df14f3c86c87e1698cdf415a3b38797647bedb0 e16552dfc5ae63d08556649f401582f01f01ff5d
-32a9d46db4e79e24000765563532780481ec8d03 e16552dfc5ae63d08556649f401582f01f01ff5d
-d7a6393a2d3d4d49b02f9d1f438fc1b5ee0a8fee e3b2d8b20ceb732ab55ddea3d75519f82c22a056
-b564651960e106a2cc165b34d7bdcfb997975abd e3b2d8b20ceb732ab55ddea3d75519f82c22a056
-7f579e8e45bb95c7f4fb1186e2c3eac875546e4a e3b2d8b20ceb732ab55ddea3d75519f82c22a056
-f17c58adb212cd1a4c93cabfd89671a244b0d8c9 d4527b252f08c08445a38a597546de9c3e7fa2b3
-2ed19b05e6643c8e0a0170ceda509317acceba9d d4527b252f08c08445a38a597546de9c3e7fa2b3
-47ec5636fec06b16ad13e95dfeee1c033f475e69 0971277b99c597e0c297f0c49db0a0b47a68d948
-e5a8b128c7aab6038532c562fd6f23268e4b1e71 7c318835c54e308d08e166c2c9e366c3a7653c18
-9f5bdd331a70fc04279c9c1a5dde36804fd0bb86 fb0fa66cdb68346ac24f87703c3ce962c6c618be
-f3aba85fdf851d62df0a210b3248769c1fdf624c b4a98521dc8f758fd935aecc59321e0a37cfdcee
-4d680fa6e74c1bbcc3044e28649471cbc32f32d9 b4a98521dc8f758fd935aecc59321e0a37cfdcee
-e65f1a8d7b4f408588231bc0c2c4338eca688de7 d66d7660359241b3e26220fb031c4d032c3817d5
-5a1a454a290b5125a4ddae554a56a20efdacab29 d66d7660359241b3e26220fb031c4d032c3817d5
-abac40fe154ab6fe813c021763b0b17668bf05cd 706137daeaa4d88638f077c13edbf40fb081cee3
-4f3dc2854d7cc315deaadf20ebb3a926ba684e09 706137daeaa4d88638f077c13edbf40fb081cee3
-0a824eb7fa823908e6110bed8bb96f42676d5143 706137daeaa4d88638f077c13edbf40fb081cee3
-3ceba2cce2bebd031997974264dc66d50b01f8fb 706137daeaa4d88638f077c13edbf40fb081cee3
-25990426994656eab794c1b381b03692ce4f8d87 706137daeaa4d88638f077c13edbf40fb081cee3
-9a0a127110f9511860ff546bbe79715765d8c857 9e12b59fc3b74812b1dc7bdcacd7a543eb63a12a
-56a9da25979b92789331304d320724d2b066b9d2 9e12b59fc3b74812b1dc7bdcacd7a543eb63a12a
-d0a824c661e5e5948d8d0c98804a004e7c063b48 9e12b59fc3b74812b1dc7bdcacd7a543eb63a12a
-1c5c463d46b4ee7690df78466940b978f4828b84 9e12b59fc3b74812b1dc7bdcacd7a543eb63a12a
-3ce4ffe33cbfd6028abeadb930f436c65fcc171a e03f335c8eaf1232adc63e684dfba834c6c00357
-7485ae6a7d8c9d1b6d2fab89bb99589c8995ff12 4f47250c20fcd8710e4a6ae650a776f756338fba
-d85d98d297903b2e47caedf790929322a214530a 4f47250c20fcd8710e4a6ae650a776f756338fba
-c018da3f68fedfa73aa3a87c3694112e9bc0aebe 4f47250c20fcd8710e4a6ae650a776f756338fba
-508f2a4cc73c777f1319d7965cbc9d9f481475ea 4f47250c20fcd8710e4a6ae650a776f756338fba
-23e91612c6fb24dbbeadd6dd2f19931595a44b54 098bac26d58b566f004707c011fd45a72116b310
-d3e3fdc27f613bbeb4f88cf79e52500abf0f0b4c c58a8d2e628e079a81f84c0b4b181b274373f8de
-1bf961bc319f579e4f7309d497923b01b958dcbc c58a8d2e628e079a81f84c0b4b181b274373f8de
-b318516833d1fc4439450312f18c952fe5542663 8e09bb7b2ac52c39c4deae2a2478936a70efd975
-e5efaa921f3a28116c40cf070024f952728e2d0f 8e09bb7b2ac52c39c4deae2a2478936a70efd975
-731dbe5251dfb688239d2882d7ffc3ff19946965 8e09bb7b2ac52c39c4deae2a2478936a70efd975
-e8cfbfd74f580baeb566ca223ceb56f22ae154ee 8e09bb7b2ac52c39c4deae2a2478936a70efd975
-159f7a06af6f35d659481dd6d5a384a0f006c7a6 8e09bb7b2ac52c39c4deae2a2478936a70efd975
-1b3acd160f03a50bf901129a2de919ab2cf71f3c b6e6145c7f1e6d5fe3b9b7f06e2a763d06e56a51
-712b22ecb55566076bce4f1ed7bfcfb67b7683be b6e6145c7f1e6d5fe3b9b7f06e2a763d06e56a51
-533c54b532de32b2ad80b406c9de141d0a37e83b b6e6145c7f1e6d5fe3b9b7f06e2a763d06e56a51
-578af6b6edd64adbff6bfc1e3f384e80336f9c3d c9def4b494460d0feaeb84e5b10d622024019647
-4d681aef47036c2ef6a9f565c9d97b6110d9c6f6 c9def4b494460d0feaeb84e5b10d622024019647
-73b26f30e57f0d6b3adba70f858ed5a5baef5981 c9def4b494460d0feaeb84e5b10d622024019647
-7916fc6119afdae0b8307f580fa67d5b7dd29f89 682df857ec6325ec36c295a22031dced7f26b813
-9df54fcdddb69468b4eeb289df604eaa8b56a0bf 682df857ec6325ec36c295a22031dced7f26b813
-c7763d4b845d93979f5135bdb9fcb96ab88edb53 74a9d57b2bde16503cf524da76806b61da24fe35
-da1a6bfc812498ba84e9f9a9a28d31117c2def40 74a9d57b2bde16503cf524da76806b61da24fe35
-8254ab67b72ad7499c045ce055a639422ede2ba8 74a9d57b2bde16503cf524da76806b61da24fe35
-70b00bcb23e0a2938bcf3d0e0b3b20a3e5bdd5bf 74a9d57b2bde16503cf524da76806b61da24fe35
-bbf935013e6d6f781d15e37e48e1a41c11979d73 74a9d57b2bde16503cf524da76806b61da24fe35
-dbe542a4c347068542ea638d594084234c96fab7 74a9d57b2bde16503cf524da76806b61da24fe35
-7601b31dc396194c2b63e677533fe63a772bbae9 74a9d57b2bde16503cf524da76806b61da24fe35
-878b182f7a9d3b5c6c0b618780b2bbfa4ed2c9ec 74a9d57b2bde16503cf524da76806b61da24fe35
-ac9573073847369258533b02c9c63c532ce80031 74a9d57b2bde16503cf524da76806b61da24fe35
-7aeb836b73388ab0e7609607e84603a816c0f614 74a9d57b2bde16503cf524da76806b61da24fe35
-e42a2ac0ac69fea17c99ed989b214068387a3c87 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-8a128f3c190f3b29a5933122126e677a72685759 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-5226472d4e1bb833062d12ac9f5e97f881b00a16 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-da4d4a84200db347ac8898f42521c46a2a82a588 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-540151b23a0976c20e3e894e6d47d9e2ec0a82c8 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-3bc67d3d04b3a8e7e4310f3d1bc885d02a19c1d8 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-9a40c8c5ced5b7588d1a4db0a02154b86a851391 4bfe2efdc0915d9dc76dbf6684341be36b0af0f2
-189a4a1e9b089f147469de4bfd90693bbe7434b0 f3e2058d36bfc30538b333729858fec0d0fdc01f
-a505a07f98357bfc85a164c98327ba1b46a33f9a f3e2058d36bfc30538b333729858fec0d0fdc01f
-d00ae73f63083af7cba9af06c035a7dc39f59d12 f3e2058d36bfc30538b333729858fec0d0fdc01f
-1cebcc8600d51818528b7ff68117a1fc05d5992d f3e2058d36bfc30538b333729858fec0d0fdc01f
-651188e747ef6a844fc092e89a9b4d0e09f65023 f3e2058d36bfc30538b333729858fec0d0fdc01f
-564d6eea1b80852a93ee0d0aad5748863e5be448 f3e2058d36bfc30538b333729858fec0d0fdc01f
-849648ca624b678a47bed46902045bc99ba76ba2 f3e2058d36bfc30538b333729858fec0d0fdc01f
-c56a5f390b08588b07bee079c447d3a624715ef9 f3e2058d36bfc30538b333729858fec0d0fdc01f
-bded4284b8c29a9f030ac6a74fa16a5e3e4e7ed7 f3e2058d36bfc30538b333729858fec0d0fdc01f
-a349295be77ddc018c47536567735c807e732ae8 f3e2058d36bfc30538b333729858fec0d0fdc01f
-bebd22fd70d991c254ee77fa37b80760c5f74107 3e9e4db19e084570b2f73ffc2edda41ec7c3cf3b
-6e19f322b90803092ab986bfc18dcbc0d36ece0a 7c1beb9cc13bebfbbda6d88c837b799475af757d
-f9fa032fc78cfa489141569987c63a1b6e224b80 3e5fd5bbdb60ad54318dd47a2ca1ec216128f680
-f367d8930a67e10a39a06f5ce84f401b0a7d4223 0eae54f166bb6b0a7bca4e87d3eca919d693f19a
-4bbb3f47ea1011ffce2cfab7cdb6704f713e8fc8 3e2f24235be3b6c5c3389edf1e47b1775a9567d8
-055ec42abf8f6ef9b9674b80b5c8f054fe7febe1 3e2f24235be3b6c5c3389edf1e47b1775a9567d8
-d03139d0c2ae088be3e080a806f6365aa2fdb899 3e2f24235be3b6c5c3389edf1e47b1775a9567d8
-114665abdfcfb7d83026e0dc0d52056088ee8396 3e2f24235be3b6c5c3389edf1e47b1775a9567d8
-045470b7af8f9a5755a497f7e18305de5ccac50b 3e2f24235be3b6c5c3389edf1e47b1775a9567d8
-216f8052e72aabcdea6b41083ec6b25eea800e76 3e2f24235be3b6c5c3389edf1e47b1775a9567d8
-97d1887240c5d05b8eb668ffe28dcee4698fcde3 a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-f7de8be7b0be0d6fd143088f2a5ae6e26104df50 a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-809b68d85e9618d922f33a22e568f169565f1914 a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-6376433434ca9f48048246aab2ceb9f5bbe83abf a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-1c7ddbb3b457f5a8c0e23b75486ed6eff5236e4b a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-37a56d34bc3208999b5e45d1b8ed16fbe1da07de a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-3e18fe2ddc7de223b74bc7093686a0c65d9b9491 a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-d7d15db4549a87b66fd523be79bcd0ec4263e3ff a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-77ec05c765b949d4aa876eab96d58ab5454ac4b4 a11bd1c18df12e3f2baff980fd7a8448d6244e2b
-7ad05192f2ba706dbeecc0775553b45bc58f1559 f620cd15f7c1a7c8c0d384d5919ee86f88985dfa
-799038adc03fd2606b6adef48983a2fe9844d47d 6b0d2dea6d9643309c8fc1160976a89a8063ed88
-5fa33d5b74a8100150f22f197f934533a8308d9e 6b0d2dea6d9643309c8fc1160976a89a8063ed88
-4aa662b66b6627da99beda365b012b7c869e3262 6b0d2dea6d9643309c8fc1160976a89a8063ed88
-1f9e018e8e7e52335cb5024d9bc20bc408ec74ef 6b0d2dea6d9643309c8fc1160976a89a8063ed88
-57e72b84c8ae143a70d8388ea7338690de6f1846 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-b37b14ca269ce5ea4c5fc936215bdc77d8a85a84 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-9a6d7c70002684c4dbd28b88c64573d7bbf98965 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-e441f47647428ab3baf757fd732b0e445d6ed449 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-14204ddd5e7b1c3445da64041273d1463201657e 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-859519ca2fc0175b8d7b15adb671ea6cd293776e 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-ca5bde42db13676365aafc1ec53b5e97616e04d8 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-4dba2cd22a7f48ae64963d5285f3fa056ef96f2f 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-18a3d1c9765355969459549a1c6b6bb19cc1640a 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-e405e71a15705a3972a888fed6bdfb30b145785c 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-8899a7ee4e728453923b954e81d3e3b2bc2f738a 730ce7655a02f1fd6f42ad514dbcc507fa4426ea
-74f9e714c96dec70abefc9ae50454a712dcdedb5 6b2a861e4722a4b96a26d5deb8656bd564252163
-0aca9469666d8767b91a33fd2ccd4a2cd5dac202 6b2a861e4722a4b96a26d5deb8656bd564252163
-dfe63577dd27e9f85d9dac095014b201d702d6ca 6b2a861e4722a4b96a26d5deb8656bd564252163
-f6590ce3dcec676a4817f0c61b5e4e768ad116f4 6b2a861e4722a4b96a26d5deb8656bd564252163
-83fda433d5b0bedeb538bdb1bf7d11e7d8ccf2de 6b2a861e4722a4b96a26d5deb8656bd564252163
-3a4bf01929acf0ff6a367e0be0f5478768fde2b5 6b2a861e4722a4b96a26d5deb8656bd564252163
-c9d25ee57e3f84535a1aea31b98376b6df886379 6b2a861e4722a4b96a26d5deb8656bd564252163
-288b8b5f5e2ffa3879f381c44638b9a0949eb48f 6b2a861e4722a4b96a26d5deb8656bd564252163
-03f0efe176dc58a4f03c069053edd7a609b389a5 6b2a861e4722a4b96a26d5deb8656bd564252163
-09d74ccd34e858e26e2bfa75275ff40cf504eadc 6b2a861e4722a4b96a26d5deb8656bd564252163
-b914b06b9f47fbde4b71dc6bf49a3ad879fd6831 6b2a861e4722a4b96a26d5deb8656bd564252163
-9898b79a16d81e43540b535a35dcfa17ea2b6161 6b2a861e4722a4b96a26d5deb8656bd564252163
-3ce88a352a85040338f3819c61f74002a1d4fd4e 232f9678552946f44d4b752c899890e283629076
-319c5c4abfc046b8e5d8768b9bd171588f1e1915 232f9678552946f44d4b752c899890e283629076
-77798a4afdf68c1f883e118faa4f89dcad86d5b0 232f9678552946f44d4b752c899890e283629076
-03ad42f7b48b60bbff0089b312bf07cc8287055d 996f2cfbb0445bf25bafd557f1c6a4c97b50736e
-fbf83f4212aa8201d5a0297ec52ec8e6d7771e78 6308a0b81d1aebc8ca087bc75adbf7511f422f33
-cbef111e513acec77c6b709ed4eab937571040f7 75d95ac2826b37f9a3d34fea1ef7899fb2da3a95
-26838bebbe5d853f81f6bf6c8ffff22444023bfb 75d95ac2826b37f9a3d34fea1ef7899fb2da3a95
-6b7aa161bfdc8464b24774410d4680b8036aabcf 170b92eb4a273fff04d93decf95c9a621ee7de67
-922f8b10d0bcefeba4cd87ec280812110eff4402 170b92eb4a273fff04d93decf95c9a621ee7de67
-71f2122a43fab383c00af46684f767d46b0e5dee 170b92eb4a273fff04d93decf95c9a621ee7de67
-43be3b9670e2dd9187c227290c9f103cd7cd36df 170b92eb4a273fff04d93decf95c9a621ee7de67
-b3cbb8b51e1fe53c555fd24c39002e83db75828d 170b92eb4a273fff04d93decf95c9a621ee7de67
-0a8eb8ae75a6c6b8a767cfdd61560e764cb93f79 170b92eb4a273fff04d93decf95c9a621ee7de67
-8cecaaac93c622437460f0f9df80e6a1c146f763 935fc05cfa687c73f419bb676e249be6c3f60c74
-21f2da7763d4782a7014020b4b7bf07878bcbfa1 c5b9aaeaf96b24cc9611922c6ed886e1c87f354e
-6276beb068c04af3f68d32888661e8c75cb20a4b c5b9aaeaf96b24cc9611922c6ed886e1c87f354e
-53f43ff1dac8e688f1269f9bc946a36113033833 c5b9aaeaf96b24cc9611922c6ed886e1c87f354e
-2c9205a8ffe39a667a6b6bd89ae1a0d0b7795920 b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-3ed44d725a5df4413c892af9c9d6d740bcbae453 b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-ae952c8d19af95df441dbe55cb4483eae9ce2f93 b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-c6cb09cf7c49da007d68658401e172b189f0a3f9 b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-b2a15c03e9f81babeff0ff5324f5668f58681140 b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-3c9e89b73b342a0ab2ca3640e58a18bb8e3b476e b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-574e5e6064e0538e18c3dd4d010c3c6aa923dedf b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-d6865fc06872cea6e775401f59f0e7f90c1e701a b7d30a1165ef94f9c80e9b8ae01b595267d9696e
-c72e0742d2388bcc764b904c6c8b1dd88f04da4d e979ab77f8cd3c11e1a3a202b39f0e38adda5dad
-4281751170a8360cd44a751db3eb83c02bd89f11 e979ab77f8cd3c11e1a3a202b39f0e38adda5dad
-470fd593d0f0c53e4ac9c8c9b0a3042b47e3de2c e979ab77f8cd3c11e1a3a202b39f0e38adda5dad
-5001f9c328a2a6729ecd1c390f27b3d891c63084 da246b5bc61516f8f135f7535dd1b397b9b604d9
-ff71c0a366cdb00bc0f00143880b376ab812cab5 da246b5bc61516f8f135f7535dd1b397b9b604d9
-9fc04248be45d03b0898db5f04a53b99f7c83de6 da246b5bc61516f8f135f7535dd1b397b9b604d9
-d2a6e8c7a75a43ed06b120180b5769e595a948b7 da246b5bc61516f8f135f7535dd1b397b9b604d9
-9c448074ec0697afde059dfc93d62f15289d5040 da246b5bc61516f8f135f7535dd1b397b9b604d9
-70ef367e14cc0df14137e541540595bac38b25bf da246b5bc61516f8f135f7535dd1b397b9b604d9
-30c820495c470febceddff377035262926489120 da246b5bc61516f8f135f7535dd1b397b9b604d9
-bcddf216ed3c61a7ab0377217baa436911f57319 39c9eb721ac7b1ddaa122b167c7533eec38e8046
-e47ae58eaa3651f25eabb1a825b66e0c7161bfce 39c9eb721ac7b1ddaa122b167c7533eec38e8046
-345e01df54aa27a40b53bc3554488061a60dfb84 39c9eb721ac7b1ddaa122b167c7533eec38e8046
-9522d0252723ac73ad2bab6e33673a51aa5e1cc6 39c9eb721ac7b1ddaa122b167c7533eec38e8046
-2db8779e8556edc8143b871a1a109ef20532805c 59a61f2380e64c11e54deb3a0c8abb6e501066cd
-8b2667fa0d6ae91fc9e1a64c30e4a52c68ddf15d 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-4bed7649c4d285e0fdb05b6c75e18977eb5b8e40 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-aedf7ee4259834c6e053ba87f944cccbdb27e863 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-b791c65746bdc9129ab9c1a9d07ae3482ac434a3 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-7d83c9299d0d4091591f4560772903ecd747957c 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-bc460a6e95f46679d3b3aff66ee4495d02d35388 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-97ba99ac4a9ff8b96c05a71828779cb9816fbfe7 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-f036c727c9568c78ac0164366a8a0b1d2c1184f4 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-d55696a228b854d7e505dea0fbbc79ec8776518a 20a1bad4b1f3fc0143d8a5efbbf07b4dee5c72c8
-fb8d881db5512d33bf6a6f6bface746129d8bc71 5d03bd594dde3a26657b17137e7de6eaab7cef2c
-9c93dc4fb444361a560c29544e73dbe2e7095b08 5d03bd594dde3a26657b17137e7de6eaab7cef2c
-669d24b807f05439e151110a813bbb4e0fdffe58 6a1f7a34c63e328d2ddd673ba9f69b1c5c93bbc6
-1ee7d17566b438e74aada9f1c4b8863e78fd4b6a 6a1f7a34c63e328d2ddd673ba9f69b1c5c93bbc6
-c4cfa2da454d36cfb29abd27241f84b40e095d96 6a1f7a34c63e328d2ddd673ba9f69b1c5c93bbc6
-acbfe60943880043783c07f47071cddeb9a0f961 6a1f7a34c63e328d2ddd673ba9f69b1c5c93bbc6
-3000b62c0b6dc47d39743b7e16077551bf36f37c ea60bab5df3320eca4927f61e7fbb3111838c6f2
-2581bf2ef810f30da2802e5cf6a1d8a2273b37ed d1b9daa80154d139e03e1eea5ded6fa95d588f3f
-e7d405c657cce419fe35c5d4c4ee4dfafc88c09d d1b9daa80154d139e03e1eea5ded6fa95d588f3f
-997b7151a848630d57f4c692c4e8886d9daee0b3 03f02022386b3c7fc0223e0d954b8f58546ee103
-46a4a9ab2a743a3560305522c99ad00dae5c39f9 03f02022386b3c7fc0223e0d954b8f58546ee103
-febe74523656c5adf247536e46a26f8fac594b1d 03f02022386b3c7fc0223e0d954b8f58546ee103
-c63c1e69b9215387800d7ea897ebbdfa6f285364 03f02022386b3c7fc0223e0d954b8f58546ee103
-abb8a378ad434bf2dfde107b7dd8f3e335c25d84 a751b3ae351269c936e61a9bd202040c711e07c0
-7768e06bdc64864054357eb901f98c0553789c33 367c8db5b322efe1cfe3abc4e9c9c5f65e3d9f9f
-c28cff470928d6bd12305def020ba9fb9f1d4262 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-b46316263868f7c800f98aad329553331b1c7f5f 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-57c7c39bb9d7a0a93563c090f7b7cce6b2d8f4b8 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-292c2a31759bdf9ae90caa01ce0ae68772ab7ff8 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-e92e2262a087bf5fb8da50b98269eb7813832f0d 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-a2ec4922f809d389db9bc3ceddf9d9c78337542e 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-5487f4c9d3bceda374c6461a470adfdaeebb67da 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-facd5461a2d3f8a7c872abb35427fbd778b3fb2b 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-dcd4aa63e7523f9798fbc3402ae9409ca517ff93 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-23d768ca642264a32d2e06601ea93da8f1692ede 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-d6aaf8fa71f3d07437a8f67afc3a730424580df2 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-8d4bd65264d40c7da3f20753925511d6722a9217 5b2a9b171c7a60ac95f0d3bbbbecabb7fe846cea
-b2c5ca8acd6cd2f5ffa0b22124409e837b73410f e773bdd912c25581f1859cbe58d3c7dacc8955e4
-2b7a441cbab709b7581fa4e5b3646777a9b60db8 e773bdd912c25581f1859cbe58d3c7dacc8955e4
-7257a4a66523164049a3b29846686abece16cefd e773bdd912c25581f1859cbe58d3c7dacc8955e4
-10bfeb60419e307d88e5cac46b806d6c05d8a126 86f2be0f5b55e5f70d73f7c671480a31778cf22d
-af9ed9d34d5ad07eec78296e2750e38c43a7dbfa 86f2be0f5b55e5f70d73f7c671480a31778cf22d
-40d78caa16e8d13c86f41bee9ceb718d8287d7aa 86f2be0f5b55e5f70d73f7c671480a31778cf22d
-8a0efee963bbbd8bf58eb90e02db5c2528e097f8 86f2be0f5b55e5f70d73f7c671480a31778cf22d
-ec1efbbcb92f96bc3d891ec501d7052f230af142 b4566ac6b513378e03e75f7958622823a2dd1193
-adbfe735edbde7c619072e5b77ea08a53f9eb5e8 b4566ac6b513378e03e75f7958622823a2dd1193
-c41d608da6786d7c839e66391ed990372447461f b4566ac6b513378e03e75f7958622823a2dd1193
-2e631b79fab14917e6a350e8da440d84a03be3ba b4566ac6b513378e03e75f7958622823a2dd1193
-79b1281c97b4d9d44fa2bbe9de2d2be437889e2c b4566ac6b513378e03e75f7958622823a2dd1193
-4d6a852e5d3c35f21e88b02c25d78e3adfde5953 b4566ac6b513378e03e75f7958622823a2dd1193
-dd4dc3d8e4cbdaf5f524fc38f926651d5648e088 b4566ac6b513378e03e75f7958622823a2dd1193
-618ca396c539e6ded5ec1120928202fef6066755 b4566ac6b513378e03e75f7958622823a2dd1193
-22f1097c8ace53b9cc3cd056f47aa21965ed5d97 b4566ac6b513378e03e75f7958622823a2dd1193
-b4e5547344765912b0e42b0f2dd44f36ce905216 b4566ac6b513378e03e75f7958622823a2dd1193
-cf4975bcd0c8276003d7ca311a96a707b0becf81 b4566ac6b513378e03e75f7958622823a2dd1193
-35cb123ba292e93e79ae3f3e972cb42b871517d4 b4566ac6b513378e03e75f7958622823a2dd1193
-a7825c68a6b3ecacfba9004759a00f19c2b2b406 b4566ac6b513378e03e75f7958622823a2dd1193
-8f69806b806030349c40d0912a43aea8d5ca4530 b4566ac6b513378e03e75f7958622823a2dd1193
-52cc92cfec62946038f31a6940270fc0b8f59498 b4566ac6b513378e03e75f7958622823a2dd1193
-4dad556fabcce1932acf3715e88a649de6abd229 b4566ac6b513378e03e75f7958622823a2dd1193
-f082931eff43301e3d1621192963128540eaf585 7f2f39a709d965e52557ad39c18df4114f54abcc
-71b7fc15ee1d8d52d18054812c2b3287ebf62be1 7f2f39a709d965e52557ad39c18df4114f54abcc
-bf2faff70decf27bc47c11d226799b84f0dfd085 7f2f39a709d965e52557ad39c18df4114f54abcc
-87fdde92d49db89e484cb5acb9afed1a0d8e6834 06131e230c6d21803fa9e1d28348c5dbb392447a
-d9deea053e8377d5af8bec50487fab68f3125793 06131e230c6d21803fa9e1d28348c5dbb392447a
-ed74d9c936f8135c7044532c2a19d0e404e87422 06131e230c6d21803fa9e1d28348c5dbb392447a
-4f410e7df076ce63d042490c0b6e0cc4e7a2a378 c3f9bcbf88ab482e15afef9cb773f76423c746b3
-e6dde264828677c39e8ab6c1b002bd1eb1b7b229 4a137049f3ce8ba818c6fa553c9ac25e15278b47
-7c60b1a3f581c3ba78cb6ca2f393b98dee129e50 cc7abe831ead18a00e46e4d6b74644a7d1fb776d
-877eb3133bfb91842ee3ffe46cf83ae6f5c9a4c5 9a1becd2ce107135fcf5c27cc68af370dba52922
-0221bb4ae548e2fe57686aecd539bc2e037c8b43 9a1becd2ce107135fcf5c27cc68af370dba52922
-e1eeb0c5f9dee7fe8ff52582816d0e3d4f3e689b 677ab76e9e458188f4503724152b5a743f66caf1
-558984d4c31d951ed1c9a06289cfa28ece395bf7 7ed744dc9e03b21f905c161f531f08de9d4e76b6
-847ca59981cc8bcaad391f998217967b0b21b865 3081bfdcfc165005b796b8c7b9a1b2ca8c46df31
-6d794c99b7ae4baf01ab2cc7634f99bd74dee9e8 905aeee8fde41bbf75dd833d1c417341ab9a96c4
-4ed373fe4705ebdc5749d004e26e10bfab2b4773 905aeee8fde41bbf75dd833d1c417341ab9a96c4
-ee72763d410ce18111c50cef5f400b41d002e871 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-b2782ee6eb8908259099e4de2e408ddc925dbddb 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-fd4583b538714c571de636a10425c386b167cc83 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-2e896fa351a898df0ed857826cd5c3262aa49354 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-030c4dac835ad6aea032bb2c4b8d5c66703fb67a 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-dec556cc913f0e7a5af85797948ff7a25d7908ad 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-b31cf4c4cec8abc0687b93b3820fd095f040d0fe 41d7ee498cfb14a74c181e148ed0d15b0f96cc9f
-446d766ab82072727c09e4fab16302cb27189596 7d669e98e16884289abb158da636145d6f30233b
-42b92a1db3ce3736829103c4fedaaf5355c5af74 00eb3abb173356ebc589eaa21bf5522d6fb0ea78
-67b83b0dff5fe833bc4fc2f3f1abd84aaf7a2112 e5d2a10b135c9543cb4af3a28cc2eca1a747bca4
-6148f1a16ceabcc80c7d9b43200677b5b5fc7171 e5d2a10b135c9543cb4af3a28cc2eca1a747bca4
-9af9938a1c44b434e9ec84091d4b359279731d14 beadd2fafc42ef2b37eec2314149bbc7f289bd3c
-a01b201a0318377dd5b542a55353304a327a1664 b37b9b1f2d9f9cf553be67805c27f82ae15d0f63
-7beb333999aa7dd2e0f02ee8157eadc52040e3a9 689a8fb06278ecb88d82f6775d190473f8dcf9a1
-cc60e80cb4d139290535e42ece1051f55c7cb0cc 689a8fb06278ecb88d82f6775d190473f8dcf9a1
-ca764e4b4b17b83c6f1a68d7142fb27cd5309e8e 619ec276d330b174db28faf90165b57ec162355d
-39bd525ac3f019bfab9e0c9284a90b6c135859d1 58d4cf43031b80842803cca1f81d6ff72e8b9c9d
-762c3df3d4cf2679b66b237df8647197dccee657 cae824bf34eee2d20d36e389b56e170bde21d923
-749a51d012a930cc31e51bfcac2269753aa38e67 4cdbab1e1f733ccec345becd536179372f183190
-a61351e6a863a4f003db6af6b4d4ec2000d4ec48 45277801288acf95281a48ae6a694f7a6b28a882
-ff86813422a4de6d6ac45152e4f06679817a4d0d 45277801288acf95281a48ae6a694f7a6b28a882
-f11d5fa760a768669778e9aa5a04f17b8ee2e1f5 e3ca067ebf135c72750da6f1b199341c0928ba39
-c24e8da36c9ca3cafe7aa35f0574c58cbedae5c2 279b20b3ab27711429627d2d8742e49ddb3efaf4
-ac8d5aca6c066a99b458323192e13fab0a29c31f 1dc03bc99b482009fd4923b84d99548ec280d5e3
-0cc11766074b62d59fc40ebd14a4898b7efab2f8 94d7d6170ca19dd4a60868d624113cfe83cc8c19
-a1464730d38c31f87de4473d2cbc439b4f3612a0 94d7d6170ca19dd4a60868d624113cfe83cc8c19
-c27520bf3cae749921920ce9e6d4aa344c9831ab 94d7d6170ca19dd4a60868d624113cfe83cc8c19
-054edf36831c296ffce3809f7f738ad3a49998ad 94d7d6170ca19dd4a60868d624113cfe83cc8c19
-b62f56251750284dd7f2fef3849d9507d28d8842 a4a1f1636d6107b933b718ed6db01a1a4f0389f8
-e9697e09068c1fe88b568d73d8a79d3388a04718 e68aa54d2dc82aa744a5bee085d510dc4e3dcae0
-bae3e41d16b9c56e2970ccd36dfa2b5137e94346 cc12b6c33b151a89f4fb575030c5a77ebc49312a
-c38e9ec1fc8be6494779eff68bb27d7ea8ab0ac5 cc12b6c33b151a89f4fb575030c5a77ebc49312a
-8ddd18c1703c7f9121e1d3d97667a1b9ad516ed0 11e49d3380890a81755b73e4e17edca766d2c140
-8813b0dbad3d0950f55e81efd3c6493a7d2d9388 d5e30186dbdfd9720b572be1924f685a4c0dd150
-817e3a513e5a6fbda998bced1de117ed701bdd3a 9f10014dc0901908080c8cd124f09256ad8dc59a
-f24a41bd0eab9e1ec5c7ff13fbcc80bb3ed847fd 9f10014dc0901908080c8cd124f09256ad8dc59a
-ec5ecac0b3c62d023d9be8adc5c41a729e96fda1 2eec32caf2055882f8491cf8318a9c5df45b66c8
-d8c369a68cfd1cfb734af0862371671fe3944899 2eec32caf2055882f8491cf8318a9c5df45b66c8
-13430c1eeebedd60b4539bda26f9f4d6797b40dd 2eec32caf2055882f8491cf8318a9c5df45b66c8
-af3658207897c74e0063f57477af8d200d210fbe 2eec32caf2055882f8491cf8318a9c5df45b66c8
-db4bd39c16faa56018fe1e7fb349977951ad44a7 2eec32caf2055882f8491cf8318a9c5df45b66c8
-84afe575a01cec9699ce6b4c919424ca2eca18b0 70a396c37adfe7ad13429a776ec4a96c2e8c23fa
-52461034e47a031f541aff4b0650b506c0893d24 3e647dacf0a18624169bf8f42bfb19ac2913bffd
-fc85add657795659d50270bef37878a25a256a92 3e647dacf0a18624169bf8f42bfb19ac2913bffd
-04866c4c66d18841f0c3cb0258dff07ad0a111f6 3e647dacf0a18624169bf8f42bfb19ac2913bffd
-0907150db7365a2ef627bd83b0b52b9f4b704d31 3e647dacf0a18624169bf8f42bfb19ac2913bffd
-118814d17b073c814a360df3d8c175571ad49ff0 3e647dacf0a18624169bf8f42bfb19ac2913bffd
-fc98fe7dec6f4bba0148e24afc3273fbf19cf2f4 3e647dacf0a18624169bf8f42bfb19ac2913bffd
-68f1d3a38605d902e91bd64a3a8539fdabda0fd4 6620856d8013d0eb970dc043b760843bd952bdc2
-13650fe6afa91631f10a4c8f2e70279a84b399c9 6620856d8013d0eb970dc043b760843bd952bdc2
-0c5a741cce689857ca36865d61226efeebafeeb5 6620856d8013d0eb970dc043b760843bd952bdc2
-17be466b45c4683ee5ff40d48eb0a43fed0d28cd 6620856d8013d0eb970dc043b760843bd952bdc2
-1fbde33b0f9264e434ebfa87e17b6217ab7b4b4f 6620856d8013d0eb970dc043b760843bd952bdc2
-2c9eb5ac22f0b0e2ac74a754524356c68c25d790 8c5cc942acffe316e51d9c816bdd42d88d497857
-be22002cb690f8c43bfb24ddc7a60228ea8a4ad4 8c5cc942acffe316e51d9c816bdd42d88d497857
-c356fff654139fc9988fe9afc1622cc70bf4644b 8c5cc942acffe316e51d9c816bdd42d88d497857
-3fcd39fae066bd888553f636c52f6872ce86d3ae 8c5cc942acffe316e51d9c816bdd42d88d497857
-5ded6fba1bc4ba14a5b7b6f44b21d59a1b76daea 8c5cc942acffe316e51d9c816bdd42d88d497857
-c469ddc138adc62a7599996cb3efc9cd6c627c67 9c77659f3b3376e9e082768b9337d1b1485e3ead
-dab3cdb39a9bab2610d5b2c83e7f65d63923641b 9c77659f3b3376e9e082768b9337d1b1485e3ead
-6d207e2b0c241cbd9c4d244cfa7ca6f542e08be7 8006ff1f4d0d744759aef30ce412a5940b963ad0
-eb92879a3df9415c1d766dd2e5132e8681f91164 8006ff1f4d0d744759aef30ce412a5940b963ad0
-f47383c032e658c18ecbda12a8bf7a77011cc652 d3fa5a1fa12d5a1327644bf939e7908cf9a68dec
-d1216907b8ce0fc2e86eb731115a834398df1aa3 d3fa5a1fa12d5a1327644bf939e7908cf9a68dec
-73c5e1736fa13beeb802995a36dd8d177411a648 d3fa5a1fa12d5a1327644bf939e7908cf9a68dec
-31ed58198160e9e44ece757dfbe6bbec2ee45951 cbd677c703813a591e0cf8661b739a18d1d0a721
-ee30c2481cb86bef080f437e004ad97dbd608cb1 cbd677c703813a591e0cf8661b739a18d1d0a721
-3f97afeac41771d332c0b186ca79504aa4c319eb ab2befef25d41ff81dd514ea7361296b788379f5
-7c490f8d8c819c71f7365d209c7cb37a23a5a4d9 569c28151b6856ddf4e02d2b8a80812e81f59e12
-67ad364ab5e99fcb5c0645121fcb50f32af7cafb 569c28151b6856ddf4e02d2b8a80812e81f59e12
-f7054356a07213567e1c8d41ed84d676efe1d94e 74f698d736a21b72e8d451b774e97883e6726505
-774b51aebefb3d92c54c895e4bb9ccf14ab56d6f c0f7476912496f8acb24edc5c265b88e2c794d2c
-fb08ad8ec94aac4edaacc3c38c67df4287fc5997 47b631955f9d5daf67726e6c6c003d16b3691edb
-03e8a20809064fd2649104428244a61020b75cd4 47b631955f9d5daf67726e6c6c003d16b3691edb
-980ed7d5a69eb21856c15d654a186e64788fb604 cdf8dcafd5ab76e8cf066e9aba9846433bc31e3e
-3796c1c2c1f1f0aae79a0bc0c9ab337c9c9d2d8e cdf8dcafd5ab76e8cf066e9aba9846433bc31e3e
-bd913b5cc068b7d4bb74c5e7facc698ba478d7b6 cfb5a6420b16968fc9940bfdd95fa8da535a970a
-9a6e37f98da5773ddf8326551a826897647b9f25 cfb5a6420b16968fc9940bfdd95fa8da535a970a
-1e4c5a6c2f76dc42bf48a5e76a06505b946d3ff5 cfb5a6420b16968fc9940bfdd95fa8da535a970a
-ac7188941240feeaf7886accfeb705b0495f582b 939be0fe050c60d94cc92ee165124a585ceae90e
-5e24ef1865510290eaa26f81bc2e951a27584b7d 02ee26cf77a7f7b9041579afd41496f7fc6c2a29
-2ab4fbb7768a324fa7de02996cf16b39652f8051 02ee26cf77a7f7b9041579afd41496f7fc6c2a29
-4e9104abfb9678316e6f30df8c539942ba5e67e7 4234cdb68eefdc517d4d2a5e79f1913b4dc37715
-d0ea0dba353ecc0a7c76ab03d201c27d9daa9e04 5d5e073f5457bc76295eb43a59ab879bd9492245
-8bf2ee3a38a11aaf7d20d63fd5728a198f6c9bd3 5d5e073f5457bc76295eb43a59ab879bd9492245
-55757f8cd2da4264f3d50ec7e06998ca0c5c12cb 5d5e073f5457bc76295eb43a59ab879bd9492245
-e1ee6c3bf0c15f5467a8344ed70b28d6909032f8 5d5e073f5457bc76295eb43a59ab879bd9492245
-e84302b4d0cb16c7b89753ec955666f04e0ea576 5d5e073f5457bc76295eb43a59ab879bd9492245
-f14e87732bb9b42f10a263e413910448db2a8616 5d5e073f5457bc76295eb43a59ab879bd9492245
-f89aefc493e41ea78317541934e9b0ba19c5e5d7 5d5e073f5457bc76295eb43a59ab879bd9492245
-d780c6354a534c485b21e0f63bf2e9b03eb508de 5d5e073f5457bc76295eb43a59ab879bd9492245
-e9c7e37e485e186426578a3e25b104aa356d14b6 5d5e073f5457bc76295eb43a59ab879bd9492245
-6e08d0fa5a19606dc61d03facff80ee20e670f3b 5d5e073f5457bc76295eb43a59ab879bd9492245
-d0cc134ce1f845ee8dc869972c44dec0718b58e8 5d5e073f5457bc76295eb43a59ab879bd9492245
-584910e2370ab23e12243f84d55deb45ae45c92b 5d5e073f5457bc76295eb43a59ab879bd9492245
-e205234a4cc291e645135f349a910a51e3828080 5d5e073f5457bc76295eb43a59ab879bd9492245
-db4adbc92b4cc8f704dac81c84b947089a31e60b 7ec997434e23430c427bd297527f891956947f42
-b48b1b6be6d55346516ceb294f29ee2e5333b258 7ec997434e23430c427bd297527f891956947f42
-5acc6e11a5948d921f13bec971a60e0b5e7625f9 7ec997434e23430c427bd297527f891956947f42
-393ce32ca24e73459395ef1de6ce8fd85ec1be80 7ec997434e23430c427bd297527f891956947f42
-c4aff9b48575ce34d898c256d3930a75a1363ff8 7ec997434e23430c427bd297527f891956947f42
-624955270316e472502dea76ffb5e88e7da8f5aa 7ec997434e23430c427bd297527f891956947f42
-b047414976e9cd354e13c9828ec37861c1c3f605 597eb08d170126a904f20246e1cc67ad4fe8a81c
-4022359a960df0fc83724babc75001e47ce0b05f 597eb08d170126a904f20246e1cc67ad4fe8a81c
-3caf387fdb1ee8142b838079754ed4b625ac97d5 597eb08d170126a904f20246e1cc67ad4fe8a81c
-bc95003b8cb7cfd7f379014ba56da8b720341688 597eb08d170126a904f20246e1cc67ad4fe8a81c
-0e9087b98ec876ff769ede6f11c250ae03875fff 872a5fa9b8542deaf8845197ddd73fb3530b3f0e
-383f4c72fc65c79adaa22144c863dce93e0f3d54 6e0e7905cf4da52321b71b56a82f2a2dfc12b514
-3ddb4c9088e1c2f8f1f2947c6ff5fee7a8b2cb54 369f1b1223813648bbec35e68612f592ed444d16
-dd401fc926ff50e1d6a33ef764fc71f2a13e3e1a 08a41036a06cc721b27c587d3004b7b62a0dc64d
-465fa7230834270a34d83908436c8e13937c0862 08a41036a06cc721b27c587d3004b7b62a0dc64d
-7423bc64aa59c97beeffbb9edae098859b87417f 08a41036a06cc721b27c587d3004b7b62a0dc64d
-e013d393e9b6500aa43dc29b8b3166aad924296d 08a41036a06cc721b27c587d3004b7b62a0dc64d
-6e7af55a163e174218f295076604b0d1661ce69e 08a41036a06cc721b27c587d3004b7b62a0dc64d
-d91b18d561ffc5c4437b6dc0ef554288c09705a4 08a41036a06cc721b27c587d3004b7b62a0dc64d
-d6dbb8c285b81039b00d33afdfd3152a5f98b6a1 08a41036a06cc721b27c587d3004b7b62a0dc64d
-1131daedd667cd8bb733d513cc4cd565e1091e9b 08a41036a06cc721b27c587d3004b7b62a0dc64d
-c624b60d789896327c975c3f9c816596cc6f745b 914f9e6ccdc9b5958b5634687d480e877915431d
-c1e7f3cd13796696e9e00af6c4cb87e7a19387d4 914f9e6ccdc9b5958b5634687d480e877915431d
-4f4c7afc995128ab05d9007b0a66f7d25fd7182e ddd8806ae0701abea93b4d474aed92b14e55c67b
-85fd77c508c1810a325287bd371e9079d2fe529a 68dfb80d7d852143ccd385c26cfcec8d58f457ef
-268c28365bffafe000ad8cda57a364eb7f1d34af 68dfb80d7d852143ccd385c26cfcec8d58f457ef
-fd7932926497f2c2a69d895e1f45af7701e0f164 85a11a7bb82d016287989248b7d7bf29f132e091
-94f42a3b28e1ae8144255ba85fd993c4bc0953d4 b7efc31aa71f071f1f0bd1a2f95b70c093710e1e
-53638b0e0ac0b5e3589431d87ef4d1be82431dae 5962fbc376a6e942cea8d8447d5f93f2e42c4c71
-c8896b32ee56c18a9d3dd6f0f90f6187d09fc6ec 5962fbc376a6e942cea8d8447d5f93f2e42c4c71
-a3ba181164fb3d9f9c5e11490a8afb76fa97eb54 5962fbc376a6e942cea8d8447d5f93f2e42c4c71
-6124720165698cd55aae20e51b308af56ff6659e 5962fbc376a6e942cea8d8447d5f93f2e42c4c71
-c3e4a920f44a734d20f13d67f73595feac1818c1 032dce2e5ab90057bda159a7984893c19d31cd76
-3f6553b202de0a62c21e21a529462f059201568b cb781f1487793931e448e8e41abaa726cba1d889
-f93b7bdcd9d600b12bb70671df20e52933e8f4ca cb781f1487793931e448e8e41abaa726cba1d889
-1b3e37e21257266cc0053ddfcc11b915881db0e0 cb781f1487793931e448e8e41abaa726cba1d889
-62fa92f7a8182690ee8596c1e442aca56e2d5f58 cb781f1487793931e448e8e41abaa726cba1d889
-0d360c52ab21126288efd735182b36e84f162896 cb781f1487793931e448e8e41abaa726cba1d889
-87e73f6630e60aa01fa416ee613b54c7ebbf07ec cb781f1487793931e448e8e41abaa726cba1d889
-6d91728c4668a0cffc9cc7cb027968aec0a1de59 cb781f1487793931e448e8e41abaa726cba1d889
-c669a3940b37c9c409f77e737d5c961853c11250 cb781f1487793931e448e8e41abaa726cba1d889
-d5086afdd174649c5192ab75a92b22455d1eb5a2 cb781f1487793931e448e8e41abaa726cba1d889
-3e5feeb6494c74653a549f6b11ae18a47dd7e2ff cb781f1487793931e448e8e41abaa726cba1d889
-a25592103ae0b10f27eb5b632c07bad2db2422e1 cb781f1487793931e448e8e41abaa726cba1d889
-1f6a640c5254e7281064699a25ed67f96affe803 9da39ce4b2fa4144855f3814837034bd4765d2bd
-e7e40118790e305a047d51ef74e9d4272aaee203 9da39ce4b2fa4144855f3814837034bd4765d2bd
-cf556f2bf7d0cac6ce2e6070e25d63f3ea849e7b b1a089fdb907f5a5cfdf0b7746efe99656b00184
-d23b3af9d54ceedcfba2b628e4ef77f7d40345b9 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-89f690e3917b21e704e4768167a2f0f6dfb3bd7e b1a089fdb907f5a5cfdf0b7746efe99656b00184
-29bb272465c8d34c3b0bd4153be1aac0d27170b0 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-cf048b00613011ca6cd1a0f01432ea84427a8403 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-5430a33ac5392d53f85aad603912f4e5379cfa37 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-54f4758306f59ce16010c2ef79199405612db33f b1a089fdb907f5a5cfdf0b7746efe99656b00184
-d20368276e73a3c9b6ebe1d78e5b915ac126f080 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-cca1439ea203a061c4f88b6a1a07f8e8dd716ff1 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-0a017cc3d0ddd345a3c69b6803d3fd6eee599502 b1a089fdb907f5a5cfdf0b7746efe99656b00184
-dbf31bd573a1bed3208a48dfa1b2fe1e831ec43a 0199e628c8b5e1a90700c003dc0082d7951355ac
-7516837c8a728affbdb8e66e7d03e6aa72ec228d 045596a2e2465e3c5f95adeab5266eaf86d640a7
-2d51c671672210fe9066214ea0713e99e9c51a23 2c0f0eaaf2c2a6b9afa618fa651b3d12dc31eb4d
-874c79bbe1b86a3bc3357fc06459a3358efc935b 2c0f0eaaf2c2a6b9afa618fa651b3d12dc31eb4d
-530842151f77d9ba2300ed5797ef82995c7af488 2c0f0eaaf2c2a6b9afa618fa651b3d12dc31eb4d
-fe4fdf78d2f1941c9460b65d3fd88a4ff86d23b0 2c0f0eaaf2c2a6b9afa618fa651b3d12dc31eb4d
-18eccfbf19f7d9eff26784518c0b9f482bc499cf cb6e1221603cdeddb04cd12e18d78eee3cdfd193
-e36a3da588987f02a21cbc6599a8560cc51f621e cb6e1221603cdeddb04cd12e18d78eee3cdfd193
-ec2cd82f1de98dcaec283f970da12e0a674f9ebf 23eafba0b933b924479b2663aeea16c467e2b80d
-a8533101250b8fc01b8cfa29f0bde7a0f5f54232 23eafba0b933b924479b2663aeea16c467e2b80d
-89315b65b13b1df53f2fe06cd6641c71bdf33311 23eafba0b933b924479b2663aeea16c467e2b80d
-7e937f0b7b677ab4432ff815d331665f29ca1d83 23eafba0b933b924479b2663aeea16c467e2b80d
-eabcaaf577e93a69ebdd0ec4e3be29c389387124 6b916d562e9db011bf80fc48e157303e05faee9b
-a27a3f2d80bcc4271d28763bc70fa0e61713d9b9 6b916d562e9db011bf80fc48e157303e05faee9b
-a40059931fc4581becb2775c6690d07f9c740e2b 6b916d562e9db011bf80fc48e157303e05faee9b
-e7d4aa18d595a1cc2247072c6162f30c8fa9facd 8ab0da37d938a0e9dba41a678d17361cea687c45
-6ef158e42e67cb5026759ce0e38324287e0a2d01 8ab0da37d938a0e9dba41a678d17361cea687c45
-85de87a79b9dbe0a5158e712c7163288aa71cc7e 8ab0da37d938a0e9dba41a678d17361cea687c45
-2ceb28bdccab726bb2aaf78d831f860dc486dcd9 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-4946cca5469048f53a3c3eb59e582da6d344da07 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-80827b91d3297b7972915cbb8aa47cc39ac340c2 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-7f5dc2e5314afc93c35cc0640c0f763cdb2a4f37 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-d2bd609636aa3fad9c1af3cc0f1e12c5d3753785 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-7460bf05f8ed543ccc0a8920b1d9b2c6f8863514 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-2d2590e972d7937a93a5ed9dfc48e59c5718c646 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-62d8b7076f58435e61eb4a7596abe0d8ad46ad15 f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-ab041c302a8fa77ba044598460e9c040af2f289c f7d8f5108e284bbd1b5630a0b571159fa3cd844b
-8664b28330f7e5ee8c41feff3f4ec22498be4d88 6bff423426133e32a3839151560594f1fad0b797
-56568e067517f25fe3b3ad4d48acbd50957d64c2 cfc8d8487c8375c32a5b8be637ea3828ada96faa
-b0ed29d7841ec77851513c551207c2dace110660 cfc8d8487c8375c32a5b8be637ea3828ada96faa
-25d3bae68408a717374ad8450c6dd9ab46b71a14 3662b848dc78165836c7223631200bf5eb52d57f
-61e5bf9dca53e799675c622eb79c1ecebc7dd191 336542bedf706328bd58a14995c50de58cda7b89
-ddcbb68122aa995ef66b63df9a8761a210ff616d 336542bedf706328bd58a14995c50de58cda7b89
-39bcc733689ed2ab0cada59471a5444ddf1ea841 336542bedf706328bd58a14995c50de58cda7b89
-d24ad5316823bf96b61e28704d527830e17f5153 336542bedf706328bd58a14995c50de58cda7b89
-bd94010b289b207d4b663ca3cf0ef5fd3df0a8df 336542bedf706328bd58a14995c50de58cda7b89
-3caf63a9cb4e77ef93554da3e0a27e5082d0ddbd 336542bedf706328bd58a14995c50de58cda7b89
-319c3de8ecf1468c5cfa46860df4683dba3fc102 336542bedf706328bd58a14995c50de58cda7b89
-186a2d98b19f35c9beb0bc7c9b5891e08474b156 7fb522feb85637b06941ea1b21573847130f96dc
-173e54b27a881504eda82b683d19b31063d0aa42 44403a8e79a0d0d25485f656d26466b32dbc04e0
-b7d576151c56eca0572a7714b0835fbdd807ae32 e23aef25a2691c2ec5334ea14a4d9f8649e64be7
-074df2c3e8d33d67ffde68e0b4185b4846771348 e23aef25a2691c2ec5334ea14a4d9f8649e64be7
-b180846fe1d5ab9efe0afe36c5a2e1aa68fc53d9 8754b7970c486f4f68b7a41ec97d2bfcad2bc71a
-30d549bd277bc51f214f64e45318a909efdf8e0b 8754b7970c486f4f68b7a41ec97d2bfcad2bc71a
-09e319dd121497267c60c5f706ce912075d305f6 8754b7970c486f4f68b7a41ec97d2bfcad2bc71a
-7dbc93de6d0e75826f7c11bedebd25e85f1a6bd9 8754b7970c486f4f68b7a41ec97d2bfcad2bc71a
-76279dc779a8cc9776ac3dd9d84936ebe02825ab d5371039a705e822e0619074f189873a24a15f21
-fa52718494f19823d4bc0247046ddc6581813d40 d5371039a705e822e0619074f189873a24a15f21
-82bb7e2674118ab0b255e5914ce2ef5e7bf85e05 d5371039a705e822e0619074f189873a24a15f21
-29c6d6669bbe4093b561d072bb42aba51466e60d d5371039a705e822e0619074f189873a24a15f21
-c531efb6431154d2c98f1c836347f321309213a6 d5371039a705e822e0619074f189873a24a15f21
-bb475adc981d8abb40fe360a776dbb863e83f587 d5371039a705e822e0619074f189873a24a15f21
-735f9cdb2343f60d44945d431c0619b0de09ee80 d5371039a705e822e0619074f189873a24a15f21
-ee59b74dc8ac73d89b85f8d33537c601c279be5a d5371039a705e822e0619074f189873a24a15f21
-f342926dd943ecb9d9f53ada9369e1953103e9e7 fb3b09000c5e1b1a084cfbcc63a40584c79683c9
-7cb62ab9aae1b47a75a364136c88c274e056a04c fb3b09000c5e1b1a084cfbcc63a40584c79683c9
-d5e5ab93995921d652d91aec022667a221077719 fb3b09000c5e1b1a084cfbcc63a40584c79683c9
-e29a53e72bf2e5930b3903f6cfef08a3ba846189 fb3b09000c5e1b1a084cfbcc63a40584c79683c9
-c77f72b7b58abfe2202eb52012249c70e324cf82 fb3b09000c5e1b1a084cfbcc63a40584c79683c9
-bc2c1696ff08f61e67d313e5efefbc63778b5258 fb3b09000c5e1b1a084cfbcc63a40584c79683c9
-7ab62078b47bc0da4da132ce8bb273562036ad15 f07bdbfaec112e9998ad15463b4ab1b726096f55
-7927a3f75838ab4e7be20f43e809a70f0d64f57b f07bdbfaec112e9998ad15463b4ab1b726096f55
-0fcd886c0a531dc0439c9dcb7fb057b3fdb38a95 fc9c27075e81014d413422dee921b4312cece882
-a294cfd01df58c08765878bed2c4edd145fce93b 1ba8fa0e59783e7209313750373abc84c82df4b6
-8fd6fe1d3fa25c7e6beef77c2a11cb9637e1775f 17041a5f02e4104f7499916dc1f1053774725672
-8ec207911826583f3115d16e510a80a048c77b74 17041a5f02e4104f7499916dc1f1053774725672
-891a6068830dc4f57059b81252d82c58fcf5f39f 17041a5f02e4104f7499916dc1f1053774725672
-5ab0f82ffc3921870bf25ce4ec0b1c6eafe3ded8 17041a5f02e4104f7499916dc1f1053774725672
-04af57234225ff79248203bfe7f748400f094031 a70fcaedce66a8e224e4de1a37be6fe3bb3416ae
-ae7cd51e863169115cabdaa86136e8cd80f466b3 a70fcaedce66a8e224e4de1a37be6fe3bb3416ae
-6ce500912a0f9ec50552d80847f279ec16b5159b a70fcaedce66a8e224e4de1a37be6fe3bb3416ae
-ac43fe35bc0196b757be99b8370aadadf61df431 a70fcaedce66a8e224e4de1a37be6fe3bb3416ae
-7c90edee33da328f128965b59266ed9cf82ce244 a70fcaedce66a8e224e4de1a37be6fe3bb3416ae
-22c9cdf88606bf8e4b179e99ced476d6cab9ff98 7a203191f25bd82957f1a3327352740a6c130b0c
-1ec0377716a767f8550f8a29ba1ca0693e397ac6 89ec93f9b037f9c1a1b530397d3e7ee2392a8602
-fc29e07d8b77d1768db7a2155724478d167692cd dc8499f61401c7a3d5580c9d148c0a0aebbe7bf9
-76f49e1f9f17cba453d30cc44d4221ee18c07eb6 13fb6f101a7dcbb30b21f01a5ed2608fafd16a4b
-bc77b771a54ad4bd99306a4f5c6b7334f67d6768 07d79f2ba89e38503ba5746295a9b5ce151039d0
-ba096bb3d59d5d984a611c409bae6d46199b1359 07d79f2ba89e38503ba5746295a9b5ce151039d0
-074624e4ba2fc2c082ae4fd9aef47b8f58f360d3 491295527a321bde62f9b81eac6f9c6a6b19c947
-f016e4aef81281e19d37a39724ca33a737eeb3c1 7b67d7a349329b2b3b48e3e56b59a742f3f6766c
-88d5b689cbb1ee9a68bb51889813dc7997b3960e 7b67d7a349329b2b3b48e3e56b59a742f3f6766c
-dfdb2069ac77a10b4eaa9e1d55ef08db9535ce7a 7376566006df97c1c4a48197a468025eb8f23f9f
-35b61f8eaaa02213d500084010da675c307d7581 7376566006df97c1c4a48197a468025eb8f23f9f
-0252b2c3c0255e6e967c4d22229e67eec73b8763 7376566006df97c1c4a48197a468025eb8f23f9f
-af3f6e23a042b284118faa13b5e1054859ec5700 7376566006df97c1c4a48197a468025eb8f23f9f
-f5dddbfc1a9143bb3fee80cb451b7a29951d2b40 7376566006df97c1c4a48197a468025eb8f23f9f
-3a85e1a804254c2fb2aa0970c2b77996bc216183 8d998fc06ac5964c8f3744d2a367b0d4fb0fe196
-d2c981fa46b82c917bfaeb913388dbd1a22054ee 8d998fc06ac5964c8f3744d2a367b0d4fb0fe196
-76778e4f754ea6df43b4e31e6fefec93b4f39714 8d998fc06ac5964c8f3744d2a367b0d4fb0fe196
-ced8fb34341375ae430b71a9d77ffd14de89433b 8d998fc06ac5964c8f3744d2a367b0d4fb0fe196
-826bcd2645b63d4b176c52979af876c95de3d1d3 014b1ecd9971579754e108ca59df9893f5285da7
-6522f334cb078094e46bb18bb59b3dbeea0fe922 014b1ecd9971579754e108ca59df9893f5285da7
-8fd77d1780a983089317b202326132d1665505e2 014b1ecd9971579754e108ca59df9893f5285da7
-977a5f44e5f1e17854b5347b299fa59c476f2892 014b1ecd9971579754e108ca59df9893f5285da7
-5630a07d4c63880ad5d11af7b4bbb7fa6971bdc4 014b1ecd9971579754e108ca59df9893f5285da7
-01b3f87e540b8e98186c102d6db9de1cdad18669 bbadd053e5b2e13e7498f070c72ca0471e49bf0c
-f22040682eb898a8d01ce470564499bd7e79a5b5 81f8e81c238fb7eaf881ffbf8acb57bb95dec3e9
-0c90a97425d0cdb85e44c8c7ee15d2886cbc33ed 81f8e81c238fb7eaf881ffbf8acb57bb95dec3e9
-4f8af5dc866549f3582869863538dd851397d264 81f8e81c238fb7eaf881ffbf8acb57bb95dec3e9
-eacdab82a2993898ceba699ed1f633415ae99dca 7308ac030117f42c35f35eefaeb2c94e95c5c65e
-d3148c88aef1b656f37ffc4bccfdcaaee77e0446 7308ac030117f42c35f35eefaeb2c94e95c5c65e
-96348cb0e255207348f74ac30038df8b6349e131 7308ac030117f42c35f35eefaeb2c94e95c5c65e
-e6aa48b0297a46594a2a35cd9bc9dd1fc58481a7 2b1016cf4e2c27b3e17bced755e6cf4ce569e99d
-5c38f3282b7c4cdfe28c74e87afe96c87fec405c 70c26646d3b703824d690693dbd9f7ab2fe51618
-273e751b3e1f91b9a104750c262b65de159c099d 644348b1e85aa84ba7864122374353189baf5735
-cdbc5a60a4af44988ed1fc0f100367f7d960084a 6238d7400a4f456e24603ba79eef21686b56d158
-335f7ff1b90374e1596a9e85e3f8391474af0b0c 6238d7400a4f456e24603ba79eef21686b56d158
-214c171eced225768069c32a0dfab287e3006686 31faab091b05938b0e0f9ff5a4b991bf421619ff
-4b5b048acb4fab28101296c696e91a8eeba7ab11 6ebed0b7767a0d0292fd72b769f32ad4a2991aaa
-ee63f75369ca4cf678ae3a45a8e41ffa660f905b a5a11852afa509b77bc0fad113ceccb86b111acb
-a10980b78120b76dde42f0e8e686aff124c6781e ec8e0b330acda44ef843b11ec5347c7e5a8f9526
-311934acf2e8a3088913b3aa23d1e9d55c7af053 779541328d690f4d611dae02d2a4016e250aca6a
-49f5d0b9d0dc3fe37e995d426e37054c88c23d74 830410166658cb077ed10a0c3f38efd1a22a9273
-8762bd2801a09513f4056af9463fceaf352f5446 4a53cf4f40f7e1aa683484be8905edb4c0f9a86c
-efe692a0381636c3024825e21aa6a715707e2aed 93397887cf23057c7e558d728820927d24e55d56
-f6327aa4ed7f15e9212bfb4ecc0403daede1338d 0ede0e4961893bbb49c683ea9d3479cd860bafe2
-0f8901d7740736beae6228b34775b81461c7d653 cc5215cb0381c16053c08179cfc379de80bb4628
-808eed3a7dcada42c50fd70f57d26e1ecb004468 cc5215cb0381c16053c08179cfc379de80bb4628
-977e5d268e88e70370a966267f448f666c2eb81b 4dbd1b9cacbe1029d5a025cb53196b42c1056412
-ed00a973f17db8b69adf4c9da27879419d846a92 042efe654ce442b33dc842372ac01d9ce917f18b
-640a434f665d6641161446af8463fd7f3ff57b1a bfa37f1589b4adee568260e706d3198d7144dfb0
-9e1159b6ad33be66e492d24d5df0a9039d211f51 bfa37f1589b4adee568260e706d3198d7144dfb0
-cbbcbaac0f1c61d4bc96ca156ba501a35ff40ba0 d78ad4c71451a999fa7eb3f79bb416f9d420507c
-994e3653bcf26f14594f7981fdcd00a1e875482b d78ad4c71451a999fa7eb3f79bb416f9d420507c
-d2cddc8afb490ad28ef79d7443a11e56e88718b8 8562b5686216b05c5092d43e6981529030887b37
-bfafe84b100823cc0fcf138006109c5b490a5aa0 8562b5686216b05c5092d43e6981529030887b37
-e34344517e3d60920bec45eaced0b12f17ab0381 8562b5686216b05c5092d43e6981529030887b37
-b260bb7b7ca6583925e086fcb14865517d3c16c0 e373ac9b4dfc8ca56e21e3f8bd1a78af182a481d
-fa4b185ee4e82e30ca96b5ff2d1b7bacd23a022f e373ac9b4dfc8ca56e21e3f8bd1a78af182a481d
-ff24705c635aeeefa36d21867a01687f4885bf0a e373ac9b4dfc8ca56e21e3f8bd1a78af182a481d
-3a68ad74354087620f90b0df7f9c7809e72f6066 c0d2da456a1c313a7e6973d8cded9dbc389b19a8
-a261d7b4058c1ebb2872e95705467712ff84884f 75c7013cfc05589834f95f1352486e7391a9ca10
-b3ff1e3347426c037131801d9b6bfd00aba34b23 9c9d59495d268fcddf175b629b822cb3d80d7c9e
-e5180f41473ff747b23e3da9a89d5c8d5caa188c 9c9d59495d268fcddf175b629b822cb3d80d7c9e
-5c0565498178dcf27e95e569e2c4c234f62e38ee 8ac60f9a3febbccfbb4e1e0037af855793bbfa40
-e60a7db10b9d55f8406230742f7393175054eead 8ac60f9a3febbccfbb4e1e0037af855793bbfa40
-9ef794bdf3bfc1f784524ed88503294a942ad85a 8ac60f9a3febbccfbb4e1e0037af855793bbfa40
-16b8364c56b4cb305f11b1e4c70649180e2c790f 8ac60f9a3febbccfbb4e1e0037af855793bbfa40
-63f1d3ae8b81cccb124cbc3863348bc37c72d51c 8ac60f9a3febbccfbb4e1e0037af855793bbfa40
-f9d415bb207c0bd753110c6942a8c43ababdc262 b0315a7678825af071c93609e0bb34fcdd95a9ed
-599545d8cd47a8c20bca7e42fb6c5418e3f8644a b0315a7678825af071c93609e0bb34fcdd95a9ed
-ab6054d5922d71ad925694f99dc6ca54d830f2de 2469d7ce6f02e1ceba5ef4000f66de0b4ea297c3
-b5b0dc20b3c1b76f5cbd1b54a53d53c1d15d0268 348c235752a8735aa4465850604a06f74d00fc3a
-7a41d83808a7ba0c8e3cc23a30579f4f63e52594 080b034b1926f2b9f828780643f853bf3409561d
-86d0fb7b2528c75e5f2dad8bda15db644249089f 080b034b1926f2b9f828780643f853bf3409561d
-8e3dcd4c7b6cb621507fdd7b3d6183b0412b9c73 61ac06107014206e601eb01245a8ceb4f2148776
-6dffec2153f137f829688cb6672a88a55fa48fb9 4bd4dd3fba0f430d15865d10824f18298942b502
-aafe6ae7338a3026c5fac49b81d0359209a6971e 86fb352a58b88cf466c7450c3598819059241321
-8371564a6b6030113e90d2774dd570858258ef5e fb0549918536b9db962e0697aec2ff4b8a7a5294
-688837a72c8565a0f5707abcc0f7e82a4d8e6210 532cde99636499e8007b45f716948a633567a2f1
-ae80d044a10d3b1eea6b133ff1f53020adb44c81 2053a02a46fdaec5f93d6fe09de5dc2bd65ce0ff
-d217456ca8fa6c2600284487fccd0ebaedfb98ff 41b278b3e5f3f8bc5544907efa6143aeda6c9723
-6709a164314724530f91cdb06f4ad7c12272716d f875d087e517f45976319a7417c14b75e714e8d2
-1d734965ac11fc2aaa0471be231345a8ff40df3d 83820a5a3899a3e9ab1ec6cb62b1f286be75a652
-ae5c6975e3d89033199d744b85ecb28349217da6 83820a5a3899a3e9ab1ec6cb62b1f286be75a652
-8c30a2fc0cc5326824c672631b594e1425473d85 83820a5a3899a3e9ab1ec6cb62b1f286be75a652
-a11c4adeebab9df95013b6c3d23cca911cd19948 83820a5a3899a3e9ab1ec6cb62b1f286be75a652
-0fa93103b39a57a519b83c7dbe1f3fcef0c26a86 40bb7a79776ee5d24230b0438580f2de501b33cf
-5b06211ff354bc718f753d919da06efcaa641082 40bb7a79776ee5d24230b0438580f2de501b33cf
-5b2a62027dd74d711e9b401e5ee0f155c92e2b5e 40bb7a79776ee5d24230b0438580f2de501b33cf
-993a853c5b57b497a1f1262fa2cb5d72940b4fe0 e26085a82593e48e3fb7b656539c8a8d4e864836
-19fbaa027ded9607ed95ffdac3259bea3c90a909 e26085a82593e48e3fb7b656539c8a8d4e864836
-06ed6202aa2036149f5dbd7231a5e40e50411ebd e26085a82593e48e3fb7b656539c8a8d4e864836
-4a71673b81f3b788f35517395321a94022890956 5a6f413a34409f3058b4508a0e96b7ff8e7aed58
-a875ea6a83e210983679bb5e3f12bcc1b36954d7 4848f60800901b554ec04757e91cf21dd6f22f56
-aed04722e4514eae2a7f139e65b4a8fe27f24ca9 a22147f4b07911a3f77271b5f4a2055e295e7ae8
-fa29606843a868ba52f80973b071f5ec64a096f6 a22147f4b07911a3f77271b5f4a2055e295e7ae8
-036e72b52034267c901b6593dc01b5bc7b189a1d a22147f4b07911a3f77271b5f4a2055e295e7ae8
-2727ed86486e45a3e0c4f249a386fe103f2c2752 a22147f4b07911a3f77271b5f4a2055e295e7ae8
-a09c3c9ab1bb46599ffd3b65f72a9c0c62982b48 9b8fd51e04122e079a2ccb771e7c259ba908989b
-9663936ef4635ea35c53465227fc0cbda773a203 c435aee3d2f33db53bf9ad5d710ea509eab41208
-7bb8afcc4d2db74927186f56fe1e6f4644d4d60d c435aee3d2f33db53bf9ad5d710ea509eab41208
-a1cdd88990967421225e1b0de0c8eb78e373d735 c435aee3d2f33db53bf9ad5d710ea509eab41208
-8fc58a3f809a94d6c222d9fd21fbbbdb7de54bb9 c435aee3d2f33db53bf9ad5d710ea509eab41208
-bfb200fadb174e0cf85dda08bd9e8eb5663bc264 c435aee3d2f33db53bf9ad5d710ea509eab41208
-641685b811662ded78fa2db0df86f71890ff6a27 c435aee3d2f33db53bf9ad5d710ea509eab41208
-6b3b7388a76ee488318afc22eba7edec38f18203 c435aee3d2f33db53bf9ad5d710ea509eab41208
-e79e112f0f94d5503b8399462fdc1359579a205c c435aee3d2f33db53bf9ad5d710ea509eab41208
-ce7281dfeffd34c45014e577385c244aefbc05f4 c435aee3d2f33db53bf9ad5d710ea509eab41208
-a3c8f4249df9683834b401d2a65c32b18820591b c435aee3d2f33db53bf9ad5d710ea509eab41208
-e5fff00ddc8df579849fa3999af4a7363893dea4 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-afbfa27e8c0a32f685b50420ebeb865315ab03b6 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-db49d3c0d631f7049bfc96026823d0a344ba7b3e 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-3c7f0797fa121026373e2ed6a4b36afe83219922 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-3ca8fd20e6683dd33483db94a78f1b6d1dc25799 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-ce1176f0bb57157a7d91b0c8b1c801f666977082 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-73ddae5e6c4ccdc57bf0237cff9ed3b091eeea68 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-51e42575d1c0e4d5d8909f1a9f555eff1bdd2ebf 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-e98cdacc06f375f7710a4551a396bd661d2bdc17 445b9b487d0b0aa1a1f37dc8a4724aa34f7926f5
-b322c19d9759f99f38f48d00dd1894e17367a55e e6d6be236eb83c9664345e9f852987e2e523aed0
-22bc2702c5b04cb1e22278db801f15fc25e3b7ea 45e64328599f4ee3311ac6e6838db968ee563c10
-647c9794f7a6b49e49933a9664aab0c2d0842d65 94fb4ae23e5866a1c55cc8bf497724c252701270
-003623b4d5a9b7a947efc750f1c9378e13b77842 82ddb3dd8cf5b9a5915c5ec42888c281c6c01356
-e6437ab60f0a176e4c5e08045366d1fbc6de5e38 5c9e37dbe5f96506b109d7b31758a2ae754817ae
-828e208ad48f2fdd5e7cbe0b779f22cb1342be02 5c9e37dbe5f96506b109d7b31758a2ae754817ae
-8f238c7325e9208e8170f0fb406452e268f43980 5c9e37dbe5f96506b109d7b31758a2ae754817ae
-aaf9c213cff9d21ea910f1cb1058db9876b05b10 cc05802c6fd386f376666f990192dea36cc4fc1b
-0433616ca38d44c3ccb590250c92c510cd9bb7e0 cc05802c6fd386f376666f990192dea36cc4fc1b
-17fe457c20511dd0d425bd4871149640de0df610 33358a338faaccb23b670040fed66ff95e8b540d
-a447400cb0eb95e44f9578932c52a8a2ecefa8cf 57d772d74f6c655cb7571e9d33302c18ea97fcb3
-a2ab70c8b3d8c0feba5a92424e207ae1eac222e5 57d772d74f6c655cb7571e9d33302c18ea97fcb3
-6e2fd37e4fef83250e5e48cd6c9b0b731c9f4c2d 47aa0b700d685bd9713c297153ac4852f8830119
-7354602b2e28bfcb4cd16366356257b4c18fc22f 47aa0b700d685bd9713c297153ac4852f8830119
-b70535a943f37f5f5177dade3e2ac5ebdb85342c 47aa0b700d685bd9713c297153ac4852f8830119
-0d336facaba3e19f881d3a67eb797fc0acfbed09 47aa0b700d685bd9713c297153ac4852f8830119
-1f26a0836800c00a5148d7ebe4d78a036f920cb4 47aa0b700d685bd9713c297153ac4852f8830119
-8550540694d05c7df084d6ceddcd3f7e0ea05dba 47aa0b700d685bd9713c297153ac4852f8830119
-430b2a8161b4b6bb9ed1408bc2e2707ea038da6e 47aa0b700d685bd9713c297153ac4852f8830119
-10051fd0bb1c1070e625c34f9ffe984fbc82be9e 47aa0b700d685bd9713c297153ac4852f8830119
-2994481db76a727c3e84ec161643db9da8a95e89 47aa0b700d685bd9713c297153ac4852f8830119
-b6bc104489fd869cddf941570b0e976db63ece92 47aa0b700d685bd9713c297153ac4852f8830119
-e858110694069e2b267f06b0ffa7d0332f16a41b 47aa0b700d685bd9713c297153ac4852f8830119
-318eb3e776ce610c304970f8c8b258114fad8c5a 47aa0b700d685bd9713c297153ac4852f8830119
-9f5399119f903033b3e7d81852001719dd494e85 47aa0b700d685bd9713c297153ac4852f8830119
-c12f178cca64fdeb4b462acef389046a81bd806f 47aa0b700d685bd9713c297153ac4852f8830119
-300e8402ed7637fe6b80e7afcbf14376d57b3c73 47aa0b700d685bd9713c297153ac4852f8830119
-7b75381be310fd4625fcc504d4867e3333d5d723 47aa0b700d685bd9713c297153ac4852f8830119
-83f75ff8a5592fc58346d965a6afdbb147a5d409 47aa0b700d685bd9713c297153ac4852f8830119
-5688c4f7a2fcdfc88219363d6649e151ad595598 47aa0b700d685bd9713c297153ac4852f8830119
-536299bfc2457196ad6d51fc956e33b0e22a4cd3 0e1178d3275f1718099e64f6c1cb56bcd436079c
-417e1065f353d204151f3fe2670c50143e79f0d8 a713d3a2a98f1c9de46770e0e126259994580b3a
-f0c0beb8dc062bd3439f0697a506e8eecd84af14 4fb3f449f1f333a5b599dc34c72732a918f197ca
-abab422bbc4405e5afdcb7be7a7a129f620e2c02 4fb3f449f1f333a5b599dc34c72732a918f197ca
-1488094df154aca8064a12ffd3f358ed61752d85 1dbfedfc4f8c1daeded44235ff4eff6d9b823212
-1f4d9f935ba3c2148316253cb3998cdfabb87eb8 b1e8fc9ab2f28a3066a2f55ec1a6d9015b8da1e0
-d45423b1f8496a86b695d73fbd4417779c0e27e2 b1e8fc9ab2f28a3066a2f55ec1a6d9015b8da1e0
-9ac7d159bb2de3a82a4a67424368d221aaebc97b b1e8fc9ab2f28a3066a2f55ec1a6d9015b8da1e0
-f523190d0c68e4927fbe469e3930531759454f3c 9971f32975ba689e756772d2138cefdd93c7da43
-cf34777208b338b246b62ef5547f4c181ea46f2a 3039fa6357386bd246bc268bb0a30a2baf8f4f07
-5d5342bacb76402c57bc41b079764ea8d988cb32 3039fa6357386bd246bc268bb0a30a2baf8f4f07
-295c5596174c7f4c159d5da4b7dc3f1739c69386 514e4e74359529674a9a6f9c998f02599459d752
-18304fbe0bac968aec229c3fd35b39cc120d1302 da77240500d5a6ea75bc314dc1b4f279bcfb9644
-1c9ec5415ec36c9fb12e369ab01f08c6a240cacb da77240500d5a6ea75bc314dc1b4f279bcfb9644
-7b49856049c3ea288515a07052f1d93d64747636 7e48b25f73745bd0f5d4df3483ad4f14d825cca3
-dea29618820d5a58c16d7bf616dad2106bea622e 7e48b25f73745bd0f5d4df3483ad4f14d825cca3
-2d62655c4bbac69dd30a61be138321ca63ca09e1 7e48b25f73745bd0f5d4df3483ad4f14d825cca3
-a01ca41c3671d04ea5f2407101dadfd2ed1722e3 ad33a2749d5cba29bdf4f038a241369c250a7261
-52e921f1335715705c7a909c129b4eed1ec6fa6c 66b4da9f12182af6bb2018c1602d7a5634644e21
-8417dc5094db8f3b082d4ff5362069e5c4cbfe6b 7b855cca7c6be3baa4c057b106e4373ee97694b5
-e5d5e708b8b44776375e60e4f0ac5750dafbd621 7b855cca7c6be3baa4c057b106e4373ee97694b5
-df3c6b7f8d183fa891f4591adffbfebc52595e2d e98c91117f7e1988c56337749ecd200842e867a1
-76e4901b84dd0e332e48ad33fe06a5057440f4e0 982dca5252a1883b17b31ed39b4a0edd0b3e753b
-1cfd012f694db25519b6f5070594a01e37c30689 f2666006bcc1003b9cc3f6d3e09233658be7268a
-45e9e39ddc1749f6d3c95a9a43fe6b30d7188888 c50f8ddfd99fe50077403cf022bac0e14f91f1be
-ee6afebe18f160d7b4d5f0b30c8b23ac2267e2a4 496a88d9f10b5ec8e74195f6080dd5b678a31d78
-742f7a97faef7c426626bb39cbafe0f70cafa677 496a88d9f10b5ec8e74195f6080dd5b678a31d78
-1917b1110dc038dae17c87ad7458ebcdfab4ccb1 496a88d9f10b5ec8e74195f6080dd5b678a31d78
-561ddd51845829bdc78549409bccf87d12da06d9 6bc37984bc302e22482ce96e52c4328277ef9ec3
-fa933773aa874b70887716d718a49a0aac0fdd36 6bc37984bc302e22482ce96e52c4328277ef9ec3
-f092ab1bdbe41506c45107d3b1ab9c602530a8ca 9909d35f24b5994bf9ce36c09ecd0c6009289365
-7e8c87c09bd0f6ec6d5aa0df6f9c9d1cc24de003 9909d35f24b5994bf9ce36c09ecd0c6009289365
-537f2861468b9c01136c7fd9ad91a0b656304b3d 9909d35f24b5994bf9ce36c09ecd0c6009289365
-c620955461976da1177f2593d5e03c62268650f3 9909d35f24b5994bf9ce36c09ecd0c6009289365
-e1c0b1908c7c0c58c14c658fa5b8b28ed677f5a4 c6fa04696088aa8aeb45a07dbe0583e47c003c6c
-c9a06fdc309b2f642bf836c56e8e93bb594198cd c6fa04696088aa8aeb45a07dbe0583e47c003c6c
-3c2add76e3f8c0219e81b7cbec8d3b7b6761e096 c6fa04696088aa8aeb45a07dbe0583e47c003c6c
-f7be2d9c77bb72f40a7f9ffe43c1ff03934617a3 84382d7802a903807f67b400f8019676b3a8e68e
-d9f25e4d6cf05f2100e5189f80eab1bedffa5c87 84382d7802a903807f67b400f8019676b3a8e68e
-86c8c90034214a2a609220130840e899708ae143 3cb10f647c92d863b55a1de94f1c59c7067a982e
-8d05988f6e6a03e49970eb03f0d1ed21c4d7a8ed c69d480c9775fa747a37baf9f2ec6be238161eee
-84781abbd3465f087ec7ee73ce82e35a9e77b155 c69d480c9775fa747a37baf9f2ec6be238161eee
-d1f303e4e804f070ce93fe31169b5a13705d2342 5158ce0b563147207b7cb222a94ee54417b7dad3
-2772b8ab388e60a74604f50c7306bf8205610602 5158ce0b563147207b7cb222a94ee54417b7dad3
-97b79222254499cc4c473d3e8fa2673f862bf343 ee8181dc26ae4a1b92b5175509f4756aace6a9a6
-a375d6ed69c50761fba2fac57e359e0627bcfde2 ee8181dc26ae4a1b92b5175509f4756aace6a9a6
-c1768afc63bac3074dc024a978f6f7b049d1001c ee8181dc26ae4a1b92b5175509f4756aace6a9a6
-dc0cec82736c121d848c0b15af4e1dafe6791360 f1971a572b8fd4a684e15743232d96b72b419b6e
-29a05170d2a59eb7b350275eb762e22673515e52 f1971a572b8fd4a684e15743232d96b72b419b6e
-cf64656fca060d55eb26bfd66f9ad2462d52b693 f1971a572b8fd4a684e15743232d96b72b419b6e
-b45be7c3e4780de63437c202de2eb3e2a50be238 f1971a572b8fd4a684e15743232d96b72b419b6e
-0e3897032aaad46d36a1b7651e227fec5e927ec4 f1971a572b8fd4a684e15743232d96b72b419b6e
-530f6d4aa4ff06b2f32876ca111d8e8b7a9adeea f1971a572b8fd4a684e15743232d96b72b419b6e
-f6cb45e36edad87001cf3a77e2e7afa62dcfba80 f1971a572b8fd4a684e15743232d96b72b419b6e
-55074d85588813a75253705798d1898fb7af7815 e165251b977c347809d4352416717406c0e87ab5
-4f9e20206bd9073da89590f23484251b7159e20b d9dd08f045f0b499bde4d859bdb3449099949872
-8dfa2b780435d29dbee19d5dc338e7ac658278c7 d9dd08f045f0b499bde4d859bdb3449099949872
-d411d252b9db88ae8216415827d0d9b36a0a7bb2 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-87787f772ee261ad36eb9d6feee2067c63d5b6fe 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-67f0b103ea0631116fbb7110158ab58dcacff437 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-ba41c849027339532cfe7941d67662b95f8c294a 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-1363fa44ff1c65fd65e8bd8f708142bf6e2796f5 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-c94a203bb3a0729801b432b9ae27bd943124416a 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-55b7700190bd044d3e727e1319473b15fe8be62b 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-c0502eb4b2b6ff09b7069bf318b35e939c087135 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-96d81842013852bab93632efea62c95a89f93a12 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-42262e7afd0a1695cd03869d57d866d9704b3ead 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-20982a851f46d5054ebca5322c6c88984330357a 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-cc207ebbfddd6faf2e7cb56343872f2d9b038b11 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-d33e5521d083a6ad80fbe8fbd0da410b33771267 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-abb3fa8b51b1ca05f7265d1188f020ede3a018d0 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-aa39736c068f4219c7b3c882440c937d9d72577a 88c0848244ab70aea36eaee8d13b641d04b2e0cf
-cbbb5ab74f650882ea89fff0eb00c112262d1848 f26332e984f80fa13ba606beb82005b12d73e2ac
-80856b1a2a5721af2d0933fccd27591c81a2c450 f26332e984f80fa13ba606beb82005b12d73e2ac
-b9bc383a1397bc22bd3be26564712c910da3ef03 f26332e984f80fa13ba606beb82005b12d73e2ac
-aac1c6849a146ce2e9e8e8e5ebd784e5820d6eca f26332e984f80fa13ba606beb82005b12d73e2ac
-505907e4b48fbafdc1838aa4456c5b48c31b0e41 a4b43d4bc4c13d847ca690f2fe3434af07263eab
-cbcbee8fdc9eadcad8a036a8ad12adf6e00742d4 da48afe7c1ecb609a9fdba84a8b33bbb04b39190
-3192b0a826fee8200aa673d9fc702bdb1f9a26ee 850f0d1023242f0a725c90ce359d8d1ef76e556d
-2954d82a46ad22f262e2612fd12e5c91b8ff0022 850f0d1023242f0a725c90ce359d8d1ef76e556d
-b9bcf05ae1c15ad9a52aa335fa7a5cd6478c0862 850f0d1023242f0a725c90ce359d8d1ef76e556d
-47d9927399dd84f0d4038cbf5564c78a88766aa9 850f0d1023242f0a725c90ce359d8d1ef76e556d
-3b364d6d4718c0bec788169410d20e92200aaa41 850f0d1023242f0a725c90ce359d8d1ef76e556d
-479ff1e77a6fde97ab32b1ef13b2db338ae5d533 850f0d1023242f0a725c90ce359d8d1ef76e556d
-e9c05c7e09099949f4d5ae60a01eee6237800cd6 850f0d1023242f0a725c90ce359d8d1ef76e556d
-8d3e946bc4ca8c79c69180524e2180bb436791a4 850f0d1023242f0a725c90ce359d8d1ef76e556d
-517747c131a16968dac89137fa3067d1885774d0 850f0d1023242f0a725c90ce359d8d1ef76e556d
-d306bea729e1b09e999dc3d7abbbed686200e23f 2a8725552c56ea7a1a578355106d7bbc551a97aa
-8842d2cb8ad5e90856927d682ff626c1f7d599d7 2a8725552c56ea7a1a578355106d7bbc551a97aa
-7fbe53981145d793172927583a743b78a71b8259 2a8725552c56ea7a1a578355106d7bbc551a97aa
-2a9c5e36fa4ed21398902ea10eb169c9423091c2 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-6e1f5b2356bffd68854d3eee9f8b0d2926ec1429 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-de99d9839b2b8e18908a95fc520296c701de5f6a 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-be67cd87dabbdef54c03ce842b85efda17f728a8 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-7ad46075f42a15de5ada7d23562f7042e0bb62fa 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-9e666fb451134a31c7822d26961fee3d509c0027 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-b6cf15a47df7c8bc2e972ef11526c58977540882 83bfd091c2efbe9df7ec2c760df7ed9c9e520747
-f1cd58e87ffd59ebca3f576baec724cc128e30f5 44e73c30d0fe663418a7c85d25f564e78ff58be9
-3e18fdd82379595f7e501be2bc8032cca3a83c7a 44e73c30d0fe663418a7c85d25f564e78ff58be9
-549668d4a9cf91eb9543c85d9e022ae46a6fbc88 44e73c30d0fe663418a7c85d25f564e78ff58be9
-0512c89f946b9ffa92d911b17eb0d6ef6420d647 44e73c30d0fe663418a7c85d25f564e78ff58be9
-c6ad6ff0ba94d9e578b39f3c975e5ad4626f1a59 44e73c30d0fe663418a7c85d25f564e78ff58be9
-16faca13acec79eb5999bd2c25e81efab38cf1f1 44e73c30d0fe663418a7c85d25f564e78ff58be9
-b04bfbb06c7e37c51b72c8d033e494d7b7f021d6 44e73c30d0fe663418a7c85d25f564e78ff58be9
-77171e125aa3d07d529febf5937fc03c95ee34dd 44e73c30d0fe663418a7c85d25f564e78ff58be9
-364ae65779965107aaf83eb6dc9b6559e8c12e41 44e73c30d0fe663418a7c85d25f564e78ff58be9
-9a77e96bd60d3e1c8e581c9dcaaf33a79cbc863c 44e73c30d0fe663418a7c85d25f564e78ff58be9
-2ee78157ff9af50d10437b2f0e1d057c0b7b8b0a 44e73c30d0fe663418a7c85d25f564e78ff58be9
-f523c78fdf7ba0bb09d68dac002dce653280a861 44e73c30d0fe663418a7c85d25f564e78ff58be9
-1d08c5a44655efce1d386cb1642f91e718f924fc b20fc6763571d85202ff951c3b8c6e1807be5c98
-b0fe0e7d84913feaa0a3d56e3584bd2d61b2b365 b20fc6763571d85202ff951c3b8c6e1807be5c98
-a56cef92aef1cdc06ed02aa224f88060d82f8d1a b20fc6763571d85202ff951c3b8c6e1807be5c98
-67c75963277095c998475b80fe1da315c7e88322 f7fe87631fd67043ccec698c531c81e79d7e97fc
-9a6d9112fc02d791e4aa99b9f5fcee4e2c295eb7 8ebffe3f80d0ccbc3fc81fbaa12199eef93479d2
-d0c6fdf885a9100c9420bbeff3477035a80db65d 8ebffe3f80d0ccbc3fc81fbaa12199eef93479d2
-179d4fc0100ca50a64ef51978e68eab071f6a0d3 a8a446c5bdf2dd1870952ad9ef7fe9d4dbf0a450
-b9748755ba0edbe59d6f1190dc75317fcb7b2d82 3edcebbf5f2d4a86a7fd72c9bf80d50156d7b78d
-0ecb2d74a60478de20ff4ba084a0f6913ddddd4e 3edcebbf5f2d4a86a7fd72c9bf80d50156d7b78d
-6910ed4b58f63e1d7fc4d6ab7117884d8aba64fa fe69b714fb3950f082f9bdfd9c13e2ba68ea4d2f
-a4ff717164079cd68eef114af7a7b95e78c20d8c 5d080200e0bd940d00a64a68f5bd7601be8315fe
-54363cc5852c5a83b690cac10c6a37ed686cba5a 2093945569819e34cc4a2fc42431f67eae7a867d
-2025bead65673c377335b50c46b135409e60b4be 2093945569819e34cc4a2fc42431f67eae7a867d
-40d2dfe048317bb1e148dcaeee140f6963e0062c 2093945569819e34cc4a2fc42431f67eae7a867d
-f1da40353c7d44af86c858904408f432f01f87cf 2093945569819e34cc4a2fc42431f67eae7a867d
-70be36dfb88dab60e15f2771d1b059f8d3a880b0 2093945569819e34cc4a2fc42431f67eae7a867d
-c52e8af262867dcf7c903a5d609ae8e3caf8aed2 2093945569819e34cc4a2fc42431f67eae7a867d
-35908a4819b89cc5760c86362c610f2cfe53160b 4820fd917198bf91827c3fe94ecb09b8c800da35
-74abe25fa87c3f791dbd81e177622802c6106260 4820fd917198bf91827c3fe94ecb09b8c800da35
-fa537c02960c8c777318d1c212d3f8f654e670c7 4820fd917198bf91827c3fe94ecb09b8c800da35
-ddd2fe794e0e695baae4a5354452ffc153190f40 5f5046809efdd722c275141b7aaa397e73a5550c
-79d0cbf56a7fbe2b747d5b65bdfcc336561c4356 530b4488bffa7dd04e7801556dae0770d1f10ec1
-7e942a4b082109c350826e1e4a84d4aa942649a1 d5f1d8e16ad7b4d7dcb91807a3a3f6e15329df50
-9e8944af0cf6518ec97ece145cf399fab5a746e4 a086494344f9123d241ddee48347773244c45082
-b4d16b27c01794926a0cbaae28efbe13f0104eff 1fbd546f5577f2fbe5fd06168e9b9032a92a6fe9
-63a0d351cdf55301b15cf736dcf6282863a111c2 1fbd546f5577f2fbe5fd06168e9b9032a92a6fe9
-59d822c4b2b9b81895f2103a54621d29a6aadf6f 1fbd546f5577f2fbe5fd06168e9b9032a92a6fe9
-c7bcbb167485046546285e817fa146d22bcd3d1a 1fbd546f5577f2fbe5fd06168e9b9032a92a6fe9
-07471b3c7c53248caed8f0319b7d1282dc473cdf 1fcbde760fc0b739be904e7ee538c51c37b9a4d4
-cc10c89f60976e2ae36c754b93a6ef0be5d59639 40b76ab2f41552f8fa376794253175d589f3f3ee
-0d9c74990e94995e57500923e4d738344653f30b 40b76ab2f41552f8fa376794253175d589f3f3ee
-d8e8750f3b2656294696b59c2b9158cb63633e94 40b76ab2f41552f8fa376794253175d589f3f3ee
-b013b3b0703774e7949223161f127b3201f2ab53 40b76ab2f41552f8fa376794253175d589f3f3ee
-0567f8444fd02e883cb888e2236d3942fad63f8d 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-37e90bd08b4dc784c358b2e695b1be561e9fc7eb 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-078564c4d96817374557330fa47840709fe5f16a 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-ede8c4a2a02c15a15bf926b39c594920ae0ac909 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-781b56f436b74eeb2398b6819744605bafb6f9c3 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-05d3acdd7bfed502cf9fcfeaf217c8b6707400f8 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-b5d37b545e9c74936ff78409146626c5c341d46b 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-b4d6ad69d1c9e3735d34c2ef9e47eee973f8c971 5bf42c0cb759e6f5617fa9f61e4d56bdd8e7d2ee
-1a61ed1a565f20d96676baf26b42e87daa8b9f46 5c364265fe897617a85aa0433e0ba79efa929045
-01102e05180ab65b7aeaa006219e728bf08f32b3 e00d852a8ef81950afacb36dbd1e06f658e5b35a
-49b1fbbc7a7faff207bfc691219fde52c1cf7ef0 ab3967f61e55c93b701c55ab1c55c66acad04c0d
-ce4cdc0f23b2c35ee4efff56ef6e96e37f6929e7 e75bcb11d4776aa9617c4dcb03b40484ecb96147
-ebfb86b93f8d866d4a871752aeeb07ab1c95b994 e75bcb11d4776aa9617c4dcb03b40484ecb96147
-acbaab640ddac379d5d79eaaba0951417f1de55d e75bcb11d4776aa9617c4dcb03b40484ecb96147
-ec964242950856cc917cdc9420135f61b39eb9bf e75bcb11d4776aa9617c4dcb03b40484ecb96147
-42e21cf4613caee541d638da284e49c6afd1f609 e75bcb11d4776aa9617c4dcb03b40484ecb96147
-38bfe552fd2364818989b1274a687853c3d8bd7c 7e09dbc9d48adf30f3fad3ebd2eed721df0ba612
-f12086b5a41cb0099f1ec880558eaf9c90768abe 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-4154188fff5b007aa5030b138ffe9a518eea5f42 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-0a1bc2d82248ffa844b03e70ab491af92311cc53 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-3db699d8ad3171d329b4cea6484c76500aa9acad 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-a435b8861f03bf8617f91b5a7184eee66b932754 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-381d62fc4970956414dc87d4348483e1e8772a84 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-af471b7d791db44275929da435aa1b27329be294 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-32669cf8a8d348bbde30ad71ca7ed5f720e4b4e0 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-5683be87fd95758f82c201985143f9212915204b 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-56217a1e9d8a3db83ffc09792c9360d827fa0b56 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-5ab07f4de4f46659876fab6eb99213ebf2af5377 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-d306e0125d0ff527b8800110072b07a72d9fffa3 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-3a3c0257c09fa7db8ccdaecb8b3b12d920e37ebb 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-dc599192f3661ac88d76f1db1d60c3bec3eeb01c 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-053fe8a39e50ad2159fd7f30e6d3fde4fca61d47 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-ca904e8a48aadac650ba52698c995ce6ee414786 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-1ed6f37960c5b562aec5cd906a7dbd8a5b7e990b 79d4675b65a6f5966c42f512a2c0b5cf6d61ea3b
-959e64ad690a51fa2891e66b36c41058aeb8c2c4 517fe7e9d7e5e73d7f0dbc97aabe8ef0a3187f3a
-7a9adf2b9c7f1890d1bc4abd316a319e62bb3289 cad50c0c0e7c35f1bb1741c203d1ff09b7d1f8af
-8f1496ccde0173711a054823eaf0722037e70659 cad50c0c0e7c35f1bb1741c203d1ff09b7d1f8af
-010c57423d37bf7fd9288a279c9189b8af987c61 53472cbb979d07201fbc575091c7134a30807f8f
-e51af5b265153411f29953e40adfb9f927cb26c9 d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-4b48c3f3303f26c2539458ca5c96a28d8ea4f02f d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-f188e4070dd7db2ad2f6c95ae22b3e6b45954b60 d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-5337fb6c71d149dbd55c5342ec22d8aea10aec22 d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-c1447584f4c8cffcf7e31128a0fcc787fd589125 d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-5fd4ab4a5d87fdc41b128f0a6fd13330f2684ede d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-e604a2dda27406d3fd504efb9ab3887b548b7a54 d80cb3aaac5c5a38de1fec0ccd46f4a0eeb0e257
-dfdc9c48992292009cfd2082a916966578e3a745 df15a07af94e23b27af5dea9e834b47dc4b0e100
-f0be106d0e700e48518f5616a9951e32221298db df15a07af94e23b27af5dea9e834b47dc4b0e100
-1c812ba107c657cde65bbe96dbe363354bd908b4 df15a07af94e23b27af5dea9e834b47dc4b0e100
-7eb2b302a322d546f421a83a10527c9500705e96 df15a07af94e23b27af5dea9e834b47dc4b0e100
-416b48d21eec2a32e6d5a63122eadf0abc9fcbed df15a07af94e23b27af5dea9e834b47dc4b0e100
-237820ec25d5f87e30dae356feddfafb792b910a df15a07af94e23b27af5dea9e834b47dc4b0e100
-5eba33e888c989e8b19e765e886abbae26f4d9ff 6574c4d519fbf6b72030a1b17bff5ee127848a95
-6ad1a14327da0bc70cb48ef6d6d76313fa84e5bb 6574c4d519fbf6b72030a1b17bff5ee127848a95
-95aa1583c268637047101883c4aa67d30a25c8a6 6574c4d519fbf6b72030a1b17bff5ee127848a95
-096b509cfb5c41535540fceda80dbf03aaa4ffd2 6574c4d519fbf6b72030a1b17bff5ee127848a95
-df1670b94175dbda9c65661d02340bfef904091f 6574c4d519fbf6b72030a1b17bff5ee127848a95
-26c9ae2d45c6b421f353d3abae47a9bdf06ca667 6574c4d519fbf6b72030a1b17bff5ee127848a95
-70ccc75769028cdf1216e101a756556198bbbba4 6574c4d519fbf6b72030a1b17bff5ee127848a95
-aba3ce2be32bf5366c5041dcf6b44c63b8444aa4 6574c4d519fbf6b72030a1b17bff5ee127848a95
-479d5a6d3e257dbee45ddb5f8739101170edcd72 6574c4d519fbf6b72030a1b17bff5ee127848a95
-31f2b09d74fec3c608eaae7518364401d8743b05 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-32cd687e8a8bc2466eea2c61a8fd29f37dbce309 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-5554299753664f3b33eacd34995ac9535fe5effd 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-50a18955788b583c6a5980646e94b75ede8ff72c 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-52cee314b568e96d335c389b62a3a82118dc3166 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-f55024047b91fc190da6ed473151d71374e74715 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-6010cb2496f4884a0db1be3d39c20ee4eeb21419 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-97108ad85a7ec2aa278c30581ba4105bb90886e4 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-c20a889e99ac360ce8db0a41a9f253d0fa81f577 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-7304f2dd07fa217caf4272a66f5b3f0f4a80bfb5 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-0053e352de214b58c4585f0f6bcdb1c008c72b16 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-272bf7becdc1b473b1d7186ba3783dab2e0e0706 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-339d8f910a68333dc49a6f6fdab99fa027249582 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-009fd1d0f497bef50d392d72e71654ead789a75b 4d9b828b0277aacf8fe4de3cff9d4de15b211bae
-f9ec9e94a23474cce8b73ac60c05608171ec5181 b7865180241562c1bbbf0abb198e3356803e22e0
-a43f1848de2b1387a57692246c47fc0ff88254bc c74823412dadecac5c7a2b1c607bde057c062e54
-62484a4660096cf9e9d9a90ffd53de9ead945efa c74823412dadecac5c7a2b1c607bde057c062e54
-e823d8e4dbb2b2bb0d1f451700b421a8aeccce5e c74823412dadecac5c7a2b1c607bde057c062e54
-db91604757e8693782d8405360f06aa38a352ea5 8e846ae29c3cdde399f6086d76df02b97ee7821b
-2769f6e20c3d93b7752c434ca66ddff1fff8191c b45e150e9459b5f9d25d734999c09f177ee82e52
-95f6a0a76944a4e0c692531a7bb66152ca4ebfc5 a7e7174c046c39339ea744e7d1d51322d937cbcb
-b2b918acb7e74c138ad4aae55ec25bd550729a89 d096ccc51c589a9821e4d31bf67d7101008533c4
-ff1005d2aca9fd79589df373bc08c6e04ed214a9 ee1d311e3435a31785a174ffd6009fe422b3666d
-7dc308f25d54e00aaf6e2a7dc245993e5084ba63 ee1d311e3435a31785a174ffd6009fe422b3666d
-741ce8cc4a59afc002b2c882b5375ccd223add15 ee1d311e3435a31785a174ffd6009fe422b3666d
-934ec57ad7b04abe36690b5cf4a9378733cbfa6a 273aa2f57c30e81ca4548c17c816dc1b98d23ff9
-c1191a175ebab2120ce4f9cb90ad7d9f72df4b57 ed0469e08e9391e95939b724306e9a36af666836
-fb92f6d1cb9fd642c7d173f21882fd2ef25adab7 ed0469e08e9391e95939b724306e9a36af666836
-366604f986219f8fd21c3e7b1eac917fd41250a5 df285c338ee96b9e4b87b6db457816edeea59a72
-8bb17b0980837b5a3177b8ee36bb9b9873c0ba5c 0778e84715e40b86e80481bbde35b368b30ac33c
-f9effb613da2b757faac446fd502a39866b489ad 0778e84715e40b86e80481bbde35b368b30ac33c
-84409bb2b5b6c73d06ce09c374dead17d30d784a 0778e84715e40b86e80481bbde35b368b30ac33c
-c0d36cf3678ec6e64d1e9fa07c6291d6cae1e543 0778e84715e40b86e80481bbde35b368b30ac33c
-b63a7258a54c94e8584466bfa2f1ec8950e14267 0778e84715e40b86e80481bbde35b368b30ac33c
-d21c777328e21a054eee017f24dd132d60a81184 0778e84715e40b86e80481bbde35b368b30ac33c
-e83befffed43a0df11d9b397d649bf116ff2dfab 0778e84715e40b86e80481bbde35b368b30ac33c
-406970a52324d44658d1de922e50f1b2b6487ce3 0778e84715e40b86e80481bbde35b368b30ac33c
-8e3f0bdd0bc930874b790e9ede0cbf4eb1069107 f5223fb069f06279ff335c3c25b673a231112c88
-35bba2988e0b8e73d0de1c53d6034cbf07699791 f5223fb069f06279ff335c3c25b673a231112c88
-4ac903222776d8aa801e5b4f4f0d5a4ee43d2516 f5223fb069f06279ff335c3c25b673a231112c88
-184b7575795c866ed8bf8e30caee27ce5f6b93d3 f5223fb069f06279ff335c3c25b673a231112c88
-40bad628ebdca815e99247542d7aaef253a33b6c 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-0c2ab95871a940714447ef5234ac9916d66c7522 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-6e54dc0fcb3ec9dfd1eb1546fba995691227dc44 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-c3f99b22ec94bc61af9dfaa89f90f2f5b0ce80c0 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-a0202089a27a6a4c8f3824298a9ef84c051326eb 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-c950b0b2e3329cdbfb95f245282de6afd5b2fb27 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-15b54351484e4e444d5f245d24c575db55214d9f 6b28b54e08c4cacd69f2f408843cf680c3bc811c
-43400bc80a5effd7cd164fb535bfacf37a806821 db7a2debc6c0c07d1eb742660ec38a69ed30a570
-36310698f7988e45de688a464fb41c678179f0ed 72c64f66e71ada2a906df86aab96277c35eee243
-67844b4619a6aeafc488213a8c7bb988615ae0f0 72c64f66e71ada2a906df86aab96277c35eee243
-f378b0bd5561d07d4dec5395324b28fb4a3e54e3 72c64f66e71ada2a906df86aab96277c35eee243
-1117d9fdca6a6408973d0fdda58770c0ae6106cf 3d60df759a107915b7de81069c200f71244d7df6
-48b91977475fc984eaf452b25e360f441885c0a0 3d60df759a107915b7de81069c200f71244d7df6
-1ef59f1a2dd16a4b2e65ab9d8f0f6184069ca7ee ccddf374a7f01fa7d02d867c65f268793c54421d
-5515b3f202b846e1de9feda091c3fce088268f21 62a179ceb5d0d27c5d76b1adae66a48de83ac9db
-343b942c5237134dfd9b3f4931eebd0ec01885b2 28fc4d3d2d078c33da96e904648aa5488f80e65e
-9015090ccdf7994ee9acdc322c0ebb991b171f80 28fc4d3d2d078c33da96e904648aa5488f80e65e
-307daf147d386859f2d94cf3e0f8504422dc9463 45c505b0158d6549debbf971ba0dfdecbc12b875
-3891f1bcf1fb9333553090b28fb002ecea166fd8 8cfacb1065feea56dab911fc2560c83905909f62
-4fa7eaccc677f082744f58fdcd6021b081239fd4 fb073d28cf0ed959821e71ecb62be9ef0d9d360f
-9c7d9c60180478939c92d68b9e4d6d9a8d305794 fb073d28cf0ed959821e71ecb62be9ef0d9d360f
-27458aa23a4cf0e0ea397aeaadccb8a79a59826d fb073d28cf0ed959821e71ecb62be9ef0d9d360f
-d8b213ae157c17784f33265b8513199ac1fed449 fb073d28cf0ed959821e71ecb62be9ef0d9d360f
-025e9c92166d54114786f52bcc14ce8af7db3bbb fb073d28cf0ed959821e71ecb62be9ef0d9d360f
-b613e2ea35ff7e4f1d30d4189b05b55da23c67c1 24fac07a87e1745002e7f386efa977b7fd40483f
-4c1b7d4931f1dd11e82fe4fd4945d1f6f784c654 24fac07a87e1745002e7f386efa977b7fd40483f
-af1af9716266a4f591e4e066913d47ac344dadf0 1986b42957486f7535cfad3924eda6f1f677b3f7
-9a4ed5bb821f6378af8990ce142791efe69befc8 fc6b098a496010de721b5fb89adb7b4690816207
-8325ccfe485b5643e4997ef5aa7ee58e27a7a64b 5c86789d363aed43cb25c3358ec68df4b30268e9
-c509e69ab9c7cf612569679efe6f50abaca5c045 5c86789d363aed43cb25c3358ec68df4b30268e9
-c3dd6fcd32163d51d227e855bb0c356d03e0fae7 5c86789d363aed43cb25c3358ec68df4b30268e9
-dc0877dee5e1050fd25e28454590dcc8ff118206 5c86789d363aed43cb25c3358ec68df4b30268e9
-133a640048ff898085da10025439b1ce6ad8b95b fdb027119359a686ec2a8ff19109037050a2ef2f
-30eebb388678e634a2b16b1a99079b23e9009b93 fdb027119359a686ec2a8ff19109037050a2ef2f
-465e190cbf79cde6662bb60d90dfe8694a85f555 fdb027119359a686ec2a8ff19109037050a2ef2f
-7aae427f528881c12e2b7abf85668df6a365bb59 fdb027119359a686ec2a8ff19109037050a2ef2f
-852c4095a775ca5651dbc9cd87dfb0296bea0bbe fdb027119359a686ec2a8ff19109037050a2ef2f
-9651b11e5cbc6cdb174bb2783e20c2039f4c5751 db6687aeaf6e17c66d3649e7b75de56b07957afb
-251859e3d772cb24935fe80abf92412ffb5ead14 6c5e010850378ed2b4ecb9c1fa570b4dfb41df3c
-6893d0cac49ed4db0eb631576190273d52300743 6c5e010850378ed2b4ecb9c1fa570b4dfb41df3c
-3f2aaca564a7aeab8e8273b7903cd03e112efdff 613f2a9ff376af53777668601f530ec4c224ed25
-2b195132c5fa7adc817fa01362a620959afd4b58 613f2a9ff376af53777668601f530ec4c224ed25
-57c4be8f55721d16d3122e0796cbf1bfe8ab23f3 613f2a9ff376af53777668601f530ec4c224ed25
-f7996d5671fd68f15792cc451662b193f7ffc31e beb4e8eb098f2e9c7ba204b86fcad3951b47271f
-9adff980b93ba615d90c0d5877fdeda919d0e29f beb4e8eb098f2e9c7ba204b86fcad3951b47271f
-0a3ba4d704e631de71a1eda2c9b55b3aa956f07c beb4e8eb098f2e9c7ba204b86fcad3951b47271f
-93a7c086331b0d847ac11bc3703b2cfea405c4a4 beb4e8eb098f2e9c7ba204b86fcad3951b47271f
-2b3215355d0e7b6400c3f7e2c5dab04874ca3da3 beb4e8eb098f2e9c7ba204b86fcad3951b47271f
-ff972be107b4728f692ef5a0f2a53d4c5af52394 68cc4935545216e06531385eff21d3d3ce39264f
-a14360c61eea9d190e1ad163711b7e6ec7b19b98 68cc4935545216e06531385eff21d3d3ce39264f
-dbcd30ca8ecdee4ff57cf6698773952ae138bd96 68cc4935545216e06531385eff21d3d3ce39264f
-39879d32111a7bc0c7d903a6fc5436cb88f0ff7d 681229a8624c30567bd71a548e2bc199c53ab757
-67923136f1151f94d0b68b1532903ce811f5af78 1df44fbec456748a446918336ed22153f527d9da
-7681099a48f4d1173c4e9a08b3ac398d59d95ae3 86133bce7caae27cb8ead09dcb91c718a6c5e70a
-bad11addc8c2c48a18c71165e030fce891bcc345 86133bce7caae27cb8ead09dcb91c718a6c5e70a
-b73b3c3adbaeacea65c9ae562f36cec86ee84df8 58a1855373fe83801399f0a2b91718c6e9df10f4
-1382c630782e8867630f2561bfa7fa670543e687 d584dc1f459b1586f8fed0939118cd1ee3a724fa
-5092db596640529e50f64a068f554092b4c8a007 ef70bd1bb3d0bf488b84b371a38e33208c34edc1
-7b22a37774831ae6fac7ed52a1ba77e575b47ad4 052644e58e1c064dedbf964f119664001bee1c36
-6669c1081a3ff7c5c1a152018f405fe3644b8031 052644e58e1c064dedbf964f119664001bee1c36
-315e111c38115aaca17d1f0975285d30e2a3f8e7 4d3a6feda14993dafbaf5d6a98cafbcb3b08bdfb
-3f93c4622f48c80ddc32f91e3c9e1c15281d34c6 4d3a6feda14993dafbaf5d6a98cafbcb3b08bdfb
-f1d02f69619c2b190683954aa31985e9b72bc5a2 10f3920b74dbcab29371fc208f04bd8543b7a4ab
-0f9b70ed5b4398d847ba401c6788e77a76253532 1e232dd08cdf1e6ce6b94cd2314531401043e62e
-1280781d60fb457d97a6bc57d2c42f7a4f459035 1e232dd08cdf1e6ce6b94cd2314531401043e62e
-edc87f5b3fdf8ec72991e52e9c8bf556f469bc61 1e232dd08cdf1e6ce6b94cd2314531401043e62e
-5c54d2e4d4943fbf71873cb24b68498994ab60fe 1e232dd08cdf1e6ce6b94cd2314531401043e62e
-475393a7a16e39a1768e7d6974271c7ab2e260ab fac159ee7ef3eadcbced2e48c3ec25911cd6c435
-d637d67b27498afd3f2c68f7e8a970e043119fe2 fac159ee7ef3eadcbced2e48c3ec25911cd6c435
-c6454295e1d1eb4996fd0d8038a8013f628500f0 25757c920aa84f54d7485441cd1f35c1bcb99df2
-00df6c16ea2747f0820fe5d2ed87756f6a552f20 25757c920aa84f54d7485441cd1f35c1bcb99df2
-ceb2fbebdcd6eb5a5e9bcc3c01d44c4033301808 25757c920aa84f54d7485441cd1f35c1bcb99df2
-929572dbe09ad42a9c561e90ad1d52bc2db65c36 25757c920aa84f54d7485441cd1f35c1bcb99df2
-bf3601970d7cb91f5ce3f2d04abf9ebf56d5c8e1 219174241ef548d9839af75c528d98a73867b975
-5768ec3145f0a809c319d053118b62b6d1423bc2 b739fa643f2e5f4b5bf45a07168887b517cf9c71
-cbb35ec9e4182fe071f0571aac4e61502b895a07 b739fa643f2e5f4b5bf45a07168887b517cf9c71
-15aad3bf8017dda979880eb0b20bfea34383a5f3 b739fa643f2e5f4b5bf45a07168887b517cf9c71
-ba9deeefe141d1d73a85fbc52eac793b9f138e99 e6116e51dc928005e6106aa1dcb9e37496e041c4
-918a11e4113e71d27acb767679b800bba667ce8c e6116e51dc928005e6106aa1dcb9e37496e041c4
-7bffea5b883627deb261d072e9c0fa61b82ff14f 9c109b7370406fca77e6e0667276700d830371dc
-71f158c3e2e56e57994d00a2766c8d37f09e3a7c c81e8f5b216239714ecb514674f0ed73e0447036
-d6b74dec60bc593d4d5ac35c4f3f07a34ec5e61c 4ceeef1fce552a896456f2bc480a3ed24f67871a
-fda62d691ba25c12c402b79b9b44f56e4a485132 37f0735e2b5b864df54cfe44516bdd84b7fe1dd5
-3938542a4d83457b29eee582c568623ae7f1114a 979ace07bf113163a637d3c2bd732114bcf91217
-024036480c64fe289d7bfa5b02054a6ba93122fa 979ace07bf113163a637d3c2bd732114bcf91217
-79347b13b3762e7cb0d061d8b888e3bc7f31e1ea 979ace07bf113163a637d3c2bd732114bcf91217
-23f8ac9b19e9613155f551039fb24aa5861a36d7 979ace07bf113163a637d3c2bd732114bcf91217
-6e0c50d0be87bc23f882f6ffc411b6806102041e 03e3399706848da54f3b3320d21736e009fcb9a4
-cac59a2efc5815e6559fbc7c1ef0ce5aeb567cdc f5fd033f6ddbeb9d6e0e04d29443c6ca4af8fab4
-3cafa27905b358d2e3d3e23ac1800f79ceccffad a7fc4b5f8a1910cc25b551ce6a4e12692a1072d5
-7f0a23a450280481f11a1b1ea7a6cf655e97862a 99b903a5738cd91ca2f38b51f93d890a3f8d7cb9
-4d660ad456ca1cec876aafdcf1337a18aebf73cf 48132832eeb29c31d787c2cd4a352b1c231edbf7
-f2293492965b090f0ae1105ae7702f22d08df276 48132832eeb29c31d787c2cd4a352b1c231edbf7
-d966b326d53f364d628368b90156939de77f288c fe3a6ee261c20b9ec55a9acee5496b2071a3c95f
-754950a920437d57f9c30ee050849991fde0aca0 67f51b6b5e8d9c7f5a0b5513570ce1f0b1979020
-23b1efb07ba0a10c3fea712685c18110f0badb1d 67f51b6b5e8d9c7f5a0b5513570ce1f0b1979020
-0716f515b5a3d3c91978cc769fb83998ffe8d1f2 67f51b6b5e8d9c7f5a0b5513570ce1f0b1979020
-75312961606c380e4fdfadddfb1dcd7449f8c503 ef7a1b4d86a9e0926b0580011a978a2d06c14036
-294f779e5331a5753f7aad602b1b62ec627a1907 b1a7d5c4a16ab6ba23fa69425c7c4974038fba72
-c2358398c74cd03e8f6fae77a9dffbc908ca8c1e 2fbda508b23079b93bc221a26fa9b6079f1934d1
-b772f4ecd457444ff1499d9d0cd670103edbdb80 c6da79f03a7488711ace8bb0beab461a091941cf
-defd2c20f423311f842c7a7726abf0c5d622cc41 c6da79f03a7488711ace8bb0beab461a091941cf
-37eab166a3cf037becd04995c1022cd61d5ab135 c6da79f03a7488711ace8bb0beab461a091941cf
-7ea557d968964d6aca03ca7e70618db0743eb3e7 ce454b4a81ed5c8c95bce43c205e4eea207ad857
-7498e3a4eb19dc2183451ae1b63d9ba8bd5b1450 0a35ed4c1905887dfbcf5066af99f41e9252a92b
-1421698d2357231be545c2695358891ba3c1214a 48463e237006192ede9e680f90d2361e036e5e52
-250be11612a0e3b2b6848e276a5ab5df85bab8b3 48463e237006192ede9e680f90d2361e036e5e52
-2282c734ec16fa2b31562c057ba703689a8e262a 49e303fdb709c7fca2c4ab7a69d35909a19c98bd
-333805e9426c7a3420f95c0d3f4506f785ec0082 49e303fdb709c7fca2c4ab7a69d35909a19c98bd
-39fa0f5c276902a9e4f90e85d763b44d6eef73f3 dda3f6a922fd90664918e71ead3d84717908d263
-3ec8d9ce4fb1f9632c928e8f2f2546f492239abb dda3f6a922fd90664918e71ead3d84717908d263
-bc632a01f0cd0c767acf27e664be884809547f92 dda3f6a922fd90664918e71ead3d84717908d263
-f9955f14b593bf5c95c4b7141d4d63b80319b87f dda3f6a922fd90664918e71ead3d84717908d263
-bd06bfff8d30b19ae2cd0a0596b68622069a2ca6 dda3f6a922fd90664918e71ead3d84717908d263
-5ebb52783675f9e140bfa9eba0ce7c30fe7501d6 dda3f6a922fd90664918e71ead3d84717908d263
-781e54ca79e523d9258b581a4e08646f8d504224 dda3f6a922fd90664918e71ead3d84717908d263
-d42de7aa2982e2bd6fa8dcbd4c744f94d43f7042 dda3f6a922fd90664918e71ead3d84717908d263
-5e45e696f08364d05fda7efa5f2991a5f7dc51b4 dda3f6a922fd90664918e71ead3d84717908d263
-cf8a5fc93258bd44dc772208d6d0317a443703a1 dda3f6a922fd90664918e71ead3d84717908d263
-c6c5542c7d39e0791c2feea4290c3dc98e6e12ad dda3f6a922fd90664918e71ead3d84717908d263
-f3f5e8c13c05da8dac62e36420af3af55937242c dda3f6a922fd90664918e71ead3d84717908d263
-dac6c5303a6fc5d5a3d5905e7552130f54e669e8 dda3f6a922fd90664918e71ead3d84717908d263
-89ed7aa54d672ecf68b38f9626c196c6cf65dd86 dda3f6a922fd90664918e71ead3d84717908d263
-df015c3e974e209985ea8fc6a22f25fee5c2d708 dda3f6a922fd90664918e71ead3d84717908d263
-745e82fe944e4291039d4929d062018f3cc913dd 1c47c78b1413ad6bb3241346b8df640bb1082692
-b3a13247d6784b5f7817e23ad4f7c0e792ddec7d 1c47c78b1413ad6bb3241346b8df640bb1082692
-7a460c011783d1ae3b34af421449474d19b943f3 1c47c78b1413ad6bb3241346b8df640bb1082692
-ca8b2e6e8b01706ec9b2ea8e60187d82fcfd4119 1c47c78b1413ad6bb3241346b8df640bb1082692
-9f02f2cd4a5927ac6cdac4503573df11134640ea 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-a3525f29394f7cb68557fe07800ae4859697ad56 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-1c7bf00165090e559cb5fb3ef334379dc0b4f9c3 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-38972c927ec6ec3549fcc6973451b7dd3b76b1d1 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-1c1b06030db26cab8d0e077c3b8a27cf851df044 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-db46fed53f443af9f752b49e3e613e09e5fbc47b 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-10c72050cb0b5245fa89ed94cb86b096d370af99 1c2a16bb0fd8232a57eb785f3679e38db65fbed7
-fbd33f33dbe96ddfb2e102077d1b46c107ed4dee d3fb94cec105abc4545886f4f8e71d36dd4acc90
-b81e0448e8b31c36ce8ece97bf5f6f40adc48bad d3fb94cec105abc4545886f4f8e71d36dd4acc90
-8e18804e2dbe12c8c5606e093f403dea392959e6 d3fb94cec105abc4545886f4f8e71d36dd4acc90
-df4e9d3be2d0e7ec791967a1756d07276b272da4 cbfc63a161f601765696699b976dc1df488a4da8
-4bb658d374c29d8f7956ae67af33ec1556dfb784 9c970bdb3316dd2981def5901ae79377fed08f37
-b6a38791c810f078e5c772edf42ae1e9739a0f3d bc5892a8251e2352c612256ddf80fef27afd6746
-9e37cd625e0c271cdc934806255a6aaf1b73f2ac 5647cb61f9146a166b79d65de34230fc6592b264
-1cf3efd7db7632da32cdf87238f0d9f85d24dff3 5647cb61f9146a166b79d65de34230fc6592b264
-feb69518484c79f56943fdd8083640617f6480b6 5647cb61f9146a166b79d65de34230fc6592b264
-90837e7b2628addf7a7c0a620c087077c8ddfdc0 33f7921035e9b68486efed3a42a08365d059af5c
-f34e2d6df7c73a9c7062b2ddbd5e1fa69796a8ab d07c6b80caa837914b319a7962c53c3296fdb9ac
-48003db1814fb0a0f044021a24689f6e71c3d058 d07c6b80caa837914b319a7962c53c3296fdb9ac
-e6ad614be4b6039a325c073f1a564d41cd57e72c d07c6b80caa837914b319a7962c53c3296fdb9ac
-132eb11c98c1150e1d5ab5389eb6e941aefd04d0 bbec5306245294d955e071095314dd243bcae2ff
-ec64e88505bd11f9656ae64fedf08f41eb964dd6 bbec5306245294d955e071095314dd243bcae2ff
-c69363e1fc777a79ebe51ea78eebbf2a86c1feee bbec5306245294d955e071095314dd243bcae2ff
-aaa2752b30a696ec64adb6d775b0af78b9d37787 cf5a9620925ef1d056d267abbe88ed5c2ec64def
-9fffe4ecb3d7106d82827e15c8e4cbe0002d57cb a15faeb3a499517f26b2079e1c4beeed7bfc6e2a
-c6e4e0badb32e0142a8b8e93052230e96d400dd0 e6f54d3252c53cc903b1d9b9ef1575bc32622641
-801923843d63b5636abad697272857abaa68b3ee e6f54d3252c53cc903b1d9b9ef1575bc32622641
-03ccb3f4cab2928e20b3b33f90212ccf36905731 f87bcb7a466c18407111a1ac6792b26b64f16327
-f2654393f650b880a8530e0ee5b5ac9994d19caa 1acc766293f94d7e1212a8db5622c298e92989d7
-a770518b12cb93d490bf762321c8a7d9fd9266dd 12b346389cd6536660efaaf3ab84a3c808deca6d
-f00a9c4337e2d079fcc38e8da068e01302aad9eb 12b346389cd6536660efaaf3ab84a3c808deca6d
-0a27cbb27058c06974cee2420491fda837b30393 12b346389cd6536660efaaf3ab84a3c808deca6d
-ccf752190b23758f57dadbff398a87592acab34f 12b346389cd6536660efaaf3ab84a3c808deca6d
-2d6fa50b7627715549de84b75827c7abb1a79a5b 12b346389cd6536660efaaf3ab84a3c808deca6d
-6c3f5c15e9772eb3ce63e2bcf66c2725c63e9ceb 12b346389cd6536660efaaf3ab84a3c808deca6d
-a8cc04172a78f7e767bc0d54b57dd2055f22a6ba 12b346389cd6536660efaaf3ab84a3c808deca6d
-ba0e38906082512286f4aa33596a3c896af29445 12b346389cd6536660efaaf3ab84a3c808deca6d
-14e23d6ac389f1b0c0173b7d52fac97e513d9960 12b346389cd6536660efaaf3ab84a3c808deca6d
-fa6d24448e0381691ba87c608d20210836ab8d68 12b346389cd6536660efaaf3ab84a3c808deca6d
-77b26e3f3da824a1ff2195e6fe448db5cadbf549 12b346389cd6536660efaaf3ab84a3c808deca6d
-0103ff996b06dda7cdc4a8fbd66bf38fb49d1d71 ed2130db2b5946f27243705245ba30fa3f97db3b
-dc3bd1f5b91b22db7f4aa593f59d5b2d6f049970 ed2130db2b5946f27243705245ba30fa3f97db3b
-b9b56b6dcfef2a04997a7c1f92508ff611d9747f ed2130db2b5946f27243705245ba30fa3f97db3b
-0cc38f80ea3d35c23109603e218fe49dee10ff01 ed2130db2b5946f27243705245ba30fa3f97db3b
-f97d9024052e03b185598707fe87da48f30c5120 ed2130db2b5946f27243705245ba30fa3f97db3b
-6aabe1ebf8e367fed5e9c899029ccc56a6bebc18 b45f1d184d6a7cd739cee02bb889c81281c0037b
-ea98a2202c92adaf319bf980bd93034712337a29 65e4ba465dc537bd0b8d059ab727bcebbe16dd48
-97f8232d938127e0ffb09e8f2b645188cab07db0 e429086e6cbbe0903de352a47077be8be984d18f
-3f9b0027e58f50188a3954dadf82e6e49cb7bd4c 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-3d6df08b455849cade6e0065409b0c663abcd423 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-d0bc027eac8e1e66918e6ee1ef8975e8f83740e7 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-234737d3991a5aac972c5e75eaca4077e8b7df97 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-ed60c10bf4335ce9b40f459dbcecdeba67200b6a 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-670e23ce0067c9e006e703a162182fc8f7dc9b3b 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-b591b0578ef6470857eb760eaa3f9dca2a74be36 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-5c1816e66a4b802f5bf0901232d6e3dbd88f9b86 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-9f7a38714a8afd7cef7ebe85017765ec0ded60d5 60412b8fc63e08e4dc7eef6b5a984c0968db91ea
-19e091a05e91d141b285728fe165332d94d14895 a0caa1c187db54571e7d2e56402b9847688359c0
-11f425df3a9022ace3ec395db37ef1b8d8bbcbed 0d122420491f2a1ff48116867eef5fad8b3457a6
-815bae632e600f75ba9aefea52fad326605d759f 174a79d6d85dad8450966d16ec3c67c624fe5757
-2b57d18fb495617a2297ee41d07530620bc72fd2 0f1a81809324288d506a67a42397719752c773f5
-989c49432d32d118147138c2fd985ebd88911329 0261c9b303bccf052ee4d8682a359b0951bcf878
-b67c06a48c968cf03c2534ee994a4efd4c540ebd 07d788d04dc2192b3e0c44da3103fb8b5b51e711
-778e6ee725ea1d47fc67079c12dbf34a4603cf74 fc3bb9bfa9d0b3f28ea61604882a9cfe88454b13
-1f5746292b8e62d4acc0686c5fd87954cc308211 fc3bb9bfa9d0b3f28ea61604882a9cfe88454b13
-41cda7eae19db09055bcf250b4c3cdc2622916ad fc3bb9bfa9d0b3f28ea61604882a9cfe88454b13
-2a8b0a2c2f9d22ea2a0e47c60029629e1e99d22b fc3bb9bfa9d0b3f28ea61604882a9cfe88454b13
-94e42f2bb2a676eabaa7fb91a5cf6e60ac6438b0 e73719412709e09632f70079e8bd98f95d9a7375
-812377037f106919792dab7d36a1a044f331460b fe9466563914f9a86a51930941bbd516a95c57e5
-8c6e73ff0b36ad84478e1b66bda098e058cd5560 fe9466563914f9a86a51930941bbd516a95c57e5
-34b4281ebe6d819fb7b88603de061fd0b07e658c 2c229516b5205d3544ab910e859572c44b3fbecd
-9b8e33511d7168eb505077d4b664478c0117269c 2c229516b5205d3544ab910e859572c44b3fbecd
-1139a6364925a9a6348a2e98136cbcb09edd8ebb 2c229516b5205d3544ab910e859572c44b3fbecd
-a567b311a49b21de549d70c5582a36c8de7b8c78 aa48da569541fa6ef0a28ccc45808e16bc46fbd2
-f454f8925e6b8f191a6ee242050e590e2671c7e4 aa48da569541fa6ef0a28ccc45808e16bc46fbd2
-6145314d76bad287355317349f793d3ae5653d97 ca43984cc75fb652272983df5c1d47631fd7135a
-b4ff3e12504fdc4563b545110190ec2d96a67347 ca43984cc75fb652272983df5c1d47631fd7135a
-44c56ec2c96a16e1b27ff00eafbdca27e7fd146c 49d0b97f5e23da4e146b94fe84ed19e43673176f
-ec888398794e46b377b834016fe5c4d21e6f0b34 49d0b97f5e23da4e146b94fe84ed19e43673176f
-6ec0e424469876f492df858816c22cf26c395235 414e297d770d8dda1aa2bc80d86a0808252c858f
-0660fa3bf1e89e76b957f522d515380fbf66c685 da94c4c885908e664c546f83db698af9e8f36ab1
-5faccb86a9c27fd0cca003c3dd43b63a018ebfd5 da94c4c885908e664c546f83db698af9e8f36ab1
-af24b990ef21969c14032a7f39555faea44e70ff da94c4c885908e664c546f83db698af9e8f36ab1
-6ae2903ad1663dbf4ec71d06630c3b9fb9019a9a da94c4c885908e664c546f83db698af9e8f36ab1
-2b40e6d5334d4e4f23080aa925ef587312b07b46 da94c4c885908e664c546f83db698af9e8f36ab1
-b3b0bc3a417999190d3ecf028bb2af5725e9acad da94c4c885908e664c546f83db698af9e8f36ab1
-5930372779a3b24acfc0f7d22294bea6e3d198df da94c4c885908e664c546f83db698af9e8f36ab1
-93879f422ed3fd8a7a51f492d6c9f581129120e8 da94c4c885908e664c546f83db698af9e8f36ab1
-1a8975d0a9ff47c5878e3b0b96fae4febe1d4da9 c13cdeff3fa9ae037b12d557631fde2347cd1d79
-f31fbf7bc60e3e3708e5800b8f8394f376f99734 32b371f2c03db686be4f62f47976218eb185c728
-ebdd52004548e6e8de709f79ca03f5b1d931af1f 32b371f2c03db686be4f62f47976218eb185c728
-6310ead61162934bcefae0a9f0dbf19dfc21b31d 8b401fc2353b1d3f7d55db2b724ce35881ebf3ff
-1247b2f20c4047a019f91e3dc16650519d167db4 cb3d96c49a9b1c53cd704f6873127ca7586c9ecf
-2f08841c0bd4e1e815a3d954b3af90dd4dc7e588 b43d8e0dfb8b4c33e5984b4fd11bc785c1670c69
-d7c2e940fee8e5bc2c83de113a5e0de64e76450c b43d8e0dfb8b4c33e5984b4fd11bc785c1670c69
-eb92b9831023eb138359851383b52d7f7540d9b8 c763b54e9ae069ed999fdc4e09823d7f27956840
-37d3503ed86f8008d015f755beef6d3f01146bfc d654fe7bdb9585199bd9a1c80ca992c31f4f06f6
-0033938d87264013752fb1ac33af94e8b3137c94 90d4834621f2fe31f68001cdde395643d5dbcd49
-41be40565ec9c44ebd5d0a6555e95f02edc05fce ec8ffe477cccfd831460b17ef824bdc0385227a1
-40ae9f46ef15167a6b764f7b71ef3a854a898ddb 48eef2e9c2e912f2a2f13116625507b2c5c925c7
-7965264262c84da2d5f6f5f2b0e76c36da416234 bf82c7e3d4c32669726cb62f79cc9efbed3a4768
-9f753b58294ff5276c1e60fb4e9c3daf194b2387 bf82c7e3d4c32669726cb62f79cc9efbed3a4768
-2b25b307434942cb612641b350503ea10e7d126a 45799ca1562df80f5a056a365b884805208bdbc5
-3d3c32e6bad5ba838f83df6c268cd971aa2da27a 3977ad4b2962ff0f2d9fcc81800b4b987a2e4dcc
-bda557538f2e16aaf9dd6f21d0ea04ce7ee84990 3977ad4b2962ff0f2d9fcc81800b4b987a2e4dcc
-93d7283f024966f80758dbeb35d850d8286943da 3977ad4b2962ff0f2d9fcc81800b4b987a2e4dcc
-da60b96edf0a9dd7c4f0c12013f70002514565be cacc127b5ce10cc3909359245831f23bad8a4c35
-01985c5342989895c8891786222533368442a35c 28bd5829c509edd9c3381f65b3c834f9fd2ee495
-e6ef198443bb536cc783446f6dfabd1f9db54e42 ec042c1f1d9201fbdd2d8ead469f52dc49071e64
-263a2ad62f7861212b5c59ab9402538b555376be 7bd2ce5f4fb9b1e900301eeea93f751dab9dae18
-4503e1a86c11ed1b57e35964603a2a5f5902d477 d5686a8a052bc6553e8a9d4b02355314e3a789e7
-a51ff351e9d2abc0fcd4dcbe9d56dfd184ec5b25 e5c06a94862792b07d32de63531e0cd1fdad7333
-7986ca529ec08ca587c1205931be913e02066fba 58db870ed0c6093160a7257cc867a2a74682b32c
-b8f2139926774295242c8878364823294387e6ed e9d48633c3eb9978222cf2faac4d8c774af4e281
-d2812e904ccdfd8fd0fe082c0ae0775e12796141 6bf5c578a705b0feec60dfb7e7d16af5f70837c9
-b4e39214d87e7bd2990002be636cd30a8529684e 94db3eacfcc4ec3e3331d5aaed000e5c21b71c80
-c0145cf22c3615437ded67140448d80bc15791ae 2213e2b234d70f30add42e05466b3b8d6f5a1b63
-4f2599b075ba68c5351491e44550da712c26e716 2213e2b234d70f30add42e05466b3b8d6f5a1b63
-2830402dc1d0feae98bac1bbdb251a0f010d133a 642dd51001db605952c462f4b4733d1e997fa115
-7fc8a1653fef3164a92d1fd9934c6d3ec57ebfb8 bacaa8757bade522be59aa180c77fc056be54a21
-1bbc5fcb72cc6f5c2e1b82537f5a0b3dc771e88a 593876eac639a7524b204f6a95a6415253476633
-bb06bb4fe493fa4a3fce0616448d76edfc54fda3 a9bac6a988538fefae2b1b6d67805bb3446db32f
-8651461ab132c1b119981e4df9bfe552f55af60b 11b93be5c738372ac87ad62b6e28fbf3df24388d
-3d4dfc98ff0682591260adacb7095f4018372a44 1de0be4a81e075cd0e910c3a70ce6cb27f0c11ff
-84afbb96be4e49631a9690069d1008db880561b8 0db6f1984180fbcb1cb7102875ed4d3a2f286efb
-ae774f60993f576ad31c570c717fefce62e06742 6d3ee579f1c6a749fc8777ba617e94119a1a10b6
-b496c9cf83efe5d2ff99cc8a13c22f2f36af511d 6a9a8a6bfb9999ee3ed2257ad0e426e11f4db24f
-2ee93e62610271817dc8252865c81778a240f9e4 6b4c02fc127afd19e1b99e3ebce763b29ed88c85
-b9ef8964e651f56764891f06cbac8b2dcfba7a77 845e87f498e15faf8b0b31da4b326ffadef1b1c2
-562aadbd19ffb42461bdbb639c58b1a445d165ab 9e467e2be6b2e5c8da6db290f90b86d278721a98
-095aa92bd799c8341df74724c104fb1ca3fb1751 d983c497cc42bc8d801a14ca4e23a55cdcf5c2e0
-69cbb2c2237d968355841cc596f9258edf8a5c7b 64beb0cab3fe1e7848425726ecdc7d084eef6c07
-cc6a2c28f2e520b1c3d43e0ac7f303e6bd99dbea 64beb0cab3fe1e7848425726ecdc7d084eef6c07
-e43207550a7e3577b7b358ad6ecea0a8becd1b8b 1e9dc408afaf8bf7be4f328206969e3368a2a4cf
-550ecae37db8629ef9dba61d6c32fd9442d0469e 1e9dc408afaf8bf7be4f328206969e3368a2a4cf
-993a87b09e9cab9b447e6c2ad4b62529a6338ee4 1e9dc408afaf8bf7be4f328206969e3368a2a4cf
-5e6fa4b0cc66e3b2d232cb81f2250edd4383b18d 767d240194cb2cf30b9e34d12098c806c037be63
-a5c9f90f7e7b36202d85101f07947058de9a6297 dfe0c805855f5742de4dc53880e11a7fffca1174
-92cfcf2990d86b28dc9de17cd5c05e4358a5b2b3 12c4b4ed8efa2e0f509a58c8a47e96944c7b9e6d
-8d4b7f880cb9918b6d004a1cd0afac474bd2533f 3e31db8db05b0bd89bc59c70eb52b038b3bc5814
-fd8fe9419d8a06f8c02d90941b6e2d09f6f0d84b 3d71f3d1b81455e9170de55387ed41069e585a69
-0b4916505823c4c5a941d38bbb57126720e391cb ff24c37dced4d1d085a3c0836453414f9bc35f5d
-0d7880c06bdc20bdc7090c3ddf62ede4b464b129 93d023520e081ce348ee538a07b48251c0e38594
-6747a0df5b12f7494bd8a709b980f6e936be62bd 46999a4310ecab522f1af5d0404ac9a28bdb1d16
-469d7ac1135526a7aa128b4cb6e7918c8995a462 46999a4310ecab522f1af5d0404ac9a28bdb1d16
-99c57aedd2afea43245e791f75e4b09b149cc5a0 a0c160727eb0de5f399275d87a8a3995b94d7143
-ce24016dd68f99ff08eb6410523d18eacf39f69c 1819ce8980e38922cbc918f8ab1e09dca0f8f3b7
-b4539aef3fbeeb0983670314b201f62412081ce6 cf6bd9276c66d1397099ff0e1a9794afb84c5881
-c288c1c7795ce0d57a3b12c310a8e0cbca3d2746 848ad0e546f80a7dae04ac3e89b9ca0df23ff090
-eb0e8caf289ee156212849396657d2f003cdbaad a91dcfd1d3cb418e9a0ed0856cb1600b63cccf4a
-df386d80f3f07d489473c32796c250c6bdcdd3bb d9accb0b61f062d8b4ea0e43e498fc9bae469ee3
-cb03e9021e44e01fdeaf989e0f7dcbb5a47a68c8 2e66f5530d375c40e2fe196620db6a1a01cc0efe
-d836a2186831712e009d178c31e18e9c5d591bb1 22c0c6608a0f00c02b260bc3b05c5a8afc5077af
-33e62f1882b7254c4c8a0622836f640b072e11a8 06e91a4508a2c98c3c3147a37a4edbcb0017656f
-4de0d02ab86d9adf9cab5d8e8f70d2812291150c 06e91a4508a2c98c3c3147a37a4edbcb0017656f
-784fac9d4ff79d295a36bfca4ef0c863ff35d623 65bd1509f74e115a79018d19c400b8923e5f7473
-2f851ccd597341595e637a53ff62f75ac0fe5991 65bd1509f74e115a79018d19c400b8923e5f7473
-8fa1aa6ae8bb6c99c3699fa0f08bb3c6676f0715 d1991aa17de32f1e50074649baf4dd2832f556db
-be11263eb6b5a8c1ef8f12db449ce43ea4f02102 61446da295153cbc21af50740605b677640dcf35
-ae83ce5529ab0c42dc1b4022bac6aef41b0945b2 9079fdaae85a2d32f0505951bfd086f2f7b2a2ab
-d176d710fd4f6a310567be3a72d58fec219cf30f a0bcc2bc182bb74d8b3cf613511f59e5ec3406fd
-a5415f9541f00ea172bf7e9818c97034d4e7d824 8c05d241133855799f1effca5bf4efe9ab0abfe6
-a968d4edf711f20318a37ab03968decffe3e130e 6dd0cb9913b55f08f496a1ec6db41d83f11d9938
-51932050adffd328e2a96a448560363d91d27d12 6dd0cb9913b55f08f496a1ec6db41d83f11d9938
-f78c2be256c07b57186c9c2f26579bbe2f1a2c8c ab67b588c9a402fdbd75b462c8aad96e7d5ffb88
-f87e1e59b6420d2afa894b7f621ae2d873280499 ab67b588c9a402fdbd75b462c8aad96e7d5ffb88
-f202372296717f1c073f044983d8ec65a7a0317d ab67b588c9a402fdbd75b462c8aad96e7d5ffb88
-4adaa223dba109aa6139ee6d911db2e5f9abddfb ab67b588c9a402fdbd75b462c8aad96e7d5ffb88
-c96e3fa3ca48282b0f99ea36eeb4bab9ba568c3e ab67b588c9a402fdbd75b462c8aad96e7d5ffb88
-1a3437d2e53809680874e272eee882f54ebcf7e2 98e28777da1d8109f7bffdb219e3c8064a5ab172
-616479eb3dc06b15d06effaa47826ee036595adb ccd1c6deb3df7ebb7e65a5c54569c9b782321a88
-64dc1c5278a4f156539cacac6f9cfdf250703eec aa0e4830f8dc96cd5eccea436abac653da34d080
-7b743b95e29feeddd5732e8ed116b360f74714d6 aa0e4830f8dc96cd5eccea436abac653da34d080
-3340bcbbd43409f3b822a14706dee653a564fa6f aa0e4830f8dc96cd5eccea436abac653da34d080
-6b4b1164f13c5abab8c1d2b55aeecafb27b27c0b 69ed80022bcb61df2d93a00973e1ad70bf1b0c7d
-ac04d6861596c07cd1090e9de2c45d1c18f7e480 e64eb7c469eed8c2c1c473661c4080a6ad1bd504
-b4ca4b8df0d43e025423a25adfc0b7b95ee3ff1f 87f07496b9469248d3f52bdc99f4461c8ee5645e
-351196a7cff694d8cb55b87c0339425bd47b699c 3d78c6887c9d01679f94bec657a9c816395f78d2
-88b35493d282faf6bc917a88d087cdc76a07eea0 3d78c6887c9d01679f94bec657a9c816395f78d2
-e00e88cfb319307e274447bb9cb672e930c0f55f dd7bddce98770a0a2695cf4c1ecce0457a137d73
-45d13ff8bfcdd9e0aa7eeb918d8e20a4914dcfae c0670051c9d2013a898589b95a42536ece8e7929
-cbea0c3f5728027e3a1a264ca4fa234d8c07e32c 6b5a2b7e04c8acb436ba8378d8b0f286a4e707c5
-fe95fe5a47b9e36fab23e99bccf4a32302191cd1 79b84dce2a072b409606641c244fcd7a81d926da
-897c912f93a596b1f327000ad6e116ec4e907108 e41d0621660a3c818b3d818371d76974cf9a28a5
-15b58c79f508de3e96f89f3306d815226c4c78cc a0daf04e5673291c373244586a712e4a383dd28e
-b9e05f45f4931bfd1484a85f26f3569549c74964 7aa8198cf0d1c576b6bb191490c07986d35d74e7
-ff610ce456dcce1cad3c6a4643cd1ffbf70bd832 93ffd8d711f5ad848e184831396f75a774dfb69a
-28eecba8eb535a239a9ad1c01df704411f9e61da 963daa4dc2396157e1ef6dd0abec12acd61973d7
-258dba8efe817aa7108c52a4ea842168cc12c560 1d47ba9185604438fb94969c30cd459e76457519
-ed473c7bc4912975141a58352ea7458ca2c897ee 1d47ba9185604438fb94969c30cd459e76457519
-b7c28236d7b61a16554413c16ae838a1376f2d62 1d47ba9185604438fb94969c30cd459e76457519
-423fa7b69b2f54d5831e4238b39b98903661fa40 bc88c097ff4117ae9beb497ab92ef6806986a850
-67a782b1e750da3067356d6ccc8f07398e34c8ae 650eea07e76a01d958cba3953b3a7dc8995cadbc
-74798570fbfcb38bad047d8dc44e77537d271253 e1197ce520bb84a3a214db2abd568d02e1f9b432
-08d40d05e434f366f596262bab34c4fa4ca769f0 65d9b9417f853eb69a64ec0192d32061f8ab2478
-82d0e1300a7935ab406283bfac452030cdf9aad8 45a43b263f2f2addb692e1998d1a68cd31173e26
-8503565e4a91d507c46ab5d8f2739172120f94c0 3c49fac206dde7d773805e6aea289f11e6c53831
-f620afd4f276469cb9e1b6f36766c7beabb932a4 d016ea6c030b9fb405db10263ec2692ee46b1378
-bd71dfe08330e0aa91dcba2a80528b8de588383f 7d925c54e608ac15948288ca7492b8383dbf1f08
-74c4fe1ecedb9c398c94b15b986e4f1795a32747 8b376a3f766d971b62d00ae5cd871c8fb1dd15fb
-be2dd5525c7c0a973993cbf033c1e1dabce8c4bd 2666154b543bf214ad7792906557ad4390f9256a
-46579b5e077a7e5e9ec80fe57f5fd47f5039b2eb 2666154b543bf214ad7792906557ad4390f9256a
-a805fd2ce448bb35e35475dd94118a7be2fcedc5 5b0735e2c780cb7ed44c499096ba860ed7b8b4c5
-dbef24b8a9dc17c638b90acfd62fdef074dcd488 cf45c3715921f4dd7c416fd4dbbe61035de69d86
-ebbd8a171ae396bc189ce237515f1c139551ed34 2c217e9e98b6071a96c96363fe1ab3a4e332206e
-cc6f27169c70ef41f5c5e9e841b3ec3286909425 8789b2b3b0290accff23b71320561c59b585dc04
-485678bc188544fbfd75420674ebca824071c7bd a2d7e596a68f3f969d53362bfc83fe8b2421d31e
-e62b1d1d7838f95636cca4c854a405c5b07daac0 18ae790376157cdac157977f3cbc29c81f8272ef
-dfad296c6b85962fd420e1e21996864085492088 8a8f613524e5b232dabdddb13d3e7025aba56fa2
-caabbfde34fcba756b9f21debabc995aeb68ae7d e2821d7bcb3f33a45d16ac9b51cf40302732ff0f
-686415d19b2fd0029e7ecbdef5c4e2e1cb6cc93b e55ec453c1e7c744cb2af89e280a4b2e2dac2f8c
-b54ebba9ce923b172259e967b1a481d49ed87017 3134a5b5041671586e3ed9c2223b119551b59f75
-b477e3495ffaa6086fe0e3e5fc7dec74886deb7e bafaa240f8f10dcf9e5ae42b64ba6ff4325378b1
-3911ecbb112c2864cd6259d6b37ed2c73821037e 7cd91d77c49fd7856aa33ee768b68b579fe0367a
-9d8115c30ed8ee0808e0a8fbbc0805c27708c2be baf77ec86a4e5ef3acf026477716789c342da923
-247e705154dc48640dacc513575da2d95a779ef4 fe457f9d625bf1694217462217cd7ad4cac2bd34
-c8f8540441234d38bedefe5c6a9c4c8269f75744 ec25097126a9036fde8b3f032551b6c47a7913b7
-6d3f4d0bb67eeae9fec3e3d47ebc9b7c5111e6cd b5832cf0590cbfe6941386bf9316412a71785188
-2d7c1758647cdf53b09bb7a6f1e4e54b7d8f8fe5 e3b3b23b1dca0a8dd62fe9aa60a9de7c9b4f16d5
-2e943ad94ae68fe43435bdcf12df987cd14d821c bb20bb301742f593eb057ce3bca1b2f9afc18475
-4b92152cd25b7a4116ce31ae01d2240574a55b64 e82e85bad7b52f2ef50bbb0b8589d6cbdd5b8138
-28e75341903ffe829573e4b15f51a2c5486cc5b4 4c2ca960b399507866caf91f6ce1ee54e380d3f5
-11101009f939ca4fc2f5e4cd2cc02ab0bb08ef56 823a56575dd19c495c5cd264e5c69fa0f9b1f344
-737290b2b17ec2b07b85a9d46ee8cb11cd08dd45 4d28e4fb7023edfac3121f364b243567c12bd538
-fd4942e21fafb1cdc17b12257c65070977753831 96709556325269f03533e9fa7d4817e6f1f0ba5e
-2699a03f05b5399ad1a7d247fc71752b18c482ea f7cf9dddcfe1aa8790566755254bda0b0da54d44
-c5226c45c70fc1d350e6a34c132e46f0f129f11c bf95044fe7c5e0c36a0119bc2f620d9cd8777327
-90b50f976b9ba43eefaac6ad073ec515c143c33f cca66b2e15765b2d65020af5f86a1db6ffb603c3
-6ae3b712f8f0eabc8fa211bfff0cdc33cbbb7385 ffca31d2ffb230bccbecb4430dcc9b8e23bcfa5e
-3f0d1336b28cc7fd20a245513ece7c518d1c73e2 4b9a5d48d735abacd5107835a05e3e38d758e044
-75dd92c763df3ccb3d8c9721e3b64bb260f915a3 acc755e7cb7e3528b6150d27d5ba3b6bba975494
-b1cd00fdb8c467f4f6ebcc63d76633583984460e f51f05953f4370171727fd04e16d50767f8525fc
-9515945d40be9ee1e11d7187399533b2e2fb609e 48a3bc318bc9201631f36be00bfe7a1244558f65
-dff02a6d21188f48c6d4e4aec4c672d9dc985583 48a3bc318bc9201631f36be00bfe7a1244558f65
-3a8383ce9dbe163c635cb4aa1d01d6ea49d9a63b 03d806ecf23724b60ba893d4a87db854e8439df7
-2523ea61d7cf2ca3726ba3ff69d486893e3b747b 0a4340f78774d63a649d5d407c933673dcfc635f
-7f4de91bd9d3b0ae78c6690d59debf49f98452df f8355383fed91ae2077b39162f132855ecadee57
-d436b5749d2a59773ad6c41aa355da9e90b4cb3a f02c88940e2ab07ebfb8f0686f2ea7763dead63f
-799d366259e296539a98ecf05ce3ead7ccc9daba f264ed2caa7363d2d054c422f95aaa741febdc4f
-93a189296b28b880d8191f72da4dee207371d5ec 5b6e26279060e257bea035d5ad34feb4667b58ad
-5644e80b48b8defb25bc8ae47e0d23c7a37c7849 b4f79df9fabcd5b1369c59e12e1e082983c5921f
-abd052236deb51f2e976b5dd670123ef91687fa2 eb70a516a0facd8fba07403bad511b2e38e6fcb7
-7fac4cfc3554c384f5e371e53c8aa50cf7b40b6d e37fa8b022e5ec0f690b113e89c9454f2b3f949d
-78d0bc23f407cc4f8020fac2068649f6769701b9 3a7788dfa9596b66d4e0f78e263fb74eb0035968
-5892349a47eb77d91816c78bbe8342ae86ac35a9 b16203efce47836a9ba54f82dcf800d8958bed84
-62b10682b92582d27303d95051a3926dad4cf41b a8989974c5a2aa12ae9131a82b6216f7beac84af
-027031f002897d2902a47b338fbd262cba61126d 30b70d4acc25c07f028c172a2e42b05536663dfb
-fc149a8602419b5e1a8ceb8336d2c52be1e037ae 11233f41f0f184dc81c08f05287eddc622e9fcde
-64e45fa4eb827bc3e56daf40a6a84e25623dae49 75bc8290e9bdf5b344b7e93f0b5e9caba9483a07
-7910efa551877b6d82fdd84352ca0bfe1fc50e2f 3e94ad3e2e36575a386914155dd46bdb0f34c85e
-4b175f87c30a6de04d9c4a8d4549609636af9c5c 507f41318ea1ee63e5066aa9d2968851386d3c58
-2d3c72b8ec62e2586e5217e7ebcc0988e769446a 741d4efd0bdfa32901efa81d9adab911d57efa67
-7d670334b966d4ffda051e5ea0ee822361236687 cf4a2e124730bb54b2cbc946fc3fd7ebcde124d8
-15aae05be9c5426764c374eb39ee2fdd8101989d 0bd9fa2b788fae207552588f04d6def6769df85f
-2bb46d45263f65c1df0cec4606ba2ee619744159 b25c7a386b9f405f3462b4268b22b7e73e79d231
-5907739456aaf1ea2f2edb9319d16e84318b6679 b25c7a386b9f405f3462b4268b22b7e73e79d231
-6ca4b0a661eed3cf37201615bd64f85e871ef75e b25c7a386b9f405f3462b4268b22b7e73e79d231
-75bd464f4c5e650eb7a6c1910861cc8077584ecf b25c7a386b9f405f3462b4268b22b7e73e79d231
-123f8db587c05127c4ebfef963fd47697cc73842 64d1e10972102b41f3ccb253fec7556e75c54e5c
-d8c250a24e3fa4b7319ad60c2ba5c4fe832098ba f64890d73f202818d4fa1a4bd20b9f00cb108e42
-aca34a26463dec4195513d14f0e04520de0f04fb a15c776989a245e256e9591d5714756d21cf59de
-56e1c4953fc45f6a40b0a2c187d714e5ba088219 a15c776989a245e256e9591d5714756d21cf59de
-3e57d7b60d381f5885f0f8787d4710233185e667 a15c776989a245e256e9591d5714756d21cf59de
-739b559f472f3e59a2ed8708a3fa09bef886b9af a15c776989a245e256e9591d5714756d21cf59de
-168a70e15f9524a7a5c2810333ca7df022350ea3 b320bc1918992920c38738ce07f4ae32452a7b62
-c95db7e555f1d12b6e4b0e03c6a7ec744c60d2d2 31e1ccbd01d2f1ce8ac1a0008d9201ebfdd4de47
-c42dd23a425479975962de1958a59ee9e91e9180 3cdd0cbc48ce18d5e1b4fe8b132c38f9b3c84c38
-73160448a425aa6c26c9f5d36f4c254bf87cd760 2289fa91d5a0f5a50d5baa4e4f3f1d8c4e895346
-adc2b736736fb2f980a2b4bb6051315e0d47bca6 dfe7363d2cc1d00fdb0e690bcf50783f40e751c9
-ba1a4f7de91de88d8b7f4cfcb95fdbf75465481a 22c2326b8bbb79e0282e880c7f7613712c58df89
-f162b07bb9df0d8c550892a73b498f8f5030322d 9b2b2670fbe4ef98473c1875127952e2314a5dc7
-8be8ede723f2bfc4a18e99409ab09275485e33ff b909fdcb8e91448305bdd6946a629d9093afade9
-58ac04dcdc28a7bce57f4991389aaacc15a13823 05cfe1e6777e60e11760f965f59d0b3e48c73588
-51ba48c956b57ff0054950348f213b55bc3e5fb0 f31af4e32b67327f4e0f416a0456be1199765870
-2b69f55370dbc8a8c5be47ff5014e765a4290f53 52d96ad3d39be29147c5b2181b3bb46af6164f0e
-ef39229d5e421cc1c13202796b1b0c91017fa106 b320bc1918992920c38738ce07f4ae32452a7b62
-0b66127d4db227f6ca68f33f9d201ca09e779eb1 52d96ad3d39be29147c5b2181b3bb46af6164f0e
-a12a233fd1b60e9765be26a483a1a50fa303f95d 08acc5652d621e4295744239d784edf56e58e695
-5c7637254bed46748ac55a1402aac7f7a14cbeff 08acc5652d621e4295744239d784edf56e58e695
-ee0e9baaccf5ebd3cce7ee8d6caccaf009179317 480d6be8efacc4ad88ec875da90e8139342d1ca4
-532ad97ab23114c0bc39a72aac7a8d3e9c3729b7 480d6be8efacc4ad88ec875da90e8139342d1ca4
-c453952ec5f1b1427e4cabe01ff48572ba383318 fa15b53cdb2940879b9b884859205bda2700d0cf
-0ec53280cc64342a1d714506ddd4411720d29245 fa15b53cdb2940879b9b884859205bda2700d0cf
-bbc166261efc03aaba35657ead5e5eb8815343f8 fa15b53cdb2940879b9b884859205bda2700d0cf
-8b85859a0901e6efb324c9f915a949668be917fc 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-558fa8de1615596983df1b15fe4f4546dfb85b06 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-a5d5390649d60374dd34ed12cd0b25bad1801f4c 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-3302816e47f30768a81d05b3aed87b0c90707463 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-faeb5c386435d30407a71077e1d12a6a7b11c765 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-ee76ee8622ebaf1d01be72e36bb4dad33e0f25f0 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-21dcfb76dfdd2d3a8705941fd48822f32f29aad6 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-e2fef89a7f5f7943016224d720ec439bfee330f1 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-976ebef0c0dee788b120a3816a6415ce65385016 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-737251aa0ee203ef7a24c199fa3f83249cd5154b 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-3c6daab3a0b0768c84f0a043fe9f7ac0ee44bc8b 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-f0f3e2ca4cb06539011d4718855b3723dbf8ee32 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-7b0c25d74a3a0543cc4c66e456cf6fd02a94c5ea 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-3baec7872cb24380d992e792495d1c173236a38b 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-1fdc82f32dd65ac1ff28213e86f2a81241a6fbd1 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-daf2ac1396b73092566247fb30b58067b4309a93 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-5925f9ee211b7d3f80989d44ed0df4fb96e209ba 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-8815bf903cb5693cc14710c78762865956fdcdc6 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-536fe63cf13beec1ef36b3666362926977cdc9b0 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-d4a58073d8268e6d98ad3b988ffcd1a2795d7cfd 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-368148b92d2ad0196b686f434df42c4176ddee59 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-928de6a8e3ecfcc8ec94a5da078728bf3a2ef0ea 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-b2b194ceb5c9720d49c9046b9ed716ab5af8c9f2 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-58e1cec26798d852d63402405144181e7da8b3a0 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-c5fd35a739949aa6db9e57224f4744dd79ad5187 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-aa7b2c219a5d0da5723afc13995eab68a3adc309 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-b10b0912aa9ded88b1f1917a2339e0d0c5b4aaa7 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-19b13f42fa38056ee32e5dc669caafe9f5ab89bd 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-50130d0bbb890cdc1e9b4dee108d441701e6ec4c 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-101064a2fe4ea5dc376429dfdb71f0a9d5668779 76795f53e33ee95d0d7dae9ee48bc5f4e1747631
-ec86447febd40d35d91aa2b949627d1d3b2a7578 f42781c202f93d0f6450a7e3a9d4563614705a87
-e03eff0fd664819cf940f5c7c0aa5229d1338cf7 13d0c282878c15b402c077769ef0c01e2ea3c713
-f932efa2efce8b68c1e1f505802e32aac93edb43 5a6e49e195c40b67c1dadd55611db35768ab97e3
-e072297d7e55834e6d8656a19d766abf27e31fc0 4aa500f7e983efa49cd373e6f7ffa443507c186a
-76ad7ab9898f7d7c1e00ed56dfb8824323c5096c e032d6e479de36cfa0a283bf26206686ddf2ab80
-8e30ab8802dac71228c5da5d19288363a7796fe6 58e0bfdc37b4373be4cfe6bb28251ee8cdabdf4d
-54d37f57b0727117370f9de555476a559596261b 25cd6c2d0ffb571698593ca3671deb62260d6cee
-6ab73807689ff0865a240833eed47ae291fdd971 7bd22c5a8a4cec6f79e34423c946c6cf0df3400a
-c7e2df55f5e5dfeb326de0f3eda60f640992ac38 67cafa28b4cb34a575d33784aefc38418db75bdf
-3e04c50d21049cb72a7514723152d51a69dc7aae 8e954a3b78e2fd5a0609f46bcd0ff4319ab0d6c5
-f50615a7499216d9b686cef78ce6306cd21d2f76 dfc2c52935915cd4c64718036e3a5d5eca3faafa
-1ab75c401e637c584db1a46b7901e260242dd7b6 21ffc905f9b614df56e4dbd0e606fb0122032739
-9ef54d373aeb2f0d8b5ba7b2b3c5df9e13a32f53 9a3d7214d1776c3b0ab12dce1afd40f26eec2a09
-543076832286f8b228360ac5d0a2a0e176a57053 23e163b6c47f6b79a2072a372eae9067d2d9cdce
-9d6c38f54c976407faeb668558e877354a6a5452 26e74fc6c28768bf3e8e41d621c68c31c4ff387e
-c91249038904e2e4d779d7c24ad0ad7146e6dde8 2055ab4023dde6fd3cd50a97b82e49a6bd3d9309
-43fd074f881e5692c24a64ffdbd8b7b7b0bf4a9e a91a99f4e4835297289c7725bb9fa2e0e59ae501
-8e0cddf96ab2467b3a9a5bf274d163d0bf68400d d0bddbde50349149a716d369d6fdea28bff336d6
-c2685a613f5bcbe947e78bfc93dbd40bdd183f4d 16e39bec82a1b1b80cdf30eda6215230fd77dd0d
-b07bc532bb543358038703ec3917003fd401293b a769eb06785322e7b7f1f07bc4533a3630d7907f
-0e418e95733439bfce135ce74ff5aae87f08cc7e 82b45594bf2dd6e1f74facba5a5033c6aa4c3bb4
-3ec32aab798263681153b73c84ec384bee3d0e7b 33aad42154243d5e94021ab880a2f5f896b5a101
-a3aa11638b8cb21ad3a9c520377bbe9f73f3b335 37a7a7027ec889ac4d845064df76317f3dd4fcc5
-f3cb59ebe43d896d5e28ce6f09d770736dc1369c c1d7a5661459d2942d5aecb9f731a954643a818f
-d80c874523e0bcdac84a290181e493cac2e6c1d9 6546483059865bb48101b68380fab41e79743865
-d7d03abd637b71a65c75b64e28c12bd0308dc2c0 9a6f84d2aef2ecb821739877807927b1275da5c2
-067068e5a65d0d81c606b59c1238cc6df28343ab e2a07f091b2e39f130d933f7b4c5ae6b9798a8cd
-c6195da89e19b1553c9d53da90ab7b175d21a8ad c878fdc8677327083c974f18f452b5f131ff1e1a
-857082fc7b3a1cc9f3df7009a09d845fe6695b1e fee02c33613480f161154cb22da717e92f30acd2
-7d3ff4f7763c9c7c8090324d1f47577891c9739b d78e718a49bbf2502bba2d420f3f0bc579f7649b
-ef67fb4e4912e6567fc5c94ff2d22fda04d2520e 6d838674eec63e48bb1090a0d8108ff59e07e13b
-6d2d9a196249432ef7a2dc283f182f1512ce5480 181dadb0019f18c22b1115787883e2a6292d9b8a
-29fc42c0ea87fa422ef3277e53dfd767ca25ba94 8dcab62ed9e97348e9c1072602107933e3220485
-48dbab0fa1a8a854db31299cb7b5b52347d07a5a 1941d901e81c36bd4544d39a8d0481d49627c02b
-c7928f878cbd5371f04e348e2eee44826b1cca1e 5ff45443bb3fba172446d902edc77a166299326a
-8c1e73aac5d33054606e13ebcd4445a8d22ab108 5ff45443bb3fba172446d902edc77a166299326a
-66fb276e632787a7c5ec0077aeb184d13100799e feb9694afbca366e88192642d565f7368e3a7321
-1a5ed69f5bec19cb64207e758ce5a00a5b9dc064 b6207c0771cf99b71761f3fba01a0540fa45b9dc
-0451d9a753a979247d5e8b28ed7090071985d065 feb9694afbca366e88192642d565f7368e3a7321
-a58019be956c66e11b3349e3ef8349a512b5acf0 b6207c0771cf99b71761f3fba01a0540fa45b9dc
-6145efe11db4c16322cbd8b4b717564a147be24c d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-272bc00961e8ff7051c3f8e841d93b0101ece3ee 1c551c281f30b2d4e8296b0558de752308c25954
-c465a45202ec2ba54685b0055127eff87d5cba20 d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-1a5756e4233c627598a47a1e269e90e38e3598a1 d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-6f6a4b81b81fbc2e3bba3f115b7b7cc644bc718b d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-dcef57a149ea3c2338d27de0e952c66a43a87692 1c551c281f30b2d4e8296b0558de752308c25954
-2a155b4ee3bacb22535d27ef4dbf78b0b3870280 1c551c281f30b2d4e8296b0558de752308c25954
-079853d44e25b968f6aa7d1baaf840e25a7f110e d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-dc38aad8139f0186890b3823f31c66fb8f1c24ec d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-13c66a3d84662b2c63bc5c38266aa85a70fceee8 d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-ed7ed3676f33b3b429df344d0a1ab1c428956fc1 d890b9ebbac8a60ed7d2ff723a1c2b8b03029726
-1e1b11f736a99cbe7ce500a8f30f12752a7508b2 f3db62a00eda7d1d62aec3a94f5dc7a5f29d1de9
-ce21f6230b2358a7b4400985359c20af08e84114 f3db62a00eda7d1d62aec3a94f5dc7a5f29d1de9
-188e988a29e5dfb6271dc9368194cadf2556a503 205e5350cd0c34e0dbdc18e6526ef129db04c69a
-93968f04c8cc8cfdbf4b36695ee42234fc4a79c3 f3db62a00eda7d1d62aec3a94f5dc7a5f29d1de9
-0df4eb38103e39b64418b3e7da71d648bae3747a 9ccdeaee7ea2674f2ed6c221e774db97578fabb0
-378d993e9d6a74134d959be95fa8ce400c1697da 43130add6308e26ba2d0db42b996a79aef5d4cd7
-864527587f3a776f454f7701d3fbcc0268ae0db6 45bce29b9b92e7a40657744f69889073c4f61aee
-8e5c50b3e7c30b6e259964ef50fd6dee5c596f9f 82a9ff1ed403ef4ac837ded4fdd9d22689dd37c5
-6e45c5dedabb8b6ec02d81475fde4dae549f57bc 03ce371b122571519a21e6618b034130b9210b0a
-7d3363ff4f867c2763729619a74638dd53b3a508 03ce371b122571519a21e6618b034130b9210b0a
-604bbe106376e1c6223067476f360b342fd0cbc6 dc9ce40ae1bcb703d95eab2198c2c617ab4e8ce9
-efe8878ea77c94cd0a82248d1531d8688b0c7418 fd4ded0806b26e4d3918991cf49f868456f8edb7
-c612d62b158e822675a3a0e9ba1f2fb424c54d02 4b8ddb24829f9c08246002c0cfa0ff332179aea7
-8afa50b965d611d915a67f217fab044394aa8a16 45a0be777601b28e6909ffc135412673524649f7
-3045b7945fa127290f20067f77ec8d8590b962b6 0e9ab5517cc32e28d8e4417ed5cb5c46988dd53b
-4959cfd93095a5cd2f2dbe57c717548a34514df6 120c071cebd058282a51c51cb59ef5d9081562e3
-59637c0728ea0598e28d96305cbf2298c5fa90b3 32698af4a1668b7cfe23df276b85f1b0f394ffeb
-8940b2b4d88a391157dd65d9f7e7b7d1dac2660e 473daf3d62cd8c3f648c282ec06506dc747801f4
-1c0e5f18165937cb4a46648d4a6889b824966ea8 473daf3d62cd8c3f648c282ec06506dc747801f4
-b3697e77eaee75329c78be88067df3e842a66fbd bb644526b987f71a19abfe6c7ed9c99767caee65
-b741f0ae90b0fa3c82ed8652656f85d2fed2dde4 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-31ddc62005706160ecd658391b4a406e04e4bf01 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-dc632db7c821308916219a67153b6340eb938214 f68a80db116833ed1811a67ece681da86a7a3b24
-97d3292c806a9cae005a24159b641e9e89d90f46 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-ff659a495a617551b02f42e20dd8e6f6d0a65918 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-b8c811b7c6b3da1b57d26d527a34ea75274d44d6 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-f55701f73eda66c976c6037ea50bf596b220375d 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-4093c21d0a5aa5b07c970c0a9e986c6f89134721 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-9239e06138d2b771ef8715fd444dbddeadbab867 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-4b474b2e65cc274a3746cb4f6e6cc052656e2af8 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-4e8aa28f60d6e387d2a16171b58c9f9e52c03661 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-6fe0d4072f0661faac95521ed9100f1d245a2b83 9dafaa7493f39000be03ce4ac6e3f51a7072b41c
-a79c537a5c3f32e36532a68933fb45e83cd763b8 61e3482b14286b03a610f7ad329b57f30e549ab1
-83a95d8fb9cc51882e8be887ca911326e5ee11e8 61e3482b14286b03a610f7ad329b57f30e549ab1
-42be471a80509046b8cd5d1185fa8124c6465c96 f68a80db116833ed1811a67ece681da86a7a3b24
-ad38e1f02905b0b52e19419e38b5e395f4b57ab4 66881fdd5e8efc0233c76e1be3917952f8ec3144
-87558a7ff862c8b606b708c3645d8c535bef0593 61e3482b14286b03a610f7ad329b57f30e549ab1
-77bc07c44084ed190da47721bae84d38209ae22e 61e3482b14286b03a610f7ad329b57f30e549ab1
-4eca7253fe8b99ad0202268ca21b053523efe146 61e3482b14286b03a610f7ad329b57f30e549ab1
-6773dc3630b8c28393dae5ff38d421c8ea59f7f5 66881fdd5e8efc0233c76e1be3917952f8ec3144
-f8fe65215a1b9fa94a7c78d99d556f8f63d68eec 93f6742a3581d5f5053ca2f4befa99c786dda2dc
-9ae910e6f5754bca6d3339484d0edc944402d688 61e3482b14286b03a610f7ad329b57f30e549ab1
-545efb86faf093f1d237e47a1a8d6395325189cf 93f6742a3581d5f5053ca2f4befa99c786dda2dc
-7281a3f51f483dbd370ecadd2588a46ee2e9c2f4 de72c61b1e358d5003af8ead6bfc70293d0ccd32
-72d167e38079d39003aad34f569e9afc69c91634 3d1cf5cb48be21ad5805e93ef5c364580d355927
-896f370b645072666d14a4261d3a81cbf2231913 b09f3a23916947c516f1b9f79a574fc47202707d
-e0826b62b7c5daf322f1b96da2c67461b6478b32 0577924acdda72ca5f3459abcf4df3207a46407e
-f1a4848a26f6e72eee47b34d3d30786545f75376 abd2459d6d8e8b4da826bfd0b5ae4ed09071f0b0
-48a04e8813e53bb1721a113e357403ece5d2d7b8 e23b5819bd7e38c3057f7113125cdfe127135131
-e3c8e7d3f1ab9ddf17242017bebe76043e31d3e2 ed42c0347af957a72e92b486b2b138869c4a0aa7
-3898a7f27a481c1488c8448d25a64b16651f0c19 025c848f0db4cf371544802fff68d1b9e70e0d8b
-9789d39ec8efd07953f4cf6a881f0d75bd7d0e7e 025c848f0db4cf371544802fff68d1b9e70e0d8b
-9ba1e6a49c4d75137997d10e8948b411d2b5cfbc e8045dfc75e606c042010fd18aa11ed194c845c2
-cfd3c4819da3c5e4a351831db68f6a580eae3380 7015875f3192ad041833b5bdd9252f28fdee1946
-e3fa845faa6ddd967089faf87061a3e1f3db6740 16e39bec82a1b1b80cdf30eda6215230fd77dd0d
-c64ee0098f56f7a47e1bf4dc9aabd08f2ec86a51 7015875f3192ad041833b5bdd9252f28fdee1946
-b169d78f0125d7c84eeea2c01871dec3592e903f 7015875f3192ad041833b5bdd9252f28fdee1946
-63b65bde6a3aa740a2090a86375083313d773896 7015875f3192ad041833b5bdd9252f28fdee1946
-6268a254e4755439cbe7cf80e536725e41d423bf 7015875f3192ad041833b5bdd9252f28fdee1946
-5a0f52554105b8192e5fbfc21455ed03a4717eea ce8b08f70c3e9be997ae0efc7099626f6bfaa756
-0f1870ebd12ba3361a27b849561304e6abc6db01 91b76cacc3bed6c76ee911f903a9ebc8ba2296a2
-6bbfacb112f09d41f7f810c68caeb7295811137e ef30a7d9fe7a6a26740baffb1b2c0778f6ff2c0c
-ec2da06335624469c7e1eeaf279f3346ae61a6f6 9540a0c240bbc2bbbfdc3b13300d7596cd9caa8f
-1e25c876e60c8a4ee70acc41bfdab6c1300f602b d55f276edec19c4f4ca8b3883fa59c2bb1a43e0f
-1636ff3e4ee2844e56456345959d8bd58f090c4c 47f16dda5cc3673e6c2e46167a74f5dc36e6335a
-a0805b65ae2b7af02b0fe02f31151ca9ee2b31a4 07e5f69d5fffce29297186821f55ac0dde907700
-8b5daa7fb5d6a947af14bb22c1b79a8b90bacff9 86ddf535aebcda8adf7223a4144918ac7555a554
-7de6e601928801ad062186225e30e7b45bbb018e 86ddf535aebcda8adf7223a4144918ac7555a554
-7ab316839e5e3d0cc0318b8c96e168a18b67bf1c bce7d1fa4e7ac375456b7065ae8f873b0a009344
-22eeb82a0c66d5dc68ad7ef2059eb201dc7a4ada 61cd9fb7cee7fc626ffe7df56fa38d7a152e1480
-e3f24bc2ed45d7a04cb8578389191adfc684aaf9 633a71b9005d4df56d5b6e9810ae9db403d1933f
-d31847bc6bfdd4373dfca7063700413cd1627422 ab9809c2f90a262d1eb118e41cf919cb247f534f
-b9d55cbfdc95669d56f4cfe0a7c14701c6d9804b ab9809c2f90a262d1eb118e41cf919cb247f534f
-fd82b55c486e59073f99fee4aff2086972ca0aab ab9809c2f90a262d1eb118e41cf919cb247f534f
-1257cc7cf779b84dbd0f9d1fded2ac245f514cf9 ab9809c2f90a262d1eb118e41cf919cb247f534f
-d08bb7095bd531d451b7bf0c1079fa9328f82beb ab9809c2f90a262d1eb118e41cf919cb247f534f
-ca42592f941252d98eff61f0913c4afebddf088a ab9809c2f90a262d1eb118e41cf919cb247f534f
-43571e9fcf33ab2ac33570776bae15b076f50c2d ab9809c2f90a262d1eb118e41cf919cb247f534f
-1675491167913c173d4eae6a76802b472774109e ab9809c2f90a262d1eb118e41cf919cb247f534f
-812367355ca34100b85ed346cd97652f258da25e 0971c94d930cdfeb755f0eda31c1f34dd896e61f
-b13b131eb96259052e8e531c3247afa7c3817974 d6781e22543acd7e21b967209f3c6e7003d380e3
-a17bf6775c5ed10d81abea7b2a37a48c82baed3f ab9809c2f90a262d1eb118e41cf919cb247f534f
-89b856d80b193f55eb472fa0d05090217831f771 d6781e22543acd7e21b967209f3c6e7003d380e3
-417f22fdd9c634023bbce125b7dfe7c042aa4f00 6f7a0d771ca8d533f65c971b2e0291a13efed026
-239d78246897a3c4ce8d006a38fcf84eaa0519fc 6f7a0d771ca8d533f65c971b2e0291a13efed026
-5d6b8243f0b6d5180233f71990bc142621173322 d6781e22543acd7e21b967209f3c6e7003d380e3
-75cb0d302f2410d97fb8e279a4aca255272a8c0e 6f7a0d771ca8d533f65c971b2e0291a13efed026
-60c5210d3f14f7d61573c5b9235fedb0d3f30cdd 6f7a0d771ca8d533f65c971b2e0291a13efed026
-fc563f3769181a912564034fbdbfc7bc62433bcd 6f7a0d771ca8d533f65c971b2e0291a13efed026
-6802bf77237868b45ed8138e6eb26cd2d06d2028 6f7a0d771ca8d533f65c971b2e0291a13efed026
-3af820d2f4e962fb80d4e9f39288d0af83bc4d67 6f7a0d771ca8d533f65c971b2e0291a13efed026
-e262a1dfc0e9380de3e724ab92c2f8b5e9c20e8a d6781e22543acd7e21b967209f3c6e7003d380e3
-3a9e79298a1ae1cfc99e569a03c082ebcd388c9d 6f7a0d771ca8d533f65c971b2e0291a13efed026
-3fb8c4b7c4c480ae9db330c35f039fa9b4a30c91 6f7a0d771ca8d533f65c971b2e0291a13efed026
-c5b9590363cecb3f8be34a448e8202806d67bc9a 6f7a0d771ca8d533f65c971b2e0291a13efed026
-6304082ce2d4d6fbdaef0497fa9165e4c9ea5f92 6f7a0d771ca8d533f65c971b2e0291a13efed026
-29184267c4c86573ff84ea02e1b80d04b617d95e 6f7a0d771ca8d533f65c971b2e0291a13efed026
-5813ecae516c09db8eb970ee5ca65f2e6ff8e85f 6f7a0d771ca8d533f65c971b2e0291a13efed026
-af891a91dacbab401e93f9f1d96b046460596638 6f7a0d771ca8d533f65c971b2e0291a13efed026
-18fd4e03925990058662a05e0291bc9a10af77af 6f7a0d771ca8d533f65c971b2e0291a13efed026
-20645ebe55e77e4e43c0a269fe602af31a6c47e7 6f7a0d771ca8d533f65c971b2e0291a13efed026
-45769cb4967240801cbe65eb363eb4716a6f83fb 6f7a0d771ca8d533f65c971b2e0291a13efed026
-77dbc4e8021d92462cba78114cbe1cf34b658862 6f7a0d771ca8d533f65c971b2e0291a13efed026
-49f6e27ac5d3f9c4735f0d102f05d38e1d868a81 266a811b010ff7d9ac92e22b5034dad027822d69
-43e6bdbaad866a0c5104a62452d1d231c0189018 20a36bbdaa0dc2fbc905c2adc715f677c44ed0a7
-dc37b4590f4c1abcc65d095f2aa4d087cab7f2b7 1d5dc29f4d21557e2d0056a6388c027f8a2889d7
-7a01334165855faf11a45a108d25f8a0206f9a21 1d5dc29f4d21557e2d0056a6388c027f8a2889d7
-909fc2961c807761812aee74283229551b604761 3c8698985fc16e87ea2e513f1b043208a748b6a9
-4779483483f6f3ead41be3502a7d6478b7876b38 db950f80095f2a644d3717c625a2d6495e2a0718
-5db38429ca97ffbbe59d67b61a41c63d68e4024a e6a592f9cb3da79f38ba45e58d4a068f7d6c8654
-5d6da7f8d92f5a930c764a6977078c81611881dc 03ac59463169fc43883b95ca3ac81fdf304fb239
-54ac1d27f7cca6108efc368c84a2a52e18d7e426 45a8442983d0462d6c0077727598d7725521b665
-f2578f2ee4173065ded6b777dd5a4378039585ac 8ac526ac5f82dd7de6b4cebbb85af0d083be79bb
-ac6c94d7cbc97f5192f782fbc8c17911a1f96036 6401f0efe66eb881c5e25f8d5e07d3f62b49130a
-475c99e510193bb97f4eebdb2f4245d8172a308f b096eb5b145448a82a542c112008b05c690785b1
-c3f02edac78cc1b986e00471ac2c356c70c24cc3 93b0a7f5154044ad87a5e77ecb8b5c3c23a90ddb
-5b528304d129fb23ead3e5fae982517f87d77558 2f78ae996617ce8acd3afb6ccd44247511d98648
-d063b82a5be1bc2fc85b23f05f1b24ae43fafe7e 547eca769016ba139c0e4d2f723846d79b0cc8fd
-8f276e69c23027c8e741aa0f1746bf9a44fc8a13 7cb6f5853da381e09c17f4880104712fdb19f84a
-e722712e7cbf360c64768598bde651e8b399a186 3f2c49e5f30aa8e359cc2108549e56df82d2a5da
-4b31dbc69ca78d90e4c78f912959e80ede0e2ca6 e916513240e90648ea3dc0fcd3a42caf29f6bb6b
-4e291c7105929201797f25e5c4108f231c9af00a 7fa95490a4664c3dfb018cb8e61e80c310db2b97
-1874c1fe80b9cdc12ede89a35db536f3de5b1e89 3800b2bab638eb58b27be38f04bdeb7c0a511c7c
-b05d25b955bede759960510ed25f1a1d4ecb937f 99f1816919e3d71bea4e52403a4226fb0dad8a6a
-88f6a3691e77a816731278de51cefe9d5987e265 019b812ee2a94401012e535e5a5e868a91c9abf7
-f87f64ff4733dd8e7cd4f0c3d07c90ca8d595739 e820c8a485ccf1cc715db4a633e99d59822356cc
-a35e0c60b09cb7481b81e0731bcfed6bb40ea2c8 1afe42cde71230ea556683fcb14bd25ac7a4d1be
-fb31eeb34f91948ad9bab49a68694f60cdf917da e1907fe0507b59d9996a399ab842beb6414de567
-f04420ff33d4371ee676334d3151b7f85b0e184e 7f9e6857856432810c4b5c0bb93877df85b8d721
-1aebf62c303fdc53a6b283164e2978893cdfc3d4 7f9e6857856432810c4b5c0bb93877df85b8d721
-f62b17733f913cc6d52a83765beb601064b028fc 28e437413c22dcab2fc5f155e56cd30d5d5399ec
-bc8f4a1a6bf212d2653e77de95a86c2ccef9df31 34cfdee5b2abf66b897a4270a08925d4d0c32d84
-93b4e8ed6f284b547dcbd08a08b29f928b961b85 34cfdee5b2abf66b897a4270a08925d4d0c32d84
-73a2d94ea6e3489cd6124014d4caa7c8767b74b3 003dd9461bfa479049afcc34545ab3431b147c7c
-a3ada394ddaa34f3159772aadf3501c2de4ba20f 003dd9461bfa479049afcc34545ab3431b147c7c
-157fea559ddcf9c20c4c309475a0070a5424e975 34cfdee5b2abf66b897a4270a08925d4d0c32d84
-fe4cbef4254aa873e36ae5326cdb41b7386c4cc9 34cfdee5b2abf66b897a4270a08925d4d0c32d84
-cd4ff476f247612c184879b9e8a5e74bc68392e9 003dd9461bfa479049afcc34545ab3431b147c7c
-8db6fe06d7eb3bacdf0fe491ac7d8cd285960e6c 34cfdee5b2abf66b897a4270a08925d4d0c32d84
-98246a9ac646164c08910cafebddbec90553cea6 a3cba94bc51758007782fcd8a08394727f9dee21
-54195b78946dc3de2f3166ab4a9d0ed4964db789 a3cba94bc51758007782fcd8a08394727f9dee21
-e8c282061bfe1de9a91b12005891f8b6246653a1 28e437413c22dcab2fc5f155e56cd30d5d5399ec
-5ec1da2c398294c4129c34d8c5c9ff620112cf9b 5a9bb7b07382860fa5486bfeb19a3362fe4057c6
-101308754c7f938f9a84417092c030fd43de7934 f63c6d2614c6b53ccfd1281b7f49dcde96ae57fd
-3d6e9190adc0071636946fe1150280f8477882ba bd12bde765406fabea9736188c7656a97f78a11c
-eaeb3bebf1512811670871862bf26a7a0539b168 5189ddb93dd814f5b8472a1b36ea3218192bf35e
-5694d50a4287d20e8c0ffc27de1dbbeffae8d19a 51856b9c0da4b6b862351c44d08693bc97e1bd34
-0410121f8baba16bee1124b5f717760952b58a4a 1b7546288f3d3eb43e3bb54028d240918f979937
-a0d6abe967c2468a46022661df808c21cb38431a f7efbcb5e77c404bbaa47911c3c2c46ffd7f4e63
-0ff93b82b23f7c11a5af575a0aaa5408a763bef8 a4c17a71c9d78dc950d9a0625cb632e9fabd59f5
-b965a754a71b5ba547a73e94d0ae69fca3bb3a41 0e79623336b40075745f01ad5154dc239a57def7
-b4f0d9a6f6e17e5e8b30612b4018c208b1036f48 6be9ed30ea9ddcae272c6a1edbf8cdd294d4c470
-34f7494e032e0b6829a57b999ef42313cf259ee6 630c366c75656b44559a9c9ffe6cf6a0bf97edcd
-1fabc7a175fd69464368aef57ac7cfcf72b2c4e8 2843dabad73f96665ff9b2a614a95f1359414936
-a9020148f3a537a185bec522ec4023e83465a456 bf00a75bb50137d2ba027a673a00f25195e3b567
-5f4dba92721634ca7ed453e846c3563c782c28dc f16c761db7e7638c67afdcc8f90c8ae5a44c47f2
-293b006df56721e1a0da02dd5b37ccae7c334467 e1447292c9451d8e37fa7b1775d4a5c25a673ffe
-60b5ab7ecb5a04804228718987cb25b514d5a66e 604d681d266bf2a05b2330a4b0076b33710fa5d1
-3286d5c542c9b5977e1bd76ec42b11f96114c2a0 604d681d266bf2a05b2330a4b0076b33710fa5d1
-590e7784ee00081381c7498f6b0d71617e57111a 39b2975bcc06082d843e4def95ee89d9961e09ca
-966e4bdb3ae43547db48d94c71e9cfcb673d9860 fb3f391d59b41e1df99387f90dc52e4e3fd2c609
-25285f64a501d164e190195c5a5b83f41b1f8795 dc8f429349960ec84347160d14e4a48c8bf9e7fe
-f706eac26910ba76c34502d4b039e3ccb5fdd355 a2c1e4c165d37e4487c91579c4289079b2ce2bf0
-1b3d8da26e867c207b93ef14ef6fc5b2c0bf63fe 3bcee9e0bb842b84cb1e9ad235b0bcff62700983
-9615d4e40c37260cdd3568d9ab211b76ef41d9bd 01071fc7c7fbfbf12d4b6c536c771f8d76a6b840
-145d21892f92def17a84bcc45357556c97408692 5b7a3216b0132aa1efa7e9625e3467ffdb2c6057
-7af0b39127c434703b52677f02f48e1e51640251 18f05ba255af4f94c92b4cc9f9a5c19a45c826f0
-148722b61cedd158d3050db4766075b0f9eec41f 3c69c359c6ee0f4b7b219e8ddcbfbe733c469129
-e8143d25a7a2dc77d9805f00641de0fd20c90814 3c69c359c6ee0f4b7b219e8ddcbfbe733c469129
-44281a4966341e5b30155c824363b812eb2f7958 fd0f324857db4bcecb513c43d73c51a5a35bbcd8
-fb1d5cd12a73c9772931099a737398310bb11dee 81287a5a6332ff53c6c811989c9ca3810319e0eb
-f7ba51da7968440ff10fd82639592d3fd7f04e81 b0f0b58049083e5f060c1c56a25ffad62a7d2873
-a33f5f34e9f44ea7163141388553c427aeb5e50b f9f1fbe482704ebaf5c12893399a40669271bd76
-eddc8a8fe308a92af61645348928e113fe91ea33 61b7422d46c32648e736c10f9b85fc0e0ad7cc7e
-746afc2335439c33cff446b07c1b9ec70fb8c899 b40d3cc69aedd3fbe7a1fb64d7e2638f2b2c16eb
-48060950b618665f56a7844ce73985ab705c89ab 7c88530e13bed90a95101cdf25e6672964ec3751
-961477460e55ed92a14729e0d8fa27412f8ebe2c 112092b62f0dacbd52831ba6e6609fa69615018f
-0aabb6a0f38df6032f9fb5b95089b0b3818ef892 378cfe7fbfcf1657ebc8ead8cc3d636a21443c25
-56ad70800ffbbee8d881022d9fe36406ed993914 c095289bd8dfe1d936d572aaef12e9f8ca2bf81d
-e366152d999eef749c6923193bc1af11fe170741 a3c0f3bc3e2bd03fc4ac3d17ce5127026bec5512
-101d4649d18e7e00ee6e4a05b7ffa0b9b4f8b667 e28aad0840493abd12fcd53b32d9f5a0b40589ea
-5549e27e676923c65259627a9dd573971e42cb5f 12c78b0f770f2b79731f42c16361bd28aaa79ba4
-191eaa80dd1f282bb2e18a94c88b7c5ebf0a1dc0 fc79061898f8401fa5d3cb96c07fd09747cf4892
-02c5599116529f8372b61528f2994c45854aeec9 dddc62a9cfaa68706c9a1c0c78b724745f94a9da
-97e38e2d0e23ff8d4d30936e4aed54482278c019 661f5f4e7b212302c0530f252c7e41b2576d4570
-afbd3b61b452645fa653ae0e36eeffee21cfaf9f 5f870c6920d163070172f644410d6478d512c3f7
-a42dcff4d7dd77d543793e976c3374705dd5dd36 708973604265b8af49db80ba5cbfb4ca41320574
-a85a199bc2b4b9e782e710d146712639b4c31036 ffc5302c6821c22627697e95ec6505a370c846b4
-7c0705242bab7018fa0e51848faaaf428e19d632 5d9a28795cf6f8160e4e48ec465760a5735ae402
-874ae9de09e1442dc69602f604af28098520fd04 34ba7ef27b9c2bcb4f0a1230343e4f13228dd35c
-90f929398247408a8d9a68eef1f630aee2aade5b 1c32856f09a4f5c1cfa2d908104f34f2c3ceb887
-e7a501c7a008a56b05b07a8a42b74128886ab6f4 4743cd8e4089627f45d8d8078e69c551973032dd
-1d85182ab9cdcf1d4e6b1ee0c30bf62554d16677 da423f609831c754c1476ce7b9efa26114d744fd
-166c8d3f78dd1051972a2f15863a916b7cbf0063 0b227102a794898ddfee9ab6852f29c2eba3d309
-9870f66520f7262cc4fe08b1927a9906ffff1cdd c206e8e397f0775e9e86b2dce50a6474c209dda5
-5fcf328cc94f8bdda2e5e02b83c809aa3c835265 79665f9f3a1654534fb89919a98e56eb7317dc83
-8cb33cec645b376082a2b2611dd77b74cf10a81c c0296c97f15b94396a2dc11b9ed102364acdf952
-1bb01f03f6aeff08c824b885b034ce473c04fe6e bd382261ab25fdcc847385fe5cb62ae96ec92cb9
-2ee13dd7023d614b524464672be0c64d0ed9e299 609f6f8c0a3adddc2db28b752ac2cb986aea3b30
-e0aa435ecdb295abd48915839680826d0044dcc1 a816e381914d150f756c547f31b796a0f8b70d3e
-ed5d010170dbefa2f905d87e5d86b071e87ca6cf 7785d00f49edb822cb627e4f235c466da2edfc32
-8de1ae55970584cab441c52437325b9a7080325a b9370c4a47a627586d8ec9cb0dae716b44f476ae
-e6d1f607caebca593260ee8f2c314036abaa00a3 6d66e3b2adc22cc0627e3706a6d5e6065ee8c7b1
-4557ce6334d1a8b48d2dd483c033e323a5cc7a46 32c318e2dee9a9953458dd3685312055d616183a
-df7ccbba82f601d2ad6438fadbd2eb4da8eacce2 4c55861d908e53796fd0ff55c5320966f4214e33
-97606b831cfb2e64883633a2d1bbee6e6fb219f9 1e150f87d6eb9d210083a4afbd7fe8cf9b46604b
-1d451d6b79d4c16cf6453ab78988db710fbbe0b9 3e681555bb8c6338310d6a0ad2458489d181d3c5
-97b876f128cb6dd906db5f680ef02aeb999ef4f8 91706c19a5586c4154f16a216fc629a60fb32084
-4cfa181ac5c80aad3b8e555a7af020466c7a2051 6cd6e9f4805b848e7a0e38d9546003aa6fd81d4c
-4c83dcb9ff7e0aca084adb8c12cf4a53a7d6cdd3 74b8f15b836d61c821099c34dc010ae6af36afcd
-da937d36e615e0fd6703e5017ccbef373756a5c9 526471ba84fe2a577a930ef7c40a98594e69ac01
-54623b5c60211c22e0be661cea92ef48c6fd7bc7 25eb6e4cfe0ad2d240d134bd7af163e8f7d90fa6
-9a337482d29e112042a4eed7235c82841b6e2fe2 f3cff98e93f8a2893c4c5ae0c694ba805db62670
-32ae77dab5f9ba64ea33f818a144fe01ea3cfde8 cbb5a0da50b89cc71e03223c13bd925abed8f4e0
-b12aef1507c6a551ebe52a79abc32be52ac11603 8d8a3957375b3b25cbafb87caffb0677cbe93bb2
-e42174fe4b36cccad1bbd48aed5b5cad9e0d25ff 7894a0611d8d0ef551a019230223067b982108a6
-56a8c2410e3ac64a07bbf93ba72d3340c9d2962e 31bff5da310fbf19066ff68589336b6c41f2ec0f
-221f127bffb9b32b805c9efe59aef9c1b5516710 cccd0a0349f17031e0b053e84c079c10b3932ce9
-845946491626282fc74e82588e2d34e3094df1ad dd250d2ae7b58275bd7cd1e7da03cf8f5b530e64
-d37066bb57b16bbeacedc4841686d977c15932de 10b8f84a8ccfb0e0dc031ca9914e541d74b40877
-ec2a4f8ee2bf8d79038db86addb22197a6d86314 e1e9216a4d8c6324f4163bcaae944f6be147534b
-9dbf05615f7aaafc29062af408dd23aecaace1cb 1dffa67a1218581058f2c9ca63fa9c5eb7266609
-0f2bf16d77c9a86f23524c41af739d5d72699a47 c142e464e9417df60e85f4c19f0544170903c199
-5dd8cd158dc8c833e85059f8013d1d17654fb2b0 ebcf124a9fbc394f7a2b2a61167f34bbd705f2fc
-970148675690ac258b9b6696f2ce684fb39ae1c7 ef449e0a0e221b4f8a48925ed01aeb9449bc419d
-b4eff641668a547daf7cdf594d0a6521fe0d7a74 2872899a233c07981b298dcbcab932822ebe1a92
-d5a0095e6f0ed7693857e7aec28b368848b82f69 0aafc74840181cf8177062cd070034abd8d7fb4b
-bb90d72b06c47b7578b427cf665a7de3592c059b c884737fee90fcf773fb429a949a2187780168fd
-9170151861ca8e199005459ad378ecd60865cb61 c884737fee90fcf773fb429a949a2187780168fd
-6248d4c3b576310d0878b6d95a038daf8fa37758 a16b4d49cb6d9bbb237af04e70a54df06328bdc3
-e0150debf0dc633cde488ac219efedcba6b56113 22b28791eaf7c9dc96b7d078a48e3db2e0bfc2e4
-8b738ea159a924d1e716a9e84ab72f26a4aebce6 e5beb41b840895ef0d5f0a54e0bfe6087531b3be
-9b958251decc9980d0e1a262fc16db6361ad2b4d 1e864de69fe8d5b54c2037bdce2e073f0987ccf8
-a5ac019398008086318c4b2f2e180c9f416cddbd 1e864de69fe8d5b54c2037bdce2e073f0987ccf8
-9668cd85025ee206e17be12f453a20e00d8cf9e9 64e4bf8317e275e42754a1791566e8ad9dd3f13e
-2746b7d028928858ff1833cee2b5d9ee6fd83d0e 9bdbe9f6fbfe44e3aa40d29cd4f3465741990039
-ee47f2adfb4d4d11b7de32c255e57019fcd3af48 01a00229c6330cd13c4ab8652f1407cf45b2e554
-3f5c27e29630d6c2586e791f88ffb7aca7bd0e60 03bdb3e84ee03c69363e00f4d3d01be2cf79bdba
-bba3854a97c0ede11aafd4fe53872b110a55fe8b e74c3d964455cc747bae23dd77b462210f37c40e
-487d1faba939d67562d2ae1a06725e27b5c37557 96e8eb4a36154d840d814da1a183356cade43b8e
-660d09fc0241a97a9d7eaa844f06ea8476e2e8b7 96e8eb4a36154d840d814da1a183356cade43b8e
-a17f9fa14d57ec8858721063abd6f033ff9bf9ad 3babeb89fb5b9743c5f962664c8bf58e87403736
-2650a20401093e55f8872dc2f14a0cbc8b437707 7e8f998be4641682def7a3afc2ba30da4a11436d
-7ce9f3944caa15add305b5e8a170c2fdb53f5bf8 f5c6dbb9ba706d14c17e7386ef94ef7af9cfad4d
-0123881a68cdc50a0dfbf38c6ada1fb721f31c96 f5c6dbb9ba706d14c17e7386ef94ef7af9cfad4d
-e2c1cd9000a468fee05e60928246c7587ec803ab f5c6dbb9ba706d14c17e7386ef94ef7af9cfad4d
-6425caad4fdbf8e6642ee3a25f0f573172466435 8d9fe539b38b20086884c5633a72931cf2798e6c
-27417afe0b2d6688c1ffe943408298ba8e62b5b3 ff9ba196d7d2096acb99fe17b99a390bb8753ea7
-53e8e05bacac49f5d1583c31fd696736bf968f5b 4915ead1911de04060e0d9a09a355dcc0a63114e
-b4e3c7bbd48a0060d2c3fad98c9556270300a385 37c1f46ada9157424e3323feee1255d5e69b90dd
-0f5e646ee26c34575ab67e6e943b0bfff060c13f b763d7d93cafee4f327bba172c894ebf853ff700
-a046f0a22b161ad39fa2c521ebd22143b07db294 384c97446dfa446ffcb9903b43a7d2271c85a410
-dac8c18fabe53c2835af0f251305919cab812fee eccbcdaee3f5e3c0c20dbc996b49791a39857e2d
-616d893dd40dcf9556dda83663d530a995746444 eccbcdaee3f5e3c0c20dbc996b49791a39857e2d
-b9b9fe9be8e7db94ad29854f849d8bcbc4a53818 ae3a1e6b83f14c3d85e5000c7623173c1602378b
-313f00ce08f17d77c61e36f90ef7aba58a01cc37 ccda1d293e1a633234f9472dab05b417182198cb
-21267ce0c3111fb518fa1e7853945b9ddcc8ce95 066f1198bc6d888f0d06d24cb5f566647216e722
-21c6beec3033b70580aa9d80b974f16029b70380 af279404d15fb2b4164c573d956e5ccba96f5b4b
-d03ba3efcd3f504cd92c91373e525fd88edfb683 dfa213f280357f728eedfe088dc2dbd542158795
-00de05fe924eeeed21ec391bd48d4677d669145b 99516dd954896b4c2de5585888ddcc565e810ceb
-8d0cecfcad679403ce80447ba136607c2057bf48 fd7a4644e95b50c79830a3903981e320bbe2387e
-abb9c2b4c2ca45c4744038037ce41e4ba7c7a349 3fea2ca3d6d6e4d3332eae40e475d375828ea3f4
-7db8eb036733970833974ab223c6355402e07c8a d1c77f63f9f1b47287928b1f864615d460d6569b
-8ccda8d1ae4d1820c488afe4408ad582747f2baa 8ac4ab7dd45cef961d9b6ea2bdb5026df39fac97
-8ff8cd8abe776bc770e94ff7870048d84a9dd95f 6c9a3a0451c555d2f42eaa21d618b5fd3d021bbb
-2be23a9c0a51dbfbb12c5c73ab875fe6426cee8e aadd57cc03eb71021ac71a9991875e000277c22e
-209fd48e5ef08dd03e4372fb3c831d63f25c81db 7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f
-68d0759dd49bdb41f0cefb0b990d4b499a089b25 57dc1ce2e672e0e7e9d41056b1f7c4a97c56610f
-6f47e443e6502e607f1294ce22eedf0673e91988 d1e520a7488bd4f5ffac563ed0ee2bf165a61107
-27309bd8e20c6d76bd604c942c38304f7ee67aa6 6f08b8db5d3ffe69a67bef3b149171ce6f5f105f
-e17ebfe606e7faa2c339c5919333f95499915921 e7dc4e426d56fa06bf11904ced6ef9a884cd8c1f
-71f92cc87c6d902c6445722aff871424fa2615e8 578965d05d822efdae98beb5acf9b778e4b87c45
-31ea32ca085fe87aa9741e995df4d56ac18e37d5 344a9061df3b33585ea6c83e6add724de6708ac0
-0e569bf4f57f3c83de579367578c24366fa92040 c6fdab2a0c7552e52b5f7a98d216fe9c1360c128
-0af0d79ac791b2fc5cc93256b19bf878a46f8856 40b5149594877ca48bab2fc5ac84ec2f523ffcf7
-de4de7b4fd09c4ed9222090a809aa647516183ec aef64e32c7f6e2440639aae4a8d1e9bbe090429f
-aa4484bae28c8addc7652dcb85a1b04e0a0abc59 5f96008921c7f6525da05c6862bdbd5524bdddc2
-adcc5de2f6f06db4b23b5e170885b45b3c56b32c f687e850dafafe640458d8ddbcfb6d8292268e04
-6b048da1c7095a129601eb685f7abc0365309206 6658897d95940e1dbe5dc12911570c76549d44a5
-c3bf5017cc3609fc39db0e349799aa115d21c888 b6454f6ea0fab700f635f6f71682c3778affd068
-c87d5dfa2a3e9a5f46bdba6d3190c6a0ef7459f6 6235065547711691b05090b89e699427c1143f6e
-96ab4226bb8d0addbf6e2b1fe8ced97df7c8d195 110b178268767dd8e799d343f90506a6457d0b87
-017662ce301b5f4db7d5f7b04f80c06ea68e1df9 60018757002672e4738a31560f61887846ac4ac0
-ed973a2516e18eec9a05d10eab2cd6fc7ab709d0 7cbebe3a4e5dce604c3fcacc180473987aa8fda8
-2cafbf57742f224d7a2cc4e7187c38c645acf056 0c5a0c02aad7bc41b611cdc3b94c4ddcbaa7f9b2
-856549df7dfe2f820daa2c65bdd882023db451c5 16d740813cbfbbb4ce6fd806c9f3a6760e71bb8e
-85dc5bd3125648593e5ad9634b85b1507364dd8c 2a05a751620610755fd35dfb394e47557b2e5b6a
-94b224956c97c4a3c40108dc717853ded03c907b 2a05a751620610755fd35dfb394e47557b2e5b6a
-bd3e7c507c65b3d15bd53f761e94b9a620b77557 4b973d6002a059853055ad493915f4e8662a5864
-2e9e33886f348cb9f2c682c2dbfdf7a48371f12c fa097bc8435c7726bf13e2233259d55f2f84cb06
-c4d29d7a8a16c5ffc349c443205c165a239579fc 6b648a1031e6b0d4658253498a5701f1d73d6f67
-b2d6a681fce550c0c3e7e4193797a8eb54f33623 6b648a1031e6b0d4658253498a5701f1d73d6f67
-2af5f8318b9768e129a143cd19e7a055886ed53a 89f5c278bbc91ae0ee0a58b7f92e40c15eb9561f
-01e271a99e0d975583d06f6c3af6b487e388ab70 c3a28fa9466d3e342d1f77215420345abab1f84f
-dde7f124e9086e47c8a458cf66f339ff23dc2c23 c3aec9af98b36bb748360018dab7823618883a0a
-68af7fe284d402d5c8b2bd988a925b6002c0ac39 0633d09dddc2d75902385471d390684057a8ee51
-bd2113cbe530c2e3520303469d62781329985182 be0a17dd3c99d1df7b52775d7ccf815f2b6ad3c0
-933c710bf69b14cd932fd38385e4cbbd5aa1682f f0498adb7e0c8893137892f76d638bd8b2ca9963
-0dcbeeefea256602ae3e0c9ec2b4fc162688c84b c2fdb6939da389035187e28c14d3d6c53460e8b1
-d00c5b554d430dd0ca80b0861600bbc4a0875934 dd4078308d6aa13e75ad60be0e5403380b1706bc
-8ff139f5e3302197fec659a53f0bc1428b5b5dfa 68a030811396b76863fe3ad28ebbf85eafd2b0d3
-64c9a95950be3b0778d5b17290e161dbaaf984db 10cec2b5eb7434345550cf6b0ba8f16e3be23076
-27b37a006a52f9b4959e6e06defd630970c41196 10cec2b5eb7434345550cf6b0ba8f16e3be23076
-a50a033ac7646f1a5beb850c53a8cb65e716c05a 10cec2b5eb7434345550cf6b0ba8f16e3be23076
-82a472fcb95d2920031a9a4ee86a0da72a2adcca a3666b1cb6214c5a0c37a8d006722f0cb6708b04
-20a73af1fad6fd8ab16d2691b2b468d629f19975 e8ba6993e65b1ad87b760be899b525537f083a47
-8dde8569d1a4443d3c25cba00d9645fe8c05b814 c5111f80181b2732dd18f5c72d15ed07de455f4b
-6608c5228a84aae4357c7da2f7aee82e570f53e0 d9132ab4e839f6bc01f630fe8a6e147455a057bd
-86383a1749fc011bf10abe9cb20f96ac2f717386 0411d5af315c109091073d605a0db8c8a25d94de
-3f6a7ccaef18ff923cd2a7401613c056d884c27b 6132a9a437cb2ca37311ea139d6ac30ecc524234
-ba50752bb5981ca0a277fd424ce296bdc771f246 7f2d7fb23eddb2fe040ce7913603f3e188368fda
-8f1ca4443f7f1a83473397da0a56564ec681964a 51e372b0b8f547d0a1726f12ea4dc4cdff84f7ed
-19ab7c68321a1c5ebf72d097eed60b9426ddf6bf 9ab66f7e8470c4560d8369527500c2abe48cd84e
-78e74390984d0dabf5d21fdd2e7bfc3a521ef72b 6499ab437d68979a9632a885614aabfbec67a008
-50baf0396b2d1044125545b1975010feea0e3281 a46856c94a236d82721e7b064594f56690f8b601
-8a6ec30b05b18ea704fbd249f7eb451497de6c54 6b5dcfbde67846e8a2f81ea81386e671b3295a56
-0d32910a08cc3092d9ed6f20e8bae7c6d36ec9fe f18066b1393669ea427cfb1d2bd60a911a61c4fd
-7995ed67eddfe239fee432b9e1cc8eb38705e50e 2786c7c300c32615e55925bd85482e0b039b078d
-75baeb4aac7b90b67320289b15a317af85c159b3 cb610905f36a459095c20d42ae6feae59b0adbb8
-aba61510b18960f5607a2d5d364fe0e575308eff f43ee85fb5c713cdec649f0317fb5855ad2c02d1
-23653c9e90d9d753e70c1800134afa0861ab7149 6eb727b85176ce8d0dcb8b7938bf998967bd115f
-1ee3ba7d3feddf63b2f07395e973ec45b9082f0c 6ee77ead215a771ceca3e5cf750e9c340c3fda43
-85decbb550e03eab2901828fb8a2a20478de4fa0 720a0fdee39373517722c7b3c71268da9c0a1438
-4a6dbc674067bdeafff5b75afcc76cac4f1848e8 0a2cd40bf12a6eec26f21da7e0236a3c2ba85948
-b06eb0cb0c8aac6cec9f7248db7e5f2e5a0e5abe c866ce12b2becf027c737147976daf867402148c
-5f3f795f44f885d1435958cf0ab2505b005306a1 c8d4490f6299b031e4db3a5316116e7efb8d288b
-8d5e712d2e31a5f0fec990e68d3ac00e430185e4 fff060e9c6d865bc031f6024d70c568af714c554
-3dbc855a8c40adc7960dbffd4bd3ca9e6481ba94 d174c4cad7eb81e741211878da20b21d89222839
-77590f167e94485a9fe66616979ab549572dd048 c8d4490f6299b031e4db3a5316116e7efb8d288b
-9fbabb2a534cd2d4c7a0e463bf9ad3ab3f932cf0 d174c4cad7eb81e741211878da20b21d89222839
-f0bf536330326d0ef017ca006a94189ac5384364 8e95850f2c086dda8fb2f6009e5024c0c44e9596
-ed01ba4306bd0cacb9bdec249e4ce7b36652767c 8e95850f2c086dda8fb2f6009e5024c0c44e9596
-1c9bef300bf80a2987627473b177e3ba058c13ca 32b92fe4649ce367dad6a39557312af82b41933b
-538b79d24631e1369f5d0f9f004a4da6ebcb5852 ee06b48ce348dc76b5a68763d864a620af86500f
-46576651428513d34418a998f5c1e95de57d6f9c ee06b48ce348dc76b5a68763d864a620af86500f
-4c1830db71f0d69b5e4c050b4ef32df121034f6b 7ea65e72e0daaf5e9ba5987ed8a321a2460c1a58
-c476cc017952f90e7868a522deb6bf9dd8e8b2df 7ea65e72e0daaf5e9ba5987ed8a321a2460c1a58
-d352cf98e096e99ecbf4e7e0063097554eda2a21 dfb0fa7977b13b0e7aebad69c492ecf598bfdaf7
-84f2cb563599aa80dc6eb95a2564c60c36a7dd50 dfb0fa7977b13b0e7aebad69c492ecf598bfdaf7
-5e5862cd2d42e83b68f36a4d78b916a700b6cb33 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-00ad47ba5814b29392e4210348ce3f6767822391 125a6e4a8e1a6dc2f959efeef10f1de703d43acb
-dab1b0cf1f08c09a13163a406d27b0ebb4bffe16 457f1e9521c76a706cbf389fdab3f00c39326d8c
-1adff54c17d89493934a4e7ac0dac63970d426ac 457f1e9521c76a706cbf389fdab3f00c39326d8c
-8baff2f42d1d052d646c89eea96e32227bca4a5b 7cd6188d11a4f94884d2bab37a65546ed0be1122
-8e31237aaa0a99807878735698b30ecccacc0710 47b763535c4a0f781cdf2ac9aa79b8e904c21cef
-b19e3249b787081a6d79b27e0ee79bf3b555e81b ac4917857212573dfbb5090287ed552d06002445
-dc9fc43fe14c79e8ec6d23cc88f868487173a967 55fbb8acc244ad647943552b32b6a00f93d01abd
-098071a0a27b6c099a15a2e4ca5873af89168a9f b3e57afaefd3be4fa252202da220cafee806c6ac
-746820c8e07233593bd37934de8ec47a25d48dcc 50a0208dd24e5c49f8fb3b60d2882fa2f385522c
-929980ade4ad20e3d310ede96573ab16a87e86db 36565a4c5e53f66ba470d14a0bfb9de18332363e
-0a17394dbf78eb464a1fe6e358f98de053b41a62 4668e0ce71698770dc7451859dde75cf980d69db
-a2e087a67fd4ecb61e61c7348194b03f24943d10 4668e0ce71698770dc7451859dde75cf980d69db
-f27059e57129d478dec83174a8e5dffb6e9efce4 4668e0ce71698770dc7451859dde75cf980d69db
-c5fe3d0a9eb9c8991672d69719ff052e7026ee39 82347832edc401d6b8f301728e278499d673f483
-c6581439b98eda920b065a68939d63598c9f78ad 55a130a6927363d2de9c01af54c0d26dfcb6ec54
-7b8382b2947a77bf1de5f9cf6ce7baafaf3675cb 555cde020151350533c8cd3561a00aabe8874154
-2cc286156db769711a457f2a68e4e2d1840d7745 a30094149089f1c96f24082a75390ef6f78c7459
-69ee60c1e6003631208404cf4aa9e22624dea69d 6e0e66ed24725156c0043561d4cf18462b16378f
-dd9287bf1e74531d1ece17c217a184c42c05f744 a874aecac8e979623956fd52a5cc7f68d516b22d
-4ce387f327fd88b49ec5f116fc29878e43fa9759 ce2a6a09f05b252a835fb96cd8dea54ed89129c7
-1af5cb0cf3db732aa10de608b49df0edd4d66b52 fa24113f3b282dde79493dace28cb322b2afdaa2
-cc11004874733535611dbb8f8cc024ca5ff65f29 3c0c5b94b1d37dbf5f6db6b1b854d4cb38eddf2c
-8c3d942bee43407951f67cf9e1242c4e8ddad398 1ed799f9011012c93acf278015989134fc5b0593
-f1dd6ec76058119560df84eff7bb2e8e406ac5e2 f0423b8bbeb9ce4843b515b1a475a2b8fe7a67c8
-52f76089da55d5aff4b38f7dc7c1d035d228cf62 60c4a5da3f9f611abbdc402f0aa222faa48f46a6
-37b7e714f9b8335de10596d0ad18768a9c4fd944 efb601a28b207dde16cf91bd3da97fd448f1f74e
-dee04f280a0e46d00f65c6d185018dd790cbed3c 2fcc9120e28e93b7b0d09d043b14cc45629350e5
-be74db81df40416b7224c7c13c2f817bf770e4da 1803af5c5f9d67190350e4093ffee93d7d48362e
-cf02fb319e7ea2326572cf1a4eb44dfa443ddf09 1803af5c5f9d67190350e4093ffee93d7d48362e
-ce8975967b4fbdc44d12863cb6542b290225abb8 1803af5c5f9d67190350e4093ffee93d7d48362e
-b1a9b9c69c5d3f42724b1d4fcb45db0c815059c8 6826fca34b5bf7b601515cf13b7dd9d66cf4617b
-4d63e00cd01e428bd969244920dd3a3586dbd418 cfdbd03b204a69238b064f33c235e892efc35e2c
-7f72e770b656758e3c9b0ba7cc2e80bcd67e7aa8 cfdbd03b204a69238b064f33c235e892efc35e2c
-72e2d9ef145d65d03384bee4144456a0cf870033 cfdbd03b204a69238b064f33c235e892efc35e2c
-d606418f0f844349312e420d6ffb0b850f798e0a cfdbd03b204a69238b064f33c235e892efc35e2c
-4898cb85cd288565aa11573c4511c95573f7c368 cfdbd03b204a69238b064f33c235e892efc35e2c
-5d6d726150433ebf3c4fde8d27c86a64f38c92cd cfdbd03b204a69238b064f33c235e892efc35e2c
-0c6372a8ab5a468f175d44bf210a665c9561c7fd 73c90b87d9797e89faefe5de7e7e3b3e53a90e5a
-1a3de25f37d1509e967b5893336cc984231ed845 604516ad172ce00a701e3d3154aee94d8e201ad6
-a09e255d057cc6dbbf80e08593bad1260010bd96 604516ad172ce00a701e3d3154aee94d8e201ad6
-13ce1efd9ad58ebc33087ea473a8d059a44a51ba 34fcc780c4f555386b8f4671da997f8ff9864270
-ac240bcebb2189fad9ceb1c0acdeae4d931e2b9a 93ca35552ced7264d0f5a8b7a23cec8869aa38ac
-c39a817e97b02b4646aa96311f6a82c39394d578 9bbab2fea9f112379645e3fcc7ba0857ec0fd8e2
-c16e83a1deb55b408255a1086e45845c507b749f 726432ebf9764b6d5e04ca410e4de45eb25366d7
-296120c7cf02f987da78ca0811e1f7cbf219b321 134ddf29ad7e074e7ad6ba9af3d61e516492ea5a
-d11b65b3f8a07abb153d1e86ccef679cccf30159 60e21c626f4b347f3e39487178707b43572ae96e
-1c7510c1630040b514c3e4a6e3f0bb60797a3c60 d11b7811e1e39ad37d33b899c84c3f226c9918e9
-48fbc9a03856311c3d4a833f896f7eb0fc70160e 5306f06ab25972ce61e7bbe38e2eab5f0bd423e8
-6007fbdfda1166c21ea926fefeb6b194f79a79a4 56be3aba5033699b550590561c787fac3c9b07a2
-22c5aa1be7cffe4cd665273a34dd8b87a07567a7 ee2897b31f63c8fab16b0f102319338ac8467844
-938ec1fdcaebcc89a94506d59642b734214f8ab5 ff42475deec1d50c53b5a2c6885dfbe0f51ec6ea
-91c1bfe401627c7be64dad9772ae8460e7eed160 b70e6cda60bbcd80c84310344693caee21535af6
-e11c98e891b6d28b31cfe0636df0b99173c5c004 68cb1e73c25a0a8fae3b458e99e5c51ce5ddf081
-f7da115698af6a801049133977c8b62e6c606b11 cec6ebd4a89148335ee836cee8f5045776eb9ddd
-81a8e159686ecdaa2b1dbe422847e5604d2b860c 48c38979cddd6782966aa6f7a9c3a1fe2dd27bec
-8cefa5c2a0a107953c960e1265250c32c7470075 e4d76c569ac1527104e9d9775b94cbb55a6d57dc
-0a935b85e020beb6dc7f0de2c201a60714e965c0 2f739f2dd33af064c42476e8579d232183745cf8
-95f53356b135d9698ffe416cf2b52f1138e16d44 69e6477e6bb83ff7d3efb0c87c0c4833af1bf0c3
-fc08b020960c54b9dfedcf863ae348147c02713b 69e6477e6bb83ff7d3efb0c87c0c4833af1bf0c3
-0b4b8dce782608810600a928cc8be02b38c6ffb5 5313e69b9ae40bf9e83ee62da803e38037bd676a
-095f32ddf02aff00ad7070384a6c2cc8a4d9aadd d9b26fb157c39b063dcfa4efebdf9b862e297a7c
-dd86dca5a99bebd1456dcb762b94a258233464a2 d9b26fb157c39b063dcfa4efebdf9b862e297a7c
-0dd86e95e6947e0df15d753b191565cd1b515f29 5b757cc182d5cde52a3a89f2cceae03ea3edaa92
-a5e73365fc2caa29d05bf655481bf8350a14b38e 5b757cc182d5cde52a3a89f2cceae03ea3edaa92
-a17dcacfadeee879d9f7788b751458bc82606882 5b757cc182d5cde52a3a89f2cceae03ea3edaa92
-ca38dbe4243fa78fd793da383335583d8b192c29 5b757cc182d5cde52a3a89f2cceae03ea3edaa92
-ef890c619e3d86b6a91575815ab006f349246ed6 f4a1a8a415ce75fd5d3b67c7c4b72335b59fecb1
-1233baedfed65b02495c84fa621afa297ed58065 f4a1a8a415ce75fd5d3b67c7c4b72335b59fecb1
-20ab574cd9c6dc55d196fad2dc14b1bc87f80a94 f4a1a8a415ce75fd5d3b67c7c4b72335b59fecb1
-fcfe6142b7fe29baf0bd2859c2db401b8f3d25da f4a1a8a415ce75fd5d3b67c7c4b72335b59fecb1
-dc87d128ea9f2caeb15f4b18146ee18a7c28954c cfdbd03b204a69238b064f33c235e892efc35e2c
-3ba0cad51c91cefd435ce62b7d1c8eed77d7062c cfdbd03b204a69238b064f33c235e892efc35e2c
-6791545669622b97e4b1d00d91375c9de0b7c4c3 cfdbd03b204a69238b064f33c235e892efc35e2c
-9c69dc2b373013a880bb7ce17bb610887151ee77 cfdbd03b204a69238b064f33c235e892efc35e2c
-cdc21c5e1a2efea9021cd1555b0af6308bd3a650 5b757cc182d5cde52a3a89f2cceae03ea3edaa92
-766f46c7e966a5ca087f1c1944d9ef15e1708048 5795681680fbeeb3aaad5d1bb83123cf6495757c
-ffd9bcd93bee4a96991a013e1b0a556dd9b95db5 5795681680fbeeb3aaad5d1bb83123cf6495757c
-6f49f71a0e7809e59b31b6dd21f77232fb659dff 5795681680fbeeb3aaad5d1bb83123cf6495757c
-2e45dcf1e651af72efd8ccccec94273c87c5f755 5795681680fbeeb3aaad5d1bb83123cf6495757c
-d07884feb5653abd170bd0952dd4b257d45eb2d3 5795681680fbeeb3aaad5d1bb83123cf6495757c
-921b7f9863110def69b3dd785023a6b01a812a42 d5de2d9cff51c31b48d67d4196091c4f9370ec06
-5cb57f9cdaf24e36c6fb42844d0608a00cbf443f 43a1366ee0984664969d5b8ea040e1dbb92fd00d
-b5dbfae806013a1b44ddbe29e35d55425596a115 47476177f735c8a00b56f49366972ce9f3048a02
-d163139c4e1dadf0c60d51de18afaf97ba43c781 47476177f735c8a00b56f49366972ce9f3048a02
-3c91277484253ec674f71a03b63f25173270171a 0b30d4cedd461be90c362cacf63dce84f50f7537
-1aabe28c7e4f28c8a0d07f114e70e8a94b39114e e355e4e13106932c0b678c5b7aa5e1ecfd65c453
-f0e3370aae1b0d0c618fcf2a7e00f9cbee35e320 e355e4e13106932c0b678c5b7aa5e1ecfd65c453
-c5942f7967f7958a5e28b89a2e1631a44d399240 e355e4e13106932c0b678c5b7aa5e1ecfd65c453
-88e277f97e74d2a17d1dfcfb90aa8b92efa8f6ce e355e4e13106932c0b678c5b7aa5e1ecfd65c453
-154f64a6676dfc044db6611016b854091d3b06ac a4feb524e6257acd8341a81f4ba4e98e5a45f252
-085d8335873bf9e591c7356fd3c2a7c5e9abd863 a4feb524e6257acd8341a81f4ba4e98e5a45f252
-44d85d1b41ae830b8d7ee23470480d24a96dfe08 f4181e67425aef09d72aeadda7d1041bf05a2356
-38aa76c406a390882a0de28fede9c99882beffa8 0166f4fccf883b47585fa387e180e36c540b6095
-1c17506eb5cff09e0587638e35a8ecc9c8b0b024 010a1bf89f8baedb0e28582a6d1c90cb8b5e6fcd
-5e61d39e89b2ba536440b0b488e2de5f226fdb88 010a1bf89f8baedb0e28582a6d1c90cb8b5e6fcd
-84b9c284ddcbc99319ce49f15307ce758c262638 06c931abf92435a88597ee54d4137755cc83cab8
-1b9df2a75561e49cc1478215b13e8d0827098060 ffdd3012847638ce246ddd67c3a6eae775f4dae4
-62196c927d67d2257b2e81f4084df233a8fb299e 49d7aee0d1c9e34e8335f2da6d522fd047f9b3a6
-74a2b8ebf9edbd48831abc6a76c40484e7a7386b 6162c54179216da4078bce6f6796d941e950c065
-4a6ba0c4c248f440bcb26ed22f6e78ca0d7b69d5 97acb137889dd33b074e06c087ea8c1dadd21089
-058298361e2d198080e442dc84e2946423356502 010a1bf89f8baedb0e28582a6d1c90cb8b5e6fcd
-297f6a998f369fcb275737cb400ea28c8b63a94d 97acb137889dd33b074e06c087ea8c1dadd21089
-8facefa84fa22ad20cc88f489b87a75649b60781 886b8ec3faad62d1d74d7170694d8bf76d786577
-d1091598acd02231360179b69372d27810fc425a 5f0e6c8a2edff7b3a31c6a99016cc9e745776539
-1568a6e9e4db9c97c5a6a6cf7ff8350aaa19bfae f7cba958e16bd4902349c9697ef7d07f27f7f29e
-e21f60c3df7310b526a9eff5a84d0067f4ffb12a f7cba958e16bd4902349c9697ef7d07f27f7f29e
-b90322d33ff72511b940337b37068065cfc47f22 f7cba958e16bd4902349c9697ef7d07f27f7f29e
-2c040b082058d5509ee9d02fe57cd051c5be6319 dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-f75f8a5da0dfe7b7f853154d0fc0de80d0143c7b dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-0381d4da49754d71b788581e7c0bb9572c5d0d61 dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-16ba70c8126f0309eec17c148d110634341b1ec3 dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-03f50155aa6d1ac2d561a42906fefd0d46ae18aa dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-e213572d81e781b5a9f2d55d4f4ef5f5979af86e dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-ad3675c61cf798034a50514e28cbaa92430e573d dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-1eaf421ed2489d570ce0f3fc85c2823a44d361e0 dd98a1e71a87836b1a9d3a8e7db27a6b8db6852b
-d904225f66c49137a1eb53e6bac9f29dfb854200 f1af0c12312349902656afedda044a6b01aeb813
-9068707cde33b580bc199475c7f9c24a99abd803 f1af0c12312349902656afedda044a6b01aeb813
-249548f1b80167a73ea7fc4efa93613ad3e86752 f1af0c12312349902656afedda044a6b01aeb813
-5f46f2eb87b4a92ab4ed2eb854f4b24826f63329 f1af0c12312349902656afedda044a6b01aeb813
-c4ab70297386cbf79b3d6b32c3fb13a9dfedb740 f7a5c7033cfc39372a348bc0a8429cddb6137da0
-b05bd665a3ed4e34721b73c5671e7806b591995e f7a5c7033cfc39372a348bc0a8429cddb6137da0
-7f29c85096443b225469331c1dbf48beedfb52d2 f7a5c7033cfc39372a348bc0a8429cddb6137da0
-a562fc4423d8ab3eab634b1f5bcd09fcd1e13d84 0d4e7e01ac5c490e2d4b8958a68440ca13cfc348
-42b6a740de6b4ffdcb01b6ef39989261be76ebca 39a60cb719426b19078c0b45844a2c619d6f9408
-9c29023e1b123e911ec178362e24ff33f9e52b1e f189e927d09c4744a3f515dd9e63bf46ce6b8ed8
-76081fda5c417fe0c999bd9f5ce9a3d4ba4e9b8c c8f4528bdb931820b92b6c3d7e501bff91431a62
-46bd8aaf1573da0ccded37f7aa0154857fd4cbbe 495c8601d849d8d6a8d143ab68110602e6613bac
-c1515736cdabec22ad2349f3abbac060cd0cef3d 62425732abc4169dd89330f87bf42eff2f1d85b2
-90e39505be13aa85b5679d33c0e0a98d9a71cf17 bc385f1c901be32d4fa619955d08b97f0a97b2cd
-b86c93e2a6b8ba890aa74f56475491154e0e6ca9 909d2aab201e03dd622ac9d0ac8d06bd15fbb665
-88df9b9aa16c40a87b4d8b314ff1e9dbf641219d de2983b375819db3ad37fc56f693a3ac4cdc9459
-9ab2952514753d545ae6afac69e369ec88664815 71456ab34e593e85bd467bd9a252c6ad5dac2d7e
-051acf901a6adb5501b93600ea1c1f1bbfb43d06 71456ab34e593e85bd467bd9a252c6ad5dac2d7e
-c1ea688d1557bea6ba68cb9f09f49d946516424d b166c8ac6f4288e0783882fc8a55c6b8c6877c0c
-dfcfdc392254be319be9d005cc4d2f553dbb10a6 dcb2d7d8a33fa5874d8ce097988248352f0e83ef
-f9ce02710931f5669594438747ce085eb96fcfc7 9070561538a751547abedc38f298b20b9c2a5640
-581f3207510b839bd343535c11c2b21e5b39ad00 fd5c2ad84f0fb90c66aebe455b6c29e305c6362c
-368bd451a48f981269cc28770ae57897f98a5081 06d2d2587f5c178bb8772041a8bb3eca8d891eee
-11f3af9c64a16e6cd008398df4df83f62ad60a42 06d2d2587f5c178bb8772041a8bb3eca8d891eee
-41219fcab5f25dea67875023edc8fa50ae893061 e0e37f3ab452f1d5ed51bd8b757475db6eda1d0a
-b9a7e623eee3124b55e53de0a3e4dc14c649bc4f 98844b0beccd123f214f5cb5216cd5f8bafae5d4
-e60b91e3461e5eef49ecdb30aac94b1d15e3cd1a dcdd22561e4dbd5aed1b29fc50030b85980c0bb1
-339ee77b29361dd182d6d8b49056acc92697339a 2b1da0d924193a33f99c2bc433f8e5701edae644
-93eba32c8a0ce4a6828801118251e762fc9de6ee e4a34d153d662807af7fa8802e8c56f6ba4dd6f1
-02a9e859f716d1c00e6cd9ee1f92ed41a9b46ff2 e4a34d153d662807af7fa8802e8c56f6ba4dd6f1
-1db74115b989ce83d54ec25db1c083f5dba596c6 1a6a676aa38be8cc3b688e25e08ae2258d770e25
-aabe83f78d7279c3531bb198a39ef86e2c32c92e 1b3055b1b26863f3137c910b89f9823233d27f94
-e58e68c3ec3360e2d12a424f4528150a3b63e485 4c11a22e050f9a62b1732636077ebbb8190fc0e6
-a33b06c550d1d7211d172ef402d23754a63c69c4 3f906bdaf4ef694e192f136b041048c20dde663f
-267e9b610a6f4de1c50debf87235b6057bd3773b 913559fde00af58b03e60ef1b52ceaf9a57fb74a
-1e3722cdd414bb86322d99b33511b74841ed9897 1a6a676aa38be8cc3b688e25e08ae2258d770e25
-9a92b8316bcf198391d98044e5d489c826cd1056 913559fde00af58b03e60ef1b52ceaf9a57fb74a
-a3a05974a42fe6d2154b04b6882df99f811c1d70 913559fde00af58b03e60ef1b52ceaf9a57fb74a
-85fef253b452e4481637f8b2142750054343cfcc 913559fde00af58b03e60ef1b52ceaf9a57fb74a
-45c23662d8f38bb2df56e4b33b9cfa3f7c7fc63e 913559fde00af58b03e60ef1b52ceaf9a57fb74a
-2a7341c1a4f8515fe8d55eafd8272c399cb9d31d 59c327f5102f262a8b10378c2d32a56e075ebc19
-d89f53424ba3575690555efe6f368861175c91db 1e40c0642650bfa5b41e5c937efe6ce26a9af6d4
-99007ce5bfab97c42ef430684c7f32821efa7011 a9653bcd36dd26b85a13fdc935feee3e07c6695f
-433d798a16d6a1b23f2d205ee14a50beaf086a7c 53d9c78f84c82026519794de042e94924478dab4
-9bfe1dc87b6a9559cc10dcba8474a33a937a5e16 59c327f5102f262a8b10378c2d32a56e075ebc19
-25faf91283fc0cf01ff47ab35741a5ffce3df648 53d9c78f84c82026519794de042e94924478dab4
-50f26102d0ca4a94d56b723f395e53c0786d556e 53d9c78f84c82026519794de042e94924478dab4
-9791813b1ae6e27fa3d59037aee0ec4b79dd77e5 53d9c78f84c82026519794de042e94924478dab4
-eda5e20ec2cf01924a73cf01de5c04750d3bf048 53d9c78f84c82026519794de042e94924478dab4
-a1fb1afa229a17b7f343081229804781f33d53e5 53d9c78f84c82026519794de042e94924478dab4
-f24c60214b46a227e66910836fc5c48777361862 1c63aeb0a51d6fc2dac864efe8c7b401d4690654
-76a24552fe3f43d3fe81fc59be2f2968153272c0 1c63aeb0a51d6fc2dac864efe8c7b401d4690654
-84aee1456db3b02458259d9514bc3d607a0c8630 aa706af56988d328d2f4c2f01c3dd428db1c6efc
-a0259c31d3fda8f40469e1fbfbad7e6e3adf9f4d aa706af56988d328d2f4c2f01c3dd428db1c6efc
-90628b8bb64fd674a1a917397c0b445ee9fa08e5 aa706af56988d328d2f4c2f01c3dd428db1c6efc
-2f319855c76d273248d4c3ec316a86bc414a41c5 e12b696d13ff929a6650a2d0da57b80e1d20953a
-65ff85f9cb283b9e4947b15688efc949a79e99ba 03c34a1718c7dec1dc1db966bed642c098b8136a
-2614d6a26a9fd721553dfec11d871ba570d17442 9c87980c0acf1ce232232be344d7ed0ffd743d11
-3cd08cd36c3678acd3abb17a4922067f5e9db894 a26e8fd4bb39ff0b54a6d01c61368ab00ef90b69
-5a0aa03025bccce66381f212f6813b94c3ed2cc1 a26e8fd4bb39ff0b54a6d01c61368ab00ef90b69
-447d6916af39c50ccbc138a1144ed0100abc195e c758335c1a4306947e70779d2aabc622845e34bc
-0d48821ca53bc6415572e035a4257483732bd95b aaf4272cc103e9ffae64bb017a54aba8e128a86f
-ea98fcc9c457cf1de28d476c1130b289403b85ee 5e7d2823b46148f6aa17a432520fad6e53f37682
-4e3da8bd141623569bf88265ba7ff26b936058d1 a1b185c9e0836d55038e5781cbb59461eae520c9
-30753d3fda49856c33bf7fee7053d54abab17184 f48d83e86ea53cdce9da1747be8943e633041218
-2f37e9e11bcf1cd4b26ed08c18695b49485a39ef 72098b1259080d7b8dd658bc4bbe556312ea0de6
-8dceb91df421592abc430b0b557753194969543b 0ff5fc2dc1c085d945d9994647d55c35dc980d82
-d4057f664763e8c90e839c6e57c0532d493aae94 c14925801c53fa36c812064dd406f1d0551103cf
-8982763625ec2a38d7b0a32cdb95ce327c0a26cb 5e6e3d44fb48328e16b2c09f1b970e6e25273089
-3927171c878a98bfe2418a1af4e98632e00a8385 dd03069a54436f1319e95ecf6995eb626c74a1f6
-d4f61316c4c93b074b15512d6c77eb06052b85bf 177cd482963ebaddb526a88e2ef8d88885c45f04
-235ea64bd2e9b153d1fe7a41df0c0a32e4bd3dcd 482687447eeadbe43d10f99dd577a6605d43ee2e
-bf05aa796e160e27be986fd5736ec66b8e30bddf 489504ea6b837e16f1820d84d36d4a2bc5394ebd
-e66983b8698d3f55016d38cd671e2d6724d00022 7544cc21fbf1a2187d9dd31b047c116243e57b65
-d63136d93e429cbf9136eef2366d4b99d7ee7ba3 a24f57529148ff466556eedf01062e6e570a5bb9
-f26c6db3ba4aa217aa01d4e831b501e3fb5afa5e 3013b974513bd016b1aacc8a273989a74772e538
-e0febaf2dd724149d0cdd449605744e5da9b62c5 7b2d6ad6249f4a8c4b1fffaeae8840e3e7d00d04
-c9755298bcc207e0af7b66cb30348b0218804dd3 c0a79ddc55770f2702f2840e5cf6da7e86b6b4c0
-e4d3c743fce21673114b8af14f1a0433cbedc2b4 9328c46e455468b1b1d5cd5b1afb332bb54846d2
-fe6553fdcc515bc01d246497f6b55ded629260d8 8daf21452ae047531659e0832cf801ea4c7ffe08
-486d51877332a2fd0d1e088c38e6af42f4b5e2e7 e084db332571c58ea1ff8d2f3bae7eb000819a00
-1e88a3d25e9c0754cc22d8e2229f7ec28ebc9c39 f4f9b918798eb9c365c02a306d382adc5e25b786
-c12c0eb793f1d777d3dd0ebc69e389a453869ed2 0ff6e4b78a6387cfffafe90bac167d9163c6487a
-d1bb5d8617ddaef3a45dac4e38811953ecb54651 89493dc4d51303330c3752950aac673c41f8f170
-c85f7b79530a57b149189789fe0c00c14d9f6cc1 89493dc4d51303330c3752950aac673c41f8f170
-2ed234d421963bae6c6e941d14e8ed51a33b8c71 fcadc6c75bc915bb468c614d65c39027813eaa8b
-a52d090d44cbbf1735137e787394b55a0fabe338 89d2c23c4fea09c2c5e093b41a79cc306d389c09
-e144d9630f8f52653274b2824a5e566e4a6f5198 c2733899d743163bf22798413b70781aa4ec0358
-8558caab1d28bf3445a340cac021c37ad7f39bb1 feffa0e10c8abd7ab1e12ff5a8dcdb11972940ef
-aeb26a1dc8c0c4e098510233ea5ecc5a40223852 5074e3d2615c8819c17eb740b8379950d2b7a539
-ccc10218aff2f146e3afd027afc65f0ca74c8316 ec2c871a48c50edb1f594ae5e16d7b8f5eba2186
-12e76d83370f883c938e937e733ff425acd36d5d 1d6307fd863aed2b981175825b44d789238adb4f
-b1e1ed1034b004aebd5039baa487ba4e41ef2672 718e9eefccba233265f76080314cebfa0195670c
-146fc6aec1cae445c62e20d2f37d4503435ba60c 422fcea509440957234a002cb030cd8e50268b1f
-bfb246df4655777c9d22ac1ce34ee9bd341dbc17 508e1c6c95c794eb838cd329e6e20e1003e874c4
-063f188087e239858e96852438030dc9bbcf0d28 993625094a23ac4bfdcddd55feb483c1249575a1
-6cc7e3c3dea0dadfb93e9794d170e96838da8424 815dc5c20b880c673d6168d4727776db574867a8
-c2738098f82ff5f1db24a9f90ef36830332926c0 0b4bbe2819cb71a2219cced13af087c6f06ea219
-22e35529decf001f23c2e335458e5a75ec2c6d14 532e35566a59d9cc8fa92b991dc03a6a9dcb9905
-ebd7d349b9140fa33ede45308fec5306d4216f89 d2925f3e61c3fd8dce1833b0878f1531297a9f62
-08b5c3cc525f8457b9c3ab55ad62c0d2a5efd6ea 7dad3ac5b648f4d48372587cf23c454b2ce6b953
-d7918d065216f7f800529975c0095083540332b8 3c9cf581b02ae2fa08c960294d934dd03cf34b3b
-ffb90a8e4eb96ef4dd97d6d50e35d59a5b92384b 6ec9fec2d624385f5f6fb30d35e7d4cf3f2c733e
-70efe35fd12caad9908e6a351a0f99da296bb3b1 4f18d05bed5739aded0ce2b3120ddc4d62993070
-016293d8ebe1c05451feacd99b9caceae9137ae6 28e2b024590df4630d4cbdac0acdc72a7c37be81
-0930ff3fade0531a0b5e401882792e3e1d3f7f19 fb312cb13b8457b03de7d61d01a026077a632280
-3d5b31c976d0a0e26cf7f6d5c0786c55d4b2868a fb312cb13b8457b03de7d61d01a026077a632280
-ced695484640db16564f09983c943283d87e01da d3d63b3cb3731a134eef62f968db71f1f43b7a1f
-5b5f3f8ce80bf69f0e30c25605d39e1745a05cc9 41ef3c43d98a5a2f4516014d77275f6476fda0ff
-e663c3a6ea36c1f83fc75fe88423680c2b7753fd d3d63b3cb3731a134eef62f968db71f1f43b7a1f
-3e6c4146e9502a7dbaed4f24ef01ddbb50dd073c 41ef3c43d98a5a2f4516014d77275f6476fda0ff
-75ab7d14eaced3704015f3c1f4a95b911bc191ec adf59200f848ce043e629289cc6eff48d3ffbbc7
-bcfc07206aca6219ebb48779dc371fb0b83ef613 adf59200f848ce043e629289cc6eff48d3ffbbc7
-ba8185d823c88426eb42d4b72ede21b85b1310df 57e3751b7d7849c7d31a2223b03678604c26b471
-77f6325d7679ca92236a5e4c869b0916deff2d18 fd907c641ee5f2b4d7983f83604ee2a0e4a3b32e
-02658e1c037e62c840406977f13303af601ea4f1 b10c2a2e2599d24bf0770c3164beda29b356e223
-f368328e2b7b44465e1a551e44f17e1cc1ff51b5 b10c2a2e2599d24bf0770c3164beda29b356e223
-2b0aa60d8d2734a0ef6253d6c9fae45e0473f929 d2fe086d07311aa05d59ad4ec4df2f4441a6c028
-e2dbdd84e8728a6b022203aa91aa6d3a31df963f 41ef3c43d98a5a2f4516014d77275f6476fda0ff
-737c091b814523ba469018ba217b9c8f71c52132 41ef3c43d98a5a2f4516014d77275f6476fda0ff
-46ede43d4776c0cc11c48afbfc3b372eb7a3fd62 e9af604ab84ab9832436f072c4ac9249f3657342
-4fd8d383da5b3664ac642a783656b6d16f5d499f e9af604ab84ab9832436f072c4ac9249f3657342
-1208411d1424a2f656f7c0e9a929584e0d6d6bbf e9af604ab84ab9832436f072c4ac9249f3657342
-eb7589d5bfd2bd88faca469032283986fac7259b 59a5ba173a0c01a22dc6a35b23cc3f52fea309f8
-ecbe18953cdb24b8236c0ef00031694bafae7a85 59a5ba173a0c01a22dc6a35b23cc3f52fea309f8
-801288b0a68ee585105644eb86a789201fed419c 59a5ba173a0c01a22dc6a35b23cc3f52fea309f8
-3b16945c2fa264089918c840a28b469f890ad605 59a5ba173a0c01a22dc6a35b23cc3f52fea309f8
-d9c7bfcc288bf0179b49674111de9b7004d73547 029979cafca1512d6c4cb07aa83901cb464bed77
-39dcb3c28f7dda5c5a7113547ad6d4258e1795b2 a788c47e6c88635912c49fa7855266eb22637f53
-6e18a4f48751e75593e5230cd896fdd90c90eb7f a788c47e6c88635912c49fa7855266eb22637f53
-3089bb750a499e623580e369816466c5a1a573eb a788c47e6c88635912c49fa7855266eb22637f53
-ddec7a42ab90331c95a2d5ade2e13200b7ecc47f 4107c80f811412601d30519dac7b74fc55e619ad
-98cf740aa2fc0bb8505b34b6f9a05f5c4dcaa275 4107c80f811412601d30519dac7b74fc55e619ad
-083cbbfb630f57731c65b0a49c2e69b051f8210b 4107c80f811412601d30519dac7b74fc55e619ad
-42840b2d4f791270369c4c7fcd1bd697c2efb59d 4107c80f811412601d30519dac7b74fc55e619ad
-d88f6db4ead6793045abca5c3d0771f057b025dd 4107c80f811412601d30519dac7b74fc55e619ad
-323ef203153d39e1a1083f2cf334a1a6dedf0638 4107c80f811412601d30519dac7b74fc55e619ad
-f9cb038a520743c8c8f7a09bd31593429e672cc5 4107c80f811412601d30519dac7b74fc55e619ad
-598f7667e755b3e7f99c8fffb8ad5d2757f89a92 74e0daf43c8376d3f7b191165e2cc0f21712d5f8
-685fdec922f9eb58c62ec6466ec183635a01789f 9bd2003eaf6d6cc7d2e4af272c32bc42123beebc
-4d48caf8c36e32843d54fee90b67cf580c348f2f 5f6f9c12dee7c7d1a81a17b11d46f940c5df10ba
-29952f46a56b0a04651b79f51de08b0bc7efd028 0ab9a2583d060591754f405eb5dcae7b97f02578
-d53dd6aa39e5aabcc4bbc2a4f15046a4cc5cfe1e 60a325a20c5d293052f0418355f0a7a0a76693db
-922ac41428782251db7d5d8b6a33f82345a0153e 6b876ec470258f2a076613b302e0618c4f39a6bb
-26c0b735cc0b580de52b7e375ae616478f807916 809a7711aea2a4a5322e47ed9a5a0b03c52ff206
-74204c8ed4d48b85c52823a87a02e782046985e5 30ec367a513b2926473e3293ba773cae8e9f00e6
-62995933bc67b1f7c0232244f3457fe8c33e0f39 3b59675cf27d803542a268141b20c108ba150c09
-e15582829f3d891889e685e2c75bc00b07ce7e3a 115b765929784fd3f5f4f60db613ca12d392bde5
-a9437059b1b19b10826f13f8ee66c04c7bd7311a 115b765929784fd3f5f4f60db613ca12d392bde5
-5d3ab9ee7291fe38897dee9f1b2e2ad7b9bba260 e85c694510bed46cc8f9ac9367dee8e12f8c22ef
-983ec131e4592ad4391e90a4d73e2ceda90b1773 047100ed29e2b6209547980049a5d8a22c8814a3
-3dd51765424674ffa0443ac876e6f986a302c1e0 cdba8a2b6e6802cd9b0a836de3142107499a84b7
-cb21db2742c678a5aadd1a489a55803c7d31a4c3 a77fbffbf0564517e6ddc4c65a97693ae4e8394b
-0737a5c381a49d910c83de03d5733be6dcac4e1b 906b48f4f1b0304b19ab14d584825581b5d3ebe9
-e598bf48c55c493182178b45dad1bab0ed3021a4 9cef37c13d76635c264d8d9faeb126c9396fc608
-903e7af418426cea41fbbe7d3daf020343fe90c2 fb5824b221c7256c43d667a5a9ad72776eaed155
-b9af52d679a5fa4c11cd4c59dd2c0f569c35393b f924589ca80d6bdd3ecffbe6e98fb7deb502e47f
-928694ee0b65be55cbc89cdcccb22a6f1428cc88 76d66b5641dfc4b41fd4a8c631f6640605fe8a54
-2ba1bc633580892fcea2ab7f76d8d504ec057839 725fc7c3edfb20e4165df64f39a9b92d5ca603e9
-c1b4a47780afc2a809c7e53fc29263c71f20a2b4 2ce685c9022342cedb745b05a455500babc1eaa1
-77b575a207a15174a06deecabc6ee40633f2c32b 2ce685c9022342cedb745b05a455500babc1eaa1
-27c9de389b9151d5f491556d460724c9ec27231e aae8e7617d19b164110fe6ceb360192271ce9518
-2ba3a9eb9aed85a0eaeb3959c206ae1b2ae5aebf aae8e7617d19b164110fe6ceb360192271ce9518
-b33209d67c7dfb259a10e744494d44a474536898 563d106fb8c3bd87eb6294f5d7a90b3382a9d87f
-bf1ca624f5526de7701edbbb82e1d084324919b3 aae8e7617d19b164110fe6ceb360192271ce9518
-34915fe595d8b570c0076435fb9b8fe326213fba 563d106fb8c3bd87eb6294f5d7a90b3382a9d87f
-39622aabe3ffdbbf1a7b7f73cffadf15d875587c 563d106fb8c3bd87eb6294f5d7a90b3382a9d87f
-13e1fd17f0557279b545d6ff6e3b8be51561494c 348f7cd1a35b5b14cc9338dc56fc58a20026ac5f
-06b2685b169700a08de2ef4ecd79a93b76c3e8f7 4fbb6af24d079ebe2d4bc03bcb538942d13954d2
-9a76a4513aed339a7f3908a748afa2d30696fb4a 4fbb6af24d079ebe2d4bc03bcb538942d13954d2
-4aae84d390025682a2f53b4de46397a2be0c3e3c 4fbb6af24d079ebe2d4bc03bcb538942d13954d2
-d95a3436c4ac8bb153d3f30db7ede74fb88eef71 563d106fb8c3bd87eb6294f5d7a90b3382a9d87f
-06eba87ca235aaa92da3a3c55626790c45e0c359 4fbb6af24d079ebe2d4bc03bcb538942d13954d2
-c9c9f60d6b3e4e5569949f2821b13f791c257862 4fbb6af24d079ebe2d4bc03bcb538942d13954d2
-a0a5b78c643c89dcd764d57f2a6857c74a656e72 f04b7db2df52e6f09ba5291be2784898972d1b19
-85b02ca3cf7628ce75aac2d77e0d5a3e21ebfed4 aba9cb3132fae97a93e2ca51665b018455f53a0d
-ae4cdfa723e478de96ffe02acfb31498facb5d08 2a341847a20592877b0644e8386c45110c5c3cad
-70809566a28c7ba74b1ed97a6964f742b152c2de 2a341847a20592877b0644e8386c45110c5c3cad
-c6ca4bc1347be8db7a53321da73979172e3252af e8a21a94f4e6113584f5f92562269fb9154c02c5
-8025c490b2a17b18abce18a479624802029bc8fc 4fbb6af24d079ebe2d4bc03bcb538942d13954d2
-fbbb418b49bc11387989500ea4aedd80ef914a38 e8a21a94f4e6113584f5f92562269fb9154c02c5
-781f7eb7eba7d27505799f690d9ae13acd28d58a 28c739c3d074b8f1083db3766066f05bc4d7b5e3
-07975b8d4a283099f31d3e141df7f9e071d70a20 f4f52771af2f51761bc679c935ac27688346c702
-c7b5f4c3421b787b2c9d4083e638f5ac72d27fcb e70129dd722a722f4441e5a590e57bdea62255de
-c9d5e7e5b85d5cae789515b990493edd2df4e332 a958faffebb7bfa6a28b1801edaef790cf3de3c7
-6ccc4f88ef10b1bcd79ef4c48d665a8dc3d8455c e8a21a94f4e6113584f5f92562269fb9154c02c5
-6e602949c214ff343fdb943e7cdc9101eb1e335e a958faffebb7bfa6a28b1801edaef790cf3de3c7
-d682a3f0abca3c297011e297e0eecde0dfc36e13 2bfee5c24e61745b47ad3eaa7eb33117812646b6
-91889de9a098ac156bb8c6209e30471499d617bd 0e562d22dc07ea32c5215cf56b8b655c097cef1c
-5a4cbabb3c631839ce856b72e4491a73c05f3fb4 d43f52ef53b6c64bff6bc87c9052965174065354
-191a2d43ae80a08dcc7026f3ff94723b889bf985 a958faffebb7bfa6a28b1801edaef790cf3de3c7
-317f16b6b41d1222fe96229e453a5163ac3656f5 d43f52ef53b6c64bff6bc87c9052965174065354
-d0509ad7edff9fe41966439c274731c03d970a3d d43f52ef53b6c64bff6bc87c9052965174065354
-2f23b3d119a6bc495b0fa8e924060219cc3e9d39 64804011f4f06dbdd45128c1d8939c606a7539dc
-df8a65319c68197a3e928629f41a4c7e43d49360 b51c01a9d40f57377b36ab775d8e0f1df6c4df68
-c3e447866f29f514a66c6c75cacfe178b01ba793 3125b26faa3ea3af56e1d3ca7a1ab745a1d2c811
-610b0efb7fc964b22415f1e92e7c5096fda42f62 e54e9d7a23cb3a0038376d91dafadcbc15704213
-ef45ba1fdd84385819cce415af162dad76d52ed0 3a4c28da23ae5123af1da0bf9671fb6c1cff64f5
-7d783897bb2407ec70a3107f7a79472a8c0f3fa3 be6c885e1ec8246ba10ea53999f5a5ccb736996d
-1b87ef188f2ebecefa318f82ac8dcea44c2dc192 74b92ee61c4758edc1565dfb7a8aed17549441b9
-eaed01da8f32317570168dea1c252d8bf55a2846 464e2fa72167a3f46a0d5eecab906448083260fe
-768f8857fb2906d2dc5363bfc0d07647f8d231b7 723659cf33b04c030db9e95e47e930a557fd9a09
-d415c6f3c4e0fbc423e54a9986fcfbedcf12d991 ab4f9a4667adae9f93cfc446e525ef47c2e0d47c
-90a52b48043cbfc510b7f5bb8f9accf31a2d34e1 0fa33ef8ccba1402dc75c1db8db8ef7ef2d83005
-65fa41aeb27dd52ae813fe93a5968b55826ef9ea 642de17052d08e6723a831e51f64eacd2a20a1e7
-eed3795bddb4031aec06587a07fc22b234d2ed4a f336e111bd8e6d3943fd324a1ff3646449f82b6e
-cb695165106ae92c68691b61c9cbf38cd523f9ec bea306470d0692a3985a3b12a1e62784a3b12854
-49eb858e46f456a94cd83b9799b315e8dd594869 27ff60127ef96600f4f41d83fed2ad257a584baf
-f2cff18c8fb5f19df1733e9b66e7642a96bf7595 2a32d259553a37d279162b6b80edc26dbf5e3e7f
-15595b83fbecfb555dd06859cb17dc3f6e6126a2 2a32d259553a37d279162b6b80edc26dbf5e3e7f
-cb024ed398f62f29329b2881f06e6af3d73e355f bf855dada9f817d19daf514b8cb4b33572ec036e
-f7d7ddb58dc082d7de3dd0bde94f63ae82b6755d d5c8defcd41d36242ef8c91cab96c0ca2b719fd1
-294c96ea3df258b798edf38e57ade084149bab91 d5c8defcd41d36242ef8c91cab96c0ca2b719fd1
-43d79e4be78354c83b60ea0ae4d69da2d0899e48 07bdcc11e16a6216b1f6971bc88e23cadff15e96
-ea4ea1e81d8a1398dfd150f853687377e159e968 0d5ae28f9a1410294746789cdb08b50d98ff60de
-f7db086d57beb79093119eb0ad229053c0cfa9fc 443c421dbca6ed9d8570742f8591f279bcfdd6ea
-2317268d42de4b55bc2cc88341f86fa3bc7f63f4 4c0cd825a6dafb1cfa8a65a434bb84cf0b36d03a
-3d69637bf0d4e573f6e19841d7351f7e0e47d36e 4c0cd825a6dafb1cfa8a65a434bb84cf0b36d03a
-5c636b0dbdff4b29c7f8a6ca190212fce56ab599 2f802d416c9e85d58cd512dc19f4cd989d9a273a
-596f3086d0156932aae2caf5dd0224d79c5406fb 2f802d416c9e85d58cd512dc19f4cd989d9a273a
-9e4d58fd7b9fa39ffebf4221ffac78c30ffc5a27 2f802d416c9e85d58cd512dc19f4cd989d9a273a
-b2ca25ddcdf09e2b65f2494dee2fe9fe24ebc7db 1c185fa06297ff998c8355a934ebdae1adbaabf3
-f8dad05dcefb31a9850179fcb37e6a8407ce1b7b 50bd464ea9fc53cddd993389b3ba231f94bed694
-2d9224ee644cda464b293e363e04ffcc8e4834b4 50bd464ea9fc53cddd993389b3ba231f94bed694
-e0be0c8e8533558ad476d42c8ba75a228cda5eba f92b250e5e894c092ad880eb618559d56ec9e528
-f3413bc5515fedc46829cbe913409ef0872eb2db 551dfde30a8edf1843f22fc81034bbd0bb1b549a
-bde08153a54aa2c5700764fc5a2347561f5a9d9e cb67ad0bf6ecab18fba8e5702cffd53c4ceb0888
-1e273a8c32cfd9b133f83e676e033851810880ef da895274b189625f048e96efa08d251da2191b0f
-672e92118b2a7b8aeac4d16537e8fe52d86e8cbd 9718b31c4a3e2dee5edf4280fc4443abda14ea27
-c0b89005e8838dc47217ee0db8967a47474d8801 19c5397b4cdd854cbf2ab728d038c290502cba92
-b8b9652b82f2161cdaf31baab22b29763ca65a93 f9b333ad86653175e34fc8eac9ae63b414470362
-b3b5665202445bd4cfb079dd8ac99096a44c459e 5999b7034f4dbd8d494e0a84640f6eedec92f651
-40efa92dba4e3ca91c6f3f116d97bb691ddf8118 d8bf2207c350a104f1a26ba11c150a396a945677
-aaf2239faba732adee25f9046eeb406a08bc3123 ec2d20b1612ff3528d9cc32f39ef5ebe9891ba2c
-cdb1ab78a500295a9251e82849eb7322f80eda11 42f62a77b564eb3bb0605493476c5830792c0d0e
-ce3d08890542d521ff341c5732b346450c5f3483 42f62a77b564eb3bb0605493476c5830792c0d0e
-eafa5c519da6142f1d1b947e16a1086455322d85 5fc600abd0250211bf856bf747a6389f16b262b7
-b777ed62cfeaf4c12342e9bfc9ff14a498b59545 59b7638b330ab544b4517fa9a606c307ed75dc69
-7fc7dff058802a35f5d8d5c69d00dab6bb5b100e 6057984f4d29b9315f9181b32aa8a7f5568e9a3c
-aec0dfee4c990f24c2093e33a3c0e48763af7c26 64c0859e8102ad86a73692ffbb14e3dcc23968e5
-5b351f52bed12ad79624000eb8d20490221f5d9e 20b7da34ce5c31f15a6e5c5e9b2869e84ee9849b
-7c935aab805eaf4512def5965b6e2312680a51a9 145e134f8e1d129d1d82025975e89a53b7c96c3c
-4c98c24c835fdc18f481648d634e4835382523e6 5f5a51ba736c4b6672dc007e2f31b9a28f2ddd62
-ae16c2e217c317d11e95d16fa26a34824e684ffd e9c079a5e3894783da85c024b101cebecb27c9b4
-de8f2db829997adbabbd0f33d2806829968b9150 d8e2b4fb06614618358597dc9944311e1f098d85
-f952b187ee1265b8695db240e1fb0e5982e02014 10b013d175ce145ff6efec151758bfa7a7036e89
-6139d93dc5fd5eed0f3bea5ab9285cc9a9f3bde8 10b013d175ce145ff6efec151758bfa7a7036e89
-c18a1fa4578a6f618e86b546f63101bd6a709434 10b013d175ce145ff6efec151758bfa7a7036e89
-90bdff1f1aebe1f61dd343eedfdbf725c00e427d 10b013d175ce145ff6efec151758bfa7a7036e89
-4917c10b4c4095165e2c94ddec6aec8464245601 10b013d175ce145ff6efec151758bfa7a7036e89
-41289d5b668c205da79441dd17925363d0ce1240 9d4605648ff0f5c7de2a5a873e3b6f34810f0cb8
-7ae2ddda5ae88ab5a1956327addfb21b352c4394 5fbeeb537b4757b6c6ae4f02f955e40355442c66
-ff7f4faa349ae58bf359e5aafbaf0d704dd09667 a649feb48d7e56eb2e7096656adc05c8a28dfa3d
-c19ba24d5d47c2f289abf2bedae8c94ca4b57f03 dfa2823c5c3deb2e1974b417b0fe99629bcc0987
-5bb44db7f181b66ec0c511cfad307fa8ade104f6 eedd7f95c505b740acdb35c06dd230d4b31c3b5e
-a4eda08d77f53c238298526dcdfb01923b66109d b9658ac668c7d324d3279af9c286581c9abb19fb
-04a843ca19ed7a33d223edc4d96c9d4887e644b2 b9658ac668c7d324d3279af9c286581c9abb19fb
-48dad1ceb7086250d436064caec3635bd96d69f1 10b013d175ce145ff6efec151758bfa7a7036e89
-01e14401afa5b910254ff1cb55bba08d810c60ce b9658ac668c7d324d3279af9c286581c9abb19fb
-224b85721aebfe511df6a284f52fdc0a8207181b a1ddb138f5e5f9ca543652154ccd6735ce89821a
-a543179048f14646bd218635a2814f7b1b4f3335 e412efe3c3035787513531e28755eff7667b082a
-fb86f198bdb6d38756870034a4fe2b4a4d159488 3f17e670e9f03ae36974a075fb3eff46814bd779
-fd9747deafab79f37f48a2d55041819ec34aeabe c265d45bbe30f8609b70149b1cad7e22df73814a
-da5a5639736b611a210539c1a22c3d703a2b90ef 2679468d0140c6dc014f0c9b2da7e5cce8d8d2c6
-83b386d8e5c111260dc279e9df9211ace12b81e5 b0289958450d92b962e6a4deb5cba335f6d7e5be
-b1ea8f113320f6d944bebfd0e77de91732332476 9b48d827273ab7ad9565fccc3ae01c732f8c6432
-29074dec06be286d0d87023b0696a50cfcd29007 feaa2b75b21a22e7ea7bee41d7d5083e73157bb6
-d4014b235d3d8124c8232428ecfb372a86c0118b 69f38409b0427a81b4453fff7e2dc8602cf1846d
-a7a5772425ae0abea2acc0e58b9a3ea88e502c3f 69f38409b0427a81b4453fff7e2dc8602cf1846d
-36355153b984822284367ab56f1deb92e10cde08 2c88a1cd24e98f0d7ae3b3eee0bd5a85b939dd8e
-aa5aa63b2e7b260d6aaeb56bc86ea21749281b41 cbf076eaf6737eaacaa201f08292470c5e23aee6
-c455c030603d6b0ca81eb9cbb97aa4f180b7461f cbf076eaf6737eaacaa201f08292470c5e23aee6
-f192ece8050f3344e78e840fcb953fb6f5ca7b9a a0004ba1acdbc5eba0a4f1518e6c0cf84ebed156
-94912a4c230b8df0975e200c8d6189143e10c078 8989061fd1ca1923f05f32d0604999aca533b618
-a35ba69d35d1e29d19cb725c43879495c3372c17 c842dd8accf256c021ee99d8d9f40da7a186d359
-e78e8c42b3e7c7a53d2699450bdfdbc021fe3bf2 833304aa7ec97e91c5e0f5c7dd63968ba22d8fb1
-538029d1be1b0cec002e8169989c96981f5f3030 32a3302148d7bea81aeb9d6952aac9c0508b9dcd
-7e82bbef65b4847f222a427a105b10d07d901463 fe6f74ef8c25f61fe31f24d35325746e07eeafc1
-2d913c959af85dd652c739068b6985d309af6629 d2d803bda961833c032f931bd1dd9d38315dc65c
-355e9f27a8c2cd3de7adad52d6d6a3e862f06a55 d2d803bda961833c032f931bd1dd9d38315dc65c
-c50eec5b3e2fa0999d201373c43a0c4b3f623d4a d2d803bda961833c032f931bd1dd9d38315dc65c
-5f84cb3ada65d9d1262774000cdcfc7b171a9005 b2ae087c12e2effa2ce77addc77f8d88ac9e3db4
-33461b4a210a557f315bda133f5d45fd747e0e42 21cb5b66bd09ffa14533ecbb972ef07916cd6e70
-9894b232756052bcf4708e56ef74499182f64e76 21cb5b66bd09ffa14533ecbb972ef07916cd6e70
-135f5c2972e6758c5905771b42acd062db2224cf bd6720e2cba87057bb573fcd0189a9c529050e73
-492702dbce9090bd6ec3f55fab5ab21ee54c228d e0454e665253dbdf5ba630f416439843af70d686
-cd5030c2e0b945bda06900a9928b0d5601b99279 dfa87eb03b6cb59b5899ca8b51c565b2f766dd44
-92dc777c69d240117aae7c5c85e7d41f793d8add 1949a1e35acb573a46fe525f051a638e15e8d746
-8d48782c5415731b52bc134eb87b5d647814d348 d84bbcfd215970e65b50f63fcc0aadf999a00aac
-a72a8c613687bc538e347e66863ce09b1f3d88aa d9381c8092ed26a880f46878ec52c05315ee7848
-11bbe89b89193498c03b792b3675d67f18abc70e d84bbcfd215970e65b50f63fcc0aadf999a00aac
-3198d0cb9d2f9c7a9332cb49d8a801c771da982f d9381c8092ed26a880f46878ec52c05315ee7848
-58ca117540e44be9b623cb976fb65a144cfb5be9 2fdb664f7cf1b4751379e59000335243596c4571
-5beead531f2416537fe94f560332c17cf3598738 2fdb664f7cf1b4751379e59000335243596c4571
-9b7824d47af37e435e24c65c3b7391ad799c3206 2fdb664f7cf1b4751379e59000335243596c4571
-b5ef6cf5482503f9275fd4638e75ebbc5800ea1d de37f6cf38da051ec093b852ad4de9fb876e330d
-e579dcf385c1ec806c950c55492689252b8b247a f39950c5dc52e1e8632d1a4fec31cf96796ca989
-f969b35716e5e19625b8bc798074363da04a98e2 1b1c396fd24119563d5c0e272a5982c68144e0fa
-16124af872f0bcf8facee5889d2d81c22a6a3213 1b1c396fd24119563d5c0e272a5982c68144e0fa
-0237895a52ecb75707522b298ea47a8f2ec0fd03 0116a5d977a3b6c43f112f926fd80079c87f669a
-dcde937b62c87bd6f6522b6eabef76a17db72a49 a5b0c88885df87d828b25943380661ca74350c2f
-289c4e805767085e3d3841fd622c6140b091717a 1f3a796ef9a0a8468c3439a880d8fcd2448af191
-95acae9b4890fcdf17cc5803b88e5efa4a9a1efd 2c59c24dac507982bec94be13543b32be299d810
-5b372107fd20e3727a4380b2796c171fcc982cd8 4b61bc0ab01076e34f9b04505438e3d9af560949
-52f0b9f93676aadd560b3fdb1836ff109d368a29 ebc09890112e63e92524bacb53c32d99436dd8d0
-32f7604c38077ad1ddaea1b7b0e9c08027adff73 2fdb664f7cf1b4751379e59000335243596c4571
-cbf6c1abedf1284385e5dc999ec7046963c48157 6136e1feedd13ff090e7e665fb51e91848b8596b
-136dbbd4ecfa7294d9fae7e4a6c89892d27ccd2e 7ec17ad8400d587016bbf32d52aced383d2b0379
-c3a88c25ab357b16e92ac00d413f67d04ff8828a c21f43ac299446258e2fbb3bf2087824f910a7b0
-60d8d5157154172154c3b3558268aa33800a95dc e987a8b64aa7a6eef53f4d5f3d7e242924ce82a2
-c91dc4c4cca05c6dfa0027f7b07c009f44683c59 439842fdcc2fb51eff40a6ede0090fb0ef649050
-0beee278a8fe17ceabe4aadb7fa7f2074a9cf9fc a94385443b24b81d5ce0cbd05099b80b6050e677
-68d24161fd5ee61523b307f84e0289e83375f80e d55f3a5c0a6d9794519f07e10d1831882613d988
-192466dedbfc898f535394b282c289d215af0b58 25148f43c3274dd9c2e91cceafb5910245b2e7ca
-04e22bec4953d6b0f7d440b293ca1030ae0df6e9 f08089e6314714af9b722030165846ac2bf19c2b
-9dbd8e7ac2b19d4d622fdfb57c2b0d7cec1cd7cd 012c656fb1373709435369a6f5bc5727381dafbe
-9fdc7a1dba13fc8b8198e4f75ad830e8a8a674c5 8f1f71928034ce63df717f7983ce69e718389b6e
-5b3e72d2cba9a74823aa9b5d9e4ba24e89d736e8 d75d6809b5f8a1539d7c234a31ba7deda5bfa6af
-67dd18f28f1310d93718344f85faa66233fc6a84 5eac2e886b1990a0420dedad1c4dc018631c3246
-043a65c73af2a5db109530a0f2ec614607308eaf 4e7ec5eaa190cd05e983cc7d528c7224f6a27b79
-70f701962208281514325684f350c859d6b6e606 f97acf58e19f5de638b740593021f8a90815e9be
-b253426a4efc82be71ecc9a54ccd955dc80674f2 fd9dcffcc6c00efb0b4869dca501d9d81cb73f17
-8484e4d4df70dab577b2f3312f848c92afd92fd1 137996828ae3796714e4ba4c052284c5428d66af
-609ed286ddd6e8e4bd56f39874f25611f6324439 746c8c264cc64e3909af02e019f3a7ac31416d01
-ca038639ce745695d42852188da1930a05e221ca a9f91c88254ebe7eac6ec2ed8e64a4f1ec2e2184
-cb603ef3cb58c2fb5c1f49c30a9954953689c77e e1b97caacfbb53bb2b5a88515a021a0391ee7636
-07aa03188035aeec1af946eaa4eee5ddccb4eb99 9d71dcd49b802a82d8ad4b722d4f74fe98d72164
-182919471c5316e0f6ca98af9ee86d276355ec38 b4eebed40d30ce1c0993b7fd5ea2dce6ade441ad
-a026375d127930b2db0b92580c7ff5cb9eb8f3ba 1afa1878941b746e23411fe42330be60d64557b1
-f52f7d47d8e592bb6ff2211b5f4df9ef80c400cb 9f58cdf9baf87a57ff97355552d43a3244a53072
-eefae22aff724be93e1665a6b2e823786346349f 2fdb5e8f3fc9099cbdf5bcaa343b5c1a40dbf8fe
-065ed7a78a7d6709d0bc395047c80e59b34fce41 da26347fc69cbe7043847a633cdbfba30d8a3f49
-227f81ed247b8030e4f404df49cd33b14f7b7143 55010ec7f27f18acfd968be14a646a2080765825
-1cb21adbed994e841645577a15b92f05f1769c33 8e491c3400c03f1db8d4e3b90c0440e92de5d0c5
-fc80c80737459bea486e4dab4cfba309a7b16b04 c35c292d3922a2651039f5d34ffe5b5974e2b458
-5e111fdb2211b8d40cc0e11327c0583e34cddd29 bb2670ae4fb82becab1e6d864e183b37454f0d0a
-fb77e3c08c472f11ee66bb98a722398cdc597d37 1398ff21194ff58e15f9c9b8bd7688985537bd70
-e202a9934c640131934fea5e7bba1a3bf9957de3 b0221c8e96d012596cd29f08206a4178928aa5ea
-dd428770974577862a8c0aa88f7abff45df83026 b0221c8e96d012596cd29f08206a4178928aa5ea
-b12ee56dea5c9b7f2e73a7c8bffdfc27358cc398 6635bf1194c72dd3f045b82f60d1392adda28acd
-50e91e77f3e4651d5f06d1bd9fb04b27afb9f566 a4174a24c050affde7c642962c505eda9f3a0fa6
-80e4f05126c1912829776b6889cf5a5293373f03 276ce5524b24532b6f799aed3e77d2f694d4944a
-05d1e43750154b330f348c9c64d8fe6412e94a5d beee423c6a5308aa489464149a24e81b0a5cc2db
-7bd7ddcc61d291b6b8355a03e7221f1d4c2a829f 5b5644e59c6fd65d82197d2b0e2054a32276c7f4
-a151ee628975d05397a11a74bdb6f7f0bee76bc1 04c78810448609eec63c6def4484da8f21e7f3dc
-184afa672e2363e88604795cfc2577194b7f867c 8d7bfd1657bc4f0cbda1f77bd857c067358436a3
-6a923e9a4e52d4cce65392294fe1ea9487043d12 375c14463466c1402e3b08448eedc99127147c7d
-79bcf46751566ec0e3b9e9ecc314c695b2a45313 75a593e216623b45920693cf934cf16e91ec3de8
-58f3a28964beafb2a293588556fa83411ebc983d 18284841b82d730c6a57c9851f44e1dc66dfcf79
-1c414d2762c29e787fb76f8228237c405200584a 18284841b82d730c6a57c9851f44e1dc66dfcf79
-8fb3212f750cda0e9ce467eef3474a8ae0f99ee8 77035e12d96a937930665fd450f7cc98c5780377
-b06cda3400ae791af7b6837ffc33d1fa26142446 77035e12d96a937930665fd450f7cc98c5780377
-4fdf930fa1506fdc24c993a47543467c798e1949 bb623eb69a0478d23fba5379d66424156156a78f
-e0b3346ca39d044260bb009d578727f7aac3e4c1 bb623eb69a0478d23fba5379d66424156156a78f
-65a74c5b552d8bcf4f4ccb0aea6f3b834816b24c bb623eb69a0478d23fba5379d66424156156a78f
-8c361e3e79029b716d0da885025cdfb3a0351d12 bb623eb69a0478d23fba5379d66424156156a78f
-d46a146a176a2f587203988929f359192b7c2760 9d1f190efcea792d3ba6f3782d64404562c0b9a3
-8ac10824caa9194eba792ec18b17db0092fd28d4 e81ff9a2f29acc36bc362fba29fde0e8941a77c4
-a73ed42f931cb6e217c84e1c5d1c2557c43b7438 4e1532be8cc66a9436e7f7cd1b77b8ad8053234f
-fbecec15c5dcce23d94f92a0b782f81c6a7569f0 f4e7935895cf3f857082d3b87be15002fd3742d9
-eab1e566b9962f0e6f3f44ac65e4e181afa40d52 5f9d81b66caa35ea97ffd6c05b0c4d432cb60952
-f899afb699ea339c7bb4b94a460bd98eb56e2d66 f9f1df364502f756a68456773ae3e5821fc42114
-353457456758f314e155c2b21b154381f41ee08b bfa0c21d18b958cf868bed037a72a3034db30085
-f01e7934e24934158a195c73e3195afcf9ce9de5 0165e47d1d6deb636741c698587ea7b6b748d3e6
-05d7ab7d1a12bfee2be0d18747d9666264206c72 2f1a4cd28eb8db4a7b48ab3d734c18c67831b01d
-777398ea1bf840aaeb92f9b8e55cd4679f8ec869 62f7d8d5f1bad8ced381e088b7eb090442e592bb
-e40f92920dc5a7eb2805f81164623e4f06bac185 adb75ed4cd4b8d85c666d2a5cc35718089f54596
-1a404819d8a33674a55b4e1d770bbe55f8852180 b574a8017ad18a4acca97e61116403b0c362c55f
-177b2d647c5ab8a76dca82bb81e360b880f99d0b b5b1b28210cf3c6847abc8c3d019d9cd15cae8aa
-21baa81edaecec500d159f6b5cac9f7a34dffd03 e9039cb360e971114430e1e878c2dba0730d712d
-286ca4edf18722631817b4c30ba8a4e79af216a0 f584601335c2efa3bdcd7923983f2fe75bdbc440
-971f3d10cb7c098a66d14dd14caa2f91c06a54ad a8514be86c6e005b19fb2b84f2226e2039be2b90
-635162029dc673554eeba08781fbcc1f5c5f4089 92fe9e8c9bd2191c5dbd8441cfde3ebdb4b209e3
-3c7e856f906a5dd47a89d905f15ef7e3472aadff 2ab07664fc5431cb7da7eedf228494e33f8cb789
-9c06e48d35e57b64031c61a8adb58b13ccc3a03c 11498a476b865fa3983d390262783689e04c9398
-3c14f572c857da2d6dab19909e752d0c023076d3 48dc7a47f064510e599e776345c24c3c32f08b33
-63971b421b178f4ff81d98c0536d3c9e6485f7dd 303d5d80bc6406dd71038f840d083666dab8f360
-33f67b56a6576c296dec9cbb16a0c52fac3081ed 555a4f0134097c0a5dcc22511f0bdd0d48732d56
-6e7f784f19fac8d309c0b4c2d4bc6d3735e82c72 0815b90bb58bf9dca6c9b8178770bc979ebfed2a
-7a10c70c68f01a546a91b68f954dfbe67e94d2eb 7bb79d8b64845ec1b68f81f37a484d67d68d768d
-0fa0dc5e3b821d8a1abec03a4e4063fb96f7be22 7bb79d8b64845ec1b68f81f37a484d67d68d768d
-7dce2feb9e99063467e86b5e0b64e83997378e41 53a100cb97110b95e5f7f7711f67f465865d151f
-2ecfa74d4c1c0803d9b54bf379e4fff07fe1d7de b602428d11aad50842f3183e627b0cd50bf0eb2d
-5c39b7c4b72479f0c444602700bd2b5502272fb5 1ce1143416ff5d079f11a7d8b6bdf9ec7526877f
-2a15df71a6996e1f6176c5168d68da5f12470164 d63c6002681d2f87118ebbff371513bab3cdab45
-eb6e4bccaaf97d527416ea72197e3a33a166904f 72057275f763905a435cedcbec2ead1a0f9c4270
-d02a195ece81acd5c5ff1214d068353c49ae1731 141afcdc7698967a1808598a6e8cc4077eb4bc15
-c9c9143e0a3bf932304dafca331e80828167867b a3119f39e567af9f7d548e015425640b27935621
-85b7fbf815db4b23ea39947692337cc23644e30f ae5395c688201e0d7bf7da697560ee268c7ea7d0
-d37c5095690de58376d90e3ad456ea58901de381 b3bb130e25bb279dd0abdaf8b553425e170624dd
-dace1057e8e58c158d2f0ab3724ec2fc998d9f39 f7615a5564f488c469a2278d508d8e0a7c169f4a
-ad70c07b05b673c9c0ba965bac18a4562c87e3ae 8c8244da5c421dfbfac05f83f05e897c3f467eff
-8a467691e6370c19503c18800ae4df4ee942e81d ffa7f72920cc1205f0b78d34575f3b5a39be96d0
-6c42ff14e601a8029e35d1963025aad580e148f9 74a89924a219a239ce8b22e0acaa4b432bd988ff
-0a68ad4110d27bf21cfc8194a6c4c8576f0d36c9 96be0ee996d54bc963c5e7cebefd7da3602543bb
-6c253f47d10cfffe9278b340748585a2f4232481 aadf8a5a0f286783afa90380dab830836ce49370
-6153934894899a1e1eef03c6643d2a208af4e882 cc307a9f6f204bd80f93ae0429c42be088ac364d
-aa60a23163573052b04b1eadf953f8c15afd650a 0c6c304e588d9cec99cd97c9735fc576209767b8
-711423eaf045be22df335b28f84ead4dfc799d2a 12e66c8be001c902dd8d186532c0117bfc5a919e
-9db2fb24f98124e8414552ec9538eb85d1e07bb0 b6cf6ed62b2425922c1b56ce19f9e9eef4b370ab
-0fabd46448874b7c536cf000805118d2f3190b1d 4a733bc42396b39d13e17e4017464ed91e4ddc5f
-7a1ad607d3ed7a5ba3e06ccfed8c3b17bef035ad 43afb49cea40b7b9c6483f2ccaa7615ec22b9281
-6a1646353d7216059efee92f98363e5bb5857ba5 ea6fe1a9b3cbf89a1ffd1178074c51c45c6dac1f
-b75ab41c9c309ccc75df47c2aa2da3399e3d9bbf 510d8ad39ac2a9ac28206c58cccb136e383b9f48
-6b9af9df441c5085cbea80fba7c27318f59e6a3c 7b4be20537d0d2763dac58c304ca77924126b270
-ee7709319d51b5dab51143d5801d702b46af9700 1e219a7a361a72281e3ef197c2e3267a1a4d02b6
-9a2060c6d10a9fbedd99728596a183a2677cbbaf 4abf4c48055b890d3389dc55fc90ca7b44931191
-37ec0c187d895a29dc3e2156d50ad4ed0abb11ec 7f84ee825bd28c6701d2019ae1c72076796e42d5
-2ea72c26338b7213beaa4df4ecdfadd0b8a0b367 af4ed5c1f44086ae8025f39a6380be8f14f79fd6
-10d565cbab45028cc5fc997357543caf58405b12 4b7785cc50e49c79ae1edca91c09c23c3151793d
-b844d75c4fd7060b39bfbe0ed2ec156cc25adf65 3f74dac61cc6936258b9727af24f2a64a0087cda
-20a9404d6167910e61c0e3e34fb6229dc6062aa8 53b3a4053236d990605ff8b58a08eb5f36ab5182
-9e43f560cf71f7bbb834cc1b8ad5fece65828f5b b00af29f06a495bfcdd8728decaa6272347ba0d5
-e52d3f9ccab44eaa5238587f9a53a38c9923f463 154d4790f1cefbaf7626dbbdec92a8f9790e19b7
-4cefcb5d7af0799d160a8d4e9d3ae2722b044b67 3429557ddf29537754377c2f157984a0c14300ea
-473904ed53475b6d20d71dafce775a67a3ededc6 0579b8587e5b8b8801f9506aac071bd5b2509dc8
-9a2889fabb047ebd7244a40037b4021ee5ad154d 01403ee73a6076c9695713483ed1d3194d406953
-9f4acf802b8dc69daa31eb5d648752bc540e5f07 b24e1fd083c29f1c8538ae1e406bbdbb57e01d25
-6231cf0415c8ca2e6644727dcea1eba6ac53765b 1815a4fb4158d8e8f0ba02942b90fd256befe75b
-21d2af53e1fab0fc48624773225a5701c236d4d4 1815a4fb4158d8e8f0ba02942b90fd256befe75b
-94db78e7a0de7ece87ba430bde0b51bb1e1defec ffd44f4600a76c9c3a7b228494a0c1ef086a793f
-0977bc09f748f99507e2aa290713d296f87aa3f1 79dad3da978f674ed70424c124b038aa4d638f98
-71a51f80d6cd8347af53722870cd122102efdc31 3a8236bd5cf41236874b568cbfa44e4bd22870de
-3aa0cbb21c0228f7b0c1991a0e9c15fff2f4001b b3075cbd0650f18cdd7980043b802c15028a4fa3
-d23237d2567cc123e7f9b7f7daa1b326bde420e4 a49d2269528817f80f555086f07ba181020e2e16
-0230cdf67c4d29d05add72695b12b9c4f1517341 a49d2269528817f80f555086f07ba181020e2e16
-0b60a8f8d3e65d199ab22ccfd5add31bb8d68383 97b61ef037e84f069234641e8a7cd6859200324f
-b787e0136ed327b778e55f33ab94c82472c6b39c 129f22e27cc7f5281f6440fb036fc9398f724fd2
-16c980da3171e202d35198336d267c2612813f19 65032be44b74e3c3553d15caa7740afb3026b9ee
-e78feac91db92be5aba4cd1c37e8ef3799b36fa3 8c0773a8d002a56c2d4398a394fed716d10affad
-3438978a7682945cc7e08704ac6b4617d72f9345 ee6eec81561492d5a06ffdb0083b6fc981d00756
-5c958c691ec655aa99ce0f8fab7db7eca882a0b4 ee6eec81561492d5a06ffdb0083b6fc981d00756
-d55a76a8f87a7fd1753021a3e0f233fc8957ba9a ee6eec81561492d5a06ffdb0083b6fc981d00756
-3ad79ae54c353827b3045b12e2bec7f64c5bc298 38ea684719c3ce30eee9a64e241550b9d7d182d5
-f836ea0c1f6dae4d37840ff7014343b245ed4ce0 d44e1aa00601456e677379842386cc712c0827e3
-d2e483ab601489c80c04bbe2251eabe58f8910b9 41f094821895d731e09f2c31fa27c28913757734
-92018df13674ee304cb6410c6f35d307b550038d a83e82ea6eba0f3819c355412beccefc73439dc0
-dbb9015f6ae84d1a391393f19b28f2f4bcaf5e01 ab916a61b4b167306937f5ef70ffdbef182e3f71
-5db13bcc76559a30e2ecc8f19829ca0e55a9c180 8838b61ae0dccf5adca121899876a9a50f70882f
-db0c693c762a7b48adf457b6dd99df7b1d481597 6b0d64409e731a523f3626dc6073ca26cf57650a
-eb8ec28b822a1a300a6769d231829fb65867fd1f 8dba6a43918d122032363fd2bad8bbac66447e2f
-c2578a826e5b1f210e89229b4756be126ff22f3a 029844b040cb46a335bcc9875b61d07b41cdb0b3
-d1826d92ac164a5735714a25555e846baef411e2 ea524246696324322d1553375a932fd919c80f7d
-4a297d37b02842200dad9cb09b4f351f2f7e392a d965b9f197e0634d359878b44e6aa628c91f7506
-a9e1dc6cda23d55d11e711726164d5c780ec6ea9 fad2e4bad5dacf8cd7f34cfdeb2788d9684e8692
-a3eca77bd5bdd121e184bd8bb7f0ff893e158d63 459850bebf7de5096501611373b0165289f76c02
-93b6175fa23c7c4a48e010f99b58ed038cbeb1d1 459850bebf7de5096501611373b0165289f76c02
-51f32f17829c768a3732b9268b98194a2b1bd6fe 459850bebf7de5096501611373b0165289f76c02
-26a76454b03a3899df3f34fb26e02299d58867cd d4fe6d6f18e629875873826bb0aec2423fbff7dd
-f7ee1fda9d02842879e357c7f28653cff31c3df9 3d47652cdf558dadb3d1e000fb968118cbcc7791
-9077a9e91ef1facd2de9b89f0953ba3a66d5a87b 6d6b57c7381366417c6fba67d025960760985d52
-7d7141a3d19e015daa7acb707fff7fb527dd8b66 8750b918025f8acbd8e8f7532dcbd0a2d7ee93ec
-c42f92ac6cebb25b8230ea53ac4fcf611ba792fd 871c26656a22d50e16cd2f6ab56fbf0016e395bb
-b89cc1be7ffdbf167ca3e09db3032a34079683b4 ca51a788c43b80239df5c1dbcb5632c359b5f263
-0b61b745610b0d46f1fd0ac78c3a4d5967265638 9101ad740dab09c5f5e7a5cfaf6444b65cafe34b
-215c5ac6034a9e7d36ce663d58fbf7e5b3cc7f24 cd5e47ba08e9ef09077555febd238a04348064f1
-2b9a29c199b15024d78354e6cac8306ce086edb1 89a2e0c4d38bc56956d7c7946a0e273f2eccbf89
-c142df4ae31084f5a26fa71c85ac5ed4999d7d0a f1dea4e08b516c5000fb6c3063964192ac4e6116
-b504e16deee428d230957072b55f79f2d9162ba5 aed5f4979e6b61795b6b0e5fc41253c7a0d1a26d
-cf72d67852f0a8c292d429c1d56616de44108460 b0eb6b95fbc371906d0bc90b0a449a4fc3a6758b
-16c7f2f443ea8675a8e10cac056bed8469bf333a 8542c1d4ce9457c5df036f8f86737788cce94f10
-f29326ec9815e4c4bdbdfae0559f407754339e11 928184623ea126b3bd913db48f2897f2ec7cf230
-97b94d37c995323ab6bf2b185e8724a88f60477a 7de41812c09e8b7f4d5f7b36edf480e9c71ca0b6
-eb70c1cc1e0b86106bb5e2d664a6dd5c3fba21bd aa5d7bc5623c061e19b106d6d32a83b488803238
-517b66f05d8a8c05627dff7b931f52db9a5d4d51 0239eb9f58d38965a6e3470d371659c548e498b5
-efdf28087350950fa482ea3e3649f3119b64cb16 0239eb9f58d38965a6e3470d371659c548e498b5
-e103320aec0df81ab7b2f06d55c133b48ce27bb5 8edb0d09836d2d8450722ca0ae82dab980fe0230
-073d886b341465bd2a6565d4e149b826ad3300c2 ae5a95e86c166d51d4eb810732f2ee70242b38ce
-16b49dea58098feb721e498e66ce2d66294a6d34 2bba95c4cbdb56c36ff6385ead344e5174787483
-38cf452b9498b9e51e0ba80ac21badbc1fbff5ec fb26dc8178d71232a312ebc74a2d0900b677e51f
-701a45a6c448040f1598f23de4e2722a7342dbd2 86937b51f4076d3c2bf1872b6191e47e2dc03a31
-176278d808a13ca9522ef585f6d14fc50856d91c e60ff35dd693752b7fcde36f14caffe39542e9a2
-33430c29b47869bad1c2bb7ad773d76039666cab a65ed3a1471738d596064d79ae8b3590118023ec
-0a73e26f1c68d24ded8d4ffed47d33e23c3bc93e 1e5ac1103d569a047172321a74e5a116a9c54903
-8a0756c6cbc1b36b955b913d0475c7c1d0e6c1d0 6af35eefc094965b556a560b88924589ebbf4175
-039df7b0137a458e43b4b6342d16beb85ff061e4 3e976d75db995e30de53d5a7bfbf68283a7dc30c
-574881996ed5eb17825b3cc627404d703a57b7d3 3e242c713c0bc57a05c47b69943248a86e4be6b0
-81587eba76bd022d4aef843e6956de110cda32a9 3e242c713c0bc57a05c47b69943248a86e4be6b0
-569b2d0af9732458b74468306dc4491391e9ae71 5a7d693a516b2063d10288d6ea1df6d77030f558
-e54afd058cec1732636828fc5403b5b573b67d44 9ade01221972100a2f5fe43b83ac85608fa138db
-1afaef59607fc8a13ac86f15a3aa49c0320e6322 4e8626d06c837d7eee48206201971b7c7407211c
-f098371942c8b0cc772b0b29c68e5b76ca0c5055 5cc17ce177b13f90d291344ed0923ca780ff01ce
-86c840aeb75d1e23574dfd774d9ce29d47021ba7 a46a54cd90010f5b032658c9bc2f9b9fcc399740
-86212cd3c32cb1bd7b9de660bb3bbe4b53e51ae3 5be66f3e28b2e9c6362793850027d5d6deec4f7b
-7e9c236fff31d24cab195c4afb3c6837080cce47 24c58bbad89df995699cb71223f75617c2eced35
-eb159cfc676b5e3fb4e767805784f9f33f4ca2be 481ca18a59b6073c77e07a5e19bb8cb33f799fd3
-4680887cbb719658cb76469a18359662fe0fa3df 7722e4c1e4b2b81cd03170a21e8c4b5a16976ae3
-458076fa7b73c2be81d0666caa30d7847ad7ac4b 3e76240a487b31eb8e01de0a81af193ddb1a6fe6
-faeed50c2ef2160b9532c88758fe00d49455c79e 494eb669852b2ac9f7d2728da4770d7490005622
-83229de75dc77de77edf8093d340457e0142f4c0 e58b4b9b5734c7fad4fb667febcf0f7b17da2685
-7729c98d221a3809c14b4e2281f89303cec3a513 53fb5f3587ac631da59af9d842cafc9f0f5ebace
-79180d3898a9f689afe2a9b73461f3e31fa29fb7 29568c33fac9fe2eac5da8775a82f722a05e097c
-f980d93e804941a0da36dafc46085529b7d31904 a0cdde6438372423a078cb697789be34f056249f
-e122867f120cd2792b8aa22efa614029d21e60ba ea015b2d24a5d1101b880b2ddb7270c3bb97dd25
-a1c3f715373d0bbd01967ff18cde60be0569f9a6 dd56db23e8280e3dc96b5a3ce6686ba7e05340bd
-065c7819427e7425514920a7f79590a72aee4df0 9f74d980255cc457342eee09dd167a5dbb41bd67
-82a27b712cea498a038a7bf10ceb54f79ca177e6 9f74d980255cc457342eee09dd167a5dbb41bd67
-f479cd56a714b9c750711a4b7605def68d153184 b8d758cf455454d2e5b28b2c9f46f51f48a3a428
-b06a21bf9f1e7e28ed08fdcd1198e6806673f484 dd56db23e8280e3dc96b5a3ce6686ba7e05340bd
-aa3cb8812d4f6b1032b032eaeaea3dccd09a3cc6 6392091751bd355460170df66fadadaf413136d1
-fca95fd1fc47fbc048aee323b6599f257367f5e7 de3f88f5ce6106da8e91f871908c292db0acd021
-76099788ba39dec15069a5e5444be28f8463aac4 133e0244a65c079a1485a03a077279fa311f7624
-f8437a99e1bc9afa6544fb34155efbed114591e9 0bec6f0804e6461bbfa15d783edf2df6353d6fed
-8428c2db53855ffa8ea65f36dfc754aa5039661e 9dc93aa6b61dd11a58117507c685292fb35aa54f
-0f3c130dc9538f5f727a65a6ea9818b4b7451b5f 467c34ce4e88313c742911067f4267f1763b7cd3
-bee49d98e30458a371934272bc77ba56cee566e3 891f54e2bb21bf60efcece0658f9d8b2e8c954b9
-98285e9fb2bf8f1683194114d8cba8fb7d0151df 9c5ee76967d0dc139eb1133079e3632de6b8536d
-e30d2ead9c86a4d12d636f93216c582072b667fc eaec61c890b63036e22d01434916996ce25a46fe
-1e84dff30e9bee30eaa26cb42d05b5ab16cc3f2b e7f323c9995f94c5bf66834c78864ae49a0f79e3
-e83e550630215b5f9afa2e56a7853cae8009f20a aabe3df2827b303779b705044c38dd6c4b532a9d
-bfed4d9bfb615bb3ae8134efff62c0fb91e049f0 5a80d9a8b98a15a92f0355a130b40dbdb4d89284
-c944e0fd0130532a526531877aca0112d6712b5b 1d7b3bcab83041d21fb4c072d9ceaeb22917cf6d
-470a1b186259748c43271e49a18b70aa1c554c1a 467c34ce4e88313c742911067f4267f1763b7cd3
-8a8e4ad813f9fcce302f1d25045644a817d60738 1d7b3bcab83041d21fb4c072d9ceaeb22917cf6d
-27da5e7d2b818032c9f3029c073d42f9385164cf 23e9df7ef9a4f4bf3cab1807e9ed23a73d50997c
-d840a23af84dd2d08535394662ccc2a1236e73d3 bb8330059d30390c24dc72f54dab3155ed297c94
-4630a29737c02492a1ffe84741417429842657d1 e084cccf005f37e74ee86276aedf83896601ba01
-53794e371e1abd058ec02ac78c5e13645f801874 e084cccf005f37e74ee86276aedf83896601ba01
-060178b7f930369542b88a4fb184de0c785a7299 e084cccf005f37e74ee86276aedf83896601ba01
-e84bd98f9ae1740a5b18be620ba1f301a9ebfb2f 91174afd2526e59b563bf59b7c483ad5eefa0285
-319bfbb884e179a7c308f002cd0db7bc8051bad2 823979e4bd0734eb740168e5262f239549e82b13
-ae813241672e6ace123b135ad91bad1c4a2e650a 898488f7a4f4cbe2d37bca3901fd450d44d37000
-17e04740a14fd085fcbc7e162a4844d1f5668bac 54ed6e25f666d84c530cdbec4c5f1a6426c28d7b
-178976e4c40646ccf931ea0d0448b6e80bfcf2a4 bcf89a4b5828c3eb667174f1854586cc0172bef1
-8b60d42c75c77b6f664713861132688a6fb2833c a75f9956c94d59c60a148c02fe8f51dbfc6d666d
-c37dc9475b8bec19b3c6cf3ac5b29489e37cb637 b933fde1accac179665c9622a5659fc98f85dacf
-79959c67c1219fdc6740bd0974748d7825ce2984 634d6757c45658e38d73324dd1de2f69c42bd045
-3090e765271eb8638057dfa97212124954158383 274e0d12f03d754c0b11aa98413381f40635ee63
-d817afb76ce56fc81c53423e61e10c1decf40c25 d7716290047b2fa3092f22d4a80f61303c12aba2
-04441c7f84d95d6a054b71bbaa8550a95a5d7618 698b0d180d5ca391e47277dfb02b39c1ea3edee2
-a19d5f8ca97b5a03ae316ff9222b5bff6daf300c 3a55726071f20285bccb84417f2a7e940bb7e2fb
-c83a03e9d1e4008889c666fb04055f2472dc71bc 2286ea3aa8bfdebaf77b33b584c790d8dbb870f5
-4fa4f464d61a45173b792e582347f6d912254d87 f7a2f8f859973fd395fe2387bd9c185b3035a05a
-2f592b5f6602caa1b5954dface4636f75e00fa37 850efbb99d04fb3c86b2b0b6f5cf5b7ee62535f5
-decfe074a9e0c426296fe5c4123abc7eb9435833 a91e1320999d2b4ac9c6ed9344ea7aac071b30d5
-8e7bdd81dcb76063fdb39294130b13c043e67948 7f1dc756c72611294650d5fa63831d46aa8f71db
-094f0c13950279181a8df0033b2d4286c85d186f 01690169c879a4d01fdcabdd3384906f1ead8a3f
-b4cf1f0046306cba93fc81892372c9040fb41e36 df703f4f6eee79bb0ab33344a30775f0de1f15e0
-e6b8afa5ea1e967320a2217b95a1675d81dc5495 1def1272750b04af1bad6997fd8ff06faf96b8a7
-6ac6b155cb3d01d4f73376abe4186942f2bb52e0 1def1272750b04af1bad6997fd8ff06faf96b8a7
-4038ca51b5769d684bde1eb934ffa0cb4f6a3171 4e42b346dbebc0ba8d8a53f36d137be380bdcc62
-e0d5512a1b02e091f9d45a598e44ffcad9318dca 539fd61e0450db8560ca669df93dee96a3d51b12
-0dc66c0f90bb6d69b8816cd512a8828c29e889d8 8905c9b338558f22a41fc118ee970521cd7c0338
-335b08e92b66f804228cd24a0ab8805aee6b8cce 4698b0cdb3ab89c4ee827902661e63c2b074fdc9
-b258f4144996e70e66822224cf91280d7de0fc3d c8d40031ac859b6fb55862fac6607966eae02fc2
-be64c6cfed18c378ba3950ad43829fd1efc0d33d 76bb3e05f7604b3befff7207b94a9181e06c357a
-f5c789f21fcbf55492e29123c37347a999a51f18 46f823aa3bf9dffcb698bfaea57ac6e470dfc679
-afa631ed961f790877134cd3bba1264787be2a27 36204bd4b019f4c281efafe4b7ee321544277221
-b92ff032302b74c8583bc381a6f0847b7d8feaad 36204bd4b019f4c281efafe4b7ee321544277221
-a78a2e14ad0dc741e967c421b0c390db81a67719 445415ec9604af935ac5521da1f7b232f7a5b4e7
-54f9893bcf8ee7d23294f800a2fdb198e4beaf34 65bf99d86acc5681a00a5c52cb12f4f00aba81dc
-82e88ad5568e66d8d349f37f9e4d22b0301097d0 54418519412d0c40dce64b0beb3bce061f288621
-b777dfc988310ac7439e1d6c8d586a7dc693cc53 54418519412d0c40dce64b0beb3bce061f288621
-60da2fc952a067df8be1045201d8ef1e963d4246 bc9f41d6015f6ce604672f53a886cf96ae32e67c
-57dc52edbbc9acca9b1f26e1b3866b5b3f99aa1e 045fb244287fbafd6d56cd8343b11f9de325739a
-25cf965411016fcf3fd8d95c80f5507ba6fb6baf 045fb244287fbafd6d56cd8343b11f9de325739a
-8de1ec9f3c3f12161dd150ab751df058282af74c 59f9e867d3e0285c1fa1e5b8c0bd3aec2e9c0a4b
-677c68e911f43c9185dcd4a133c0be146b9ed413 8ecfc760dd38a29981cbd880f1f076291cff6fa2
-eb35d0f66fe4954a14037d7256f03332b22ffa05 8ecfc760dd38a29981cbd880f1f076291cff6fa2
-c6f4d8998411003f19e72659af60503bca5cc988 5b923a65f3dcb8ce783955d66a0392f87c641bb6
-a28b812cfa356df474bd90f362e111ae6acaa7bb 6d0bb43f4732539ee0d6b1d14d37ddcb50c7d500
-a6b543ae5cc55847e2602ab65065e9840e1098d9 9b4c5a5c0849c70d3b04a2af89996f3fd7c45d6f
-95f89bd175cfa2c15ce5dd9fc383d662f56fb1f7 1a044d944e6ffafad26664a590d909246c751b26
-311ef0defbbe120d06c446505a52dedd1063f2f4 ca6c6c47649de895b72277673c7eb2847ce57ab0
-9514264d59b2bdb95cb0c812895c5ba7d279a2e4 b5483dba0898bde1444b9980298ca0a7448f55de
-82d69a3c8f3e70b48dc9c72cb2c37adfb0766a73 e13ca4c89b835ed886c80089b0c78d9834188fec
-fbe7acd90a674ad4ac690ca6239413a677b5b1ee d4e37ff499b129263df60d2b2ba3b0aa25396b70
-0fedb9cddbd3b034ad5e7d34e027f41e52ce9dfe 9e092526169fd728a064eabdb3d88d2ef7b09815
-ee87d75a4e5dc146a33f0923a715df5cfcfeddf7 84a21d533cacf243e4a4033c5c5cb1388b6e163f
-f0fb0a05b50a68e9bc8cf81631006974ed9b9526 921e2e04af4081d2fd13570a9e4fb9e8961f6428
-6e9977ae2b307b56f2798481a5b2494f6f5dd059 b54d6ceb317fc86cde33c8c802c6af4a54062bfd
-c19b3f1c3a453c872165aa36386495094be99a38 e148a176a265447291dd456c1021a6a002609142
-59f8bf1a210bca4606309554bcb41526aee54cdd 331aa387b38551f01a135c1696d7bb8d331c59a2
-c8ac12bf7e9107edcbd14e8d5ae64c159dcf27c2 bd709982157df275aacea48b632e4370eb09b33f
-8607fcfd5cd355a1e2db6468a9e40d5da57df37c 436d9150bc93dcf6db4ef10cebd911b48756e306
-d34c61ffe98177cb24686045c0a604259e243420 c1762988d63472cfeac2bd95e780f4276dd26313
-cf2d35db779578c380162ec4747aa860c8c6f87a fe7484b8543e40894ef3951e7669ee078be1c157
-76fa55b82487f2c3170c3af11917376c6ebeb9cf 00bed359c071d5c78b828b5ffe84c65eecad7667
-513d4ad10bce696cafb6253a31e3642059274a40 00524ca6248dcb056ece08646bd1a56a081d5ab3
-ffc4b9c548545392e8a674c40cbdb9cbabe0e2f7 d1ddf69f541597fe4ddae955f0b27ffaeda1907d
-8ca4a4ef3746de5127ca119bd1691d462ac27f86 dc2a0f9754d1b1c0954f9d15fd2653704992d26c
-541c38300a0d10fd94ddaaaf91d92d23ee1df377 ea55b52317fc564cb624f6f0b469dc692617d483
-c5cd14bbdfc3287ce3fced1fffda09d7c7de4904 645599d201a01eb2da4c771bb39357bb9c3ed3e2
-862426eb31ba4bf53ba961e85c95ce857c6b2348 c12b4f7c417894016041499f7dd89999ca5cf726
-eda38865053a2608096d5d58e9f8951cc9a919f9 adc242e8ccdb98b83178775a88c38aaa1e9ea57b
-51d4d5d4d6a319c7704a0db318cb8f78747da648 9d832004d89cd9da29a136ec14e0deedcbdde325
-506bd51d1543a3854236b0db016d75ce9465f0fa 3551f44d6355dd6a54432ffb22809068cc8316f7
-9f7d754798795c42e2e01373a505b15a7c51c22b 23f97b13f15e46af6dbabf2b3a5acfd4855cc973
-1fa97bd4f7d995a304289005c6e49ccc370b053b 3fd142e26230a78a452382be59c3ae17cda1c833
-08407d567fdeaa1d241fc686ca4adf082640a17b 4d1c1b16073bf85c70db6600b5016678a8760418
-5cf221e017b8e7c805b01d34974579db359713ad 4d1c1b16073bf85c70db6600b5016678a8760418
-0fb09b4e17384989f6920166d12dea938318fb1f 3e0d7adcf40b3439b2d1b3a8e5bc85ddf19c5c33
-6e4a5d340cfb5f9a4c99e73e0ad36e1a62f28c1f efd6b1f49d7b3ce3983603003f6dd7f3050250f4
-a2aef794ba53d92cdcee1c511660cdb86a8780f2 483c77fc3770856c39fa5693d5b7aec181e9faca
-d14775298c0cf170b32917bbb6781e429a45d435 493ddc9f7c937d5a30d6a44e9de56a46d45d96cd
-e561b0c02dd436026fe64b036c5e854067781a4e 8305a9735f4bc58e0f58f4eadee45b9be8f69fe3
-8d57f8bbc2677965831d6e9498bc76dbaca02f95 fcfd2234fd325ad9aef68da9801abb6345332253
-9d377586e10f5856a88893364bc6c45620402ac8 69c3e883e0ad67dc9a28e46955db77824bf7836c
-186cb5b5eba158394d7b8f8ee57edce4ffd163b0 3ef03c7d119070662ae5e517b3cfd988bbab49a4
-31a00dda0f203be8e44e62a64983cb255688158c 35f67c05e4e91d360910db3040702826f64e0493
-48d2e012422d296eef7b211172af5e1cfaa75488 946d26a33f9a9d66cfd58220bd95d128fc1db4d4
-5cd1c365670f4656c77319f18a08a81fda8e3ba4 d40ac9dd949cba6dab1cc386da6a2027690c2519
-eac5bb41efa8db44d0b67bf4d8c0f1c5c9587434 113ab93f8fb008a76c8e23d7667fd80e3fa883c9
-a754e561050e2329952240a81e97fe59eadab63a 113ab93f8fb008a76c8e23d7667fd80e3fa883c9
-a8d04feb89bebe93a36eeec58af289da8d4045c7 3f4152bb7c350a3665419a07706695404724887e
-f05b8c16917a86ba7c6ff321a415b2ada7e52445 050e8ffe42b4ce97512c8de6e182a39f4a5373d2
-d3925ceb9b0a729b0e48229fca8228c79efe84e3 c5a4c4babe3b1ffcfaf6e7a9a178c79929cac38b
-6e8d8f90aa6035dbb3f1c2d6c7e002bc68a3b2f7 c5a4c4babe3b1ffcfaf6e7a9a178c79929cac38b
-3b4ec40ead9cdc91df712fcc1731ae1e6e0bc188 cc5133df54fa99ba9c7aaf45ab1b8a2132866d4e
-1b6866afebb36f01e02743e4158f1a4c35bfbd71 753e7c2857bcfe454f97dd941e2ab232f1922dba
-d6c3d16f3beba77525d934288adb389738fc474f a9d7438ddf1fe8e49ba2b3ceb08670b5f983e36a
-83099f3a6f05a0c681f58d9da6af58bb2a355ea1 e9d5e0344b1250fa43cb09d6976fea92cbca0b72
-df552f36f2d6fe783c9524ea202033680404df26 a13fa068f23f1512d47c3ac0ceae7311794fe5d2
-b58c39256b84f81cb3e23a998634fd6c032a4a6d c591fbb917d15cec39379719e2165d9a1f7a9c8e
-fe01ce21a156964bd6bed557a9a18183d115835f e41230b8cb41fe65950c6cdc0658892a809449fc
-ec84a7eb633fd2d838e2ea8ee3056f846758183f 89a031510a21ef2e73a274d36cd8bc8ff8fa3467
-649982ee271362ef08d668eddcd68fb4550e0414 89a031510a21ef2e73a274d36cd8bc8ff8fa3467
-97741626f36fc1c2fbf077b5274f3053d474a955 4b48b20fcabf6719312c857fb68a1fa2f99b4647
-0cdf72b7bcbc0c664e33d70457bb67aa758be5ca 9c0863a9f33e6d1c2ef83b99801b37dc7e2e1030
-86b26a972c9adb1cb620951afafd56f0c48d167d 2699067014cd15cc0b015fa53c2854f3c6bb5c11
-ea826f6b8f8e5264b591c933bf6056cc5c2829d7 3d93ee457dfe14bdbee38dd29b4b77c280b7cc04
-38f67aa148e5e1aa1a3bba5428bbc5744536eba8 d18e427625989e3cde8ec81540a7a54c820478d5
-f090e0ca0c5447757705d434a8313dcf570c3e6b 720e4acc620979560812ae10c1d832ab740fe44b
-05218363ba762ebd4e9955c132605f4c49c76802 669b132b2a484fd3a7b4c5735f0e8691f5c7ab9c
-13fc36ab3be59d79c15bd47fe6b8ae303106693b fb671ac97b79205a978c0e9c8ba4d78871196f44
-657c517a13ad4abf031850fbeb0bf3e58d968407 b6356865b20f6a504f9428735c898e8e3afdad2e
-0c37a9bae81864d8c7203d5465d0ed31a8f1a340 74b45c95c0465b0f98b38d3067c56f3968cf2e41
-5586e971a9844b5e094e8d37cb913e4828660bca 74b45c95c0465b0f98b38d3067c56f3968cf2e41
-e33d4d12d97c8ce021488a836ec8f9445e2ad0db 4e9706408b1485a3e95694da3764a76561eb6277
-42df31b19658801ca90a0c01390f355decba0374 78eec2281c99dc216b2423b030ee2d94d3aa2c85
-f6aa51caba638345dd02bd45dc1c9e689b3addec 78eec2281c99dc216b2423b030ee2d94d3aa2c85
-493ebb889da5383fcdf60d8f2161fcc8a5ca4d62 78eec2281c99dc216b2423b030ee2d94d3aa2c85
-332f4fe8cda7000fe029ae5f9bdbde3abf73a932 4ad9ac5ad4083972d8ac7420267d69d9c25e039a
-6606b9b00c61cc838509a0fe2336c90def960082 4ad9ac5ad4083972d8ac7420267d69d9c25e039a
-b520ef21c3d147055106a9af0e16d2381228fa7b 4ad9ac5ad4083972d8ac7420267d69d9c25e039a
-2e82bdcff5ce1c4d3f48e0afaa5b03a1561f4266 65483fcac1035c116920c7436a6ad94d830b6fee
-eea29f32d234ef6cdcee22f2ea752b5e12b34df2 f5efd8c6473ba6b02d457922d53b17aea6a2449d
-77cd4a6652d3c841d79735a82bec8a615dbe699d 5cdd45bf93c07f24767e2f23e4a79df579e41b41
-cc2195b93e2e972998519651c00617ce0c0a36b8 08a4ed93c758951394736578678ed29f997e1c2c
-63a85a87c9cc4ee90216795418ee13ad95641a48 904eb911104be4dcbbf32b65d7ce36fa7d664fcb
-33735d7f23efc1d629ce15f6c2f12d59ca314d5d b3878b18294e3abe6caa573169229c0b3d2699e8
-46a6cd303e5b04dedc2a912ec72b52d4db273fb0 6abdfcc30230ee200e44fee47ce51313bbf9b2db
-98ff8d76c2b0f107a8aaed2c646145c5f459dde1 7b13e3b1e3fdc7477186d26866128f7216f7f68c
-c8cd28a31c15a85e16310e6eff66863508492060 d8c500c70be639b298acbc002bcaae2d206e56be
-aeb9459d746faf3139f7de2ccd0b084d7db109f7 257bb212bb247f4d103592a410d61df48f33bd5d
-a3822f03bb1c0bd3396ba1f50dbf80bb311af667 9b86e0e3ddc1376db9d12eb0664ce8a54c9db80e
-1c038795ee33efbda9e7a3bef7476044d14962c8 67a42b18b8205e273bb825f80386b14fe49c37bc
-a9b70edc0431fb630bb4dbcc3238dcedfacc1b70 30a37e1c84d44a18453d1d146711f10be9e670f0
-99db0872d060263881795efa91530796d8929daf 3b79a587310607ee8eb73b4a73045f3098bbdefe
-2e4577b4cab055abd91e3082cc0e508daa7361c7 a8724de849894ba563fe82eb98571e8e3296c9e6
-a597a61e3050976634b9fa57fef91754a2b756ff 01d835467faf267063e65b637ae718f6fa9c41c7
-f7dc9c164e81e60336c93d0ac8d2fa05e82ce91a e3369491ebb321b511eeca67c241c4aa472d8212
-7151cc457ea685d83741b6895693a0c578ecfa83 532fa7cfa51a1f1c75f1c08fbe67a79bb272edbb
-a4975ab6865949818d1a62014ece30bc1427a198 30f1d1e54c0798b5dbd56e14675114b56bbf8fe3
-07a0f45f49df62a1be02e3a1ae5d85913261dfd3 3198bdd6f733767af6f688f0dc92d07a214853a0
-4390f2720829efa2a67d76ea3f9f10800eeccdb2 487aece7d41c0752fabaf2a5136192c120bff54d
-03a232f085fcf89bf202801af7e128f7a92ccbdc f920b60890d09f21b1cffe6405e1d9ee3d5e0efc
-684eb037bac68df91fc1682fd1582909189dec20 4fc9f7eea1f27c95195e5ed5fd53e33c5f8523a6
-7f4f60a149e9cb586f7a334165ca131102b9a587 c9100d31e36b8df7cfb48fec676f326c3b239cf1
-5c176b20c36f1e8d233d54aa2087622a04d00aa4 4a069cb67ee314d9c48eed225c7e4c35b6a88060
-65b2ac8ac983cfa3b8da4648906ff36d9624a770 62ab3a60f107b2d28637191a162f9fd7a93b0c39
-efcb36604c9a77e1701859af71a51a605f90779f fede28e2d319b264779e527647d96116e72d10f8
-8918e7f2046f9cbb54e44638ec035fe62c0e747f fede28e2d319b264779e527647d96116e72d10f8
-01df1642924a4a5f6d91604d61f00dc69264066f f7eb111083fe298a445e380a84b1dd829116787e
-ad5065cca11ab374dff4eb866ef58c0660b75fbe ade31b10b3f5e10dbfc201f278230fb5e79000a0
-b12cbb9a92bf617b4f01a67b7cf17564e471b5ff 9d18ece9675fee649fbc891d210d5c65960b13f0
-642ca35e36cc8cbceac2b45059c89e4567469ed3 daec51d61744a0c348af6bc16a1182615e597817
-5e330ba108e54648472c6ab7bd2508ebe4d17262 ba3023cb36a5612fa9986423b2777d6515bea984
-7f81f82747331ac15518713d59339c772683c21a b0a0391df2df87b14464341ee8d27b0320d7b3c2
-593bfe9f4c15aaa7a5d4513c4665ebeac85021dd 4c7255b731283f8a6e5c30c84a6f43568229ac4e
-5f92a15fd4be39fd7da88b289e9528a0c870ec08 4c7255b731283f8a6e5c30c84a6f43568229ac4e
-7760d061a2552f1ad4b5b88ecf12e5fa9c48c4f7 8ab692020a9a6e4b57770c0d746dc014080e872a
-b82aa2b6aec7acc5e7bc23569ed82b5fc11c47f7 6c42a28a216a425af52b223fe0225954588f7802
-f9b4d7ab35cb2604d71662f98977f279a2798cda cf2416a729e7b2bd30012bf406033c7589600f14
-11329f2353a279f17b40e27ba53ebfa333859a68 c567553c9cf174afe2c56a3cb243d6829168905e
-eca31476e2efe0ddadf956d166d70ad796ae001e ad57f49754c700bf8ff30a1ad851fcf9c84c2340
-22f54e88d89cef43daf62c54900ef7ef7d1e0d7a 2bd6950f1f10d3af46bf6294375180bfba5ad1cd
-9ab3cda7db9dba90891a6892be50e6c336350c19 0df8849ba460d942099eb1be979b5794b8f851fa
-c3760735426745c0f99800669207b1beffbcacd0 0df8849ba460d942099eb1be979b5794b8f851fa
-dcddba505aba7e694857483ca92ce06ac14e347c cdd7a53b21ab9c9ad1733cf44939ec7b81f5f5bb
-1b3a7082513ca4c70fa9047e56dcc4b7c71c2c8e 3c07f8c866e07452eef24d5d4d9479739fd18b8a
-49d86e127d8b3056a77651c059392f675c3ea509 8e69d6c67a54521712a2a9a4d43d7d020fc4a999
-40eabad87ac32b1fe26f79c1de3456a5fb7d6cb6 cd5b784c49f49ae9461b4f0b52c4f05ac6f6cc14
-4a03ce2e59654554f599cc4a44d4e71093da495d 2f3a8d45b0493f4e30ca6a7a4cca867d488928b8
-0fe278263447947d7aeecfb60fdfce06c7574758 502f8f0f27f29eb0a84d70794d2baeb3a6cb583f
-4db9d214a3e6809658b517e9a24f7636f6e047ec 502f8f0f27f29eb0a84d70794d2baeb3a6cb583f
-4c0ad94ab8fafd08fc17b7d0db057bdec49351a2 502f8f0f27f29eb0a84d70794d2baeb3a6cb583f
-a4dd6d2f657a21cfad447f4776a1c99562b58c21 20432152a753de44f61b65a2d44abc4ce46b98db
-9a075bc4de7881a76d9c4e9608c71ad629558238 c16af028db9b575da540f9434780f46492832e22
-0851c40513089626aaf18d41714d0d606d78da5b c16af028db9b575da540f9434780f46492832e22
-928d710f546b4fabbf756ddaf1a4f6c28b3fdead c29b9d632e3c907af311aa34d8baedcb10b5e92a
-43e923a35918e03d221dd8dff3c6d9a3e67d5d7f c16af028db9b575da540f9434780f46492832e22
-1871b227c1a3dbfbdc9846ee93cd0b61843147fe c16af028db9b575da540f9434780f46492832e22
-d71d8e0cbc371eb5e9ebaad88676bb4d9cf28707 c29b9d632e3c907af311aa34d8baedcb10b5e92a
-c6a758050aacc85d43a53647bf42218b2c78da87 e6baa7d9dd71f85304ffbb514ca3d953040a5eb9
-038629f98b5ac8b21236aabe602ca2d967af9fb7 bee4433c698bb70096afc4d66f7c3872d84b0ff5
-9c987a39b11b2b55cd2358b6a6677a9e75664f1e b450df4a5ad9f15e4490a1ee5fa14f22aa80220a
-57cfd018ca0d802f01659697bcc15184f4434d13 7fb716bd0ec0a1449d7c4fb01538dd521bfd145b
-eb45c423d042ed2c04427317666b97a87f978ea4 60f4abf0159f704a78e8fba9cd31ffea9db8f3cf
-e1eac441f4985797346f1cdb04698279942e42b5 58e63dbd99a6c199cdf52a3ace1b25ee6894024b
-8cd9e71d5708e49707c1d5c020b40753465a0b9b e2fafa7f3b18a0e3a585b9ab63f7224328eb98da
-f706be2cdc9c03f565ed512824eff0d7541151fd 04acfb4574fd479d4766487f5a65a641d9d41a3f
-2f1dd50d2a7bc2b46b904d8d962b82175edd18ee 3343310b8d722d7be90c474001dc6712e16f854f
-b6020d596664c2652b3cfca153f41d6ebd49f46b ed9a458dc6988639055eeabf8e8068ede4b31c59
-e5e8e6572bd7d734becf4374639eff582daa9969 da872d79049b8b7f5a0e0b720b2227c1b0840a0a
-f8668b6e81829c650e13d881c383e68c061b8f04 fa5e78ab41e934e82b95c7cf66a7a60dbcdc99c2
-36ec034135e97eb7249134935bcd8c602b9daeb1 a6a30ecddeffeacca390fa68da09133756ec065e
-af5243be642f94219f2029cfc63b63e4df4fe12f f1d2045c38fe626ad4d43fc759cf10ccbb9825a0
-7d0d73e52e4dba2cf802b41d2f0a66a101b625e5 fea81a92e6a1a64671bf6c384a45e78e7a622f66
-4c78550ba572a7ec560c418f168bff19fe643fb9 afbaa1db2c249436a649c5fc3b402a5ee4c52137
-e9a41c1877ec7ccbfb230fe4db0c56d943ef42fe afbaa1db2c249436a649c5fc3b402a5ee4c52137
-e11afd686aa805628237a9e357475485a400ecba 2bc84fdb81cd017f09f7bcb3ff8fb6e5bb76e601
-f395109418c28e81f00479b727cada8fd64a9a80 2eb35afd38c958039fa8aa6cc2ce26ca57127205
-5f4e592479b65c4ec56ac7f83bdb405ff4654d37 382d484e45d8989ecc7d2de5edc33817929b07c6
-70d50ede02d3b4885aee23fd43a8f6c7c9e4ec95 248d02169198d4fd6d2d5d8d69675c3ad3ea50fb
-6711bec6685ee685bb1a38726c66fb7d8e98987b d26d7bc892927b6ed3634310bf95177001aa0046
-22185344aab67d961b97e680b86a6e0e0aa28017 553d13bce3ce86020748f8c6a581ee4f26cd49fb
-d117a2033e288bf0026145d33873fc0890864be0 651e61c75dac9d577b6afd80c815096a0dbc5a0c
-20876fb27dca18e65df5e8660025a8fa68177bf7 7349cb32e1c32c6b1046d93e0072ec66cb30c159
-3b82247dc373d2c7997208efb57a670179726703 c5209a3a49a1da2b19689098215d84bd4d2383bb
-a274c9b2ed357b577bb136197a0f3a2dcf908a03 8466b8117d6d7f6d1ec7988b6f10d9ace248730f
-10eb26dfd442e87b886953fefea13586d8ec9c78 994e6c4f387649a9addfce358ca1e200539f97fe
-d6279cf94102f2e0784dd728d9ca5f5e83fd6063 9f78f0fad1f072d9b8bbe9a27327dbce3161e95c
-6e358fc3e4ad150c24edbcef5bf3fb5378855f58 974f3875025f1fefdf482ad3eef8c337ae5589af
-2f5e04dd9980e39862ff7270a44f898e045b1cca 2530ac15d3199c565abc13084c9b8a2baf551e48
-4543956ee2d0e7e3938d3693dd1f4cbbbdfe88dc 193d8ef0e172d1ace8926517b582b79308791cf2
-8e89d3ea10e5570a2b41bd8d17c3356c88f514d3 a1b36fcabeca56bd0a292080eddaf58cb863e63f
-742e31acf158c6840503c216a2a7d0eb84fa9ddb ffd537f2d517fdcddee861f2e3c26128f0734ba1
-d1c983a2e1502ddd00b8f720e9aade34c57026b2 1cfb611976d64ddb313d5a3beb8e4c2488af270f
-a778b4d969987ff04104b853726fcc4c1bc1189a 950d67b5910667c8991c95a188951a013c89b7e7
-162edb0cfee1f1c60af46faabfa6e14daf6c7548 f17deef502437d62c5a3bd60fe6f23bf252f1bcc
-ecd2b1d9a14e19be2176c1d230d578e8602661e7 fcfd2234fd325ad9aef68da9801abb6345332253
-9db15a215697857c78514e8b2fcb504b1cffd3d0 fcfd2234fd325ad9aef68da9801abb6345332253
-a0a2a48a03d2ce94e72a7df81dff6f9cc5b8dcf5 fcfd2234fd325ad9aef68da9801abb6345332253
-b54fe9d85f9143fee2cc7058fd6c6a9c7d34ab1c fcfd2234fd325ad9aef68da9801abb6345332253
-90ea6ac729b2042a8003d6716d931b16f9932db2 74b45c95c0465b0f98b38d3067c56f3968cf2e41
-68a1e0d2c21281d1e2c6629959db81c7a87ebe23 74b45c95c0465b0f98b38d3067c56f3968cf2e41
-ffd5f21cf316c24fd7ab336f10cba2f7c480fa48 d8c500c70be639b298acbc002bcaae2d206e56be
-d571d324bdfdd5c9a0e86ad99eca00f90ce1e222 241f8d01f90710d2ec72f5ece1681d8bd29afc35
-a2c5b4a3aa13ea2e5aa867713815b7e00f1af8a6 4af2da85ce0ad808abc8b57bdb8c52b36ef7e62f
-f2acefa5c707741229005c2dbaa11ba2758ee7d9 49f3cd399948da321758eaa318a4cdf689258ee0
-0db16c497394952b43e57f61c01cd61e70fa65e6 7d1d3e6c978cbd94ee8ec771c2be27179f039c19
-e39a09a4a1f4a4f38f9f27c11cae03227e00c580 9c3962d7ba3a60285bf9281f4e8a4d6e7f93427a
-351ac43d8f8d995b95c7e5c6e1d49bfd6a621017 add5febbe6a613664b0813c74347efeadc536b4a
-df5dac2f1bc67d2434001582dcf97ad7acd4750e 9655fea4dc7bc69ee227ef9eadbf53155ca5982a
-5c0969b5b4137a10f9bd17d95be2fa0f90ac0644 b4e5cc577c1b76bee580d7ec02a422d048199d7d
-89f6c674ff69ad6a15fa12cad8da78447693947a d62272cf9b8eb62e558a69515359e0c73232e548
-c3721196d1b9f6ba9321cf13cb4dc4bafac84828 2f1ec368a58d4abc0253023173eb0421b64e1565
-f7525aaeca979d001120e1260eb8bf08e0304229 c75091707510740c0a79a0e23040b5aa00426fa4
-268444f6104deb0b150e80337ccd079ceaee2313 92ea7909c1675835ad31c0ffd8a7834c0fec51d8
-bce2b65851aa9e60e5a449dda3fd64207c3beae2 82589f89ccc7e7e62a6d4d7732322b947e77f9a4
-32670d655fd969995fa32a72f152ae7c4b3fa3a1 273f5e810d8ee7169fbfc610d6d22ca044296945
-47bf9284e91c772f8adb8e8212f7d398d22aa587 c223ed1d731d2c5bbee1e5e73fe201571cb721f6
-a5fbd8507cd74978052348e48a9133cf25cc8e3c af9a08731a132b6d4503a31da061a32199fab56d
-97f55d7abce64a2732ab763b475077170c752fe4 128e54e3433efba80dee9c418b8f8621e62e5105
-40bc534ab6f5f168077e09dde20d9356fd432f05 4a6669c6f07eb7d4495ed2d87ddb516ea4608b29
-c7e2750c595596e2e9a165fd5d6da5d32c4d5d5a 23d5ae0c2181c86c52002de68e79bb55b00cae76
-c0acc4542065001e9f6db88f0c1c39db47384f87 feff337ea83c085744cf7e09f030dbb8faac0d5d
-b178f1c2ff35d34fb61b8997610f1baa73defb9f fdbf5dd46a20610494920c84a89e0f74f94cb10f
-6c3f7af27419192bd36e4775dbd769cf19c4af38 bf1430be23b7fb37e6636213fd0834304b43a815
-8a93e63fbe4a3f3f385ac39ebb131a16ade1c113 8b182429fa20ea20129474adf1122b278d661d3f
-d83269b033b5edeb3cea215c020bb9014e0fc5dc c115696449a023edb03663663ac50b89435bb197
-b1aa090671682a6f4e5b5e3d8c1abe764e4f1482 81cc1471b2fca0d399b82c96a13ab9d6624d7d4b
-99dfe9128a8e5bba380658646d44bffe6eb92186 ae8079dcddd9cecdf6331ab6d293b690d67c6aa1
-f0640969e4bd0e291d9c8197b7358bd1468488a5 bb960c004deb87dc4469b0590154ad413f081d5e
-3340045ec1b1e4cea4851e18e84a5a06142ba6cb 10f2ab95ff082800df51297254245319ef26e9ca
-83d50f63cf0e8e5d520e41087cbf406fd2cf74ad 900c2e6052902cd64572ed6fec242fefb227cafa
-1455b441e84b8c9cb77d4c62a492cfbb82908846 986599a98f4274f52491eed936f1c3d938dc50a7
-2a8e1e5d797ea1025e30b7af86b2e5b6b428d166 f24b39932d142ae21196ad71548e495a3fd9e72c
-1f317e62b488dac6cda2de1d795853c55c582797 9c60f52e2fbb7cb2ea1fb9fe07c5aa4d6dda2452
-f59a2dacf50af947be3c520e0674223b8a4dc745 955c58d50107ca6758d754c715938df585709e62
-0d87fd52af9672193189b7a8f44a6538bace419f 048688670fd92582f8c952c034674b8f5848f6f2
-5568b2ca7e2541a2789e13886b41a6c8a593d4b3 fa2b1ed7778bc31b0a17316e6b8e93cc5d1cbe75
-31d5b6f47f472b25157f9b6df7116681e53e0525 81f252145bc52d40ee6fc43a1ff1eb3d8f2aa142
-2dcb7963c5105a986e38ec181b5b88c29285b123 9d1640b0528f3b44155281833fead88b6a43b258
-ab7fac79db96c3e43ee5edd4387b0d6f6cba0eba d5fc2d6e9c65076520b8e6bc02caf3a8909813f6
-771509d38af22fa2cc0b843e7e7c8efd26ca2829 b11e6a21907c130e09cb8be0d090bec26322247d
-49e2e35aaa849dd6e82277c55f3eaf19c18a1ba2 743dffc78ab6872a5ca6731b16748bed9c66dd00
-97e846af3c812c355d43f995206c35851eec7bb2 b48cbad60d7c7a1fc6c3da8ded11ab221bc7c978
-209ff0f960950700a6904656b270cb352e65ba28 eb68ad72e468e4b5487344d44366695b535c6856
-9c2f1de1227eb7ae490b9c9ccd554c86191ea86e 02444d2ff9525e765a8f72677ebbfb79b8d987f7
-ccbbae18b38e088b75037bedd0fa1b112d340d73 e9ebc215c25221dad8021e8f6b2930519e0666bd
-be7aa34ea691b1279ba5930ff5b43b7f5055ffef 11753c27714feb7eea5935d8d825c0b0ca92e2a3
-5a68a657c8568e40ee04579620fd7d333ce1cb61 0c478b50f23c0362253bd405f78066bb5c512bb8
-dfdaf011e2ddddd247806d9388e03e400e71a3e9 10f2ab95ff082800df51297254245319ef26e9ca
-d9f68321cbf2277294813288f86f9d58a7faccc4 0c478b50f23c0362253bd405f78066bb5c512bb8
-81dd6e19bff6ab7e3650248d13974161383aef8a c2313bd9d53bb9f47762a8d0d691a67a8918d08d
-a09e1c8054ec1e73203de337ff9c94d7fe6e46dc fc54ddc383faf577de83656c53741f7f7e38c5e8
-36d9f0082c2dbad11ba1e6959baab70a1b84cbf8 16b0e8a45af051db62673984f740f16b5ba7d448
-50bcb4767d25de7c6ded22507fe105637de5567c b702744e6eb4c1d7a0baad4e5a61ec884ed68df4
-a3bba56bbbed8bca16bd79427b16babb1e99f0fa 4ea8489bb26c73ea5f68d1fd2073ffec432012d7
-9e51c0ca1463934f30a129c480323bf2defbfd11 b225e9673ab7b1a6e47c835a77d8f15b0d1bb880
-491d18176b953d8d7ad644e418cc45e80ca49564 a1c83a0f9d9e65ef2e224524df6fc8c85baebff0
-0d8f7d0bc402403cc31ba2f88a6a69f99cb34ec8 fd609d7d378c7f95c23adf040c504edf8dbbdc5c
-bf0ca4d1b788ceb6a1590692125c46108028fdd5 b50b60cb09d1cfafcfbcdc1101113e39c9962fc7
-eabb5f3ecee0588bf9998e06136651526152b1a5 860a7dd886b62760b2ef6e90a5c67fbbbdc7e651
-abcd3fb1f9082b0aa30d2cd2c5858e2f3b19a8c9 426181673c56d971c6fbdfe3045cb179d18e79bf
-8c6889811da99b79a05258d7de3b00a967554b05 a66eb583f04df127c1f2f38ff049932c008e22e9
-fa2b3f86b66c222cef3c31f0e4f4adce097a91cc 03cbb6cbf17985a5bfcf586e2ee3f5c2e1246d67
-a565b184ca41532b078ba0567dd2a0994d067d5b 37cda8dce2f2cc9b91d07fa5903ae338ae989412
-df150607132d75a0dac15ef4bf719acf37b99857 1b7b3a01900598bf5255fde53d92ac9d79d21f20
-e8f38a10e08216fb389d02c7c44a0ee5c582741f 5be4dd0e33bd6a1dccedbc184b611bc178a48765
-a9296502e3d417cc3061d8a1227d548686803ef5 1479a5b8a73c2cb3d0188c6f064999522fff0f2c
-00a1f7ba8234cdd6f8536eeaad2bd495cc7bf6d6 bad2aae96662d6694c6173a8cadf42001c8740ef
-45170e11b57a88e16f51f0a944d10ec2d96408b2 9d81eb477a1a26ddcb3d3f33cf47045ac2ec4f97
-96fbf24c48f5dd96c7aaa9c3cad3cf32b4d27e7d 37bb09580b1a45bfa66e67d652c11a907c55f514
-9e8f0d1382239d74c3cf3b77c90746b91c37132b 1a53544a8f6f7563695e901384d0ddecaf88f554
-fc157d5a629f10fc487c8fec14cecbbb856b6f48 e473755b7c2e31c8182e92db7489702b89e366fc
-855c62e0b4420c9a0885804bdef1b0987697c564 3e4074a580727f013f439af7ae5c9bceda59db4c
-26a128d90316f311abfadb1503f35e0555740827 3f3478440610b7ed4018e835b98ce58768003761
-5f4807b54568cc4cc9a29f383d5031b270da2d64 fa80799b6d1d898eb5e72b6226126552945d16c6
-b567d2613f1fb06b445ad51205fd23a3b2195bc5 1c8a5f72c603da8c544e9fabde8d48c0a050b17c
-7b78c80f1ccd43d763d6179e85dd5af3868c6dc9 004a160faa2da75d461e348f2caec3110712a312
-cae9d650d1ff8228f072e7fa5f150a9ee58fd7ce 5a445e3311ace1ebfeded4f469784fafbcb138d2
-d7b8b2c0db96fa086041afd0fa309ffab0f3a5e0 06f4dab1cf26829a3f9179081a79100b7738e646
-d6f3b5b9f3038fd078ca207cd510fb2734e0d277 70dbec75a7cf83fded2c32c7b9f751e3f00dcff4
-e1658ba1cbb2794647f1bc8f79abc35f93f6d018 31f42b01ab3199bf58705d65a0d3456b7cacd07d
-1d4e0667be3a28414e27d5ee378cdb9caf26fa8b 506d13d00ecb9abfc8559bf6735e7f4b30654694
-b43247715389fbba9a803b25951443179191a008 6c7261882e841faa168297cbee816a02d79bd85a
-29c4ff514ac3291948b64a4f378be8053843b279 4d20110819e919c153c4b0aa17a11806edc6715e
-ecfe0c256893603920c04709c75153c50098e3f0 94d1ff392c1d2c483d0bbc473b6211dde6a60bd1
-e2b15297a871cf526931f5075c82ef5c0af8aec0 62769a4c267d88c5d7c306ca332824e8a78c2d39
-ecaf2cda04e5b31ef99b07e008d02d996f517742 c5c89f8ed6435802bb335deee34dc2085d7e887a
-e72ce841239b8b1b2e735415ea30d47e1c1b93d0 4b9c84a4c891c273690bdc1815e1ce020b60ddf9
-d1f67c0df9f720fe6c564a8b864a2ac8d36438ee 21ff460d81a59da7e5540fc7a72f81e6e24d60eb
-ffc529c8054d1e3b4747743ea3ada1cb2c9b7477 0217f48d694c1e049280c5bbb957550666a1ac6a
-1a4aa9bbc854f6a158d21b10e55ec4d2284de0fc 38708c55c3aeb4a6f24d531b04ffe27dea9c372d
-93cbd867a34c5c85d89d9f14892df36ef6587daa 7a6b9879920051e6d86face7d759ad7ea8d1c739
-2a64227640d0feecdafa3f27ef9ce4f206eead64 0d6ccd6f63b0b4d0cdab9b22d0f98ce58f4b3450
-12ed39e9f03825eecbf2b2f5b783011d59924931 3368d901144087243741522b7fa0e3b36ef24ced
-9d203422125e5adb745c88cb2d82264e5b9a00a4 638c8d6777dfa41bc278248ce9ec90383f4e928e
-e0dc24e45c3fd737bf2ee38174fd0a65a3520d44 6f4348497ade321c8fcb7fe0c8889ecf7103632d
-2fe6649fdcbb4af93eb35b06b6005da58f2616d4 8adc79cbc4fc8fab6c9e28f8dce24deea677d33e
-b6044ab0ebfbd3912ecb2676f5f793c798ac7258 f545d323d1d58a72900d54402459cafe8b0bde4c
-bc41cc8b94ae580c16ce30431054b88d3bcc0110 622b5cc661897de4eb84c92ffca92ee2a07e4fc6
-1bb2f67550d3008f60e369e774363ae100e39a93 3e2797189542ee21da50a20cec4f173a987a0adb
-0d91b51b7ea0e4d41d01196c8486508bd14954fc 210b43b39ab015acdb460af35326c0301d8e8fa0
-f7c656a803bb9244e88457b6926f9f6a9fcac233 e08ed05ec0d253100df6b2f8eceeb137e82d68dc
-d10ed82d478e7bc44adef7e817705873f3fc11b1 b836fab53db5d7d1b790291e1cda1aedc95ff930
-7ad524a12356d3d6b21df07301d3adae36600b4f 9e384550c3718778e44661d205aa8a269c77428f
-0ce74d30339abf5523823926eb4fa986ead897a7 aa3db5a98fed132aef1005b7b8dd8d342d7c46ae
-9d71c82a7eeb0ac424b6e9ed9674f0ddf9a0876b 9a577d8e8cb80e732a0011e3e198c61a1a2714d5
-ab91dfbef876813fed79496f3510a07fb981187f 423d7b91932960207d5af6de2fcd5cb33ca059bc
-e38cf58a01a99bc87c9d2f4a72a5bf901c2c49c2 416286c0bf69e0655312c0aa4fda3870fc565542
-d79405a930429caea7c57d5b65b222dfbb0cee52 43669ff9b9b3a42a7f45dc306831b5a424148ad3
-219d82c8a1a90494c847daa03c05c52de7f0226f cb5525364ba2d59e728d7182547dcda1622df44a
-f242086d834901faeb8033975526cf480622d6a8 3d3c65458b9d3a00b0b4f3a5d990ea5f3af72999
-0d36e4ad418bdd90a0e29f1dd74b0ca8d7c3de33 ab208e673396b3ddb66cba324475e0a93074f945
-1fbdf69a3bea173908abb30b47bc1f92f285ef88 1c66b61496846b2119b7f1983c2a522d24359002
-b123de2303a66359951d40d228c2c48941935584 09eb5f54b4ec1e26b3a59069353f616429eb3b8d
-6769421661e8087f9e2d34a379e6dbe1f4c17672 3d8806dac938e90c9b3cdb78169aa418a0b48443
-e4274ff702644c1868072bce1be066714631612c 6f8111649c318bf24f8946057b109645d692031b
-9aae77ae78cdbdf8adf60f2238ba2754060b2024 c64ec36e9ae23ef0d0e465d11baeadb48d9cc5d4
-e00347b16d96abebcc39ec2c7dbcaf8fce0b63cb cdc7f993cca017738d8ebd006980dcddda1cf335
-d5dba29a667f3183c747d470c1852fc10763a0bb 35a7e59047bc79178a5a6e5397ee6d220e1cb74d
-f902cf7fa44c4b5108abe82178a57c22311e443b d2b79ad54b08a4778e99ed86f02504b883084b73
-a7bf90cddcdb8d79fc3bba86457c55444c609874 922f0cbf32a870160b39fde26504e788aaed752a
-8d83f81a05cf899cef881b85555d0d3ffd5287f3 e01413540550e39d27d79c32b32fe5a18d9f1196
-18fb45ba82b817c8b63b434694c76c450b4f8841 3c98401c05db14ff97eed45b680fd9014a8fa8d9
-c61bd0389b004c2d2371a69095ef6f56d23ded49 5f57c1740d9b8fff0fc85c3eb3fc8043c2a53131
-2eb1f77b0040bd0a7f9c3b37317f0dc45345fd5d e7fbdd0cba2c9dacd96af2123a8a146f75a2717c
-e3049ca4604d961e99868e56120bdb7c7b524f03 6f326bf3e998982ada9a6be5fb0bd8876111a667
-4b4d611ab63b3eac1bd65f3b278232081bcd5990 e0d08e17ed26de3d3df79af7c0382e40972f8b3d
-ce907e464ce5ceb82564045591e563baed7a2eba 0816380914b57f07420bc93505640849b1f0ebe8
-4b98626707636c26d67599def3d433962b95570d a9f3e48f2e0c268b755770cf174c1881634defcf
-a0e26786f938f39737adce18117b58831a7416c9 fe3525bae72672683fe92cd4c069ef94f512886e
-57670ba7e868e3bbd14ba1f90b73f1f27c748311 0a0f850ccceabafd83465182acfab370c0ee8394
-fd22f6005bc651376df9269b23b77c2841a5dc5b 0d9ceba1a6c33541fb47137d85879b97827ad228
-ab505f1fbb1e67c5b762f76fc31712636f92e6b0 0c93d9d0a09a21c882b0d20188fbd9486b11a279
-7d5519adabee22899f21363f4c151314f5709396 6bc7bf9c599bfc32897b2c5d99f2d63ddf740d58
-0ad03fbf0745b0ebf378718b3b97d78ce816e974 344a754d36aeb28611a8b785ebd0a79a838226e8
-524e55f4a4c6953c8f2f15a4c611f28e7c876e53 3a59c710d1bed56c5448da38f17b8985f3e82c2e
-6fa3db1b06a6f059ad0f854937c709f66e19fb83 e38d7d2bd571388805cdc6a4227e0ec9c2d4ec15
-0a223ce81d014eadc0dcea56faa62ff8d686d35e 1483b63d9bf046f6290a549486faa89622900de5
-d138da774e89980455f2fcefaaf5b629d57ec285 c2e4628b54c10771b395a654060bdad35b53ec9d
-ace76d23bfda7d9f50e05896e7b55b8d0190b1c9 141a7d621396be1dd1bafde585ca033dd644cfd4
-9b3e061d47c642c41d5c3ff5eff418148639938b 89730472a7279935a3c1ecc7939f3684c2404373
-ef2888e3b72dc4679aaa040eb86d7f708fd02569 dac90b58874570aa74535e7b80f2384efe999d5a
-da3e1ca36589e13f9d25d60a8bbdbc4bdf78392a 83889b84022646f0e3170487c241e97990b40d12
-09e808b9e48509f03ccb60bf82370136a6a91562 36e2de50f7b7511ce95bd2c191f2e35e672665b3
-65caf0c3141031e0065b5e7d5126cc284f81f896 187020f9bbc353ac5f9251cc18357deb69cf51b8
-73c8fbf508ba1d4f9425c4d57e0caa79bdc6ce3a 3e66e037743a7ff971f078c1544856289ac4c9d9
-73b3f679608b32cc04fd3bad99b0186c1e827553 e92dcaf33fe76a417020ffb77410b98f51c7b113
-61fcfc98f14fd4aa1e5f940e2938f31c23f54611 7e33d0ab3d35eebd4be2ce29fef4563ec8fabaed
-54dec4a783e64663a68f2f023cae6cc74af95508 3af2b32d8e2170ef4f3daa075ab57c123b84759a
-9919ec1529c828f8c4951555a49486592bab5507 aecb5dcbea3b87944e8925f0dd5cb9b04442c4ac
-1147788f15c40ac4cfe7dc046df7017b600c09ad 0bcc4a7513b6ac2fa7d5e4ae0da995431fd44314
-9f2c22d052b1f3cc9c8cc03345de61dd9abcdc46 a6c91e3f96f90dc7f63d8f59f8bda6335c4ccb74
-1c59c81366d2c568c3f1c00dd9388730db69764f cd255fb45949b0c3f4c1910835a611b17abfee88
-299befe39596217dea052c9b1667154f26be5277 a3e3442480b19b6beb3ca8675e172c621bf7414a
-0139c3fb161fe06bc43591707b193841f9d23645 4e5e9c3b1c4cb4253837b0e90e433adf1b614a8e
-c122d56703eed92ebadb3b28796db6ee5f875215 912fa0fc03db108247937c5410eda7af6008b3c5
-7c68a23b832f75d2f6983f82b27b662a8686066c 59545c5bfe1b2b356556ad413e3e57f14f188323
-368658130581bd17a0b27a10d64cef2ac4ef1a13 d137ae1ff4a3668258cb1b65d5a51b7e344a42a9
-93aade55e17c9d2e868603e8540119bc87181f1f e488ac42f85fa65c8f89e5b4224b7011cfd87445
-924950826db8e1bc69dd61692e1b90ad2b3e53d6 c993a5ee284131ec47d6b698a756799fc1e8c921
-efdbbb808909d16903dcd881d3de41b5c1a595bc e0ceeba56388185acb28aa537cc2d259739969b5
-36bbbbbfffdd7125041f541993a351bc0cdbfec5 720ef3a63050a334cceed33a844c691aeb6d13bf
-238eaaec15ece5abc2b8d2affe58c33fef1f2f9d 1314789bf8d55c36b1a457951c60a4164f0be127
-34e3ea83fed7ff1f607cf1f0381560923dfe05af 454a64cb3727ac381aed21ce311fe42ae2f452ff
-fce74d06e12bbea95b5dc0febe8a6cbd4072ca16 f94d71bed3ef27a1277085a399c18e2d8a396801
-367157f74856981fbb472eae072ffd25775fd33e a53096fa2e4e768331e10a4796f24ab486066fd7
-38118e38b830d99752a0bd8e126f47a964f63bb3 cba2d6a31d4c8dd89ee7da87960d15ff6ec9edf1
-55c327edd8c95cb069505812ffd4f8f0ed1edaff 0de3706aef6af798bbc71a42c66e008741c11cfa
-fdcda6c208b422f9a88462ce3212e8efb932b278 d08fca3030b2f0e4af38f8cd78ba239e5a771e58
-20922facd2a4c435688b41631a63faa4c786980a 8b468818cde5173f1861b6789108d4887e0d368c
-750a77f9c0b93c7f5c2c4f41833fd488cb65305c 1df60fdc51d4d763839b63d94a0993de680b4356
-00ab0d463ecd9947efb2b7fa9ff4bf2d44d19c5d a64c971f3af42b6e050278de91c058670cfbe058
-6ad17ada690ae721703c71719671fdc103e51568 4bb385c071ba2b4ef5b03f9f89b891d9e29ed7d8
-ce5b58964115c6a51a452302df57c2bd60337a3a 9629f975e7d3f963b8dd2d6801a3166a7d4f1970
-a24759a978bfc6988755239c6321fbd3c3ed575d 1d0008e219f17b261db01f4bb108471879bbd1a4
-4921540b09cee1f7cbde361e3348455e5342fe26 d6642698ce419c45094c26d870bfd873e58fc274
-c63436907d1c9bc7409ac77028a9655f317e43cb f78f7a1d8dfd7f6b51f29e1277bc9072a5a542f1
-2cac3d11657f9e91b0fe06c632301d1a19082ad8 ba699c7c8739ed950ef3a4099565a67c29126d30
-1e5ce0298a5e7e5b9f4d08f7fce95abac455c939 1f3f538cc90dd758ea651f9b476bf0ac4a8717a7
-69229eca385234b6150e7aa1f49b66fedfac430e badd2571b5a9a5a1416973c6e23a120ed80a5bac
-60e2be0b000afbd8b8c7c803ae0129c16a5c3fa9 8509e8f203f40a2f8c7e10fe82beca7dc0a4b95c
-5dd55a1032c70c9be0780ac5319fd5cd34d200e7 a4a90058a6c1622d7e64903b434f2a6ba4fe889b
-755066c0b02c2e5ab72962105796a3b0edaf8ab3 0a5a27c7a4a3dcb34677538acd2b729647cea47d
-cdb70c4ae27213bf25b7ce8462449065090ba31d c513082fcd5a7aaf54e42ef1da9b7e035da2b0e2
-da667bfb1b701e7418d6b1b7027e2a10eeaed18b 3ee173f3c25821b5f5b7381f09526f7a7dbd36cd
-af9a3acd7fe02178aba1fed8e7c8549179955f63 48ed5d6b1b55ac395554e526d7ec22532871e80b
-df500e22dc5982297a63bda944a35aecf15f664d c6f7f71cee786d563559c026565d63a0866f2b79
-d3dd0aa1e575e6322ad7f50df62181b3492be1e5 3836b94a4088c2fb38eae696cd22c82853f78f3b
-175caf3a16ffd4da319d55a3a280f11adae2045f e9ea785f109c120b32c22d67ce9188a7c3ae172a
-184b06ec2ef27aae0a015187882cc4239e73647c be340458cdad0af45105a1e08164f477954b4305
-ba55d96e00febaad89f7f9f9c828dd86430cdf2d 610197a21b04a89070a6c150c0553423fca5af02
-cd10b932805406c5f5082fda555c69814f9df62b f4b9515e5c318ee6533e508ea8899a28aafcb3d5
-d63247625e997e9a0262773a65830d3c9ca132a4 ff294bfbfccc0f184346917daf395c389e460029
-500ed19337982e2f4a114aca89a7e6b5481e1f38 808f0ea2472d224a143c08e585e7ffe71af6fedf
-59d4b29bc332cd02613286500ecac23ed4ba22f7 33a0eff9c59ea1232fd5fa770a4e8d2b9f455f55
-8a775ca51e2e66ac931a9d8f62aa84281da1384a 80972b58c82d267658ff6785b27213fe3b11612b
-28a88e0e10cbb4335680165d3882529cd500fe76 ab88820f8e7bb7ff82b7037615ac1e56ee2f7fdd
-3f14894877393db4b4b57a5a730271bb848b241b 7bccd908625462d5c4fa78df8ccb45924ab11195
-b731975ae15fc793dfcd5eebade342b42066e87a 8379e4641e773ac945df9dec9d4003bb7b5e3cbb
-4aafc0420860cafec3e74aea39bf4fa2f4927cb3 8379e4641e773ac945df9dec9d4003bb7b5e3cbb
-b2b2c5398d30243b4ea01da5fe90dedc06809d8a 3933459a9e2b114e78f4d07dbc6c84e10d3e8b64
-e1552b29694ba62cae002bb356a743316d33e3da 51974fb2e61eec865e75e2e287aebcbf45dc4379
-c70bb7af0020091497e51b39dba0343d53d97080 01776438caef8171f1986b2987df8bd7447be721
-663123ec47bb2b91a40c664206f6cf4cafee3bb7 1a7f42d42afcf90706e502e77475f0bebdfde77e
-ba685d5a985760cf3ae72aa1e96fd45d509daebb 633c465453a9840b458702956ae1306b36140e7a
-e66c16cf812664d073d8529d7cd6ab2fb8f0ff95 ab1e8fe3a246bf683675591ef8810650fac728e2
-2b6996f500fe9935ff7b66e474bf6a8fec4adc84 2b11ba48dad8ecd8d3655b0a7f6dd7930bdf8a1e
-f13f1c4351348d3068e5a672f0f2b9c5058d7b2f 1470317a6292ec6b6e304b05478721e9fbaca75c
-396fe38ccddeac582b6aae2617042ce43d6a6869 b7c65a23d3fd614d8bc74575547b732f74aefa1a
-a48537502e061d303229395ec63ab156ac791a50 663b70e588575b32fd45c2b15e071e9a3157e376
-731ce0ae7a05a96792bc21e14e22f59f31f8a506 ede77838d451728d540a90aaa7562445be206403
-6bbd4708e923be2ef79759cfe118a098cf6c5dec db72cb5c24e791027b2fcb25376c3355e2cae671
-f2a5108c5916f20e051ce12403094cda17266a23 db72cb5c24e791027b2fcb25376c3355e2cae671
-86a44495c0965d068c2fa7b462717a57aa0d1b6a 29b904e2ddf9a21402889ec20c202a7bc81e62b5
-20e02aec535aa1be01c2dfba352fd86b98a5c65e cf687a969e1e7dd5351451d30a19ae56309155da
-748e76c8eb4b35ad158e848752e01ce38a5e29e2 b3832846c2a4ce6d26e8a5dfa506df217bd9066f
-84b96cf3451ddfc81a099c2b6900df081ebcb95a 73d2d2ae7a8fe0294e539af05009fa97541e0fd2
-98daf39740aefa55f87419ebe6f765a899cc9472 b8ada9ba825f696a673838a6c450138bbf19e7c5
-9100ad590d8f3b49d0f8dee7dec5b72e8794e312 11b8472cd3f65000d792db437abbc2e24c8e8af6
-79ca3de67dc4f0cb9598e2fa256f8b80da5b4df1 11b8472cd3f65000d792db437abbc2e24c8e8af6
-1182767501b2c17d821b6310a744cac33959ffae 569796ce149cefe844de8cf6b643e40fd213b84b
-22b6e91340f143a596f9fe9a2004ccccdb0a29bc 179e257435c6b6bec19baafe8faf62d9a0e49231
-c75812accc8f485b1841b2529c60d1121e97600d 03c1708d9fd1a076afd5cea9d87964dde1f3fd73
-ada9e3331e3b3656d14ca9cd1ffad560f3c5e25f c72e21f09ab27b9620738faabdb278e4db36c470
-505f48d1dfabd4d2252cd6f6beca543f9baa118d eaff41caf33933f834c2f92baaa44f15b178f67a
-fa4a0063a5c5b9d317ce44825250027e50a7f415 c54836688be4e2cff302fdd1c5cc21ec5904c43f
-bdecfc42768e22afd16961532f3c9c1cb9603478 067a99516ccbe38b354640850ff4aa8738a731c8
-53fcc9d002ddab455b20b0c3c4c2e3e3e2afafa0 1034843d9d6ac59c6ee635e73961aa9c381c91e2
-05589d0b680ceee97ac1ddcc8194859c0b87ca66 d7411b39c706d82b30d02c6372ffee22f1ef8d75
-bcf61612fc81f3d8cf39d23a872c48c3330c5fb6 f78b0c0ed89f236f138ad48575c79dad9b03cebb
-c00aeb2b7cfea6abe02ed6869b0abbec3c92ed8f e91053124c57e14e6f3ef121998f7fb1802e1754
-c98995e04c61f5c9cd32a10a42513b1b60eb6e61 af7ee734c57219565781e836535f76565675bf53
-bc61949befef6b47d38bd5be67e62544207f6538 91a64da92bf06e14c3536572a4d3bd13ac04d6a4
-628d82d003ff29eee77908486112b9b87f4b60a9 91a64da92bf06e14c3536572a4d3bd13ac04d6a4
-519fb88cc8c3a3e730bb8e8b29149cbaa711f850 91a64da92bf06e14c3536572a4d3bd13ac04d6a4
-a5d8a65b0c94d4edf4d99f4e384597557ee3b75e dc0110edd3a9c4ffeb9355be81570f29755f72aa
-7b81c08c038f73255fec36b43ff8aa3ff5947e25 adaa33e68b75503b220fee25c89f639d6b624361
-0b6a4c546d757ae480904a031fd5b2290b3e8f76 168c0e38e99442637a4969bc9b6b833d5ec815d0
-0a980670b20d6f30673ccc5a35b1466003df0b30 55962f8755ba4962dcde4a1180add9ee7ee7cd05
-84efa34095baf70c8af42c75a5b74c76dabd53fd 36461faff14b64ccef645f49fb3bc0aa85c9c2ff
-776659dcdc1058dd016db1e45b08591bdebc6b46 38075172a689ef6cd31d24de5311bdf2baf68f28
-b29d51cde24c798414ce8c5c810916e1602dfaa3 633f1df7e22495fd8e45ab22c4e6d9bfd9fa2d5d
-41f5b92c9ea63ce843146982b5e2801b49a7ea2a 3e2ae3ad006b6784fe75a1ae6cab5f3b66653daf
-4eaeac947e07e49ab732b45b8ae17a99a51cef91 641a76760ffd350e42339b421e1306402ed81692
-e6a7d1f75bd6f7132fce9851a592b4cd6e4c1997 71382d53cca4f2c489b4449b83a038b49084b1b5
-fef395bd39400ada3c143872f5d3c8a0b5d231ff 8632fbca7275ad950856c5790de2937311b1e627
-a3eb6179d1e56c2c15268b1781522f7c3b044d72 6678816ad72403f01806b552be75b1030a613588
-5288261067371d216013a02b741a5866045251bc ee65c8036418e3a3d9df8e418085623270bba567
-c0aa8271681bf92ba6ed9de86a12140601ab23c2 a8d2e8a9f90638b1de5645c8996243d57c6a2f3a
-4d3e8b3ed7e0df164d26c125e4e9fa283909ba6a 9923b3d4c10d108c92c3ba986f8e83c69514edbb
-bcd5eafd8e29f513781679d44819b420484ab519 974f3875025f1fefdf482ad3eef8c337ae5589af
-d741300930aac978ac109e234f2bc06cb11b300c 974f3875025f1fefdf482ad3eef8c337ae5589af
-17442624add3dfa566a49303a132fdfd5782768e 49959d5c09ce5a4227324c3d6325642506f3970d
-7dc16b5b1cf20831280a0165075f7b0a792b22a7 98795e2ae5a97fc32ca506a7fee568f9d86adc74
-7d077c75a7a3eee0e42341811de5a6650c3b0f37 ac0c83b8d1dcd28f72d11dafd6f8c1b45b83a0ad
-debb5b7567145f91bbce14344b03602fa60abb78 19b0b329166b211f7d326d5637cbf3b6c85f8992
-fbc18bf6bec37df98f50f8650f8e0d842a95618b b8b68f21b3cb1e9dcc1917deebdba865d7898f0a
-becfaedb5543c920fd6dfc211fd1ccb3ea4fc0e0 76a05c0d74fcff49da8a4322c37964ebed18851d
-59ec38b95bc7e6de7f9d4c43c7b27717f3649127 1cd72f055b6da9f7b260bd68e2dc3ccb80f69344
-bc93235c977a13c05a637136d165d836ea786d0e 54682414032c4f21589a75fc254f5703778a0251
-237a28a16250c9e2a943f0c332f89f256f5429bd 89df9219409df4767861ec2a302891418f8aacf7
-23664fedbacb1a638bfa28930a651e7f2ce7f9eb 965e477b6244065e3061c8a375aa481803e618d1
-59a619741e03477973a6dda586f70204e34bac30 3c5acda14e44e14ee6246b419cf74b069d814574
-c822d9e5ec369408deda97e464d3e4a81e1f81a8 7ed76e2bf79eec558de31ca3c1a853aa4f73fda2
-12dd95d17d4ed4878675591f1563ec17b982fe35 100623ab951c4812b947e1dcb91bdae4cc913cda
-986fff89bd4ab2c0821213cdf4a55ae6b27aa4ce c17230f4d6852e4cfbab7b2e8116071aabbe3c51
-f714db16d0e9bb54f974b6522d6de2fb4208260c df31fd3f5b261ee3493715527e24d754d3eac0b0
-70c9df8d2681ac46a3bad3af6ab751d30dcae0e2 fe7d7528ca3d3f7b7b5125c3fe9995ae38c3eace
-1c420d1d997f114c2106cad1f65d58d3ed14bd54 65b79d9b05607b974cd66daf8043e7b024ad9d17
-702ec1708c3792037302631c0e69b8e2d773db55 449e04ab6042b2523a66ffde7bd1c5b0d09b669b
-6e0029313f56511dcd9ba7d01f42f1a3a2f46d8b f18f631c81896338a1b4f19788f4c0b622845a26
-af361d8dbd0ffbc0e85e64d653e345d8833fabdc 4401ec1abada36809b4d22b947524fff0ee641c8
-2ea069b0aad1c0036ac724cea1283df92977917e 35c10431dcddfb24b24a2a902d439f80c56304ad
-04b26972fa9aa96ac5a392866dd4fca9419f3a61 449e04ab6042b2523a66ffde7bd1c5b0d09b669b
-41b0c8422805a1d234c30424e3626b306c856576 35c10431dcddfb24b24a2a902d439f80c56304ad
-0630543a27f769d3996a97dcc91022c229df37d3 86df1ac650ef0a3954b6062745408b33e054990d
-5cb5f6cdb8c2f442e8bfa4c3dcb22d8619c1ab3c d1fd7e0ab0a61d7b68c2eeaba4d1c1614fdb1bce
-249939572340075eaee05177b1d143d095f2e535 396fd0516265d1fff2627bf4f23980f6c327263b
-dbde18a68b53adbf108122e888619d33b33a5dc2 5e0e413dab5920541ff66a1538b5ea6bc45cb99c
-92bbef0b7696919746eb3a24fce5a6ea4d43e713 ce4db58936937a994f245c5ba6431cb5af77f0fb
-3f740344eecff5f48b639ee04374c37a165b351e e8df2f34b3662e7e6d99c499cf64957a9c531854
-59fe72f78a2a0140882e629baefdfedd76cb50c2 34a0fef14db21d7e47db50a6d9fdc9ab2c8b6c5d
-aeea1cb022756f3fbad33b1d8fbffc0506363f90 37ae0158c36e5b84ea85c1294137a4aa0862b82c
-1cf7224837af2f41bb3b6ed47730833f9c84d4bc 9d393825a8bad463a9e3855a379d17cfae8cd347
-363928d9c020358c9dae56e0dc8a917735295bfe 18251e43e415c480ac435b4083109473a44e23e4
-7b480d5200d470578a64719e73d0f423511b0f50 981a9eed3b41a2fb08faf8b47a86b909745496eb
-61f0527f9d85538357d34957a358bbfd4aae1d5e aff64abc2dcf35c0a880499deff9009635d9b775
-e876591c3cffdb01f68f5d2d8bcff2f3d1110e1e 0393c373d73f72ffc045a081a63b5adb62842945
-876331fd4d04899faeab70077775a22f0641770d 6d6ab95d14702e6f9431d26a8bb4cb16e88141a4
-832e81f40bb7aa304b654f81072606c847bbf928 c34b3b9237861bb8672e7330ca5640443e5e54e8
-d241f0b2253f8985cc41ea4047874cdc0c05b290 599145a9a9ced48c586bdaed4835fcdcf4bbc3be
-482b32e45c611ce49cc6f6ee20b07cce5017b292 d065426762c4dfa9685eabe0beb449504b6c9f99
-5f9b2ed11fa210852ab0287f2f3a8fdd09c9e01f 33c1689fd719d189eac154bfcb19def88a91204a
-6864e32fae5b76c6a70bc856a521abc8ff72dca2 f8349bff3f96a9ea644dca1d9e1fa6a2ce302b77
-78bcfe41dc10d5aef41805587de8fefdcea07287 21bd164f81c9d19ea16180568f1a127988eef58e
-dd1b9027278da6d7ae15a29d8ffeebe56baba854 4d4f32fa50e88ff1d12112127f086743864c33ee
-4409a32cdc55f1b5e08e96c77e2959d634fc35e7 c6b6a62d2fc8abc58b21b60e46532b305aa8b985
-1b9d4cd8ff0933f1d34b35d5f23f0b1d45773b63 0add0c98e8ef039dc07a5eb770e6743208c7e0dc
-69b9cde20a78f2e1b38c2d9edd83a015d2ba616b ba44297ff1cf8605ac43a35da5c133fefed31c9b
-b49892d6e9c9fa0ad832f96c59cc53065a5b2874 ce21cfe75c2f27f20029d192e26950769a1f9b87
-c6aff42f04c1becd3148e2d14b01e3ca201cae7e ac0c83b8d1dcd28f72d11dafd6f8c1b45b83a0ad
-1e4e13ac7887af2fd0394d43f55ae349efb6487e ce21cfe75c2f27f20029d192e26950769a1f9b87
-dac33e614bbc28d3a32502809c0ce257e5deac66 86cfcd418cfae34aed379a1fc004497f655e6ba7
-d7937480a4c2c010df98041526ba1b0794985cb9 d94cd0cdef213808cf6430aeaf36fa19ecc92a03
-cb98877626a0ce3801d72ec88b3453047712c5de 8318e5ac0c556eb428bb49814ea1a831ddd7ed1a
-a9ee5c7f5bab2ec8cfb7f827f7b40ff14d0e3ade 8318e5ac0c556eb428bb49814ea1a831ddd7ed1a
-55cf15fc5dad94c0b1aec6c9bbaeb10f49cc0762 72dbd88d25d83b322af1991e6221d47587a0aa93
-9f7fd46d516d8d93301b7582e5309a6547aa07fb 32e216f2f18e4821e506df2233a7398c4d521f85
-929b4b16ea61c8a242154e1873fb24f533a56d63 6c1dfa79775840cfe638a10c841c42a0a111cf5f
-b7d40ddc8141ec52de8494d41570127fe9c31515 d4b2f3e066e028fcdc839dfa02afe505d106089d
-0632630eb5e76ee046a39f649c08b86fc4094cbc 8816edaf52ce54f36a569ae5d5e18129b5e4f5ec
-49f9b6c5ff850261bfa9a0168dded994529f1aef ee2b1f2ad82cfc4c2e59976624f284748c586693
-b251e4a8c3f22c953586052ddfecd22a9c904eb3 d5e44301295eacd4f7aa69bb01a644940298903a
-69b6fdbd5923c139b491c22fd12b307a714a77b7 d5e44301295eacd4f7aa69bb01a644940298903a
-7c92613c11b5c87ffe5c8e6168d6483e4b3dda11 9b3de0d99b9f1384066fba4f53fee7efeb4ec5b1
-c08e469cc32b5d0122198aeca91e6c58b4ae0486 facfc92512641eeb972191d9d8c4437b8a201308
-6536653ef572f706e29653beef858228c7c019c6 fa7aceaa9a7441f6bb245c61ca3031ca191f2526
-b7dafc018c53f93d6f410b364f14ed01bcb368d9 8e329aeb9b3b40f91b3173e9966f94680105f4c7
-bc8f841d8b044f846eec4161a969d936730b74ff 316f3b2967cf5947df1f3f522f3f05b780887790
-3879e4b1702c5a5de804a1e84edf09a970d80a49 9d627e3530fdb8f41df8ac814621bacfe632c0fd
-0b94e1573db38a28bc1694aaf63547f20aa3d4b0 422f44369edfd090578072bc278a3c6535745f1f
-ee2e8cd19fc2f585e12723ba9ab1ee0887398a73 254dcdb9fc6e99da8f0b96adf61c9935ad049a31
-4860ed6fff0927a23fa85331d92b9c5275ea9fb1 1349f074b143bb3609375a9801ba892d94a730bf
-ba150ce614d0caf26b31e2b48b34491754c51090 861de68af7c4436a4e8fa7076c579dfd2568e49b
-7767034332184184867eb183a37285430ad33802 da22e92cadb833a149226704e8504ae4e7a09916
-30592b61e45277d7d751a9be7113024697b7c739 65320b8e2bb64092c043570f27319bdf98955a7b
-8bb55c0994a2e8828dbeb8b1a70aa8b83ec907e1 62855508123472d754258b21b1203e5889736c90
-8d2ba8bb62a55774dd56484474330407046698c0 14ca364e945a96464844b0e5e9a279612ce104c3
-8467bd6addf2ef5d11b06557c16046ce97adcb37 2948ff825ef311a2d3a6f4ee94d2fe000405e27d
-b8c6c7f8497cc0f17b8a0d636312e9636eaffb8b 2948ff825ef311a2d3a6f4ee94d2fe000405e27d
-6d79d4c86cd72cfd42d45b676b4ed1b6459ab043 f2c2f8fc539fc79c53fd1b4c64f10ee72fb0310a
-327a7954e15801b50002ad873808a0129b9ac8a6 cef43af3eba730709b5a8a3fa8a779696f4cafcd
-fd81200db1cd79a7e5d3c473dcfcef7db238e9fc 6eed91226d614ef54911eb47f0ffa4139f365532
-0fe2348366e90c24200bffd82799daa6b3e31353 2c11e9a9eff4730ca1def13daf2438c27943c83c
-ddd672ec364064ec7e7578b765819515311f0fb6 baca9e5b616b6372fc8d18da6adb3d4a61fcd5bc
-86c9cec6ccca2572881c982e9b5913d37cba2126 762a3edd1d31cb59e0ed05918854e58dd7335705
-60979d3c7cfec808048f0736038a452ea4afa339 bf2ddc498b67d75a8da3d26340b397a44700d010
-6fafbc1e55d1e0c2bb6e2a0e78f2b6d65590a71f 961e1ac0c15bc014f5ba469791b17682f88a254e
-098b69c2d92bc820c53d5637fbadca06ff77fa9d 5222e7bf9a876767487c0d229f59a8bc984a2b56
-0c096d3b23782e37b2f078fb6a0f59eca0dc314f 3c4d3cf0aa57037bdc2c9e22d868e568726990c3
-66aad97d2a5171b8e3655a2e3056dcc4374dc391 2dfc86883859f613f8e6dc743580b154a4670e33
-442b7eab7e31c14fa38236119f4078ac1e904a5a 2dfc86883859f613f8e6dc743580b154a4670e33
-92843263a905a04a9663dd1f64133beda86128d0 2dfc86883859f613f8e6dc743580b154a4670e33
-2ae50f2ba8858eacc0ec1b224adaeebf71aa3abf 2dfc86883859f613f8e6dc743580b154a4670e33
-73015d2bb4f305b347e7684636bc06b88cd51467 cee18ec2f0fd446c319c0f2bd425f8c7ffba7dc3
-5ee8ee27a5a2db63d498df0b75e10bd6c56ae259 22867e736ad25c9163789dc032d05b657b326c1e
-40c46b5efb0944bc74cf6c81d82c8794f38151dd 29c46d29b2dca921423b8fcb9c7877f28f5e6aa8
-2e44ac0219250b04df6a81a975aac997ebd79999 1ff756ce50ed6d92278f7bb0afd5b2704b68afe5
-861c5d7b235e9ca710b297c1e818ead3a7c43ba9 262a89a5cd91515784ea1d5d22562b1df8fb97f5
-8ef530a4060128aae26def8f41412747c7ef5916 0be0fa93ce7bebe1b327c02257bb6fae065298f8
-20fe258726356a71446cd33961cadd0fbc09556e 278141f412faac5f3d3797e68ed95700aa408248
-216df7fecda66870c02f53eb78d8224873c4dc35 6dd1698ba1ce26792c5042e69581d56fcc6e2707
-7bd019ecea082f3a5195ed0e9e545e1cd7002dcd aed45698cf97b65ea66d3969e4db093abe6c91d1
-85c42e6cb0eb340f8b1cf6bdb84d217b88d95827 f714142c5bd6e04480ce5f5e291574ded3a58636
-4cb6be35a1031f23f18fa04cdee06748d1978a46 e2c9bbad46967d5efc422bc643213f05cd8d5bb2
-c81d99d5ed8635271031a694e503c1bef30b89ce 09187729a9d0eee16ee7c376070d47f4fcde878a
-4cee956d9be8d7f34f5d9f4d1c8a8425f4b5cbe1 5ad4b0767e379afe5eb71494139c8dab6a299f76
-7f6254c28bfaec20a0c30bb949781b1cfa342fc2 6578e1c3b05f70b75f7316beb7270a403646eb75
-601f813ae59d419127ff8bd884bb27db26304768 c7ce9cb22652360e8aebb4e7257896c1016a37e8
-990e8c8a183c0272d05c76c479d8a363989ff888 db72cb5c24e791027b2fcb25376c3355e2cae671
-88f6d8aab0a0fb77302c3b1d88343f3b1fd426e2 037a5664cae1d5a0a390e880e97261bcde3f06a5
-7a523353f2314b8ff4bea830b2c2acaae29b96b3 037a5664cae1d5a0a390e880e97261bcde3f06a5
-583b179b3c2b62b64ca27d474ad2331d2f60ac7d 633c9927c7c2ff15ab32b3aefe23b1bd70f7a722
-c76e6c6a4d45d8b91a110c0805875008e9cbe2cb dc9dabc54b1ce1ad22ec2632b50617961ba3c335
-de6d09478adfbaf61fc095dbce0fcdb8c4419bcf 854bcd02f8c53d7893370b5c58da323fca516eaa
-e2002dd1e1b72fa522008861693df3d3791587c0 abe39ffa57a9e9f7fe2d2f140238f1269fee3345
-a1c08ae60695f754168c17bb35393defc6a082a6 1c64513780b496f4ce652f04470e1ec7691d9b27
-cfabc931759c4c8bc0461267d982b79ac3226b69 c352572b3eb3f00f48d3218603d98c3eb713d173
-f8dfaf6af0755e0ac323fea83fbaf585fdf1a593 939a101bfa9e98d42fcf801a9003e355e5222662
-284d8ddfbbe55fe01ab15d50fd22474d2f5f2729 f22177a784b54624fac0104f8b1ee0b972e4c099
-6c2efb9415292d02e2df6bea5bef7c1340f49e17 00ee0f173239960b5a2d4da58b1c6d6d565cdf89
-2aa6791a34e19079df0b1c807139e487e23f41a7 287982c3e93e02a4029d0e51aab13120b88cab3f
-c1dc6f43bb8616eff52ab766c23b3830cc1fde2f 62e8ccf8879f191271bd6f5ee908fe3e788f5739
-a09697c9c2d3153e3e3f8e7e494ca94795c2ba7e 99147f44c3b2d30291d99f6019c615320780ff74
-ada5ad7b70e44d2e8c08a5e94c2b8687d040c5cb a2e8f2fe4f3eac54dfa01cd9f0f72bf5ee38375a
-cb76448cdfa49c4872639907b91a69f9be851202 aef091353a23034c0f05110ae4797cb57fc9dd84
-bc2b4d5a4027a408de3e7d7c168bd3328c11e883 e48d699c0a3240d5a9db5eeadc52bd7e12ff8d62
-fe967bf2fca964107cff9fbe908e0b4538894714 8d82ea14d6044cf3b435dd81c7e521d0fcbfd63a
-ba9417d691c73fe7346274568e7c133f712b0036 89e9f5702bac436c1427e1527499ac4a5dbc2580
-b9bbc8a1217f5d13a86ce704c26344a909be59b2 89e9f5702bac436c1427e1527499ac4a5dbc2580
-281f6c5f103d7a67a05b73d87fdf0025016ccaaa 082d8a921ce75f8c72b77031eae2de4f735f48ca
-cccdf66f394da0976fb9610af32208177e6be67c be7707647758926c06ffd5fbd36cf56cd9e27024
-d1149d726edf2ba5c625a1a5e394133a53ca555f 152dca76e4d961b340e2092203ad69ae6b0fe70c
-bac8d5e499907ebd5a96766ceba220ba83b31be8 fc8f7e1daef4fd508dd7f153f08671892bb05efd
-8eae8696260375ad28de2d190092e59df3867ab0 b940104d674722ba9f588b4ad97e248728abc8dc
-367dd31e164c7db260054bcebf7cab2e453bc6ec 47b8952f53ee6ac252c792bfc532d5aa34fa57b4
-a9972dd34c7529578f3a20dc788234b41b88fd9b 7929a8319b0f52f5e0100313c39e695becb5df69
-bd8dc0313c12d031f5258e0690fe186488f44dde 0cb9579d5515fa22238bd1085adea0f448447580
-4b00a338cd0e99159044eb3f6fbdbeb86556a33a 16cb6d5e8f40312c5c2f584eddcb269bc0c0804b
-56cddcc84cf1e3299c17f5f7432a05321c69809b 195888e4367afe4542ed51bfb1d477ce74f80e72
-240a64ff143376a9d43482ae90c4ec6e414bf005 17d75b3da618d4db2953c3fb2135ddc5c24a9dfc
-72d3a66fc8c7a1e0ed4660a293d9763dd3bd0d7a d971aeaca3991bffcd3a47fa171638e11372329a
-dceae5224531edd2e7ceb61dc4190dfa7deee69e 8ef2974ea3055b24a143652b7b0d706f8d262022
-98d41c866708b9134f4dd4d3b3509b3968b77a9a f5ae8eb1d0eddf68aa7a3473bb17d17110183c97
-83383ec385b0677e67a0e61d16fa3a313ddf1913 ae65e556c28bdcf8f6a7583e013be67e63193aea
-f1567f393520e17b527b59d0fe8102fd2a95911b 0390a9d3c87e4440f5b093f975a87efac4446a5a
-1f7b7c1c88ef0bd9c073790b6cbd46611b99daf3 a5545db629cbdbdea50ebc2a573f1e753d4a83c7
-30a1234b1740794668fe147e83a50c0a130ab915 17d75b3da618d4db2953c3fb2135ddc5c24a9dfc
-d404ec115a7e436fdd36fa66235c02e4aae726c6 f9023b960a67d89366bad1aa7ea42c89afe2a8fb
-90402ffb83bda8a2c9c7dd0041877130da528ed8 adb4c8d0b846e564e1e656244196cafa6f698980
-8b76d6175b77f03238a2cdaa6ac56ee92041687f b9b676b039d8657dd74036e58a98755677307662
-8b1d73174dc78f9bdc3f556ca8dade262153776f b850533c01e376daa8e2f78072c12b06c97cb0b3
-4bd600b3749069d98e0ee248ef9865dffe596b3b 76cb92e72af3c7442893ad959e3fe0110d63f210
-1da4fcd2dac6f7739f36779b7ed74c326a216aff d5e69d04a21a9a6912f96b744242768d4b4fa369
-651c99b827ef8a2eaac741ff2d28bfa72931b606 da030b4651fcac4a79588b20da1c27b586a4e8c2
-2bad8f7ea4fed2af8305916cbdceb9f7f86c79d5 77451c6127f7f037944dc18df86ecacadefaf1cf
-e7a4182446a7c211cb215af330aecd44aca711e6 4109196e5ec4169e3a51c138e1e25b57fdf87f22
-34159d13ea46eb246b0e4be8c4412ef45d8a6572 aa9889fd005379fb03c8dd44c1c86593b252754d
-c370b80c3acd391be0232a52b3635288424dd6a1 dd9580fd9b5751299f821c2f7f4c2147d0bbd92e
-40421db2dc0cdb83af17452d33b1169fcc4748c1 efaf151e528aa59557e50c515c3cea4f81c5ae00
-39b7d16d54d1a7d56024be4cab678d02fc10c58f b387ab8778c49077460fafcb819db19e391a4caf
-3307e00046ac5405cc8b142273637a4f815ceec2 09bf22bae4bdc1a27f3d053442d067bc890f1aa0
-eec024982b516cb1828ac8cdde11280bd1414378 99ac1fb6d1923e1af65e4a7948a347fb0629f3ec
-a160d0dfb897a39f9d9e4a5733d7950ddfcab89d 630472b0b90453e557dc5828cd871de0ae60b645
-27de2d6a36aaf216baad66ef61b009a0f9d94056 cd01f94ec250fd4d70e6abc611acb7db89d1c2e6
-0c2a125fce6ea314c003c5e777a77762f0f82b71 f9283e976b5dadcb262ae5f2725ce6779f27bcf7
-d4479f4638ca9bae2be5d90c2b2deafb864e3f2b f007efbf14fe300910e70e22229ef74ae05cebb6
-b1bd99e7b3ee656b1f1ceb8339fdf7c352073fbc 23ec7d3bf61747755b6a6f87372853c174f883be
-d52790ef2c9a5dd2003d7734d32ca5aeded6f763 681c7b323f12f62e59e30aed8c5ff1c08dd1ffcf
-d729598d9ed868a00ccdd65670bfba246fe57297 7a3b919d950eb19571cb065d8c9132458a9ac0e3
-07bd92642fbefe85d407a9af830aabc84cfcbdeb 4a9e9a601fcd446196e72507ce91ec195f5e98fa
-f887a2fdc371c8682a03576285eea03614ea4498 c0bc1a0cc08b07918817538b836dc8e76239e4b8
-b2ea37ade36f92b44c7e4c34e4ce848dce084813 56d2da23321074d3b3aff8fbf7110fd6d6f0ee16
-14ab3b7f6f1ccdd501bfe639dcfb5c15f363fee0 803ca90cd40943a842a3c0250e8c570b5d130a4f
-ca3009dd40611aa00f26e7f190872e597a02f15b bbdd73848565114cf3508dc5a44d8590d2055200
-b94b40d94f270ac67f669d1c0812a015b25d5add b14533b1a40874de1826883587161dfe68837d73
-462cdc6e2a05e0c3141cd65afedcf12fe7cd0e3d 9a47318748d7c027363c1349952d219eb57701e1
-76efb3615b60ed6d93ca5efef6af9ec1585bd7fa 4c64a8b2d4e7e8d5e0457748e494affb05d66090
-698ac0866792f21441dc577a25304a4d54bee255 c977a2e793ef7bf67fc22b2ff441c55371720116
-ca3f5483a8b87884041b1165e7cd5a9f6e9cb954 d727854986254a85753753e29cfc9689af766edc
-ff5ce10edd69aba8849d1bbfa9807fe9a8637d67 019017929aeabfe7944f169832b74ddba423d3c0
-11282b98fbe68f6eb4eeb46c877d29029b50ae45 61e4389bed81c50a2663343e58f85ea0556f11cf
-569a2f503ee301032f7c340b3af5f796f4133812 fd805ea47676053c9ea1da4f0ec4e3a002b1c5fe
-125907f81d8f1ebaca9dd0d53342832b804b900d fbd7cadcaae4f40283feea73fbd1b5b085a065cb
-45ece11eb7d83f37d9b3514840c4e451540ec999 76e9208f0376ed04031a38549c964249214e0ffe
-fcc1a5f44ee8203d8f692fcf4b5e30da08a39795 c7c2ea5fd229f41888b0dc809721df1cc69e9496
-28786b97c5f56e8d71dcdd62b11329e90e624c34 fb39d8fdbcbb12600737193160bba8a20d0eb59c
-b4cf2beabd87b99e5899fb6f38f9cbaa752163ce 9b47fdbe5e51173d1382550574093d190947f8cc
-5c5693f632d476d8c3e7e65e293ae7706968fb1f 50e10a62c6956421e4b67180d1ad2a47551f604d
-e9735e3e9af98938b6f95755422433f6a1061b84 10dd14ab6a91c44a56dd84e998fdab1d7af16a82
-bd359ff636036dee26bd66a49442cad343d530f1 7448f9b7acc318c2597a84a32ad9dc680a056b9d
-63949ca833007659fe240c58aba2907735666d9c d2e8849597d0c0011bb997d62c671ff7bd8e4090
-f7c47ed58193b19b4337fff7d33c2286caece6e2 957a016e2d3fb8fdbf77606070a53a0a59818cf5
-4028abcc945752b2a4d00be43bb8051cb4d49882 b5ffb9d665732aeff9a021f5b10df273015c5fbb
-49c9461937df7ed7ee8fca234ad33749a7f6fdc5 cdc516231b4cb939c0cfad1361229cffc550ea9a
-85a5ee78bc03093976db536d51066306423cfc1b 1575911c7b39a5dfed181bc30ee05fe2dd0b97b7
-6c65ccb44c0d2b8806050b34ee68551795523242 3fa7aa636a123690cf43dc91855416e5892444e8
-abab49ae744f2b37b683671abeb1e139977bb5f4 9d5f03fcbc17abbfb3eafbcd097f70a6dc97a0f5
-c3ad9ab32597e12969e1dc00dfcc30260e8d21de 576c71ea9a2f2ebad2372728f61ecc3e745c77d1
-538c216966221b574cc97b16d03f75624ecefd72 602e3b9482076db39736db9b2e0c9136f42908b6
-43cdf436c6e5e9055efc60a5ca180b5132a0d2e6 e911882dfcf1d0394446193c0559792d076825b6
-034f4f0e7894f101093dd9f46472f6cdddfe7bd8 65444f12550051a3a76f2299460ce3bbde18d506
-113704d7de4564d33b5b115530f1289f98634d27 05181cd825878c663412ff4c1a03957762379721
-03067d2648a882a66ba4f2185d04807a5f685f28 eedc36fd4450780f107557674694002798b1fe0c
-b98f468049b80f5114a50476c8f1fafa66c09563 555fa35da748351b639916bbec8d10aa973c58cd
-bdf7f6cb58c072b583a114be5e3c7fed67df2f11 9ff6481bd611985ddf7c04b4141a7dec038db6bf
-51cd31773bba4a6ca183db2124682f835dacb4f0 15e5c350848dcf8aaa97901a1fbf7e1fb5e3a40f
-72ac131ea69c1b8c0be82b9c0df8c9beb7d8c1f5 db0c2a8a3577eab151f6c8f02ef7bbd25e7bbab9
-1540f59da86d7a54746ec3196af3c14a8553a6f7 99fc08ad9ce605b623883ed2e7e75390c0e7a783
-f3d0800558946340a4501b131196d7c950fd2562 cc2e36b2a6cdad165194456e558e9b267af6b1c9
-693fdcffd7cca5148225a1ae6f7fc8e8feb9b4b2 8dfcfcde39646c791565af8f2a1d9c83d61d49e6
-335da67b20bb85acdce02bb211d71ea0807abc81 9e88c5866734fa31e44425e4b0b236bc115c5037
-7db5ad3e8ec281eb813329a65f386e013c0c3984 479d11738d5cb4530093427087bc80b641e7fdab
-db43c5e7d385e888b767cfe35d64d40f90b22b63 923da9141bc2538347cecd3bc489aea72d717a67
-5a0052b1817eaa528229ebe769c556cfbe00edbe 7ad14e9532906057f6870fc2946e6d5cc37a8c4a
-94d1e7cca8734c99ed6d6ab65a3661c3fb3f90e9 b07ca4c6c2bcd960da41207418d4ebedb584b19d
-57d670ecc71d4f48d7d41210cdeaf1905a5badea f75182a20aae0c9ceeb38b6bb6e45d48dbe6f3df
-d0de4eb00c4e20a51880fd40275417bef03f65fa 479d11738d5cb4530093427087bc80b641e7fdab
-3956f74568f966722cd82901f658a6c884b229c4 f75182a20aae0c9ceeb38b6bb6e45d48dbe6f3df
-2ec74172952d59e7240fc52036afb702298d1300 beb9a0e0b6e3d2344909b18f8c97314535adc20a
-fab88cc4d9fb1d47642745bb289f033ff9d4c478 3fe364d527bccf6e54e92bda06d4b0da2ec184d8
-7f736a780f3aead7d63aba21956c6ecdc655aec5 4d0ff89523f4d99e9c0d24282590a2d560845fc0
-e6a1e774206a832016f91c4b737099d8db9a9d0b b51f1e7f3a9b0a25956f97c3ca8f499930dc2831
-51c812f6ee1090249cdd752ad880fe63f70779bb e160bb31dd3d39b5555ed18f762509723deb1b24
-3d691204343e998802522902feea1ddccfd1b456 550f899876559a0626e54881e942ab7b5bf27226
-3da7289ba9fb472f626e0c2cad7a9bb6a2fc5091 658aee1cc145c758228dd85ce9f410807fcfa296
-c44f012615abaf88f9daac66b6ecd3eb5ad84635 f3a63b188b82f335684e1fdba6f08ade31c0ef40
-64718c1dc0ea7a266149dd81d6929c04d63d0d9e 92e91616a8f9e15cdf512e34b7f36f3a2869a5b6
-9618c8f56668e914d86a5fc7cc1a3fed5355f713 e293f4348bdee211a359f580b812fb945ec80c17
-686cda2b74d80ced1b40dd421ed282e51bdb28b9 0a1266f460e5f9b0023f71895514e2087efa54a0
-7f2bd6921906e02dccf95bdbb6afec3e228f4f59 71edbc969507c4177c3c71e38071da32c68a125b
-e0b29c0765d70ece2ac2d2724f50b50f0c8116ef a219f05ce89f6d3b56c6bf240c7e283185ad7e48
-98539afc3f356582a494e626c47bbe3ad0ef687b 8be5702bef79c32192b700cda95acc4f87224195
-ffba4948abef1823c262d7e49507a3568f41e7e7 d0b42026e220db2024831ed9134832766fd5b8be
-15726f091fbb701fa0bc78c4c007df90036c7a1d 4f7518d36cfbfcdd7054afa7f2f2c8b634a92c88
-8b9141b0401ec4cdff5c1e81ed03129cec7e78cd b87561a148b6c8b6d8a991792f529170c39a9efb
-cf76f0a98a5cba8e6cc648756070eeff2e05fe74 1a91271844dd6bdac6925e238172541ae0b950d9
-e88c089d195b061bfe646e39ae27e674700fdf65 d40bfe2b6395676995cac054c3ece36df24f5125
-c531296d325cfbef4408ef86c3c1adc4e8890e4d 143263e3b6a4549eff0bcc04ba81fc4dce038f2e
-5149dee4800be6893d8781c7332490005abbed0a b4af5e03dc0dbe0b1db1e9afa35729666c29e070
-d2fb91d870cc4baf79401f2b4861f5e70f3c6bed b81c9a62c0488bd59c6c546f4f3851339301ad73
-018f95c05e5dbc129829f61e384475eb4694cb51 ba5e9dbbda738c7d0c5eb55564909a33f8410c43
-11b7897a141756bab37ee1cd0fb65a3565239e06 6e4f22d29ead909b30cdeb403f6e5b01e81c9d65
-800c55c66eef84c9a4f34e731ac796071e5dc185 39ddb449cbada428ce12fe0c9a4af20c7de219a6
-39fcb156e050009d4209b9f47ded638c9ad2bce3 4a9e9a601fcd446196e72507ce91ec195f5e98fa
-6dc9f56e6d2027600bd2e2f7b2b26975461844db 7448f9b7acc318c2597a84a32ad9dc680a056b9d
-8f3db070f2a27245ddff285a6452689e0e0202eb 93ee634688c2ee2e61b8513848d645804a999d0f
-119a0bc5b6cdf1b0eaea63ac69ff5830979befa2 9f7b685fc7058bb401860b751a8b9b066e5b58d7
-25089a0513c607d4aa935b632ac318c790e5d33d 1aad3d7ad4864623b0bde667042667f4937694b2
-82c3c23acf0402bef895fc88ee0479237d5f116e 90cdbd10e2a70338e6b8416a304fdea6943c1228
-4d231f60f1e62df5be90886f28a4ef1f10303149 0a523aefa450f8d4df68ecd854adbd40e9c86d75
-50188781b12ab4bca212c39eda283d8487dedd4f e327264e5ef54a449c0e8cca592e787d69c80d27
-a18e20298e3af47db130d2abe45f0b9cf91eefed 4d9b07b6e152580c1b4d4bffe9f3a009f6d401e4
-ebb985ae744a0eed8f58fad5403416ec0b9ede40 48f5b0ed6e4447d9117ccdeab85b1680dd615bf7
-fd8112e22449446533c67e276a3b32b81fc8bd55 f6f77e34873575c56b60813de7d096ec9942bb62
-2071722812ef78d1674b7ab9189dc3b3715f1d59 c5e26ab71ac26402ce70b4caca1751b3a60b99c5
-7b90835e73bac169087be6ef968a6d3bc3df987c 8c778de94e391098ddda12f866cc6d5a4b1c9121
-9ac8799ffc9f8d22bc9d6bb4d1f0064a90e560cf 06533d9cf4f10446aecd7be1104c3bc04a98bedb
-6aef492e84c1e2022a3bf92309f683d7240565e7 edbb59ad8ee3a2a8f1db577f191f72d79e6be000
-5e5032487dc3625dee2410e5e8f052a9e738e286 858e0c8cb47dcba935823e9b94dfcb61da0c71b2
-c5dabc899899b5c9a90a86a2f0e4997c76a63251 3f30f8df3c46147916f0a78d3133008143c4902f
-cff6b4f0dd0015bfdf1bd7e4a51df53dd77b24e1 942a44a4476f4d32fbc01e6da2a2098f5d74214a
-b5f47cce1a2d1b60fa61b79b536c0caac595e278 e36c97d1ff3ab3bb8aee7cdd4b14d77b09404b11
-d757939df19d041c36996dce9eba9a56487c14ba e36c97d1ff3ab3bb8aee7cdd4b14d77b09404b11
-67eea8032476035244fbbc55edfa902b63185884 7aa734e615907d8e2e5ceade939a9b04e7282b57
-523ab52676116046ca427adf85579acd77e8e797 2a3f37bc5ea63416637d6e7be3d755583b4440a9
-3d35bc1f0cc6b1c65ef84b446a41f27c046403f0 3b6c12a260f95c5bc43e73a7f910618e542ccb40
-7e3ad643c00201f8dba046f0a4be970fba61c3c9 ee8eca2700eb23aa082f310893b0705303d9195b
-fc75d595697f8612253e39328e8e6d50d4e657a9 65c900cfeea68735753043a85aaf2dc2d58d1104
-7733db17b66aa8f8c6142c4dbec760c813c4e8bc 1faf6ca9aca9ed88ed78c0d9e1184ad2af1af50d
-e296d3b09e73a72ac92400bdac710deaca42c5cb b5947bbdfd343b3608839d0c67b0f8edf7a18088
-dfacf5887295d4fcd9df06d782496b82972b9d5a 35d95f9085bdfcfbb649fdede51d97d082f38e8d
-b2da89fba13bcc686be819b1a14e7fa4a1de1daa 06b556431334bdc58d6702ccee29f81a914c2289
-0eb51d9aabbed28c5d869a8ce70bd7e93af2bf77 606ec7159caf03aecacf5558d00abc4ce31ffec7
-59bcbbdf255005181f9ee9a599d8c369b8f624ac 479d11738d5cb4530093427087bc80b641e7fdab
-1e6a4d47845b56ed1c37aa7bb41d1c77b403d86a 85f4645e201663a58d601ff79026593ebb5f83e1
-c7c5b877277b3c1503e7d3f33eb6e5d5a1a1f5d5 ce1093484e94abe94f18696e14901c688c636a74
-a62e8cdbc6f69911ac5761a80e1b95ea8b2e8965 96ba319f535df065202f2463e9372611fb09b7c8
-502f57209cebb0c39e33bcfcea4d755c2bf951b2 5ac20cdb988f27f7b6c2d358904c3437f84c6800
-a185a0e7b62c6703aa7108db5e4379ef2da8c53d 5ac20cdb988f27f7b6c2d358904c3437f84c6800
-80df2e0e3f04bfb05f49f6700050dd66a12e83f7 5ac20cdb988f27f7b6c2d358904c3437f84c6800
-e547b8bfa2cd667d5383966df275717d524544ff 0fc796978817c38c82c43aa964bff16c373dc739
-4200dea82f3a4aef38041ea986371848bc470436 c711dbcb3fb3ccd7ecad6cb7145227a3dd101e60
-217805c598db78319924581e7213027b875bd4c1 8ba3efb620933c1c6f4a80b1b2bfdb19bb1c6506
-c875e46ceb17aa3a61e056f4ca90097ef0c330a0 84bfd71e6a641a559b90590419ec86fd5490ce4b
-11a48dac402567b22282ba9b02f3d518d53022d4 9dae10dbbc99e599f2ed4a28cf1e6a73488a0a5e
-787b7b8ff478ad807d2776d01b09b5c6c01a7627 b290089097fcf7c3f7fdc67de447bf146c8e6e67
-f538d1438339b1eb9b2467c95c1c697cd18b67a1 2098a052c559aed812e39fa10f2032a08901c576
-e923b5732c56642182da4f3007a03b29ba163426 519d1951a980ad6bfe7fb40492aaa166817cc367
-de33fd7eb3769a48e098d87ca1506decda337a41 34253813ba83d30ed86111908acdbcb0a2fc0fcc
-3625931e47657245c1e11a6cbe012a09e8e2fe78 85ad068c396ba79460f5787a94f0ab86e41b4e98
-3334574db34843fa149968c7bc98657426c55540 85ad068c396ba79460f5787a94f0ab86e41b4e98
-d54cc42bdb3116af9bbf8eff8531f00019a2e424 35cd40226060beb45cc777479823108e0fe4bc61
-ea0bdc8bcb13dce5f3bf6be2701afa18eb83c79d 44830c730a6c3d3d577027d1a6f7d9f5bb6f78b2
-9b4b734f6f9a356613667e274924e3189fe2ed2d cb940550a422902f0ae118814a38f48e354e0f85
-db3955175835488df0b3678a08fc7b1c0644d436 d69b9d61f8cfc4fae41eec63b5520b7892ca8218
-e26de1819cb0e0a084c48d5cbf1dd8d85f4684bd 70adad72100f1d83297d9b8f5935e006a9caa7c3
-22b165d1265712befe3c883c3d560e17bdcd981d 21bfd5f442c643999f3556d155f0b76913851f34
-f806865942af6dc91dc8165a8489bca48e4a3b9f 6945d9312143ef564db56ce506972dd6fe19f51d
-ec02cc6ec2c6dce76bd5b6ea9addf4a9ed2d5755 9fcbe2a71a1e43b3161aeb443260f4061f7150e3
-2c46cd2ea4713c46cb16aee3544e012dc9c4ee01 d16b8e8cd4b9bc4207a9856e57d9def3d245995c
-b85ff7cd8bf2751b3eebd375eac04de6c053670c 2aa65adc2ab7e4a3d8f6f08236b61dfea5426297
-43e59a90dc0c0094024e943b54261ef3c8a28b12 aff6f1c71f538e577ab353a0d4c40d3f4f81c842
-416b8a6512285f05b8f3fde840ce3243158a3ced 6427b178c4dc884605894cb2a770f12fdd7f05fe
-e2568f2f5c193665edfc8ee9d86885458c236417 cf40eb5f77a37991f6d7afeaa1c859f3719e9c13
-8e5bf363a2ec23a3c8a14ea5f9b7a085492a53f0 80d560c331eaeef5a13716e211eaed503eb1e430
-ff66b74996f8ea1d26d55baec3399936f6549ced c44aad0b45cb1ce081aade3338586e1a16c0a1c3
-e18f44d98335551347b41cd62510b97610a00f4d 686397b926a7d433945ea4a893b7aff692f0aaf8
-5237ffca9f660dbd3ebd948a5d121b8d6a27d8cc 92580360e67e6a121f3b2b5a4af32a2ac8b27590
-f652d4cbaa3ed357c3bd278a68808a9acdda71ca 219f6656c97ac6bf924d0b1f38f2ce364a607bd8
-95b9e2888a3ed5bb45b5f42873fa2398ad539b01 fdf6d7e46135081a94725a1f2be132cf72283c89
-fcc64bf8be722204aefb2c22730001c76905ea06 c81bc9a7d490e7dbb540f0c66360f11b50c3ecf6
-acbb652e66b3624d6fbdbb6128ae7a1087aa9354 ea50c7bdcec1e5a1d71240c31bfa6fa81db74c27
-64583a40e65d28549a92b6a28e034e8878154055 849682fd21a4fd473bfd4814ff5511ca5051f620
-4d9286ab161b48b74581148e4ac5beb425550422 979f3a611a887194416ec3a4e71c54b26e976599
-78c5cc90a39f3e6a49c770b91442885180275083 59eab6fedaa080e17b1144f3d4428be9aa26b5bf
-539ad754876d090488499f1008c1b9c098eba24d 6366407f9689053331140c883dcb1b7a152de3fe
-55896fb427ab03f469dbbe2713ab64597aca43e6 2e4986fee29bed1ffb9f4b886a3c3bbab757d735
-5d0bfc5d0cb2398832b67a8b923efb0568fa61ef d12daffd2f1e42a2a201a70a4388ae91fd2de3e8
-b581b1dae0706abc9e98e5a2968c4bfe7c01fd2d 5d1de0239a7a1d8ed6bebef8079e695d3a61fed4
-be41d86debed56fef5f217ec38d168655253db1e 490f91a22d0bd64a11b06b1e8f5aad53f56dfb3e
-73642f55b2be86cac244402389aeee0bd6d17605 f3440678b1817061dbd91cff5f39435defe6609f
-ffadc756ee654e2feca2948a9e364a23d7f04fee 8808e60e580d4fef9183935c01233da0c55b6069
-46559501eba10eea4aaef2b09e6ff12ef925833b 44ecc93ff30eaceefb5b32cfa4631bf38bf099a6
-fe85fc72161da7f7680d4210b1b7989f7318f658 ecaaf5f9584cea67b605cd4cb4af779235f1813d
-e197853e9536ca8f9933f7c1bb0839fa2a252f8f a9456d94133c676f39d6e9a90ca4b47c20c97670
-1638d540ff2a97e004fb7e2c22215f05b20ae5a7 c8f09c7559dc423a7f7d00a7a8e83aaaa3cc15ec
-46f06e11f43c758b3c33a69c7082154c43f927fd aabad5cf01d07eb533083e3819f0e7f2ee865592
-004af8b695e637ae4ce8db963ec2aaf4be5c375f 91d15e8da0f61c6300085de0eed9ec8cf7f9437a
-75e7f8c6468bf40c6aade19cdafaf03f61ab00b2 7d3a30ca5a47b6778802cb5b630332f820d35e64
-8e9dd2cbba4588707b3d07366c5fd95d1c82f6ac 8fe17feee943fa2c52ffbb9075ad7b9e6169c41f
-9edbd67b838bc43d7d07b5a34daa5e5d745119f4 71fea65f47c376f992fd0402e300fe5ebf55df07
-5433ae4748f4c376a6680d5a026c5d11d412e214 77462767b63d187addcd196f609bd5f9b34bfcea
-0ee5a251393b00c9c443319ed1067190acf65568 55f680dced0370a1c603f00d0a3e31ff32d0ca8c
-122accb499a3eb1fb897be9cc33629f251cb258b feb26be0f7ab335e72d5b40d50df9fbced7044d1
-bc81661ef14e8c08cec90764a449bd78c7c3ac0d 0c6cde6b9caf5d774cb7d7f9c09596f6eee47d25
-7dc3e4c93314c292499d72c17d81b8549f1186ea cc2c11ff63a8bae69a71b48416ecb76f537a270c
-9446375084bca9106a112c1e62dd9076033bfad9 b2e6ebeca39112b5f6389d44b18f8e6305f6b104
-89d8b5a8fb6c16428a419d6fe1d651514365391a 3918ac0b2b2fcf4fe633f9d6915b62ebf83dafbf
-eaf20983b704cbb65ed87e5d8963a8c1b65f31a8 8993b35fede6e93a6c5c72fe0600c3b40bd7f958
-872a0016f55a453c70f56bf472d4026f0f84745c b27e3fadb3c98888a5a4dfc5a8a651e38116d8c2
-57ad2def137881ed81749c7d9eb3055ecaf6bcaf 5f4bfbcfb9d56d5145e3a507592061937b066e9a
-dc988d77ac6c5dd1ada77bc321e2726f4778778d 98d108e47ff57f4bd7d17d6902cf710dc14acf75
-93d5fcc70dc6c863cdd607b08600cbc064d4724a 0bad18fb77826197c85b4f091ef040777fd4b03e
-c4c55f417b68c20d2b8ca79ca3787c53ae1c9d81 206cf7c53f2439e0872c917bbd9fcee54e5e3b05
-957f9ddcd0fa04fe9266dc1d6d06f0a9ed62f20c 65555c792aa6fbce5ee0c4be9df086ffed1d4eb0
-a0d42105e7caf3c0f181b63deb19336af862ec14 afe3fe499d4a6a67e0e2e6d9483affabcb6e177c
-cbc13dc5150a12c812b9a0cdc54192ffbb949874 7ca4276af56c15ae2a2084434fe2d140c1670138
-460de028b39e005022a406cc03e6a61b627e05bc cbf3896b4999ca839a68fc7d8a71242fb206b3ba
-f0a49388fc0c48c0b87d65c86382cd15b38259b7 20a804a24b4638de1e585b459074242b68d5847d
-febc5c329fdf4dc8b45fd2885425138caeaa0d52 c992177c79e525bd21eb514b8d9d71e7b7d276b6
-ec30abd170c455052ddd104dc47592dba664a365 bbc0d81fb9e68034af7aff0197e46089e857a576
-13efefbed2d935083151ba578c842d39bdd3c8a7 02aa0fdd3fe53b96bb7147f58a13d4a7125a0919
-36ffc8be8b06d107073e34766e39d08c5b7323be 74d47d57389cefb3731eebf12d9f1e5bc105416f
-b09afbe7a762932a9ce811c58ec169d591ea327c 6e689c3cf431dc6abf740171529b9da1fb5c321f
-4e53ef71e03f7f0e9e09c6d8c23afba5458b6e0a 3b7b32940717f550d383ce7ecca65ba0e953cb58
-c2eece766edbfa05d1457c5d8b09190a7db9cb46 031275d9e43670e754433d4d508c101f6633cbe7
-f2d63feaace30de046669bd8fca85298e0238f6e 372bea0e173ebe982fed0521813d7aa7fea4630e
-78f9ee09bc2feee598b51cf124227b020a4947dc 920d4525d8d71b25c866db0079fcd4e7bf76abc5
-bf67626e81ec2722a391ebfb60c52da981a3492c b2bb7c4161edeae0b0abfd827315ca814cd27299
-8ea9b906b3097a97f7a6ddd4a10fa462e309d9ca 127ee9767392b7f6492f73c95312eec0a7fdb245
-27adb09c002bee037b2885df2028dce6186d76da d2382d374139850efa5bb6adfb229e3e656cfc40
-818bac05ed603ae603d5a7b61277801d74302258 ef51e85e581d7fb0caec8af5c25712e513d4723a
-37975c7d0d73e0ba44371f2c32f98ce4b4353976 e675841013826c83c4f4d0c1772cca243577ea5f
-84460c046ffeb8d097d5c2534e599a9bddf05ba5 146e00a04df5c22b3e0ce307b157e8997a45aedc
-65b8315b1b44801d94129c1644b7bb88a4a4d0f8 ada2b74076af6eaab6fa6ef9a1ed86fea4042782
-df20b7e525e74f908e73dd06577ca501c82666e8 f80d9e620425116de7d643dc6335b4146e817d4d
-900adeeeae917966c41c2f86c179ec9dfa3e6b21 f557f6ca8143ff6281dfba0482185e1caac91e27
-d149331084e5c29af611b2300e4a8134df16e08f b0b2ae58437eafebd4b4f00f9f4654a5dc1161f8
-3294e56c014180396337d7c6abe8eb302d8c9c1b 63432a2077e3ca451373538c73644e7d09c1015d
-f04c9cef46d5b5150a48f6702360ccc4fef62461 8f911d80ab58aa4c8c9d58020ba53ef610379b25
-2db30f89ea54c6f050fa1bec5ea23077bf2b3df6 49f842b764d4ed3e9a861d5a4e232d41a986c4d2
-391dbaa934ff31c995ac3ef4e40aab6dd5824ccf 0bf447f2ea1939618e3f16032b019d19c55968d0
-c37c6038899a17e9156fc0afc3e37bc21ea6ced4 60e310ca7be953d7deb140087c4ad5a09bd0a900
-eaec78558234b001a938b61c0be5b880dbcbbe1f 29e110ace81eaef6c12d5b548930a159954c53e6
-8843b2cbcb4e6da280e60797074c832c0e0bdd05 a60068f1c5ce753255680594a802bcebd8ef8a56
-f35862fb0bb033aa19ad9b50a4591ef09b4ce49c 35df09d568b361d6683dd2bb6bfe6ea435b83123
-5681c76576c86f6f0cf638cb0c6375d04e0a80f9 b9693244f38b6c0a3df988b142b81e82d0ef2246
-82a8caab314112add1a3f665d3a266363853713d 63945e23928249b4a7822a7e47919779ead1fab6
-ad1ddaed1933f9d61fd882c286ff30734a078e8a bce8e555669e831c31aa22f97ba05a08fff035e8
-c752ee23dbef53ad84f56b752a7be987a3cc9ee9 e3f87073395624af559c19282e0e1723fe09c116
-3f744311e668b450988519c0d7971e693504735d b553966c53efe248c57272d22cf5bc9a4c2f10a4
-7efbcad2ce6b6f540edeb628af8a7e172e92f825 5f3cf9507eb2d0e037d1a9b07c364441cec6ebbd
-6a574811bc41b85de1e90218aa0f5b36b9aac8d1 940d782f486934378d9db487f7f6b143916552b5
-2dd8a270470def64a0c8d0529b0e41dd2896cad6 a88638d8deb1bb4e3b47381f430dfee40451bb13
-09bbdab209d442e90e869dd43c7e617dc5c68a2a 2ea4b380fc28b1ea0195a47e66dc9c54b50d312e
-8a7dff881562c71f794b8ef3b9993cf58f30748f 8b822e596f16c036cc3948b97a09276cc5df753d
-a870587664e6c65a2d432e1a639c8c9a231e6872 a01ca1b1c148cef4d34cad0f0271577970b85eb6
-6073486e1cc6b75356cd91c54f86121324f3b1a5 290371766c0354545244ca35d97653de8389eea5
-67b77c385b5371463837c38649126399d31495d2 985f412e33402c14826ec8a348a833accd0c18f0
-c4056e6e4aca5c4b7e4b7826e5c5253a08efb778 1edbd5fd6ad6d9d03346d92db38829add1962300
-1ace3f6a40ef175025430d059a7a8896b8e882cf 1edbd5fd6ad6d9d03346d92db38829add1962300
-fd71ab51062d4b3a5675b02c5ec6170edf96d3f1 b9ba8a4107877b0d9a51eb3682ad7eed958ed380
-966e5e32573febd5ef31e90079ef5f60fe1905de b9ba8a4107877b0d9a51eb3682ad7eed958ed380
-6d0cc57c2d2a10a98c08733f99756cb500d2a676 a83864a0a57a468df18cd44c060233af3fc24778
-c61b0bc5ee665fec5da5beb10fd7062f27c42abd 0519d91488302ceb1e12474a95fb32f90016ec11
-6ec86ad012f464c8c818240d183405e712664a88 d37cfef0c540eda723a27b60c74f971835eda568
-625ce7a204f557ae2fc6959534904cfd5a03180b 1ee0d0a115098d186d07b39ff6a1537a1082040a
-1f05671b6b22853be9e40a0fb36b412b6b1b1da0 77d652b16d8e4befe2133397c8726beace644e44
-840e862134b1de0d70f3171dbbf413fb239a62f5 b9ba8a4107877b0d9a51eb3682ad7eed958ed380
-31576cb9bb4de394fd462395843d06cc9677ea6f 77d652b16d8e4befe2133397c8726beace644e44
-9190d58d6edd57c79b3e54748beb8e0608ae1f12 67d466a6a63598ea3844da6bbdd1bb2aae7cd616
-23aa96b729f0cb500d184bcfc72b091a12adbb6d 81b40d286fad3e62b8816d0b2429617211f58ae0
-415cb334e15137d63750e59010953b9aa0f65e09 666da26e937295366f2cf920de4e31f170f7d3a8
-0f1a6d3f9c0e0fbe60b9e002614645abe4a44c8a c3db28828f0c7002ff61fdc9b4d5cd4ff5c0219c
-c856e18d635db9664f8fb8bcec41a49111ff2db0 0f02b293346f30a3a78514a658aac15913e8b3cb
-abbd6839d172441ca4af084db7a99197e2be99e6 f165a0dae3016062a29816c961b98a5e8da596d5
-fccb0b7b0f2830dafabaa1563115cfa7227b2a24 538940d222e3bbaca9e25c9c379da288e90a178c
-4ffc5ea0517d15bedb61ec2882f38d153b4d2c7d a7bb28f358300ad89c37bb631eb3b113341f1db2
-ae527f1eb238c7b5c42863e8ca95d51fa0fad40a e20f52bf5fc2638161863c4de80b85241618f079
-9b2b41046b1b446f688f2026434712cbd9ffd448 b1f06f5bd7e8911cc17c95a7f0735cd43f38c622
-ecbd94c2c41181c33ca922cef69c2d85d9aa023b a6b123ed80b832ae6bbe2e47045ee7114240a106
-196de7061b4573818c478d4c2949aeb62e01069b 01042fcec2e14bc0e4b1c0b13bb282e53339f1f6
-954d6aa2b57ad8ba72b61eca91aef4b7c41d10b5 cef5b38d0bb27514216b0556f47574a52ab60942
-c4cae529f5fe8581a3db9ee9005894c8afa53c3e bc84e42d55c3aa55f42dbf39ae06ad7b86be867f
-d44de8f2126ecbc9a69c73c593c39e40d245ed2e b60694ffa7f7cf47740843d11ca7c3fcafa79e19
-315cc9ffc3df008ee112d345a2c6ca48172206e9 d4f2a2777e17685a97e7e09cb1173037e1ce44dd
-6236f44a550795ff62760b9d6f9e70e685c470d6 ef74e3463fcfaba4b615d1fa21a3ac44b3a509e8
-235173d0ea573229e18203ee39cc0887e4526746 7152b4e57c5ec0b098993cac61af317440e76cd9
-bb6fe9b0cf23595c6b7126a8c8545487f49ce263 de0bdcf9361df93f504d231e4ab458ba5c5206d7
-1a620c34dc4e941bdc4d71e3edf9954c70f6da7e c2a0bbc7841c2f62288a229049ae1fd92a93e774
-1bdf1770eabf153c7da3f0ac5a8e162ffa42e747 908b3d1e0062dd1da83045f5ace5165053a0e289
-2873b514517c2a0e8159a9d49069e02ba0048350 f8d37d5ff911973f6602181bc3731d8689a16347
-e36b26d54343ef646f0c0d8fe0d6bb60c1bea3d6 719430eb370cf643136a2be57f210f903ae01b3f
-15be465dd6a7be171404f9fa213f704b3a7b27b2 c95ab6028023a829367c992ea773026ebd01feca
-cf8572d48e29230d9b1f44b150f8634929db76c2 4430dce4cfbe2c0abccf43683d581ba45642f06e
-fac6c3b4064bec2f1e50dcd3d093e9caca034848 5f6849632bcc8c67679b5e64d8d1db134498cf0d
-84cc9fe7ed29b1c977625edf49c72c579d640297 4e07ae3a07f9209f70363ccc4cde2545b8846bf1
-13828ba500eac2821d9ce732ebe063444669cf1e adbd9f1ce3117b107146a3f3f1bb7f23e65cfda3
-0fcbfd65ec63d160eab7948be4160ec0fe9f5c72 4d086c574a90b6cec523b64265b00ca4dd4f7719
-fe71b899e4943eba71f8f72fb0edc92582cd2d43 d31bc0c8ee847d60b1aa5fcc52c86a80fa23a4d6
-5f9766732787e211492b897103c3b2aaab1b80b7 d49f8d76da3fd6dc0d2df481b8fcfac63d92c568
-7c4b8bb611cc708071decb437022a30d362f7052 d49f8d76da3fd6dc0d2df481b8fcfac63d92c568
-15c260289796f6fedae25d29334dc3d30cd3ebdd 9bf8bb3d258924789e35819fd1bce20b6f177c61
-f667feaa41136251004a394da942f7bdd6030f6a 72c8abe029c1e7776e49c61918c578bfc6481f32
-238ab3926c1c9886d638ddf9d73450604ed03f29 83f8b80f636a989a8906f3a19e9f46c8cf0f3699
-c2b9e5cc627cc02c2a680b25c96ae793dee2e3c1 83f8b80f636a989a8906f3a19e9f46c8cf0f3699
-d1e8572a2cc8a3fe820de9608598f6dd01a2a247 362de53f4ac149f4b81f9624cbbf53248d4783b4
-2f0819d82a42c183d30797678bb20420cf4d90bb 362de53f4ac149f4b81f9624cbbf53248d4783b4
-a2b984e5a3c5ea16dcd914265535fb725ce09904 3704962e0c0f9e83775ef7d7b441b5ea2d8586bb
-c92527fe9d14d8ee49532988b6cb0b4e726a6027 922004fb77e6e56efba4e27c89042274ee00a1ad
-90e1569f13f3513d35097918e47c81a9493a81da 6b7056cc1178d928a9bf024be22d533178f15198
-109eb560b3a2e7f3bf45c9a1e8510a4e2e99f2f3 6734a14eae6fcc98aecba9e9c41d1c88168679c2
-3fbfa39bfd2c7a4582d99c7c8208ff0f039e6cd0 f2d54c27f14e76c16d8eea9a1a648e7e13de7ffc
-d9e91d8e30a724746ea0ec3c09b42b8af0ddca68 bd81e1b65463deb6aaf47f6b694446148bd7c12d
-de049f1b176e1fc4cfbdcfd473bd52b244c3bbb6 189a5279e92523f6542279209d99463543f32873
-5342904155502af261035f0f0e8bc4d4155db620 c8e0a5e65e52c79a95260b26c8a338110d752fba
-7c05c843bc934d1a9ab1f881635a4a9cefc3efd4 cdb89b3c489d7b8b5414cc4e5142041b7882c99e
-aef8a56b56b226c68dd7174b67c8f2ab69853ee7 a01fad77a5ac71901f2ff0eb4da75780ba3a2587
-0071c05899a8c26a269743d180ea62436211ade4 7e3d886093d497981b191c2944188cbfc88bc53c
-d6f00acc3499fff8bbf5e19b60d1e07d63230737 67cbe9600e863f5a4f8450a08cad4420f6c80933
-72e4c0003917149caaa2e602c658c6259a5ea57f 22ad3a7f7844eed210420f12140adac301c16bbe
-c3b8509f465a4d775e388a8cb9499b5b5054839b 51d01722e18c71c1b1d00f8111ef7d3276cab1cb
-5aab91ac396f39cf418f8550073f968bd13dae85 4feedf6933e7e2c57aea7ffe75ec2821d61b6bf9
-169798cf432eb67b570268e58cdf0f4b6495b27d a8d04c663ef6fe15f62bdcc18ae8241597df12f0
-e99c984b1601a7eba8540ede9d086794ee51eabf bad88556f9d340d791ed3e690e57d8c163830dd8
-8d0e27b7e3907ede2a25b60a61f32f5271ba5e55 eea8ce4fd2537be675f3f7607efbdc56ecaf5da4
-b7a8e3345d49730a490a5b2929785d7e12bcacd7 fd2d4c284ec1b0184942602ee5a03a6ac91ade75
-17a137a8264c631503fa481f8df6b075abda1adc ebeef58c1bb534f41fbd2f793a97c087c1b6f3ba
-ab84be3bd0903436da712af37302cd9367d7d00f e43ea19722da1c202cb1d2593cb2f83e829effea
-c77ed180f52d259b60c47f4f6d4d7d39c9a143f1 d5608e3b1d3180094cd767b97727289339dc7aca
-8f43234a1b5a1a5d3979b055c8c55a2a809e40ea 40795ffcb1f6812fe0bfd57d888d8a9b3cde098f
-4dd10e1f3757d618aa46e3e1edd1119c68c7f9d5 1e2449a86446d417de8d7c2a6d5bd6c37346969d
-53a7dcdf841a34281868eec13205b30a03ba3273 315f1ea92ce6a84aef274f64b4c4af9ae627a149
-b57caa111c1c07523a407989a22ad58f20d6d7dc 543e90d74ce5c1efefbdde74f89355ee8aa0a7ed
-2c377a310f410d28f93a74bbb52a14c8a80ff792 b00736c236775611100d7b36d5843f0fed215ef1
-6bdd95115ecad84aa8527760a1ba7e2ee53363bd b00736c236775611100d7b36d5843f0fed215ef1
-74ccfecdebad840586f8041325f74ae6d6b5e54b fdaf2efccaae7724dbee0d70f603361308fcd62f
-f4ce21265d6683bcb7ed8904f3b052f784f47cce f4dd98916014e6f911dadd58f04dce39093be4bc
-a3847c84e32533a20362d5d4843ec50f0631c8e4 f4dd98916014e6f911dadd58f04dce39093be4bc
-ae9b73e34635591b1969013b29d6ad3cbd144949 7842a390c6e23c790e4e2ff2bdaa1da44d5c7620
-f55b440eaec26988cdeab0f2fa3e7021a8440b2e 65c13d3f97c60496a2d84c7ac0e94efc446e4d71
-5b14008f74f58047989f45331b7e996fd4ac096b 4422347b28b3743417fcbebc907303fb6ee519c5
-52fad6e9671feef2bdb04eca3423174fcee2d24c 848153a227efafe9cc2dbdad10fb87317be3d94c
-fa757897b3484e49dbbdd9bc2785834a09579436 89c90ec978dc4c0aaaa2685d8af1f0cb570834e6
-a05f68ad011bc054f98c6ee41b18a19191a45f27 87c255e7ff3269df481016daf53c078e8e874162
-8930bf5d29a5a4072699e4cbee02e78b779b4449 c63e4f8322c1035d117508f1dbd14e7287623137
-36cae35bdfca072ad656b72872f55d019ca5b810 8d8594a7c3755229d1c106ec00b2876b0ced213d
-eff64adeb09789c5c0996c1ac0f3d6abede90f96 4850c2b8f9f3d8a08bf89bae453f381178caf534
-973ac4974beb706ccd5c7880f443e0f4a3a760d1 fec74e36cd32986e5b3f55e7c0bddd3d6ac9a05b
-84efc68b52b6eb53cbb01e1d885a509efe9a9e53 bf556d557a539adc6286eb65ad30674efe5a99c1
-8c83f19af531ef3a5931593a30d13581c769f3c5 eff0db5c056be59e10c02865268af7b28cb202d6
-c559950de28b4f378b7424f7c240b2dda3c3f85d 8e2ffdcf0e8a56d5d261413e767a6e9693860c29
-5afe73a0e4d25455c0840ffe49162ae0e7b5e057 e21e90db552e7ecfbe6b5a748b198269dbbb18f1
-1fbfc3bb08a8cf92883182c450748cbf7d452619 3ffa87f5a32fb51d2363c02555a9fc862bea0632
-2825d756b09a97761a48ead720a454362fe51a56 afa4eb3abc55a9864670395d25638139952f15f3
-b7296082e09c253222883eae310b36c1f5e2a98d 557b6abdfba2769cc8bbfaf1314c936544582954
-bc538b1f30d55f1a1313d412427419ba9c9138e2 d85eab9823df04e172fafff98cc52cc0a2597e56
-0f83a7fc5be42d74ee6407d430df3941d8a0d21c f07942305590d4c66e4acaa7f871495e0470e806
-f846a5a3443f80678f05f895188cc22923beb9f0 f07942305590d4c66e4acaa7f871495e0470e806
-21a93eca6355d3364570a5411e99c8c8c3ab0c01 32a20ae97519e1a5ccb517b66b552f2a4c37d010
-4362f0d3fb9428d7e50520a15f760d395982fd37 8265ef341b613e4ae321cd74a83d2853bd6a0b5d
-9d2a0cf2de2d78d30c280e7477444040ca661ca5 afa4eb3abc55a9864670395d25638139952f15f3
-8c1f8411361e6194724d2c74e420311084b20c7d 8265ef341b613e4ae321cd74a83d2853bd6a0b5d
-465eb420a71a1f565a384cb2f8bde4209702da2e 0b163b2f7e320e44a0f7cd6a6b2256c7f02b344e
-bdb33aaf3e7c2b8bf60c7460b90752a01f064047 6d9bd8a407fed6a7193c97aacf6059ccaab8a64b
-de4223cd4fc7959d6b218e724a1d24fad0999126 b48f3a2b86a69ee8feb7a180f19efb0ed3f7a7c1
-ba79c5934516af27fff01a2b9db6d98d6d2709af 457cc6998a78e069600289dfd6bcb5629c51edc6
-566c9ce51a427a98d2e62acc9e0001e0f90c1e6d 65f148935ef432b2101fd9cc1b5e51ed90b5bf93
-19994d211755a33958a173f6ef7c1486f27607bb 83fe95abcdd7451ecb24cfc8c3d188571be08716
-89ccadfd47bd400e812a3abae4c13d28da3fb303 10527520a12535ab1ca2aa4dd3e25199f3a4e292
-bddd02da779d57e9952a5715e39511ca5314ee12 e0f16ca6cc0622b1678658f612f9e59445656a9a
-97672799431aad3e537ca192c4c4827c03ecc229 426795e433dfa1fde566d04b474063d31ef93eba
-9f3db231cb02026a69ad7972a3eae228c4881cdf 686ae6623a0bf196ea2fe10ac7db32e7d5e88d46
-d9e92a47f8781a6a5bcfc72098ad69ed156cb80c f1dc4c657f9b5001b755c667415e1bfdba5a15dd
-e546a936f13831791eeeaa4c3013a1b44eb69e23 43f2bcaf83b19752aa019e03498765a5af6b5b76
-0d6eecd8c7a9be66909d4765971c174dfba1d18e 765ab05cab70bfdef33113cd0c5d52d0f469d1d9
-592e162c3b87fe2471983d98db96d9d7d77234df 3e6f03d4c999993c19a71c72a767dd1851d0ca50
-767a61ab7b287176154be48fde1ff54ee151f832 d20a155599c73626cd956d4485386c4ad0d15f48
-00c350385eafe2e1a543db3e116f1b0bc734c8ba 0d7678c3af30b1a9c07097e0b9cc3c34d12e9ff9
-a248bf4d5ba0b511027c0c5273fcdd5e680063bb e18d2538f58e025e06d583596d8630c1eff6e285
-de96f4c40d8e65dbfafc090913c3c7056d682b78 6f1b566b01224ebee5a5bebd6ec693523d898c7e
-dcb8ea55fa6c76d5d858127282b57dfaa4c3c0fa 3844ec6bcf7ccd9735448325e47039b637bb5130
-a28e241974399052e80e800257586a1603316a12 3844ec6bcf7ccd9735448325e47039b637bb5130
-7705e45e171bb245b2210e98901e7ee9b02ff9f9 0c08eec88a3d89d675de5e7add14f4915365a319
-6a859e2bd73a6ff4988f361f1755001e915db0a9 3e2072a2c2a01c2b1db6affa1c04bed2c5dab8cb
-fbaa663e7d7b26bbe3f00476d121f0b91772b97f 6cdf0975d59bee4f3e5df6dc53b5fbb22557fc77
-0784b74b3f5a65aa9306cedcc0458d6d065d5b1d d9436e3befa3522f33a04628ad59ac02517a89d1
-59ba125d99bb82d12731d8da57e88e62e5195cc1 442b69b6d5011df2bcbe60a2069fb3bf6274e267
-60efb3ee114fe4086abf0580964a4d308c43b2d4 65511703c747342c0d1b966de26dcc486ac08955
-9246c325e44ea8bca58eb9bc0088f04fb34424b8 74c2596fd5d8e679c7d17ea25d1a09a39d17bd82
-1deeb1909a413d92224ef1c22ff7b65d45ae05ae 91b4507b2e4219cfb6964260e2b32262c82f74a9
-1926e24bad6eaecd4239bdc56a892c7e0b69a74f 42819414f1b683a879770d145a9c49f7d7dbf0a8
-bff0fa86ed1954bca138b26cc81ce197cc8a93e2 402bedfa640eeb4d5b9ded0cfe2cd30bd1ffe3f8
-fd43d0837d955eac7bbe2cd356192836a0db762d 54c944d55d6a47e46471978c35d44dd155ebfe43
-32d8fae6aacda9a2b184effcdbfd45bb10f2405e 54c944d55d6a47e46471978c35d44dd155ebfe43
-e89f624241232359146aed380852641e7b93fb23 f542eea5fcf17f0ed45b0ca0cd765046544a17b8
-e73bd1ac7f61b3d099e50e44bbae5e5f1605a1da 6d05e1b8d777c2ded50ef3cc475fe7988d3ad811
-ccf5405a080e4d0bf3db42fb835ea6467b8d2e41 1b1d411b2ecaa759004a04b50d01bf50c831dc2a
-2d991bccee29df6aa2ce387e05be4ba434be555a 5b26eaf096d50f394eae6946b3335c71bb57df20
-7c0538a44afda024f7c3bace50f0c4f74cb93c3c 8b4ac186e70436ba5bb51645adcb25599468ae3f
-6941d30f7cbf7a477a7e66798749c1c855380a44 66495dfed9b42476945e9a2b51c24336503afc3c
-227272881dd5552634b4111dbc1cdda666563e9d 8ffc23b66edfcd9c5ff318eebca99b127e8b3ea7
-2d96ead1edd740c18efbd7c53e687b50087efb4a 84cb0c0c2b8883bb82db04a740e455846db85c34
-577d5868f2f555245fc821af64a1e8d27df5ff1e af8888a72ff0d3685a62ec40b6efd80bc701654b
-db286891668848d126db1added4187f4111a9e77 599becc0b4ba2fc27dbaae7340538c3d569b6714
-f2f9339dd82ceb1ec01d7db8943cbdf91a15f921 44466101a44bd4bce5f198e5b7ba743d88e33003
-089af359fed8042c1c75bc30fcdc1089831a7b97 5c1b813a4671afc208fc018ea313bd3bc63a5dae
-c818012aaaa7a28d2bb7df69b228e5d6e08551ba a6ca5ab016d726eb7af37bac2d74a031118cebe7
-cd4df668d17af1bf6ebdb0921fb1e8ca92087724 ebf31a27eec80339fff668d8f6d3f8f9f82734b1
-c8de8f4a9c1cd5ad3a1c3a15ac1bacbec471d1f2 7dcdcc82cec3db5225c1f9bd1cffeb4e4ee4d771
-ce680808a86024f1fb151e5eb6a517c3940e43be 9a6ec9c090bd8db007a420390f542076ecf02959
-485ad17d490aa9c8ea27f91af98bc6c470950497 34d1f8f6a99470a210d8f72cfcf0957f361180f3
-296e6a45f49b99d43420f424ec0a11f88602caef 4149c9252646e16768f772e08a494c8a990048c3
-5ab8d2168fe51abec138756de39ac259f240aebb a61b637074d69a0b783acaa69f43be09d65a02ba
-0bf5d5f12ca81a403c4ef201fcbc9d8e7c6a7ee0 1faf7b5c0403ba3a8e94d59e3f80cbab1c1be970
-643654198778e07973aa3fc4ae32d6c90082792d 0fc1faf13d7cb30f7159cc4d459da6ebe338e97a
-c8609b59f08b0a75b07059abe165be9c90c7f6bb fc24f6428ca489840b6d2eeeb9048b8b6a323ea7
-c6eb2672b50cdab0fa8c40b3492660b66749e1c7 599becc0b4ba2fc27dbaae7340538c3d569b6714
-e3b072fbdaa3897d72b45732746188d6ebf42a95 fc24f6428ca489840b6d2eeeb9048b8b6a323ea7
-b87ff960ec98b22a5e0388a4f4aa536deb4e432a 31ade6e8e54bd5bef8ea28d8f9fc4163c9ef4e70
-b1c0e05cbede7bb286af3de33cc6c360860cd33c b70775989e687c9cf0f86523bacded2346454896
-8b61c175ed4473dd19c65312677698d4c90817b8 b70775989e687c9cf0f86523bacded2346454896
-76dbc4583396f7c7ec7f1739a5e64c080e139325 07304583316d00c056818df885e55671bcaf62e9
-9189dcc58778580e00bf8e9e62e5bf2ce3aac62c 626c60c4ccd894ce5a3e824c4bebb0ec8d65e137
-ad79c2ba4b4b3838f5a65bb9358cb0d0fafca0f4 fe2fcf64fdaf2dd7fc6572133f9feb4fcd0d2026
-f5da145749433fe840df320da0410e9a3037b559 f08f661818aefe857572d2a4bc94fac031ae53f4
-4d06825d3663d16fdee356ec73ec7f6dc36a7517 8f9c53959f4c2f4fb4239a86621778e2a7128f82
-0ad7338aa244de0d3004c6e627f1df4a7b81d0b7 c53a8d06bf8da05b8b8fbd9e9a784f0ffbfea70d
-d691cb921e00a4696ace92ac8eb61433ae88a6d5 662c9cf03c7bb0dc0c682728d4cd595e9a120ade
-40ac426b39d85457c1992b070055b0fabec5de13 b236631047748d5335f4a4e1e3c1404d9a60aeb6
-7b6b58e83d21dcf2c0755ed6b4b57ef94750704d 7428efe715e1cfe4fdf21c0515e5ccdd0231510d
-eccc1dff5f7ffef27cd032a6573f7eccb4c69f6c c72a96980f2e849446cd58d943087dd532c5747d
-2043966f64bd84675c16719e52d3d71f30c7098d 30150ef7f72bd4d5bd7e980df9e958b43aeb9b44
-b74aa3b8da5d91f037eb06cef4faaf038dcc12cd 9b7574808beaeedf95535b029cb851b6b372502d
-4d182e469d6b4d64f8f5fa8f4a170c23431568dc 9b2269b8d9d7adfc924ed65c15ffc0f334bec621
-64380692dc0bbf064f5e3f09656bba65e00555c0 ad08b9c7913970f77bdcd553f435fee7b00e7135
-f919e64131630db8e5b009c2f32bdb5a7e0c8755 01c2c6ff3cd5bac7230ec3a1ca511fff15073b54
-a5f25c4c91462bfecd921a5d308b9606e81395f0 e03d92574b6bb66d46e8f2abc2b5ff7556e710ec
-c251bffa21c82eee5bf7543e4d4b6e2cb42dff67 8b6f4327152aea1d317e9bb42eaef5091c705bc0
-ba1c0c8b2b3d78a90f5c6aa1fa4dcfd65bde311e 769d1ca29b3a3705723deb6d0beefb94fb96db82
-d85210bc6163defedcd497dfd8acd5068c761408 e20eeb01d32357ed56eaf70c5ec39fb85f800161
-3dfa9b41f521cc1dc2c24bc8be4bff084a4e1de6 65521a8786e9a559112e389aa4fd4840d862219d
-e0b6ac16e6ecae4529a81f9b8a2f34b59aa41781 65521a8786e9a559112e389aa4fd4840d862219d
-9ea34d4dfeee8509824951b5a47fb304e5ac4df4 c770e6783aa614e6c40fc885a5f6d60cc677c717
-06906d4671cbad38f1e8e86f8b465bc181d7d487 ae549bcc8f15abf7555a2ed678a5408873c4abd5
-784fb6e9be5a8aa14aa00dba701561f8f4b9d4bf 34d4fbea5d6a175fed3d3e22c9fd535f0741b2dd
-056ab032429473103e07a1521de3108040e4b8e6 badc9d4779f30fce7f9891c9b8e2b7b9114833c7
-064c71d9617b3135bba90968e073831a8dd6cd6a b00cca90eb8ef2a0100e343ddd7d4811f27dc30e
-1a7553a174396e05d4de5e13ac7eaaa1b4b8ba5e 550c47b361141b9ef3fcf823bec87df52eeef2ff
-c8cb20bf3c4732faeb71f6d9db4da1cdd3eb1927 8b4ac186e70436ba5bb51645adcb25599468ae3f
-31cbe59866c4bcd8648fea8e28c7a57daeced7a1 b70775989e687c9cf0f86523bacded2346454896
-e084754b54007a83c578fa0729e48e93b36f9871 550c47b361141b9ef3fcf823bec87df52eeef2ff
-44334910dd6695d30476650542298b2a6b9845f8 c37ccc6b67e0d5136ef6a7890fba02a9035ae765
-b9efe3ee8afb35a6f3d6cdec02ebf3388a634c4e e5c487dd1b3d1249b479bf0ece6e72b17d977192
-7933c0fa695892c37a7e4fbd0309152c7b550e60 5ecac4a702afd981a9699a1e5793135f7edf77d2
-0d09cbce92a3af50373e8438469c2356c66a5152 ee887411542678481869ab90a2404af82249dc4f
-cbad93a9864a7eeb6a6162d92eb6ccd64303fb91 9f39d310992c4dd40bd1310314e2f1d6c846e874
-d0832cfa71c698e8001ac164cf8f1a4a469722d5 480854c03ef3f094498d182979ccc5198daa7586
-343298e8db32682c28a39ea245a7acc13b11bf41 a89580c0228a02564c7f01ffd03d38a514792a25
-2f725e0fc2b7c15e8b34ad513dc1fe49e36e6d09 08259e1f7e9331e2e4a5d9ad80b2a627dd3abcc1
-5585c0f9fee5f5c950518c0ee01a8ac5f1fd55fe 378a4bcbe1b96d65e5c3488f23c0f65bea65ad21
-0fd2267ca1dd70b2f4de9daff3975f56a4d8dfb9 ec30051c8cabc83732abf05359facbea94414259
-8c4491917cd2fbf9fce13408c96f3a0598b0fe6f c0bc6e09ea873d32d4ad245c999df8f64310cfc9
-5dcdb66f404946e512103e5b3bf04200383544e6 114f1288e83b85a39e598156aaac5a67d39ad0ea
-b73f47ba2e097ec1dcd9709d39ddd1dfd67b5697 9d4977b3a5eacd1540e48e2bbd1d1c80b1614b5d
-8201ceef62c9ac8505ff5549ccaa9ffdc0643159 d34c3555b26358e7bccab5482d5906d828cbe8a6
-36b6c2f5b0127e8b7f0bf29931cbb2e8592bf356 7e9ddf10cb962875f172300f82798131e8f60bac
-bc475cc1b195f492dddf1c7cf254d5b83f3c1a01 eb0ec7552a05a279c60046a388f9df1f98d3702b
-2177a5bf30c8a50db8a9dc91e2af228c3d24490f f4e3bdc595357c0cd23f36c661624f47e8a45e73
-6df4797dd4fe39a8ad584f63d5b8761ac78f8749 b58e7c46ab4a9cd1c15128caaba037b3e7cf20d0
-3d4972136b0923ff8a30a3d08caecd41ca06e780 7f900c921c421dd067715fc5323f0eb41043d4cd
-9e9d18241742b1d68c236256af522c0a81028e64 1beabec393903e521b900cc684c26180dad7b467
-613d15352705cf0882714300523ee1c86466ba8c 939cb1a792da3d2065543d4220d6e1d54cb23d8f
-f1eca3d4cd8ea7bf9b967d75bb5abd6572954c9a c68991c4f350e856fd28add7e61c2f4d68fbe734
-6d9d50c277e5111f96d778322594471487fa86aa 33db7fc74f32776882c959f4f30cd8e8fd091140
-24aede2d55d733047335912f9931801e17ef09e5 6527ee2a69015fcc270e4cf6be7776325016847b
-4c9b0ca89dcb34b0f57f7b5ae94483e1340c5c46 e126f0af65707cc482714988ac9f154dd0e2eadc
-f9acb0e7a350b3ce2dc67366e35ec52a66e4e016 0d35096555c2cf827500836e12a400e98968f379
-0310151df1f6ad2b471d1d038f723b275cbf0ff6 a4464eb9bd08d56da1ba30e0bb21b7fa2622579f
-f49378384ecb14c2f830ea1f916c360dd226aa39 57e86cb0713c55f61e75855bf6b8763bb36c1177
-c27f1bc7657320995d29926d3f447734b712d0fe 238328de2cd0564df2e74cb147c351a29069a48e
-2a2f3d6eb751a9342bc6f74383c16b4ac4ff2d8b 51997e6744e574fdce0c7ba599037a23136a3c3f
-a70dfc4a41df0b4a4feb1fa51e0aaf960ea2b910 45f901f62cde3537a443885506fbd4851d45109e
-df08c88ea9e208db6872c2ca6d00ec9c95719dda efc9c586161db822c3cb3c207145011b9564bcbe
-908eda5d52ebc2dd7beb6423fbcbff1676f69ddc 699fa81198635044a1c9b0bf4a6a9099649f0ee3
-071fcf821b76ba3b41eef806c45522e4cb50158c 22f326a2fd311216f42eb5972eb8011d15683aaf
-61beeca9cfc535395138d75e24812e6d4cd3dc6a 801511ec8c6d62d6e6fd8bffd2f2c2f1a7b214ea
-74ce1a96b761a0c266363168ca0718ae13447e1e 01814c6ad472e50d14b80fc85dc06c25d0a49f0b
-9f1855c5812794097df374d96411a50fe880a630 965267c72a5b5da9e9f450aff2c95feac7f9dbda
-2504253ea950b0d1759727b475091b868f02bb13 54c78f3ef2ddbff5e5d7ef6aef98445b199cbfb5
-9114aceb245622f3b7dd6b24547a656139b7ed18 508733db24879ee71a86343dbffa55f5c03b1463
-d605d2bce112954c36bb5967ed3eb11ea0d7e6f5 4d31b2d35f85937fde81a3b02151718ed7139251
-87096606adbc84cfc577e33b5b14fb76229cd69d 925fcaadd76b2c1158631576efcb4ee5ecd3d7be
-3ad0401e16a55284563ec29c6e29dcea70d5311f d99bdd17b6af2dcd045ba637875171fd38b37d31
-35dd6bda7f24630d17b009cefc4ed551b8bec616 89224b02aff56dda0fd2a48bb577ed504e34f641
-0807a6c3cd064ee42d873a7a420ceb1c0d066d53 34fa131f3aaaa156f1734c92e7b9f2470ce22138
-bb8be528fb572d77cf4371857bfd94b8a8b4c36e 46aa83f3307dfc5cbb47eb47d4ef6472b86653d9
-be38dcd75001513b193d64e2c2e504d336416a65 9001fb41f7d7ef34479d6651941a58479d14f253
-4df44e70aa9dae9ae86cc37a591147c53663228c 1bdfee6eb5340843b7a663cffead6a1110d3ddcb
-7127e9a83337e3656e2a15927fedccd1bc61d9e9 414a85ccbd9ada124382f490743a7f723ac9b3d1
-ac6794abefe55902ac63156c189140f56037fbd2 c7e02c7d733ae4e82c96e417f6d024c3f14407b1
-6840670f4f4b5f1db02dfa7fe3d24df920babe64 a793969fe9d4fb579ec0d551a8874f7e23157575
-55401d0e4c297342c9609f1f464021814e239777 e13b06fc149d5ef6aa811571c2e1c3e1d67fccd5
-66af9c110022ecbe12be97a5cc5543de598e6466 2fbefcc544695a60aba712346a90f154f30e533a
-9e7c17ac307c92928bec12dd7ac53d126aeca879 7484f7468c6cb7e62a73d871d475d538b6842f3c
-aa9ea9f2c17f26cc9724720507b1f3ea1eb653ed b18bd46a8a7c75dcef2cded996a2101ef87afb91
-1db2661b684cae4a44de6222acc8fc082724d62f df9e51e42745cc3ce99936a3a3fc328e731eb707
-ccd8cd3bf27226c7b552f4b26462d0d822c1946c 335a43d8b17b7a4490e11245e41a0f539b25c355
-02a885b907593a1d7354b4d2d6df85d2bc56ff1a 71dedca89e067621f77347f9096a990921d5fc2d
-caa4e3fdef7a4ebe7ccdc48ac0e912ca924f700e be5c6c7515b89d48cc6906105d05410a2de2a0e2
-0239f2ab11c4b0e634641dbec2dca480f67367e3 f084866030eb7a2351615fcf925b55dc18ed98f2
-10ed92e68aee8f61655d188279c5fc4aaf76c603 1ea52b90d7b00dd6750ccce0a14c5eba97fade26
-d4965d8c0c904a9fb60b4aedd25ecdb9e878f03e 41d160a3d9521407ce3459905a6d71ed45cc6b2a
-c1047aefee5476fb24f6ef42a2d3f00f13c95374 e07900106c35307288fa3b67dbeaa6d750028854
-b25aabe369597e902a96539f0666228f2c470d8c ab2b8ebe237d3a53dec40c1ef9648d60a8dad3fc
-35bb30b91d698d0f2337eccf06d0bce8995fed0b 81b7885988703a6b57557c60b2f80d0927334c90
-dc989c002ea7e579df248a4c89490a844095b971 d9da175245e7f1251680b555d574b575ff7a7acd
-3c63da0cef9f6873af1c4a67d423806980aebeaa 0af87897b1a976d693858818e2cc85621bc2f3e9
-92b51ed17bac45ccd3abd42791dad7534170a486 473d1506214743eec4dacc9bca6b5c799d7a0200
-efda781d3ce28098b5f45198790dce31d073050e 31419757784f497cdaf973d926211655a3129406
-060e67e954c65c1550253526dcee815ff5be4f96 7b7b840af0c81354579983cd1e971bd2bf5695c7
-431cab9e0c024b6c0826e1bac749c563dd0a4175 414a85ccbd9ada124382f490743a7f723ac9b3d1
-cc793bc99521da3cdae92f24f712a3552e22ce50 4f8952f7771a28503121ae376b53b6558309f246
-502c622331cc7a2d19f8181b1ad04324f12f4791 4f8952f7771a28503121ae376b53b6558309f246
-898a363dd9aeb5d8dc70231487e0c3150e7fe797 c9abab2ca237760c09c1560a946f40aab2dcfc5e
-82214c16d34839daf7393e204c3691aa649fbd29 d2be12af843a219ee3130b44c9e71f23ce744f7b
-65d90395097c480f59ed1a80ef0e3dae244feda6 0d8000bda1392d51c8b57a878ba4645c19e5a1e4
-30fad9ec5b8418fd8521bbc6f4db667c51d72a9b 68fd86e7eca1cdec9d7116b7c9f16032d9a96710
-04f722e5180efa4f7338321248f2ea634f69c8b0 4f3b69472fbf91a28d3751dee6cda95c941603be
-19a15f4b7d2f2fc552d4d95906aec0e2f3156449 9865792d27b2ecb28b20b955aaf6dd80436bb731
-36be29605acb201af1c82b0c0c68e6ca6b39b410 03fa926f17a2e88e90720025be4c0b934942af0c
-423c0258f59b385cbccfb435e1e0f4632a1dac7a ea9212ab499c828ed3a2e77c5641650989fade5c
-51bf3e9ad3f78e16adaf9935aa8b42dcacec1659 cff108a7e9ac58b7c6fe241ed4e01c193bb158f4
-b2461e9cacc91889a648d4fc55ba4efbcc52ba89 37ace35a78166f642c6b1332d28c33bb629f7b4d
-d70a78549f8f5a32ca5a99a8f924eb1b6baee8e3 cfeef646130b543dd46edb7bd1799e7c35fc046d
-42f606f9370e56e2fd9f29de607e27e3c86d44b1 91403cf02e90df21b6730e6d45af385bd5f13de4
-c235b7543c2ec1282d3a2810753f8c34ef7639f8 de31646260ebd7032d7cf8a76a031938b5b1c3bd
-f987ab53f9b557e742e36102f515b0b90c902f6c 191ab233d95b2571abcc7d44425a8b6242a584f0
-dab9f5623c11ad6ef425caad9f55ec922b216420 8a764d430334c4eaa7d1aa78bbe4b06a6977792b
-747a7f4a71047d583f964a2aa79e1a2a4dc289b1 d9763e00f33bbbc888c3224fbafec279beff449d
-d58bb2ff1c34927809d0a75df62d0e5508b3e47b 3c2fa5bc64f97dfe580d05b81400639a39710ff2
-55cddb473e3157181f6cd6fe982c8a050adf6a09 30586e5d8339f53ec04b36f2cada1cdcca7d2f88
-a3cd35cfe370369207e26da2bb1e90154c7ff89c 935657cc136ee68d031f650b976d5c62a148f18c
-02465c6b7874fb83f4ed09dde4486fe8dcf5b97d 935657cc136ee68d031f650b976d5c62a148f18c
-a56d12768d05f78238a0dfe469b13b04d1feac7f 4f7f2089d56ab07aeaccc319c1bdb61cd1365ae9
-f93b52e6089957a0b2cb75ca0bb1daac2ae86ec9 5fa2dd44a4d039fade856e0b94546b05b842b23c
-675f799ed62e84a4de398539ce020507c509114f 1929b829c4a5017e9dec05009260d5226db8533c
-4faf143633bc6e54a5fdef12927fca5801e13bb8 b3aaee110ef087f6a4ebeed84b4cdb1f3cba379c
-0e3edb2c8275a1ce52cea213ac3b6aa39db03d01 cf00a665539bd3c97bec12ef1b3fd7190671c5fa
-05a7eebb86adab59812d227035f61bd9c45c55f8 e85871ae98b50b9a2eed2bf3b54ecb7727edb2f9
-b7ba87a107333551ad7ceeff11d9dd32da926a0f d951ab808cfa14d6c1cf7779bd2a81d0c61bad75
-c0f7e2cf8c3006762fe28808ce4e1baa70da6ebb a88616ddc3ea1cc236d01aa5490e4f84610333bb
-b386bd816d53a78bda802a404e210c28b0d2b22a 04e2c0363738e2d8639ee9db734a980ab7365599
-d43b09baf3d05cad925bd4c037b2483f80432f43 c9acf067655119f28d03c4772d7b694cf275351f
-697eda5aeb35e65be2404ee232c9d2910224d4f8 a4d8af95cd3692682b7f4b0eaf623f08d9950060
-30881364281ee66351ed70cef43c8bf05d9c1038 a236920aa8f7b329b7f508918c7e861af0b345c2
-391d979efea86bce1df83362c7fa8a1d4b086e0f 8cae4d741b6c730d499073a4bee2315616fc73e6
-8d878ec11db02153e29d73c4dd697bfaa778b2ff c155ca75bd5fdc89f9043996ccee479bdcc3e70c
-31bee170762a21d0a0b4deeaca56faaeb791b52f de94051c83e2a80ca8a618ca77016ac3d92bc317
-fd140b93ab12a1abb40782af04a0f80b6ba71d31 c658a75aaaa564981d7e81930940b2b63a3428ab
-78174ec8c49559218eedb4f979397fd245abc014 e8aa49a08a756c228606768abd536afaf965e2a7
-a858a8ac4718f2649fffce58478b5232fdc58ea8 be2f102f71e3487d06cbdc82fe0ed61c6232ee68
-69b159bdd5c4fe8b490ef15d23038287ebbf03d5 1dacdf3f54d15e592bd1630cc13bb6286c4107bb
-3e7e3a4f80bf167e0728f4cf9a3d53374850be23 1a5bb66b13d693e08a709430ade30ef4cf78f712
-e0b29c08547cfd9fa93143120967a7200cb7c0bd 1fc6d2d289470e92da8d993ecac30a4a05f9e0b3
-ec7f6f4bd9080fd7d0ef9418880f3345f295688f bf944b5f02dfcd527bcd2aa8d00f55ff98c451a6
-17b3b42c70aa41295733b44aca30c394825b9337 d2dd7901db0b46a1caf4756b97f6d97e2735ce8c
-4d974478c570ab39174213c071dea6e8aa06c7db c0b32da727d1b0fc00ed70748c30740190b2d4df
-d189734e73b671ece058692c8779e2ae22344354 7ee7e24d0f760ac2ae37bd3db9007afbec9b14ae
-e34bea8c3b3851207b15be9f1c893b3bd4c48a43 98862be72476d77021788a048fc46397242db49c
-7e69019ca8671bcff65acd9a847c15194053eb97 af1e40d8d9abb7bdf4fe40ac82bf797b245d871f
-954ec935afbc027bed36b32758beb24a402626b6 aef72d95c737ed83fae5607883a267201381dff8
-b249a2d18c2c0fa64b64b9e7a09ba2616dcd52ee 5f54ac5640deec78705eb1918ad3632f8070a50d
-8829bde2aee92edb2657b37b12853e2f7d5f308a b0895db8fffdd9443c4a0b5fc00c4478f185569e
-4b4e8377b7208c6afe6ddf0a5c041024fb9f6e66 e406f60ae0d023783374b21f07933d3be0ff62a2
-851a3695fc26d9465c9d64d4b800c5ab27296507 f1eda9ff55da00bac4c44bbd24e5c51d85b9b7de
-e18452f2e3b69911f51eba8f994616180573ce91 e98bd3b28ce34987639b07031503a2242dd82c71
-2564631cfe2b9dc8eccff4c3f423e21ac2bbb745 98862be72476d77021788a048fc46397242db49c
-1f27bcb9efa59f5e99ea51a47b5e202eb8576fe7 98862be72476d77021788a048fc46397242db49c
-ae67786b943fddac6c499870f146bac5b216e288 e406f60ae0d023783374b21f07933d3be0ff62a2
-23a9d1d56b0c5fa8eeb36d104b5e666ac6521d6e e98bd3b28ce34987639b07031503a2242dd82c71
-44e72389f9b72408ae3b90c260a597c9b5100447 b9becdc7defb6c9b3e50142b4d1b3b47db55a54d
-9d37106a7af99903b5779874ab3526684b820afd 40d3ca05893812d4c4f78770d05820fe2fb57b67
-1f67a787e78d08985a9e032b6fbbd2126e056e8f e22e1cba11df224bda05893e14b824834109eb2c
-5cb616734d8b91c7ed8b3ce95fa47f4ab070b4c1 d70ebec88a881e5828fd8e06b4f6a9f5b0a358bf
-a6a20e8baee442954617203a60dd9a76c6a5dc3c 21adeafdc5b697ad4658c22b70a9692b2e693916
-0ce5ecd629d4b99e933fd303dfdf89dfbff9665c 3f420bd39f3b7ca571a482c1b412eb288aca305a
-2d60fcc9a906a9674114b48766b72b6dcecfeb23 cc8c464e660dc38ec3ccd40888450039443fe0b8
-55a885166afc2de7d511cb6a1b20572a3b18bbe9 52c10c34fcd6139d70571ceaa2da7fe550548d06
-bfff36d7d782114afdf6edcaf7db07317c1051cd 662c8393e48bdbafb748f26c6ba125f11adc14c3
-88575d947e5a47d979314e3f82b1278bd7b3e9a4 09f69498ae2fa8a728ec697c094cbbe833f7303f
-7083036801f450cd5bada3f898df7212edc37c93 9404d7e274ffb95fcc3106f34291335a27d4ad80
-91c88d234b97df86144477f0947bfb3549a919c4 671c626b7658bc99bd9b190476cf3ff41478c92d
-8fe573b1428f84af029a9e4afd3dcb75a28eb0b4 108f2e559e81c0b094c4a914603cce0186d3b5b5
-9a34c75b11ca33bfbe1800d6e569dfa31e3cf014 e7cf2539d138b64a2590e1117fdee0ab9f207d0e
-c6378a1cc8a794e5be1a6258ac60d8ef3412ec46 d26fe9892eef0aefb0234e97c2974927be286dbe
-ccb2d3f75195980ad6cedee51e60ebe8496076c4 4fd007afe644938fba19d29bd6e1ed8ec68e2f33
-9512a9b3be9874738af9995f2cfc07f6e65124ad ea2774d9e6a5f8d8756ad651ad729edbbaa0cd98
-9ddc9c5a47fe1ebdfd26456bad808c80eef20d63 38436210f9079950ed05cc69b11c611d07635bc0
-889126c07eceddaaa792600bac74cf07fdd3c8d2 4ffda6d7c8511eebeea4d95b9933b0a626879af5
-56dc5ac59573cfb98380760188805911918d1aa6 5970e8a61733030dbbdbb9366a60b77dc7f06294
-b60bf0946c11ed7791b07be3a8ddef896d51cc22 a389c9356e9860a84a37d15a18064a58b2a17a4c
-d01b2fdbef9b1e761b8495c3ce4a9a31710d7f6d 419be58658adc3ef976e4249ca840d56a4a63405
-249f6f867ec98341add7a28b6659a0a437bb4ef9 d3b7a953607fe592452d64d73cd8981a4e0fa729
-b1a24df1133b73633353d44c3edea6326c4a4ac2 e6cc642711818398e398c3ca09f5b886d1c99ff0
-10e25871632e7e024fa408e34cb66cff4cefcd5b 07e733559ba64b7b8a07253214c85890182c48f4
-eb0b5f6b12f3fed5bc0fc9720ee41263bbfeffd5 fced475597db098d823b4ac75f71657d8c7b2938
-96124655c4fcf6ac497c8009f251eb6943346de7 2acaf383b926c7ac254082c1190ed610700999a1
-56ac0661eebacbb61a8d3bf649eb030d6f498b55 955b2c1e9502f0731c561d5c3ebe2f6698af0fe9
-f20a73401e7b92a31c8b4a7219decca93a913354 7eb8de7c0bd3692e816d847bf076090b58fd2e33
-d24f4ff63a924c8a672acbf5ce5e7d9b895a85c1 e894042a592afe78600d809949fbe2460afd9a38
-26332aec09024c3e6616264a0ebbc6732c8b48c2 1986c11410c71fac17c4752f0b4520c1deb4a42b
-ba8cb8f2b8969a3c7b3244a9c0b91257eab99190 a4fb2609320e3fb2c93fb216a5053c8bd24b1354
-5d7b4a3db45bd30bc0008d3f7df8d1c595de40b5 326334df2a6eef663c7799bdf33a58d324191779
-16c2b1f5d52da32a87e7bacfbc23f0f12d08b0dc 477edf50ea8f58db1ce588293526614e3c3f773e
-088d281a064ecd669ecea38ba79b38c34e3bb030 d0fa4f4bc351da78005127efbd7c5aac87da635b
-79122fac8c0f7f9244a10fde22795480ea9beb1d 0ced0c8b93f255f36e1af531436621a3df8142c4
-728a572b2808dd42aa1f743e4d2cbc1ad6ccd9e9 848b63b914519a7e52f64c3211886e9374942f33
-45112f17b70f5111648cbf1d9ed05c77fe5ec4f2 26b4794a566592a510273ef155460f4529447a40
-dfce202effe70c87e4594d676b42a81b930d8cb4 225f62d242967a16556b6da7bd3bd04629dc6c94
-161d49a516b7373ceb5c3ec419d7342ee97d3629 72092c369dcde88f021c925ed7e9776dcd5cecdd
-0f006c4a9981ba0c6e5b4faa66db4b90040e9936 e1bc1d7a2c4a0910c6d707dd087325bbf00512f9
-fe84e3d26bb0728ad5e3bab8457fbacf6ee842ee a446238793317cfae0921a75c4981a415c3f8d18
-d13b4b81c8a3188e04475c84982234a3f4c0d7fa a7cbdf25f1c20d7357ca0b9777bb096bc1f7fa63
-73cd9b25e001c6ea5cd60b0d93060ef153bcff95 2ad6e99778961bd9f1ae286afeb059e23d3eea7a
-5dae7154bef022dcd2fab2a6e2096e28bdd35284 c02a78e97ca76be0ceab384413da76f88fea0722
-86a6e1535cfae6f070f95bd5a8fa160804648f15 0606f7b0e1be1651ac7ee49636af50cdfbc9f557
-84f160c318230789c087212db88aefa899b4b520 68fd86e7eca1cdec9d7116b7c9f16032d9a96710
-eb6ac8ae8e1762122755581361722407571bbd16 68fd86e7eca1cdec9d7116b7c9f16032d9a96710
-dae5c4c7a85967b976d95c423865294decbb5888 386a1c9b01b2074c4d1f789eba3cbc8092c1cdfc
-1eadc0a1b0cff2e7ac5742c2fd885444d708ddbd 1553f8055f039faa157e0179433870098cda52a5
-7311a7b4a68b8741cc68aa6b1f528e15fcee02b9 2df3cb4c41b14ccb8b4d8ee27a64ec98099955d5
-07ab8ad45d1a501d6f058d72982454b894f1f98c eeba538a01a5f438f96270ae55ad991bba9209db
-99b85cf712b0eed9e188184145311e90d5b2a054 eeba538a01a5f438f96270ae55ad991bba9209db
-9ab84176d2e8781bbaa677e8fe20a5178bb8fedd eeba538a01a5f438f96270ae55ad991bba9209db
-8669cc960d0ea28a094375f42c1108d86f0af213 7f69458cf20c93693257ec7b1e6cdfec2660b66e
-6a1c5adaf545b14feac138ac209d95349401b7bb fcf2aec7cf8da78133c59f37c4eb00e9ec573c5b
-22800d6216b8bc81182f21f4bb4bb6ca37e13be1 2a6e4a66ed02f59d917f6bec3895923f541d45bf
-7ee3b5fe101082f8397384f243448baaef2b9539 7a5cf67209a647461076c219d5b896fa873e6003
-3dd050373f4418601f56a91a7536f7c7505803f3 e204118146867b81130a6af4f9c902bc235e6dda
-e3b0aa5fc8637c6df7e986cd5d479baf64dc8158 826831f8adcdabaec5222b6f570712452dd11566
-d62957ba5d98ce56b40e72042adfbbb2b3366973 06de59cfdba7ab61a47e12ad38fff32171e5dbca
-d13858b121c8965ee509cd3b0b69c5c7f8a502e5 944ec73ab7a7c88bb8c3b3098e6ca6323d79c7f0
-2614592b2c8a3c79a09ff0da851c60dd2e73d968 2707a3a20b5b49ac956648c39ecdbe46c393dc11
-c757976a5c6983cc45e619a3ee3a77467f0a8277 25d788bc6e1c0be0c54690840fb4e9483f64e4ae
-b4a42e8b0bf941d0e907ee58b6d61667c4cfecc7 aabaa62be700a73efd5c1869e085c64d53e70e25
-89dbfbf4c81d668a5091af5ffb5d9bad499bae13 44ce12c4b371c8c395198fb1091b661df278fb5e
-05dd9fb0a2b47a67c156867b6f645d8f2f085182 b184909b24accb92e52076ed42bfee1395d81793
-18d90d9fa65c41f67d9e4732e32a0cbc52af6bd0 e2eb2d7383d70f6bce7b973703b1cb6d989298f0
-fa820c6d137d6712e63a5bdf0c931d19e1ef74ff f22e47548d8ea41ecfdbbf92136345251176e737
-91de637079d82174b7ddb4cd2c45a78563b705b5 f8b49e21f984039a151d72f3f2da54d3025233a0
-83bf6f50a00177d055349db9a92321a8d7a663a4 e8d5209cd21cf21e61fccc9054d1ce7aa1a78e4f
-128976a1f8c18334db55458857df314d811c7dc0 8a5e18c12e493e0e93f3ed409e1aef0884159b4c
-ef95dfda3bd4889663c89ca9604d7a632b0293c9 8f69454c0494a67172021be535bad2bac3c62077
-3eafaab5a2cf631a5c11dc1374742e4d6dc7cb8f 0daade8594f67ea24fbd67ed5c3d386f61da1004
-b28ebbcf8a379fb49a2c227fa8c2bb8aa0a51f12 21a183476e0acf61205771e1baab4d95d2cce83f
-7f06153e00738340e3786f72f5edcd8764f48157 d23928b1e2e531c42c0c41f1689c5f2f8b4d0c37
-6e4b56c11ce6cafb5025f7881d5ad45a736f5128 64c78b878fde6de9e5315e3e43ef688cbdb5dade
-631f58f09cc44cc86ee64d235a8552e935034af4 db2cd32fd5f243ed29b40732b65ea9dd8296cb85
-e63c67b4aa0eefc94da60dc0c8bf2da2089eaea7 e9a8c71fcc8837da3040c65bf94285488eaa127e
-8b9476d57e872715a22791ef73c05ba8e1b33e78 b16c17d1152252976f5187976cf7670f8ed6692b
-fe067f4843036076237b67938675edbfa2e91dd0 50bd092522af580993338722b6abe6ce61beadcd
-c63217db101c052ac2ca17026782e35977874abf 718b2e569539e29a168468e32b1fc27b1905667b
-58c3f80c36d3d5dcbd2455cc0a81f817694df553 1414a21c22c34d3ad2d582c4ace8f3f418d8db79
-80ff4a07ab19d32e31079a4566ae41e21aa2bfd4 a616b095ea5847ae482fa82e04501ed573e99a54
-54854edf847c9499b731de8bb63c2314efb0f59b 7eb0a88a58c1974ba64e9898aed6d5f3196daea9
-6283667ed6c28053396253bd0522e8602b38b9c9 8295edf8553a96748f2c6b249880bd39dae783a5
-4023c601c0be8e20fd918d0c1fde40ea69b06fa0 cf7d6605e63b15dacc66baf98fcecb5496ab6352
-20d27fd844176e328462446bdbc6b4c722d47142 b04ac20be84275133f0264a3ea85821a834290c2
-1b2d64d1a5cd9f074f1c9a2bfc081d62e35dfec3 2e052406967aba9750345853e81f9f6cc3936fc0
-72fb551e2d48b1605fc7df576fbadda6cbde9cdd 072587baa7e5530913407c4c7f0ab6f0225d0222
-31b4b0603f99a949ff94db424321b7e09dff1b6b 68a34c4f97b5f779eb5af332278a8c6a440ec4d4
-44089f8ed3e2d8de9ac9dde5d980e3f821ced449 1c4aed30f50c5d4b2e87d2d3c7c01fc4ddad131e
-3fa77be49af69923ad50964adf2c9c278a3cf121 1e75544854f5e8f47740757356ce285c508a8128
-469ff387aa633a1c115efede8c92c46146eb8260 7291a2e7b01590b79e6a9026cfd5b23dd174322d
-d1180adafc996e0424cbeb3f9ff07357ab6391cc e2c2da64a70fb796c19cc68f308f2dcc5dba9279
-c4e163b3cbaab2940874ac2e96cc2198e91a7cec 9be71a6f0a4ce8f822578a4f86c6964f28fe67b3
-cfe775c48a785a19eae08297365da1d51f9d6970 a4329f16a0546ae5c3620f5495c3b9e83b63c343
-aba2439b1bc235148dfa280eb415c6fcf54fcf59 25756c31e425471f19e1d21c02491d9c41978455
-957a6cbbcba807ca01cfb26d10b96ac2ffad36f6 119fa853c0a61f3f4bdb40d9f9f5de89b8f5663f
-13237a3c61f6c0a6ccd750a65ac3fec104d1a9d5 854da6c6e7028f0d674fd6bc1f4997280120c308
-911718af7f2632b7232281cd5ca1c96979b2b956 0e2479bc6da2fb86c86e450d56b0e14ce92a2883
-92fe33471da76d2a980a9e4eb830fc7af317e5bd 2e499fb1396a020b2a428fae51a1acf556feb9b0
-85e9ac2d5dab8188457821978acbaaea35dc2a39 69710a97e6c4fb61ad362ddf2b4114193d85369a
-d4bb07b7b2dedc0613e6411d63850194658f64da 4648f22c92a0b04e8338250e2a4b205725ba1baf
-12b4987ea148ecd133dadac5c8cdf1a3cebb98e8 73c6e7b053035d986aebac9dbaa222129d731bd0
-0670de72c49ff967bc528d98528e0712c5c5470f 1b0562c2c9170a84bc86acfd3cdc7dea2fb0d56f
-5c760e3360c9bce26bbffcc385dd5f784888fa7c 06bebaad54d8d967e39c16729ff081dfccbbb72c
-6b129334bde40b088f57fbb9a5bdae84a2957528 75a09878d9ddf476f9255da76e30052888566c20
-daaa1ca0e1891df0e600110102ba9bf67663436b 77e1ff77d46fc240c8d8c0f615982682a5c6952b
-9f271ad62926ab526f4bc77e4ec501d196e45fe5 fe3346761a21f31cfc0b6fac72dd568e4e999495
-e8a372606d97db8df1a639e95890a7db07af38c4 6936ead02b62be87e72e4bbfaf941c74af548742
-3d302ff2a805527461083e28b6d712276c1b1791 28ff7ea5b13999a61a6d3383b421f5c886489eac
-983fbcffb9b6e07192bff44ba196ad8e0ce546d3 14447d9249c578e3e0aa3fd5cddfd5ca75b6ba1c
-944711a1629fc742fa0fcb9eaec09c4e26c98682 f39f0b897c0a054043478f18e5bf3e43a689b6c6
-c95d3007fd990546c2e2a02f92af0b9537273821 5566d6c7e56c8c25de325acbd97224c8fa80f1aa
-c29600026e1eddbf014241a3a4954919fd103a98 a61886148cf651cd9c55fd5224b7b329f2b7788c
-e33bb404dafcc13ac1f194edab4982201cdaa0ea f804a7fffb11f79affafaab815982410e513be6f
-f03986c1b4f3fda845e1d670ccfbfe13b9cd558c 9ea48dc1ce62f13af1cd793328dddc57e7d17a77
-28b9cc80b0801abff28490278e718ac7c81cad18 82ed0f4253b917f88e126a4eaf4f3ec1cd69ff24
-4b42d6a30c8b5006a3f8192761ef79f1a7c5fdac 94619cc3d296b912c6ee3c0cfb3fe0989d817529
-478805c17a518cec7f1d180340b2bd08b52cc066 de4366b53c3ff764d9d36321f2bedb5dc0fb15eb
-4d057349b13befc21b977d3e186eb587cdfc856d 131058dfb27bee743ef16a710a1d204ce5211341
-6bcab4a78b51f00504b7cfdb9c78c97be09b2829 1e5bfc408e80faf0437f9bc8e3fbc92d39a3eff4
-92b82c5c85d3bc5be50de059df773233e387d405 a24e1ac360ec33acec6debdfc5e1e685a7a1adbf
-f2c0765b70570f1cdd9fc73773f558332cff53d2 9929ac023c15aaf9d62b67fef5caca4e5098b11a
-a17b9b1013a74e09730f2ab44460bb93842356bd d27f4f4dbcdcb1deb5c616d45f5dca88d537e776
-ad5acc0fe2f68daa961f82865092fd0574d3a286 729164fc41367c787fb1fc85dd72620b808b5f09
-e2e03c08bd47996d409c792571f5c15e8418eceb 1e9422f49a3faa35cfbf3815e388fa8880ff0cc1
-f83d9155beec32d9e71da5988bbb1c7de6c40108 a839cffbb18c76b270724bd8b25e4c5b0bbf2869
-2ea78586986c93409f42c1fa6f854ba49d78d8ab fa07fe94f09ac55eb1ab052e80bbd2eb49a491c5
-e6e21b053ea771b7ed1b8dad46ee2c5471bc8df9 1c3d3e3dba141e5a72dc7625da91626c8e84d7d2
-7996c37138cd430fa40c086e280ddb0b41eeb642 f4951d7be115cc3fab16e8e0fe36bee0c8d8e3fd
-ca077544da0d4c107fda71e2489adef2a5a0dfa7 ca33d91b657491ef35a26578f3a94349548c9897
-703336f9316e5e4e3a471690933425c1f2ede91c a0fbaf478d6e952ec25c7e3d3341a75662805905
-77a8da6978ce83dbc47fbf38e2b72815ae9ffc83 ee704065d90deb87ed3030d3b59327b6d01c97d5
-b527165ade8277695941dcf09ba310b59c5bb38b 4508adf8d5acd7e94fd9c3dbf0b7bea29c8b63ae
-2a0249abce8316c6139841ff06cc09328e189376 71dce2e155683588934ee01a152971ae44684974
-f866d2244f5af6d5f3cefb94672a1e400976b101 c0215f1b2c1b7487b021e18dd15ab416b632a7a6
-03316ce8896d4dd3f8d87dd374adc9b27eab0cde 5dd1e7985a0b0ea9f1773e6ee42049fb97dd55da
-80ccf01b6b9dd1481b2d878df09a22c4e28be8c6 6b444b5fe68044f234a5b5ef5005b9d54543b3c4
-f5cda5a1e748c1d36c25e07656215463d921cddb ab092048de5e48003c8dd1031b17713f0284ecdd
-a6dfdadee9e3ba4ffbb9a6143e82f679d1cc8585 9c06338b7c40b2ad99b50be54c9f7811816b8f01
-c51f8062e911edc0ef30f83402f6df484a3071cf 733720ddf99739bb95fbc4db46ccce4e7f88895d
-942c14d4170fd7fbac2f5c5529c80c45c4801bf9 907e5c6b8ddef0f0df6428b85c5f4b7abe6fc9ad
-d5c68bd99fcc0b67264b8f462849e29490b4f1b4 6a59f6ae22aacfd723fa37ccca515b4fc716727e
-db6b14da5b24b9ba59af3e5d39f0b8e09846276b cc27dcb3da6e90c1ca30805956cb1c6097b65ae7
-d8876e35474ce9ccad3acaf29ab22bf2e7c81cef 6d083e611c5df8b9d5300b62359bbc8d17e0ea36
-77e15ccb228b5d69da97f4a5f8a0c681a1deb26b 087cc008623fe0257d52d0e3f9c92d16d225fcd0
-3e6ac2901869abb9724b2f95c5a5518bf0ab4a77 7a8980823d9ad0e8157fa55f63a439ce692d037f
-958473e1129ae6f6728d5d30ed7ed1100f841906 52e03deca338a742e75a69c065cc6bbb31168131
-506fab7a1a33743198db035beb2e87898898a63d 8f25f2a26e03afbc01630acd3029168207a688a8
-516f2131782744346129278ff3f102175a534cc7 987016f6886f8221431e6de3b9279dfc9c87db47
-3916800128174933da1a98f174f382fe4d9fc483 e96f4903dd6d00755d1ad6324062cd7c2a0b4b73
-3098e1ad634126e66a34d140db1447eef21308fd 2abbcccbd42b8b53a5ba94b940652ee23b4b0a2b
-b86b60e3dfe54714d2ea83abebc17b8b217bcd92 41ba94d6b998d03aa1701aea837a28e343b80d1d
-19f1b0d499f215b8b87961feb360dbbc1962a01e e47f30125ddfc1686624f359feb0f05e1b7169d4
-fbfeb2a44f32aef9214933cf3dbad846a42250c0 602c9ae706e22842c9a90137f8651c8eb6b72ece
-022d8b90d8beededb02f726615365a2fe21370e8 601d1f86ce8ffcbdb2d931435d197d0be624c69c
-89b46eba3075ed5180ae4290368a66cb82a19913 85493e511acef73a975385c53e064829423f642b
-1e9f2caa9c16dcb7dc83d60c3632b3d09e10646c bd321533d53b8952b1671f25d4e3743c1ea0dfc8
-7ec99ad7b61419e3f7f548bdc2fede9f261e892a 854ab5b6b85e9b9e3016454c6dc2c8771eb61899
-02cc07c34a09fe55a84b46b983cc0cbc05c75dd3 ed110b03a453cac712cd636df817be9664b785b4
-cf4253780872a1783125b238155a180f2ed1b16b de70f40b36f02803e72fa0c1f9c9561218038296
-86c2d4c59acb4554ee1bd90ebbb1b4a7d5eaa720 339bca13d8c48276a062eabe50dddb3a2690a11c
-b388d8be251354e44d5029594e47939caaedd5ab cd2ca837011f1f4991e680b08591087e1838685a
-0d8100c6e64f9913423102a890ad30c538e85b56 acb06b7fe118014e75055f2ac7088a1314343b6f
-bfd53c3574956995679dd6c2c50a074cadc6eb1c 15ea37a4ccb2d964bde2e05da3187c9f5ee7f6a8
-a52842ce1fa9676b86a7b68410fa5cd7e3184398 93759f9bf7df3079ee0b02819568a21ae976ef0a
-e28e9a118245b0c23fb04ee3a83cdb7281c9cf87 558fa30f35c9a938bc7639bc8ab9c03e181a01e3
-397293a1542583d0bb4f348eaf4cac0e49e36fa2 70e68577dc0d8fdb85fe3bd0baf414f2362709e2
-c56e2487145779b37e98dd750abe28af69571ec8 788d2f327a5abde909560dccde6da1a9dac9c2ae
-2b4f2de3b320fea26441addf4fcf1c809dc45ced 22a5be5a5eb5d6691f32fbf4169cb7ecc23a1195
-71d00d67e98590933d3162600c6b9e5cd5d6c31d 89402970b3b2cfda086ba9f6cfe78cbad1598801
-fb21e02f8f08e7f26acea4ffe85a29bc049a4032 2763d10d2f24a85d4120e979400d9b265c68b731
-c330cd0b0b81f00b1b30a0bf2472264de283d628 06aa280682b599ebc2dc36cd7dc6bc4fdb5faaa8
-a51c2b2c677a2cffc74cb0974ea5b8f229343c47 f404d28bbbd4dba08b060882d3ff8839539d7822
-53328f9ac5d383e353e899f0e17466c80ec5f68f ab97eeb0a5825f61edefb4a6bdba3a62465b6a06
-cbea81038a9923145c6cd1792931ca1453464e02 2ccf8e06290062a3a38d3648f32f63ee01a2ca27
-5d6fe1a0e72a869fb3afd29319549f858f8b4c1e 8f73d49e58a599e4609f1c5615a9485c3775b5cd
-e56fa9b5466736e150e9096897c079ce0c629693 8b64a4ce377f0616190df6d6604622f0f8d8f26f
-67eb11771f43b409189df5b6d99cbc36c1b3ddb2 a1d91de1346169850504e47b902005790e195069
-80f5e5db2847ea357e7bd47c5afcc05370648978 cc4019a01d5044affff3c68bdd9ad924a3036a17
-a86253548a08f3715216b81485e7d4ad2dde6e48 1bce83ffe3a0ffe070b2b51c6d3bb34c12eb7e09
-9f1ea1310cc5e346d8d6f58f613be28ece3a58e2 8fde750a94a5320fd055da28df59c194036ddef5
-f389c8d8968b59bbdd2127aeb12557fef339c831 7dbe0dbe55b039a91beb3c2cabf0073a6d20f15e
-4ff2d51dabb1b4fdf6b72e6bafdd5eb0b137ba28 4640442e85023854b6481a5fad79306368f41c69
-c9abc11fcdb41c8f0fa0147b802cbefee61fc18c 2a33588a3ae5ac8ee01218ad12c72f886cd23c15
-8a04b777ce9565f8d58aee253bd28c4801badffa 6484c10bce9a323fd2d70b792cbfc47fd7e742cb
-808b0e3141a083a667d17e3fdee62c5e9c16b004 457d50939a35d34c10c39fe0c7356d798d45ac29
-8c3ad9d75ac5e83e95c558eed299b9205381ba86 36d343db77dd3532b4e8406b10decde1adc3c22f
-e57f6260a97a644687243aa20f27c834e43526ce 4578736494eb288da7d1bdf414d632f52278cefa
-dca224b26e778ff4d6b5e1f792f5af28fb934e06 17ccc3b2aed9096c8883d988f6d7192a00eeb65f
-5db818d7d3d222ce2a3294840dafda906c30489e e572e8322b1918d3c11cf50ec9f5d8dcbfd4c11f
-07542a6d537b9d78a1f3f6f314795482f9226afb f399df8878b066c207f842a293442fa584e03550
-dfd56780bbcb8e3e9f7de8b9621d72bcb5a37234 765ad4a8e74e6aab37259cba5a25ca3c5a754922
-c7355eb34285ce27c43b8a6a4f7f68ad71f3c305 c34701c0a7c330c0e65d0a17626b817287ee3309
-ee62cd150e878f56f80299440cf925615e89d48d 49a1e686b32e369939c8250e7f3469bf7870d187
-a9444d94467ea55c8273843d8d45e2fea98d2ae0 ba2dea0eabc28ae56dc529b2c8867e2e62b005b6
-0abc510b664cb2228f35a6acb871fb99cb1254ad a194b9ca63463f45e008a4a836c660645d30924a
-db8e08f8ba36300210ffce22dcc062435fb51a44 e0988a86c84e618445f6d894fac5a9456a557c5d
-8f3a76f9377a185f30fa278ba2e306ba7f62f477 04a26c5e1d0b7f270f209ae69927e7bb3389b278
-7eeecd6c35b954fe16a806bde92672a8d9a09fb3 67b7572b3042e77de77c547ab2f609e7c13c365b
-c24696bcac95b98e371241627cb3952e696f0570 c21055cf5e8ceff9f3f41fd7413fc44eff4b40b5
-bf130b7e81f1ac2400f09fa453bcbbc510855393 a8f910ecfc6fae5660945ca0fd267ccf46e2ac62
-f4e6cf6ed133794c13b6fb6ef05d610543bc5c08 58cbb433af9e7929c5cca9df7c6f2e440e06be22
-ef79910119fdbba27246e1d5d197b23fba85df93 ec9c3c2cab92dc1f5d90c7f64bc83fc68e0b9a7e
-3a29a72b926802b39b1e11a38c05e10ac7ad1d43 d7fe10977f79e20ca5782c74d19cf8430e7a67fb
-5b0788f42b91455f34d33cc0de14342ca7e97541 7e3748063f128be4d9652e5883b7d905e7916b95
-f3506386220c91aeb167309dfc3a97c1f44d2d2e b50c5ee1343d3c86a82676d17033e2fc3ad94afa
-cf8bb38f91dc8e725c997ad729d9f72d545d9b15 d98636bcd0101e254ed8a1f1006309a80bedad73
-fd294259516f3dbdf3030670704b930c2b6ed365 8757040ff4af9f2e9453704775c90a3102b0b9dd
-83126f0ae6e7f5d16649b8bfc4e8bddb54d7d7f8 8704da3dde2a9585064b98781f241ad95d3427e3
-5535bd502f7c77eca6c35e91f87f223af6ecbae7 491a8548f7c898b5df1e6ed7043bd47c984226b8
-3cd3a21b85c77bf7df4f3c2c79484da41a3aa93d 530beaea3ff86cfe9e20ac3dd0aabaff46119cae
-3bec37f2216c6a9b60cdfcce73a25b5185dfe0ef a8a18d063618040732cc9f86694bc19813978a1c
-f223e321663ce9bd3b65cc91895864130fea18af 5885ac3d134540db2493391dc36296986789fd9e
-e0611ba5107064dfec93b09a4d232f464d9fd695 041ec0bb3d0f79e1b1a0dd4ad03ea48d3f20b74b
-6bdca011d646029f80da969745f0e48588583a2d 543c1c555c654cacf7b419c21adbfd529fe8dcde
-f7cf1d3e6ed8b6545f308744861c795ed3e463e3 0b109ef104a2c3a634983bf37052095cfcf170f4
-433bf308b1cf4ac256538b31c5ae6c75beb9d34e ecdc937a7abd4dcc27af93369bf315f08fa0d433
-adec4980cb43a60763f34a3c5dd1192418c9fce6 f693427a935c8369e89380e5cedcc0bd406f2f70
-0d065bd0e982d63dd1a6f693cced82fa44707180 acf4029aa74171ed583b7254f9d5b3e921224d16
-9a4883cc8d64f368d7fbceb4782ba41ef8b7303e 6548efffee867d90704d061d024a97925d6e2213
-14349cb9febe7ef2ac9b6b53fd83ef1a471ac9ed 6127c2bd38f08a5ac55811f0063af9dcfb22a3c5
-32c4835d470bfb1759b8655b7564bc06a5e8d7a5 8c5170d3273a8184fdf253277e2b17a527462baa
-1dec6d88510f990657d7234c01fff8d4058548f2 c9b76d3eb9360a39a382151912f2804ecff57586
-db0556dba7f11861cadf10ead92891b225c6aa7b f336da706e3c10c3d0a6d444d0c676a40137901b
-87e24aafa513240a6c1f80a6fcc119bd1b01cad3 ec99d185da9f215ba20dd4af0a009fb1f707aab3
-c63047a5bf60146b2c342534da3dd787cbe88f5d 9447b53b00bff63a72be24a6c22062c4fedc1b62
-62030d606ab54f3c93fdeef6ea95b1661efff8ac 536b9f5f647c3f8107ba5ccb794d6961469d846c
-7409758466d6016c227c48736228861fef1fc75d 5a7a1b5cb8997b52ade489211188f2033ca28838
-2516c1ad247e65e0e7570e069571666aab3953a9 ef4a6c86a9b9d130426c3bcf274987f2de67dd3c
-acee79e16451e9b15dff50fbdaedb5f39f3b757e bf676243f820e2c039abaed6004e0d97cf5a57a6
-84539dd2806f0cc11fdd73bf9eec27b6c39ffefe 867754b7de6b34cf6e66ea9f8ac60144fb89f9aa
-7dc4f66a3b9f3ff9553c6a70fc2317acdb7d8fc9 7b685831b007400b5ce0a72490621bf4e63d7e87
-e688c57d628006502883955331f7d06dd6fa5688 99cf0d8b74e9eaf2580ec55c665279c446ac196a
-8f98b8e60438b233bc36bb1b9d65587114c614c5 737badaf46b07a72807401b6895238255839aecf
-25e6c9c5463a2c6f7da71b2c9cbfac216834d639 737badaf46b07a72807401b6895238255839aecf
-791ce92c43d7fb0587fc8f04a388716f68fb52b6 3462af28e9d4f145c5fe4449b6b46f9a37814997
-5d3e3db6e8ef7f98da866243a5797c65f711e7a1 9ead357ff1e79c5ba5fdf2fdb161176d13afccdc
-834652c6656eb42192745164f1548a2b931a0573 0e18c83e50139a33a982f4ac7536e2cf14d35d3e
-1287de7ae85cbdf459b2a44389f174cd0aeba1d5 2e69802a710bde6482ead438dbc61bb81902bc8f
-0de2a2f047428ffa9e2f909f3cabde80725b215f 6502dc0a8ee7ed80760372978e3d2fd0a8713290
-e714b3edb9cf98ec27ab28d3c369aa3c83633fae a7cbdf25f1c20d7357ca0b9777bb096bc1f7fa63
-cd53bd5802fce4ddd57d172b82601a66b9af4584 6502dc0a8ee7ed80760372978e3d2fd0a8713290
-a33cffc72d47cc0fcd2e3a55296d16ee6ea76834 c0215f1b2c1b7487b021e18dd15ab416b632a7a6
-bf1ab14330e05d91ed1318a0f58f008ab02a2efc 6502dc0a8ee7ed80760372978e3d2fd0a8713290
-8d9ac784ce3d2bdd37dfaa830c384511aa4d809e 9bcf15229ec34540a16b552e128f3a053e9bd57e
-d614341df93811c56b3c13b6b2fac03605a9f5ff 48e55cc57f5791630790467c3818ecc5a6721394
-9a206c067f4d3d58b95bc4e2640b1dd09c272e5c 48e55cc57f5791630790467c3818ecc5a6721394
-9e7ab3b5dffa9095a5a366c0fd5672e6398a6003 de1ee93fe2f52f2a92ecd7202d4415ed640ba657
-8a3395caf203e34912e042308fca13f61faea913 bc65ad8e75fd302316bdcb0510c6072ba1b23e6e
-594962dfe0f6c02326196cff71bdf0dd469cde16 801e278b5e73714b00c790c5b2c96a66338b768b
-09f314ce3a105cb04e4ade2b69a1fedb81772d3c b05da7c0287ca3cbc52d1548c941acca9d0375a0
-cf2ff9c4833caf19499a6b58e6146dea9c93db8c c5b24021b5f71538c45daea94c2fb3fa532dfc22
-fd9e3c78b3af5282d285955e3bae609d1d9070da c1e6d019f78f1d32b03e517feeb2ff1bad5bf9b0
-86cc0828d429476d0a60888eab559e6cb6190753 9d7f5999bb5dc8a7db1c53dc087c77a50dc2812e
-6713d107c997fc4a94041efb1de3d3e09ee53cf8 0a21f51af8c876bbd111abc432dfeb909743edf7
-f87476e5be9111ef92f9b0a9fab73d25209c0896 99b7452d9dfae86afa7d121da874bba7d022f70e
-b27361e41a5a4fbb078f3c814c0f1bae19b26f86 27b2dbf3753fd51a08beb411443dce04e57a94f3
-490dbccf90c719ff12e0a5134bb9a8c983917e5d 2a27d2e25ff6d3196d770390e4d72901f95a90cc
-1c28aeb96205444c787998c617db949fdd3448c3 86491680ac2fbed556289cf20692863113431f77
-a2a04a30fad39ecfb5f91047a6d9c9161b7c878b c79ab7d87010fa675b99a095e45786373e5da0ee
-ebab63cdf4eca665a052ab7ff40f6c307145886a c79ab7d87010fa675b99a095e45786373e5da0ee
-83f5e5c02236972f18955a9284d8bfe27c48109a 7ba46eac33bf048044cc3b90200f58c0155dd60e
-e498bfe90808cbb82683eef054d173a901ff1005 d49f8d76da3fd6dc0d2df481b8fcfac63d92c568
-717638689f8f3fd73b9b734601b3cfb92e446ce9 4422347b28b3743417fcbebc907303fb6ee519c5
-61343fb43f3a61a2811b13616e53ea5e232bf306 cf7d6605e63b15dacc66baf98fcecb5496ab6352
-91e87a320923a3465c28546fa70b5bf874359c8f f804a7fffb11f79affafaab815982410e513be6f
-f06c05fe3ade18c024534918c094dfff16b45098 f049436cc6fa843e60d6d3a3c40daf0f3e461ffd
-05d787c32956369d19315cd848e773eacd07b8b1 2692b918078668c004cb707098dd43b99880ed16
-c85a34221013f56399dcb027d16908e0aee8362e 4127587efcb161281cd0402275a27fa23c578a09
-19e5e9cbc909fb6ec2e8132f3c6e21f79c69ee05 e432c8279394d69fa2796f1595713450da3d7262
-267e220098dd268f7d320adf85db037a5f10b5d6 5a3c202b8818f85bec24b4ce1a75659d33307d5e
-b55c92a793e24488c71bafe4daf6299f432b5241 bf3cd62f7f41e295dc3187ea34c73ee331d46598
-051e1c09dda77aad5cb2ee67dbc6218ffc12c93e 47411e0d0604bc87734e73de5b49d6c0cca4ed9c
-322b6c7bdf658f01a8e18e5f7f82f2605c0ab10c 88fbb7219be6c29444bb7b4e4084d0c384cf5462
-1135f5c68bf182798e770a973d87f6198b3f1fe2 9c786368222b42b5b8cdff5707d7d735fcff8f10
-ad94751ea0114086f4bf190de6cdc87c86216aa5 edd5f48749a6ab8c49040ef26875d9393dbdb268
-b4c6f7f9390471ae21e17c99211b75a6e329b216 4b8b6d760101f7e0a5660e1bff9e4f48e999377f
-7d7fdc406a355068b56805c1ca142d7b1665aa31 b1815cc5029aa1ccb7ec16f4f4bfef7c856881db
-abb99731e020fadb5c336a72e97185f4d8d9ca2a 8fcc476f38acf09b94890c6e345f9113c257dd00
-255593e9dec1b16b82cf772c90d3b77bdfe3ef53 89959c21db326fbd5544f5b9a3859ddcd8449d97
-aca615aa6242bae0375cb8770884d3ae869cdc94 b2284e39291398be597acaff25e98d2a91a5875b
-55efa8b963e5747aec915b3bc9dc3f5078e6198d 44c7ab01754516bf5a80c7a547b7c6a7f933f3b8
-e330fd696a8356432d783b4b84967a2c7a5ad536 4511841a7342f664d39753a4ee4c0f6102654399
-153709ddee866bfaac88b1d5cb9b5498131445a1 14504863530349d518d94f770496b566d89260e3
-2b5e961656819bd7dcb7c606aaa17fb0fb6f85f8 8a03ca11d794c7ab180fbe6bcd646b930c00fe74
-600dc904839557924cea729c99241dac78ec69d4 ef90d13c9a35702c3327e5a6c2c33de223b1d1bc
-1152be6885e18b9aa842e9f0682ae1308756b1f5 379a781ee06f58dacaf2de91f8e049cf907022a7
-c050d06a0b24a406a806572ff6eb7436a3b3903c 4b08015405cf7a882dc12d7c202428761311e4ec
-8a015aa8f7770b10be2ebdd45cac5a7e42622111 ebf82b2385a3c957c101dfc7f8de4c6e78428f2f
-b1a7825481e6ec3f01ebbe7e16bae14d3fd07ab7 16ac908630cae0ab625359d3dca43564823af3ef
-2122830e940c5cb3cd2a65699f42df393c6c096a 821e3698f9962d9088df850a8a60c337b45afe7d
-56061f8d26182235a16ee3499ffa7d974bd1c96e 86caad1c58a69fc24b3d65c2941380bea5e39a38
-a47a8c8903fb77a45d422ed01b74d557d2db3317 385d45ec3bd6630a8286b2fb4cdede1f06107f9b
-223e4989b35b0a2f2b1bdd2d0fe09a17f2bafb78 e91d451acba98e7e39c5c494cb504746c3b47f45
-59b3f0a6adfd9c9039e8c39dbf92a076e62a2a31 d07326212226ed86311f3608842cff2d7b9099ba
-8f65f6487ecfbe61cdcb8d86797e4b91f67bdfc1 54f5fcf64586ace902a9ec56d24e7bff51520b23
-311f95907425df5defcf6ea7fd7d2fe0a556abc8 55ffc33402fd00000f9d852316d7a992442010c1
-f48d8142b4d3b722a77466bb95a9c0f3cae92d3e 9cafdb755f05604eb2ed360618d9ad59964dc85f
-a39c639f6e35fd150ab862f58c6d6ecd6df52793 d3bace25164b55b60836b651b1bcc6b1de98cd94
-44401005b8049296fe73a4a0d1ac8f0d74d9b872 dfb69197cdc9950cd6832f946511b3de1e11d969
-53c57ff78171ce40ac72674952a8a3bfc70dbc5b 9dd996e14ae9ac7f154688f714daf0f4bf3db3d1
-e60577d9157219ec28e491ce012d71ae237c9ad6 011262d03787e227407bade47864ff8463d44d0e
-a052a4a64bd8535bd4c892b24489bdc242d1075b 0efa57294bdd200044d5108085d54968cca23460
-036ae57aa3602a0a51f60026417eeaa838875611 a0345220c9960290a380540ceb18a9e603e7fef2
-43a2205b2dccd9e8365d0519c280ea890181bc56 03eec98d7d7da41f04ee656315c2b76236523571
-ecd6af0a9e00523a8bb2405757a2b9f4cfa91831 fafa0fa4936628f3b059bc6dc7ed4ed7d71fed06
-c4fb97814a67094e3bcc4ba81414f14a73ae8446 0b7950c937662cae43759077af44564e320c9f35
-a92ee8b626b132c57e087421ebcb88766e01fac7 0b7950c937662cae43759077af44564e320c9f35
-ff13630727411a6c430b6c5fe2e35f1e64a999cd 510b1db066d4a670c3b6d9dc846ff79423d58ae7
-04073ce6bb910b4d5a9d56d7f817dc25094832c1 459e17c7ebcf86b5a22fd5a5b2420a32cc5b235b
-21c452e3036ffc80295f13e267146d9bf3dfb8a6 1dac28bdeca44d525793cea4149f9b4766bc2d72
-0b3dafd2b593294c85c74549c6f96552fb9e8e59 3733db1d43ea180cc010bc4073d5046f93107682
-83986113d14fcc59704eabe9e428b3aa00f4b15b 0b7950c937662cae43759077af44564e320c9f35
-5038da0035f09b9aa97dc3897fcf3d8df07d3cf9 3733db1d43ea180cc010bc4073d5046f93107682
-3f111cc8b70e3d84c859c7833c8e610c0f0b141c 88bae70951f785fd48d815ba01881eb37a4c8aa2
-56bd507d96dee138e4271706204f2911186d3e8a 1ed4a90553b23ddd996a13e478aa3f0d0d22cdab
-1a4db62977b352fcb3297f329b942c712c527ba7 08f465556aa17b7b6a5f37eb00419965b11adff6
-2e1dc4043cfc4ec3ab313bfa07b90fbafe035393 08f465556aa17b7b6a5f37eb00419965b11adff6
-fbbb86965fd22969213228668f7da8d7f0926053 89fdcc9057782c0283970781d9e92a9023700333
-a8139fed5e3c4166d5211c063d99f399600292f9 b21481f43cddc3ca322c4fe1ce5ed6d061cc0332
-c5a58f01bf583ad5a4160f15c7bc1b0270f25603 f9a21a378cfa54efbb1da2d3d80387564845fc55
-73569f59123f170c64b41a4162165e7c45cfa8fa b3f74ccb35a0096724313a9d4785194073f14fc6
-932c99ca25be07095892728063c0d16d81cda8ec 709fcdabeee5b7d58c327961b57386014b251227
-fba9640b51f844629f6c5f2105db7c20c8f472c2 0c1a25dcd9bc45988fb7b5ce2e3b55ce994b52b8
-c2e338d999924a213ed12b7ca5b09c4132b02fc8 2def259aba4ef029f926cfc83eb14a111f52ca00
-2491d8871750b39a4aef02a84383223dd8369190 3202bdc7e81afa298012227b5b6311ab83f6bfe7
-e4c37e24e842ac807b924452582c1fb5c84acfa3 17ff331c1da03ffa3263fd6cedb91bb96d8ba6cc
-dd5ca14a8733d7f91d6e256a7da1ae86861bac68 57d8ed25521c461530fe72925bc13fcd1953ba3d
-1527f42e0ad200790e0cbb4441b8c97afe2f1e8a d387a502a242bae1fb4c03194956f453b2e8ece7
-4bec4a6945425be1b38c10fe5d2143e84c889302 1d84e65b4c7268a78dc500825c48e6a5f007f08f
-b450f4c4af38a2f1765090d8ecfbff5fcf41cfab 9feca4bc3982463f2d9a655b749903975ebd0f97
-825ff1a98f8d5ea31bdfc4462439824086d4309c 9feca4bc3982463f2d9a655b749903975ebd0f97
-e5d2789da3bdc3afbd8cbd33124e9b83054c7a2a f2d7918f55b48c43cee3f6caf56a876b9dc61735
-92fbe51dd4f8d41918048a0bc97b1725e6e1b7df 4f3c9e2ab62177fbe1e841dcc1c6e2101273d058
-b33102d061b8f621538e6353d8907d73fa4146a1 77b3914578a7612e47de1e11f59a9e64ed530e63
-841198770029b34196807f227c55d15fac3f9ea9 b328228062c670ecf9c7cb131628ca133fe0e995
-308e8d32b1a98008046fb935690cf9afaaa02bfd 0f5ddfb7325b23aab1a8ff73894de96efdeac127
-2a5b70683dd767aaf530029afd8daec88c378123 c34b9f3dfadb8fb52187b8f362d7138108b59c05
-3e7e0d9595fdd5c0411ab9c1eb807833323575c5 3cd8ee16e30529e260f2e22de43c972cfdca85aa
-2ccdf8361042c6d63111c1b1f1c850d41fafab90 32aea2019bc5ef3117e7ed15ee8d1c2482e5bda4
-79fa8a6643205620a0a3e8a96e8383f31ed7dc5c 5118dc16f54d46b1a55d088b6fc923cfe2efc876
-2807de0e00e995c4755887d4dfdb47f9ea2b122b c53b518eff2a31d643c16f2d89be7468632999d5
-1cfbf15b4d037264bfbd52f8da2a5bd62e74e753 60db407716fd4f93715785a56cf5d9ee9c228b14
-5a74c6a97128f041befb323a22e9b4bae8d299d2 8b46b0b25ec33a723ce02f82cdb6cdf3e8d49045
-4b4a446d6142b6f6388d754683459277edca02f4 57b1864beb3f81ba231312de111a32bc680a13d6
-f83a04f05ad097b855b73e28439bdff4b35d181b 2dd8f4f338606c4aa6971e7a42b2926573d9fdb2
-b2025513bc2d8da61abe81ce9f7e0732dfd8880a 70822de00cf83835c091d87706dafb33c55cdf33
-46690a965dcab9ce439450f74ec4ed662d3742fe fe6512dc04f17a6c2d4cae7e68f1fe3cee44ecaa
-94fd25d8d5d7eaf347683c8ebd56e877036c362c 5fce4cdf92410167b00df47f048260aa2d1639a2
-39ff32c95200f46c53a6156a00d8f76180dcea41 f60f0028c1c24d40bb5062e859a9e2c950caf732
-169b1b212141a20b96416c059e924520a95e857c 31ddd2aeb19cd19f13e31b0cc748a636da1140ec
-a37e4e72df0b3202e4d7e1eb8e38568d596ad9b8 c62d77db57749ff9170b71b0f05b5a2ba859ce90
-597e27cfad3c3f919a4204a169ba1bf2b0a78a58 fd64bc0660a6f190d69070703a52b01487860524
-4730f66ff0811c5742230191e5a7d07b1919f9d5 151df40ea7dfbbc2d8b13aa36400bc978a7934e9
-b31ed2288119fbb1fbcfcf9836f9ad31c1b181ad ae1a8f1098ce89e48705178c2ec5ef9c3c3383b5
-b2b39f16e462cf9c3e93388c401498182dd9dad5 889f10e844b6a1fdb41211e52c82ae71e9cb126a
-e6b3b31c801c4a3022e3a4731894957ff1b57562 de2889dd35b1965184f55546a8736a3571a86f68
-cc6ecc3ebb1cc33bca5b5f24f663e1e7e0a4f550 beb6dd0fba7d3782616b67f6958516472787468e
-68046e643fa618d76799d876f7a28b7a82409fc3 7a34439de5a0c26b9083b4ef7b56ccfd41bacebf
-8b9bfc4e648adcc8673785d73c65e8a6412163dc 0aaa12e3d2fda035f9e88e3155a5d29f6fdd9ef8
-334dc41620720d02cc2d86e5bc13fd002ec30616 34361413919f7bb9a43c723e54b1439292a4449c
-1e26077ae6b6694e37a5f13e2d4001dd6a47d970 2a19f323916e9914771e62d006bdd395a9009aba
-bff8128b3555ac5c0fa5d324362c024fb4999d35 b03cf3f39dff6bd78570556603fafdce59f59c6e
-65561f2cfe976c06334e38362da6612d569b1552 00da5ac8f955b5dc0f28c544adc2a618a56af8de
-54ca8cdf87232859aec1af57f751a855255cad81 b4e9d9037b34765782544de8b660549b5e9c396f
-1d7e1ad5f33c93101cdeb63b17b09bd78d2a4265 8a5d042920670199bbebf67aeee59afcb101587d
-6053425574d84ac76ebac659573cd9403b32246a e2babefe95fa4463057c7d7dc021f6511c353c13
-879d7ed98fd60d27fba4ae661ba58802b95751c6 142c9d85397803f96de56fb7b04931d4b7679ca1
-751ee3d141025127e7db12f4a00d427a13d16128 c7470317272192b10b4117259cd111bebc8882e1
-04192cde1fcc45a5dbb6253518e47ab4994e3c3b 4f244b9d28e2191531c91157e50ca7e2676569b9
-87c03ce44a91f595142908ffd0cf1bca25c1868f 435c09a0e67fe1fd5a3a95938260c3a4a05aca3f
-736139f1797dee5cf6620f7fa9eeff977a4b9235 c81902c9f687d32b878aeb57d437cd9acf02350a
-c5cc5fc45c60b3a0aca8a61f82d138590b810d0d 7a8f7b9d5bedbd882a0fc4f72b8438270afb9b1c
-d2317ca1c8ac9a52d7e0ad61c74dc715b79fa923 b4631036df4c10585c6c7913f0caa7239ac777a1
-6f36b729584c7cef19bf71410617128f5dde22b5 edd996beacc48ded9ad9493d8b6ce34387393603
-ce08ac4450350e3fa3aba8638afe62e2245853c8 9bf37b15ee1b6da4ce7105901c1a4fa14172a07b
-8dadb8a822082a301d6cc353e12918c34afaaf64 7684cf8a7c2a5f3d0ab395a33271d83aad7a59a2
-2bb54e57cbd8f6f03028f273716f657e60fc6160 e8aad920e2ec389cbfb32cbec9c0b4488e4a3c3d
-10f44700f38cbdc0112a9201d0aa277ec26e6f92 10407a78c343f2d72fbbdd31e6882e4ad4ed9c70
-a66efce5165e7ef37466662305476747185ceaaa fcee71382ef69ef1264fd655cb1e1d99e3b7311a
-5a081e14e84c0dd4a30b5e3317822e66475ccda9 f059bb3ed036f1bc17c9d10bdcf096a5ef7c6d40
-007e129638684fa320cb3a275b39ffbdf2b8cd3c 8ec85affe466af3cebbfdc382e1a03aece29c021
-dbe9b78e28428a062f41e8774995470f854ffb7e 25d65aafcbdc80af70c65fab5887bad9e01f2a56
-cc4de0bee1dc04ae403923bc7d6b33e788f87b50 09aae980f0518854c6e187264c91ce6c8c9c32c1
-1576c267120895425b15a79d8386cf1b8444a95b b085fe82679eae94587bdf2535c7f8b141104454
-2423e70c96f3f966d4c1051ae7593d08420793c7 21fa6534ccc0db2ce296a3e8bc100c6ed6b1b467
-b46597954dcc45f5890a07fa8a4c9669ab04add6 868ceac6707886afaa5ef1a7a78727ac3a443e9d
-3bfeb3094494e15e1c6e7ee9f27d1c79a6e5d74a 4d78f36764c1098fc80161c8ff48227d5307fc5b
-56d9e13269925f895a10b3007d908e4b20385886 0a20779bb79b75c1073ff32caf367c58eddf523b
-7a1e918f10e1711df9356056efcc68e93b08ec4c d9e8d409a0a54a59ef1afd3fbed8cfce5729c56d
-85181bc92cbee0ee506900ab00c3547c75f8b33a f2f1fdcd22b25021f47cef5696be8bee1f60395a
-235f4a5d3b1de02e8aea2b59903f71d96650618d 59a04edf1863998b887f59cb5f61d421d62522de
-188fa040694c6b688478e06f0b068dddd0b128b9 98e1273eaca5d8baa3c285236ce12f3b7ba0bd7a
-894f88134cc2e6aad904f080a052ac02fdd37100 e104af48aa6dd3b15bc54466e97e7ab2b54230e4
-5f173d5f271041c286c1e947db5086a07bca0da0 4cb4074722ef2f089ea5fdb0ecafcdea575c9e05
-fc67e1d649820b295a7ceb791bf8ea8843481fd5 625ac9f77dd51bba1c4a0384673b46327538c8b3
-80cad4209a95366afc0a4074f2c8053098b20324 de08d22a395897f4e1c4ebf5934e917269a00066
-931206772c28001b7a4f0fc916d4699999ce8c0b 300825ee6a19871e99aff8b7e219a7985ab9ce57
-5f15548991d17075a6e7d10020f4c1527e846dab f55d1bb0a43de2e6d22990f277c176796122eddd
-29fe86eff0aeaafc3525505544e53c18370caad3 f55d1bb0a43de2e6d22990f277c176796122eddd
-bf5a6f90aac72c65de0c8d509f3b12063a03cd1f 64fd3cb6c3401657fffe00acf7d6a0f20300e9d9
-873b8d76b04d6f0f860f4cb138411aa1bdd1637c 64fd3cb6c3401657fffe00acf7d6a0f20300e9d9
-dcb0804e63497b8678b5c2def0ffacc7a0b13eeb c24b495b860524d5136b95659100b290b6445663
-40985078a8fbdee7733ce43b58a1df2799b83276 decabc3ac15a4f201e6733022af2f70b6d2238e8
-b23115a90138b0d5c3775a10f67394409eb81195 0cd0e1f1f10edb94c74a6c5d48df71ec0a291567
-ef311f5b5cb9e1cf6e4fb57f918d50930a355116 aeccfac578797bdc65ebccd978853305177d5068
-a53a01c3b8bac8b68ad82c36124e3eb717a71474 f70c5688ca97ca21042230d745e288fdb597e875
-428ad30636450c30c2b337f15f12f7d54c1744e3 5189d911e5ce3e19269e6ad0749be734bb7aa2d9
-9c3bc3a094f11cbbf47bd358d857212ce1728148 ea1f8977aeefe877a37808fcc20838d336777f69
-47e8cd945a242a2a7426e6ee18b66387ca512cd0 dccf89a24a59495b088094272f554452cd537a87
-f8e901fd669f6df3ece2b93703643ab612892d7f d37b09c7ea36fac63d1d5ef11d8dd534833fc2b5
-e4be75d2dda3339cf66d7d90d74de99fec5283e1 00ed1b7c244a41098dbb9ea6a9d5e02606f42702
-05809d36de7d3f800a0c09d6b70adf4a1dac2a50 49d426058ebf38a7aad53bf65b39ce09f5d6cf3e
-2c78dd486096b798cab0055cb6c46380284a79db a17c8d79e8e1c1c2222e039314826bce198abf52
-f1087a4ea801b746d9dfc8c515221e7f68dd81f6 85dd54134a990932cd229a2e353b5c25f7075368
-07b361517d966f26546e3c3c9ea702adf8090f04 eedaea5b76d7fc2f70294c425dbb5e8a36d772ce
-21a7b340bf53d29730bba24c8bf97f874c3608d4 3afb3f47f1a7e31a29b63e0c58a8d01a94df487d
-6094b23e137c1c07f1d0f52ccda3db339c38e455 1729589a7e1579e4d7f19acd43eea6a6075fb3ba
-d18a8494ced52e57bca6d15fe8e0e9d597e59417 5a344d91cfc6af8954db4737f8507130c542788b
-cf9393f188a3158d260f36772cb16a1746b97838 13730bb231ecf08508a66b22897da437a5559b7b
-88fa93980a5d7f9f005d4c5f84753efd7e57e1a9 7f8912ce30d4e021b58989ffdb0748311191a35f
-731db6cd27eb2593f8ffc1367bf5ad0af7718ef4 718d1c64f570bb8533cacd1d6d8b38dc9325ee05
-8e2096e142d3a1e9b87fc89442eea0f399648cc8 1cfa2af962b2ad17861215c0b32b27b10d4eec45
-222a67508f4c2ebdd63a38c6441044f854bd36ee 50d394272709858d47247a63147036a7ea556f9a
-ea02b8ccb7b91a8834b4516122b5437d84de21a6 59f3031b8e0454049134d1290e03c15792b7dcc3
-2ec20740c6d9dffdcdbfe736cc999d1b12949d8b 11d0fb8be7317ddb6715ca9d6c0d5afb9d755bab
-939fd733ba7f1b10223cea4ca724db8b2d54db35 15b2c506ff0a27af6dbea8b7f41964cfc779d4ef
-3104b586f94073bf2150dfc1386e77579b2eacfa 73662af6e4e0e40552fb4ca5ee4420f9a2ab1c76
-8356607bea6271049cc8ed68d8691322f512d544 904b75cd856a1ab5b531b9ca34f42bea00ff7411
-d1ea4383b9917ace7d645604cc7c78edc52873e0 0e512ee0a397ab04cae38eb5dbc45fbfab0bca30
-03c49326f8b8b2c40e97392dea0a7b280413990f 6767f5b2b0669d01b25a533a23037e36d4e79cc6
-218a31d116014eb9348e64c226065acc12c84e60 dfa9268b3c641dcba5e83f80fbf08a83f6b41247
-310fc21ef31c6624b75e830bdd22f31e9a008ad0 ce40ea55f848b332b58e4eb0c8288570b57c053d
-5e343e9bcdf9b397b406adf9e5bd185fa64a7cbd b81fa73373004bb804a912cc5247e2a90a00639d
-d9e52aaa87ec782c0ac743faf006944050609f21 5dc8cf2b5eada691696e651d1c5177bfd3dfdcb2
-755f6aa65ff19e1b4004391253f2ebe6ee45fe64 76fb446fa93c5691fe2802c4f23e819a1fb1159c
-9c286dacd6369f858c51b514adec01ad9d043801 708ce062bdb1e26f49486d4333c3b2b8b0ef178c
-b7e6b8601f095113baeb8be456ca08b849887639 f0086d041058812b527a0851309d2a230c95efd5
-8b966574bd669cc6e8cfa30d06edc481c2a04751 f683020b1c38861ef08b29dd9384048fceb29ab0
-185fe1dfa2e51cf47650e80d3ecaf503ccc0cfe7 6c0ca871f441a41cf57d089895742f35d882699f
-9d79a2cb81adda58ee1eda7c4c7f0224d80ca5c7 e610fb1577754889c8ebb01be064d725c20b058c
-c354992152217861d3c7e0a5110b3156f000a8b1 bf0fb6a1c0c65bcddefa6314fd16978d55022735
-9e80b33e59d5705ad5f9eb6995165cc2fd430074 866ab46ec3adb22f94c7ea7d4f88f601b90ec9b4
-4d85fa1f6115e01142c793055109c7527b1061e4 dae3050fbf0ed8775449e92cbf9ef513592430f9
-2633cf8f7763c8fc7db40dbc73dd363e7ca9e663 e662dc21d55c214bf8b5f184f39329d75472df32
-3b39cf5e9cf19f91d8d62a04e6512c48740a1435 99c9fbced19edd78a3939a3fa591805780370ece
-4e87ef2c415e9c4bfd960eaacd68a620313bf9bc 9e8b276b5addbefc3af3784b349c3ea72d243712
-6ec16110931e77018748c0d46f01a8326490d1e6 6b4ebb43be25b5d2e090135e94e993fe69879d4c
-cc3ef5f5dc1f65dc9446a9911709333a331e05d5 74b1d2b0a96bb6ada3c8c9f3e2256b8c8a03854a
-0e8c8958a48855397b87eb48894ecfa1370b2764 320ef40c415d139e9a91bcf0355e796364996153
-25ddbf8982c3805e548dba90fe8591d4335fb921 471d60413bdcbce1bfac18538c6e1d1477dc40de
-226ccdc70f17c15c0bafd3c2281b304545cd7e49 7a9a5be7c2b506f8924125ab43acabd6ed64b2f9
-a3fcbbf6536bda070f071dfd385fae5d125ca8f0 346423537a6c95f6e81ea1c372c96dbd2842d21c
-2e5792af09ba073521e90ba440bd8e6ffbf378a4 28b7752d1e2be959e74a3d83ea7951e03e0e7bd0
-6116c57d3537e3888c36847a29d29ce4e5d7fc27 9252e128a4d9883ac4522034e6f39782f2e8de68
-a224b43b5c58d29420ca9889279a3f771d792c87 5d6befc3109f8fcd9fb380168f36fbdd850ea527
-3f0692187831b18b92dba68975cd97280e6b5fdb d64bd3b9e6b79ad5deddd83e1ef213b1c2328893
-07fe8c6fbea6a0898fa9ea2d77e3b1c12ceea6b6 bb56257e3df2517a5c19827117761737d89759a9
-a541ef1563845f72dbb6c05d9a847d8d23c17635 988c5fe02ee1451e03a5fd0f9dfa4329c62adea9
-3e987101cfec17f0f9809eb957509bd0d92f09e3 6fd2b7653a0672db9ef670aceb04fd3f9fdfae45
-77fc5f22d16eb873786e942cdf54aff94a6d7515 631ae74eca2d70f316d627f44e47a36894f51898
-4d1bb5abe5a05b72a9d676a758f69b939a42e039 80a449bf6e14b24ea111a11ba53e388af5b2e3ff
-a77208f1d1760921c67be5a0376f18bd63ba161d 576c09d1f906c354eafd2bca8233ff729a21f34c
-bb5f83c32aa75f2d01f59cb1b5af63efed0e168b b961006ed380f9e62bf7b6fc1d257315244bb59c
-23b28a8aa2245ad65030eb063d01c9bb3568be89 b4e24ccce8a0027d0d2aaa12b1a9f0bd07e6a903
-96291a7a374483456bcb16fe42223dc3d10e6e3a 9cc60a794e66330c9c4c3c8c58e5ff4694f14258
-55e0d2ab3463bd2e8c018362a286f1340c982c6e 86d00e10936e7b61b312d6669df0af04738e93ff
-7898508a2b86f05d35b2a6b3c82e0b068eaf8852 02d4ff8e3ff7870f0d99db6c44cafc04e41c6565
-a68c1279758368ce4441ce2aa65c6129624f50d3 56356de071386cc0ffa0bd311d26173eecf0fb76
-d4a334b3c72441ad02c9a829026c5a7922b11057 d904a6e8253d2be064d48886d8c39838c380a81c
-1399b906367df18ccb902754c0644bcadbe9c97e 907368508dc3ba38f785661ce29b5990efc540c8
-0f3b7bced6decd0d605fdf00bce1e7324e7b4286 80b3b19ce1b48e11ccff879a83559250ed33f43b
-a802cb13eb9669ff437e29c93bb64d3ed2aea24b 7c3be904feb1db5a76698d4395742bc016147bef
-98fca8d5de6caa57d9f0774d31cccbb7d1eae5e4 4392d86eaaeb4beab540990983a9ec1f2569e127
-4be559fbafe4b9be819413d3c0948e5566257735 62a2f7a6d583489c05af0cda1a54d17c300230b7
-c6edc018b955174703bd79ea636a7572d5ba83b9 0ff0de1b5619b4ee292daa6f5c49f51ad9cdf306
-c8b5881a4a47c294efcf0f686cacf6b8645bd419 22e27e4f44a387687e813c3e44a117f1bcfd6754
-eca960fd7047060497b46730b32dec92093d0646 877939dee39490eb9d664a8849b95d2a8dc7fc22
-1a8b2e282d71cb905bf318f2f2515e6789ef59b8 671571c150e140a8fb266c1c8791b47dcda2de05
-b75229624bc56b89824184b3531259e2cf7071fa 7aaf0a2b9f08f402afc22b2ec0f9679670eb2e2b
-23194bd109846994a6ee6d376aa9e1122830f26f 71ac7ffccb429e1e63373e75ac235f05cdcd1dfe
-4d0f253e029e3965de1fac69337aba660004d48b b4e4e5df5e46abc4cc785536299bd396780e0e43
-e980d829dca1ce6e87819289636fd7f2461b4dce 92a4327acfa9e32b4bcf43977fdf1fa0c460340f
-d9642db7ee07107a6204cc11450a6c70a6f08dc2 32862a3d2b72629493642c5bd31ff6402d158125
-93e3ba6a500db38c6f00ef1e8ed8c087f4dfae94 6720cb47893862a4055965d3ae30e2e13445f1fb
-4f142a3ce169525804b02157a1f685e708e13e43 6720cb47893862a4055965d3ae30e2e13445f1fb
-4e34992cba9f5fedd75d617cd546a20c0210965a 64f59aca841569321f0cd9ba62b5316a60778773
-a005124749a12ed09452ac516b4bfd5250bbdd2c ca259ecfa2f130811b4cc594f3d48dac8d6dddf4
-b0d53c0a4b01da8d7f29e3ed60c94873eaff9336 221311c734d497018f7fb02c54d7e5e87263ed6f
-6ebe0bd5f5c84d47ea4bcdf237217f78c9f82a2b 7c6f1dce5dc49f8ae9f8e77c07d187cb65a8fb7d
-5e01c594c86d634a0a7be824d856bc7a9668d5b1 bdf0654732056ef6e16e5bc3bd1f0a7e7fd96f54
-611e28a8d7ae1e3e3af0dd8e96c33713ddb4c773 4c4bce08287b755f98f97478fa604322e69721c7
-01749f381834b839f9afb881d8a0c7ee6a887bd4 eef275d58ef936e5afac5fd6b0f306292258d2cb
-935bfb6727688b523c04c8dc81d84377b26efc71 6b9ba58c1100fa593b599f92a9ed1ba9c64e011e
-f920eb2e5a432289e216fc9709db5c5e6a3d7ffc 2b1eb6d89aaf7d2932b13d31a9954de320c5a440
-82036f48114a3fadbe25ad5150365f5ab3fcf6e6 5aadaf8fd3cc0dd2e28adc083c71bc61ee31ed59
-1fa2b0067be01b2644ca1dc3b4bd2019a2c69ed5 9f954a291350f08e09128f0eaa899a4bdd5a5b01
-046cdda87c1eb25c021948fcb475e72c466871de ef75b755caf97516edac12fb54fd824a4925f3fa
-bc6628990863cb47e8b71fb31ff5427d8109b8ac ef3078aada57e72a71315f7f082f7c721ff3b60a
-0b535217e96b57f6c71d6d7528c4d6978b453fae ac51aab237d4b538631945ec0700ea0b4002df03
-69c1c12126b66a95a720c8dc1ca796d12d59287e 11ea13b9acb9e685413de22afab54425387cb156
-ecd0f5ec7072551fcead81d3c925a7841534b425 a59564f4e39fffee3e1b44fd456b2a5c684a57a1
-6e0a35fc9b852a0977f5bee057086f37a62226d2 aa0ba8dce9ae2c4756ffeb5fa99495f88b4a136f
-9e5f02394c57d3b69670090af962a78cd92d1b2f c7eaca25d89a0d25e4beac9264c12981d7bf9a5d
-9e121b2820a17c7df41669fa2ee87e289a6e6d4c 576b52dc7f12b5e72170a47e77defc7de1c43ad6
-17bfa42d6161bffc1a177b9beb8852d64878f581 fcbbe6d1e4c627f889cd5f6903bf776e6ba74bfa
-cf25c893672f98b542b67db8eb28977be3599c00 49729492dab41c1bb52de6ba620a28d0d57779e9
-03801dbe686cfa2fecd114014d46326d74c639e1 68bcfa65eb5a8c080701a6ce110bf4c5dec9a6de
-695deb436d27143570176b9b3fe446da39d373f3 c564270c9b1e0c06655b9daf89becdd21021fff0
-a2e65b0399f3db99bef96b14d24e99a7f61bd108 07a6e3b440a9d09e9c4ffc09307932f7732e0966
-b1a368188514394e1cc8477a44034adde92ee709 4bde3b80ff168e8a447575ce027eb44d426ea632
-83dbaf6b5764a66ae559270090cc78eba28eecff 1c683d7e21b7633a2ea8c052bb21390907f48cab
-0d73100fd07b38435e24ecc1fb209ce63230f5ef 3ead040ce5191dd7e2008cf238dc366b9497ce25
-c75b4dbf04975dbdbc4eb6b2fd2d608687812507 eed8d7be79893aaca8d7262b382788a114d7f539
-da0789d544b4a69e861612804e6a0aa7bb06d7d0 802eca71a902d77fe04b70693d6ec93492ed36d7
-9e429ea9c72330fa08282d2cda490b6bd95efe75 b926f3d812445f2041e66f6d09419a657237f1b8
-3acb1885a7a3a2d801f879c82872542f56df041a 5713c74ade769a9ab7cdca456646ca9e9247019b
-afded734796ab548571f10483a70231083d6dd5c f0f929d1fcd3c2123b32cd1a607de979b232ef37
-f57ab1fbf6e7dc1b0f61cbcbe0eabebf37be2c63 17eb8f8a8578d585ccb20e2143e8c43214c5963c
-be4f5892ffcb764b4b3251d50eb7edae7374396a f6802a27edb083bb26f6f004f57f89c6be0e5c93
-16c911019959f5eca45aeea4e5307a960ddc9a11 0687f8737d1d78bb572fc57e5a5111a030927bc9
-2e573e572a2d6a4f03f40b694fc01917106bc4f0 e09b65b58fa7a2e268ebf6820b6bd51c5ced6f0a
-68835cc054b207bcea7cf7e676a26cff0d80740c 01fb8d7fcf52e5302e7cd1a480b005c4aaf013c6
-08b3f684aeca0b875272563ffbc1b2e961d41607 23dd47e661ba778d4b74b21320c6c1bb6c570eda
-4d9511b3f0b06b9b9ccdfc41fad547d7d4e25f59 347090cc521239395362a294d1773f6b1cd5c712
-a75bb0600e2734c9ac3604b2b00450405f11dc54 bf4d172f99cbe22b66ac88b32cd0b94ab8ab3b26
-b4dfef58a16754b849646bc1043a80070323a6bd 9bc56729a3cbc276dc8e4b5293810906a42b3744
-4806595928947872e4b819e7fba3b5fe3b57e0a2 5a703efbeb7bfecf29814d2f8caff688722065f9
-78ab3d8dbc774b7e156ca6de598b9240f7813d10 e582ec89472d49069e9db8ccb528f8db92262931
-c0a13885965c2e4cc584b32ad7ea25486df9a060 c1b1d044b7d2a6473c85e421084a9e4932a65cf9
-57570e14992ab6ab32b05237b1ee87a6772ddd08 53fd9c6580003e3a6dd17c8e8904942579b84572
-964589cf622289fdb0da86d388f4a8fbbed09071 292040c2a2dcb49086db6155e7a6248b992889d2
-edebfbd91f41d424f9af810fcfe28331b5458fb9 a6e403906fdfea4c0bbb1da1f34a944e1f37e8d9
-7361ac95c1e02829db279121ec81b788c8d34f39 e901322504e05c44550a44829a6bedcebf4cd677
-4673d33240c4dfe5ebfaee5e1125330439815b12 f32d3cf187776c4518d2ca023ee6dd462ed77569
-b35647b50685424e20d782b3a6a26b9b460adea8 7caaf2718cc0c71c92820027d93441371a5743f1
-20975bca818caac786d6ccea15b1423e019b2287 d4b97131db42ac6b0e51c6eeda5381e74ee997fa
-e1a9cd8f82b6343617344754def5778437cdd8da 0e5cbbb55708e39777c8fece59d1b8bee9e7e8fb
-7c077dea547d7eed5e1182638bdf03cfdb915ba1 efc13b82b1f639959cda786a160840364b45932a
-fac50c74ec2c2275b5e893993d610c31e0a452bf 4841a58611198af1d34b3df8970c08d25a671b00
-646612ab6532c3a16db6cc3e9b4c6c6c6af48b68 2d30157d2a67eb95d66e665a35f9176b2d794553
-64441c06ca03b2675b882922b07bed52ab96f825 996f6654aea17014d3982e3635e27e602fb3d029
-f2ae39f7fe5fe6c689200ff5a449c784fdb12cd2 789fd40c95f89288f44fae2c27e366fec6186111
-17e3cb91a2db8494709540106263023a4c2a7a5a 92058ebbf9328715a6afc14b2c46652f634e303f
-f8d1c226af96cc8de8cc0188e92f697164060970 75f3fcbb17ad3564370c9e47b74031495e7b4d70
-0116cbebc70e6812f95813835c541fdc8809d192 45b45a2c437361713574a119e932bca09b50c3bd
-2015b5cc32adeaba5d64191103953e1f54244434 12d14332707b24ad88815798df3d31dd24fdc6ad
-ffc400277ce2362df544411dec8a36ed8496d94c 89acfdb5a7b569994901af44bcf541294870ade4
-5c18df749033499fff6f827ab9ee267472fbcd48 1a6a2e276a8c1475fb59e95c176c0752f17e694b
-2284c2e3ea5d95185ee1ac650a8eabc6d45d7e4f 4f8cc69f01efd40b926bdd2f91279c7826efa582
-a2de4721f4f033d3db0fcb0b6ac37cb7683a99b4 86c9b175565ef2dcefc9bc1305389ff8fe507e76
-a81581e190a49c25a77f6623e57dab3ebdb3bb64 80775b668af0b037f82d47a03ff3ca7446802beb
-47953f7d540c7a89cb77adaf87afbfef4c41a5cd 8eed00fb094b40f9b65b46dfd81ea3a4c1cae0b6
-e16e8936b466323febd5311dc0197b7e4e10a0eb 2e6b102e3a9204441f7d03c9d84ef25e0c2e5328
-99094a08d61eb35befe6d5a5d5bb797d1c461f90 0b54214a741a3e55b810956ae486fbec98fca163
-1d63ee075207badc24ffa76e12e9d69fc8176815 82c4843f84a9739c81b4701cf485df70a7051b56
-3227463eebfb34c65e64e9a649fa8de0a7c929f5 8f60c1ba3e93a7c484069ee4061b79593895aab3
-955c21aabd8c675c48d3e1d0053be59d05e3539a b8419565906e4feb434426d8d9b17dd1458e24b2
-91e1e2929e27e0f3b8148d877db6601767281180 16be69c79440996ccaf8dce7dc9e44c7934692bf
-060893c5be7283136e9d733ca6bfdadf1db08dd8 3627dd7a95cc041685a21dbbebd5f8fe377df753
-402f2b0173490e4d65d26a2cdbd8de666c3524bb 0e95e1051cbefba3b2dfef6cced1d458ec2569d9
-0620f731de145f0b13b9e0a2606ee3b6c281b6aa ae11d64eb447dd8811bbe49860f2e6dc2762c720
-0c79b9c1aff07d37b4e573141729af102233b0e7 9e73fe591b23886060849f23d5e54beb28fc9ab6
-8532fc3aabb6532e5d935dfb4b3dff85a83433ef f0edfd83cf9bc9ba3de96222606c240af2ea2ff2
-6e857556d15e64bddcab0f85f2702116ee4fd758 c0b4768919bf817c7539e1a297f2ef2825d8753a
-7c1facb68a4c091ee548c3d0bc2381fd62c126df 798c4e688219c0cbd867f43d2241ad855b9cd498
-a73023ada11350b42abdc5cebb0285c70ec3506d 72b5247cd2c6898d7fb783cf39bf9728ef68f939
-771a8b65def6b1d39d49f6ff5dceb8a47e19e05f 6a80c1154744c0e18f69dbdaed60520fcf99fefe
-989eeb3a6d9ae9efb1501c06c827fa5db4091063 b3a33f3679629f830441c7258ce1f3e468abda68
-15f28d52ebcfc60c5e18a70e52a8ea91471479f4 4bd76b7a21e1c1af84726cfd04bfc1996b1b6ed8
-04a5fd9777b17519deb7c259638c41bd9b132a46 5584e376ad5c4655b220259b8fede3e34496a509
-1a560a94148846e15b9c230bf16bf08a67544650 81477a19fafd111ce474a81d54f674bb33d71931
-ddcabd52ed4257d35b739f33c5d46f14ac4c68ea 03a49821e7df8ee711428e5e92792221820399f8
-5540b5121dbdf0406d156d565402dd2f7970e748 929d47d516ff1b91096e5560896896be3e62ff25
-4ce0460e531721c82f12deeeb12c2930b16114f9 f0edfd83cf9bc9ba3de96222606c240af2ea2ff2
-69b262eac381de731278519bbc336de4d9b5625d 929d47d516ff1b91096e5560896896be3e62ff25
-ed012e9c32b0d00904a3925e0e62883e991f0777 890845390703df3029b237255cdba5839b258e5e
-487402b5ffa2ef6dd6522527677d166fa034abff 566b0c4fde409d0a7e4061a743e20316951801f2
-acb64840b2678947fd95b9afeb5d33d934ca3194 c18152207f52dde7fde8e4d8cac0541fb0891270
-687885aa3d70430fc220d5a37b772cf8f3c2662f 890845390703df3029b237255cdba5839b258e5e
-3fb3b3b9f61c69b59e299371f0ded0f535d343aa 3f7104f44dd0c6d22fecaa08128b923d13f3582d
-9354502770cbfd5039cc5e48fc3aec794349336a 1b4a7c81592158ea60b9cb5940abc50b856025de
-36ccde76e9b2120355d639b4dd9cac94f5a04cfe 368cf2d28fb045fe7e86da47bd6b528d36f3803a
-e432fcd2c36df8eeaebfd7abbc49becda93e18a9 d9b3eafd14baa7cc1d4d33adedd69304f8761670
-eea68855859b8ee3af60d667a91202fc9a57290b 78afdc7dcdd8682f73b34d841a3de736ab9796f9
-7effac0895daaee1a2a96e61477ae149f9785d5c f50591b118fa60f8725a036db00dde2cc4c88a42
-a54a9265738d619a4beddae8d96b9111ea906161 6be63b80080525c33882b97e4ab577e1c00c0b68
-052248f77cfb128e20946b87177b4f6dcdf2c344 d42a56063b8599d450b71d3d6055193720848c3b
-3e3cf61ec6fa8f3f9b9de2a02de3b7ba85e445ee 9192a27156a22f6ff5243fe3c12d74c666a8e315
-edfa8111f0b66201cefb910eefc47bec736ddce5 345e4637cd741c2ae9d499ef54e34dcffe3449d5
-1afe3fbe2b007623e9a92941515daa0d1b015d37 4252f56e04600aac5fb1d71109a484a98da0f852
-bb6dcb6732f4dc1a31febf30f11846e7df54ddb5 debd02934f9f9fb15eaa2ae70472143c9dc54c41
-d5b496d91825e802c64ceacc3cfc1e97fc4d73e7 c712050624d507fa81f866b26120ae0ad832c45d
-eea97c6af7ae3aa4b1d90f686bf37c334cb8f6f7 3623b2ee5ff14328f795ea83ff55196ea7ce6ee4
-9f3ec61f3b093de6e7928d00ed16f771e81bdb1d 1423462c91b350a30e2198c015ff3cc78c2a3403
-f3574da2e7165b462ed13b61245b5d8880e5abad d2a1f4dc3a8f7fef75da1027e48f52845b52a55a
-593cadffdb92168e98907a5181931c25a30f924b ced7ae8b1ef3ddc6b3b3b8a7bc8cb3046427e319
-d92638c5fa56695dd3e3a3f841f666d78be498dc 62c5710923bebcec8c9f84ebe9c602304596b638
-8b934a221b7356fa9409b5dbf7a3a48279470af1 fc4fdbb31ca369c60240a57499ee6f92ddef444e
-082589ecbbcadfcb68c14cceede61ff4ff6188dc c58e50b34ab3b359e317b0b17f326e57275fda4d
-a7402ab48c3a3066c0aac80fdf999a66f525d06f 34621798ef1585394b44638924b09450d1e1975a
-999c91ef4cb297b5ccec0f00cc32047d785d3989 c74533381d4bd34ba5c8a96d53259f3c4b57d695
-d7c5003bd066198763cfd1c9853d8e617ed175a5 c26f236da722d1fb97b48f0d558cb95f9b1fd1db
-5d449f03a9796a67fe1923a8f20a21fb601ecb57 17d72421167eefb4677e82acc7e56f566b720283
-762fc9610deefe982df85b3ab2b1b9217db086ba 522cdf24b57678f02a8f0c3ed9350f36e388cb48
-c2f9438572e3643472c49ede22b997adf29309cb 6b8b02037aa67b02ab875383bd3e25abf4e5b45f
-3bdd8d4194db04c236b95ae6a436af3a220b961e 846c00dfebc8b72c1b4a343fab241adf4342fee0
-34e65a5c9b43db2a2976c7e20624f425912791b6 05c77cbf461b4b044648645ac41f970c00e5fa65
-f9e144e3e0434d62472e26bd79d031a9baf8c3b5 141692317097d1c12fc42aed31db7ed846d66428
-05072ab1f5ebf2966cb021564529746aac018bc5 5c35e1d57428c74333953ac699c0026f320e231b
-069ebddbf8579f6464c933ed134dfc5352241a64 b4141a95791a5b189403b7781b9ce55f321231a8
-67c93691321b5358dda947092cab8517c3271c8a 9d5870022fdd2d7986986b7d8eb7369571e00251
-de17a4227281025612a254fea77ec8e18faf70d9 e44cbc65abea4c2c1f182005aa3a866b09461cab
-21d3b16c00a52d29b4899d45a4b965e8f2c3a196 95e4c323402b790d8ce3a91252a388f1f065c657
-a237e5ea9285229025a40cd6da9cf771efefb19a c712050624d507fa81f866b26120ae0ad832c45d
-23381a77d60d5e5600fca6364c7776cddcb43930 502ca097b91df009272179f317439564f72a833d
-fce14e66fe673e557749bc0a094112875d14b1f9 3f8caac84f28e5b3acdcda5415d36e40e76dd971
-ca671e897f7d56a99a92a280598d6addd696f669 d85330964110693a884d959267292d612cfab272
-15e319fb6318b41747c0c22fb8cd70c0475e3b8d 323848532dee4b4b27219d6907c8c8a02fce1efe
-e3453d1545bb4dec98a904cc35f037b15b44704c f3f556ab4cb4f5e07ec5c36ce6bc8a15e8ee9c90
-17e211bba6ef7e7aeb1e16c9a012cda14b6f545a 38aecf70ecf7ba52e6e20e714322ea4b127323e2
-d6fab82672a445769eb2b3a43e15adb6c66e40e6 e4e1f3de2050cb3542f523a8ba2e3d82d4834986
-12519da964b8022c10c70926594a53de8a74f4bf f0b8698a12e48bb93a67b5c5dd470ae63926b55e
-981a3a7d6c10a2165a6a9b47aed98f26c0260550 fc850f04ac284457992db9777e4a0806dcff490f
-78b77e6ecb88cceae277b5e6e4043586041a3f00 49c1a1cc8a921e71ee872b42248ce58bb7c538d0
-b5547224697d3e72a6f2a99bbad79f0f4bbeb253 d6012d090b58f2400583fc15043b917c33f03f67
-28398bea5b75264afa443836cd6ba35087e6508e a4d02c73e93047f805e4c660354d4f2447514c8b
-ff146b565427c2859536f16c1671e3b1ec508b9c b6a1ac764ddaa4ba3ef2d4c08a69eb230256c44b
-777c563a08e8524c7636d558c60579c9be821a6f f174e45bd59f911cb4a33d135a7e8468f58e7d8e
-b8b3f59f417eb28f59e23e6b75fb973536f0e3e9 c3a15797c7b9547ca1b2914d991e9a31286a6e0a
-6089f5c94a1fa6d310517ad5fdd273a54fe717fc db5ea7950ab23ccbd6c00d69141b681799ac2d95
-1c06a78146d3424ef451653471bbd10a2d4306d2 947b48effd9b989a01657f318b3dbad1f55667c2
-8730f06e74de262373dd08a0a16a272d562a788b 2620e2992391b26d471ea48326bea6210684e287
-4682e84c10f1ca72a4096b71361df73c4a3c026d a55b6aa4fd8d24c34e45fd346e38c9511f39345a
-adcaee88f145ae17f2f162ce1290b2ba5e7688a7 7eae694f1a9796403f960f92e923c64cb8da32fa
-fc53a14f4e4f9d5b986e67c3c5cadc4dd87d2091 4e05dabd194665938c484c0071d0a3e00be0eef3
-4b0aafe5fe1386166cce087e62688fc60219277b 4ce36296c847221e5b2cdb2ef3c868d939e48963
-18d98e6697722b98956b9196ebb7c63308db265c 7838e6e51d73feb75fc4babafbf1b17f0d9f3543
-31e3c103f760140c3e9b382fae0036d641e67e81 0f214490b6cc1cc11dd0b1ed2349711cd949b74e
-42976c5f3a2db0947c2269afd03c07f1e6b07ee9 6fe09edaa3629d35bd3df4e86ded83f0f1d123eb
-220d3c9c2e3af318d0de01d7b389611b133e6d38 a341c88aba2365647cf96e930c49dbcc85d6d0ed
-8a1e553bbf20be4ef91970a94eae2791aff0c5bc b1df6bb8dc496f44af6ac43768885e6ebe48119c
-daf587c544cac787aa3ae39deb816cf63bdd6c5d 9b84510d8b9f113d7daf2c2e9c1a19a4d03b507e
-d509fd990f0c96ae7d1359eb0891e071ed6cc1eb 830eedef477ee00f2bd7cc2dbe8237c4e69dab09
-f6c3bcb15cdaa2c379dc6c17b33b93d9a97022a2 b38f0e08a1ae610a2b6a0fddc5b6926604a20f36
-7cc5d508cd1a2b1ac9f183ed5197b1d935a55afd 2d7d03249e56bc364b739e0da7da8e2b101e74b9
-3554dc5ec7e0b5d1c5c5252e5477ed38b1be3f9a 259476e2b7f5d8d63dc5c5b8c773ea844374e4f0
-ac8b03d587849ed82e96040182205cc3ef582791 7ee284fc3f92215c5bae9aff53aac5caa6f43a06
-230bd7aaf14f86221f475b85cbc67cc6b73a43ec 28fe89ee69752ae3ee0fc6d3a942174bae883d3b
-bab353113d8a783e9a01d83f7eb7670f844a6ba8 8f45f1de44d8f6afca590e5b2c4676e0aafa7a85
-5dca2d8d6c05392cafa18909a441516dc6bed1aa 0fecb45704663f84d6e18ac1a22560ec180dde16
-d43d56ace49045bcb5b60581d29b7b4cb4eab692 830eedef477ee00f2bd7cc2dbe8237c4e69dab09
-39adbd3bd8235d9385f7094fe77f57119483fc4f 6b098245fff75a44dab8279d38d75ae7c1cae408
-59713b77e4aa4c629250fc2c8e6ab9ba4a228c88 2687f1d9e0212b08b64b3bd8730e18c9ffe5799b
-c305e075cc8d0ded0809b6761fcba2c5e4450d82 bddde3fac30f663c50dd2a238a9344894a24062c
-aa2bb582c0a745167f237b73fb8f1fe771cfe996 527c50261054d74f9402dce1622d2e81dc2a5def
-4073f1ebe2412a98a3dc7164617d8390259d858d c3cc836403f294d6279e2dbf2a99edfa7e1f0d83
-b426ed14a8557944f141c39f92726c780af13bbb c98b534898ed58dfb90710e1f91aca337a9d9bab
-7026ff80f180f2bcbdeceb89c65257115a43ff04 667c3f0e8a67df09b7c4b5e653eb7cf44545fe2a
-3301c41ca898567c205344118b5e8e4c4918a807 b8f7f2bc464ac0ab1e49c88a49a7436e907f6547
-a21fa2b100f16d673241045fea2f29c7f0b54ae8 4d6a8f37c79db5eb6609d5f598d8876817de354b
-1add416009117c959d21c9681c50e49c60b7b9cc ecbd6bc55f51b70e449f552eba54fe890b0f07a3
-f5c97004084c30f73cd3f928ed58971e2ee55534 1249acea1cba4252af7a07702fc5086d0ab26df5
-10a692b540731242c5ad85a8123126088c23887f 7b370129503fb3bb6e3339baa0981f8814b7e0a5
-39d226bd48b641d6a6860f5cd41e1a89d66f6bda 0c45aba8ba2d4bfe53ce4693a16d790ef6cd13fe
-997af8740e0d4c3f6008e2868fdc05fbbd05839e 88b7c07627d0e1e51a4f8d2eee95d1586ca1f25b
-658e7eb8d92198f12a8f220fc3890b401fe10695 2bbde0eb5071a1b946568d77b8444d1f2c52a3cd
-8ee832ba0cc4f5d0a55bd3675d85d8b40b507131 04eeb42590d858ddd1f004e811c0b502dfafba67
-76fb9d2138d3cce751adcada6e384445368b5923 88eff3fb6ae73ecb2163f51bb6545b3468e288d3
-bd3f78cc1c420363cf0d2f1201a3ff9acc2a7ed0 8f7d19e3b0595ab426b3de4d2d34387f59e461e1
-4d8ec5cf09a58347120021adef96617d2c474ef7 ee5d93ca66df63bf917f9d3e07d4c0f47d8ae662
-122638a471a6ac03fc19d9a413ae9c992e3aab9b acc1918882013effe9686b98ea3cd3307cf352e0
-5e94e09dc682ce56a2e9240a8a7a8cb76b18b234 4462545ce263c30a10dd4f886691ad33fec3a32f
-5023a4346d1588274929401310e03f5897400c07 791345c142e61cc97c9829430dd25ba8bcf342e4
-574a5dc0671469011e5f1ec7902321c5306c01b3 e1a905cf88f544a23e1da72b60ad78ed89284f97
-79a0ca9e59941797e773cb756623ee9ee3329269 7a9ecb49184a0ec9b138a25873896df43262dae1
-a3b1818b7f81a400cd3a5a93a28c3a8a76ebf682 a3dbfd6d9e3bdc008ae0b2f123765bed9b15c823
-ad5ffbf49a72e07a73ae524318da734e93eee5c5 8b25fcb02c3ff539741e7132820e6df9a3253288
-d267f098c16b261168cf92febb2dbc6aa389014f 32bb7c9ec7db4c3e1d22f604ccf2def835a6e25a
-67f46a6ad512d30e42c9e176ffccbb12f63d4099 01cd489c050036d9ed814c9ad3066c9824967154
-24d5d0be53308f60f863651a489be6a8f2841f72 f2d1791ef756647abb3290bd571dea4c936c4a84
-142a1f7cb15c9a27915ef5630a8fac13d29a668f 180a9ad49ca828c3e7489c78623d750547cbdd20
-014e61df51187ac1ff4cd8038e707356c4c4d997 6690d4ccf0040e353f6e79b2219de0a63f54cbff
-c8781ab363f4d3e41572a21e599067714a89105d 867cd7b768b5a4a86ea372a5ea80137cd8f81ffa
-237eb6426865064e2bc453f0cc67cf6cb957e173 e82e8850420a5767787734b63cc26d92bb99fc11
-eeb4da899412fcec7d67aece974f0ab980c9ebb9 539e3fef479c257fe1e2fd5b7b9f03d06b5b9efa
-9797c146ecc960256068865e916c193d17e4dd19 458fdfbd552f7bbe10c77b2f621acc658f35ac5c
-7e2ccee8b3d7a134fa0f918ec1cf1c49eb267e70 88ae6bb9b6e60d0a86527829ddf06971f762504f
-5d88a55761b183ec80f45d26a2f7f64215c2906c 71180a988e17316bd9f02f44977df8b0d4798b01
-ef56cb7114e87dffd1ab560c4b1e91e9fc4fbb6a 62a791dd3c9d85437c59e8b9952293748ec58b48
-79438df2643ac406ff7b45e8a0e64e43e943ad98 139edc439b589a4b03cc3ccc877cc54d91de8d24
-4d1427c4a829e8148c037754920dd6c948dd1ca7 1bb71abc6cc01036f4a61889bcfba93823183253
-39e3f92dfdad2508775f4f8827e1f24881963335 6ea393f3f922f9368dbda20267d0ec840970b290
-059d40e695ef4c2e831ddc35a48983d952cec104 7eed86143c07079c52dc934da7f707505a8381c8
-8bd18e68c15b21fc80c9e13ceb53d6e51e935060 cb9a407895f38afd3bed52eb72f2d285b8da0f59
-f017d90c4c8639ca31707ba9039e0ed4a04e05f6 c7043d164c3b12f89b0c854d610c3176d8d89d58
-773143da5a6ba68237b05a5d19130d9b45742920 84a4df0600f102519038e611733036cf86f9be18
-22ebf166a796fef709700a092017c4f7190e53bb 4024cb70736af7e509791942b61e50e469033073
-bbb0a28e36c83593aa8fdff611129c1e901a5ed6 a57d13153c54c50cae1c62e7d5e9de258fb206ef
-11ac9029c4b4e77715bcc4cbfe309dd593c4514f 8f9efed7f4c61186944d115aac3574c10dfcce77
-e8436a7fcabd6021573526ef205b45ae84395ff5 fdd94a62d793755d1c78f231b2de92f44ece8b02
-e26efe6b684c31b57b031946ae56d794727f6b7a 7f8e5991ba0753b2cb3c93c635462d16a4b38998
-6c16b58117b8d2fa61614aab5a2c8e6b5a28dae4 c643bda1e88e6a21451ee133635ac3e19eea3911
-f5d858a5f2332bf7c2f5b2c5222daa6b9885c112 63f304e644a7a767909fd72b16a0cc4203fd6f8a
-c057cec460b71c49b4dd5c3a2f271aa126a768b2 6d1b8ccced7a32bcd1913d82eda1df576962852e
-26fb03afbba30dcf7a70e9a42239d875321580de bd7b69142d13abd08e1d0b8a43f076cec92a9bf1
-9e76f721029a13079c0715f7fed7a7619c36555b 0585938ddca7b5280b8ba7617517d39799b4dd18
-db6a57b3cc50f69fcd692cf1bc78d9044a961cb2 44e901954bb1eaa8b5b44ee6ffeb239e82b7058f
-f855ce9a9e9cd2f92666e518bcc8ac0f339cff0a c5340f3df33dcede75b4d1e6b4360d0128ed8485
-a96870ee4d1781a2689fe59296e66354b6d36560 2c187a7915f775439541caf954a566dd0a68dc12
-45068af622a8665946be59549c319a1c99330449 c076ddbc4907a6f779008af333cebe38ead7e5f9
-15bd7e8e9a8a83fec25281a08372855a87591d8c 688e1e057331af4496b0137422534cd77a66e265
-e84e8fed96b47564e0b36df6a1e9dc4f81455bf2 58b965453b9cb703696a8756e4c0783c1e50b8ed
-9db12ee991df0a39cab85b736775a9d5b58d3211 74e185c3f8d6dfe1c5820e15d0f8c40ef24b9e5b
-b10ad9f51d0796e32244b3f2d0c020ad9d765877 7430a527497f177d8c1e961ffb17e22b6e4070a1
-8116f343135262046a6c43dbf4b00aaf4fc6b988 54112d2bf2c6681a6b6d594ea8282d977e37841b
-59c12a235665e68516f9a0f87bfd83d529266dee 7f88f63c8f414d8b0fa562b63230c588fed3e109
-4af8aaab07e43007197725a1052c3c2e3858425c 51dbf9b4157e905aa5e2aef52dccf9ae75a147b9
-4fff00b77146e1bab40b2b47360062a3307ca25e e69f23e17f223a274c6b81e01fe66c70990d72be
-ca028f2b4278da5fa2fdc521c9f320ab2e2e425e 5fbf45b6dff5443f2c03d2bfec7fd0a9fbb72391
-8cf5ed222aeef42ccb85676ed85571f27d92842a 0b2e816f0e84963c012d30f377326c43f54c5440
-67ec07e52dde5c844a554ee103b863ef8bef4b3d 8e7380bc734eb561215a679eb4db9d4121a75b0f
-a81e6102ee24e72b2409f516d55ac72c79d02983 dbd42b0a072972b178fafb2e191a6eb589313446
-30061f05ffc291206608c1b81b4d4cf21791fcfc 11de79697d2805abc5f9d1ef025b3cf7cabdbdc2
-cf0273129a986772c44d5d719e245c2a20c9c3e1 7d3237d0f1229a608dc298fb6529b4943f191231
-94d378a0a333d2e377230b49e7bae1ddf6fb35bf 874dddf022b587166ff95ecb1d27af623d8111fd
-f3ec527d42e53b625f5eaf2ea7862e0c3f61cc14 8b85ec1a74153003a066499676da326f4cc7ce5d
-bfed6e16330346c6f82364cab8dba6d8b0aacdfc bd24944ae4193b4eb19c505f145930efef812f39
-710e18acb66ee9a1b0a6d33af5ab5f914a75dea8 35c21d1a3e739ddf4c3098c51600dfc8b041fbcf
-46469de5e994d891bcae16fb76f644204ca71bcf 2ea909bbb160d50905e2752903df2554912c15ce
-2593295cd518412dc17473c3861205fbd1bdc0e7 ad7404a4dc04865be9e7a63eb92f7eb04229ad6e
-1eebeadebe7f06218e8380e66f63f1b7f487823a de3f3c5285409a5a9641e055c4d4f7cd73745bbd
-70ab8b4cf577a4b07180cd6117acf8dd8340d309 164f84e5af594c429179d7e5167e38df489d73d6
-76d2505dbd0cebcb26e8b80931b25e2ff590d5f2 c9dfa6c293284eedc0f8743e1caa28a26acc55f3
-98dfdfe960d39852d67e058f5be1f16586bd5b98 7f78c4cbb9b49cf01517c6089d284cecd1b58644
-9b85e3a3c1c531d7ea90a82514c8b96123f3a511 2c818d749ca03f1d08f0414140697afc69de25bb
-e6eeacac30a908e5c7751122b177cd1e23d0e545 8f8b81100446de6df05ca488375284949c0c8e8b
-c33180a447cd83e9ca77a8eb68bf7d7378dfdccc d3e5d1469af7f174ab111664fad3309dbdc7e182
-e765b820ac2a85bb3fdfcdc53ed897795e10189f d6b621b015875ea9eb4844081e183b5b6f94d8e6
-88f28a6476d1f28439e73af9f6e56d553f8a8cb7 a483489d269e26372db2af829a7b283b04b75620
-68f7be622d37ef741ee44d6900f7843b7b0ab901 a7ae7d3e9a35fbcea8ff8c8019a1f8d328452fe0
-f3869af954703968a57e0a16a1f97999a4d79c54 812ec19cc1f0a26969ed86370c5a003b39409b92
-f2f82b02663a5edf8fb30a3259ecec4ba91b152c 2e6beaa88e381b51748dde1aa097b7edd6454c52
-8d67f8eac104ce04ba4c0c12a505818c6db3d067 4e5f0b8c1ef422a4952e9bd03c83c55abee2657e
-f99482322b4ee17f9e99f22042b72ce87cb52877 18ebabf2c1ea0629076ac28952e9c439cde87893
-1f2e10958f2e1000b4d6fc86b435f746ab02318d dbf475dd7da750eafb9041916d03f4b35eea7796
-4c24af36b28864682e11601e5279981096116713 f1e8fc6356f5d818edb0433fca7f261a78f5914b
-f1a3fcb039d3b4e1a612510be595772965711036 60050d5b378842a22ab37a2e9ef89f0e4c9a3226
-4d62e2c6f09851ca8958c66324949e747ef3461a 3de821ceb13afe0a51b9a6f03f1eb6ca332acc60
-922bde267de06dace04356a027bf8583c87ead74 679bb9a8893ec78003ce85df4ef525c81dc7fd5e
-3b8dd33b29c84acaa04bc0660233713f8a0f01d7 85026b4d79c9af119fdf3fd87d7a60980c6618cf
-63bd0e673c6f03957d8c92b75632a1e4f3d285d0 e23c625738aa4cc2cfaedbacd58c54ff1242c86e
-aa38767328c325de9a21d6a580daea0e8057e74f d8293967eacab2aa439ea8a4acec4709a6a6fe38
-349bb564f675e842eb47672d4f0b9c489a21ed96 99a485253b77d439bb2397d71637b403f32efda8
-f99e5ccb5f5ea836207624709411e503e8ec5250 1ed3a0d5c05c2f6bed0ef8c4df20e12be5d73711
-00d7023e5afd02044e5fcb1b48c14f641bf90ed5 ebdd0a04bea9955e1a8d6fc49278af0fb31e76d5
-ce30beb6e36dadfac4fd5d66d5b675aa4a547b3b 35665acc147525d03d18966c91e66dd219fca790
-8fc3a67db1a0df554f8accc00de0e4e26c94fd28 99a485253b77d439bb2397d71637b403f32efda8
-05c31f99a5f395036eaf05b20c27695db0075f03 35665acc147525d03d18966c91e66dd219fca790
-77c7ceaf3605dde8dd8d18c5891a4eb1d4ad1a70 35665acc147525d03d18966c91e66dd219fca790
-50740ce4fb21875c7a5e165ce9454c34035da21b 86f29c46386540789b8bd9809e709a43adfbbf7e
-7fac35e4b537a4fe3bcc410f435f3af5324e5958 75dfa07fc5e1fd27ab422f644e3c79769df71eb3
-7e8a09eea5e9c5770ec604e4d2e3d75cf428cab2 9d5104c1423e2ca12e400cddfada747802f7d4f7
-b487d35e74bf375559111c63bef5e72625b1e6ba 57f5a78259e330ca2395bf8dd3bd530a7608031d
-2f9874ffefb84f2657b2275c6fd09cafd15d12b9 7b937d513253c64a9541d4ea451cc276b1ec1f82
-a635f3ec97dff8b11d2f84481faf870babd6b8c3 2b8cbdd0d08661250772e0f36b9f0f55adc352eb
-802d8507cf15008d618909ea4284877cd73b7644 d99eb958139440fc4de48be5a46e5429b34f99f4
-fc10b7ff07a63b8bbfe53def717ec116f6246e8d d2b2f6ddff67e4af31af183e9f1dec1ecfe48465
-686762258759e9cf1b9ff823334fd51408d65e26 111cef9db1a9d8f7eea7e891f1cb593a4b49aee8
-802d11e5befe8a57fbeaf20ef87e04b63009ba0e 0bc27d397dcd2067497de6b6f9e53f678c5b695a
-ee942ea0995d06c2cc51fb69b620fc1838767621 dd8d5fa83710a5b2826cfd002e6da80c23a0ae12
-4f743c77e18ff9ed572b708296c4f553ac24d135 eb80adb946b031c1faad4008ee8ba3201676e177
-0b6b1f28616623ebf83981c258b61c19315da671 bf0c677f04e893236f62c697ef2a72dfac4fc5cf
-aab8d16aff35e1fbab7127ee8a80bc55b7f8a4c7 33a17bbf265266e753b17b49cc36517b9c2e8a7d
-480da4cb0b44326a32dafd6f2e1e88f97077e174 1fd2cc705591e79700b6a89c64b0b231bf58f029
-6a317e6d2bd01522d2256a6eb1fd1572ea044fd0 8266d02821238c3ec16988f47e1007e1aded6d02
-180a4748555807278c8c96997bffbea7cc1ad41a efa8b31a168a8dec7b68b95ddaf16e08404a2de2
-1ebab563c2ad6066b0a801254c9ddb91bb4656da 7fa1ab7aad5ab7af13c77ed8a25fc4ca4c848bbe
-7891e1d0822cc2c86e97619a691f8da36364e53e 5e0166ef965860875e09ba1d574baceffe598228
-774bad0806b324a26bf23dea897906606187a542 5b62d894c420f0f095fe141fabf8bede3dd2a03e
-feada858200c140593cffe63b14e58f6ae5f472a 0f620f8315756ce60fd343bfb15374503580bdc4
-d8756de74fbbed217d1fd27306b53e2446dba858 c4de8ae0cb833c2e79bc6d97ecf023342c75e9ee
-b72e5d052e609a3fa5cb7be872e21869fd71027e 13acce89f45e0403616750c20c5f96074eafb4c8
-ec1bfa595a79d828205ba6eb1d855609cdeb8291 1b7b3bb28d47a700138b1ea7a8d772278b2d7b81
-12e29e291a5468ae91d49e2bac66deb38f3ae761 8c1c8822778d5dfff34eaa1cbb325a4711acf436
-cd1c1b987b74ae23a709193eaa33a753f765e9cb ab6d059028fc57bec59a49c8169d8ef603f6f47b
-07faeb390e8ecab5a8bba7c04d973852600bd576 e7153f0eb22f752c14ca1f93d1272fb570e66297
-29c96945f4e3d311ac30094189e2d08b942f143b aef79b739a114a8fa5aae3fb229682666853dd43
-3054bae2bf21ced4aa15f5122e90d90973031d90 043ded33b36741a1a6e5c1b2fc7770ff2d2d0c52
-fb5768df4ad01f44e2aa89bb230945017e11ab42 3c26e3c8d3e743f431d4aecff3778bdd01f1a1a6
-dcc420c4d3f0bd950512fa6d8400b38023ffd773 18ea7e43c0bc455c978cf18008bc5eda4b9869b9
-05341c33f01e17dc3ab6c696a6c6187b1e304116 580cce4d917077203fcdcf86f33c385f40d35f7f
-d9cb3bf709f81c493045ce4f64d4718276dce291 9ca130543603de526f87394ce9623bc2a24007f0
-dad4281217d3fdca91177f0bef6cd5305b246543 1022359159f06514a7f5a478679db7fcd9102b2c
-f1d887a950ba201a45175a5cad5f14b391f8e5b1 148f76891e6f294e122ee5374badf9bbf27a245d
-b4f4ccbed2ce97b41b63ff5f0dbbf7e1a0166506 cbcdcee4171d550e4087f0ce042acbc695fe8a41
-82367b9cd9b37fb1d1d6c65b8a99d5ff628fadf0 eb6765dd9a3219805eb3aeb23facd45c1640d570
-0b0013cf77986b340f78d7b995c55ae0d67558d0 51539e37d4bf31dd32eac7e1182db35f8c5136d1
-d96627db0e3af97502027e4cedc33c5fce80b08e c1eb821c9a497350f13609787b769545482e7f75
-3a7f9985a09aaae1d2a993654c8726a71d7641ba d0142f9ad744ca6895a19d818e4fb0d57672f2e3
-01413a021b1fcff822ba93f17b70d16441526d86 1a13fa7237c94c85668f3a0575dff2d11ee4a947
-ca290cb86e7ae620676d2bd492cf06c38d75aee4 c98b8bc439c59ea8e99ff8aa2f0e544910bff8c8
-d066db5e1c46d0f7b903b7c997e6448f109ab05d f43813566d7f9afe6e2ff9cf85764d8c1216b190
-8166023275abaef8049fa653327a24e35b61c790 b1b1740f388334c446ce2a76270e3725c335ad96
-e15d7d103efad2d7e7b7d350326c669c01665c9b 7b787c242f7bcd12217c4941bf73c68e31f53242
-6bb377e9574d27dc6460c13bc7d859f5785c1476 e03b1a32129fdae13d73c2de19054397fe7bb68f
-b7c690fd40bb1c3d96abd1d52a720195aab92316 ec418ab7aa50a66114235b62547f57812ac469ca
-d3f83435621a3d7b57972e7a85ba564ad2581619 0a29b38412ca9eaf1d83f9b3e7042246e72a8cc8
-898782c9c21a9031e1e85c587c4f0786472c0a62 1b49bbe11bdbfd0f5c96753d9d4b2de4b9b5ad18
-d5625c93b3aa84be3522a4c6b36d107e0c48b4a8 24431bee96e118b727d0d64e75b750b6265cf1dd
-1ee2a750150ebc8d083606c58da1ae564b709b95 610256832bb56576cb879791e361cef4bf74c699
-53bd88752096a0a1c0caf594cad355e0fcce5561 6ff0c037dcdaf14e944d81ab7739548fb4c19caf
-2cd0a8c0a1f69160ebfa77c66c0aecb48e0f15c2 0252bc2877d8e3f4db76a9a364b7397dea7696f4
-5f206e4ad1f3b82111d82f1184866ab786df198b 45b884adaf791655ab75c2649d0142c983f06b15
-49a86a8d2880b556094ad730c8b509220e0ecfc6 e8055993073dc72168bd8603d323e58cb6d52cc2
-756dfa94692811a02b7e8ee8366b40384c707f2f d4c1ebc225cc57d006f3dd36d212784022fbf7e5
-626157189d89748ecbe57e470c7757362d462d6e 2b799a263b8fc1367872a34d15b652b222d2e1be
-d37ce078648b4316535946243f4d2938525bae6c 33961ebf5ea03341c772419036cfde4d905744a3
-53dc405ad35ce7378dbab8af497effdf0fcea340 33961ebf5ea03341c772419036cfde4d905744a3
-c94fdea670e5a36aec7afec4f764ea98b85b14bc 0555d80b5d26b27be7250e2e35d9bc8877a5c1b5
-8c79368c5bc52af9983d7cf5c61725163df74f29 e4a118bc46a2e9fa59305202aee7eec2fddd1994
-8f48d5fe8e88a2c445030b3ae8086fd2d1c2fff1 33961ebf5ea03341c772419036cfde4d905744a3
-bb508091dfe8ab2d910a6a8a408d7d1d0ea39201 e4a118bc46a2e9fa59305202aee7eec2fddd1994
-3ef9d74905487b2a7718b6d2177bb9925a743c4a e4a118bc46a2e9fa59305202aee7eec2fddd1994
-f647d3e987fd050d0211b4e2b76e2851a5c4207f 1d8297d95b328d06fc6e5f66185cddfbbe341b12
-ace1de019775321a9d734bb01ba8807fcbcae9c9 f65803c8b6ed37562163db5c44b30fa8520689b7
-3d5d4a57138392fc000414062200a96364f99ebb 0982ff6d1394065bade1c2533aa6c11752e5f902
-0412de07e47310bffe45ee57a4cb66d5dd7c032b 384b8d736ebf41188c7c2dd55fc1ba09fef2812e
-cb113ba482d95dc057d610ded4fd501b95921795 416613df024f03146e7609c845e7582904c5a103
-5b56c1e6ad8603614e17e96b00ed3a6a3cdb1133 6c8a4f3c2c1dc9f6db89f3bf3764571edf036964
-a8672fd032ac2cd4a52a189823c490dd982fbdef 79f2f81bc32e5a00ad1758cb2f4b82f02ed8a323
-038db068a50a71a62eb567143af7a05a29ae6b18 d4741791a157f91f84ff26a2b2ff6f2466f670a0
-97f64b3768bf57e6914ab16b92675dc93e70475d 5e50a88d7fe800ee03a3bc4cec15c740ca874d6f
-09124079d18c74538abce36600ffe3b221e65067 e6cda97feacf44850485ea8dbcaf1b3eaf9e1957
-75235befa276d31abc81fa4aa85b414e8eed97d3 4e6a42e22372180d7821c10287ed297f6cfb2f35
-637d1f2e081b7bed7962f64449415af27503fa45 d175f8d7a069ab4848e2ee06a5d56e4fad1ebeb0
-a322b0cb34b4a1182d9799aba8ed6e7656d2e20c fea9d5f8de37aa98a183ff88d078c7c6075ecea5
-2c70856efddee38ece91a59cf5e33cfddbc27436 2c8b0f620f7aa6adb4ca48d6020d197ff7e89ccd
-b876b23fdc49993ec0fb12a149b71fe5532affb4 9259b00ab64275f5c850cbba0df827be65457a84
-39fb805235eb00ad08a27fab503780e4dd05aad7 1b2cc13e968c2941481e378147d0ea5fb4ef091e
-9abf078b0be887a2f9893d523cfa80ad0e439cb0 6260ac720bc0f61a17eb02536486f10e3d3ed8fa
-896de7f1d88739c5518ce49ee0231f8ea33e3f30 1288476ea6f3d12f8e7552d12129132a3072d505
-845b02ffcdcc4f85d72820d595e9db805f8d8eba e085ba8ef271d7faf083e778626dc0c156cfd379
-adaa86447a7ac1bcd8bac83e78a1e469ff7600cf 99a82ffe11b178a00801f1fcff002dc1cde4698e
-135a6e5d84790c41271f0c92c9a8f6a05011b012 dc7e6eb61ab666a9119a4bf2ed741eb819bdf1ab
-6c5b071e4ec235c38062148846b00ef9963366d0 ca25d99ad351e2771dca5c4e1564c7b2f363e93f
-70cdf722d764befd7703e2e346d5c37c2b13c3d1 0af2c925a146277bae10590bfaeb2a00e9ffe9d6
-dca3154e0047f8f9c65a81677e8ed195f5b74e9a 733ec1ce65b202deab7a9f156bd65626ee827771
-110fb9741482297d2a7254d2de7895c361dcc615 8b314d70e9e617c48c5fc8ac939f39ee7dc616bb
-825dab1327ca76dba3c1e5bc091ba3a280343038 e4a118bc46a2e9fa59305202aee7eec2fddd1994
-63fe6098f9d3380bb3cec74587dab8ca64545908 1d8297d95b328d06fc6e5f66185cddfbbe341b12
-53eaef5cb16932b562f808c2e9b38fe2b5c46d94 8b314d70e9e617c48c5fc8ac939f39ee7dc616bb
-ea92fd39b043fb494dca96bf5d54ed9a2640db9a 42292bf49789f979cec482a487e7cc5691ece0ea
-32b60cb50c1830986a3462ca250277d8e7cb7934 9bb37096bab7fbddc05d95c14559c8ca3b0656ba
-80d00cb594617315c4696d594ec81d3fc14a7507 2ceae70a36727c7141261c8c1916fd24edd0b8af
-81bb66422074a91a7f16207cea47d10afc2ad2ff a233390e0188c19d56d85a2e1bd990ff7d7796ad
-7c40f3828a805337fc3350156196642c31a823be 9d1cb0264601778182d1ca27aac896d4c5ed2d1f
-f65b4e9925405921ee50601926deb693e8c1aadc 3d7c271f33f6078b16a240fe38b4ea9c7b4d6ed6
-62a4d499ba15e8b81ea5724172539a7b65fafa17 cf6f55184065c4d9c64176ff7570b0bc4809fe18
-b3d40927847e8c050f10b6196656c81f1897a19b a8de9934b064073eee4b8b922fde7e20fc9b4b53
-9ba65416ad7f34fe7253d55c6278aa55b8591fc1 331d0e6577ef5178ffdd7ff7edaf88031069f608
-56469f97b8bed9097c051d17930e9b2b6edcd319 72d32eaf100ab1aa39353f3871342cd75587a7e1
-e0683eb833e4d3e74aab5d25bee550ec6d2e4fc4 1ad1e05fab88007d68c1b12ea9f5539bd2cac2a4
-4eb6bfaab7578a2956c1690d064f7b74c696e857 1ad1e05fab88007d68c1b12ea9f5539bd2cac2a4
-4c84d72f16cae17eab5e9777a733138c678ee8f3 940fb33ae65282e67ca5892b33704e6366cf715a
-da5d644c0e04f407e5920d0988befaa56d4c411a ed13cada1e1f19482531b44607d550d8ce26b5bd
-30886eff05498f54d4f318618cc76ad099df0336 402afce88545796365a5abe8a6cc9a86f002b577
-eaf7448ffebd84a26dd48026c2aa6d53f364fd52 402afce88545796365a5abe8a6cc9a86f002b577
-7ebcd23664d6537d47396ab75dfdd40cab9423ac 5ed16aa91bc9ae281b0cdf8eebe0b033a377660f
-7d1e5b26723cde920e98c33dad52a4d541cdd0af 6e7fdd8c984a3d419dd1d6256d7c679661253bdc
-6bb30bf28f03a7944cae15ba33f9b8618566ea53 b0119501cf6fff383866b67f2755c1d0bcf43773
-6e9f30198f48d8a5e5bbb8568b73d1babfcf0e3d 40dc03334feb17374d4efbf31004d3cb20625445
-45b03852ce3e902a96eeed4f536a6995421bf455 7d52a201abe4a6b1846227eedd0a8a28fa173dd4
-46bdb93083c34f59fac10d796d144ae142143232 edcac19d55fc3438277dbf7fac65d62248a4aeb2
-a4eccd2eeac6138dc45c8d2e124d41081f0662dc e6860b9e97d9676ad73bb67b41db0cc35f1b28d0
-3cc590488a08d5a1503f89f7fbaa69f49b970dfb 8b748eecbbd3bf779d4bb63e0accf9067af1bff1
-0f5c432590f2ed9ee62fccb3ec4ad3e3c6e05ac2 c22374e15bc0392a7a1f30d2c98b514bb7d0fee7
-bd391b2fe4d78e47c2f63bf676ba86af05dabf90 f30e94bc065428788d5c3f25490234969e6f60f4
-4db06022b15afd24727f00e9f8614ce3bba36e34 6bae018717af23f5568a0b45fccc64b7b6b36acd
-1d6124bb3625e2b68eec73d8c13a5c0212e122b6 0849668b319899c4d8159f0c318af1ef9246194e
-9a7d6c8bbb43db4262d93badb7236eb20f79b110 196b0a00a4eb82d56c4d86068d403b120c92cb11
-44e7079fcaf2f024b1e4949e059dbec58d6a169b 302b4f4d0212f9b988f40ad822638a38c161390b
-347237bfac1e441e408b576f11100b694d1cbbf2 c14b2ae81abd8d29fe7d711fcacc271928f5b7ed
-ff98da6678da547b306870fc729fe31d9ee63911 8e21994f432d8b89b3f91b560bca2c4f5e346704
-803b744ded5a4666ab7fe4c8375adca085a605f4 8fcdb1c3e3a1854a05e137c15f1a4093ca0ae554
-6c055677fa7bfb032c3119d4bf997a6f61e79d25 baff7295e97116b2d5a1d779c58553fb42038cec
-abeff3184d1fb787a11b98787c1dc1719d98dc57 7ace6af9ae3cae763799d95583c9e560b9d0d998
-f092b86403698131a47a0026d14945d4bc3504fc 27ac1cb8c907624bd9b530eaa213754afe6c74f2
-fd75db5ffcf8a6eac788329780d11902aeada85e 1f21e13794e8e3b71295fce5925da0552731d1ac
-5cf5b22b31649a4ace090618b3b4d60ed7d9ce3c 3e4ff8ce68f2b01318d3c86f8489f7ad06d0c5a9
-8e3f9472fb263f4a9733e3fb9aa2b79a284b352d 6f05b15f992773149b65d3d4ea13a2a36af5ea6f
-321b9bf845cbb18c4b46b5c0818e82f701eccb7e af1e54e8e2d075f07ab6059793e4f30f9508c36c
-d2ecd0fba2dbca5c151928161e6cc49c5a17e8a6 29052bc6414012f8d6e12a4fbe57970af2b0bc6e
-c13704cd5e621d1a9c7990adda2f6b3d402933fe c77bc4b70e0acb62cecab2644e0ef878bbd0340b
-b463c80ca272d17869d665644e0ede69f29fc432 5675d375112b4c72181bca02238f05057d8816e2
-e4fd28568de9560d6fa76066a9a2cc34df593c3b d62ff8cc72d532cc482f948c13e3b61c0ad8ca8d
-2142ea3320cc280f2a430e0da4f3c49c475f970e 62bab44c567f9c73eaca7807658fb9488a7d647d
-593f504c70dceac3621f8669d1aaae2b370596ea 2ca77bb2b471e0d533b85b30689b23f456dbdf0f
-8555baf7a759f5be2e3103d883075e877a7c3882 204712ef1b81b3e22d70eacf1c10ba8c457318bd
-884747a432222fd0b7a16085a2a0309658c45eba 7fda5891a602532d94cc1149d48eae003afd2f86
-85eb57c5e5a48cf6d364c0855b6e86f868e4ca7f e72c47675a66d0728a871cea218626f0343316a7
-463332b884c567021cd2f62f32c689cd9c4706fc 575816e106e360b0ee8d9d161dad9ec2fec3590f
-924b40c53a086c3aaeedcb50964831caf0adae4a 2e6f8b44bf0ae8c95912c4cdd8e79820498de99c
-b95f507d64e05518525a1b4200fe2f8bb34e42c7 effa67173a0e3c32566dc429e2d12a82a13c3683
-b65f408e0ea3ffe28915f1a1bd8ce167719083ff 55d3696ac5bf13968f5e6570941b8b180c1ae956
-3a38a8a86d0741ab0ece65ff7ffae85fb5fbb2ce 8716b60b883c01d4077ee5e5a68b9f6df1c7ddb3
-e38642e0c21c72b8dba38bdc61e3d10ca4a2bc12 9f2d9babc1bd43e73acfe5c2ef6f639929871de9
-69c391e8becd0700cd4cd766bb72578868ef9fab 654e0b0110dc1f4e4426294e474e0e02a7e001ce
-b8988b67964bd5ece09aa0e96e9255e3312ace1d 4754574b8fa1ee0bfd087a3a3e78c6b3e0676f25
-d2c73c694b9f15321cfec36a0b354ff1cbe0c32b 54c0f509e41f8190d632b1ea902d2798a556ff84
-7498b6d88ea5352bfced19f36ec11d46f38b88d9 37f8560e93bd62820b94f68a5ba35c78637b8832
-f28d8aed98d1e821755fbae91e64c81277e60c1d 3be7cc9a0fdf9cc6fc1c1335012a2970c645c3f6
-b1f5cd91f6e3f3f5028d1119220e022b26e9c724 771c1ec6e21136df5a014ca61fbc7db86d0d0289
-6594c303f0bbca248d33c47210412e802cfd86e7 4e47c03753de3a5fbd91aa4ce8310d85110abd08
-e43c205d02681dc5adbe0ae154ad4b4aed65a3d8 ce9fce8a330ed31d69ebb4664927da5c0fb0ad74
-f7c5002e481a6747ba223f97241022f802ee0f60 119d0c2ed86b8095928cd6f5de8b118fe026258a
-57871ee741b208a12e14b3a6caad230ce687e712 1f6207da710d378d43eebeb9fb5b8430c764c063
-0c85c9a839d7af565c83d3ef157ed352e66dda8f 83e24b7bdfe02b69ac6e3305aa84e1906dbe3b72
-4220d4971f8cbc906c2fd5a5c7bde97f63b95f5f 016c5c94ec702dc5d4326f85887c72c01db59285
-8cce890b6b55fd5a86b0e7393bb1d10f6ffb88d0 ddcf2196d02e05b8e9fcb2dcfe351cf9c5ec05f8
-aa8a17c755fe207af90e6bb32e0de8681082a141 6e99b1eba4b442038ce4b4f7fabf99039b5e8f30
-8dffb5899485b4e3f2f69daa7773776d3dfd5664 cc746100454e12f8c3ee92069c92159b8463bccb
-a6949a5c575229a726d74c845826877b29470a59 008b2ce2b68f685632bcb62f5c60661cafa5f3d8
-fe9595c415e77b8e8e3fdce33f6440ad905b53bf 43a95e49f84de4f1b4fd9717b1321b4aae36f877
-78d80a87c1df63cba7408e9a8a4b105b9d034085 75e594f7dbc854342f116035dda9d8a673eb32eb
-bdd1e3dbc3227df9684d0eca096bee24c53edf59 0788417bb4863baee40302e15b9dd07fc006bb50
-84ee8b49463c7fc9dd60b88e3357bb0afa6f32d5 ec089fa0ea76d477771d08330e73ad49ff62b6b5
-67fe4001387b97a8a72a0254b4d071a243690703 bce4ec477d8e0b0739186382aa26e09ef2f584b5
-a205f6db4131b381d6161f1b05a058cdfbe122e2 e197296eda501294ade166c91a7ce0a0f6b61f2a
-53d6598be0c65c8a65036dd8dc113619bf70ba27 40df6505905c59db248ecd4ce41c755fc40ee27c
-6def5b0d803aaa24b8d01e0a49759d7d9277904c b936f6854293014ec285f00ed7323e3b28cc179a
-e428d373e0298fc44d38ce1292aaa55bb155986c b936f6854293014ec285f00ed7323e3b28cc179a
-cb5422bacbab86e06a62a65bc154481e720ef8e2 8d2750938661f1266ed4dc390487729f35e42c87
-d5d7e01466720d890059e1c8c6be7dc63c42dda8 00af3227f183a3e17280caf508d4250bbff20ff9
-996c2d2705f5d3e28a51e002cc81225f89b15cc7 89a0a35daeb075a71796d5fc40a27db166ec5ce0
-1df04bf0fb75e762cd44b069ad41f1e14019d265 905c111088ecd0e376724703507cdcd805a71cb7
-fc489264dcc1293be19857b3ac0a90e17e74bffb 5eadff4fc1117b6f24bbbc3b412dc7e136a02a00
-d172713b53c518ebd40af2921d7d90d6e5ef150a 098218f121c4f111da34e1155261b1a991f7cd91
-85895a394d12c4bc7afa69829b7ffb2af6817574 f4319333361e31d6a9df38e5430b2b1ad7871b35
-ce1f6165431098bb10d36970decbd9c85632ff07 ed15b1c154d64feba392c5807ed77cfff2b10857
-cda23729e84cfe35af455e68847f4639fb7f0c5c eb9ca13eaf2caa0cea870a95a6544e2d1a2e424c
-ac747375fe11dcf2d56485b80ca30b866bd102a0 e658ba5293ae6a8404cb2aeede6ac757e8ffac72
-1ec61f27a44538d585e8b81685e287b16c2948c3 2b0d0a94ff87b0e6f3df37314aa041aa6aaff927
-23fe51ef63fd31511cb5c2c8af0fd91f775bd470 afb61e6a1567623e22d43a060cd32e5e5cc9c435
-98591915f3a1a0b32216d9d99e2a2bbe0c45290d 830eedef477ee00f2bd7cc2dbe8237c4e69dab09
-62a020c6770f7c272c04299fa35fcff4de4dd68c 830eedef477ee00f2bd7cc2dbe8237c4e69dab09
-ae4ca267f5f30c69b14b9467da81ace4303f4ea9 830eedef477ee00f2bd7cc2dbe8237c4e69dab09
-aa98c5ca7c9193dfc4aecaa4580c7d6d2c7b2df0 eb6f34b3ebe0d9e207ef9017c53855e1506d9efa
-9b4f4a31b76ab1866be50795e242dca0bff05c74 7ccc7eb5c049fc364f4addc8e376916876150941
-619d2f1dffe47ef9f331bfda808c73ea9b480224 0996f058ccb1dc0c69ef4ef6ecdb33202008006d
-05714a8329b0db7c47dcd9add5c24082dd2cfc64 05f43d55e04c6e77e0d33124db496d8af3727c9e
-6614bb89ba64f865ce38f800ecf0e4e9290ade68 4c71ad8c769fcc348e382bc3c44ebcc6e638aaba
-35295f46b78f8572ed0da89e78de3186dcc009c7 749fb37f1896cefd5898935db652d6816e3d4d0a
-5f6ddbbc3104dc145f4d23ad164f9566fca2da76 fd046bc0012cf5e8c00a3cfa93c5400d55ade8a3
-50dd3c560b5017b696f4fe9877598eb8aa14ec95 30a8f52f60407590b0d55ce75fb18ea05493f118
-32b852aada1d584be6d0188f49445044d355c573 c6963637056b90557b68987f9e46cdafc2f56bb3
-5c6774214a2860cdca8ef2bfda756874a941291a 6878efd7bd64ca7d5c8df829f17f2c0e6a8d5913
-383088c70ba309f21c9df652e0f216a80895f5ca 8ace9f2aaa126c35b8fb0559d169f0e34beb7fb2
-ec2ea3db516b36cac45bd59ac990022d64a9a9cd 7497de39e68a9be77a0cf85e4bd592ca9777fc25
-286cd78b4dabff92366f7bce680f086a8594eaa0 fc447824f8e3eacf1e831603e1a55b894dfe6938
-84e986af8eccfa4e0a5641a9025a0e07ece43f10 bbd9402e584e13c9b0334bd48ac18a9d00f16cc9
-0de50c74c3b892078f83eb9407f0086443b13d19 84d130fd451b841f530e0958204c39f10015a8c3
-675e30965fe12a9c16d163cd83c83662de3d1b50 6a11b7e045855eaca78d27b071d2f4400321dc51
-b6c5e326de3599feda3506b036a00e5b288e45db a1539d71b6e105de5273176f1555b6d5f4a16e9b
-bcb9333af5cb7bb2c0075615462e2fba291938d3 c48fcb01aa61fe575e255b5b91b8fb1771b94cb7
-3697c80860d5ee3b4f1792bba6f5268c0a2c6dd4 e7b460bc2642aa2cfcf7dc8fe894671c1de056e0
-59d28d7b63596126ecb4078b48ca52cae768399f ae58a2ce748ceaf42ff8e180d826a06d5df58e92
-25b67016557af3c79cf5fce5d647f9f92f09a484 eb3cb57f032e7bf572fab28a47c089f315029dde
-e094573588e42e270e096b23d650a47ea7cb4d6f eb3cb57f032e7bf572fab28a47c089f315029dde
-2455426ff8b24f2ebd28c2efcfa06d462aefd179 eb3cb57f032e7bf572fab28a47c089f315029dde
-4fc8fea48c0f6767590c35f2cbae990e9d41accc eb3cb57f032e7bf572fab28a47c089f315029dde
-3b13edb1dfc7bc43ab740c15e0535bb7cc92bd88 eb3cb57f032e7bf572fab28a47c089f315029dde
-93b7db4fc776fd8ce50a22e7d7c37a6e56a59851 eb3cb57f032e7bf572fab28a47c089f315029dde
-9e3073d39b7a155ec8d86ad45dcb35f9202ea6e3 7eee534f14cb6a66657d38716c3415908a5dd30e
-93d2c7ddb75a795d152f79f3f5c00d3e4cdf048d 98b9ab9a496de87a01e0a1f4b6b1f2e85a052974
-03a3907d936051f6b49519c2f6996f4e9f67ddc0 98b9ab9a496de87a01e0a1f4b6b1f2e85a052974
-16f1d5d4f8c828ca99ceeec734763f3f395f3230 98b9ab9a496de87a01e0a1f4b6b1f2e85a052974
-289f82735b668e00d4c79f064c25644ef8f0cca3 98b9ab9a496de87a01e0a1f4b6b1f2e85a052974
-2eaf2f1dc0f576b95fd3f337207419e334ff19c3 98b9ab9a496de87a01e0a1f4b6b1f2e85a052974
-951bb1a488489764dfc9bdd61de2fd6a59ee8c47 05f1a111959149a3758a7ff9b83129fd10ec9f3f
-a76e895aed55fe2e58cd49b1c01c9880c3c735b8 05f1a111959149a3758a7ff9b83129fd10ec9f3f
-e2ededd599d78358c1f35d4eddc69f712c40198d fcd96ccef7824fb0df9a75cc2a10e90b0390953a
-3ca29b688f09f6f091248181519dc13974c04cc4 fcd96ccef7824fb0df9a75cc2a10e90b0390953a
-559721f59cc3a772dd2de99029035259421195ae fcd96ccef7824fb0df9a75cc2a10e90b0390953a
-0a51d3fe86be55a24dcccfc4a0a7b697b712ace7 fcd96ccef7824fb0df9a75cc2a10e90b0390953a
-f8246f409280795f7f6d5a44c895a53c09649b70 fcd96ccef7824fb0df9a75cc2a10e90b0390953a
-89142802fa2076e43cf9f870af0d0870509a3054 fcd96ccef7824fb0df9a75cc2a10e90b0390953a
-74bc9cb27ee8fd97a3d1ac0a7bfd9816fda50158 3d1661bb5933eaf9693827be10e01370ef490124
-33d5e28c4fdcdcefaffd8a4341888f81b75b5704 e1f8bb15f2f30dbcc76f3b6c1b7d5eb25f852b9c
-d89a2cb230f5cedaf72ed7275383d3dd6d8db42a e1f8bb15f2f30dbcc76f3b6c1b7d5eb25f852b9c
-5c540cfcb64f8df2b061769d3e4b8da97ccfc3a9 e1f8bb15f2f30dbcc76f3b6c1b7d5eb25f852b9c
-d317f60b882f8521cd9afa5a55aa42bf5b6d110e e1f8bb15f2f30dbcc76f3b6c1b7d5eb25f852b9c
-fe928cf9f7ab97412f22b8b7928ad276889c717e 5e233889df13e9156ba5b2311834a42a9d81f107
-1de3de1a2a8968a167315d603999261c21cee1a4 73fe1b5d91d2c18f812473668c648cf63957061d
-f664a390a31671d8c991ca048e475cef65e7fa83 73fe1b5d91d2c18f812473668c648cf63957061d
-7e42417571f232e65e0d34b1fb6ed8f259873ea2 f0f26155ef023ba7eab56f997d7181bb0e50e6b5
-7959c5512b2b8c4ff4f4868fcfbf9a180f5a3b63 96fbed165a5d051167ed7c6ea3e49367d536112a
-a34bd81d9a033cbfe1164f30db457f9e116d0051 96fbed165a5d051167ed7c6ea3e49367d536112a
-767b49ff4d5ba328078027c396b3e7418de6a848 96fbed165a5d051167ed7c6ea3e49367d536112a
-eef92602c77689a407b26adc8dedcb90d4525299 9e020af60428468ce4364eb4af6a85d3c42a3cf7
-393a04833496b245a8f9191f0fa635af483b91b4 9e020af60428468ce4364eb4af6a85d3c42a3cf7
-781c95d413481e467693ee8107b2666fa31c8485 cee44850a114d0d52c23a3b3bef97c04277b4e78
-a521241956ff762516bbe7f7eb0d4f5746ac22c4 6d484ae975b4705b9bc2d2d4f9396c28d0d4e5f6
-d6cd1752eb62250a9cfd30f0f622fd2c2ff39b5e 77a90d8a1b9c1aae4e1f9a4b907e24339736fc49
-735ad8f59de04e3a53499a0565e0529796e55e57 2f90f188794ebb7f88e2f8b0697c5bfaeeb1dc40
-b138c2c7000fd77730f875585ee363ca0c6668a7 6fe046815346e463f4968de8431af46d476cd0a5
-b8196a4fe788a805f088e8ce6e10872b75a77caf 5d5eea2fbbc380e449230939213f024cf125defa
-154978e979ad72962163db63434179c19bdda9c4 82196e1cec0f0ab28efabcd22067ff905615b834
-3e749ba5607807ffe94dee1b9b9a64360faade79 174f1f7aa1271983deb7aa5317353b0b9e0886d5
-dd0b9b0bae7fe1b97a8b8a366715401d8f81a51c 104be8b1c3f4f16495b800776b6b2e106b9e2234
-37b484c352f61b7cfe58e743a9e82bb94bf567a5 e23e2be02f2e55b7bd4a0f92d0a89f6b6decd46b
-88202722425a6daa68cd12b1b59158875a2946e1 75faf9c5f87cb44f20a358ab5c1feb3f57adc188
-61d729c851c91a0900d3960aa0b0f4c73fbe6773 b608cc4b0d4b63a4164af4c61f28f3342ccaecae
-afc472a80c623ca043bd0bf8890448fb6d5f2c9e 749c9fadc46c740b07941fdf081774efaede0b10
-204f55c00e467503d9de1843e4ddb35448590007 a51af7befdc37122ebfc37f80e2babbf677a245f
-b91503659b14775c470c78dfde7dbcadaf7f9791 4de20fb7d9ed54c6c5140c605bc0ccfb7ce7c862
-75ea72fb3181c141a4456eb9ccbacb533771517b e474513a0d0968671e4ca2760ca8f51101e4c08b
-8cd3ff49aadde38c34dcd498cb0c8ada57bcbd52 73ef56169bc0a5c30788f22fcb859a91bff9f571
-4311d7f96c47b7fafa491a53241665770689cc9a b96662eedd22c35ba3c092af08af2d61f6038c49
-e81a77dd28c310339178bf9844b19703a8323420 5fac2f2e936f0312e335c2981efb11231b3ab577
-9c66358548cf6fed2c7e58ca027d0da86f3761bd 8d699e95ede46969de5976cf5da3f90230fd50f2
-99cdd1d47334a9f30386857b95265c2758d7c63a 9c27235c9f21a38a91ecf5a534655317f9bc4ad4
-e774b4e509dc824057fb5066b30c691cbfa1f267 5b11d9c376823509ead9d7d4205c164ad71cf8d1
-68670ce92ed1d01651615055b30c63ee2adf20a9 02034815e738b23acb179f86d34a79079a7e90a4
-65d7acab2f54de6f5bbe506ec82a4aa9b7d09522 3533c7854d175ebb2c01b8d0ee5f7912b1b6a65a
-8e961091afa54a5d98a37d7c7ff9cac45bd864ca cde806638cb5eaf3777398f80ac535730d922164
-71946d1e2a90d5cd4e9adcb1b606e173eb4c6c9e 76310353f51d2ef6d66423987caa29bb11539835
-857b3977d04ee07203ee940f0bcbe7f71ac52fa2 2fc5428878a731b257678cd0dd59a22e5df581c8
-6707cf167f36ca5bb00ad9ee065c26de5bedea8c 4801376f24147157af439585d2a86ce9b8b1cbc2
-b5646aef161ea7ed9d82b15c968da167d4d8e8f3 0bb77d6ad2407e01c4d74aa163635869e484ae34
-75b1b380a7ce5c0688e3ca92d96c13721259832f 3c5c0fc9e3003591828a6e31f457e716e6562088
-08760fcfb4698eaec0c71b71ab9790313d986154 fdbb4a3fd606caed4861916c71467ff273b1080c
-3893ce3cce349b7772be9ae7c93b8c34db092ba6 1d5dbd97b0cd2c1df964f94d5988a2464f2c9a5e
-facc2b8434da83110b83f350aef00faaafb3a6e1 7f8c0aa73dd1c95249166d83fe754988a61aa1b5
-253f8dbfc21313fd6dc4a42b459b11f1dbc751ee f7bb62036bde3582efa970b71aefcae1e99a7312
-3ec324bfb29054e1bd8ae00e422de6a7d3c6b76d f39d2cb0efe67524c3ae53bf37b4dac0c0d0a58a
-9b1047a7c7dcba4dd2f6910f9803c72a9802a780 b123ba2abb85f8de891f70be26e7af62d3bef2fa
-2436b9bb33fa88cbbc8d50786c50b69143a808ff c5d684e0efc5f2cdf626a96c47e72241a89b83e9
-4c5c3285ac81d040fae8dec38388dcba755e4ebd ff9a25aa210b10626506406ea27139ba56904882
-4ff86043e49ef958f769dd79d28f77a09510dbd0 5d405dcfef6f17870e2e7f3a59cc44b4cb090da5
-05bf0914ce79713115b07440b32f09c14efd0800 6e14b555dcaac0ad21082c59843407dd7e7b1d1e
-601018c507c99d7893838c83e62b60ca41907db0 d5793fada65ea84b7a36803c209e6f65218fa963
-86d89fddbef3707463ddeca47db8fb43b98edb6e 0644568de014307f1b7d95cff7a7e3200e20475a
-07c0c720d18aa3de4004d4de852cbe0536928800 5a595969223c9b59ee1a2a356482e685ada7c5df
-19dc0ca58f152658b78a9d0ec7a64ea2d4ea9525 94cf9873d418b50df755b38fbfb423734e8b589b
-ad920a1febc5b5ce0eb8ab3af4feeb854d5b13b0 d1671fd5bedaa447fbdbdb4e3363e266df1545fc
-10d6233c29e7654d7b04d393c895ae81d47e1ade a2a0c595da95dc8bb3c41eda93d4b7ccc771f18c
-6d5f1817bea9175f2b0fe03b5b506fae928716cd f0cb3de8ce6953450a8a6bf6628685220cd23e63
-a38c9717c8909b4720a2abd341d6c4a2609db27b 791345c142e61cc97c9829430dd25ba8bcf342e4
-369cb2fac002821f7a73a64c922ce5b530823374 7ca5ff4ab41164f853b099f05c44643fcb039e4e
-64493bd2f9e40603c7cd65ff936c74b814c429d1 7453930e70bb1a2bc728bd42b12a42a666f154f9
-a6a1a9058de6123ee0e8cfec7bf1e5d015da3ff2 f20f0cd680ac81690a96c91a0ff9f02c69a8e163
-159694fa43e9e9f61d5933093dea92055b64844e f089a2eb8f61535d9b7b96b7a8fa69b03db1c4bf
-02f110d8eae3a7f4df3820b7ff1d062ac2b6d013 7681f12f37e7969d99553093f026155eacfac9ce
-c0f0dd03871bd898a7fb0544ce5f1cd464bc11ae 9936492a988682031e7006e03c34cf067cdebc5e
-a8abebd71341cd69f1d6e0353f874a79b3d384ac 9936492a988682031e7006e03c34cf067cdebc5e
-8daa6b7452f4c25e297dcba4d312e49cf36656ba dca76c960a034fb34abf3fb05ee1190fed74ce95
-13a7f8d0c035cc8cf7cf13807714e0199bf4b692 b071c85aa14ccb2e595317043ff093eeafad05cf
-b193011447224bb7f7e9c492a7cafe45ec34970e 35dee2e6b5f248ba53fdb094a5fc934624954be7
-6f4b3d7bc481b3dbde4049e11f54db2e20f87586 108de243fe1bddaea3731b6f00d5e0079607b525
-8347021e11a52b0dcc78ff31685a0eb0a2d18a4e 7baf4a76098294e7066aec781011efc3b23e3b4f
-dcd951cd96b2a76d45a30acbae5721e07a49e0fd 80d0a20f3644f2969fc24d76f484c04275bb8b4c
-e40a2ddf46a080d068bbd040f9c2e20484a37ebc 85bee0f5f48d08e25c7c4d76521a708976560475
-988e3ad3659f216e9069511d7ff293ce11623e92 e26a3db79ba8445158394ed6f95b50269cb40f55
-55f5f0b336ab6293dfe65fefe5bfae79177ef202 93db4a5476ccd10adb7945331ef34c2a65800277
-597c301240082388bbe2f5cf3e5006bfa3476c14 80cc6aca0a885fa6b1abe4c2ef5533c5f0af324b
-0d7b1352a8e4821e6aa3bcc758112e204495ae8c 78360b2d02532d14f64b18476958cd76cdf9b334
-0e03eb17662385138edaad0fec9691c99a811800 6d95f41d53a6b25458bd8d20da9750470e74700a
-49e14579a3a4b80633db0f333f0c310d99439889 30867c9621f9c88680b6271da3658e18145dc460
-db9b0426a490fa2cf6fd0814c56ca20522fb8a54 aa25edd54ff56747f213d6eadad1e84ced82a37f
-2614e00222e7dcf5ce81b884bafb9275f7526e3f 70d916408a51e751074162791d6edadafac6a37b
-dfd9fa4965f65545fe931bd0eb69206f05b7665b b1a4c57f8577c337f3077fc6453f57200fad2738
-1678c25d779ec591a67f20da91a23e5d5dfd72b1 e5107ed0495a03a7e0d327b843feee009a996e86
-193050b23c8f76c606198517a668443f3b3fd76e 79bac099353bc1dc6c99faee5a3faf293b7a6ff4
-ccfba021c2bfae61e4d73e6b781d65881d1dfd92 ae871a923b5b8601c0af3f93966d5658bb959378
-03d69d929bd6759e436166551320eac919468ad6 ae871a923b5b8601c0af3f93966d5658bb959378
-dca61297580e9c83b9ec96dd7cd187955cddcbce 098a46416c333f6be3ef8270af84803f0cb09b67
-51b3cf5e88d35582bcccbeb110bfe4a3e5ee4f9a 1377e3756899179d66642ff819146739b833b824
-645ac78ac8b0fd1bfa3123b91c4b2e4f53a154a2 3b7a6f54cda64713a2806ceffc9cf4fdda23233d
-56906a9aae8d793453f6731ccd6546ae4c7075c6 e53188807ff39fb7ddede3d120cd81251303d266
-2898dcaacda20c323cbdd585b72bb398c6f02fff e8685fa4045ad2758793ab7f4f6570cb7e1c8970
-d36799e7432505f988cde7cb1ab0c09ed3e6e18e e0fe5d37b69e550838ae26ca20d05106e73cca72
-4d39ebe8510ddb67641001ab35bf40102ee2d870 b19decf12a367e4960d5324654cfedb6907e0760
-26b83627df32da8fd4c7b35b6ab42ed3e165a712 ce21b2c0106b08dc0e214b7d002e347f69ffe995
-2d8803998214b00fbbcfb346a9a5e134d10ff439 6f72fc80f2e1ecbef82616c27d9db3d3aaba2095
-7ca4968838e7832ee956b440be5f01e4f3f42b29 7d8df0ed8314c8ffbe78a49d27a436d3be006ffb
-61e91cba0492c0484aed46a70fc45ee70cc6f2e3 cd4813831c21a640b95ef0188a47422fd3d87fef
-1e96c18c11e1f149638624fe15bae01939befcd2 40db709c2529bf0d00d898fad05bf248fc4494da
-d65b82135faf4a6b24deb388d8793c947a21857a 37cc37b3d17bb662a8a168922d2dd0df818cf3b8
-ae8264f66504a36f820d22d0d3b36af5d072feec 0ca4bcb32910ea9903684b03ce44ad60b0a35577
-8d9cd6f55c714567947a36674904ed2cc4e082c7 545fe83fc1f8a8418a9fe9fd5507b42be41a6d5d
-968ba1dee56bcbdf02c626d38f46712348457114 01dc9c28e7ecaab2592b76a68fb130db2bbdf033
-1bccab5901a3a895f330e21ca8dc055cb877766a aa5fe466fd2a4918d60fc69ba12095bb6093f27b
-ba22c58807ae495efe74231153bee54c3fe7f4ae 2a4619dfbbdcad0b8f89d6f8f648c52d8d8d6eec
-cf4caf82827d5130eef55ad90b4eeae648c2bcd8 71f8426682eb10007f08c18b4d40423509f2f6c8
-628821f9cd1be1f3e6ea78cf2033d68310ad6587 7bc9f2fd568bfd13624ec4c7fba1f4d5ab2a5c48
-f13858c653635c3143d7c5b4d382d3b94939e17a 4f8c00ae6c0405880b280e8cc03b0086e0f79afe
-e31e6eeb5221196e4e56acf049494e3b1dddabe2 45390d6a7b27958d93daabda34674660265a9683
-77dc4b70fc7f520e6b409896acc8ab0e554fe5a2 02b8ad705343e003434a02b7fad2d91822d670fd
-f99454c44992675012b549ac4dde0af7f802d85a c9bd9cbade6d7480da0df6663aaa6181684d06c4
-619b57f401c7771b406ca7f636b102a93ebf878c f842237ed5902d421bb99344191b212cc5567489
-3c86b9a214800601e7bcad570a2a9e1929312e38 c3f8832dc0bf942e9d37804c151bf24f778896b2
-77834edfbf88c0e892c7975d6b7484918ba05a60 7ea91116b52068b679bfed7598b04fe53d8fe34b
-a97db09c9953b22fc31cc28aab5641516ece2f02 cb9a8822a920de9579f21c12d4ea61726e160b25
-9f383bedf4d13bd6853c3cb58f5fcfd204957d3f c77a485ad3bb3612b731880b72f35999fd759187
-79a0399a59d3c1af789b38ac2ce3e340cd14d3f6 eb4f2d699324a5ba5ec5e87ab6f0207eedf502a5
-fbb5a5f65b272a20729f25ec4a6b40a62444afa1 46642120ab84b3027d45932a1e14c37d26c498b3
-5c1d73d9e24162e49a77c8624d4c825472da3938 d7ef2d8f4edddd139ff2668bb1bfe4626a3f69f2
-aacb9a6be27dc4eb8b92d5c6b6bb805cd370cffb 5e20bfe98c7e22b0d347d4b3fecb3cb2dc746f14
-7aa8e532e6e04874d9dbf56ab25fb2e9f4481949 268e75d5b72dfdde1137193244eee87f15822ebf
-85c809c2d0a9a924fef56e4e4f466ac77ccbc35d 9fbf05220cbb9f9faaafb1760ed943517f05bd24
-c119c0cc33952064135ed7d2cb645a4c35897d06 5945fc7f80e7e3490b067ff5f77936bd9b9d354e
-6fdd647723f1f9c49daf01b5bfe587e54c09d1df 0ac96d08ef71e0fe87ba6728ac3da0e658a8802e
-af64f79e6bc068354c74490679440f4e4d51c8a4 1936859178d6d32a338109f8326069d9a955024f
-3fb26ee470e670d1a3849ca01c400444b84147ba 308e615b3155a97e3f6afada410b30df18a9bdf3
-c9e6788d2eec43d525a175e4d399a0818c3c01fc e457f883462be37734fa7208ac19345f542b74ca
-ee75738edb3e912bc335385cc2b09e1dda756905 8ceaf04002a4944dd76a234dd3429cd692b29e1d
-12da7c4e348db7b67a70b074ce7b7315987ac1a3 894ca20d87833f08edc8d383d073a0d068b4a663
-056edb0ebfc1af1496f2804e58563d7bb7392106 00f1b0042786d9d83bbeacb942f7ef6fd34500a7
-15f828a78882f7594bdee6159f4e4bfac0f6f5a5 c28bd9c2ee113b8bb9a789bf50db13069257620c
-1648375f63b467e912151b07f73c3ab916240473 97bb6d3fc52b9ee77fcc2ce7a41f5143c813aaa6
-d64d90c85fe7884b7fea0bded08854e41056491d ac9d93a4fbc6cd2794bdd4b6543877b8727ba2ec
-09c3ab5e7d4aa05a871e11ef3dba6b18207f6d94 239c2fc0a06d1b7e97a9821c9179f978969af834
-5b6ebb00d68d58c7f45d6fe34f22ac129a6101ad b922f44856bc284b8e4bfd7735db437acdb30339
-691ac862f8b96c41ff24933b1689d685c5010d07 3be5bb07c37c8c06f6b24d06a5a4d878e7c772f7
-961c4f8d5f1d1e81a70ba5848702c8c29e31d0f5 06a81816f5e02353425ca93416cfe1e6a7bfc03c
-2ce7ed3df4c04adf2513458f6d1967fe6796fde0 5d0e8d5cb5f5c9ed6b31bcd2c1a2396e211d4371
-55aff21d0c3e9ba01594d3b2aa5b8bd1dc882085 46db2161b54e5e4aeef50b872128169b631da25e
-6497a512b70215b453186c8cb557b375eb1498e0 ccb05f8a3aa226993d86126d4bd9fbfbd164443e
-ed54b86845c57e5084012a9b1e84bfa1e606a2d1 d3ef154c7f91a0aed0378be75867aa83383d3fff
-6673a22e4ec7bb5e036b78871ee9a8f9108d8cb4 812ec19cc1f0a26969ed86370c5a003b39409b92
-f009d70bae40c227130e860fae7e7b44dd839be2 812ec19cc1f0a26969ed86370c5a003b39409b92
-f7ee562db92b8c66d7967b5f989642e952434cc8 812ec19cc1f0a26969ed86370c5a003b39409b92
-5fcf6ae1f3926e53191cab64bad8d73322a1b935 812ec19cc1f0a26969ed86370c5a003b39409b92
-40d525505d7491d325da6e67809c310c5fa05b65 812ec19cc1f0a26969ed86370c5a003b39409b92
-4d8698fd2808b9f5416e7376e3c605b74c8add8c 812ec19cc1f0a26969ed86370c5a003b39409b92
-7c3a7aee7b9d90cbd8581e71597b5d51272d34da d3ef154c7f91a0aed0378be75867aa83383d3fff
-bae985b401073134deecc3448b17b9ad34a388cd a6eecb8e54530f13ac8490d42fe4dfb4a677ce5c
-3dd4d1fea7bac16bd8ce7f4aa62698873058c7f8 c6f214ae2cc47d0b9c572d0ac8a01ac89cd64714
-950ce18f20218adac3776084b84ae2705d36f2b5 6d219f3a82037a7861ebe03dcfb33738b0ca8144
-1b7af0e6e480054ba61c30b8f4dc34757cb35e02 be902840f3a4aba5228a7c029374fc449ba7cff4
-64af1dea7319136b5c44cffdbca41d8a008b01f4 28bb6228d4741d804adeba7ca83c6431c8b23485
-626eaf997495d3ecf79d9504ab5e612561737d5c c090476d9e29ddbd7a2bb17dd25b9405b674f6a1
-28cb14808b5fa4342f3f87d2e1deaf51dd84a860 d3ef154c7f91a0aed0378be75867aa83383d3fff
-4b961e7484a40eeac804ccff50d23ad63d390f68 c090476d9e29ddbd7a2bb17dd25b9405b674f6a1
-79e25b98cc0e5f7bd5ad4d08da96ec64b281468c 6b8320faa836c78c960d1198135a1ee7d88ce46f
-8e9cb53a21df71c5a58ea399618c29ecb91ed7b4 ee0eb5571b24ab04093b2113d3262b304c7e941d
-f5a7aad8f45649f9b7ad34a040b29f4c68442a8c 8ac7e1844d8afec3786335aa8c2e421ad2045e4d
-3c163fc367e09b8d751223c71b924d70b7e1b246 befe94b8afb45c08643dfec14220fa151612828d
-9f1ad8f64616de90b34b66620d988fb546471d1b 4df230c64930a8a3a50f1c948d6c84dad491310e
-c902eff7f1033fd8d4f3776d45f478d37f341744 57fb72829696921d012479492c2ef79bf399b026
-0e799cb746d4a7c9b7db213750277343d70c6295 e5fd5e1c0c6c68ab05299147f61aecc228765ac0
-492e8d36be213a7cc94ff6877d3148ae1a7578ad 751d3a1a1a484e09138d3a91bcff36fc6e9b223a
-b27b3ca99fbeaa128303280fd37f7ba9da40bdf8 f7e49623bf12cd3eb25747788343c3ec52e9d5f0
-3141cf7cdfed3667a65cbb106c9987cf6fd526d5 8a2d2a138d6d3d38bdb698efd3e2f847a7f9351c
-50a90ba0261f2f5304f094af89e1914b415dadcc d7f9149d5fe3247d74f316a4f1ac3049f9ac1ed0
-2751c4a3a118d8f77d3c403cd2792bdcb2a067b6 942e0af15ed2b3b03be6a47699b3ad77b5731ca4
-5839bb0010d5cfb15f3672092b2e7ad42707437c 4245b466960a7feb510a3cb04ead499f4eefbafa
-84b6c279726055e850a9c5f4cf7d21106e5c3b9b 2bbbfef9127437a1c74b40011c0a4179b697bd25
-517fab8a1f14a783a3c9650fc37ec6680d4c6282 a2ad1e9d96d549f88c7da7da69ed79669c923246
-a563f3605dcaaad9c007770b2750e5e49fce95ad 1333f090b9287bf9b4c5f80e9dc5a0ff8c8b1ed0
-6df58c86fcd97f338ea561830ca735ae02d29560 fa9e050b7776aa5856edf7c505cf30a86d63dfe9
-040c9106dd6bed567b3d79e89f061c5ee5514df6 fa9e050b7776aa5856edf7c505cf30a86d63dfe9
-06da32814e20eecf5b8ce421092bf5f0a729e87f f7eb1d40ab0870885c602d8fdd19390abf157a68
-b67721b8cf28f6dee9179fee7a4ba465eb355231 be582b50f6a6230c4cb4cd99ccdd5b754beb6ee9
-d2683328b81da252783060e616e5325076f03ae1 d8b76b01ed5cd2d5bb20723d1972fa7d0a88cb0c
-ed99663a90b738a816dd284d864060fb057ba975 00ad3b6d9ceb43ef630089d21d2c15930f47b769
-bb443dfacf961ca9fb1a3cc86bb5fb3bb372dac5 97c870a0e2339b8103471c50bf4297de1696de2e
-6608a4873d9348046e123458741ec5842f85aef5 70f1f1d1f8204ada3818c80e43756bdfffadbe18
-59d147a77446eb800a122a9ba91f153e67688ace 1896970e9cc84811b2d22d34880c701c8d862321
-230111249c1694483d71da5cb66cf541caf144b3 84e1494141697cf3be5fc7981b6ad76d89afa9b4
-d47cbdf382628df22866d9590186d08670be1a79 33b612d6be61f29987a4f2fbd57d53fb680c066f
-5d997b700b43be0d912da4fa2a5df9c7b26f44dc 113fe47f00d5db4a02c73acf137415a822b913f4
-274a3b7f6da9ebb2d9295662e60ebc81b0044158 df7c92c3146f0af1878ff4f8f76582f96ba174a9
-37ee6829fa00acfd29e4d6e22a54054433a556a9 138c76d7eb61379127d1a7bd59d27972aabc6537
-4fdf7594b68b1259a55b86729cc022f12ff87fa7 c6e6c0ba35c33fccc8ff5a61aa340e07e8d4a788
-b19099d227851e3c4594f2eaee53ddd8ac776d36 d127aebee409636952c04f267cf019aca467a130
-dc0282cfb0ba9dcc6fbc84f490c1209a1445613f 68dabeb86a95a913aed50f44f43e92c65d2416f6
-3983c45742bedde802a630e864e04410b62676c0 f4319333361e31d6a9df38e5430b2b1ad7871b35
-6d732860b0a4246dc2221a63faefc731e640abf5 aaaafa9b34220d9c96d1e81f38d58020e5f7bddd
-b100225b54767f02a3a5ec449f62d8bacc27a0d2 fbc136b2a5920847cfcc2643124ba669525164bb
-11940d9dd13d4c185f792d92acc1ccb1e0605f2b 29b9096aaedd98a70fcc2abaf983f222bcf3092b
-f6eba998245be8732d315039f5a75a69f8a88bde 5a273e08425a9f274c11c3b1a546b8895ab51629
-9452604d61c3b2541203a3d783dfe98de94cc2af a0fea8112b06d0774adfa57696e4f4f73944544b
-13febcc81bbfbd074a8a159f489d928c31f2c69b 1ab20b2ba56dbf292a1c45b6bc168e94c56c90d1
-3721523b27ab558d2fc839d7d73ea04a2a0d08cd 990f88d89e5703a8fc9000c0d2ad2cab4b048782
-4919db45899ab270a9ff46f09bca0df061e4757e 9eef4c187ccc8f83066ead5dea95fd180dcc16b0
-afb25c2b3a7735474768582d289bbb452366563b 338064f2769cded8c943a8371eac6674aa5efc06
-c7216af2e9cf45d32adbeab34216387297bebe0f 6906ddc7b50052d1c39aa51285767f5b3f5b86da
-3c45ed874c025fe24b41c51d38774f4b8dfe053f 9c0c963918ee925626039b56fdf504fd869b7471
-93be7bee74548184327775e5992fc03abd8ac927 6120c311b47b7b8516f22f2efecf90b37ffb6a12
-35c05f2f21a31fd1e4c06853b0dbb841707f5970 8edf3477ee3ea99ca305babcc98808d8ba8450a1
-bc19f7771e083a7628bfc0f8a78b0311103a0cf4 5ae7d1b50452d02f36080b8c705e7a56f948111b
-b0b42f2ba8af4e31936d3f07779b0d06dd6494b9 7be8aed40cafba0ba3bb687ff397ae8ffd038889
-2b833061717756fc428b1187f6f92cc323436b60 5fef7c27fbe0cd089549fddede145d53c52ae9f2
-7c0a578405cea370388c014f62978a938d2e4ca4 c836782c10cbea67889a21ee95424f5b11306b46
-485f358e5e3bf4fee8e13d4cb9b296c9a310b4f2 69711ce014a405e485e416a07673e635fbc1f18b
-892e187ff4fbba4bb64d9ff2b180d54c62ef1385 5cec5a9e51406f4b1580f5295b86906806ec721c
-04907e92feb5d92cf33ff0f0b8197f53eaf9d4f1 070239a3b2b91c991cbadb1eab42d301265061d5
-f0e1824231c90da5c0537dda77038334389c2f98 c1cdfd8193fd73fddf9f040fbdfa26bf680ae43d
-6d8ef5160042152059491de1d9230ea461111e59 1e547bf6cb7c71c34fc631284464e1fb79a0de65
-fc51e064f4ce74fb2a92afd0a698ec06710b870e 48d3b1db7e56c4cf6dc08ca53a1b53217e9bf6fe
-6bab663be936834a796df94c9e78d0089b90a795 a134b7f9eeebd128c9b733d3578f80af9a8e8d2f
-3bbd7235129cf1b5cf81a71694622441b8faf770 891cee730f7e1824517bd8b20204dedd32c588f4
-15516faa31b2074b2c0a66312bcbf158df87bca2 400b5d65b553580ff12566a2a59acb8caffb1d59
-15524f411a317162bb26c75fc77b4cb813c1223e 310529d717f4f982a6dfa2596922969f1750a52f
-79dc861434d88e75e329e1e9876ffc136776083f 80754af60f00b899b4e5ccb6a8a60bd4542f1cf9
-45d83cb496796ced02b1d6d6cbfa7ba95fe23fa5 df3b854845e1fa2749e81869c7ce3bccf363cbeb
-24a5b0405d0c3b8ee14c24fe0687e9f0f7d695b8 d09dbc2c1e0b0eb1f0713941d2d32113a24386db
-49b0c8f62cb811581c1b156915420929b59deea9 91e2de44294ea3c64f25265729a40e70d67678c8
-e28f30d5baff6e0d745a23aa6e4be503a29f53cf 63123ff5685eab09a057ccd1d4b131ffdd72cefa
-9032dcb95050eaeb9bfcdfff669dc58fe681248d a1d137db5c420ecac5482911da95875f4edcf72d
-ad0e90c54f9be9578cd7a2813664240fce7d7360 b2b593966e9ad82846846865e6de9c6c85dd2162
-2f2870c2bd4bc054f2c033c876f6195188884869 97dcd00b9c1f7a67e40835376ca2e19669a46315
-105028b1fdb39827eb294da85ee7d9c6b3e900df 7691b9d508a7f688086774effc5211a4a88aa60c
-3fc2a8e92f86b86df97908d59174359d3abe4c99 ffcb5a997ed028393997043444081f2b777c42c0
-5e7791652c0ccfdb2776a274f7988106e4a1838e b9b845fb58e009c19b54ffb2db488a73d3a5a8d2
-5474470e2009468436675317f81739e92a432724 99991d22a2f57a9ecb905095e51e422974374513
-421b70c5e85120d34a67902c31071c46cb4ec08a d4693e64fc47407c4c977aefba8a6c0eb3047f45
-61aa546fd5371273eec4c554d0b52f76cc14428f 799e2a5a8027455049ad2466f52083b24fc3096b
-a19a937e2ec72a0935639e57425f99130b7d2739 cfa648fe44414279fc40fd05c50b4768ea421b05
-b853318f0e1fe6246ec108a73c1ce5bead6a3323 63a03f34f7ae19f45268b3405b69158d9b3fc0f5
-8f64e191866b19ea2a083c85b84a927bee1853de c6d1495ec6f21691a1154ea3c873cab2bb7478d7
-ad28992790cbc8e2f13508c9f155588f788fa636 3478fe4ed8e3c4305885b849bd0006cbdf899a51
-7b5f614755198a8593e12435d1891e9c19c83cf4 ddd262d402153c6911ec8031eb44da98e685934d
-b24676c4797f68599bbf236a66baa94d8c056159 1b4945bebc564a50f95757fcdb9dcc24a516e695
-d4725717f9b6da59a60a43d350ef3c8d6fac317b 3aa19fc3a106f93749f737003aaf84abdbedc5cb
-b2ecc4592eeb0d2f6da9f748edddf7b110fb9a26 1c2209ae39410bc59780d9de4726d08093c4452a
-2e61b93397faec90293b8ab2a40e13e294d0cfb3 e81ef0bdfebeb0bd6b257d599d3a864d3f9650a6
-56d39139c7ff11e5537fc06071e6bb40059b0cb6 bd43ce83c18a37ff197877b9528780ad811a8e76
-022405e1e5bd54a89de1d03fd276a6b1f20472d1 20da0fa96aa5f75527a2404a5156c24b2e3bcd07
-31f123a059e3fb894b35c9b4c72b14c4a9dbd393 f1212bff1c560495aba972b8ffc3055b47ab670e
-c72c1ee4690ce16a1c647d0c6a54aedbcc650a8d aa4b8e3ee6a3977a5a4c2e38038eaf18974a5b27
-1f34aad5a0259fc4a8ae47323dd8db2f6cdc6503 e8b01e611e8a0638ce74aaad418005ae4464893a
-29461fc9363ee59b93abd8c693e1ee0ef0f2547d 0ae57cb2d2202714c6e2913e7a1a84b693bc0d2f
-ad6a2a8ba2f148f6bb9b68ef48b5445a144f60a0 ae8ab82c7aa0a6bb42891d8df35c0ff3d7b3f7a0
-7fb177294818be44d1d8f6ac697dcfdf9655b1f7 4f88d9b42f8bbbf18229152c2da9fef81b1b55a6
-b67e354647798d64e19528330d67ec04509cc0bc 5344d569e308de4f1371f52568c44e1ec6ff009e
-a220baa07f9742a31c3e253be6819d193805a390 eb19496ad5c6ca1ed0ea93d90cb7b45c975b401a
-5d8090d7899501e4cf42f9273736e54ffe939d80 8faff128eb2a8cf02c1f0d99275f54e7e40cc4ca
-b6456fa21251357f052374286a69e7dac9bb4b7d 8faff128eb2a8cf02c1f0d99275f54e7e40cc4ca
-e324c9239bda26e7806b951dc0a6a86308d8ae6a 6170174e41d0bc2486ef9bad4ec60509376784b9
-7f32a8b345e5eae78539a75f670c8d14802c9ae4 335e0c995ac8087fed3487709652d792fbd7c15c
-aa49c9817ba38040e45243184c190b84120d1c43 dff3cca8e64b19676be2680f269e83b31799b638
-4f86da6fb3cb5ab26cb1c07f68824aa3fdab075b 30360fcc78a8e63521f69c769d9f2239df18a039
-fa0499245c130e4b415e7d19c0434adb157ae9d5 30360fcc78a8e63521f69c769d9f2239df18a039
-1dc845af24e1ff9a5c99c064e846f08be0c0b1db 432463d7cb2fe87790113a55c1a11941f6dd4890
-17c2a0f8cb949af55355713cf901719d75c5a855 5b9a3a620b536239ebce07be0676578517a607de
-b806d9152c3def19eac99940bb9507df923dbb8e 5b9a3a620b536239ebce07be0676578517a607de
-6faeb686d9197785141c310b94f3b34c5a49c992 5b9a3a620b536239ebce07be0676578517a607de
-19b43c57235ab6ee9f83c99d279eb5e2ca2b4fef 0a27a212c631bbf2bdd5f04cf2c66566b2773a67
-59ed1e1656d99ea98e8f481fb90e55c21bd12db5 4ed68e9490afeebb8a4518b366f3362cd0f6d8fd
-a5fd74ccc3f648ca5268c6613ae7992c1f619f55 7ac15bfdbfb2cb34e32ee1722a4453c8d736193f
-4dea267c4e458de01cc4a3050e55e7c7bc38c4ac 25f04c12f96eb69db62643cdc0fe9c7888e5f2a5
-f54ff394236e424c55f81e9825dfee63cbeac03d cdb568a81e28acdb03a8cb6927cc75d4d065e172
-da7c6bbbe379f1b3a1d7ee1e3af9c16d2c20db54 96be263370445110a2f0509d1feee52cc85046e6
-b054839fccac1ec25f0e4f43a5a2b559c5289dbd d250adc45fc0cd3294a7c885605881cf7707fd3a
-3e5c2692603aeb2baa66abdeb009fb9092dba747 7a5bc492bb1c1ef248d818ff1bc22346ad916c21
-dd59327b760bee3a84e54a5fbcbdc2d0c5b405d4 b800d8a6e7f31b8e6d9fd919916fb9b5f168f434
-794dc933276a19a7034d06f9770b67a176bfb221 c815605db9a8629cf0cfef574ada2e29edefceea
-6b1d9781fb7acd48b6d8f4372178eb7363acb455 4fbddb71830ef49097221fbe7612a42947c00c1d
-2efbea122a4063a25cd685b224fca94ab825a7b7 b83ec574d5270fe3af1e11c154f2e617056026f8
-8efc2e775c9ec6939518746a6e474092d6db787e 5c9e7e4f003ebf5b9dad2054ae2c8a0f6701450d
-418aaecebfa8d12c6f0ea6b273a35d5615436bb9 f54262241d53bb9546ad9c025517066036dc3d5e
-5e8db1ca0ef765e73c80e5ef4bceea2d215b4543 380706d2c1d3015cbfb53c3f25e62274a06913bb
-996bb8ac913132521578a9d1895da2d018a5e403 239c2fc0a06d1b7e97a9821c9179f978969af834
-ccad6525a9335259e43b17dc42ed2c246ed2cc3e f7e03447b7b827e8b6b02099aa27c6d64d44c63a
-b162724ba06a233a414c78a0006e8f028de2efb0 6383c843e5ba2f5b4c60db6eae8b4f07ccde8039
-4128487059bf4fd9028611d74b4c0ffc85e86d2c da72882f0ba477c269340ccb445e964e591e3034
-6b3a7815a8c9eff576b7c5c1ea0795025a012605 69027752d07f50730a262ed2ef588d4ed014dfc4
-79f4c3fcb2982aad59d456a99e2ad792947403ab 107808066473c609665400aacee9126efeeb00a2
-a6214d1c80b6dfa2af1cf891aee3571d946a278b eefc33bae89d4fd9b73252128e57939782e04b5e
-ea9583439d39404673d6ee6b38e4359db678a334 f2b77c6bc24cff70ea5a3a666da218ccaac79267
-91c41dcb1cdf9df3822640504ceaf4c523f5e351 6b795aa50fc434bd859077a3d6e46f7b4e8ae486
-f507ea5f3277d711b0efa08c65b16bdab1fc9a19 5d59850bb4a276e9f1662ace6a1ddf93ae9bf97e
-8c3760d7cff2f6dafc9d8a8f42aeac05324e1d2e 36274dc7f53c658f9642b7f86a2668e0b6c581f6
-3e24ca75b73803ec02623c5417aa3e3eb5c25152 41f5245ef846f25d2c53744d31c3f630cff59120
-47a57581640881985ada038651d6bbb9cd7e66c8 4896f6642c076695f443d53b1999a04c55e02ee2
-9ad230d14078ce8188eaeac4e33c47efb85aed42 6787b1c68b37f021d1ebc22dc57eb2e5c4795fb6
-15a1a53361f8ce9410868a04df3aac9db2021512 343788f67706d92a76f880a31e3947199096d33b
-15d7e1527cb0b852dd5e368d5ee902900a863c8e 355747fdc3b8b13bb54c2b6fdd401644d05942e5
-95a52950b6d12978563e57992d91e6aaa2cc5ed0 4c8df9768e06543ab95a13bb990e7cd71f47f3c0
-8dde9f72df7555cd8ded188ea5d608c3c79cfd98 cd015c480d64d078fe23235da7ffd1be23a1f89c
-29410f2c242a9c5b99cc5d55160f1985c0717cb8 c3d8b1ef5dfa88c27f10b38539b3f6fd2a1f284c
-662a36bc5a2bbf136d6a5c679b816644a92905ff c3d8b1ef5dfa88c27f10b38539b3f6fd2a1f284c
-961aa61f0d50208bc81caed2e688769ca99c7e3a a1f0c95011d7104b44dc7975dd0d2ba98851736e
-41b4b7310fa27f46ffe783866afb8f046fc839ad d5f168b6cfcbd0e527e882a8e9769ddd9acd6e37
-6907a3cea4f936bfbec914a4f0e8c76c38a5a666 0246002d0962e6afc573613138e3ae2a546d67c0
-659f1c9171cfe46931f58ead3f23c1bcb4b0ad1d 3720e90c445d1d68298abdca585692f8b81b3c13
-76351f3b21123658ad161b6873b72d3931d7c81b 8b2656bcfae053314638ad23bd4929e4439c8da7
-5de7e89c7ea968d032be9ddf3dfcbe1255749c0b 7facd1a529e0701c5024e448011e2759f972834f
-1293dd59ff6ea1fcaa550d0f22b696ccd258ff7d 3c21a8253820981c835564ad66ceeeac75a434f7
-607b2b7f1b45fa67bae586f472a90a3e59a69340 4da61f34770d87731270a55b6da79146ca042f7c
-8987aefb8b9189e2da338d95f74e0c012477bc15 e381f15991460caeb767ff80e51d45cfa7a28e07
-f9bc4f349ff715416bf0295e9613ae67e767b33a 9b249b733cfbd8186322c6f82be787e4237eb39b
-957971f8fcfbdfa6dbb60961c7b94abf424d76ae 0688149cc4a94f3ceff683e98fbec88eeab60a5b
-2f7e09ff49aef4b4e6abe4c1354f95f0621bb3de 2fb1819f5aa00c3d12e82c4c38a7da6d8f1bfa13
-7dfdee2d265d15e1f3326d397aeebb2a9e9a4242 4fce72874d8a41f16dfcbd62165b766490b3e1fc
-cccdc7c50a2030140c2a612981a58f5cff8c1419 e28d49296766ee52a4dc10edc02958ad3e06477e
-4f5058b9b29438bdc6d4d15b42b9f6b6355630d7 ec0dbf8f050a689af284539f8a5e3d76a542de21
-71bf383e279e9dc805755c8592867ba2a0c2a8c4 6f31764691aa20b43c1a95c8980c82e2e8d3059d
-d47ebba0a038818876525bfa19e064b7b639d402 6f31764691aa20b43c1a95c8980c82e2e8d3059d
-8e19c9c5da5cc1dd0528d51002345d3fd09ad740 9b7264215b4707f49dc59dc8ec6bc90ee05959c9
-fbb83e918a21406665d4e117aafa9c6c5a6fd123 f04172856da4ad1131c1f0118a3a82de47f7a6c2
-acade9a19aba3780c07528ca92044b4843fe06e7 2b91cdd967dc9f65eed8f5e5785476938db88f96
-48a9afdcf7a55a32463aff1bd5f8eb29e27311e2 224de9dfdf1b94529a681e9e20b53fa479bacd00
-75b1be129cdf4e2f6f18ae36f83c914d175fa756 e74b335f6ae9f6cf80db092ec81aa26da16a976b
-b96252451557e2a5fb5c8a28d8619927750e51f8 cf619524e85a75182ef62e7349c5c775cec0524e
-09b3bde40f2796a7f17576745acc565b29bab178 0ec634cce0e02ebe474a22c0512845406eb4ee23
-52d34b444f547e11dceb3048c77ce0c3a7bc20c6 87349233df00d00237b1ab62afeb202574c5ccba
-d1ea6bcebe60bf8dbac2f8d991874bb46f58118f 944854ef3621ae02360310ca70807825e98c3dfa
-055a1d77ff7bd9bb0c39bd7101c52e9faf83cab3 36e302b775c38fcd8474229f4d8abdd546f90bb0
-56a29564b813bdcf851b425a0e066d0ca948711a b69c39bce07f1244d5a97b713f28f9847658db18
-3594a8e26046579acb5f410ac6f2e0453177de6b 4c5eeeeac455416a741d1074006b9c772da7d099
-8fc8729ee09a38a1ae71eaaba59eae8f992d75ba e64746fabe6dac65ae16bcdeb09ae3faacb078da
-caab111fc92e88edf26a8b3e686b7bd5cade77d4 7f992425d7c71be4309b7438fd46a0b69f95d885
-db900a77b1c814b51d1e7db4ef3f0227a8c15a60 c7f6d3f87f826fe9320ef3392ee8656c8c06b1c6
-50c96f95ea3af235d71639f04dad41927b0bd8a0 2780a0395a30fd95e22e5043c902734ceecfb335
-f7950697107904c6fe8fd43812d72ae61ab84ebe 28a51e5ae9cdf0f81466b2992d52e60a804c1382
-48a1bd3b71d887777667af3fcf21710a1878c1ec 28a51e5ae9cdf0f81466b2992d52e60a804c1382
-9821d05aa833c17b8944fb68edb66d00f67c2e27 28a51e5ae9cdf0f81466b2992d52e60a804c1382
-a589070d9b8765fd4d9c4adf70e7e7c467cb3e75 8fd3a3bd9a0624d22ac926d78f2251f0bc82f710
-a9484065395c0a76a9ec46d60204a7b506131ab6 8fd3a3bd9a0624d22ac926d78f2251f0bc82f710
-328014fb59548e28a59d77341f57ef18216112a9 f4ac1a265dfbf04882bb2c0d29cf9ffdfe8dc70f
-8cdd08b5eb68f495f21a4d868700f1a45df438aa dd55561c60a00ce646a3f38c7c716be1d6b95555
-15283ca8674ddfb5ec907dd317b9e3b8234b174e dd55561c60a00ce646a3f38c7c716be1d6b95555
-e6e8c8a95d7cd1b467874c8158274d761ee3f7c4 39768dacd8c9dbfacdd139583fd4c83bad43be35
-09053ca87912c0245d6cd487656d3184f7bf8dd5 39768dacd8c9dbfacdd139583fd4c83bad43be35
-178af1253918beb0f7013da562cd3a50f70d1677 7976c7651f8dabca73afd8a4da0a0f1467219878
-00c63dc07d38adcdf2fac1cf06bf672fc1e4e6a7 df5d221c2d9ef5f37da26671e747bc38edc1e4a1
-564d4708c9faaa7049dbb0d476a92385880a6dcd af609e8005149c7334a560423374c49819acc4e5
-e525cc7f366e7368eeb28318fd951a896e46267a 71d6aec59a523721bb99a71c50d692f1c7c979ef
-a6faf9008f77b71ee9b04ac6fa0e2e7cefe72806 7aa5af1d60f7a5e66059503fc1582473caa28959
-0b4cd55fcce6f1f4314047e27f97ba4c88377b1e 71d6aec59a523721bb99a71c50d692f1c7c979ef
-c389b0de4b1f3452e296fef3ec041ddf955b6ad5 7aa5af1d60f7a5e66059503fc1582473caa28959
-db750354eb372acc9d5f3469d2d47b9923afb708 086c9ad3f1611c557df951709077691050580c2b
-91c670bfd10fd1d5fa8fe5620384a4996ee04e9d 7d6f26816b1878cb55207e227948c012e6d7cbdd
-4c8152ebb6b18aa6c3171c681f8a27e62f6be002 638fc7bd3b61d86bb1feb39eafd995bab4043a89
-94ea6cdbeaae8d702edb3a8b11f356c62ac20011 78a4a84ab11833fbaba69bb40f2534b118e9aa0d
-701caf7190a1f612e975951afbb56e1d85cf6fdb 426f7220d5cc675932c385ff4b1113985882d068
-8e8367b3e5a0455f5d530362b448cdb9e9ac74d2 bccbdc44bbd3fd9dff2a1d382b1940d097b59862
-26f8b6c8e690117e0087683942750c7a95861fa3 7fdba71b50a3c591da35810157f9b57b142bed50
-2b68946eb77d0887aaf8e7bcef8d7416acac77c7 27edf629ecb64b746babbd6e7308101818566f2d
-1dc7fd95f1c3b6b279169febc9cd4e1b52d7bdc5 cd6e18e828fbffe37a88e7b98ee07fe5d216fcbe
-7001c7e212c3d1875a989679e68faed27fcb1f21 34f9f41e463e2e65946962a1484512662cd20873
-424dcd7680998df20bf1d9ae8c3047b0257aec32 316d3c8b5bd4d269a9f18d195807ea5126559783
-69fdd7267838f346d6467a6f75b3af3fb12ef75d fb28691e0487432b84d7726a4a58d574ec2d4417
-cbc9439ce0c46f435b8848feeb30889a62c8d15b 744c7dd6855d7e93f7bc49b9abfe84f9dae4fcbc
-df383b5a9b4547bbd3130a26ae8826940e7a87e6 fbcdde48a97705186b27c841f3aee81813338531
-a24e57f1857200ca3ff3633ab3136d66a801404f c5c3a721a42de7e468880b4a48923e8f8212bb36
-b88a58ad1258f5df7cadb42f081e9ff8c0e72a55 7013587efa9a8637394566bbac9c5d537f8d85cc
-9a900120a16b72a3f8e643e043201f88af1d06a0 f947b7d6f9f9b4eb4b09a0bb2f70396b071b7f92
-928f4fe1d6d793b8e43522558b21216906f8ce27 5c317e77763ba54c4dfeb37589b8f440fa753b1d
-8f09d735e4af06a8c70e2918c3d1f4f9d094e039 97476a4f05cf841d9e35d87bea86e68de4d94751
-54c054f80d3973d599ece0736b9f6fda28b53559 c3cb5ad0dd9d5e0887572b89151ec920f2a13d8b
-99a5e6f085584134dbd46f54247cccae0f30667d bd6f4416889462e918f58671110716b453c67a7d
-13bb9b169821328aeea580ebe350fe4087dbf88a 4982d2767091fb38e28b4516fe0f67f22d3b7a08
-9366fa3848fb2ac2354b70d82d71fafb1a1dc3da f670c0d2af715c93c92f61953b93dcd1fbf4e907
-ea1a96f4501b3ec403c7eb0e87191d053b70762f e9ebc15b0ca53ef0ec4666f1ab41157d963949cd
-42c14aee8e3c29edb1934143e7efb2bca1d97238 bd6f4416889462e918f58671110716b453c67a7d
-2e059db2a33cfc6954d13f7e4681e7f99fcddbcd e9ebc15b0ca53ef0ec4666f1ab41157d963949cd
-6a569012a5d489af9f54e214d2106f0227a4d261 24e3594ee9da20cefbbd6c9ce3b752245b69359b
-a1813322082648d63f1ccef7acd5c9df4729af9c 12c5e164547449c074ab3554c703e4160ddedd5b
-395ee1714aaa9f76c0476a9e9e2af2d0a3480026 165606d6400df74022e62ebff103431a0ec152b0
-3fad545fa30495e56b19b5c807bdd36417774896 bd1c66cfe6f4cbaf58dbaa32bbe62afffe8e3040
-f9345dc302aff7681abaaf3e006308b915df5c75 34222821fa922db9a15bd9899e0082b57da29565
-70dd28bc822a03d9b3935acb16c93deeb2ae60cd 40047560b4abdc0b96b239e5972195a7ed8b9c0f
-c2174d53ce1116e1a74195dc43859da9fb36113c 72e6fe8dee59becf9daf8bf37ae43a564c7eabfc
-82432a7d536b96c45b316cf5bbf98b9fb805851b bb0d7ec7bca1048b96f0ab21db5635e25666a62a
-ef4c32d8ae3f5c3d34fc3ccb26ef9d21644d2731 007bca63e3a67a7ad34bf73f4122bac8778ee442
-3f36b11ab228da396a73b18968bd980c5bbbdb33 ac5c93e27eca34f9002d454bd912d217d3a9b71d
-2fece38ec329bc3bf6fad8a2b830a776e1f7c747 a6ade0a8441ccb34d0cd51c672c4bbab03a3413b
-77efd91b996c139bd1374d2b9a82ac40f3f44e2d 45c37e3e1421fea901418e9143f8026ddc38c889
-c52794a641a070251929336a09924c5730463c12 5e6897ba67acf4f398803c9983e07f93f61a1696
-c3ce69a9bba9a65c87a84333a4d84664a1194584 4d586cc384b0fb213d28dff59481b4241a6455cc
-5b16c86286d07d305623f389c6003d8c8fce71ed 3c065192beedf385edda955ce42083fcaaf899c5
-31d2483fbd8132e5f9fe7c74a18a395f55c25ffa f4df6d7d948eaf36591c46f5d0f5968e16a2ae92
-5fb0976c304b020635efae8146565958364268d0 319f6dfc5e5edecafc5a30bc88aa3c05a2fb8c84
-d589daa4ad43c342fcce0e2324f7d1f2a117af32 67d605f869c4cb9261f17f61782c6a18e0ac2e0e
-952b52108152d27d68b99a7e1f2767bb35f53cb5 520d83a0b025e94d7fcaa8520bd7abb120d8e934
-157f7fe9c2945023493eae51e58b3639623c99c3 520d83a0b025e94d7fcaa8520bd7abb120d8e934
-51774d9f3728e1a379e10c25a6beb763521e486e 7aa5af1d60f7a5e66059503fc1582473caa28959
-68b15e626ac4d0897e571337068ce1ea44b305be 520d83a0b025e94d7fcaa8520bd7abb120d8e934
-3344b99f85da483478cf66ac8441bc0c17b9407e 639de2dc54c9a7f3f010569126714e08d8fd97d6
-37062bccf8ebc01633714ec7fd2bdc41f92f6f60 639de2dc54c9a7f3f010569126714e08d8fd97d6
-2e26796b090f42216e0574cbab19723f5c3e0b6f 5ae311eb4550879a95edecd60ae4c71bfbae2d64
-1eb3783d47360dc8249dc3fa3e19de2cfe93c043 3bc96e72384508ec23f8fb857415d1458c8da9b3
-894e32a8f90377d335cd88b316a39a08c8a4f083 13f0ac4bf0a401e67707154454871200338b1481
-75356e768ebbeeb72a8a1f10a2443ad98cac92ea bccc457455441f6bd021681307cc3865bc92b867
-40615c0113c3f3e215520701a7bb1dbc103fa552 1591ff32051807af639b0af3b9c86ea03f304597
-c8aa141aab3c5ce8fe1541836cbfd879b5d23185 ffd6aae6586a24d682342635e52664cc206879ea
-89c72eb8ccb2e39e53b953c680e6a68df4a0dd40 3dfa6501dd5a35f065dce9a6098537f15399157a
-c62e564b7630a2df88f1898ff4128eaff9d9d865 1fc06c51ec10a7d2881dd1ccf116246b182829cc
-ee86f71563eb4dacb633c52c77a36f9d2a9a4f3b 5f61ed58fe885f126cca48df3281499205e0f1cc
-3af7936295553e137fb8fb4eb8e3c77c00ba8623 a0b8c7e853953ada1c2396b3ab2db8bca34ad762
-c6da9077de6638bebeba2a30058b388b8d6d4275 fa7729c377ccd02536b1884697a77e41437219f0
-50b37c2568aa9429bc6f52885e4af2d1a598294e fd48812b7a367ac223175b52df028f60fe39f412
-9992652f25eb4a3cb6072c8f1aa7ac6ccc12582d aa57fe47305cb8329d57c7b8f82ccb597823aef9
-0b94eae66a239b2e63e965c0802bd4b095a64c61 7cadef10dae4986cd5ceac913460e6eadb4d58d2
-cf58e4361922e47f8e28836922088e9a1d9c01fe f99c87018a900eaa1e470deb37251ae37a355880
-3a2f459e6454116d3f84804f5581b67007f52e50 01c4a4d631cea787b732d80a05a49e917cb01f22
-bf913f872269e53ab20be003529de34c13848ab5 c7ff1122a23c001f5722414d9724e666e7cf9c5e
-ce4e89d54c8c9f3dbc7ec5ebd97af6edaf1ac29d bd937f5f148c3f07c26b1b34cbbb055b4655c299
-9724eca8c4c8929a0423a0b1fc48dade9130d31a 531281afc1c0162cd178d22b5f05b56e7aa8e319
-700697ce5cc78eb05bcaeb5d9a03f49a6f4203e9 10a75d41345c971b3eea4d630c60636acc3f3db4
-0b7429a970214616b6701de5ab1464a45c048bfb 9612f4eb8e9a79c6e8f6d41c3117c68f49db0427
-e2a859c5c735ddcd528f9631d07070702910bc8a a5de18c1f68e885d2f05210a9093bd7f6812c087
-2dec1fdba11eee9c1cab4e350c33293b76c7622e 7709919f31a99d2c2acd67f3a2527887709d944e
-c1a240cea1a649a5bfd4b6578d56d88510acdcb5 3148b59dc0f808cb1c2a815f2c18ab86e6ea6b7a
-9ca7b6900a96fb78d92d0bac573c1c47ebc31e5b 6b5683165f537cbe4dcca7664f402550f868fb3e
-8f7b1fe504aa2614d5f84fa5effeb70bf435c007 2bf7df6f31f478026f3fbeacbe08b1d0b131f441
-12320551603f7239cf2ad2c88f118f3ae881423f 1b19557ee39bcc8c563247a41bd3fbc6223baeef
-869fa6c67338069932667a0bd4dcf99251721798 7dabfc26944eb0d5dd1633addf17cefffb5ed48b
-99c26b5782bb5aa2bfa0df46f040d742d7464d6c ab930564dfdd85e31cc27677398f571e778c8606
-fcba68ae013eaa5ec47a3d0b064314f453fc1fd4 a8063f4f0e05fa5c9910f3d995c997b748a41e18
-d5831c2892249c89059be9ccb9cc2ffc7cb01a9e 04249204ec3942c17b382223f011c8c492014235
-c37f777389cd3e25784dfce5c04c4617795fc8a0 ce3ce6e263686e72e07b65083830ceae31ede3c0
-42b63e9a0eba0375d6b70247de5e1a3992a1b35f 3c48509550229863f79ebf50ecd4a47802895cf5
-fc21644ea29ca7bcb7040d234bbacc12126bdb1a 1208f5c9f1a0b2dfa450066d17bcdfacf4f9517c
-29d950988de96514d862ee3cb42cbe0add5d52ed 9f5e76c8d37afa1e1d248a036385dff48f0952a5
-170ed6a590de49ad0f265e8e40b9ff7abaf33a06 270bba1c392ba555d979a86ff79febb3dcd76469
-6dda7ad838a9d4663d9801f1104d057dbe0c8a2a bc4e5dab29dd3452655b8c2fc4bee9dd83d80d02
-686c941558620c4c222fb2b691b816a800055953 39421d16554b798581885cc45a8e6f177aa08168
-20522fb3b990d8cddfc3da7585a96922415c6d7b 94cb02016b1ee04e5d1c84e0259282008c78082c
-a3dca52ee037eece4ba619e134e8aecafab4106c 9f8f869354690541f732d19577e7e2d446587c0a
-70b22fce75f7849f86e1cf559bdd9aa0bb3ce2b4 5ab3d2339c1007625fe5af30c32e09bdd0726059
-ef5d16c99dffd309605b491f36a9ecc5d7116796 5eff5060ba90d2b22940290104249e67ce067907
-d6602de06e43f1e6b4eb01b56adb12aeb3c7e63f 46704c5beaac69762e8fe61ffee25c87e7aceb28
-618ff1c5ae6fa1b45139cd566981b7a15f457a78 2e29b85e7fc2e1bda687027fcf42592644ace629
-c033f927e49bd31358824cb49692e3bf9b11ad28 f25dde3250536abd774daa14214c9faf801d0b2b
-43b98426e203b69f19028a179b4dbcc5ff752512 b9f2730cbaca785cc16cd5573af2bef6274c234c
-ff6bc7146271dbc7be09f99bbe4396965ca8e083 1c9bbfa3a8780d653f724cf6382067f0e1f43e64
-fe82a488d208d6130b84f3725b496110f8c6ac70 6aa49801707b55c29cd38035710848388985ab97
-85e43c5d2622ad1047f94162a4dac8190fdd7cf5 d7381dd56213ece4c0b389047eb6d13e01eb5dcf
-a16ce75c1b241c261ddb2f838070166278dfd3fe 2031f558235a740197971af72124a748bb63caf8
-f1127306469ebd1cba45d88a6ca09040e41c06bb 39b308b56d527bab52e89ff800db6153fd9df348
-703863cba04364e79ce497eea733a95a0d4c41e8 236adb5f52ab748fc195e6c2b07fc7e5527af2f1
-36d2509389ae50ea0d19f6f041dab9ee554cbeea 3c4a551eef7aeaf81355c4a4205bf3e8e3b80f3b
-8a5d8949a7f5a28ff3bebc0be6530dab92e7a247 74257b525df78e4452dd78db3d7dbeac796b9f99
-d3d96210ef4db6a4def7699234ac2161545d77b1 6bc91328a07101dc574ef91484b5b9a898d31771
-4123706b3ebeffbea418185f95ee8d63db4ff876 2e43cf1f1d071e58b28154c953486a5d7b07b615
-619495be98f7a21695dfb85e26c38ed652107864 362fb169110d241e4d6f1cd33202b94bdc63e8b2
-720e7732add6507cc0473152e98eb807d18dd8c7 f1f1778a41365b3deedce46cfe87628bd52e4516
-f8b0212250985691f4fc569fa9838cbbebc67779 dcc2c83dd8ff8a4e8a0b2013ced8ae797e880889
-c127687e7df0819b3c0b29bd400a6bec6b8aeb5b 3dd5ac22f123370b6b1d27961e3894451ff229d3
-8242f29c8d68e6b416c5020797f7e4c802c8132b 4e9ac5a58c830f687bf89faf30f6110661d8bd1b
-6b3612e3a10d955b91f5b3cb8db14ce5b2203646 cfc4369a4c268c46ba10a304b7fe54d704136818
-99341f3a39a5b24a8afd55c664785d67514c0017 0fb9ff161c49ee70ad7fc88e1e21b3acb4e0b4a5
-54d67eac7b8c8220081d22634f3add3850498ebf 85bd6add18fb3fb4be4b3cac4911bc911b68496d
-2052c05449d1b4d785ba3f710eb6719d0c1331ec 4944ff4abc014016b0f66e9016360718c9b7d374
-5bc483e7f3b905c4a1df63d2192359f943a686be b4d30ab8dfc13160e048c06c9dd2e5c373125057
-310ccbef8b51d1b42f171c42bcbd6af2834bc43d 89477b6725b8aae624a0a8e1283a849319e9c07e
-658d958057307f21d0e583037607b2f14c94c065 3003a9502f7e716fea9765faf601e08ffb8b5e3a
-161c020cc6b8dbb49b207e373f535b4a04df741a 3d5a77d30ed95184649ba46059769052d7d2a04d
-dde4f23ea82bc4e96240a78b0dbf1c34c1f9ac1f 7bc1fc0e1b49ccbd126cfec24ae1e307b0b21e1a
-09a920ee85aa2392d68c0a71b817aa330db7b867 c63f2367fea8d54fc45aa537e601e7590b5fcd84
-aab63a422109fb488666501c573c674d20b18e84 50b2467f68074fd759e9bfe214c6bf7ace572cc3
-bed1db50ef60203d2005e72eff9e900c79810fac 0037e3a698228dfae8f56f42570da5a61b335a9c
-bfafe9cdf33a153cc030e6820564c054f4bb48b7 fb0f029a57b67fe587b5ca812f392eff87998bda
-f0931dcb0481a7bbe6ffa788c41d65b418be83e3 6f793500420edaaa16494b71c9aacfdc6d168bc2
-f9c0162d553ad293552ba27daf4a3d543c02f78c b4c2a101be40fb6da004f7831d3334f292e4566c
-3c7d05a40708f11252f37e5dd840d45edd2a7a1c bf3db9db7da3a8592d3338b107039c3e69114f51
-3f3d943086d543dfbe34fbdeee56b014885d7376 72aebba255b400b7d6fa60678dac1afd396c4e1d
-27c264b61844a6e920acf0f3124f7fdf5e8eb28c b480bbdc0fe4ea859c189fcb9b96efaf6ea66a6c
-6c08c42cef871974a4aacd32f61e6be88d81a7d3 f8ea15026db8871395d11668f6348d7d08d9da34
-86e5a28a155b64521a397f13d50143143d5c8f9d 6b012687d0097b683f3bb195a63f0331ac70c977
-9814d241fc2ef8fdfdd56c0e0d6889e578b3c7c0 3209486644649157d541433b97729a388cc45807
-814f2fabc4474f725b3421923325d00356f90a89 3209486644649157d541433b97729a388cc45807
-15a6091dda0104d758ddcbfc57793c5f49426f60 851cb3ab58fbd47ab9bbb22ec7799de5373120f1
-fd28639b9807d1ac76d1627ff92fe95b99e110be b65b42e99fd16799a5968e755b3d56bf2cead10e
-5398e4c47e0cd795b20490a740a95e52cc391881 b65b42e99fd16799a5968e755b3d56bf2cead10e
-98a98541f121c35812fecacc17276699112dca0e 80e9bf1388c80d71e25a636fe2a36f5fdb9463c7
-4eff5bf4e23f7cb423f63517a8392e1f8b95c60f e8c23cda11653076c31d8ae31887c79da99572c3
-d1a0ab5d186eb4453aec50afe51c0a4b3aa452da 1f0b3ae1170965b0d932aec16e85309de3aeb148
-4fe98e3ebf888d3cc805fdfe12e86a5407b7073d 2f1b2901d280785eb4a61c7e4c75851c577b424c
-7ccb5d13f288e92a8d80cdaa302eaddeae98f9cc f4938c8dd4fe78ba4c68722815a839ea7c2edaa6
-96531db43dacf5e2544ae36ac6c0116ff16af98c e9605707f6597d75970ae5dc2fc668f1162d2896
-8406c59bf83a69849585d86af783267190ddb928 62bcf2bec17f31ce1c1dc6a8873410e0174a6df5
-826c4dd81bc2266d6650c302cac7be3be88c082b 28b195e85b430389c86d89cdd674b8150fcb7840
-a79878a635c1cc4d4f8628536430ac4aa3dc024d 33604b9e555ed4b191b770e9cf4464aff0c1dd92
-4c9f1e231a292ae64489b5a7d4bdb736ace8ad50 9df5cdeca138a1a1efff58eca1e835de959b714b
-156496ce7d3f902ec857ba73b49d0aa9d0e5a192 145d18c3cb77b27ab746c5c59e7d6c14a7040585
-edd9e62ba7a713b0b1450567d7563931c279c9ac 54125b1a375a18750ad606e6ebf38c78a3a54570
-0d7d6e4bd2f8cd56dde540bc39185fe5bf40ee7f ba52f0566063abddfc3a76bad4e2a341f8b747f9
-f5c4dfebaf0a5c5e4d538b39bb70ab1eff1f60ac 8e36c35ef74115cf7aaefd64014dfc140b2f4270
-6622a96a40567d61cc30c6bacc7f02fa6b29eaf7 920b4519af323f60e3e6ecf4bec8479f9ed3ec5e
-8cb44d1ba39d2c013357091139d7eae6e357fbbc bafa417328633f8dce4b3275ee485abc0eb7c52d
-0c2b81ff1b091cc0d0afc91ef5ee65d9e387db88 735665339da0b3d3876fadb2ee6ee25fbede7b31
-66cd1d920763900ffd0126cf85568a7914da2aa0 f45b88f5ebde3c5f3228e397216ed5af519fcfc7
-2ffba672ee71d6c3deac690790c783d41e2ac1aa e5c98bcfe874363877102a75d61deb0d4f85383f
-bd88123873ae652ec145c8b5acff3f9088d99c19 57be5f25168bd8813de8cd844fadb33ba97cfeda
-01b26ac9a7bc538313fa00187cc652a5ac957a19 568a12c89c7f1b487da3d228221341b393dcd67c
-35004695d34889ea5863d928760f9f8528710d1d 4230395b4787a46c94a72fbaecdcd03de738456c
-e39bbfdddc2360ab78dcd656c46f2e39a4589f9a bdcf79bcdbfff4471d38e15c39284c454b98de74
-02ed8758a752293b6f3a8e917a04e795c6f3074f e4647d4c97fd9debb739fb703f7ecf0b13292a52
-74215d854057a5f6d263ea14bae1517f8a362801 e4647d4c97fd9debb739fb703f7ecf0b13292a52
-368d629477159f3dae204df270159ea6d0782fc2 b3b0ab98f2a952345f240d473cc062f6ea9407d2
-dbaeb80991517f82b8b2c56003cfbac64639e649 483edf9eda38adecdd26e35fbc6cefc4b96d0a58
-0d74910e027a114c1ac117da4862e4d5a4d3c95a defcdb079482acaa1dd4e73b42f040468607b814
-733dd2841131329bb288cc1430c8ff381f7cf5d5 4db44e8bc4c91e9e4326c69de226ebc22a257c21
-3c693974e5cd55c87ca3a08b9272d37b3175d342 fe6a5859381bf06699ca0c3b6c30c6c70e40471f
-1fb627f653bc5d7d98f019095f17ccddc66c3c87 33013b242af7285af6edc4dd76605e29811f8cf7
-dac113bd31dda1aa9037b7245885908bbfedfc32 19ad46d1e4311eb084f1228a1f034452659ee8b6
-5d84974c5437823af3757ec190f730ea235c0b02 a4c8dfd630d7ce34fa2de505cb9576d227931ebf
-ef09d91c0572536ff73d5f734ddaebd9040975eb 7ed157cc91b1f34e3b9b1ec94cea490162ab858d
-4c2e25e5358b0010b77ad96399064eebb9d26a74 5cf3122bda2b163a2396604b4909aae1884d36c0
-73cdb646702791e29b49f1c1d06d0832a96cfe48 13976b7e4bf8ebacc1a1427e4e230b6fe133286d
-e236532391aed1fd6c3c2584b41beed6cdc66955 3c2e0addcaef29891a48dfb69050e0d729cf5805
-3e1a59d6243428e9cf39e56ee748c0aa01d4ff4f 417ad5b458ccb01ff2ef5348558686f4be116ebd
-1f8e1e73f9f4e4e6c913a6f009530d220f030044 a47dbdde396289157bc5f91fe3ddaaf7d8b89498
-de2c81b0fa4763cc455c6034f254248697122968 4478ec0783f55de19937cb83cf64112c36ce68d7
-a1ae74cf23e4622f394b3cd9d5ca2c1270132f4c 0b9fd1ed8e79813f2e8247c67ef0ce87588f6e4d
-34260e746e589a4ed45c30f08c398f694f673cd6 0b9fd1ed8e79813f2e8247c67ef0ce87588f6e4d
-48399e7cd729b4cf5e007577c98c2cb8f018a645 d7be0594045381e5fdf80ca476752f18fa2a566d
-f66b39d48bdb612936ea29148d909bc5511ed281 5d6f616d43f81e559d96f578e9318595bfc889b1
-21ac84ac895e659790d5b76120f853bdf7ac952f 4403215ed1f671082d430f78756cbad9e21a17cc
-2fc6eb694ffbdf9cc58d6dd353ed10b1519bd02c 4e8351fb2436763f1b857b8bddbb99c2e8f48cb2
-a7e1dd0c7cdff28649a4a4f1be28b893b433f2f0 14956319bd62547b26f5c6638c59648816af0f9c
-c98a9d7154333a5431ca889474988565f78a2763 649fea464113fbc757d73e661dd61278bcde22a0
-8d838def25f8c506e1e943388bd688d8c7d50f9b 8919b700985c63a369f7f094fc2090b96202c35d
-bb93d10c51558e7fe3765c16b07fa9a57c4474b7 da411aa10796ac137228295487e0cf61271952af
-9fb377faa426b78b12d7fb15ca5ed6664cff4f11 0430b993b28a0f64799d796df38082cfbc50dba1
-e429e83b8b70672ce2b7cc6b06ff8ae274996cb2 a56977fc8a1c778cb7a4c25c2f17014b49d4b454
-ebe5df15774be65cba7999871b6e66ec087bcbaf 23bb3317da992a97d2c0859902b659ec27156258
-6d8e38240190d067056666b46c0a9de421426188 25259e26157910010b52c16101091e543a31cd2c
-70d4aa463ba279a80dce8533c692ae21d60bf00a 466a78bd9a9121bce1ca2e05b997c7d39d16c82b
-c84adc6796d060e790bcb4b26a7c0edb2de91f50 f51da7da442621d1c705ae939ec7babc5dd1c317
-a1c58d763e2ed888e3a23b5a72bb296a1daaa95d 7e4b95dec7dceb70a92fbf7d74230a52f289488f
-8f38637492e7ee6f706efe55c71befb7c1543d4f 55aa25f399c16d7851137707766782b7568d999b
-179bb2520833e281c0ba1aa65fb1476900e25f8c e5b6491be90b3ee16478ef9c35eaea85f49094af
-4e6e507a9c651c9f7c0d9ee44605045b6cef2665 3e2373217cea77c10b6f229c3356627e49dd817a
-ff4692c76d3b8d5b1cb6a5927e003d10c322d3a6 55aa25f399c16d7851137707766782b7568d999b
-d6d034c7eaddcd4e96e94bac7265fd8f77fa01fa b968d1946a5019a17f18cce513d9d7aac880f8b2
-51f270bd1cd5b3fb052a4a9506425f50ba7d56de efe14ff1ae270cffb8e6ba05c5dc844f2d7fd790
-584f3beefdfd1b0383d4f52039f48f69a8b6a5d4 efe14ff1ae270cffb8e6ba05c5dc844f2d7fd790
-1e872e2a3582110906913b0083928f21b69ad3d4 efe14ff1ae270cffb8e6ba05c5dc844f2d7fd790
-2bca47fc50fd19834aed3a7b9b9f82ef2c3841cb 0a01332b92a016efb3b82d67fbd2cc0ce3c75817
-9e719b3b48fb3e51b95ab4779f55877334e7bc53 07d47d65c5ce3cbd904eadbb6f314cbada7b646f
-e2f2c14629764998edc4c055e80fab13eb178221 9cb8710b1cdfb868dbc3ed6164a242da21afb120
-532fcf36c8300090655e4dbc8f93541a87d579d0 2e24cb42af168834408c595eeebe12d73edb1348
-d657466fd74df41a8823e4d21146bac580c78d16 0c85915397e4d9f108e51018070250cbf99c446e
-d681d2807aa69d27a530f70251cfc692b26b31ff 8826bf74cae85ebd3ed7573ffe1c94425999606a
-342506ea4cf74ef8c9e196ddd74693ae888eec76 8a49f7d348262557d38ff4e41d7f9467781bf084
-96e783322b3259ffa51f565836b8606576a5c900 8947235f8540e0e538e83422bbc05d5b4d429f11
-834b312bf91116cc8023b43f8c531cdaad1cfb26 6019e9a0ac880a5e3efd2cc9a1465ea1ff6a0058
-2d286311ab4510ac8aef2df189cfa69b42425ea0 5dc6f0a2288a9f9e270870e2634108848cfd1fb4
-1986f7b92ccf3c6e647d00184f12e549696eba45 5dc6f0a2288a9f9e270870e2634108848cfd1fb4
-9b138e8bb99ff9ea63590f8d970509b63903079b fb0c5546148f06eae909270fe9c91c5617c4e56b
-085205bfadfcbee612a2096d8605c94c3eb0ec3b baf02623aadc141cf35e1ac481fa6f0542c49764
-5e024815dcf3203f51c53eb0c1b373e7c425eaf6 6f14e7f6de366f84d8c06b33f9fb059149e7fea9
-956a0e4f7dbe9ec4259874b88f9ab6577a592ee8 3efc94684b4427b75a4f718d9082026102ed38b5
-97332a0a2862eab47e4d482df85f7a0a29f5d323 90f102381007acc4d034dd429c8f20034fa6a2c4
-0f53aef43979d1e12472392065547ff34a01e5d0 23048ab494deb5432e9c066cea068812f71c3933
-61336c6ab3171b61f9d96e54b3b4c82a5a419413 8cc4bf3486faabf4d87c19c8a85d99372e27650b
-b06ed27fab1106e390ebd3e1a4ad1c00ca1bfbcb b98c348bf257ea26edfc160bb0f8a8a7d9448119
-312ce443113b01d79bd75e341f7d47d17e6d886e 516f8b80a5edcfe941bf4299ba8444a881400577
-2f92a90f7d6a7f816ff40ccf8b9278dca1dbcf6d 44d041c30ef29fd0369dc944d2093aaee5725c4f
-654db5062dcc405bfb6f3f60b93a867635db89bc 2dbb6c143ef1379c43429463a1c96ad807575ee0
-a42a99481d9f850091acb362ccbc6d1cf954456c 6442d992b447d31d9ecb048f98c518e5a3848752
-561839adc968e3bf4a6370b9c61465ee640c3c27 fb56a1c6f855d5e789a46c28183527ebc9a9d890
-a7fc4759eb704613b150e18b262ef2951245acb7 9cde374da7e36e5853612620a8d09f0285a3cb21
-9b2f2ec2a07d153d9c74170226c9b108a3f73f07 c2f777911e37dc6fb022714f3cb54b14c1f8beac
-ea1058d1b21997b37a14370daeb0f372d6af1b28 fc4e808f1cf734e22d10ef21fd2cc7742cae9a0f
-ab2028985aa7484fda544f46a645b44982cd28e7 77559fbb73566fdd64155df03c6acf0b73ef20eb
-fd0889dbb23dd5ffb8a683d072c718de34755520 b9dd799d91ba01f52e7b4070eee8b166c1589308
-6e8ca69b7bbdd661dd4324eaddd88f141772e623 8c4502e3728f3bc325d81fd5b04d0fc33160a484
-f65ef7b3caced6437b414a9cb065523c47914eb9 0630af0016bb027dc19c9c467af1e368e17dc1ae
-77ba1e5e8a03e7e5af22de74353cd86eb66b0add 4bf277ceb72e811b63316b022bbbe38d33a54010
-bcd5d529f25f3bc6f39de74cdc97a180596e5560 8f843f854779db1f92f3e24dd44c373942b0f595
-e5efbe1bbfd716daae32b4d4a5f5d05f657dcb21 3cff3122c783a87eafe52d25bca56282177915b8
-1dfa00b6f8dabcae7798df8ab447063ba0dc813d d9003bdf90039d9e1a06603169972d5148fcdbab
-cbcc5527b38f25ad575c47700eee05a4328eae93 84629c11ffe13bd1fa3c0b2fe6818dff8067e5eb
-9b6424b07fda73d2c08f0de0b43e0e4b78b12221 0c9d810b8956756042a0ab7b494a0e01c8a1bb98
-f96931adbe6de4214538c8d133550a1a5fd6f449 d4005bade31dee512e28786f6498436832091453
-a8254340b8d24e2e8a0581e80d4f14b2cd1b3cf4 7b2fb0da35f981d28e79bd8915aedf1f7045fffa
-99bd9edbef174f44c3b87fd8045d3af7b93c67b1 48ccde767dcf206024b50dbab3edc7bdaf17914c
-26684b0aab80404644ec794315c0386fe3e4513a f25dde3250536abd774daa14214c9faf801d0b2b
-87e370829746b952d11cfdd9606ffc117d3bd3a3 ad4f9b81429387ca654c075b02b9a26f620ca21b
-acafb6c4656ae2f2a1cb6d0d8ff7e3f769f48603 13fd82e49efe99c0ecedd886c5eb6eb081fc4284
-1ebbdec36ce4d9af515a7edd3791d120578d131d 6f1afe6e07a7b32f21e874958ab071f6df0b8970
-db0cac328f04413d14c1fe212e903f69c30956e0 df7a30e27281a562e4631636c43dd6895ba5ee9d
-5c6c8cea080469941665aa5c82cb6f38eb735da9 2a6ca3c14f422f5a34eab4b65168ba93294e07e6
-31719bab65fe7137c802c6bcf741f1de92ce72b1 777ad1de16b8f44de91a43cd3cb57f396bd4d220
-0f05a8e70d0084f44dd7c134ea26def683f76706 d5b7b3b500775bcec38edc62cab9c985b1101a46
-22da9138b32e3a7b665ceea9978dce02e34274f1 eb16fd773072e877f00a69a5992f6464ae20d026
-a686c6395c20ddd26ef7c757c7142302066c386e b5e04321714862601fda4f72588b830bf7b7c68b
-60a0397aea4af23c5db9037a9699506a55a39940 f556fe0dd69cdc533c2f6dc12df1447a33a221f1
-4fc11a6f3a99df374068c233b09620f1cfa794bf 40dcdb2fb1155df69fc2f7c49aa82240f5113339
-c9a0277763e3fc4f6449be66924eea0013416ad3 a8a397ab2aee7e38608ca6a03dd389b0a29a8add
-7278c273fb80dfc6591d15ed33cc55b13c61c127 3a313c5f1d5c58015319953c095cdf7075d53b54
-1afaa7132769f17178fecfa10e8ecde4e5f69ab4 07c06eb2437efe27ad049d7e6d1d1c56a5cb83a2
-699be2f2d03139a7bafa022c1f49243c5f673b2b ce967fe6df3559282b467e42294759ff56aa700d
-fa0dce8efa1c8da004bce6754afc4eb8bf4fc8a7 2a4abb309d48c960ee09ee9d7fea8f4ddf656ec7
-84ed6374f40824b154b05b7f464370841c7912f0 f3c320104a584da10403416221eaef48daeae344
-286d4e09ed808bf700ef343a90109490244433af e05705601fd7d19f9cefd19fb1350277eec287e1
-1aa4063cbe4a2a81aea6595432df3a769e21c067 c94dca6d95230854f3ca252f20501dc56b23439c
-814bf7b6cab8604fd6c5efb452f62ba76e2196df 9b46a9b3798cd2db059af6bc8eb2d7feb1d05895
-e32de9ad13b78d5dca6d737bfab64b4e0429f0af 2827033696c184cd39292651d796265646a31308
-3304d48bf9cf776851c4a31f3d64703bad173439 66d1c4da1e67e3437e0b280ba0ac3a3a24eae76f
-c9c6d7731b023914f0ff8647d31b6e0c4ef8e815 d63d70475796a4831f14f32e9a090af033503037
-cf2bebc15866f03b4fad1c0dd4efd609c170c245 5c0ced2acf641380a69abdccb1e25ed5563cc2cb
-ea77f34daefbee94e7d9c38eb755b0339206c077 96bf1673300e8c18e907dccf7a41d00c16907f07
-9ae8ba25d220fdf58db5ab78dfca910e41600766 691ff6ff7baf8bf8a30bfad50581dea31ba5debd
-8ff3861c224d9636e7600e7be2cfda6b64804f59 8d40613f782ffb59d14634ca8ce7b9ccea23a463
-52411b1cf226c2e34f931109db8bd682d3759d0f bff9a09cc8431436733b1fd9b28beeaf6727245c
-374bf04f3f63286ec204d2e507217209eda7c471 bff9a09cc8431436733b1fd9b28beeaf6727245c
-ab78999f8bd8edd1ee1fe852a64ea5e9cd2b5dad 56776d2407762291f78e33e90b9f58e8b99b118d
-3cec4f767f843daf41d44b9f48d422d3412ffe03 17166c20e28efb1666c100612c4fa86c2e5e23cc
-255d1944159017343772acb34ac04185ec301302 81118424bc3eb1267eaff6de6971991081108d45
-d0ee5d60af54b147f8cc08418888ae04798f159e 8a34d847ef1a6c1b4defb75db0aa3ba9f47d7e1a
-d145eb79b047d9614510a6b90c52d7bccc0b570a 587ceb3c6353f6d6d3943188084ec31ca7079722
-ea970f6fa546e23a902d64249af3a2e45e526bbc 587ceb3c6353f6d6d3943188084ec31ca7079722
-190ecbabbd0cf22e0bbbcaa16621cd47103d8241 587ceb3c6353f6d6d3943188084ec31ca7079722
-64ad164e79d1734e43a37398962aa4093fb0896c 587ceb3c6353f6d6d3943188084ec31ca7079722
-72a894bddaa7c742fd6f868c20df98b7c60dd67d 587ceb3c6353f6d6d3943188084ec31ca7079722
-0baba0514ed89c57f8f3255e38839bd09224ac99 7c7582236fe06602cfcb4041d3094e336f6d7820
-a5958246fb390e66aeca7d8ef166122752f3209c 83ec34a7c9659cba40ac614839db0492787b4301
-bf66f8cae6fe1d0af1155563f763d446b247d212 83ec34a7c9659cba40ac614839db0492787b4301
-1c06e205b8a5a6519b2c4852245e15702c5b5d2c d9d06e85446c18920e204b051a1d371aa7bb5f3f
-c206adaf2d72f056f068879ad92ae66b841837bc 9be34c2c6b9fdc644b5d1f42d574096b0be548e1
-ab3cd1821c01c90bef8c80c7300488c10bcc77a0 a06043ad194ce001cdcda50b22fe0d04d59debd9
-0d96a9ae49d61689fd5dd26abc450a6bbafde755 246e4a194200523f19df7bf1b63d841fadd298b7
-805644a4c439b129dbc103c745d12753fe674542 de0ef8ce0fa00ff449c582bbda2802574c665d09
-795255bf58e1eaf4b282636c2ccb4ca7fb712bad 559eda1ecdf741517567540800d8345b2b12d945
-0c54c477ccfbe13db5f769f6f0998770d6a40353 1b411664c4601dae7fb806960f573df27cb0c65e
-65b1acb09e16a21aa4c9e6dcaa3e1dc3498bcab6 ad387438a7f45565803b6e6b0df1e36d69ea506a
-2b2b67a9caa9f47fe5a82aa010ce984a5da34870 5e4d9cd07c0a1e9b682bf025d08f8f468d176ce4
-09ef8106e9ea817c3d340e5b5b2b9248beec2ad9 23302c0d1d7f0bac4c8e8c50f06ed31da0942f82
-2a8cd07df8be1234276a05d0ddff11da376d2e20 895d34435e7d0bd86de702544d9bb21a9bf9b6ab
-0c3f0d8ee0c1478a1b4b6abadc6da165bb342e29 d03b347845fb5a8ac9faf2789f5a15308eda82ba
-86ea14a72f26cb56ac107400a71367aeb062f320 3813fbc41acd078c20141544ef1cc86365a48761
-a7edced18f41697a7f3a001552631bd7a13cb294 fe402c4690eb898112b6fd874f6c043ffd23c1cb
-78f142a1b489db7035fe397c019a7883a9732fb2 728a54dd0a4c737d5fe291a2fcca327b54edc682
-a783de6d6aa858366da9f4183c954ba35f53ef7f 5123980671e6695cbfc4b08b6de53a994aa01ce5
-42c4ea3e56c74895bf9e003629dd78d97cd366b3 4d2a0c35bf0b5c1708a39ac9d7d6ad20c2d8b425
-8a8331504a7de10d19df3bfd32afac2cda1c7b76 382624f188b43e0fd8be5e407764d619807bb9bc
-eac5db16168be364984e4da041db0387ccebec99 2c0dabdfef9767dd89eb2017cac47ac9833bdeaa
-2373a0ec4fa89eba891a01f82e0f49546c67d469 3a7382f4e194dd9a5b1bc4544421cb41150ca263
-9d800d2d5105e8c416902a493a189273569118a7 66c63bc85622ce6dccc60d1af37f441ee21abac1
-fd75df9fe1054838c5c1260cb6c8048a7a22ba74 90137be9416e2e4b9bbfaecef828c6ff9e371006
-9a24616e87ce47b35ff1dc228bf71bcd084f082c 66c63bc85622ce6dccc60d1af37f441ee21abac1
-86149a1992347cedf7a9f6c952da4af27c80a616 90137be9416e2e4b9bbfaecef828c6ff9e371006
-b787a3556dd54b34769644823b7a2cf05c1ae146 a1b842723d4741a0322f066646395f76e4e7cb34
-6ae0355a9e990a20cd19fe099b2cb3eedbb0d8d2 682d43346fd51fbd4daee64663f87656db10b812
-461e256107172c7e4d971a37e26c40cf15139bcd f1c16b6f0ccad4d325bc1e370d5fa52704dea8a9
-71bfd4411a9c3ca9839fce941c3319df7c336341 8b269456c6bb4820f9fd706ff10c287344d98076
-1dd319317499c957e068cea8848f37850bf43b2b 219e1d0ae09ba84d1e7f0687da0cf4978f927446
-cf325235662aae523d78b58f230e666840cde8c6 404fb50cf1ba04b6431750b36bb397784419c37c
-b373a7b5ed5f0689e8a9df17b9f916ad7bfb49cc ea6f1affb72ade4a763b3eaec90d2f8931b90d07
-eb8409ed497b89ce5a72c5d88207c9a55683330d 5ec880c9a657dd2235e3fe37490fc13196bfffdc
-1e9d28f72d052a69f90425b5be3405c02597b7ad b125799351c1be3370ab9ac08c2cee93e7fa1ce9
-f0ba49d62cc670670a3ad80fedf36e1c547ad3e3 dde0e8df2458e7fadefaa841c81a84e3fa6e8a26
-a0fb38e7b32e0bc4749616739d88c9a488e12dd9 7a1511283adf45b7595619909ed069264346eea2
-b18b27392349d81ab8551ab505aa3913a32222df 13fd82e49efe99c0ecedd886c5eb6eb081fc4284
-05087f4eacac42c53acb56d41ca6e48dcd2c8ffd 7a1511283adf45b7595619909ed069264346eea2
-67f4bb0909b5d5acb8b0524e8d46335176d4c200 3f5eb8f56f90ee96306b6ffdf4d34c42fa6f5d95
-edce264be4107fd500ab395aaee331c6d4cad300 72ee47e691dd492a92874b6507546e9f166bcdad
-9ffdbf1c5957888d87fe2f5326bedc23cebd3093 4d42df4f49ae1e895a07aa6284cb406328c83688
-32b8dcff3b67b0ded1047464731e373510ef4487 7c6cc32d8ce879cd119eafc89b7dd49b753fc7f0
-faa5711a18e10832080cb341e88b4598eedc5ed5 8d8a97555f59aaaabee721488cf9ac6a503c323d
-02c84a199fdc79f204c4fd63fb19fd3cd70ad3c9 ac55f542b0bf4f62f7f3879df34e48bbf1bf584d
-5a2f2ac4613bd532a3d1d7664b1e34d282269e17 b73ac4512de3dc8a6acf26ba482176aa9b6f349e
-2a82de203c63159b43711c6c3be7b7a1f3a413ed b1c1fa64c92390239a1f2c456e10a9075d5a01e7
-88a092c7a08cadcd47a338953351613f59486a9d fea4b6ce6aabd4f774cca567aaf29e656abcca34
-f2c176833735e5ad60461d166d687844f38d1010 7013d380d5d444d919844c252f6e9c25c57d39a3
-95236cbb6616bcb14349c7ee2f38383729bcce81 0539a6f6c0b71b512272ce74f813bb366eb4c885
-718b2ef93e13e607cf26e27e0a303a83374bc63e 8a95dec94e1688e9f01692f21062f96455b4f68b
-8d174b0c92e7e2f0e2435c1e9b326c527f658e16 e9bb19857dcc43b6ef9956625b446d63a93de1cb
-b27fd02db41d5b560668e2e138fa00eafdfc4cfb 45172abd01e4cb8555026294b7c1f474e08d4728
-e46084b4937ef65cfc02c7ac6d88e003a394145b 5ef87a514ec54ca668b51abe9f41d2e5d3ac3a31
-e60599542c70495f11c3d99772a1ce6a1b1cca3e 129afb1fd7aff33f0b2257e5535051dccaf3a14e
-e5029ec0a8166a8cdba62f8bb6ff45e04d39bc4e e1a9f5616767e851514aaec2c54d5026e1516757
-da6f690589a2fa83fc45cb816079104ee1baf035 eb5d1eaa885ca8c54dbecb90c0e2a9e9e2e16ff9
-b4d5c8d8ce6711923ace6a316a632502f0a1484b e28956ce9afcfcc515b29e0f42bf690b4aff89cd
-aa1b90b013e9b460cae18627d1cc93f7c7aec768 56930192bc5836ca0f81aa2b5bba2b5fa39bd2e8
-7f71d9ba570f7beb979c59a730cd7c2d00de3bc1 1db104b0ea8e7afb3a13002a28ecf0f5034c7f50
-d1e1aa682931ad7464e9cf453eda8df66b475bed cb35a017262893913717d96008ddb4319cfca6dd
-4910b656c8c2c1f909c327947f625db24808a142 35c0d4be2a89740d8ee1390941a8c8ef14f75728
-cfc65f623bd6c0f9a04bd173c3154ccff9f8e5a1 284c3c488d0ed6faaed746c32d33e20bc20e487c
-f9f414eea90f9efc9638a877dfc3f3397aef0123 b24d0b397af5fc1d38b02e6858dd15626c4c7aee
-228791868cfc4ba9aaf8608b6edafdec286721b5 75923665702416ce5415498cb0c379d5bc3f5c10
-4fa17d3e74ac9fb4da959e006dd6cdf2719fd582 feef1725f2346506017eaf6785dca1c1abb19f79
-9ea124d90c1cb262baf2f9fe9d2986f42d4268f8 93846e0bf16b88ec2b4066d0e71695c1c3155dfa
-19ee32f10e3caef29a432202ddcb77b54b2c00d1 3ab4a3bf5f523eb5a3cd324c9521f8c309ef2671
-f3222e563944c01f1d1eb41687ef122d8cbd6b30 83c41208d0c535ac5031365bc4317ba26dec49b3
-0e8b95e637b07735df83ee7ceb6b0a992faf5a10 2765d9f1e6329051097652fba4686bb3e5595ee9
-6cf2e765182ee80674ff2aceb558ed4f35b99192 334b8b4d1e1a33114a2a276ae57da4e2e92ddab2
-555d0f44eaffca138ec55d76832b5f579a7dceec 3e1484189be75506343757a1e751f5a140aa54ab
-3b801e702096d360afa5b4f1ee940be93ce3060b 7f3fe4ccef779a2b7486a71ee4436a492c0331d2
-d828fa7293b5c29c0e066dc3e6fb32130d6ec2ac c0c0d591779fd1f2069876e48ed46c436344a4a1
-e1ddd10adab51bdf3de5847d124dd1978cf6d80a 85d59e15a116e8986a394bd15e4977a3a40bac06
-44435823a75892ecfd664d23ce10cafdc2984798 85d59e15a116e8986a394bd15e4977a3a40bac06
-d779cc0578f8c5c2f9f43e43a87644660e3c371a ba5ae4e1f0b1327ab579ba8380c7a5dfc611d77d
-81804d7f0779d79ea07688f5d60a53671f822b3e 6e2a54d633298debd15f45fdcde4bdb90311af61
-c52f2c567f3ae650629ff6dffd6f9f5ab651f7f7 c34061f38fa7ed17bde06b0bd1d0d0173c5be29b
-7a8e328059b263d5d1b7dc352fb39c2631bfe2bf 158f1b2b58b5ce72c53238910ca93ed1cd12bf7b
-8195061ccb039e6bb3ba20538f876b8b78c818a8 9a00e99a96fab0458b2959893cb8366b0a92f1d2
-54f4ae97e3fa53f13281470e346d315fe15d7364 b48502e886335703f41398bafe952738a52641e7
-b8b268436c9049aa1e50a87941f2a67bb1db40ac ab52b3246cb745255ab5892b53a287c8df647c1a
-37af2717749c0023b19a454c8d72c06ef14b2823 58c3bd6fce8d61fd2d59781d85a790fbf3d5a9ac
-96b6a59a86753ec43d3e2ce80a4ccadce1c356ca ba31f0e53f52158bda948dee4a36eca9227779ea
-2feba25998c0d8416694d5fc8e454edf2d179b41 a785ff771f063a1aa4da9217bf95bd05c09ff949
-89e779e744945210ef6c223198693131e980c6b5 b700e37e400c884561ab836a04ce96927b9caf8e
-345aab33736988070903f89ce2f1edc6f6d09c86 b105852d701b30b256b60eba1adb93d2736e18ac
-611009a4073b2eb13d510c9d9cbff30feaed2701 b477b97ad543dd54b2cee001445d161ff17d1c55
-20e8e2ab83d95e4f751fa4121e288ae9adfca691 857fa3ef2e69f2b3fc479518eae5d2938cf84eb4
-21cbcfbd9fc6849774a35a662116de0d40329e0d e53d87afcc3425e3ac9d3b09dddb9bd5f4bbe700
-98a0b5f80b58b883f2f099c2185942b2d0c795e1 a6e0ad517fbb6b20c4cd60c99437cffaf0d6bde2
-62e327b06ab87e2a1fe5c0261e3497d47738d760 63d78e586d211efadac8540b02461a3610d60cfd
-06b189d24aa3cb4c96ea9c0a8f352b5031217f7e f49c0a0ac853d134a3b70a9d6fa75b58f23bd364
-4d2e2cb9b94028a2aff665cbe8218d0b0db22b79 dfb3365e0234960068f4c1746d3dc306bd3d5ab7
-e090e8c11781d6acf08c45888e07a509bf73f71d 94dee6dd40cf549c60e40470b29c5bb3852700fe
-a9f7f843bf189fcb0a5fad80ce1206f572d16b25 e90e05e3507be249debb9b257f6db225950dd883
-886e1e3bb33fdda5e5def1c40bdebb9bdab757ed 5eb0d065c6e5d346093e43fc10101e0b5ae37e26
-40bedc15a050ce1c898ace6651f4ff1c4b2b8e50 14010fbdb743ff02baa46ecdc264d0a9eccc13e8
-1a4c0e9c4f9db0ccd0079b2dd400f591159ce2ef 91123f11a081ec93075187beef4bcd800b0f9e25
-ae632adfcb0edf3942623350216be166962cfecd 66fd25c1dc44ad592f81818127afbc12ced7e0fe
-d281e29816b863b831e4db9d8b202a19ac3f4395 f5faad4c5a9caa09015654393b5a68dbb8429e0c
-6ff56686a0bbb0bb0bb26d58fe4322a97ac17a5c 4518c54ef68188e73668de22be6ffec3be3fac8a
-f3fdc0c28c027b05a5a08bf27eade79a2de401a8 03eefe5a64964d0801758ab5d30b716009e2dca8
-f19e48bf061b36741331fc6c0f4286e9ffd45ed1 82b34b15f9a690eaebe1d8ecaef202f6cbf45615
-30dca189a1da89ea6f3d44f433e6435c67cc31c4 4a5984ee7e030ecd2003f0f9ac5b3cfb5ac6f71d
-9dc8e21b4ddda9e58aeaa4ff14583bd6f669f909 902f6e446b79a4fe15c05e39cd45b2aff9fbf95f
-56271870ce0b1854495c19809fbe940fa964fb78 d28b9d4a88d57bd103c5e962cf7ac1a41280557f
-e4cebc18a5aa682b0cb9c886ad7390892e433dcb 38375925fce6acbcad1b9adf930d82b1ceb57649
-0ae3c06f7c1439ff5d9428e6c69d0228373abe98 7da26dd80da0cbe5fa4442f8877659c330b42aa2
-820774af5b11776469713c07195aad62317c9ef4 60376d2788934d531c4ab2668a77a1149015f057
-e8ac075090f2ed3d27f86c337a9063d6386071cf 60b9d153b01a09cb0f39cb379b64f6c925ef5507
-976d4f5494d317fdcfee8a402eab89d38183a9cf 5e07e429c5c5af8920d8ee6badb6f220ccf735e3
-0cf6cf5c766b44780c9847557448a580c704bd17 5c7effc6d1fbcfcb8b59614ef5272612027f62a5
-39a900eee363161446a53cf1d975cdb501b1079a 83688721cd60d2ceb86dd5056ae61b75b5f960bf
-3200b35d34f192ef62c0bcbeacd03d2263505173 0d92ac05b4fe008e5dfe4738b1edec072222f1fa
-88daf390716daf6676ef06e59562caa67cabd5e5 7221fa4de4f320fa55202ed90761046baf1ca3bb
-1b9c4981df084533e3db6589ce97bccf3f87b1f3 fdae5655ae2a57d39794ad1a17dacc66f7642ce9
-faa1965646e014c86bbedf1f8c2944662bab2c32 1047b878d164adb14d44b05c2c11d3882960ea49
-9ea79ad5fa81153a549a4d7a0b18fb2ea8263bd2 d168ebc26ab23f83702fa7ec445a738627383a9c
-f644132c06d0e4e8de97e00318b8c782fae6767e bb6124d87544a754c73a1e8eedd77a78eec668bd
-6f7272c66d57321691ca77f0806944df249f1076 bd5f6d973717fe9502a4e80c1d705f349dba371e
-e01e495574afb0f64ead581595145d61eeec8f8f f246fe2d40d44f70749498536d7bc46f5fe87f3c
-7f798a4c8ac232e0ec4493f1c320f30af3f68aa4 014b40f03673227aeb7d4677ffc3a61e4f0ac96d
-5fa38533ea2b84c25ffa8c7a75351a678578d708 e6a810caf584eaf2ab8a384d5e0317a0367dc07a
-07fa94f9f8ccc081fba938659b74fc29bae034f5 2a64c23adbb1418cb44b75445ba1cab05a499c85
-32675084e2869dd17c0caad329291c48f9c56121 2e9442f3427f4b95e06d4e384ae911cd00c68bd1
-4feb9c85b0fe49e9c1fb2d41b732ca58b64c21a7 955b1954ddb8de0a7efa41815a44f0a879869637
-a2d79af797f5358781328c6c9e0ee9c6100abc4a e4f5718d21fbc17112fd40232054f9f9418763c3
-b4bea9b46dddefcec2199340792a0dcdbea4a4df e5dbdd02918d1aeae32613b3924300a003a65f84
-814554a627dc5b8b44e3d28f87510126c068c5a9 20babd16589cb3b94b6eea182c52667ec4571864
-95ad855043964e58e10ac7289bdddab123d66c4f 20babd16589cb3b94b6eea182c52667ec4571864
-8c1cbe204a048441fadb262eaf8671f3fd4009d8 8b0b46d15cab82ef5f2b1e58234a7085a97446c2
-a4e285a5fe68254f6ef069b13b61a83fba8b7f44 8b0b46d15cab82ef5f2b1e58234a7085a97446c2
-4535b0cab29d98ae0b1dd5e20db19861322a976d 8b0b46d15cab82ef5f2b1e58234a7085a97446c2
-ddbbd24d7f5a93f035e4dbfb5aa9989ef00a7ad0 08bba2e16e4dca0eac795b0d5031c70b5253e7e1
-4b4609351866095d66ca04040f58a957d8a839f4 95ea402f8ecee3f0a7c1cba9f1eb93846ed590f4
-c5afa8c5a37fe8bdeb05424661121e42d39fbe73 2684ac0b8a95204c25230db7547d6c160c257ce7
-32c006323ec8be669517737576d5edaca2d4713b 2684ac0b8a95204c25230db7547d6c160c257ce7
-e038c02119686a4f24a683550f2b071bf8fb08b3 9ee5b2c3b08cdc80f4b5385564ac1d384d2883dc
-31f65d852e5bceabea86d84076cf3b145e447bc4 15637e61e46b8209df68446d8d2d6bb6c1a327d1
-ed4f6ac8e2c64e96ac13dadb0dbbf6b7a57dbe6e 89a52c9c9a1a363f1982af2aa459aaa1dc54626e
-4653f500a83644969f197a13bbf1c2fa63da0691 9bbe5d9715562cfd33f1103cdfa4092039bce4bd
-30c0ebed9d61eeb38d2e0c0630a6eab8080923fd cba45437b0d635e53a90a4f6e6f970917e0379fb
-c3277c7ee7e48f2a596d59083194413632a13a7d f8f6afde3e45a08b73a1856bcfb688a1c638ceab
-12c5342f6e7e1d7f038b5027ff75a5b1cd6d2027 cd07ff87d5b22aab96a15a80308f537b52af8752
-343f1d25042358d4d2c6b48619000b30f4a875f9 7c6f8c4b31d59ef4cc680fb7c8a544ab76d2ff33
-b0975226c7f821b90d1319ff31b18e1121dbe230 9d340863b70cd721907cadad16dbe2fdbc373067
-158eb6bfc8a345da211dc09d1e08f4bf2c4b31d8 b2f0d6424d2cb865187c3646f8bf8b24a6cdad9f
-1270634726151b35e9e96b5e0b3ce2de67db1df0 27102293fe4527ae873701ef6ce64bd1fbb8100a
-54ed2ae622b2db7633d73176e0a046d67068e838 3e8bec2912befc241ed8340c93f3e67e0a5a05a7
-20245471fe7f0cb4262a510281a6808572c60fd3 7bca10fb1b86605bb5d9308f8d4f58beacc87c55
-ff70347dc87fc9e1fc7eca76fabfca2beaa4312c adb24e6f2f8c657f1138d5e945995d466009c5da
-0180e5c31b873c156ad09306f1b052f5d66fc0f9 ac2bcfc9f421159846841622db18dd66e9cf4001
-ef8f4e7226803b44e724f60bbf44338ac067e0ea 1096e4f9b6622dcbf6e382d2fd282a57b76bc205
-4b8a501f7f31e382bb6f62eb6db54132a8f20743 23668e8a40cf4313428c718e7b1fa6d789b5fcd8
-7046828108182b55d999310445502dd89de23f39 fecd2d6c62c89bfdd48739bf7ac186b222f69a58
-d2060bb3f941fa0a547845be4292ed35cde8a99b fecd2d6c62c89bfdd48739bf7ac186b222f69a58
-7a6a601ce013f5213b674a30467102ed40653feb 7cc307f5e0c34e2d6b026fd845f4ee71b73c213d
-ec2426d00e982d2e74b2327b4f68ea36820175a2 800b0061386c3de3a1d316a03dc1c0f384c2b3c9
-50f8674fb5d991b18d6a83daeb7f6129596b7124 b01e40f4fa8d314da910236ea5da2ffd5bb4e497
-db2aa77a19c8b201430363917f26bfcb3f0c9742 ce8c4511c2c94096958445f334442e7583e1849f
-9fbdd940f126c7fbb7f01cd2e043e47dabea5ab3 0213d08ed00bb40a42b8ff56a81115970127eb3a
-a1e279ade2e67741abc08787bd7345cd88d4faee 31b5d5cd4fd1d6af3c5a7259a86132e8b5a272ca
-4705c0b40bde22c4590c136ef20a5e191ea7117f f6e0446866b7cab9ae2b55e85eab3af8d21f05b1
-871068a8495d64b57b0ac89014481a6b2c7ac16a 1c4a4d3d487ceac0855620c0d9e70a1d8140c003
-ddb193a5817628a10a9c5adc39ed0015cb530aca 5b4812ec5d257dba37af6758a09054d5159db3ae
-c974807ca0924f8ffb2affd0cb42a8b5b597d80c df3cdbd04fd61e341070c00c394e92706fb98878
-96e13954f8e35ea8e0d5f7157f7eea996bacce28 0748657716c0489947f4f52bfe735fcfd7e8158b
-536795eff73b78c27b75daa1f113c228fd45b875 df3cdbd04fd61e341070c00c394e92706fb98878
-45808a1e8201e16670f62152923b60073aba0d42 60ed20cdf66042680255981c44120d374dba5f19
-d46878bf1830fc3390fde56eccd827b8c54bf753 3d9ce13b2557d8b3b3c3c3da57964ac2c1b4bddc
-f23648648dd89e8468ea4eae63e81fe87e03606f 9535aa519997486207a7eba8f3b0a68f622a3d0c
-5945766875078485d53f912a6a3672f07fa27593 2da362e649fb2ae4d51b6cbf2993047d31fbe3be
-09ec217d017591fce05c92908a82d8cd92846064 071c09ac455ddf4dd8a9cd2e64a878f98c4fecf0
-ca569e2bae4ad730724fd31d4637279ee63d0a70 d1aede4e1d4dc3fefea4c16a663a47cc3cfd6832
-1367892ab67523c8c93825993953ef9c3bb91c5e fbbbd1cfce785b70889ce1d5e734ae9a5a0ce9b0
-9aa19504a190cf0de95103f8f60bc6e0c6a82027 1e1d8082ff6d22a58fb4404cad0dc90921ad8e63
-3b94c8649d2c11f7ef2d6ef88c93481fb20b3ede 87f025f1fad98326e41aeeb1b589cc9033ee6969
-5e1e5bbcc5024fb3f18994f123e7c1f0e21caf4c d933c3acefa4d1465d05ef179c0ba223f0442cb6
-9c94dc0a6eef259bbd3ea984fd6abc9aaf5a8f9d 04b4317e8b6719a69e6c9433882dc0af14d97049
-d60d3f52d1e49872c3fca2dde74230cfdf508a8e 1ef29351ef87f1112f7ad411b9a1e2532e29c4b8
-26b736a66810eb068ea10fbe1ff26f674badb769 b344974c0c9a5834a10a48cd73504b6e6ea65916
-1ad7bc8d961d6d041a537add2d178f7a036181e4 87308934d5a9627fb29edfcf843dba337b3ca014
-8e9680e04ab63e698c99213a95a08cfd02bf952a 4079ce7213272c746adc6f2d7fb4be640e9c6067
-8a1497620853920b69da1806222fb4b18ca1c9db 90335a137f0e9f568f91e5fc6be5b983cfd17644
-ab09b65593cb36371c70e48cd382d83401b0d969 0e623536d2e13894d0ebf80fde0418d11d1a125d
-46b7438e04f9e545edafd64821a5d94b05e5fc8f 0832a5d4a360b87e7ed5756f904c4544bb2af21a
-717b5a0ef2ed8d026edc7f0c4088bf0306d6a448 90335a137f0e9f568f91e5fc6be5b983cfd17644
-fdaccba399b9ede7a747465f5cda2bc5a829ee6a 90335a137f0e9f568f91e5fc6be5b983cfd17644
-bcc933bc6849659fc7576a471337acc87c1e6214 90335a137f0e9f568f91e5fc6be5b983cfd17644
-45c60b1d19577506974a619b1a637cde4912ea28 0832a5d4a360b87e7ed5756f904c4544bb2af21a
-9cf6677bbcbf20dd8b13351cc941f74021e830d3 0832a5d4a360b87e7ed5756f904c4544bb2af21a
-1b3a3cd29acc2da62c7b5c972c9d819e740de3f0 0832a5d4a360b87e7ed5756f904c4544bb2af21a
-49027bddad138f693545fa815428c4f42af7c35e 5ea725e8a795caf13bafecc1b1b07b5ca136e565
-2b02172a33a6778f3ee77b055ae37746015df473 c898f4ea353660bbdda14a76d8a9aa9889bccfb3
-2e1861059ed438c39c0b44f942fb40298a4f107e 9e7723e70a844126c395f4a07fad96aab13cb5b2
-0289b5f16f4e09af523b4bb0ea3d5bd9361a04c1 5fef1723821e0a67338d81f4ba951212f011dded
-f11e16e68e098d8aa4e526c861d1ae17676ec366 d0ff7f54f302488b6156fab22d7ed487b244bc66
-d9059803981cb83f531c8b639b1c6c05174d8f7f d1e718b1bd6327a735baec0b46dd3f8907ea403f
-7da42cc9ba5220ae76032c2e375f15eb541da473 2740fed57d4e551c5f2ccca2050705d6318e12f2
-28da6eab1740300c398d513c037fcc47bda3e157 791bf811275570d1bc38cae05855c51459a3b791
-d2151cc5e8d523bc77b836e165d308c85bc24051 4937a2688fe51cad102788a99b81235962d8b95d
-ac7c65cb2fbc6cbe6be45a74113d408517815a7d b04b79220a01d03907939063e43b8990198e3c9c
-40cc0169ab99223f15bff55da649b6173856277f 81ca9a01947da9dd8c3dc8d1b3f039ee59f30646
-c317ca8f1e43a15bd28f2ac5623db74887d3bc3a c226c32bda5b429bf13346739fe5a0f6a433d7f8
-796f02b2a894e0c29612f6a1001664f0285a4c9e 2e69117df86f92eaf25127279b0c01867a7ec4f3
-28d8d9426e4119c480e74f8ee3b14728ea83e68e dcf89a1bbfe23c2201186bae2adc3f1ecfe1c24c
-38255efb67f8e19455339997bc3496dbaa06b40b 107142b091437e76f6ff566781601c47d915e8fe
-60c81fec305371192b03c27966fa83dd0d0ce0db d7e9e156ec1c1623754fdeb4b66d4b6076aa7bb8
-602b869a1f84d538adb66e93b5a1b30a6d27097e 4b29fccc3b356b5bfd9912daa995ad0b786fcfb2
-0f1fa19f070db40663ffda53a6fb14bcbc128966 d5f7d7c803f781df5927a13a1b988a072e1d2303
-1204ad89b5dd4d4c33b43c9fc479a8726d4c0d5d 56e5a2048e754fc3aa12019a1dfb24456d1b785a
-75f3ed853c633426507f1092b540e0d2146882eb 4088909949c4d436c5766041f4991a6d07b16ce8
-553979bf2ed869ac15d13ac570d9d807d1ef4fb4 12e68b468e31728b8055b491709f96608348c2e4
-0c3f29e8c23efad47dd505593c0a6837d06a263b b15f52bd0a981e38ed7dee9832136afd47e78e3a
-53c6d73f525c9cc0f6520845afe03d51fff673cd 0b0972253f20f8a2bc936a87dab2db9e67517bfa
-3c222393daf01495b8b98180a3a66a8f3ae5b2a1 9e8c91183221c8a22047c1d1f953e0150cdabf28
-6ca8e3947a9d927eade7ec14e732a03be3bdd1da 6a91b70891d92d45b9124910bc387a2fc5b5ce56
-7b55984cd9d0c70182e575d3fa05a1ff4c4dd790 399a6fd667e1a7a11310e3c7a0caebaa44d89e2d
-8c0ea7fa58d34ba801ba423d4aaabdcba58881a2 16d209750c6b62b9729738c55ce808556c1c67f7
-ad89d52b2d93824da6308281c4111abbc0a37c7b c19d946ec97164359541691ac335206b36d29610
-a2a154534c1c2d853a76ec43299951355313ef98 bea6f9888c7fe3e450e0f42c18a5f21a734b3f0a
-32363e1f98cf8a4eb5446450cb2a831ca060a712 d314561a64fe965b0afc5e7a8b03f61ee2c585d5
-87ca17fd661c7284035d5622cf871424ffb8e81d 923e67b39b1b0206be2099774171c00ebfe62b4e
-df466620c94ed8574dc85ea559f470a5c3a7d54e 49f6cac36efd68fe1230e4c442aae3b368bdd4ce
-a90d8d4b269b8c94b3be53524b3bab9c540f5298 925f905332b6873f40c54c10b2b2051612ec0e50
-dd59f2b5b2918c52562b01a560899410cfe582e4 a91cce31f574bc2efd6c736083a001323273e3b2
-5b45395c664c3712cde3097bb3b765022b197f81 fd9ec743ec0a3ae1481f017e1577b0a8395326ae
-8c1c44682ace152aabc8a02cd96302172ebbaca9 58ab2ca15f71917adb7dc15fc4329d577bc63e61
-5d94188182917da1029c99e4ae9bdd1dadd0b5a0 a3b5200a59b023c9a0c6380652dcf0301f24d42a
-49dd5e902f8db0a3d43839b8708c43688bec2ca8 e48284c0fac3c58f355254589bde0b671b65c105
-ed2fb5f3f4d5a199ad6f6fb8e5240f4c6b37bfbb 7751ba99d574d55174bcf548a35314c2a23161c7
-2fab544f095a66d46f63f054e68259dff0fe4565 9b82900dc05294fe5dcf7d2961544d1f313089a7
-35ebc971a06cabdf10be9d5454e2711a6c6754f0 e719d1d0890d9920d5c2a3d7acd03b8519e373c8
-05adf48423278d6e2706b2707a212fde31db1db2 8c222bb92766b722223e5a69cfc4afa125fd3783
-6f954996eef280ce2f57728b8cff356ca53f2f8b 802ac79f345d240c57aa67ca386ee7a6dea220eb
-80127345dac86e586be4594fced405ec74fbe9ec d3b164df86ea126f4714833401437803787cbb4e
-ccbece2b74f9c15310262ba9cbff7462d19af8e6 9ffa3a2787a095755407658297492ef7501db31a
-0f4f35a358766b4e4bd2cbed7e9b79d1285547ea 5a016e7eaa4edf41d395a935cf8b1b3469f8293e
-66cc276504c1320a04ade87236470232e520c369 18056b45982eb862120b3d0e68ae4a986d2153da
-de30728a57a4f9f5c640acdbfb6d029c85dd7ba8 73a134f58014b3bf815fe9d18ade88e056b571eb
-b0658329fe63885fb3b25b9ca60254ca526b14ae 9f72fdb4af8efcc27a2058559f4e327452b6a615
-ab0b95752335b4d8d475a259dec6c3d02db78680 25187e0c4f696949f1ac9f12f6349409f05cb074
-7d21fe89c600a8351cb8b645f658a09fef869182 69f5837946b16ca9f59845442cc9b9c7202893c8
-28102140875a9e400e16f3a9544f80895ebc1639 76eb1bee3a0da1f876205055cfa96aa0a94295b8
-c27c06d637bc684e35c1f42c96ba2495a1a2d057 0c4b31914ac3b50a9497e4a0e6b4963368c1a87a
-5828d6d92e0b1b5c0debdf52d15747f5255b6d38 faa5ef40d6d698dc8fcebb78af976babdb4af0f2
-190a17667772dc018c885dc9329903c76db03415 2567c709e43a060bc82e532e4563f9fa77195172
-06426616bb922d8c321df3b49edf3e10f2d5bab1 bc494d1c5eb0ae1e8f449a46faf876cbe187981f
-26543afffacd2b8aa0c8f033902429a1db31878e 539a9dffc7bb1459bcd53f9bf18bf2b35796d949
-c709e24cf132f8b9a82c6dcb366097fa6bc50c0a c3ef6949a8ba7e8d993f55a60a81f32727f2aba7
-6f78f4f34fb469246ea5eb377a9dbf3adab26cff 06166f314e0019bbf20f5a64f328e32dceeacabd
-5f51954c04b3797774738f137137f447e3b945ef bf255147e722b0c6b98c556f986c4cd3678380e2
-63251d0cb7cbdf2767dbfad8a1588a74864c52a7 3c83a1dcc5a1ee42c5d9d8ad144dc5f873bad4c5
-8730938922191556b05e5f3cfae39a8d1638a9bd 29fb8c86dcf29421c83a6ba65f5d1b8da7b857a7
-9be6db8e7ff7777acce18a82902ebd877997b151 4a1640c79756a532e52cd2669302bb3d61add02d
-d5def805674edcea802504f5ccb468c1bb03102e ac8e7d0561cf0ab86270b912b8f5ca6f44b5a8db
-4377d606ee49908f6607269e77e6d740d85a177d d1bfd16632d8d6517cc78c954ed66e5f0ed2b72f
-584e4f2c64fd073c67823e1ec487cff689d3514f ecb061789d2c034b93294f9e3c049981cb2f7e1e
-e5aee9985d69ae378e12641f46af7ab181cbb617 2ce1d5cbe29131ea1c3e25afeec8d33488bc1e65
-35b653603d990fabfbbf904159375ebed5f82a1e b9d31d5554805b9e1539ab7745c21e4ce3bb6c61
-9356d92271ca72d6165e2bc4f6b4e563cc299e9d 4c199b1fca56cd42a07bc4e2aee6977e4f87c590
-81dac971b255ca49596c1dace1197e51dcbbd12b d73645b8cd4575cc997d8fb920d14934e439a3f5
-2c248c29e6eda3f22d07b1eef0e681e1d292bbf5 b70e342138d0fc3f1456906297528fc068d1a48d
-012d381a96ff588ef781ab30a1456d1d1288439d 8322025a36fec721e29330f8cc5cf6cc75a629dc
-cbba3ad5a485eca5117edf7df015d11410478eac cc45ea26e9a50affe808e101415cafded1b385a3
-d08ae93c5c4debf6e05bc2122d37eac942763131 78727b5ca57064779beb9521e7f1433e9975e995
-01f499e19246a75828745c7bf2aa019184a07b98 a2d5d35984882a118c0a5f7e923ceae588a7799d
-498cc744aa3ceb36c2aba966935383f19b49f911 714cce5760b36c35963f6d62dab1a4b82d76e5ed
-44e376c73f51e2270185d4100a8f70e213efd93d 46598bb80fa151ee3554a4edbd3ac0fcbaeff3dc
-427ada6cacefb9fdd1892ea751c9c4489bf59144 126867d6258f374305648da5e8498479f7c89e25
-03d6f9d061ce591e1bcdb027871ada79dd22401f 599c7793b754aadaca6603964a8a6e8b3f7f41d2
-2ca3e6b9284c2d506ee1984056a52bf369f5dad1 beb1b44da91c354b61b3d6b6fb29652d91c981ee
-47a318352e3ff7ce8c03e5e7abc592d7a763a893 a0b1ab04339678f6557375a1c431d7eb956ad072
-8523b20bbe4ffe73b3644ce115f0ddff5ddefd0b f63f92d8d50fc5484bdab99d06a7f107a5b8d0a6
-49fe92b1a2708a740bce82c0d84ab5d65464b17f 38e295b40722766de15c0be9a2581a7659fab81b
-7e92ae2ce47687a162f427b930eba9a0b76ecafe 83a54a44f548b67a19603cf02abcc91a486bcca7
-22510c62fe51f9adc9b403de81e1375816729838 ae43f0743d4994518319a2ed2d965d14b8b43820
-1bb63c39903959f524ac5667bfaa192a2371b567 c19d946ec97164359541691ac335206b36d29610
-6d0b28a05e6cd625bbe4057d1f85c4df13ce8f7c f273705d6d69045ace9053d75a34adc890ad9798
-d79b093992f1157261c5441d29a7ee70aecf67b1 614d1a236f4bde837a6d8afd9247356651e08c58
-67750600d237c5cf00936088bff680cdf52d3032 99376dbc7345e435590edab88bb52a9ebc4a0524
-d75e46b90b4dd816965d133c19567ef0e5d8bfe3 7503ee56a57ccdd98f1c7f53ac7ecd840a1c1070
-504df75c3a67d28c94e044764e696127a45651ff f01cd447d825c6781bb854eb15abab1f420c0114
-d17bc79bd77deb968bb3de9616ace37c5ec91a54 99a9ea0366c53696aade0afed2114b325b11e99e
-9daa40dc212350b108e9713c06973c0e7b18f557 59cebf9c501cad77054cafeb9fda6e0cba8b4d2b
-53c253bda12bb67bda3a9bda3e858ff2d711c875 5af6f7247b2f9a2a08eee561b127c2ad7d212b7e
-86abaf7b3cd243e2fde5de76766a19f7c9942e24 64ba5f3df8ccee9fadaf3c41840e6246b718eace
-7c03dd079f54c50c0f5a6c7fb8c23e16cd8395ec a6873dd67c304af6ff6b6f4429a795716d91c583
-ccea9cf4b4cd9d9e4a17fafb60c5a60ae60bc592 b8aaad196ca4f090124bb272ae22d360812841bd
-b064a2733ccb7a5354c9370f8795452d9afa8f82 d6487652b74bab5c78db8ffe6bfdb2d9c3ce70cd
-27d7f0d377138d87291afade9b98514893119ba3 fb37b0bf4e39faeab5151b29a909c649067151fc
-717d0e984d821a406f4e975c489ae10573a4f34d 6d4afa24546b2187e22efc1247bcd40127cbf2d4
-96a5cf5cb0b0035b5436067be7ee45b4ac6bdbc0 28ebbdbb1a54a4f958610040ad5746ff8d718250
-79bcd75797fb3ac9589ced4f81f23755b9787314 3e602e20476f462d70743ea11e761946918b1401
-8b0af39aa0b3a20f30428938377da85ec49f6396 f6aeed31b43891a10719e56f007b075e8abc7292
-a7691dcae2b849974d29722ffb04efceba78ce17 c3e9a67026055d2b545fe0e25fefed7d55f82eed
-838a7b1af85356e3436361d60dcd9ce859c9393b e0b31ebf2039830e24d258ec2e6c0d4032b0ccc5
-92ca2e7fc33fbf9ffc73da275eb4d0a60e091f8d c372ca00a9337f93fc533430db20e54d395eec1c
-8c8c4f9f03917c51acaf1443a57057cae8e20c71 f4cec7ff050cb5e593ea0a05d419a261adf4b801
-a1f242558b0b497a5fc271ed84839019dd25f9e6 9a798111823426ec3da3bf6b645fe4a35dea06b4
-c00efca2e9e63c148f7d19b0f836b3b4ec6f4d65 feaa95ebda0967b73334c83d65af0015f1385e30
-1c0541062b9c2cc88d906e9884f08fb647618a9d 61c5e71bb20f367f373710640c8103e5f3e5db67
-3a530c67128661680414d38f2dd14c815fa39512 2ea0ca9c5b4c429117debd8d5756e0eb68229f2a
-1fdfaa2a5247ec27bec241ee4b875dbbbadd8cdc 358799fa94bc6d08f8b22078ff1fe7a5db51cb5e
-1f88b6749231754ca325a1b313b97285a1d4edfc 01e80c39a11f23fa5220a7a554a630623dc8e1bb
-cb516050f3329623c30329483e104c05e1a351ab 9129e08116d63a09f287da152720557cb7c06d62
-6e5c37da0f331d267235556a524c9531dda231c4 247af094ae7e8a19890ae1572bafe1d42eac921b
-300a30c0bc1897414347f0c38cd416fa78af630c 050c10f1e6bccc862b68032b0c03a4a7da348d7b
-f1552977270ce4d9f3d7aa3184a2bb071b8af529 d3265f47e515754bd733d5780d1e9019eeb5eb5b
-ae09acb234de9f86c97678d817ec8e9271c79ad1 b0fb7bf74a32354934977f434063dcd886f76fd0
-83ce41e8e02faebe1713d12d0c4f799c603405f9 38c98b255244aa15a8852a07a3d61b7e76def0a1
-6e00997e0eb749f5050f9ba9eda65fdf84a420d6 8956323d4b9f859174981a5f06e5d29137482ac7
-6cd3652d845c21752b59ca2978f18fa790e7a991 bf9b8688409030428257f266c71166c896eb0722
-29d011bf68a186aa9115913d738e96ab220f470e 0458d7c37f59ec353fb36c143494c5fe70065ce8
-86ad0b3336622fd50690153f56fb8cee54b117dd a5ee26b44ced67efa0317439088713e26a395dee
-d299b3baa942cb0162d0e61bf5228760e8882fb5 e7ee859501021e31b95150771d7b2fd3b8f9d182
-56fd0630676069bcd9fd80b320df84b995f00c9d 8e7ee092835a35d1fa6ad34e259813b992ac091b
-b29efc8e61dd6e39fb0ea6dd3c5c52c05438c681 36a152f728316189d502a1bbd0df6d7eefb0bab8
-66ef6b467a55a9e661e37e2d74a95e2e783ae114 7e941ea18beed7eb31eb3afa5ccf35afa7cdbcfd
-1c7fea407bc544aaf563018d1824fdc7eed24022 0869fbbb436252bfcdd4eeffe7c06c88d8c7a449
-a36bb7a5a42b5ee7d1115132f87da911d200af96 c1ad1fcb57c044c91993fc15281cc807016591e3
-5f8f5ff77a7d17ad7fa9d956c845799472135e76 7e5908ba1e0cfd06f565992f2fd2d1e8b974c499
-370359f60c790d2be0c193a980c9eb0a53106c7c 73d51ba2a3c00ece65a85fcd70161fb8c06f063d
-60fdf23931ba6c1c5befe36ffd3ced8aad7f805a 0adce7c3712aba539fb66bf460e8ff7e3b9c5085
-b31ee59c28148b09878bc38f92d42cc966cadd07 f34e80607eab3e04e446a2ec6cbd4f0f9fada392
-3625a7b78e6b60078c1c8b8d509cbb8828d6e225 66c7626fded2993627caeb45dadeba74cd4250e7
-05df7805071bb44af500df8bb760f24c1b861e01 533737b58a8840dbe046d4ccc5d85fd174e06ed3
-f408a886bfef63d9cac096873e670d6a841dc658 447ce30e3617dc9125017d30b682a7f8841af78b
-c53703517d90f6562111aff1bd4f544417592c03 d333130926b928dfb246c28d83b43feb2abfa1b8
-f65a1b6bda6b2b89c28fb6fd9b7e31f7de1f8bf7 fe0cf447a123720910c9c22956f0157e7ae87ba1
-1b6de1aa37a57e2589e1d98cfbec2e4fee581193 e451d5f26d2bb440f8d0db93caa69fd2909ae4f4
-6ec06d3f3003748d8dec02f3cfa19b38bb08836e 4938395467640a19744b4e7c254aeba96d1a8e02
-e210bb113ea75c373e7efc52c9e3755e96e06f2c fc2bea3c5756b9dcc2a7f2869006059792587d81
-82f5b7d89aef8b4174c7fe101f72580fd204d5ed 52e58d2b40d9dddf8b058105c347fc7c5b6192b6
-eda56a404c5579ad1548ca5470908f959db8558b 4e6aa93e40fda0c0b32a25d1de2e1a8a392fad6e
-3c459bfbd03eaecf0b19ea5d98931ee00c71422c e36c7c2b19dd6d8a35d63b4f96f88cb8b496e5c2
-9f656f296db7e13bd997e663c84305441362156b 37fbe0fdd438ec4a9bc26541d3494b6738ddb570
-b78aec70232c3004b20bbb05bcb117ef7c0bd87f ae4ac9dc7536503935e28d63159b96cf3063b76f
-9ae63ae00783049e7b2540cfc296dd0e1ae156e1 4037b8b763c885ece4dcc56b342a9abc72b27bdf
-bc42d3e2116016d9f244a7531706aa7fa91c53e8 f0150f666e7807e7b46c805564ccbc4dd63db1ad
-3936cc5e89413eacbb159da1e8df72867507be0e 7a9a83fed4f1f5ab345efe87337d0bfd2d2fe093
-22f3e1b9851ed538cda93a57d2c267af46a4c71c cad894489c80fe4d1f4e83c30715bcfc413d58c2
-1153684702ac699957df121198b116b255f25b76 aad4c1dd5a891ca8c7e80d120a6280d9da588ddb
-03aeda85279d431ad6f303c4370f8abec0b0562b 48e0e44320347c2a71f3e20858d0f55ea8ddcfd9
-cb82bc3fd1781bdf22e0c21479db7f86df622ed5 13c3f56269806685c89fc21222ed1540e476bc14
-78b913570a66f3f2655593402570e950a81bf97b 06e73e4bc1beb27265b323c4a9423c47c93b8939
-fc408ebf178dd71340a6723710eaaf18d0764cd1 ea4914fa5b29e5f8ef4821866fb17f4dd90c1ecc
-9a8f0f044a84ba1bab872f12c6956f321b6eac5b ee484183237473a320fbb7f376f94cb6fe1b24cf
-d56c81b5cb848f9bc1b6ec26c46544dab7d35192 4bd29618b591cd1df9b8ca0d71b420c424a39193
-5efe1e0adeececdf6be791d4e43bf8a16ae12816 400ca1b8cabe34780a70369f0f1c4994d1de99f5
-6a7714959726c595ac04533bd10db3c3471adccb 9825fad43b7dffaf849aaa1d83ea350e6c8cb772
-1ef9a20961203323aea6fc3ecbea2ae0bf62d52d de35c481c727d34c475e0469633396a92a2833c8
-cda3b26c6f820ac3431ed3d8892331984b9def3b d497d2e053203595a7523b95f6dd203b69e324c9
-04371a8c581af07b3e0ca981eceff1537527e3e8 6c90587b08df1f5aa519cd29de076625d56c9558
-ab6ccd8fc00c175d652ada13879dd11c838488f5 50bfa7d1ae4d129b270afaa687b6d310201b369b
-0fc877fddd1b5f3ada625af272d2faefc0ccd9c7 c5ecb6272ee981283657bc93394a4e860829dd92
-fd2b1f16ee413a82af4fc2f507863ab078f1827a 7a6ce3ed4683e76d2bc862e9dd7baf284e7a24cd
-c760a3af2eeed5504230beea2e48284716c002a0 02a3adaa8914914f1c0cbad7fd8e632819299886
-491f523397ca622a066644da2b4ee83bbde6a302 9c93d45e96c1313b735effa6dd1cf965ac5bbaf8
-2ce602873497262970dd0aa3b2c63c87aa42b955 1eb7beb999384e4d2fbd2584487fb674c4bc9d95
-04b98972790eaf64200560cf5904f50ec7761581 2e0f4e3ee90ad4a22a1c6f0d11b158b256ff92fb
-02726f98aa3622a4af7cc0e1a3ff2d6065ba4cf5 a386588b6c95a1763e5c0c587a0af3f4d4c38284
-b19bd083adc013ed3931d3db784cb01c8cf2709f 72162a832577be44028c060a668d5f753e4c4e99
-4f2fef75f0b6a98cc56665e1c5f1b63ab59c5197 b7380d0152abeb8f869f726919b974b618caa921
-40ede784c111d7453c719e5807ad96dba3eae779 aa595651b768252d3a3fc2850ad2b51e3ab278a8
-f2b02f346f66ec29c2e4f07eafb8e2bc09ff84cb 70422f069c8b28d4250daa69baf8081adf3d6ae9
-6faa92f3d52d1e9ed6ad43282dba8814d587e838 d3da8481ef08f0c44c28307d85f614609eda28b4
-42e976a568f28bba866a87ed891895b7d92244ca d2f609917bc0772458ca1ace1e61ba71f6436aea
-2434f6e748f2a3ce94255bc5eddf0bb412213d52 22407091aad7b0ddbb3f489e2d74a95a6dcdba25
-876fc4752d5602d855ea6b540ef9e3a3da97290d b567dc93d4ff3a0c7d0c31e87449dcad9da4b516
-a1c883b842d2b28db266109818637fbf100c4280 eeeaa2e61bd9b438e8d06473f65eb2d26ae5019f
-81a7617954115df8119245b32070893a6e1106e5 07190334fd8b2361421068b473f003dc5d89e0b9
-f28b87edd7424d6e60687267c2b4bb137084bcb7 207020a791a5e3c847bd3f3e8f3d1df6faee9a1e
-0ec38501e95fa584ea52d8df388a1256f0a46e0a 9f038dbe1565ccc6c1e845edeeed32894c97203d
-a0c5de5fdee03a712f9f8eb3b3f1f42ee1382d36 c7184b84f4b941af0c3491433fbe760a3ab1fb40
-70b12bf86e421040110688f7e12aaab7331e0acd 0885a77319a844ba70a852f13a34a50812018006
-43871fcaeb657e24155b75b8281187a38ee1b08b a2552ee3c07e9cc4292694528b6c0422522c8e99
-c56fbbf5cb722455dcd8c92a5b3c42f1fb0bc61f a7d16868f1c82f0f2662a9f4b25caa72bd18f5f9
-69c93cda06af772d88f9093d96440849b421b56a d08910476358a9d043bbbbf7eb4343725267d44d
-0af4fc96d5554230e1de92cd5445e498f8ee034a 1043c7bf5f9fea9e93da985d3694a2db42215693
-296e733d2d3483066168d391492045f1eb02c0bb be0ecc9d9c4291b756fc9e44377cd91e5f87375e
-f07fe6517a6cfdf52c4088e26fa928bd3a6cb810 584e0fe50eb3c70d8c83e01478595df9f19a588e
-372ab77e2c5b3cb7688c1254472cf5a2eafa783b cad9b8167a279d38254b0d08de7934ce5a4c35c9
-ec69eb7b87463098dab8414fc8740a2e6807b66d d2966667b45b0f78112405b674ade0b1aa48b3de
-ee7b41ff2e6b343c798356c1b9ffdd1fefec2c8d 0c01269be0238bf7eebdd1ed3b1ea0f9fc55925e
-65a8368fb17091c24411a3c4c9ff7ed3668eaa7a fe70a65e34a64468cc0f7201d1e00a0f6a39bae6
-701e8e7c4b513dd8aa5c260f27da26defded7e03 c2be9166bf8a3205537749c18f7e34f505a72776
-953b0c66ff0c35c1802076009d45867baae6545e 768b65dc53b93b600dcaeb26f637a59778a8fc99
-00bdeab704209d30a8740cebd904c69fb81ea179 49e941fbd7872b6e45e7a6a78c49563ff2a90d7c
-9b88fd11e783cba23844c58af4441619555c2fcd 801aaa7e86afebc3e676b81d51ccf14cbb4c4f9f
-afa5994d51816b254873db44b8c45e359f0d7764 a819ea7812bde73196b3274fb9315a51d01d49bf
-3d83199a153fd411a02c6f426d0202ce210d69f5 f1551838bb96ca9959779450363d3fbf528d661b
-cfd0913f771d22f05ee824092fbb0192f10b3bed 3652bb3cca6025c6eaf56b1e3e2d76a4e9d4ed21
-3a9bdeabd5e1b85f3aafbadd8adaf33954803438 dbcedeb1b8af5a86904e357d310b0b7e986eead5
-7a28b2f08d3186742a63c9b180b31031282fe5c9 6be262afdcea94195173cc8a5ab4a271bea6520d
-d45307ed280a27d57a6b62b86d8e791b30361ae6 150447bf470bdf98b9bf676a93b14bd9b3999287
-b0329d6f33b37809149532f4356caaaabd5ce991 f1551838bb96ca9959779450363d3fbf528d661b
-158fcd981183121157e67ca400119606f22d8d78 cad6311d48b92da3cc3ca505c7582c351a3c5163
-d39f97facf0022bfb62d1b641cf88d83e6adc6ae e2193f18e47f518fb36f36d92eb575f73f3efa6c
-a74cc6c1919176b617b92cdd251596a6704cbf97 6c74efc20c10c3c80b73cce741af90105d3e33c2
-5dcfd66ce510dda66503654457a574c689316038 e04fc67faffc2a17b74adfd8d6d6496866e47806
-c9152cb6d3eed859d24749acc9b7993dc9a656fd 76cbe05c30d1c91e68d8d876462883a105f23e88
-c550aaa58cb7de60fe059dfdeda3d69bea8933d8 14e89550361899b62ffa37797f7cb09b6ab2b839
-06a69a554d7dd47fe24319a27d30c2128368edda c59dfbd9599eca88c9338b389678972f846d1da9
-f7f5b901049a9348538a547bae9bdc3e35b5b1c2 0b0ddb3a7633ae3a4fff4be97f755ee4d00f9d16
-6d411804d9a90a239fc73bdb718f0a8f654868b5 3a89b57d77da436919ae94ff8b875daf11382cbd
-975a44864e6a7a808c28a22ac3e858d640229fed 82572ea82aac1e7377617157b88172221125efda
-a83326dbb2a107fc199110427b36af6e512a6af7 7d9b166c5d68cfd4cf79244c277d4167ed7d3302
-84331c7b156630bc88cf1314591077e0391ade83 4453dd0311ed430791a4694c72811d6c8847cb14
-f3efb62592dde8878045ceefc101a27cbd089a56 cf3e597da63633375ff16050212dee147f78b0aa
-658e4bcb1522f8cb878d87a0d87994108d7eb17b 8c63548f1eccd89ff1e262039f2934efe81f54bf
-dbcf2ddc48d86d0b916d6fc83680975b6697c4b3 6d3b8ee201b5331f346c676391530033c6096aff
-0a74e77351c84ce98010700da091d4e6eb5ebd14 0c6c47deb679c8a1d21af1441acff6e5e4ee1117
-62242c59de8bfc9eb406132bb710a38aeaf5b50e c93e731bffdf36d538212498d703948e78d91d26
-174110fb3b19ae14f4563ea81d33c3081d809a15 da0efe850d4605182bca77f0bf3e9c5e72496054
-b8f14bb596ac1e561666f1cc90e18f45801368fa 7cf2c0e2e6eb09203df270f698af1bf4c821bc51
-91ac762fdab822957a090a28a6d9a3c6c1daef86 7f22929649aaaeeee3f30fa5deaf2c4118f77eb9
-8820234eae43275e1d7645f7adeb127b448e59fb cfa33d4585f74875f537a01f3a6bca477541316f
-5902cd731bd47f84e3eb52b26caaec656cdc7ed1 57304c68f7bc6031f1bb7fb5500b8d0a62e091fc
-989c5b493fe8b6aa267dc69d16f15d350788dfff e348b6e016fabdfd4149a3be65348dd06f863a62
-503f014cb292b185eb8822922edea77e0ca6559b 429b4b4afa66b2fdaebb4e713497012445d4127f
-ae2ff4be9334505e30340bebd904a311c9535701 6ec7f52dbcd740d685c2a660dff9f94829590833
-1fa0e1ef830ff529828cd75de7a80312510a2e24 7813f7385df4ed02c3be744ff79e6fafc00fb7f4
-454c60ce6cf0f21b4b270f319c495d2cf4049f29 bdd65da8908874027ec96c57b50df6b8df4e5ba3
-50f34ca16c7c84a1576c149526a516d1cacf2e9f 85fd6cb426a24bd754a36625530f2296846f2b41
-2597cdef97ef0b4f311377799a61660203b20d1e c05f1de1af50a21ee0b0767af3af3d261eaea25b
-f948d92a3138d32cf6c23a99aa9085dd45f06764 cfcefadbe13e5e5e10aa93cb8a9dc9527a95b283
-2e0eb73c618a908c4c9fff4fa74179fa69c5e517 e018478dd8c8bac9f5fe2a9db54df194d1b2986c
-99c84605cdab3d77799e11772a15712f2395fb93 269fff1ce72d4966a94eeaac2e6878b1cec420b6
-e8015d6fd583ed90783a8b7cfaf7bc9c08ef0a17 b11320d74b5f08c029901f4d3756d88203cda040
-e0c42a02af30338f44fed989588dada305353191 a4748644b39613ad9ff4848d493dd4f1e152c4ea
-1064fb5e80085f9dbb4ad798afc9f114267d1447 38904d59d9f9198a71c78a8b2f4f9ef6cd640e10
-75b9d5d24ed0d5cacc9310097e375b9eab6233a6 d8dd9c574792f64250cdc1c02dc9f682909db7fb
-b85e9375f405ea53d68f0dae29296bb562fd5c79 043860338d84ea40bece3adf1d0bd817a569aec6
-64aa6ea7ef5540a02479c135512f471af3d57354 8df8068f9d9b13a7bf1bda4a6544c122d259ea26
-cd0975de57cd5dd4cd157ae372399b241ee0c2c3 6e2919cffa0817dda94dd3350409165f2d9d7a1d
-be52dba3ae60796b0a85f824c071f1b690c5ab59 f4cba316d59f00093bb465ba5b2b54310b629bde
-5d7909d3a23cd27e821d2cdd092b956470b95bf3 4e48c4a735b7758943f9ae06c2d9735774d5990e
-40aad764dcea6c24a1752b97db2f5ce748720a86 420bf2f88d7cfe68189d4332f46c1a5cfefd7b6c
-3e496680ca4d670be784299581845b1f59e36680 3f44049961a8fda1498212afe27d9fd26e16ebdd
-7c403f48a2a7fff0699690e35e41fe7ac0aceb54 0c51ec976b879dcc09615376baa4bab7796129f8
-d4b1dacf569502ea2eb1c2cb4cc00faf3556efb7 06d059c7d90448d0ecb0044b3a2d32988eee65a5
-07d6f9b482129355bbab0ae0270401da115e3873 a455cdc3f0c68a03d50344d0b5cae6a77d886de2
-cb9448eb711700b9d83745ab8c7ed25d5cd94f2b c47cc81d7eae62e0e0e442402ff0606b0da5967c
-6bf2bfd098713be7aa2e6da692be043037093b5a 52cc5d755e6c00faa03aebada44acfa7e4ad99a0
-d2eb09154e26ba647a3fb6465947a051df159c75 7ed294968889139fba7c11a6c8f0e663a1e6f2d4
-ba7ae130face5fcbd8dc622a7891be00714e51a5 6e6159f80298c4af513c375d7b0d9986783edcdd
-4332bdba6e2a710f1a6c7fad5e48751bbc7a2a3a da3335b6050865a9152055c844bb438bf77dc9ae
-9842c31e818938941fdf63b8b93ce4eb26282bc9 d8dd9c574792f64250cdc1c02dc9f682909db7fb
-a5e3b2affd90520e8f1e021e3f5452d5cc1c79bc 1acfb437e138612bc89fda85ca839eb53efb806f
-2636a4e43b13bff6a9e1abd439c868da73d18b96 0552145710d247ae31e2d7ee3e6f2d201f8895e9
-b37ad15c8234dd24e6e52ae1e48f468524df5ce4 616ed07338cd13d36b9129399bdbca838af9c384
-16fa42eca00af782a136c88bc2d037d55388f2dd 55a11a44e58a3ab9170ea85269bb6e462cb12c85
-0e70422bbc4b4970aa4bf42d9b43986b3d192d71 6971b114db512ef09f77fb6d6fad903612304242
-1beba947fbe12ab13f42cf2b40453c4a37e870b6 8738a6c9ad425d815a7834c62623f9e13d468391
-ddf4d7d82bb9e016d4c321378c166d503160dd78 22556d549e98ef643b344048238c4c68d1d158ad
-09bf0bc8f318e814d9539a9a3ade01556714b42f cd3d17f34c7e8977fc838b8c2aeb90ead33222a5
-4efb377f9b99a351074a91a4827aea42af95cd83 123972aca0af1fb7cc3587fadf3ea96956765714
-d1a75141155d061510e54654724e5e59ce0b7bfb 025ab312f0abf68a317e7a9dd314bbc081cfd04f
-187821286ea1eb218981e7fe192666881c6b4363 fb0f8abed9d9567d73019474afd928c56289224c
-6db625e347408c3322557f438584e351ff79ebf0 10c772f214c897b52a01abddcb13dd9ef5dd368d
-cf549282a5a059e8976a5567afa6d244b6b874e6 ffa1279fd5d7bb99f7cca216e20306bdb5152059
-49c6a3ec482ef5d9f96fa263a0b601d1c121c285 18f63961a290ac87a6b2e99aa9d19f9e54a0ac58
-4bba019aa13d35a655da3c5e94cea8353f14a4ea f6d1739f377e81d5a73680378d7427a01817a94a
-84dc638679ff2095af9f1d3be1cf0a996c5d2c73 42952c320f60226a09b56cd6d1fa37418591f8ec
-94d0915d4155769c2e1053cf33ad0f1cc7ea88c9 739cef16d5cd50c7aaa2f2e993efde8b4afb7995
-5c82e2f1ed5e15450574c329cef9b105efead3b1 a073a5595e97681379473854c68cef685669a01f
-0bdd8f6e6cbb01b41a5f75e6bf2051d73a07b25d 3d6d7af6d13e07f4ba8e9eac3b34204abf2e7a4d
-72cbead6a64eb71d7e3586cef42e049ac26144e5 d59b031331f85334221e40fe2b29fc9d556719ad
-bbf98fa5da4b68bcd531a2e12a2240f2cdb11a7b bd202438d75b713e49130e4e56757f9e5fbb7c79
-76aaac8691f5ecc18fa911150607acf1c18defbe 2751814c949500632fe6d0d27b04a87e94e57d81
-e097a793467ed253738ddc3d5234ea92ce8b386e b8b9a71705e736b0678f70eeb061357b513bb361
-579da912b2a4838b53a831a54ea4ddf21d25a3ce 12e0fedd5de84829478ad6c45c5c8734f023c19c
-c2797432b44c1c4bc85827ca738c4ed40ed29792 97e2018c5be620bd61a867648e504a0d4d271bd2
-973222f2b7735cbe5386753e71148a9e6734d6db a5481669beca6aeeab438938e2f21ae7ad8c788d
-e5ad53e28d7cf0e6ef445c9ec6117abeeb976f87 fdf1cf73bd7de94614f1264073e5666becd317e0
-f7636318f8abc19d02dcea313056dfd840839ba9 0cb9a705381f3b8402707d9af35c1c9698f5fbb9
-6369d1e9d12e9df8cf46b1a5f347449771d89445 7cde8246d91b6319bc2edc67061cb4b34337963f
-1412cdfe9495b77b3ef5df60888e7f4bcdaf6803 8c8d84fa18fdb87b6041b0bfa2d3bd4e76c5d664
-3ba24d25b751a43599f58cb4b75998e2bccb4f58 01de2bc1d11c5069bd60efe4258d78710ae35430
-ffbb6a290796cf006b522ca18c568d3224130fbf 0b0697c6711e7d17ac451b4d542101e04cb550b9
-194f8b358c8ec13bbf71922485877561c64b9e26 ab25ff31fde1c07a0b116b8f6194b14474931660
-857bde0b470a64c2bb3e2491903c761324d7dcd8 df9ec2de941d61dbaaee3fe2c1f0a693fbef6d20
-d31c719719dc859afd18c48efa02da5c39f312bf 7e508d47565f15dce3577bf433892ca6bb5cf305
-e23819bab5dcc4d31ba8f0e5f89deab2713b1d87 f991788df60cd3844b1ddcae7d84a4f03857e1b3
-624edc26722d8338ed76e9bcf71418e8a1d7bd78 ae7ab994c04e48e35de25c496d5cfffe0b05f9ad
-6ec652d0ede3f1a3f59a21ba9156c6ac84d12487 c4d48a09047373bc2e75bc3bcf9dd5e4b6902bb6
-95617e6433eeb407e8c8fa2f42c297f74a2956ce 59e48e472638cc2400b755aae869fcb31bebbcba
-8f42231000c513ce75b2e698067d3b65101cbab9 ff321e5cb9f44bd0109c7475c9790c0392eb8ac1
-b5dd77b575f55ba443d7a264cafa00ba0b1a8380 d7ab716744820e591c7948e9cf42aa25b2f78a2d
-fc71f34c20221b411a0f49d1614318c77c0e6449 4a7132103d82888ef60376e3b539593d06aca220
-0740ced6bae3941afae2197b3cd9f1184c6a81e5 ec9d30a772cc1e7e67bf29b81ecdbfafafbbf2d5
-6de3c32436f1cf1052291f8b00ca063c2b3fc684 8b8cd9245cb58f6690446b0f4f1242dd39603189
-cb8e1930bfde741027d2ba11882651fbac75698d 4130d842bcfc79aab6e2b476404ad22791ef4e8f
-cf1773e11f037dbb23156d89c8a4f3b0e4a16531 111d2a709732497619f24ede54154f709936a274
-732c9127ae2397565f9ea8d5872612f1e20f1077 e24a1160faf7c75833862b6bb89e981044007033
-1b9401f22b94eaeef70dd65de21d5cd1a01cf0a6 e43a13a11d10ebd9b5c255f255cbb842dbb0da8e
-d2f8c30bcc4d5ba8f9eef6a6227f4b313d4ee9f6 e6958c96e899444f1104e430c6b9dfdd8c0809ce
-b92ebd59addda1eee7893ec8036535f1bb670a90 11d4a8895ec59441fae235cf7239dfe402c5d865
-3d9104b257f95f87c7922dfe306d0838f9f8b3a7 d35fdc73bb9bc33562060940c8c029d217425d4a
-df5dff4089694483d2bff1baef3b56000a2724be 65f6dd76c2acac36f675e69934b706c66d8c1c95
-cb89cb1c41245a8ab19275c050c5835e74dcde3a d2ab7ea8a787bc92ba38320cb014974d2bd65fdf
-1df02ed83d6368265b5f5fd1711edc48924fcf88 f796c0ab8ef7584cb950f1d957e40c8fc3b494bf
-b7ba51ee00781498e8b59aa0e378aedbbaab2bb8 0b07a31fd2d7626ae1aff8b55fd8c03b1276052b
-10abd803aa6cbce23a5aaea44d0fc9d4eb502809 40eb871c4a284794aac0bf4c0d688e681e68c0b4
-39780093e5bd2d87877510649735fcc3a1004c84 e6174e71623206aa2c7891dd9c69c2390ebf9185
-93ac6e661e0a67c78226dce31c8012bd3835c36b 70f840dc1bb455f4bcb61125ca56de957c6a36d9
-498e8233e313674aed3c08e3183a1f717946bed3 e88f0d4f1ac4569ec08ca1e021d454015b113e6b
-408594725a1f71cd1b4f3e4e46ab0c7ec031f140 d07466d2fdec05dce0425306e3301e68cd2122bb
-81d8fc27d4d96bb0d23d5da87d62a5ae3b04a72a 90aeb41b950db88cf079cfd3ec7772bed9cf907e
-e4350bc46eeb5a8e3e0572d0a09cad13208e13b7 ab25ff31fde1c07a0b116b8f6194b14474931660
-2e90c58f06ec8fd901c286412ca9a5e61730bec4 a981bb4e11c595aa6a4b1d16a519445bae522ba4
-f4e1175044aeaa673c73e61280561000b570feff 18bad4b70a96a76ef5aca8d7eb5c3665404045dc
-e04254badb1e6b2559b8c344b11bbd80a8390db0 872fd80b2b316f98da6ac4cfa8f1eb7e1f948bf4
-c794ece2ba4a0ead4ef6389a3428280a9df5acb9 b704f967a052e202d8cb8628240eb26293e568e4
-0fe67d2229d994193321ead8fa64d0d0d1eefc86 c7a07559abedf40b72a82bd83acfd6a54affb852
-0a06ed30fc0c9972ba13e31bd21a0da7b224e364 d77baca0ae8313a8385ed35489522d7cd1955ae6
-69c4286b1a883bace32748dd6b0b18f4711f1104 833bed1fd315874321db194161b4d855a1d64eb5
-b0fa5502928eff283fc3801fed1ca8c5a5ac20a7 68234aab512c8c875f19e8949228487204fc0821
-0aba66bd3c8a7e43d2e7b2c57d43ce7198d991d2 dcd8ca6c7b57ca17099a64daec611073684b7804
-eea9467def0621901bf31c25154d0e858b4a3563 15002740fdf6df64016332faa37e9fb048a0d292
-2c6e9e6608f9c42aa82ea5f4a46056696225a6ce 9f3c884e84420f69e1f81a342e62154bc14fdffc
-2629f2d089c2b1298ae89bb259d0b4d765099543 623cb253c68b2c8a1bffbdea4bfaadfa67e681eb
-a5006d90c096243e8188ba0b6ee31e2a4578ea57 4d8723c6b27e0b84be78c35137c2bce959515f68
-93c8030a8d33e9a13051891eac3529b4423156cc 19a47054b2a7ea034e897c47bfc9ff20f8de839f
-b9b04fa6c264fd3cdc703dc4b7a99630f1a0a7cd 94de17ac8c04e940ea701bc0c37cf477729baf49
-bca28a1318684f2960844673f8005e7d6a747ec8 ff9fbb73c8ed6c0f40c225b03a741dee2cbfc7dc
-6c24cdd1bae6e98fd9dd2e742749207bc4a4fdad cae029ad97ebc1ee5802d77dfaca9c59d37fc013
-aefd97f26049e4d019b5fd525eb2aac41314fff6 a3fc931c9d6748fc520bf8673103d72484a7e02a
-8b6d289daf7201815c27a18d15e0398337f60ee8 723613726d4e831dc93fee58a3195332542aff97
-6d08636b0e6789fadd137d70e91dfce97a64689b 475b7e273e123e6a903a832e62afceaec7545276
-1883646f1e7a10e827a0913bde563574fca54a13 2cb8ebbd48a5162667875abfd7dc57e3039f5200
-c3edac53acc01ee1f06125213f0646315efee613 b42b69a4449fe163906503b2755cd4451138dfc8
-c42c6be658990e773fb25d027d71259a44ae35cb 048d8f8b39a6f6a62c5743566a03dbffcf468bec
-7452f5c33d2f48cce1274228a7ba3cf045c69574 d3a4d423c2b87c8cd2d9cb21967a3792b53b103a
-498dcaa1608c0a460c560eef888da686f4c1d677 0e5b05264e4d4f87dd66765172ee5409d0d7208f
-3e7c271ef07985b3e69d90c7d93b7676467eafed 050ea594c0876ca05a6ca7c67eade65594744a39
-93e93510b24e30394180721aa69012784e74a4cc 81be5e3960adf28ab72e155b3f389fed2229267f
-c278c968b186912444047c6d3851bbcc7495e1a2 e08a45724e67692bb757d5be9c1da9155e691032
-091748ee6aaa5c5b59a98a642d51d642dc8334bf cd1e245f5e09298eb2817114b730d911fe7f78c3
-61d6d6fcc2372ff8a00400a3c4abe37d0dc6ced3 739b39668c61c51a9c245e895d979d68aa6228bd
-37badc531556c10312a64d2939dc0c90166be378 ac1e7c821c3cd154c3e34ab1398b65ff494e16c8
-20d89c24f27607defef3a368b0762ac4fb46e1e9 57fb0ba541228b568f98a6f7054308e75ae3d9b7
-b7476a4c880db121fb0fb8c62e57e10befbe3aea fb2246f5b3fdfb7a7438788b941de8013813de27
-e900f37d99b96aa72a18c6b38a264ea6b313466a c305f7a3429fa71538200d0bf4b3e76ec8d4439b
-6b4cf3065d58010bf810199000db6eaa373f5c55 8566553e735cb96803f105bb5d47faaa7ea53803
-919e271fdc51a37aab57a4e7ebbb73e9d1b967cc 920ddffbbd7e294f1919c757ae87ce72576cbe8c
-7d53b2c3a71717b3d5cf71b14da8dc6fb0c62a6c ddc012ccf7e31d0aea88cbbac472ff9be1b9547e
-df7e6e607dd4377c16865e20e90e9dff8faea7a9 77400f310f4ad82909244c673ca63f7a1bf642ef
-d9730ce0a54417ef218e843531830a3d08219130 3e8ab15d88ab2c32d6a58f786d4d4f4043e3dfc7
-8af81ddf415672225430c778cbd3bf28120d92a8 c3af33b2f4813f4080e5f9629b4ccb551db5cf61
-fd6675507663c32ecf616ff1a8c246f10ff8482a 9d5d0d5eee2ca6f43b592494fe9396832b2a4b3b
-2aeef7c8848e20c6d2dba32cf40df242e520f9b1 6ac3dc91c9cc89a0681f2aa39e5286d7e7c62e35
-8178ea3cef21929f41ffc42fb7d652893b43b55a 5575a85555035d2072aa690378ee1cd34a9a49de
-58fdbde4fe946b3fc47793e6f7b4d384aa584391 37f85fa73a5943a0970e73356726925ad4374ff9
-f7f854fe2360ae78d9842536693978967e6cc81b 2d8b86a82562c15115f8054cea103328bbee40c1
-f688d2e6167883848d203985c0846360e87fbe4b 21a810216aa88fd33cb2e56a6fbc8885c9ca5f96
-c371d90b7aecd8e139bbfddf0cf58b01e465bde2 4357d8ac0b6657a48114e1c3f7ba3d54ef500227
-8fd55ccce1db383adfbfc8286de2f2fa66975362 2b28ebd2e9bb6a4465a69328d91359183aa349b2
-dbf490fa49356ccdc4fefed07c33e541e0f68c5b e0228f00ff1af998a72c21b16f1d81ed92bb6cc4
-668aaf48ced5c0988f1b65c103d24425c92a3b59 4e2ed73b75ebc040a958ad9791d51177ff557807
-fb1d063c6e561bd18e0d43c2939b87d754a1248c 3cae55933cd65b39354425ea3c05e4a4d514b0ca
-4e36b400ef7cd6ec44d3a971d7472f544b84ca52 016d3eacdbf0c305c24794cb574b90781a589a4b
-52d99061057a08305c1b0eb835b74fe2cd8e6a1b ae14f0ef20d8906b91a956cd047ed5e30e7469c9
-196036def962306a8bae0390145ea98132c95d02 1015d9c1017f9a45a946c540a867ce477a895605
-96d01727991692783cd2e19df3e2bf0c856fadd0 6ffa6b4b6f5dd34e84e3615d5e149bff951be1b2
-62657efecfcd577a63ad0a4e0732b0a19fc449f6 cd4947bb8d1a5675e51b07cbead3f66ac8530ec2
-968314ca1ba62c3c2227c1371900924c3e81e7fd b2ed94f715bfa7bdc6bb55e1818befc647fb1fe3
-c06d06ad51f8177973c06823524e719bfbe89af1 4e2ed73b75ebc040a958ad9791d51177ff557807
-f0600fa30390b18136e5dc9e9c3b2ee043e9d4b7 30e899e262cea9cee9c6e15f569d7594081db870
-95e4b32a099e6db9106c0c4faa3c402a23a08f13 66e007a3490044f96089fccb9f649a4342a7b324
-e977f9f25e3023a9c3f7a6a0093bf4cadbca1aeb 3903768b960ebc5625ce7a86808265b7e2f83f0a
-c69a8eb17a40c99432f4c52cb3612a24a3892eaa 141f828767fdcc96f61f77da20e10fba596988e8
-ad88a721f5d66c973eeab839137aba3b2f0a295f e8f91a356515ec8c4160f44d39deb6b5e32680c7
-916cf410b8c791999f9290becc97ab4e02008ebf b252cea10ffa9b0a8c48c48fc3e0e5cf3afb9726
-3283361a35893a32922f7e0a1a735bac2ab57063 f0038c68de569430aed2878a35a789bd02a805db
-ab990f4f86cff0ea68ef2f2aedd1d8924e29cba8 6f887f9f7cf4005be877b737d4338d102cbc0553
-cfa60aef80612aaa633b014dd377b0bd1229177e 4d1f849088ac76184564ca2bb1832ce73076d650
-1baefdb8c0f5fc29136d2607d54ebc5b8f0216c3 909e21039f5d9db45da37efa5afee3313a722734
-b4f654294d030a3bb104ac7e5ea0ac355d213739 27a41810e782142cb4f255e11c6fc2f13177fcd3
-31befb5f1ea0a84029eea1c33e036c7bf70f24bd bc68c409978696c9260446e165be7e241fe29666
-71fa29ba12581c31bf2160220fd95033f1a3c5e7 e1301fbc553cc52d8435aeef87662aa2038a60f3
-0eebffcf2ad87ef7352287cc9346947f6e204a9a 3137862813ca8186949af83853f890357f6acf87
-f7fa81994ec85f7d7f89f2485f70b52e8e0f0b59 7001209bfaa2148a7d773b1a38f09abaf43b0e32
-d7f8cba4451da0f9e3849142e75d28c664cddbcf 34c7ccc8ee5d12a24c60f40ffe60a5e4f531eb8b
-5a4165225b330ed0d1ab042d735f624db9e84457 c978b13287dd7ea3c4a791bfac5133cc7f4a04bb
-cffc801cbdf6af2ae569c80c1c107568d7213e1d 73fea209a12dc436e462026f15e8adc1b4ca5fe0
-8fc902373f9d7d2dd66ccb5d822d1c4866a78034 6aedddc22d4c2eefc99011bb62d40da6106d5174
-d70f897a7ec26b5c62305b4406c78a3f2f0bb58a e4943f3688b67fb3b7b369fef783931cc5354f0d
-fd96fc0aab64c63b64782a9685a82e6b899e1d40 4d0f7756e77e4402fd1d948d2d51adb6d84add71
-4d482c1ed0418373953307ac0b1a8b3f74cfa087 8917c60b61673f1e75119a773846133f39c7d956
-f39317b1285ff5542a5b350edf9ffcd7e9f9b546 67b845f5a4d202cd789209e147b9be58a49b86c6
-88a57da067907edb06847e2f95c955d07ff23552 4dd77b38eeea7ff33e3886187477af98e575ac2b
-502dd5d4bf92acae2ac590f5682e2672448178a6 89f65beb612909e25c6b2ade44e34a6c09ed69b0
-79b64c80b088d34862d30b6f8c47b32e3f9b65c2 60e703d4b96a47c56f4c0bb62ddff8e87b54254d
-fda42fb1792e678da7a23a81adcebebcfe6ca8f1 a6286560b0bdadf00b74f7667647465c46dae36d
-ac8228f1029fe28dc0f19495832803d060de152d 35d686bea37c83ac0db09ce0f4a1e74b20f2e46d
-ed8a86bd4e98d0a934716291be143840dca4e10e 3f007f9e9aa4a8e151b23b061fd0f915a46b637b
-dc1de70383debee017b994f6af241c1e6c3470ae b4ca0db0b1a5bec7bc2b0b1cfe778a4ee2593ced
-2a1c21a395640d4a385f4166a2046b94a8fa54ec c97a9dc989a0b3987cac451e1c8e8e0f045d41f0
-eff9f33ce77d0d19381cb51dca76bc28c4844140 558f64d2138e90fe8b7f6b821121fbb20d7f1d9d
-30c8def68fb1b8ebe430ec2072363450fc301ce7 a7e83240d20f802d9916cb50a7d310f9baaa1e0a
-d0462dbe67d10cd92aa17cfe810acda5c3eb71be 4af7bc1a86d02eaddaf3db3e9203754223fa4938
-cbbca38ca2c0622df94970d9c1b92d78ed362c2a b06ef03691e7ea150fdd364dc01c319b4840cf8b
-a634f2bb9057bfe777dac731d882deb6fa0af56d b7dba0e19f4d5474e184b492ba12afd24e951c6d
-cf5510a36240a5c4dee3962628da835dbd0442ea fb1d2433675cef2c51da8c24947c77d00d11a910
-50335bc32c044d539ee4d1dac3a2cf26d0f6378a a119a451c4981193632eb24daa4997d989df6ed2
-90d55d50e9719e1876721458a75cf1d6297ad0e2 049e9216339fc9443bb927fac89245cafc884495
-04aacc6e4d669cbad0638ab7b3109c3bddf5c678 c4349ba0ad68273c6f265f64732aa3de1c8d199d
-d18bc720b2d268f6aa57091e336e4e9750ab260b 6c47c9c3ed9548ef90b3e62e2c6d762d7d3fafee
-c8c5938cf9b5e02103ff8f54a5d0eab51440a2fa 7f140c04878a86a6a31017c3f1e51e2c3fafcfee
-d10496a7939e713a2c1e27d91e5b62a08a8f8a3c 3f947b99c0e5b687fba40e072c123e6587880037
-dcea903b2faa9fda76e530885f1c824de665de5b 5f2f033d1ce8b194bf77c0cdc3e16b3300c36880
-ab75ce7b28f89512946e6f2b6fff19610fa14454 5faa5af8ecd8513e748724eeea43db86fa21b205
-e122dbe0d6743bea15015d5e32187115e0d8c150 fbf9589247c1dbf2342a06916f02f4edbd18d80b
-538877c7c6c31ae8ddfe27e7606e513bba88fef4 9aba0e62ed040bca4c2d6a88230e696b0a9794e6
-656b44ec7036dc7bca92ed9a065d13596d57981e 641a560f6bee2c2d4081581fe07e361761115d70
-346607fc4baf030b4a3fca8ec79105a9be17b3a0 66e2978cba5c3f7c27efd5c60cee0f868390a1ce
-08c7489b09ce496c367eb4776e9e22e68ee73a0e a4121b099832ab8c69466fcb485878db1d335a6d
-cdd52d9a80f6bd655b1313bf076cf83eee8d2f86 1aac562edb844480f622d8ac5a5cf39c93f9215a
-124d20a23fe53077013f8c8561ff3fc2470381bf bab26f213b3fb9edcc39f496d16f0bb0f64338e1
-a023d3462cd98c254565debd76b4e4de3a997c09 8ff38ef91349d66907e0c1113e00c05eb9b035f6
-595f3959b2c4ea3a6ad08481f7d17d2ef04f87b6 03806bc11e0360298fa6d0ad135eb6b53f9af4bd
-3c1b0908ac10fd6ba7968e3c10ae119f888a41ff 7dfdc396cf01b282b230cdd4e62a6f564d9b3649
-bbaf291fac444cb7a8efc95135145dbec5043c44 7d5908808913cf36d05d974b9c481bd288bf7f9b
-bfac357d7109ad83ecf2ad41932b847cae063c64 5ac3e92ee1e35c3d096d9ce16dbeb7e6a601f6a7
-9358fb102f6ef046cd4a74362cad92750c3c5feb dba83f40cbec1cb012382185a56a06ab1511dc09
-292638f35b96256a3323d3657b242bc420f1043f c3d9823eeac47cfa1dae57fc16c395b10237404d
-e1e1fa50ac5ec7a9ef317c7ffa95fee651dadd77 0e4f810341007a4ef21f1dd11b07ba078d738ee5
-bda4d3e18dc32ea2257a1ebf8125701287eebb21 e667c4a0ad63eb6c8a85596b2a5e23b7884c7e0d
-b36345f647473f1d04f3b7569aa0cf9fd77082ee ba6ac2233581f2848a0ac3124bfe7a817996e0ea
-aa768b1a408432883e3f8585bf6ad8654f3dbac3 1f85f1806eb2bbf70b9012f92041e4d917ef4fe6
-ce40b51fcda7f28b856f5787af281cd870b439bd bfd5b3f6142907a4c07238653af3609bd67e9b1e
-f3cc655f16bf53a618267595f6284236aab0e971 1be7c1d47323e66421d0d5c466b55d1bc2a40178
-8ae7097be88658a781eb9af6c1128e768d853789 2b99032170e68d0adec0a1ac15b8aec305b856d0
-80b6576fbd99daebb78f726cebb9f10654c74942 aaece0cc85f4c4bb9bf8f693c7c4bf621ab7cd95
-fb789a5d4915403a67759049d3bc61142878fa34 e159e9faedf97d5bbae1b7a0186271c99b2617fa
-c74639478a739e14d6b891282df2a97b17055503 363bac410f0b12492854aff8540e6980480d62b1
-4783102fa30ce7e04143b7ee3aa9766eb5322243 38890d0764aba96373141bf1fc2cbcb31898889f
-e7d63d3811f7a1431416c828beaca2ee31c7d683 495376969b367ad29c161e2fb45e39e8a0bd1d8e
-f9ccabe3a1ce85c3a71fb50902f8d2c5547cf18d 0e148d3e4bd17d3efb1cbe9c2093f7af9ca47332
-ad08a6f71b370e82abfd7327f41023df919b77ad a6d626c1d5839e0b894fb244ca7a71fc6d32ddb6
-b2fc0e5c722c1d5ba502ac7c4b73d4d0aac0af08 f63ba06971a8346cb152c9181bc5af0032daf07c
-cda322cd76299de466da6ae6db9503710826f804 bfe45c9375f3d7d9d437dcae8c0263cf319104e0
-8f13f1823b56cdda9605f3a01935e3c3c9127490 1436c75207b12165b809bf0ba4bb1d6af978cf43
-6b0b5f6372c3cb8e7fc142d3e806afa62c79c51e 6a92ba530892191e092da0769f30eda8252c8134
-61df1f509b04680d7730c29ba6682772509e908c ccfbefd042c5c1edc6ee6fce4a378e8a433f2be3
-08c3d302ddb2fe93663126b5b984078bda753334 604682b99d235a9573e111d2a248129b9bae7698
-ccbefe063d16d97e2a0d85406057fc40611a6450 e3173743221a64f7cdac0e5aa9caca11087969e0
-723445aca3a682b5179ff5e4ff806d94f4b05b65 139a9065712f3f89e47ec55197891e5895a7ff76
-2df66dea2e73e50f8d9846e21823f54feb81b108 d2d3e0a9b7f03866939162808afec911c68f8cd4
-c1a50f33f0c2c4d1d7dc9a03d1e20ae77f7190fa 1178481b469d063924ef43cabeaaf6278f30ee4e
-210b28ab98d3bc1327777e0b484c3da9ccfca589 e017c3842a54dd1b20356509b72f628fc21fe981
-713d1511c3f591ae5deb657e817012fa7e0bf7cd fd7f2d75e33ff133f38388c55c00fb1ca60ff3cf
-ef13b8add8b72895ffc9faec5fe95fa30e872b01 80f9371ab7df62447ef056476d59ccbbf128ed1d
-b7f04dafbe9592e217eb0f0833a0e5a5f2a73824 a7e85605fab92346afcc069240ffcb8b61d03774
-02cb6f00a78a9ac48585bb8f4f90ca628764c6ea 2ab48d6103be2a60f21f159221009e3e71ce8102
-b19bfcd07dd847b5dc884a8922ac703f0dbb2ec1 18638d30536dd3a99332f0b4af3dee2a11c2667d
-1a0a5d0c38c1d677418befb39a5ef4321c47ffa6 fbea36f04d3be008c1fca73df18c0e7058694625
-9dc1742b8605a54d2026f8cc2305905a4c2e7e40 814997b6c4c79008d3bc76a8f8da216856b11798
-1ef8ac89f2b2c0cc10f7d44950d8a886c7ad9260 db1105211e47d7c7732c589722c95cb36a3706ba
-5f2969e43a1939ab0833add6974d1627f422cb50 187300935542c1ff187bf28ec2633ae0b7cd79b5
-c6e7ea80173dbb990bf343f85efb2f785e424e3e 0d4e490f57d83503409640a51a8b88eaa79e30f3
-a04ecab584756f06698b03b3ba34fb5e76a8f419 65ecd28d93ce8a08d5dd876478b11ba878bf0951
-b53b6046ac7f41f669f6fbbe52edec19e8e4d9fb 0edd58dfea3a5ad3368bc109a88d54c54b33c6fc
-68d04f201b9240ffcf89248a9eb262bfce9c356c e8d512e9d60e5d66afb7e7b2f29576b76c16a360
-34c2351bc5da1952501412c368e265eb83ee1cb1 9fb2d6e63b5362c9b820dca562902c083d39683d
-a698dc386e261053ef1eb503416a5a365c6dbb98 ea7ea11dba4f022f995203eecf472e6e1a44558c
-bfe9fd72a031a8ca3b2a94980be5702307b7ed8e f6507238f7cc30e3ffcbe46fa5f7306a4568b2b2
-3028725176770a74928d5eae99712bdbf6178db0 db5bbd729ad572881b3b17ab4c805ce2e4e4b2ba
-8a09047526ee5721947c37b630497b07a42d1b45 c5b9a65720640dfc839891fc1de31efe339ba65d
-efd1039b45e07d02c17c39a9a9f717ce1e8c6ff6 93b89083ea290ab013eb7209a46b364d11a2aaf4
-415975a6dad51da65cc73d4b4ce2154d9b81e583 85ede94e3a0166c0b2556a08471f78758b79d872
-1a383d469d57de913a61094835da798b897a439d c4cef74958a364c96381e3763778476619fe664a
-6ac98cc28b9a2798b3697071dcd5e9d7327280db c4cef74958a364c96381e3763778476619fe664a
-ebb442ace455b3c529ad129588b2364163ebf497 c4cef74958a364c96381e3763778476619fe664a
-5e10bf430e77bb5b34033b6a0dfc73d2b399bdea 8c2132891758e9e7a93956acc11b1a8008cc284e
-6295db1af770d048d8364af78c07ec8a61459828 b6d24c5006803951da7ee84fc0546236d601aaf0
-29cfe7b04dedb4d2d4af66e24b677dfec1386f97 2d39503d5c8d39320a2ad1aacf882e03eac1daa0
-f59970c7f3f9287c2688122a50c84371c06465bf 1d5a3fbd2494c336af984f75ce273155427f15df
-c93e3b9d28568a9ac2f97bd9d4d7cc1b05d6a0c4 37521557be31fa13cfceac636bc98c50dd8da884
-d94cfb8b10b2c686cddcfad2601c2823207bd06e a213e12916b61eca420c854a6b44d1368c8eb17a
-402233cb215e646fa728a3abd1ddb2b133e08df0 53a3a7bf2b82fad4e92dfc52aa7a0d2817694406
-9362e94aa50b32091f40a00fa3475ba13e830fec 25f04b026d5fa186d73268dc3d41d851b1a225bd
-6281994eb88b439e0340c63cc96a6ce028fee849 4cfd2a38c57623c3d044da5236e43f1372721608
-a2d28852c4f5a598147e87b7026e24c00b5a772d 7c91d109e087c5ae3a9a6565aa5aab80ad57f3ad
-7c078099b3eb9ff6c65bb9d0a437dc59bedd5dbb d43412d5e086fc8428c5150e961bf9fc0784bd2f
-22de286d6e435b91ee6681d30e20b64b3284c467 7881659c02099b25e9c4a17668b4ed5ca716b0e8
-062f073c331b76be225743ddfd343ce94929ab38 067895c89f93e9ed0871ff90b82397ec53874526
-2c4874a8b5a6e454a3262167ed8ea85df5b0b60f 706a1b17972c027b1934af5b66f303dd23135592
-b1eee0cb95a21efff7b0eedf929df34af17140c3 77695c7f33e62e4108e1163afd05df823a4fe889
-3e24e0d7860fb5dda6a988dd7455eb0105e3848e db8d67fab0f3b281cb578698a4a73dd41893c8d0
-d9d54d018c4d71e4096d340e0dc2f6ad392c41f0 c61b8bd194b021cb495e2e9145d7342d7ad3a085
-9d824ee929944f7bbf21e50615264e6c104be940 da06dfba2f391a8ec410f1fe700f4c25a56a9600
-74d5726851119b8318c7db9341252f11efa9d904 367f8bef00fc0917d5cb7257cea9ddc10da09a67
-7810ca4be196b8c17ef57a030651a442b51d6120 2d0a647eb9762befe4dbfd47f4e3a739be249fb4
-370cfb36805c500a45486732dba066beda7f441e 93b89083ea290ab013eb7209a46b364d11a2aaf4
-da4dc2ba6919b9b6ac4136013e9cb7343d3230bf 34859d26573c6a90ef12f30071b371fb53f03c0c
-fa9ba312a7fb03ede3954711fcd52af278d3f540 e9c1922cb10ed06745a9788e0dc5e9d5000dcccb
-fbc5efce40fa52e30114728fe318f3a49376eec6 4b7fec99d12aacdc868bf70a2fb3c0e8f22051d8
-71f49191cd8a7662d88730314cf95c8184e9cf70 a3d7f471b8e7b903d54810be07395fef8c2df0dd
-fe758b5498a785f185dba02650cbdc13e367c6d2 b10a3742144792904ad25e42ad988bfe480c19a3
-6da983aadb55789b0df093fe1f5f5953093ee4c7 20e9e2e00ff524aafa3938bb8c21bd7ba1ad375e
-a072fb2455a55aad2500cfd0dd6b9902e48991c3 6295cf77d9cdb7f1dce8a0e49512f1afd85b3b8a
-f08f0f536ada13ae0752e33010ff388966ddfbfa f64e04e2172728b883884065f37184ef13390589
-d3be3fa514d20cd03464bb644033a701678fd1a3 43904d9b1878b1d557b192a64c795ad43edc321b
-ca5bd3012624e7af5512a53cca97375d49d583d9 f96dd9c5cea002aba9670caf66ed37b4ee4c6d7e
-06bfa49cc30e608691f0d6ece06ea049d159dbd0 81cd95a9e09f5c1607b5312d63321632cbfab14e
-9eb17c5e6a9636d55d40e7a7a9684270eccbb29b 13fcdcf8f1d26468dd7888212a25b3d3124115ac
-ae94546e85ecacb654e74ac08fd8e3afe754f5a7 ed7119c1a4f9762b41bb5e2d7678b3bee6080ca1
-8c0f957629014b7eb41dfeb964b755174e0c6a3d 2269502900333692f8c6db4b4aa486dc883a6d45
-5d5f45b4526b06c22a5f84351198b1ce69ec2d7f 43904d9b1878b1d557b192a64c795ad43edc321b
-21448402a1873768af175dbf7c34fae1d9b2d105 2269502900333692f8c6db4b4aa486dc883a6d45
-9d2a2c90cfa077fbf1a2e18a2925656edf2a9664 9494ab81d3a940daca6751a104a8e4ef605f2441
-3bc973c2b87bb34b1afb4f5c816b4b8d79276256 2269502900333692f8c6db4b4aa486dc883a6d45
-441ed5bbe30a4d6dbeed8f1d356e820ef63e49f5 9494ab81d3a940daca6751a104a8e4ef605f2441
-82b6cbe08944dd3bd84d0b0575fb18e70220a389 8ad75986254a889cafbbb798b77f7f1564e06f8e
-6803fe1a9ffdb30afe4f02e6335fbea489cc8577 ca22add07eb5f9c705d80187d975f1350ffdc756
-fb90a62de7febd2dbf94dae6054860deb5fb48f2 eb6b8bcad772f7544244225d0e15a31f1921cd0d
-c39907a1da91047f7f6327721606466837e479f7 cb4690e1e5a77aeaa6b09cc8fecf7a517435946b
-d394741d3d02d6cf5f7b0df270d49d049a7ba498 a23b8a6a2297c7f756fa3fd70c8de117470295d5
-daba4cd23fdc09c3d831b9dd16e3e850228cf721 d4eb11e98f75c7953b462b4ea7e88fbbc75b12b3
-6eef888d0c7b8681848be2b6e9fa545e407d4e60 64297b0373121e021237720582494994d01f8b22
-c58771ee94bac0b99fe55e9b70202f94b13f4dbf e6e0aa9366c6f37a0a306d220a915427c6b539c8
-d988d2911227adcb6e2b453760c545d14c92c273 b95f81f42bf560530a1ba7c75826408701d335b2
-6f88aa60b6c2fd36dce8dc5732b03b4a0f97c68c db80d8a83ecb42500e9584b4093c7029895d9da5
-702eaeab362480141d91db4765c22315c2ce4486 d282c8b625d1b3357e80b790e7db52b041a77dad
-bfc409903a8dac21718b810fd5e00b0deb4293ee f551c09384fe38070574656ac0e9816466bd12bb
-eb6b84bfe20f4cfcf30f0ecd668e4a7efc0250ef 5b3817b369edcdd5414091d759389651b3fd0c81
-a891c91f355ed71d8fec1606a751701fdf2ed5da bcad1c558cad0f33b94e97710cfd2b55f69d1e2f
-25af75a9ebb3baffd8faa139db3339073d40a5eb 808ef23f59573169a32f536686307f627193cfea
-22c3eba050210112745f05b3049aafaf79443ce2 edcdbff873dfcaa772668f6ff5b8ae7a6f5a2259
-d1addca31adfc14556a1c06ad072e286def5de69 f1aa0be720182804e556466ba26da0ddf69e518e
-5c7c73d3d2d0a0c53a0700fef1390c5ab798b7b2 e5f40402b457a47aa4350b8bc2d06ddeb0af6467
-4ba5fa3de6c6bc2f75b2133715341b0d9c10fef5 2a649a342eff09d8c8867fad261038780245b4c2
-de69a9907b5d6abfbf2346bb00d23a0e30047faf d3aa8d0c8af7d8bc55ab852965d3d79d5831e013
-c826b4fd509e971d04eebbcaa600e63cd9ec7160 c1b147c28d8558125b1f75d6ad923608de52ead4
-affae05148b8c1f0078e782e941cb1beae99c212 d96cf76da7e44338535743fe6f7e221193ba9301
-3c96efeaeca15aa4c640c9b02f7abb71919d1c74 2dbdd68ffe152b00012194dde99525a2dcf44761
-e14caa87d57b76c1ef3c4e6f34070332399dc025 accd029614e24362b4ba67e7809f8ecff3a88b64
-4f1a71f45eb97aec3c54d9e5a62aaeaa0c77068a 1ac443a0d5cc7def0815792d3932e7cadfc5f8a7
-8d2c5e557aac174c92fa0429efd8e68fdc966a18 5d3eca6bd2e5df053506486af1cd96aff25347c4
-3d550a700f415d37d436618de7b17a20902ee1b5 f2b951e080edfdc4e9a5c21aefb9ae0894cbedae
-ca0272251a0db1c6adad4ac66268a4bdec29cfe2 fe039705747d5a414170de9898b96f076542ddf5
-726e671762535cd4b42924fc61f820464d992358 6a5fa4d28e915b4e4c0f2b2c1e1c6e573fe031ff
-23e1f9e1f54da98f6558c9c75aa45bd8eb913947 c8960fd3e7bf14a7299d8323c9a401b208f32cc8
-35d6e78c1860fcdfd5c2c39cb5a3aa5346aa7596 cb961d7cce8d9172744d171fb176750cd971b8b7
-3788986d42c494fe6190782ab8d4b8841da66fcf 32692d394a288a7bd53190eb821ee2358c0fa717
-ec821b5abd89e545fda7e6812b7d7a9aa0a223c4 0f4c5a5898814bceb259067f72e756fa5c452f4b
-318b77a26509af4ba4492af795eef44a58df1045 e976ef1b5720ec19839188e67d4db8e9420dce74
-d638ae2ec77a5ef0e241d9bc2a1391a506ee2652 eafe1f2c7f99dbed5bbdee23f33e7f67785d352b
-b05e1dfe74fa596e604a3a9b827a76ca46cfbfac cac4eb41cbac182da4e040190a190facb3f06c1a
-026fec2ce2a56b9f94ee02b90aa2576c860d5bcb b1c73840fff9b94ee99a732d5ed96f67e846daf8
-733948bd2637a4a1e03ad6cb440cce8ba1661d0f 30fbbeb9b2773df0acd7e3c0356e11880f6a8e64
-89cbdfbd45b160309167a0db12bf1d4af4e48eaa af742ca9dda74bd19e2687d967bf9a9eecf4fb91
-487bfb851f09e8287863b159dbbb12882c7fe3e2 762f79256da97e9934983bee059a88efdad21770
-bb58c63bfd2ad57501557fd2b5b24eefbd89bdfe 855719c847d8c9fae60a6f705bff4b78343f7a9a
-09e1316e38c3cd479c2621fde3859984cf6720f0 996eadfa493e3d253d3000c84d76be619e089834
-f8fd9217e6c6053cbfb6793856a112a70952a0b5 d0584dd66a4e37168bdd9b0ee3cccf1d4abd10ba
-a01aac57a1024caff8ee820ff6a219c0173f4d3d 394a9a5c70bbbe64de0932cf285c3d273407c95a
-618807ff7903c229c2f22abfb8f33374d8d6fd3e 2631c6db36a7372dd6095d03b1e223b22db963c7
-497bad51e5d571adf364924f8f32c0109c5ef29b b4dec2b7a5bf67adb8b2acb1602fa84079581701
-5b0d689e393aefd461721f4e9921109d8e9e022b 544fafeaca4becb533260baebeb69a5a2ecbf207
-ec897a1dc550c6ccc09b9b0a438e594e82872fc4 a420bfa36e368c4a3d1cd39435d8155065d4a48f
-dfb5cbe6fb5d376b8ee1f4c2770413c66271860f 2a796571dfb2b34575f2cef279a6b2c05a80e66b
-9b7b1fa634001f938c20918668325baf8e9561e5 4eec7df237b745867dac91ce53ed8b1d10adf3c5
-c35786aeaedc44b6e012602b169204d5de86b2bd dee3202cf6660171ed3aa325a7e587798874cec3
-98ed7851d739a5f99737e2b2171da29ffec2d239 f2429995a8c0d81b744d65b246fddd19b57e4b99
-b8f222e491c90986fc1472d212f3d8e2f71c4cf4 74a86a500f7b2a2e2ed02a2bbf28d570327711ee
-f7cd9a0fbc41302c66691e040ffa85e12d5951d5 aa5f1bb631ceb84cef1dc69f2143e3e121a9af13
-8171e7a4a9315b9f0c8e4ac9f1f4e594c1759f4a 169c65ea825313ba2572187bbfb2e10daa88015d
-ebd4c22d99a46b50686eb61f82a57f52e6bac6ec 88c1fac007565279cab1cda68d812c24e9a753cd
-c3cc8279e200d667f832972e21478966d2f5679f 3a016902ab28a4e63d5782fe2679a6ebe35c9d43
-c086a49da6df81ec20f8cee02e1e8250c650204f f8de72797b31bfc6f292a47e99cad944f9ec3ada
-3495749d6fb11cbe9911a20fdc4e34a50d704863 6463eb25bdd64c6b6102728e315be44408ebb5ee
-d4416cc800aa81ad834a0f68cbcbe74613f11ef4 44628feee7a7e180c18a86095f0ac2e8e2a06c70
-487f651a6e1dd67813349449410b3e3f4a788ea4 4d47deabf7d46db97e59769a8de1832aad093910
-c530986d54256f638898619b0791d97b33c36aaa c4cef74958a364c96381e3763778476619fe664a
-6a25166209a8320ec37b35c3baeaa1c1d35ee2f6 f1aa0be720182804e556466ba26da0ddf69e518e
-55bdbddcc19f14b101cea98c9e7775f9e6d497fe f1aa0be720182804e556466ba26da0ddf69e518e
-e1dc1f0defed003d6deee760dc742d676d934ae6 2a649a342eff09d8c8867fad261038780245b4c2
-e0cf93e6fd78b70eb1172ea17cf98c17ef6d3cc0 4d47deabf7d46db97e59769a8de1832aad093910
-7d722b9785bf86664fde076f3ff0008675ecada4 7df1b30d3d3dd9e6e6d8eff503988c3900e57ee2
-7ef9c360080c08b35c87287054d175685436d48f 7df1b30d3d3dd9e6e6d8eff503988c3900e57ee2
-420bedfc0094eeedcdb169f26cb0a96ecad69f92 2a954cb8b93357025497485ff1df787ad1280fa5
-a6cdf20d0fd9b76388e2bd2186e735c3a332ce70 6a48ba33a8cfe9a577c3eae918af5ded287e4b2f
-491fd401d437ae7c59ead070d1ad94f3818a91ca f6418125c4638b1c682c5f18e0f30d580b8d0218
-f88b89a4241580f5aef67f50e906f8082b9167b6 cbe7afb327a019bcf09273f9bd08417a7953cf53
-74691f76d358a9ca51c04376c7aa4f02dd019216 c8933e1ed3336468bedc1cc41fdc1f3f32747e77
-4b2585838a0e4b77558a334ae93a17eb5291fabb cdd704cbc18605e537b86bdb346c2897960f18d5
-11566ee3aed3d854edcf3703fe92b28addbd91f3 b5ff65f72723e2738ca100c1895f098d69dae178
-eccf7256dfe84a14c95957a363cbf078e575e1bf 4d47deabf7d46db97e59769a8de1832aad093910
-f3a17cc87fc1ae3fd84c215698f3e5eba6822f77 d3ee6470df5fa910a012b0a921fc8705afdf14ad
-4bb9b2c204ea49548e733fb60f0fa9bd236019be 2bfcce5fab37e3595c598a61f8e98fefee6b4d97
-4b6226a4fe72427c1234de1a5f5b5a46bf663f65 ced3f5f05530f68641f60a1e704889d31b38648f
-92546a46387e5a27d69015fdf5cd51b8dd4d83d2 11277cfb7acd27ad527eef1e408d5afb0734fd37
-6e902e2bf714316b3e8abff7fd6f3ec527d165cc 353466a8c6bed8b57d4b26532ea1e4f1c92e755f
-2eb737e15ae1c26e02bfa4f1a18a4081591f6a6f a9b194d9fde3a1a3ec0478ecff71b77fdc332ed6
-a10886fe13e594572def60be2a928bd58822ab7d 7b7fee3232c166fb35c076cad8cb0113fa5e8684
-17f2826bc661876eec714e9e4ebe7ffe47416655 86c07327019f3adfde4faf781c519d76932dfdae
-c5decb191b4d79c798c07725847fb4111f7b8580 67ee0d1221310232bbdd5b4ec94a8affbd59c2d9
-e8f1156b09881353ff787db8ffc9976c4337c723 b4298d3fab5492dec7fcfb182c0366faccca58b0
-9517bf9e208581e73dea719845168ae6d608520f f43496566b5280c79b7ccd46a0cc43a1f1887cbe
-b184bcb31bcdfe170a5a918282f865baeeca158e 6893eebeb62f090b01cf8d7b8b2b61e10eed804d
-ccb6645ffe31439cd2b676d50f8adbf7a61c1879 704850e0dcac42aee450eb2c186a0b5eecaf8661
-859aa350ac9fd986bd9fcf54bf6e06b23ed51424 44ae8d8ce1aad47ad3a21d00677b6257b700be3a
-6df380e4d7f0dffa1fdd13dd6b169e0971267d86 3a62bdc661c668876c878fc175aa1706e56d3f63
-fb64c3648595e785168736b994e1c72442340ad0 3dc715e09b0c3123abbf1aadf3d3cd7888d17fdc
-e588fc1fe940d5406ad336d946d0f63c5e44d089 7df1b30d3d3dd9e6e6d8eff503988c3900e57ee2
-a4e46ae10d081b56dea13a9861843dfb8b16149b 7df1b30d3d3dd9e6e6d8eff503988c3900e57ee2
-add21f5d5f1d1dcdd046d54fa5c307155d9dfdd5 87e50f3a103b59dbcf52c1c2334fd501cc54540f
-1cd391103dd4721b562fd07a972d2a3cb4b04038 53e395f59fc689a9c78077bd3f9cf93462838200
-6b99586e89ef2caff108baf56c5f2680c7ca93d6 56989eaf965cdf18cc09e5c08ba59c5cadd2c3f7
-e0c0779b6cafcbf1a06cdb417c7780cefeac7106 77d27c66afebc8f85f0e8fc5ddd65be3ad7eb104
-59cd49098bbf38965337da91e61647401a627a75 8dc7a7e0d87c174edd96fec487da1eb4df89339b
-afefe6e49a2329c91ce28ffd2ad5c6c43e73aa7a b0a435ffbc534f0766850eaa7e8d834c579236ab
-5339ccc3778145232ff34227f3868f978663e2f2 d65664801a46d4b32c6c807e2f122ebc6ebeb55b
-88307eb87e1e8d748861e091efbc79d49279f4eb a2139f9f6324da67205e4b495f47a0908bf8bdde
-5e425f3510a008da307cc64416a98a0011e18a16 aa561f30046dc36053fe39f8cf67d67e4c5b1282
-b6c15687405331cbbbfae646b12b4b8ac589c6f2 8dd910db7dc4e0d969ddd1563a56975b06c06165
-bb3f11df191f1b7cd96d36c8eeedb179d1aa3a28 103174156595d4541ea0ef2e9088e74c313663d2
-f7135b0031e8e7de9c13556f28d5968997a004ea 594b9324d63d28f6ff42733eecacb6802186d740
-bf09790dd86748789ea8047096ccc4ab2ea5fb9f dcb0ff30a6c4020753a967fe530229496aeaa468
-b9df8417f7b514d92ff535abc422560ea11b8123 e3dd60e80a2dc30e47b3ccf3965621f6dd92c6d2
-3ac2000b579dd026ab899dc89c8fd49536a18014 40f70afdfa6062fe940f65b72acbb34d2e560632
-bd7ca1504fefedf6ec344205a0d9124aa85bc29e 6689123b821330db212d1508fe4d9c8459183b89
-c605588cd61371a60de81220325c4e8bef290d65 ca3690d88567d45f5d4898ce3ff39d884230a398
-bf145b8990d2893a84c44927e7c6a177e5c6e856 eeb745937db3d42739fba84956f966bb70ec31b8
-73075b8cab1fc9b6708334c0706a7bd40d1977ef 53e395f59fc689a9c78077bd3f9cf93462838200
-77a7923ca5c1dc0010b51728461c7b4c57a3961f 53e395f59fc689a9c78077bd3f9cf93462838200
-88d7ee4ebab60ab5293ee96c94a1d0bd53ab47d9 eeb745937db3d42739fba84956f966bb70ec31b8
-e0ab53a9e2d07b89700b45f8a62abccbfa303d35 ead161b35c424f6c9bbc9eaeacbe10c6656e7ec1
-1a7378e6ebc4703755f5c8ab3a47f46eee6e95ea 9d88172678e180c0aa6e36e8cf2ced7c174185df
-05e13b0e1a39a6636e9169c6d56051208b86590b 1446b72546314872748f4547473d31492c54d587
-35f8cc4fc50b3e97478ae7f1ee8ba5ad6cb6996d 4925933a1b1ff452831cd5418b401e8dac9d9bfa
-5489695a5e34a9b8ed70ebadffbaaaeeaea001aa 17ca015423f9be8d38a29c91d1977dd21e9f3c05
-0a02873537bbef356978410d59774e59a2cbb09b 57286d898975e17c91d269193f368195223582da
-4cd014b1cc4181dc7a2efb1b67902437c480b1d4 e3d7b389a6fa40296cf19311bcabbc6f909cd485
-7b3e2ff232af25552de562acdcc053c7bcb6b38c c247107706638529fd203888a936c8c6e46e8e1f
-262b56dda918c24e5a4f08646f072ce98b367d93 b89abcf7dea372c212b943e90312f514ba769e2d
-15bd6281787f10675b03ff856728b83d5bf81f94 9c59c83aaf3abdaf50ea136b2c03aaf11978b207
-dcc436d4d686586e1af84053f2b7f5ccaa9e866b b44e229811d34054f409d5cfd55a016053bf37e1
-9ea4a5b27d6b0e9242a03c356dca65b51123b796 192acdbc858ac644e73c0709efcd42356a41f9e0
-852489663584f205740a22229399b6bf81a795b7 c5cfe1fc7be8226c788bfea08756b7a38e8004b8
-4bd6235c140a4cb7de78530c0b60806484d10d0c e2301f85b9b3d5e0e64eddce5c4cfe97c120b9c9
-b37f6c411dbb54c35f5fb0dbd00347591169b12c da8e1a9fb38159fd251f2813f0c7aec0a77995be
-4a93e4630d6f10aea5881bfd65aacf0ffbc2f424 ca54adc858d9ff2922a796db1fabb886eb4b3b5b
-31f2532d0819bcb56f83e15257858883114f8dcf 061a63e8c9be0922cdb73cdf579c27a4137d2a72
-ff9efdde03b660190bee0b902094e7658d2337fb 31d188a4e56d3523c6111cd13151c5a06e25f033
-2dab9947f9120b89381b01227a1e148becacb43e b0c45a0b66899132749bf9233cb20886507214a3
-432be148ebfa0be3080e5e63a699a1dabaf95883 c440cb1f3d5009d077ca44aef2e6ea237bd140ed
-f99af6a15fb37815c5a2e4f98cf2d35449927102 712fbfa6a89c164d05d95d353693d1148b0c65d4
-5aed887f364da4dd7272bd71fa079673247f1145 ed91a44a2747ac4da19ed652ee45bd3dc4f46266
-2289e2dadb38e04ce5a04c83955c3d771cadd071 0233c7e93eff5fc47eb05c681748779bcfdd4dbe
-6bd7136e492da35182fd29d3c2a6c53d5f7e97fd fce0a2cbde64466bd1049dd479ad52e3694b46eb
-ad41d7d3d17ae130d58d9a882234cc2f6a4bffcf 40c61959c35d42c0a6cc18848bf1a9a547e7f293
-29d3042615344bf195a8ad8d95883221428c725c 46c618205f0080f1c74a2253708880ea25084ad3
-3b8a5844782bbba44eeedf9271921478558311a7 8839b68f18f649c41ee73e09e85d68be0385c8c1
-17de2c603da2a4cda82c8083f7300c3ffc3acf2c 4552d41af636a7c81ca11b9b51ddc3cb47b3e3f2
-5a83081cbff3e0c8cd3eb3b3ed77844d310ff6a7 3fa1fccb55ab99fdcf3f04afaa4de0ce71324b48
-f23a17cc83bdf1a6fb0d4a97dc2e082bcdfc147a 323e59ab0e2c84a711227cb447c8fafa85655656
-747996451cd713a8c1f623e5d89ac12bc9c04578 b51d68e190c5b3b45ca4750e04f5f79c3c177457
-e8f16fb2650265ea1a58aa253a6392f2df9ed6e3 e10a394897f350bcaf7080fef2aaaf4bd4c2f061
-51a9461952fe3a2020b97ea6165cbd17f68b566f 9c5a84abb9f472a470f2c050603f6383924905ef
-44e418755c393019047e68872861af339fdcf349 6f31f65ebeac78ece56299d15034dddcd623c54d
-1c25bc48a5abe6175c4ffcbfa97659e567845d6e c6d78d1f4960879383718603903a1483aa892da5
-c6a6bff6cfa6e5ded33cca2826ad17778066280b 7e0ab55ae66f025412da29496b5495ea22067849
-4ca6251a9e6786c76f325efcea802a686e0b1e56 fb55b94ca265cbfe7811183ce51f56d4aad45e92
-cf3f8749841d6bd3d50c3bc4547db5846057baad 1fcd0eb45d448273b4481f458f683c208ac6907c
-ba82fbadb24585b3dd2599e5363f8b9566ae7981 ab1855a1c10092a45b89b92a7091870fd37934cb
-d759cd85af33cf551745383bc805a460274bd5e4 64c532c31fa1968cfc6a7d333b01b283baf309af
-edfe4eaaafa3d8d6b76e62a660ab093d4e47b208 2f9ac7478ef489beca766268e4817925306f2644
-679139b0fa015ea6ea45328a6ce74a75851190b2 a7844a404d78a89fe43fec26e6bef504a1a4d5f3
-462f281b3824a3c959c1a8cd0b82e74fbcb8a0e3 82f311b228fcfd5dad8837b32218a495ab918325
-4a8fe40b7f07d98835958478b4295aa004a0ae44 3815d44081ecbad93327eea34f588fc48c23ec70
-880ab8d9377ee02791ec3126f86b2a2e10df8a4f 5d9cf9b5cb00db80aa54749d32b7895380af3b9e
-1f57fdec453864771676139c10cf45c4bce3ac41 af1edaa796d21182b6680b9ceb79f0ecef9d9143
-4ffedee98cad74d13d1f67100922faa7928731c8 63db0533e260eacfc571b4aa4fc0eb4d8f18e3f4
-c48511eb0dc206375a5247cb0e5ad256ad3faac4 e14289b15a841333e38c3895df4151fbfc96ea3e
-3111630dffe999d2240bda07b66208603413a720 10e1ba48c55fa35a37952bc7be16dc9ece52416d
-829341ba1e02b3953ea86fdbd9f9be533fdc012b 6086f690fcd6544ec7b4f2307cb040b1654c53a4
-4c64aded09328641c26107c24b564ece765d6aa7 6650a47d5d66fcb3e7987d368251cd1f7e7f312e
-7b4aa53dfa112adf7953fde674ce907ebd4ffe34 912f64155fe4654e3a42823a11cb47d534c8e485
-5a8fbe78c3708284614149c080a18d45caa06a31 e9e48c3f530535bafa282d3b6674201ec29101de
-dc7c72940892d8a8eb8e12eaa88d6f26e2bc8124 04f132fc542e2b6e6f892b808e11f7225d45b124
-ad4b55d2b9a7341edc23edc7bf59ebda8d656af1 379ce2220ea0f52b687e6b62cef79ca69ae8cec5
-30906191e2e13b575b6ac672ecaf5f0f9678f902 3321b46302400c121d1a07e57572818edd59059d
-4e7b24d032fb8b49da408a6e78e4a2b2ee071db4 5037c29e07a19e83c5b80c78dbfb6209c5e753b8
-03787ad3ec5ceefe4b69e218410473e309b9894d ccc6008aefed0cac8a8bb1d5dee8b61ca302923d
-09678f1bd37b8dd264a6b86405b660c8fe623ee6 5815dc17386577f3c9440a7b00e8f88b97901c09
-b9f6490038d03010f3db8121c03f9d5ee1e8846c 2216833c017b323edc0370119087251c34a1bb65
-c0b616778ef2b32e1bd709853b14412a566cd584 b085b7b75784b611e6c4d3bf3e16ffffc971704b
-391fee5d12a247e7559b4d0b88cabf1fc609090e dbe98a0fa62b18fdb6f4f3169be6bb15afeb1091
-8323e6d1f11b748830917fba3a3a989493e02b8c 47405fd2afb7fee7539745ac85ea34c9ec19e9ba
-71cf6fbdffad93378fde25206c1f09c541c386b6 1b0d58180a64afcf7daa9d0eb9a1dbc8291e89c0
-2a56718ad7d44bfec98ba0e15ea2a453a74f0c0f 16a4d6a1bae9883d22d96b3c9615f4df898c05ce
-9174688541ed8381bf51873ec9e85b8bb8dc1e9f 1cdf7718f97f2c3742f9d47d22bd66062a7b3a6c
-9ea0e8339d865540a4026cf37bd4085d173c163d 9ccf7139361f4bccc2ebb8a716e29a94927c2811
-fa067a42302f45075fd3d288806f5b9326e71f6e 08d7dfafc4264ac751e9c92ce901d88ed86c4203
-b493783c16e0b94a9aed6c1fa27171f0012e50cf 1281a71cade47b128bdd42cb773e47bcbc090122
-8f1498de700218efe98b61b136520e9d3e749403 1bf607c1a24726dc5079e313179f20fbd2ea9241
-019376e249bb629939e67330c403b0a88f946632 d08f235a36406cd653bc6b536c25af83d44a17e4
-a194bf6b8abbf323fb90c43e5395795c08456143 eb594ebd3af2d21e6f1989af0d84f0c26fce1ed6
-62a452bcea5539f646dac775e7917617c9fdf398 91ea700e1ee0c626726ac8a80c5039130e2a8d6a
-e2e3ca33a38941107ba072751fcbd71631b308b8 e41c0b62f64bdde0a095681872388b9aa4fbb3e2
-3bf0a7bd580d97229c53ec52334ef1d876c78ff8 da7516758e196777e54287a6bbfdeda19f702068
-606e2160a0420cabf741e7829c2e594821e86975 12f13291437e4fc848e237149abdc2bb8aa25afe
-5f7a8ccb79acc676eea998f0f3fd33d3b9a0dc78 78734bbbbaff31f499ad8b30049c411c91676b76
-d855fd3996bcc03ac9fe725d79366eb2082aac72 447a554896d23a959dcc24d54493032ec26984a2
-6f07f2b928bff40a33089105fe974811a4804dd0 c9fcadb588595b1882bc869b713b9621a299ef74
-2596a9fc454298c42694f2ca9359219df070780c bd33e8ba3853d6eb4530801938512f1fc5383b5b
-c94d7d7705219d4465997f882a962deda701303d 89208b8edd9401c22630f775555c0a7ebb01a519
-f8f89b052f735ebf2463ca5826075c08ca79b52a 2a9bff68f31b7b07879de1bfce738bc670894b02
-9c7ec1282d4369d313a4c4c6aba0f258f72550b4 f0d8192dcf52b3ec21cefa6a2573ee41ca2b730e
-3c50467dc3496daf86ab38977bf698c13915dcf4 9bdb338f8c8a92b773f250e9a27ad46b902bf442
-841a5e3627e96fb3a23eba86a5dfe6d42c9acca7 b090f7fd9a4a2749962b26cb4f40751a8cad274d
-a55539618997d8e2ee38422f91c5c29807f33543 8abf8a282a19018ef74a94a0ada2b4a6902fda80
-bc9384b05b7d63049ae67faca785e289c727383c 3e2e7570430a9addb4ab9697a219a3e3c14d8cb9
-f9ea508b3c71c0880045656e33dced48f9032796 d5a11dfb4eb4e359a1d22aebcdafbb670e366cb5
-e11a29a5bef18ca86f02756109271673f1764351 10b680e2661a0c7b528c9cc02c9daa9565731855
-0e5ca111f21a547701486f99d68de058f3734e55 7013192d36d598251ad0e101644aacf908440fb3
-556d071f60120e81ee335fc470234cbad9637dd6 3d2d9d3535519bd49e5567e23f66340cd9ffae04
-f088539819b597f688d26556ef813badfab1b953 bf12e0705246f4e21bfdafcddd86483b7b7a703f
-889dc3807b00481b606181de691cd09d473107fa 0c407824042266501dd95503383c54bbb4ac0bc7
-42a3040bc93ebb78d8b498e578d5294d7e81a88e 284c25f586aeb025c764b294e7fa11acb5e364f9
-15756b187fed2fadf6e0652b8b4543860aa5e000 9d1a0522cddce087783e9e7b1a523c8c7b644cd0
-95f861b5907143c11a3f3814c774fdff22ace297 8fb1ac5582d02332b1826e3fff967262d1192e04
-fc1389164a9440ddcafcd310d5ba1e5bde22cf4a ba8bcf6a69a3398b64a85e0c095007ded4e4fe82
-0d89f92790a2fe92a77002ef9b56c37b3965e698 eeb745937db3d42739fba84956f966bb70ec31b8
-fc6e6e000017a590d6070d8993641084c8265c42 e3d7b389a6fa40296cf19311bcabbc6f909cd485
-17fbc20c0b8b1844eaf9c21f2410b97d14bb3d96 2c499053a26936452aad9013ffd1c42ca500ba7a
-57d17d3e8a3abb19791be1e3cd6f235dfdb17c7c 2c499053a26936452aad9013ffd1c42ca500ba7a
-a7abefacbb85273e6684691b25db397968fd05c7 64ae3cde6d22dda5b33b3ca895063e3024254547
-8571e7061983f16474e688bc2a40f6728d236797 56cc1b4236f8cbdc0cf1e84d38b1eac91a5e7fb5
-0c6b470e9db5b1d9a4e0a194ba2b3ddd150c8ef0 0975f579cde19b4c86b4a9df4d33144503a5986e
-43f97ce2072363497c6dc4d206c43e44d760ab4c e3d7b389a6fa40296cf19311bcabbc6f909cd485
-0ed2d6e3d984d80f250f39903c255146d59c5597 ba8bcf6a69a3398b64a85e0c095007ded4e4fe82
-c519deaf2a2725a6796421c2e916adb458918dd9 0975f579cde19b4c86b4a9df4d33144503a5986e
-01926d2efa19b0f0eec35051c5aa36c8ff9d0458 1a1f7def6d9490e456d4ea9ed81e910df48a5570
-a153079bebabe2677620138467af6e47551dd0d0 671c9fd9e7b0de1672359e6314bc37f30a91f434
-62f205ef2ff664f45652ffc1553efe94cb986264 50cb4282eec660f947a2a1f4b3dce26f8b56d27b
-29ae4eb4530bf97e897d7a6590f7a43fef701756 5b23a48586cf8251c429211da8eb33fa0d800a5e
-24e2d28d9695fbec512ed595094833bc2c1bbba5 187300935542c1ff187bf28ec2633ae0b7cd79b5
-4fe3a8809c53490240f0ee70407788771451e605 64ae3cde6d22dda5b33b3ca895063e3024254547
-857a1c56dc3daf9e230dff3c7953b0a7892143ef 64ae3cde6d22dda5b33b3ca895063e3024254547
-8b0ee97dea41e5f732308fdf928dd2f649016482 50cb4282eec660f947a2a1f4b3dce26f8b56d27b
-0c4560d7c8a929fb7bf42552fb823d053e466a59 5b23a48586cf8251c429211da8eb33fa0d800a5e
-0035d7d949d8a092a3afb3fa2915f1b8829da351 26fa62aed9c5bf0dcf83cca1591f9d217e556f46
-1691f57cfa265e5b95490123eea1fd7c2aa62aff bc985fd13645cc0dfbb08a2218e725b09a21f99e
-8641df00478e7597b9bef241fc59cdf615222ad3 2998ca4a6639f4d48f6b1fc0d766c933afeb09de
-f0fa42ce02705f22805225615b43f09196998afd a5077a77be0062e8fb23771df0be551a0650e94f
-866cf4a61dff7f243393f836a6ef8c4dc9bdc118 b772853a360148b5a4fbe100b6591f828f5801c7
-86f0923db92469832a6b15155dcc600976a16ee2 4e9d83f671ebeac8379136e1be75ea2c1e91f082
-1b3d682a331f12e03364517fb8f1153b08371f25 622173c9eaca524c922add2dbbe6ce23cebc2324
-a2773c3da64b4bb4d15631c9d5773525482006dc 7ba4adcab043903e26ef1e7953d5b92d870ce6d9
-522f89685e814c9cc8be6e82f2fee20e3118e212 78305139dba539536987c6fb1feec89fdcb55226
-221f917b49ae48843e01ca9097077467495795ff a15c4bef0c4261ef4161dd1f0976f6c4ae29cd17
-be6344b876e458667d1b1100c39f34f190b99d9f d425b8f09038a3a1874d4cd589b80ef5b7d77fb4
-e4c4565315d27db2d801ebc3e037c76148bea658 538406b1de3d85a73cb5960ec3582e18c240f684
-adefc78f132a48e77c2fb6ed92069d7a08877ddf 24835f9c4c0adfd62f3074fc95b48b73cbfbb0a5
-eb57c06774591b81ee8ce9f97f29f7e7f8011efd 317b76a89881e67517a05867b3947f2a3eea1e29
-580a174258b0f9ad0b1d3dea2e32b5654678f1a1 7954c28973b166c35b9327db2f2dd5a23fc3bf56
-5053d96b83ab07d1d4ebe3b582a4715b07ecced1 ce52585c27d9447b2e1c0d19871ca5f37bdec458
-f9895c125383d2cdd425bc22c9f654a4b6bbc9c2 61cedfe8178d7e4ea0d3e0b0541b67dc80ddc732
-7f24ddb135388533b84bb291592e4048ac182657 f87c03a41339c0b353514b741ba2c9dc55e180b7
-08fdbe14372ba9795185fa146e6a6cdc4c7aff85 ade2adebf24c5985e109cc88553ae6bb947240c4
-f51329af5fed2de9eb6c98d880aefb84b140e549 7016f4f39f34f5dfd4aec49b77080c985d622a7a
-3010012ba8b858384bf4ab68e2148076fd3d2e4b 258a86170cecd4214070c669f6310bbc99ca69c3
-06282707bb7473e03e87cdcfeca53baabe3b00e2 53abb239309091f63f650b324fb5d27c22369e0e
-d6af18e3df040995fa919f633332087af4e3a5db 9ce0f328b082b522bd0d2bb5754fceb78c34057b
-23bb6cf326ee8f9f1014df3c8322926e8c293af3 7ef1b115a6a2d095c5c7d94cbd4c3f1e5ec1e706
-ba84a270dbb72b5e0bab6b801b1216698e1d17d4 87a99e912f648e6d9f3738873df115b819135fbc
-46655b7f18268849d659d171bfa70dc556303617 bacad527f9cbfa3effd0e419ab96a1903b2c525a
-607d6e4b7226df801476f607be72c83fd05800dd 5cbafa0674ae9fab6d9e62d0cb42668165827c85
-314749fd59da4fc6aec7929e8d90dbbeeb450ffb fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-377f3b8da1b9f6f1963caa4992b26201f9d853f3 2d4ffe50969f840c167d024e2eb138eb93fe617f
-8f3aaa18f4dbe0001b29088c685600a89434f504 0a4d99fdb85b6123c1a9574ae2b6b6a733be4690
-de4dfff450097eca78898fbe373b8cbafcc95276 d2a4e13756b51cf61e316395e455bcecf37ecc0d
-2f1b4c49c56b825473ea75db213882d62d85acea 5cf467a9eb28e9d3dade685e1e6bc3f826524698
-62b6dc881539ecb7db17dd4e44650d755e5a3e50 ceb333495ccc9a172a252c3ed6b07940fd97aa9e
-916ab00bb3c66fc5f5295e013d31e3578932f4a3 2755ded34f775ef0f2a17b8c26d1d16cea3d835b
-4c07cbcbb9475fe19dfd45eeda23292d232e385c 9e67040f073b2555d9f6ee979bf619231f26e87f
-ca5e4b31c9864bdb58cd4088afc94ef4693920fe 703f3d9aacd7f766be5a9b5697d19a57aa335bda
-02ed762b910345c3fca04de5f9cddcd4f88fd456 6ac5d0b0436f77e35e8095d82893497398db0962
-6b01cec2976d800a5918315421d3d87895ebc6cf e4a6a3ce75de31dd5f178cc6073e57d71931d566
-1a23e146774c75df46c1a2e8a7d3abc01b7d5c28 90d3a5c8f5d8f6c56482ddfec4c5f1e4cde46cd7
-99cb716ae616a256df163d81ea2100c88e3fc9d2 88a2cd56447bcdb6ef989b8765c19a72a631163f
-ca11e19bf2f4aba202835c954be1c639e56ae90f b4b7c7d6538c74fb08acb76f2456184702491e8c
-4dd67f30fa81b2791400e1adf15f3d6f3ced8133 42275392ce930fed8e52923dbf0dfebc83b15e8b
-81d70e95a9079e788144920c1eeed9882318f3d5 100f363e541f44c0358fb63f8c7f34a8a6c9a1d0
-038ed1c5d8deb357ced7fe04a0ab2c0703cf2095 57f840233358e7d9b733aa155e7e7a4fcdd29329
-cd3800eb31e573713474c7a546f70ffbf8454d35 4a1ed2d3cd89bea5960ebd517ac34e4df64eff62
-a7d4d05d1df270897cf37432c95e4b2ad89295f0 373eebd17164e10f00822f2179ee98dd0b6608c6
-50a4e3b3f54a2292b0663d8e8be31737a51a1851 fe407a70fab38a72b3ec7fbe1d39fb131cab756e
-59287e60d178486d8c44a66db177760527c9e776 53e683154c7480b47b3e82c945a28d80b687cf6e
-e0e2cc174d09d8a6da65e3739efe3d34b8450088 57843d75c1ea9cb43d2aa91b5bf50b52b0ae305b
-757197bf020d9bc2f0a62a814998ad474f98090f fcbf9b0d7cf72442aca6c0d71f1e939eb1a6ba38
-37dbe64dc0b828d2ef3e70faf52989c09ce91b6b 179e293190102f22fc875f0e64e053d238226ee7
-7518f5930f2573f51f8147fc1dfd57437f3ca2e9 83ee0e8921e05e09d0a2d42b89c720bc8c4160f5
-25f025b6f9f6c685585f23ee74c9f46ed96162ce 6bd49bc0f55cbea3fe24b614c06c447e25b98b80
-893045e1c3f9a896d974388367c5187225c496f8 f5dcd98a85cbdaadde3f93a1ccfa7a7967b03a2f
-43ac3dc2d8e27f64e941634b06bd66a0cbb25d8d 734bd8aed06bbf151b0c0111062fee337980cb1f
-62177b28c66371201d8db3b55a0674c619e02080 0b44d139f7a988e0f6810fee06535f5a3eb3c89d
-4d32260b812eef0ed95d92164f9e944cd96920d7 c12638faa448b48271ecaf65026e83e86b8678de
-86c4f5f927c9bc590d00109ec645be84dbdcdb86 0d8867fee2559baad77aa979e9a2e7fbd876e274
-071591ebcd19840e0eabbd33df43e13599eb87d3 2e29d576c02d69756b5462e9afb8dcc09943ad6a
-4382b6d1b86f814daafb2b6f1fd5ddd0c06d6f56 9940ae8a997cd66888fa11b24ab9945a8adce571
-e2b0e9c98d6407aa55d03987a20176b32e74dcdb 87cfdcbf3c93dba0db24eb2230d7b206b62c5012
-956589eea4b9ebee0ed35fabf809cb95f2e214ec 1d9c43bce7d3bd05d724ffaa63bcb4eaa1a20d38
-5491722d27fe6eeb1c50852a8abd000476d11cc0 e5463d13bc73e1e914b9be648ca856abf769fa66
-a8b4e41405fd6933aaa276d06df1f58f73b61ef3 5e04a6a24fe953abd43e4132dad668717cf71ac6
-d1af295249b2037e93d3f6ae5bacf8780d3e49b3 6ebe7e9a9bb1a7cbe862db14bda020b4b8c1af7b
-cdd512cb81ef9acc2e7406ef4ca6d853b186ae94 fa147cd52344b46872283c7a998da54ed9f25393
-7fb603e6a970aaae072d919c8875b197d45f78d0 554ff9ef962f74e794d57bf37608417e2ff63df5
-ad980a319e528fef87eae961633e1040484dbf97 be69c18375288b610e98aa0d7165d9dc5430f0cd
-2bbdd71e8ca454f0508a23a47b9f702863a15a15 88cf3d0db717cf7adb1dd474343b11c76438b773
-29a65bfb58a799b4e135605874ba6172959b5764 ebe84ad87caec2a0fa8ee2a1d9090723d000c5b4
-f8ac6b567c32f342a840d46220010bcc20a81660 bba52d70e9487e60c57a3ccb86d2c69edb3eda07
-1491c4f1a5a756f4bf11b08a40015e0a0cd9a2df 012835b8d2e5343178f4e1212896410320bd92f7
-7812a8024aa1d51a86d64bc44ca495bac29c8e16 baff71f7b36cce4961dce19a3ca6524e53b33c2f
-bca700232ef3f17746f974758b530882a6f5705c 6be1184309de224eb2fd1e884b3d1155d6c88b36
-eb6272ccec065745b784595424a32a982cedc8d0 36a3d08268d9efdb3f91e08b7144d9cae3bb48d7
-e8c192e5931363f57863ddc37c552753d0bac6d8 1581b0643a893920c4048e0cba5b22fb415ac565
-69b345685b6891fb60bde15490ff2558258ef9f1 bb407c6e741443ee2de4180ad27319ac5200467f
-3367a63600a37b604e4cd4e5e3eb9643e862768b 5f5d61934d48e437dc218d23d337ebd33010a029
-55a6210f92ffe869b09589dcd57d8c6b9244014b f06b0c55b435df84f8400b3e5b72df280ace3f97
-b58f871f62c8953786395045651682b62781cf2f d185d8d49fe73df8c43a732f5afd03e4908f237d
-e2c40268b936070d874a74c9e2896f7e8aa8df04 6d73836621b6d7cd5c112e784a9eee799969a9eb
-1f9572fd92ec7851a53a806aec9bf8061f0ee86b 2153c4dcec7a682dfd59a0cf130e092d828323c8
-b5d7b258fd7a0ad5c1aed49e5c17c29ca4ad40fa 9f04d5dab9df0aae983479a62f8f8fb22b5c6b8a
-f137a3f1383715a6ac9962df04df6d6a47f26456 3575c3ec73117fe54f3568a8edd0f7aa8f04ee28
-95356f7e1ce3e2f492a218dd426101974c0d0280 82e4eccc8ecc40130e28a788235bfcc4adb6f34e
-d8943fe6d1193c27e8d44c513cb00c36009a8028 1243c879a8e17759a5eafe7d2250d3adbba079ce
-bf380e5bf71045b1b8a0e19217b4e25de50875c9 5e2393466b2122d2190e440605217c96edd4d5a2
-39f04825031588f35ca6f4e5bd7c6bfdb37e0041 7ff6b4d3c9f481d4487a19ef5089c526656e0115
-045fb6e8c53001cc69120122305e2baf002c5778 0cc9d6b7b4664ae8bd02a05e63ad90d42f0f20b3
-21c52912bdaf7ffaa48c8206bc0e28c7974a7b03 8578e59d0c27b7e56da0e4ca7d0e90318eccc7e5
-9da1decd674015b81e2a98ace165055e927edb19 3bc82921c7674da17aa108bff3590c507bf89ff3
-f29c59963e570ea05f2a3928ac3e577ee4411087 46bab3b70a88bfd8228224dd2a38cb6af43f307f
-df1581ccfeb3476b2b3c8c481fe23d7581cb880d b966ae04b2879432b0ef461cb4b03f3e91fb0384
-868f66b106dfb107ca0343d6a1f717768df3a600 2343a73e0f6e261d317a8228dd1b96a2f32bf227
-d2a9a725cd6b8b99cbe7567b0e96d29a1831e507 51506493d3317a6a68f61a834dd0afcde33b6b5f
-ffb6f7e243bc626e70991a97f085d9c827b9a851 d4a755cde384e18514aaf884caeb973a1bde7c5d
-2da91a7f40370ad20c476ce008e64fa3c9246372 336dd91e1be1b39c8ba65d0f0c966fddf9d59e14
-2ad3b0a63b15b4e9a0e2e64dba2f12bb46357737 2ea42d301df2a0f9316afba5d1f6ff428a582fe8
-ecceedf559e0289186d2577c11e82b5836f9f92f 3cc2c32087b768fd0d774bbbc906fc51ee2c480f
-5e514b56e0ce6cc44b9ccc2d0fc8f7c2c28fa861 dd5338213e4b7367d8c59a34b42dbef28d7cf091
-5f32b248d010bc876c768db7afdcb4005e9e53d6 13892cdb255033a4b7e709d2e80695173eb3e7f9
-a397d03715b2a7ce9994097f274e15e72d6f0371 20a85c5a7ce9d71237e4c4e997354d031d55c2d3
-272ca1c54ce16b99c1d2118d70439514c89f095a 612b974158bd5ef9c4137a10976d60b98467cd23
-ad3a752d10ab6d515b0accc1fab9b96d92f3ddc1 c55d3ed60f3ee1b92705fc542dd36714142cad57
-183acc47f854296eba9e5b507273c8eab3d74b25 c2a51151ed36dcdf3353901e5de8b3611d06d702
-ee279650219343da45ccacc754bb31607e5383d3 ebe84ad87caec2a0fa8ee2a1d9090723d000c5b4
-c4ad5fefd0686be16887538403de6250e81a9c3b b2a6ddc2fc1fbb85544840827924335737dd5c3a
-2475b4102da0838a6af2baca27513c0480b93618 cd445f209388345ca352d7bfc20b5d30a9fb3e3f
-76ef47a03c5713e29e7b4f2335899051db3cceab 20ab4e560e378e11d8f87daa3a3fe8b87f12765a
-8b953394bf2644c06e4385a23abae377c07fe63e f8778a4fce6b710a9022fef492aabfd565666b90
-5f2d8fbbba6ceef76d69bf6f92407c8ba59b472f 906569fcc81e4e8ffe5d56bf7bf109785001ab0b
-cf3a6ee23e059b4819ba218283561f16fc16bd08 74d191a68054270548d4c7d93dd53cb7b1a78ae8
-11bf0a147a9b1fa3f7945007bdfc48fd7b14cb2c 5135700edea1a4ab19a524e882c58eb971a91b3b
-a37c32f32825256992776338c96f81ba7dd9f40f cc51660eb3c82daeef8f94740ac693b249570768
-2cdd5c65e3a74c0871bcdf2404858b4a1a3bf796 17cbebb4d2ca264e997e9d64125a36952316dcf9
-881b2433af0bd7934306a26e378049c517305ac8 8949fe97243cb17cd008bba583f98199d460fedc
-c7e2176c1209aec8887535541cffacb0e25e7464 5ab7c0e32c282519f2a860dedf9b4c605d4824a7
-c30dd3ad19cd1ca64545aefa9a40185e390205c9 d190e273621e06f7e606299ec97ff022818571f9
-e916f54fac815a6deb6175ecfda749aa1619f2e8 1ca9294b88bafcd8bc40f67f3cd03f4eea5c6679
-db3461cf99372b8c62e59fb91546da80aabf1547 2acfc2db629203faa66609f4977e6b767f0afb39
-6247ba738a6af57bfb9415171cdefc3e4be43190 0c3a5701ee5f7eaa71febb79548423c4865a302b
-fde0560ba9583c3793cd1d43bf1fce6e7254204d 3b3805b64cd3d4f78fe366900f853a8e9bb7a710
-24cdb348266c61872763e1b455fe8d17c8cb563d 901eabf5b0b0edc19475973c1a9b39bc348b4777
-874b1938f30c496a2d592977ec3262b8b35c79b0 d139601780a426d1404037cf4927b4b956d742f1
-3e47077cce77fc618eb4a82a9422f95c650cb2e8 f66b3716467d4967e780ce67edfdaa8da34e7b87
-d5aea9f6b8dc574c696c5a72fe501b9eb2ae709c 102c3a346308a76dfa13e390647855cec65a3441
-8134c8746239eb42ecf36f5f03ccbc911cba84cf 39deb518ae97eeb45dcb80ee0768f191de3ed55e
-bc0d8b65e13039f10a1ba945468ed68ad04b6232 a1ad0a919ee15f8fb6c610a072c1a27aa1a418c3
-d01f25828cf93c4348355fc853d3d87e04862199 481c1dab3e61addcea98c7730074509460020415
-72d35be36f9be2dbdffb9b92f74243a51d488637 dfc98178410c448632c9e9fcab2aa2ee842544e6
-809e8f7314b4256da38aa5fc26b47dbb99d2af16 8234ef542e0b65b827e2086c0a65e78770e73801
-07f21c92896f018b631d80bd793cab0f16edb12f 69957b00677281c7a57370a7b543faa36e60c9dc
-6158cfe05097d63463c133af9a30750e7f74f8c0 285f6f499ab3ee2cbcd2e6350d03f1c916c0b06a
-e816e9b016211c60b8adff6def3bdbd2c71ebfa4 9434370c24b91a47fd399ba75bfdfb2b73b1cac5
-54d6df30d3ee2ac3e426acb69c8ebe8a0f40223a 8849500f5fa184f0f31c3f9e4a31f592e0608f91
-3685ef4601816b859d7b7a151b2f02de468e2e29 3f93040253cb896a22e50cc62b9d125c9c63c8a2
-317082ea4701d168735f000c64299fca734cfe7b afc73f3a6e4d1bb5232306093e67e2d888ce365c
-bb26d008df37d0b1e5cdacc1be6ecb97c4c5a782 143d778f92186fe29820935787217dd931d52caa
-732af15526b3de922ad47f5019d689b341d5bdce 285c435c8e105867c9f3f1370e36387a5d1ef2c7
-d6f98bbae012d28a0932117ff40ef0ab194c702e 51c11a40820acfc6cd37b9ec6af29df4acbc0c6c
-2d36876b626d7ab631f4ab96672720102847abaa 0ee62ce55037988eb81a4f70f6351c393437ce7c
-09df5191e56ef198ebe2a4cc402aeb3984689ccb 7132099b11875f8f4cc99e61826e04eae115d0d4
-68bd1126731bbc1c4b0866149cdc21030d2b32ea 28a7f9e11b25272d2af8c0bb450013a617de3e25
-90bd5b199827526da11b34f06f875a50ce782820 6a71bca2b5027ca79351c8b23906ff810ae11a51
-0c7f4c628bb79ea484bed70f1aa54f458da80601 1b875525263dcf9ee75e903149a0f0d82fe49471
-51883ca4c84b06b2c14b6c9a724e875bad20c349 193f083bb4b5564c17615343edb7e8cccefafd35
-7785f0549f7403457c395d82526251ef5b95f025 d5242cd95b7d99c3fffd6321e15bf6b83661b314
-2a7c8a92b6c81f796edbb62db09e966380f6a2e0 21f99395e389249a5cb99e87bd822f1aa4057700
-86f160550f3153dca106b809bea3e53e375d25b9 21f99395e389249a5cb99e87bd822f1aa4057700
-62448cedadf304a1270b61c37638903704aedf74 a49b31d92b8664b72fd5547ffff2897cb1a99bcc
-29b53ced42903b25ad7158deb0f5eedb94529447 d84dad94b27e9bdb97694aaffddf3799d5908007
-1b0d5daf6ba87fc5885eefeb7ee392320687bca2 82d97cdb05003e536e888e0ee14f807c637b8a0f
-2438182b5ba3db0dd0b3aa038f65fa42516ec663 ecb364996c8099fa990035c430990f358279d9c4
-8d0e2e82869f448a11618efe702e866ce0a63d91 8ac6546cd38c903c5e57c808cd1b55c3244b330d
-ea77042c4e96ee47450b754e6df231044188bb91 9dd10fe62eb263df43f6a605e4ffcfbbb76de9e1
-62063836a0d37fb378b2df984f8ce0420c4f27ab 6f72cd42d64066f548114d2a3b0e32a041305c52
-fc50ece71f6d6c961cd7920d92d33d1742b442d0 9e6eabc49fbd042e5584de7d514253eea3ad7ea2
-0f659f667d47ad9cd9a72cd3cf572be19341a851 ebd1ea24d66f90097b62a79b373a88455482b66e
-ff38dbe7ea1363c20e90cb8fcbda00dee9c21bb7 dd4f1059be8e7f3ee13a3430de043015597f6cd2
-5a6363a744830a21627d691aa1540fa9a13f39c0 830cc9f56d9877856d6814ed842f26a6f94fe816
-a8127694afe74173d9e99d7b56e83a7ea4ccdcf9 830cc9f56d9877856d6814ed842f26a6f94fe816
-4fae0427d78a5cfa5e4dabefeb578a73c30c7527 aa72511f2b167a5dd9f21c86c6bcbf6f396fab30
-3a9c9126d0aab884ec3201b43965a744c3ea4d89 830cc9f56d9877856d6814ed842f26a6f94fe816
-9bb2532b90a95c45b7c2b19908331c000a396aef aa72511f2b167a5dd9f21c86c6bcbf6f396fab30
-50b6a136e266010b37e8359259ca0085d50bcd31 aa72511f2b167a5dd9f21c86c6bcbf6f396fab30
-3fdc60de2ea188778440d270e971b6c11771c281 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-bdef9b8387ddfe332da26a05afc62f9b21ba8a17 36a3d08268d9efdb3f91e08b7144d9cae3bb48d7
-88839f7c6b728b66892213e4fb1b3fb5ff0ddd26 e43acde099cd3d4c862c4be8dfebc38f1d8d2bce
-d6f390e49ea58e676a926333f1e41e183b5a7fe0 9ddee8377ff5c55603082df37c2127af4f2d23c3
-b1e4707a55cd86792db631619c048de0af62d561 f69726603667d10074597bb5e861ca0f44d27b40
-3802db7170e5e93441fed2f33e763b5e83d5b39e d2b83e4491538f933888cb36e65b35e42b84c31c
-39cdae4b6c2547c0db4ee81f0a571e506de8a540 d2b83e4491538f933888cb36e65b35e42b84c31c
-3198875e7813ada1e1611e7b1069b4b057038fa6 98661ff5fea486ee6ff34f59b4ef08726a2d9adf
-fa246756327773c9ace403c8e74dd482c41eab99 3bcfffa469994635313ae0152568731dfd6d7cf8
-01f2ef9508cab082689d15b860d08a46457be409 3c72c76617a4acb838958aa5e8bb926a65bec0eb
-b6b3a58fdb302ad8df87762e7be2d9a5a050bef3 e336cb8d08ad065ff7cc1928850b5a9c60a16b8c
-c003464d6c148da79743f83c1bd62c3b6c8d184b 439a90956cded139fe65d0f341b1126da40ded77
-201265ecd341b7d74c9d1497265e1f6557cafcb5 be69c18375288b610e98aa0d7165d9dc5430f0cd
-ce7605345775bbd9dc7311acfe23f8fac942b933 7ad2c196620bcaa507a563207c4855ed9a73a691
-2477808f459ae023c0fdb3a061aa691c75c8b9ca 62c4c5a5872a76c4f5d9e16eb43f9847ddfc0647
-4fc54856b548be0c1368bbaadc30706a1bf0f481 8ba5e9991fce2db3ea8521611bc33522467b40e4
-9edc40cf0ac6d3ab966e4e91962b2ff5456aafe9 79d2635c34418d91984bfa0efc9d3b8d06ac031c
-ad1957bb92b00b98978b2328ca042cd5809a0157 7cd0b676c3e3f876fae6e9829d089bfb8752dfa7
-64ac8bb300c75e4bb65f954a0b4523a0e25d82cc 0aa633f3c27565d469280b708a9a248533c9bb3a
-99b6495f9b581643e4929638ef276b7d4e2441d4 cc7c039c28cb2d631cef9028a6f673f585844b5b
-78868e6fc78c7b24878d556e69805d7b5f9aa378 38a6e922250a15d39d8159c3ffe9cde01bb0cc06
-655889d5101327f4917a5f64866f228d02a2b05b ce8266769e98713ebab8b6275ad671ed4cb99ce6
-24860496f2dd81ef89cdb9644b2a97e891e897ed b7ca4f217daa0e410104403fc8af8214f4cd1783
-b39ce7236ce520dfb2a346bcde6f467c12a63b2d ae6085d56400a6275f036a2f08eb7d9d24850fec
-1fc05b0e0a983b4177ac68579b433e54643add10 a3d070730cc49e1b716d1385d70da4265d9cce7e
-1eb528460ba4625f24ccc16a3e37c60bb9fdf8e7 dfede85eb4e692ffede0996a6a960c33a491c024
-9b641a1c32e3a5de86d5f8525b2c5946867dcba9 33ce951557cdb176410788ad0d2538bf673e3df2
-b9c42dbf0a8b991f855ead0cf507d1a2c1348862 951923647b1f6678939714a8e24e0af369a0d6db
-e0eaa3f58889aa873bdfc8a89d06dd41f82fc025 e7ffee18f942a2a317781043d217e946f5dde6de
-adb5717fa2db9828918e3c76c0495a0f4e67ccf7 9922a57f7ddaceb36c104428eb5564a7b6f301aa
-ac74d570a86923731d8b5834293aa56429dd9862 5805d65b5f6ef9a37c22c457d3834f89442ba337
-3eef5ce9ae1e6fc62b9b52ce859501dd4e70fadf df51c5c7f58bfb637f417948d4ac02588c8da041
-408251bc8a37a23340e87c5ebc075b321cfea4a5 45ae9ef1587985337771aad4aebbe79a555ec6aa
-27bc8b110452f9e6f51bc21f21e261fc82fd96a2 078ca84cc0f16cb707507f13f937af382f634d19
-45152f2adbcd0eabb4684cbd1fb50ad6a0f82851 54c1b3e03af6b82d9158568ef1f2223b52e3ab24
-164a913222839e87b4249d35112f678bfd88da4f 1f4ad3d29a8ebe6d56d8ac23e5ce81fa237d829a
-a1c673a1e3970ca41e185002f324deef327e1f9b e7d8611e51869b79c9477960c2dd3e39b5457e31
-3252ed38306ce610c6537bbf4773390987817395 77f79d6e3f2cc2c888128e26b59ffff1f0f0dc94
-985e520e4d93659e50303df033c3e29e305d03ff 61886cd89d2039eef43de82dc310620612fe421a
-40dbd7a7d4389c88c60039c2a2a1195424611489 e7335a72805e2d3e939504a972ca513966357538
-b529e0449045b07760d56d7c1c117731653aca01 4e8a2a0b216df1d2c2adb92d3657bc2bcd5b05f6
-9a6d75b2f2b2b1abd14908bb7782a4d3921d1523 a7213282e68aab205ecb7b1aecc22166bdd8f767
-79b76ebcb70443868ae0dabd3315e4698e5505d5 e1064cbd053a060984a645976fd55bee6ebd7a53
-16fb0eae89ab5ff4bbeab207aa6ec63fcc92f0ea d077ff818eccb5f3e3c3e6b6bb472e4afc4f737d
-337d6bd8e50405eae8d2a69d2f4a3e25f7e46ec1 d94d5b33215b512c0cc7f25150ff5cd2aa2a178b
-45465f1d90f4277dc918a79ad046ee273b5f08c7 f770f2f9975c871002b5c0b0caa7cb93f5018b8d
-b565925f0849fdf54535704cfc3febf63135fc06 c60f58d2fdd9307fcb68e02d68372881da416334
-745187c404ba2e6484e0ee68a11ab636319a0b29 0b1d6bf48f039c49505ede5c7bb3c9c52b962843
-13326f9c2b8cb1614ebf0baff5e02d17419fd0a3 50368965c78d55fa2054ff0d37c59b220fe2cb47
-8afbb03961db685b62b3cf3d97df3986d46a3f2c 4d602bee2ef84fda80032c1fef72629ca55974c7
-836039eacb640b4f804856c04e8327cafbb66c98 a2ed30fb0443633d5e2ba7f26a954c0e772b296a
-3e80f902c33944d83cf336e891a3e63ae4f56978 8b17c8f9b70edde5c264a00457f5939c1b740b51
-82bab9771af668441c6ae6796295c99063d9f0ea 7c6e375588ea3d471be8a55601fe78f8a165c67e
-d3dbe0fc0e92a0fd2a8008a8986a75e8c4bfa62e 2f4183c22d45a62f32138d52c700e4b8d65ee14f
-ba459b54e574b6a7335026b513998e9234a990fb ad7fde1b184bc0bf48ae73764fe8d555c7164adb
-70482d772fbea93ca30181327f46453e90d31c0e 05c77c7b7002a3ae05d7c95d3feb24390bea6a75
-1004c8af5b612a8b968223717bcf6d64709af0a1 42b804f4c72ff8c73372aa06d0c5bde01a39a53f
-31688920c07d3372625d5922d4c62fc600c58a82 934a3cdf5dbd28cec37949d5e0ff2dca8e65d804
-8115e8eacd479040136669ea1b59d0ef4f727e3d 03c9fb980265e75b1188248f303596c31e3d08fb
-32f3d7677697b8c48c5fa9b70d52bd4f7d1b3da2 d123bc1c6e8a394694dffd6ced4d5686467f2287
-44d2a15556eb31030cceba0130078676bee9f0ae 499cff14c0c1fe556a9e1b207e7efabcff5ea880
-079a4c00b45cd96d649cb92422dcc492f1395335 01022e8800dbc09a49abe87503c0572d65198e2c
-a233d2519e8c99c6258db31fd1edc621497800ef a1ec7e1a7e3675891500aea2c0e25c30f73258ae
-a8098e0c6c25cfcd75af94c9387c5369a69f4f84 e70981087eaa09ee1d3ace2976f13f820e515fba
-872568d12015f80170646e79af4f2bfa8e6a339d 06c0471277f8e5e5411543eda7168189d5c7bf10
-70566429a2c22c3164cfc4b727b30d1e0fce0f8b f28c1ecb08c60968e88e832bad9924aecc382727
-a2b0aecc46fb64649f892d2dfbb73fd2cb6dc451 8b4ab810da7b762cff18df0ca01d01a09b63ee5a
-6b9046a5d466980f01cb183e709f8edde122efcc 2e1cb4c7a3256c94323cc5765e24b57cca8e8ca2
-d5afdcc226160130917b47e91e8aacb54a451d26 a2139f9f6324da67205e4b495f47a0908bf8bdde
-7b410ece31136991256398f164816ff9cbc4a694 a2139f9f6324da67205e4b495f47a0908bf8bdde
-346a4f7d7594cb67d20fdcea5793d39b5faa385a 1446b72546314872748f4547473d31492c54d587
-2a996b89b4e3803fdd73301061927199af19c260 1446b72546314872748f4547473d31492c54d587
-c4aceda84888a6f92c3bd900221146007782470a e3d7b389a6fa40296cf19311bcabbc6f909cd485
-2804cdd9d2e7c5b1aa4d594d030b4bab7feef981 5b23a48586cf8251c429211da8eb33fa0d800a5e
-68cfa799770ac248b0a90c1144dc975c6e81d4c3 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-2636bf98f0f23aa2810deb89931f6aad8df7c898 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-02c889fdd04dadd7ca1d4344046df279aa17676f fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-33af2a12beef6828d833aba5e5fa0a057dfdc507 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-fd86da30fa7e77ad29512628af66eea72b88fc21 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-19b5819f4af7b7a668879baff1bde9e4dd1b0424 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-debb72814433f09eceab846efde77dc6a679223c d2b83e4491538f933888cb36e65b35e42b84c31c
-4928c496df7448dde7d3472ec6467b3e36b163f2 d2b83e4491538f933888cb36e65b35e42b84c31c
-af3e633af1136de272690e19004f32482ab5e8c7 d2b83e4491538f933888cb36e65b35e42b84c31c
-2e441ae635d7acb9e17b7418ce8335ea1aac321a d2b83e4491538f933888cb36e65b35e42b84c31c
-f44601154d531c000bc550ea2fe8eba68d6d9a25 d2b83e4491538f933888cb36e65b35e42b84c31c
-66cc1fa26c1f36d54ca173e748159b99d2cf0c80 2e1cb4c7a3256c94323cc5765e24b57cca8e8ca2
-725429b991d68bcf67c27d671722ab7e78ffc7b0 8e9382e52089b556ab95bb284e7472c5ac649d34
-899550827496682156f7e5ebff62289d0acdda7e 8cdef5d2eb8e75a71f7e00bb8c6c8e4b9840809d
-8aecaa630e4d164d5229c81d04a904b3b10e740b 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-3bd3ed56f913f97f46f0b32502490bb177449a16 e43acde099cd3d4c862c4be8dfebc38f1d8d2bce
-88d348e1603e50e0b7e3263621be41e4ca862707 fb6ba2f1c8f590301f8608d9a3933a6159fd318a
-3c16e16dd7d1098f40ab825edfedada688ab3152 d2b83e4491538f933888cb36e65b35e42b84c31c
-6f68ac52932eb58a97b1fdaa19712c3a2bcc8b7e 2e1cb4c7a3256c94323cc5765e24b57cca8e8ca2
-d4f1c0ec463c46841ebf54801bb0fd107fe0aa2c 2e1cb4c7a3256c94323cc5765e24b57cca8e8ca2
-cd492b6e01ff696c091188264dbdc1b25eeb45a9 2e1cb4c7a3256c94323cc5765e24b57cca8e8ca2
-3c4af41f5719c23a2a9c72dc4215cdc15cc23389 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-5ceb0c4cb53260468ed2d14eba385410f2464d7b 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-172f5654ecedb1bcd212aa7eca1acd9531d9ffab 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-e6ef5d147f6a8c4d11643a1afdcc59b9531a5018 4b37441458b1ff515e198a44f5e33c7ecfcd9cef
-813facbf2256dc0b901ba8cb233b1541bb1c1ba6 21b42bd1fa717fbc1c627463bd3c8491fd61bb7f
-120e5a1290f1f4e72b25df640444e2100aba381e 1a758e8e87429e5f9bc9220df3a3d793a3b0c442
-da7b1c89f29fad07f5945c0d74461fe7f2b34d24 73714661e19f1224600728dcf6127e7dc0826371
-53d0e2867cf0e78f876a3023dd1157114c218e06 be9d10c2dffafc078f7a01edf11fa2403f72b201
-9e753f6877f32d11a265be2a3fb7f7d15e5c1df5 31eea2e0b2c3ce6538f7f8d0a0053934625eada9
-9004db8327129b4d0ddc3e935a3a847d66af7e17 7a47d57f6b42d03192d08614fde6f7f0d58f8b70
-3e3968ad5dae36895a02f0ffbd6736ef7869e23a 5804436a9e1bb5df7652ba744e924043d256a222
-14b38c884abbb1947db0de49e62a1e3a5420e00a 88af7f715402b2c2f2580f11abd7fb848ff5e7b2
-4a0286d54de0c993c8024a4fe27704d290bb4258 0076f83afbca570d78edb9bbddd3171581fc3109
-a0087329f88bfc28e6aea68faf01b0585a495810 09a315bb4bac8db833cf2be96fec3f825fee7ac1
-802c3d33cfcf5d69120cdbaf1ad0251fbb0fd851 25a6cb1f4f7613a14a078f79b403bade604f2995
-6142436ff1d71be80f8c78dd163ed269919ece93 1c61a135b5efddf867c93fa468d7cccf4ffd45cc
-4bc9cf4f6423eb6468a3f754115775d4ee9a5706 2b623f6e0844bf6d3a9f54bd4bf1b694b8e5d847
-9dd115167656cf82c219f7b4646d54cea72a3953 beded123096a85e59e4c5269dc37e7b193a2b553
-705b76bac7adde32ce37d207a5d654e7017d5263 e873536e1e6e197d1d5c0207e714753f232c2a36
-ed64633956f2c729144f0b332e80877b02e23404 15ee116e86d41f5c0caec99f6da6fa3ced9f5094
-9290331fae7f4462b6d5b763b7ecbf74344905d4 78d547d7bc8152b9708e14a72df68713a7838051
-7463717e035fa3f181f620eebe60699db72be426 ec1e04519fe13951f5e073f655e9c6b20135e951
-966c60105727a227b497b9f4e2ab0ab1a860c5c5 f7466836c24353bee61df7b8fe7bc5621d1b5c74
-5b00a237296df4ce461e201f98e988b7cbd95d62 158f7fd17ed5ea4c58c1e4fa0f3556007d5bbdf4
-83550b73ac2527be37deb24578a778299dff14de 59d66712fafb4dce5bd60e2c73227188c001fb10
-a8cfe9ade06a317b19c1a372624dafe522e1856b 7678d36d17fe03868487c81df83b9278bb90eb4b
-2bd0bfe0c2622d33f1b17a180684693def5306c3 7e9e87ddeb4b4876dc050de012f4ec8c5a0fcfa8
-785cca8cfa51803c8d3e7d0ab812b539f8f934c7 9a2ebdc6bb725cc4209c6bcb9990d440c9847fee
-b5b9ac1c8c74d7586ebd41ec21073629dfeca0e3 230d400f5aa96ddeaf691e4a456a5b84cb53e085
-0e9a1ae562ea858eb50e8fcfae396667660342dd e4a7839c19060626251ac7363d5cc1277af50512
-b73cbf846ba24e1817fcc811a9acd1cd1517232c c5e240c0fe74d421db08a3a4684317f63661b585
-4fa24ac1e98d06c67c45d96955f8747daf34d19e e2079afc400a1ef54fc5e7b3de5f773add6877bd
-76c029090f492d1b0faf61693ee38ee4897bda38 27590ab6d21cc961dda11f09f6605fb1f9fe8a7e
-f499576c9b7b51af4a773732942b16a826efcc27 8467d6308539e1f35c09c303f96bdb56f4a1e389
-0441aa042bdd0c0925cfc926484ac566dd101f93 bbaa7780cbdc18511d1ba8b9aa2e681d2342a2ad
-9e354c4374cce74adf9f9f3cfca06be6ec77af27 7f19030bfad8d7eadb398718cb750e698786013f
-d57d2f141a921b2aae076fd6daa8d91312df4f7d 2ad302fedaa7aac0900c793211c87740bd04f573
-14fe005319e15ba6b2218ff894d6055c14ea493b 5c837d57671ad9e1f603099e65c92916684ef122
-e4adb9b86b5a5f0042022114fa9d323f6c529c9b f93499e32fa415c486ef1854319c2613cd32907d
-0755743272e624c96862f1273f319f5ca97c40dd 2706daac5ef502c2ae1d8c35c799dce852d0e2a3
-e848360bd82419150636ebdfc9bf88c92c64fa25 b57f98d14cc908880a70bae4e53cd6bb7eb896a2
-c0295bd77bbde28917bb2856ed6dfc7818271a68 a62f7c30e64e7ebbb73b4b7de513a37734493196
-74593fd7e15e47f2cd77120a0b3e39a73d2277e4 46de1070cac7ffd37c11b6e8c51a416250b48b61
-982e1b2804d3385092f0182643d555d166f7bec2 9c988f30a472c9745f27c3c05264d226a957b3ca
-eab2774558efdcaf4bd2af474a93a9fcf2f85457 2a3b583730833d42a00abc2a731d8a6facdde2b8
-1bc43862fa8ee31e7df316405a9347e6f90807e6 0fee1a2a3b06ee472e5b5497608807fca0459e8f
-747bf2fb662d3576c04be9bf52d4c4d6d46d21f3 add7a3f12c0b85a89112c7563a670d056d7c5d64
-9d55d260eda9fe135463a2b3f595ae85dea5b538 aabec4c701b0e2879d1906808c90fa6f7b999134
-2dd3a6714e992719560220451ef7b189e2965cc7 11c6889db6751168889d2b8ca166236873941664
-f82a3de21d0eaebc7a3a15fd3840c1bfe1158cfc 9b8eda474f991ed8dda2fcbdc768e2a70e5cf60a
-ba93e704bd4fc09fc565ddb7fc2ff0f9044e5742 5b150dc58fe5195528a6d3195caf6051ad06d0e1
-b6030bb6ff40f4fa7a0dbb3c791353ca263ab6e3 0e4e26510a2c9c338fdd97370f5d94d213917d7c
-a6fb2f76f952df6a8ff20dc9b705a4b08b83d7ec c9b8b8b65d5afb63acb00cc7766de304d7e674bd
-5ea2e23f9c70096a8bbdc9cd86452ee230517323 3092f272a346e415dce72fa28584be54603b2c3c
-ceff3b98c73f82380d98b9823de57ca52bd50c7a 815f7b85e01ab2c1ad0131a927c8b5ff38de8b8e
-eb3e5f7dd112b3a653b4d6b2c0fbe1d5181d7c1c aecd604321da09617f2c95f214a481f922811e33
-87cf5241129653e663b0c723b47889c4be9f4577 0a63c20e2165c9672389faeff236e62a576ef475
-244ee45a3404e1fc19f9fe3a89ed4e5c126985da 21311414c430f72a5403e2fe54c8b8e5660b7bc8
-32eecd9b0ec0c29ff793879fa74fa3c5c58d588e e6e833d7ea57c5cfa9e76c693efcb427427f94a0
-02038f79d503ccb44e1f6492f99ca9de502da7a4 edd825fddca81619abd1810b1b7b1576a248cd1a
-c40c016f0879e6ecfb55f8fcd74f2665274b5eb6 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-d3169774b0b982339fe47fcf9a4beee0e2fc7afb 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-b91cbf60baf470a65a1abc1ed409f4e3f6b081b5 edd825fddca81619abd1810b1b7b1576a248cd1a
-8c8317729d672a4f94f8d4de43287c8c7f932406 e03061fed3d11852fd9cdd61033e7a744891bb7e
-fde8ab4c14c56b68bfc9b201a4dd1271c52e1294 7e030028801efead440d8cc6175d050bd30ac9f9
-ec1163198d08a95b9df36fb73bb4d504f18b3c06 7e030028801efead440d8cc6175d050bd30ac9f9
-e996bd550e2ff28f063b577420e54b8adaa04091 866fa23b22c4c6bc0dafed844bd5372a977da59f
-ca6b93f5a145a19f4c9ba0a704082686850a0f31 5ec25ac7941b04fb054e2bb783111e7a30532b36
-3011787a9fa78157af9db344f383c04c3a874e0b 3cf6b265850b117dde12faf035eb9bb633e4a78f
-64bed59b1885b38192373af59b20c9c253926146 55481e758d9a2c2511f8eb95ec048f7752667093
-037a61b0319f68ef8b9b1b5f3f081dca97815743 c30f4a86a4971d1325e7fe51558efb1e29a36a0c
-421748bc1edde626178b894824ab21e253495903 5ee89d63695344ef50c13662302f237c6b2b2959
-17d988e3916bd69832ed32e958731df22531eb46 195499f9bb81c1800d4f7e356c899fb9fb7d5008
-335916ae3b7e338b4afe254e59065b48d77b2e76 69f5013be3c5c7b9ea06ba333d82dc4b27734935
-2abf2c1fbdbdbf24a3caa4184c8d02d810404014 4b50c338694d8d27aee0fc6106e4fb499e76c724
-c4f1dca467ade5138dd6c085a17f2f17cbd1fc6d ffc99b2017cf125fe1d95e42adb457e664c68cf9
-992b1fcafa3c2ed77cad8a128714cfbf7d00e1db bdfd82cd6480a79a527b8554638fa3ada4905441
-4671e51b193e2f65ac6608f0d7f0f5c1800c7a95 19a3367d131ae593693aa138608b15785c8f2645
-a952f6b64d33c34a5d8a7c2156e9af42d9e1f0d8 5e945efe11703db0780ef212fd8204b17e59a2bf
-5529f86a2f6afc2a8dbcac7f776644322dc6111a d30c579975a75bf6dac14b547041194d9a469d62
-e868fc0ace6c94144b28811b465a5ed342558bfb ec5d5b050507ae72aa74f59ebba2dfe662e199ec
-a22113c43d2fc962c13b8368e06f2431e15eb21b 0645953f09741ba3e61e37008f44b40038bc104f
-1b3014e7177d28f31e140908186d658d7267e9ed 8bb2221b43b521c1bcc3b5658d0e4217aafa395a
-dda41364d52fde24d09928707f98174375ae49ec 46762ff173472baef4602cce1fdc1eb6f1e78aa2
-741c59991047da858d452f5ecdd4f80243871a2f a9d4c9e077283ce3f404ef7c4b7cc2e5bee08148
-ffc201c947bdef57aa608f6e73ea0eaa5c97b5a3 9dd9d28d8127bb475b22386a94009c1c4820e47f
-79375f955afaacec89e3d335f846a816a3f58505 8aee7b86d27490876eff4e4be887148db62aabad
-7d984dc2e231f9f2e42a09888d6440c11f9738ef b4d49f941f0b91f921f3b78dc8f58f7c888acbf3
-ca2337658cfb450b3fd585466bef6f982bd391a5 5b7eaaeaf1fc07b93884a6562939443a9219137a
-e2d0fc20d9706944722823a9fc15a1dcc9bd42a1 340ddff4a8fe75879864f723b1826d77bef2c4b2
-a6a160a31f2aa60d3f1cfdd97db39112caddd3d7 dec7e5c8c6c60fb2634f35bb62466f5bf9f63efa
-6172883225d500edcc3be9ea05ecff7c6aa1859c 74be98a94f8046c6c83408dc190f6e4becabd9ce
-7616c7a76574637ff2f23f943351d647c0990ad6 402e0022ea56750527922c3ec939dc90393a080b
-ae33a9e2d4fdb68d7ae81a70272721bc90a55418 575458a68728a55cbd5a0591a0055143a7423171
-af6cf45bc7d9303a82faf133eaa17b3f4d3bc35b 608a614450ee685fd62a0b0aa9eefe4a67b35cc7
-a271364f3e6d31af9f02c0ffdc81fe8ef4814962 7e3304dbd34fcce92cb49d027b2aaabc8571ce90
-9ee5efb5577a55027765a56ca32caf11cb024ad0 023d0459ba951abfc00f9d276e214606906dba84
-c37c87952a24ebd58c0835543a01379244fa1bf7 92c8d41b8d6a233153ad35151187c2e22dfc3068
-d67383bfb157ea636dd99cc67afc8a0f54ec9f32 4074af0d5874ce4444033b9740065839b4ff9557
-75037fe6b26639c5adfd0b5381b2ca646cc6108b 649132b991734ef609246cf08847200ffe943f74
-514456e7c76b81666fd24322d37e0c394663b525 1ce9cc6473d1d05835a6a93065d830b0fb1b9093
-5ef93fc89320df5cc2865ee19ac09b36270b980f 553f415fda740bb2c6503d198e6adb587185428d
-6b911bfc51222a5e73dbc9faebd022b34f5d93e7 2f5eb06799c6b5d7a30369a3c36efcb31a8e402f
-b3a6cf3c25bc3aeeb40ef6a16ab63a78bee3949a 2b24e63b946ea56a435766cd865537ab52119afe
-c421986ca1dab9dc3db0bf5ae6c18aad25b155a3 552f081c77f71037ad6e3339a99a23752e9ee85c
-d9c1d1098f611e70556b17162f7e9fc0a9f6136a ceaa47643b4aa952020fca47cfd0542c0d1107f8
-d0790e1a5b45d3f42a10ca0bcf259562efc0bf68 fa1a45d59fd33f86515aad5a76da0e79a6cf142c
-abc275611b726637385e417ebd75c7efbcec34da 7470b6aed0ac762991973acdbabab59f9a2fc49a
-a080d24f4a8abae8252d11e9f722262ed7175a27 30af3a7ceb80cfeb55a0406331b7be350b0df1b0
-fa0816592bd4be968351c31d8bafe89d8bc305e9 9c01abfa39ddd70926e2eb79ebe0a5c0068eccd3
-41d619479b83acd2744745929c2b9ae8ab5977d9 d64eb453742154738a8d90d6f7909435b7b5af28
-a272a489d3f8cc13aa14bff2ced8185bcaf4a68f 9f82bec29d2458774dd85d377ad5adf899991d51
-116319de114d97ab8c3f630d8633596d8daa92cf edd825fddca81619abd1810b1b7b1576a248cd1a
-647d232852538e851e8f5a8acdf0d43dfcc623b8 edd825fddca81619abd1810b1b7b1576a248cd1a
-84b8374c8222cb76dff0c1d3e4294d102a2ba1a4 9f82bec29d2458774dd85d377ad5adf899991d51
-bdf0a60f62ae5f29b3896a15cfcf3c16bae5dea2 c94998ef6eb32e47b23a075d45865fff1d91fbdf
-f0f11e9707b91f90931a2bb46c2bac6e9e409cd8 59f1145e541ab194b08611f5e4386b0229598c59
-21b40ae3e7815bde7989c542c985701aebce6a27 30e5af7c2d11bf6eb288e6337b6c7d80ccdf5c7a
-1b1d7c1cbf49c0569f0c301100d0cc950170c552 f3c95ee230da256c7d25e174b8a9a38a2e418da8
-ccccea34c67166118e8d09588fdd11424a299d71 2fb43669750a310905abb9e753a941a668f22afe
-0526e8ee9047cc20392f4d1b272996c49384f54c 9a8d90bed6baa248abed8141d3f4e094be976946
-4d5d43ba6a516cdcb180b46df2878fe49b2e6a29 9a8d90bed6baa248abed8141d3f4e094be976946
-0de75b00658bf1801d5b24cdfbaab4dad03aad9b 87bfa4cc37857d172b4da579f7bb0883c6e25d3f
-73d956d756620b24faa4dd6f06c1077c63744ae2 6d73844815c493d43333dc63a4017188313fb88d
-209e0cb3e1ec3cc222f1ea736d1054bb63385050 84bcfa37b1b43371b7be72840946fd0488eeb22a
-39afb1a7ef82f6737b61c7bc6978f45ff862ea2c 9bf22b55a0a959c135bcee3920c9952acf363252
-b2fe7f13a1fc6688fffecb22d8a84a4ebab0fbb4 f4ca9fb2e7538f2a00d0a1da83040f5a8e26a6f4
-b62d06c6e159b9fd0f7a9b58787d1b80fa0fd040 bec7e7fab26112d856180c066d55e53bec0f54d8
-5b47b11e1968a78f6ead0b4a68737bc3c979642f de9d7430de4d600bf9ccc0c3bc06ee5539aacac8
-e1822f7e4f129350480a43a13e2bc1cb773b765d 87bfa4cc37857d172b4da579f7bb0883c6e25d3f
-161cf4aeebfec4a2b4459e2825a13322dbdb2813 de9d7430de4d600bf9ccc0c3bc06ee5539aacac8
-f687db68d4d69294cfbf8df617225753a1fd9616 11813b714daab1fdbc9271b5449612db532c9bbf
-3bf8adb7093e79bcb0a7c3f5a78ee2d25f44eccb 12e69d76e538e65bff282557d30a019d233e1869
-3c71d79d4491b1691cd06862c2f5f9cd5b70760c 15368ce213b2c188a7faea7717caea7bf38c6656
-f35a4d202f40bbb2d451aed76a5acea93984ebd2 8bcb9f8fcbe7bc2d1a5f625ede0abf6a30012c64
-0b6f25dc3cbe75c7342e34ff9bf5cdf8df973cf2 0fa3b304938ad1a7a16d754a0f3dad40dc612307
-c4866959bba74ff059628db9e1b9d94e9038a889 068573b35ca62b559e1e98051954b014a1640206
-aadfc0a01bbb3cdc3e4f2b11fd6438bce70ec12d 2dd65121c2dc5872d02dbdf5cbde2244245f7ac1
-35d7544337f82f3533f5bb892dbd76a01760aaec 6ebc78ea9584a85cfeb3e7496b77a724edd29eb5
-f1008bd0f1eef2610a9fba2e38630b3df44128b4 e3c982726a65e53befc5673bda53f53aeb61b708
-82e1e34d897ce063a881469721f43cb7a519d8b0 ef1de1379365931c8b22fbf1f41b2a02ff5935b4
-6cb6b1516139245a87a349196a28b0e29ca98ff3 5c55d995ca1223853e2226aaad59b6cd647949cc
-ca20bfddfd70126697d8b6931896956c0ba274a7 cedae9ce908ebac3a792c338ec874a31544c11ad
-10f0a9ecff905bc3f0277f37fc319a7b977e9ab0 7bc65fccbfbd7fad9808717e208c1a35e65e38c5
-87f9d0f0796a524d264c1448264b19141098a3c9 c4785de62264285a5e83b5b87c3757bfdb03d363
-f982a74d8e4c90273360c0a7f10c845bf59d75e2 2c638fed9a6f8f8de2f6d7019859bcca6b669bad
-6e66d484d610d1d250ca68b299a9744ff946067f dd5de3e6917d5e95f942ade227935edb65bbb376
-87e5f42c8f62e265b406359371c9fd1d4393f4b6 3347589b113564a7479b7804949ec73500b1e38c
-5f1d965898a03cb99950e889c4a4afae4a197e81 21303ae4c83d72bbcfc68abbefce5ce58bea7723
-8a1662bfb1f7c112a283d700d78c6e34f5ea10b1 0297c9758ec15e0b70bac28f46922f6d4b40e06e
-e17f1a251c0ae0cf377f4418455627867611138e 70aafbdcc887dd2c25b230c4c9d371c1a2523a91
-ed8d28016c33d0ef0cd7ac0246acf41bc622bc01 817631c6c737696bacf5f429468c19ba2d640e04
-593419054f7a2ec4de7a719bad3a015768b333ca 817631c6c737696bacf5f429468c19ba2d640e04
-93ed3da51226ab64dd39cccbe1196c7b37096591 a09fbd3d2a5de96b55aee6ff620213823d4b48da
-055d5189a227d28ec46276f11e0ea06b7a24d8e2 097f287ef80bcf6a065ea22dd2c745345528cb63
-be4443392e52685c03d7de1cbb7b5e732dd91565 e350721f2010486e9b7d2a20559705cdb0c5683f
-339fd18456850b68e2e52604a8491366c9d01a81 9257db40f55c4cb152ee873fe252cd9d8aa28014
-4bd1dde0077c3a72931fc12467ff8d653b6867f7 ab3d20152374e370ca26ec20170b4c9ff8d07d73
-53517c73d9a36039cab9120bcb6a08c91e5188de 750fb48f8b1125e24a5842ab4ad01649bd2d8eaf
-1948521fdac6ede6406dc253f6013e131656853e 6aa3ceae1fcb3dbbfbf1b005e712771171103000
-596fbd64938caf620e24e0ad890f42b25ae09a07 efc52b6321338ca73fb0fbc58f2f7fb12c5a05ba
-db5c5951603ddadcc3100ae3f18055bebf59b38c 011cf565596bf66a226b1ee0bb46fcde451bbeae
-9f75b5b07ccae0057660afa09962c9334414589d 3584946d327dd7ad0ca5480c1c9c1169e83bd56a
-3ba565ffa8bb1c23c459caeb7d33b0fcaae9c840 820fd8adee70ca89392d52903b125520b950ce75
-6a4526ff0da022f01cc85a2dff6bdc3d60e0092f efc1852650f0c2149f3b212054cbd5a6a3e86dd7
-e32a1caff395731f3c059b2510610d0e39ea39ee 55c60c2d8b47c80dc2eb24fad26f5195a7c5a3ab
-82296d69e546a0eea1a9f53c46c2bb751325bc6a 4bd6ce0459751ab75f969f14a91a0b7578b3ba89
-e771e8939de0a4623b13d480392f23a789641b17 dab8f04b60e9d3ab7339ec2e1f967c37e40f6acf
-2d1a5114ff60a32d82014151d142c7f067ed1390 0350a28748eca7eb9b52bb516f2d802b2e75ba0d
-629519293cf65bd45a6b91d8d7b5a1c61d88aa08 8041603e2272e70983b5ae7cd7835f6991533d37
-9de1b4298a09cca0a48fc7b52192d6134d47b266 194ea015341e9dbf664ac5bd0088e7138e479b80
-d05678bde88c0fd0388a459d58c51458f7a55fdc 2e4d8cbc55c875abf2f0eb254cc462dab00b01f8
-32e5e1c1e4c3ab1b8fea76061f96de245152a1ec 4136ffa80db7309dade34194b0a34c27ca497ad1
-409194ca48161500fd3faacf6a25851984a15c21 06469ee01613a256034162890bddacbadc1d7d12
-10c19da5db08c31df663c90acd2ea15c91a6183b 19a4b185d81365443c805840924b8cb7cb1513f2
-003a79306785e8f12e7b1dc3334c152615ee4a10 096223b9c704c0db1bd1c30c7824714d447048ca
-d232fa544b39e180557ca834998233a3f5bd3eda 438a8c716a13ed5b2faede772d7492538b323927
-2a1eba06f81036a21f7fd9ebe1081fe1a40c2e04 63bcfff42d94dd156ce6fae98efe117ccfae71b0
-6a134e062867f0e618261b27a25564bb6480e130 5336986628ed002da7a961c32b2ff0a6465c7861
-03b273d366f7f050f1e3a8ef9ddd8fd8f80848c8 c83818926242696d92d9f4b6117c6b84b3efdc7e
-19cc3ff23ecabb23c974cddc8530feae28244057 3523486eb4a3e4c6fc65cde5310a684f9f672430
-16142ec989409728f532f8546266af23721e3b0c 6361c0102ad12ff33fda6d4736ddd6f738053cff
-d6e67b6ceeb16bd075f9f2caf761d5eb8286ca71 20493917aa6aa0635eb6018d5b145d32f4c341f8
-8f4cb1a6031d51b875ba62f96268ac7d6461bac1 2772fc5144d5e7e5a7efc8d4f7f777acc192fdf5
-15581abba5a780484cd6e259cdd219f1fa7578cc 36020e2a87b35092d979e4183b666b262e06cc79
-0da2bda279c92ac483a89aef46749193012ffd7e 66ec3a6544f15008d46201da1e3a56d7af7f8b24
-18c7097d1aee8a7e1be53df29de2a19689baf82c a5c0f455599e051c9661e3376b0bd34230801aea
-4eeaaca3804ab449afbb21ce7dd955ae54d9dea3 b269f1ed86820149a3bc8c5430b7c77b618c9a0b
-ccab2b1aa67a66e30eb8aa7fcf2dc41d72e10238 15053afe2296e674bd2f89de790ff6a914af017d
-15f6c01342e6fcd31d7dc09e26863cef7ac52235 cec4fb8448ce8c5a191219536f67e63823e0f9d0
-f806182f7571ea858f84b126b22b5631937f0d65 bb6a97db325126643071a5a2db9b17a3c8741d23
-3b8a174a2581700c877b7b686e31d525ffac4a2a 47e292dfe83ee6f68ccea31e400b3a7192ebc04f
-99f3f91eb61cb9669f85602ae8a50ec3643aed20 29bf76560f634b5ef5b0b49c590603552558b2d2
-dde82d8dcf3e6bb243fe66f8a610781e6e2d3dc8 cc79cad64412f9b61f491333b71432860606cb24
-da01b277859c7a2dbc74c631e0158949ad1d581f 9374e233456d4021140380394985641ca6be67d0
-2a65cd05fa45026b31b60b567a762ab55dc7be87 2a24f98baca3f09e64ef86daf427a882fd4ca78d
-b47a266e0bab878b54dd8614c7da0117dba3c49b 9bfecabdd3c8886a5c032f49b801d4921965a800
-e2ccb75e4c661448413eda73c480c816216b8749 78363bb9390707bb6a65f02a273c925c3d8c75c7
-4e1f097e85b1d889fc53a6cec791f366ecd17986 922d98aec6fc5a187100e6d4e1a605c0da611c69
-09ed148ec4143c1c93be322bca21ff4aafb45a2c 6829d10a276a4ab8219570e74f185594cd6e53c4
-17fc778cb787a84e206348abb877d51d02122cb8 20a4feb5a596bd844bddfbad35c4ce85ac17f0f6
-3acee969361e3481a957fe15832676a11dc11d68 e89f727b04925c99b8d2b30f6b0ea51be635270a
-030169846a4be9125b20a0a81e2988f39f4ba2ae 2029500a63577104317075be281670d3dd012ec9
-0e0e524f71300e12d4d1d8fc4c24934c6e1571e4 741d9bd499e6e35c97335b60b9acd728a1fb051b
-a0571ec9c4622727d4eb7bec9cbbc69d8a5a5e69 67c8c49176818d0a058c9d8141bc69dffcb43cca
-71b1860c17aed081a2749f3acfb238b6576b9c48 9c8e85e038e1f297ea9cc51468709adce5600b70
-864bfb2b14b8f2f941f1404292001982c8e20c93 8763dd658cfeaae43ecbeaecc1d06370973ecfaa
-7e1c84517fb4122741e8556ca71413c7a5547a42 ec8283ce34f5f150149ce18bfa80ff5c22544943
-962e1febbff230bf20fd372af6bd6c8f686f569f 23425c50b0ff5d19aa27a5a83975a467a706099c
-5d9d1a6a084476e2621e818b1a3b106b400a1753 99478af00a737dbb08181eaf99c92c3c194c5f25
-eef04a3664b2c08b911d2011f1af063cc863416f e6ed5767d97b8be8400f1989e0adef8e5adc0d8f
-16aa4243798458ef975d7243ed947fb3192c06e8 e92116768205c44f43da7a4699ea3ace343842a9
-eae777c2f7590dd16ebaa2da40ce1eeb82a955d0 7a19b7fb3d3dc69f0bd633617ba9c699106c68fc
-d326823d0e90afc1df0f3a9ec158dd10acdbb56d 749c904d962300d4d214849d3d030187340e97ab
-5840699fb1b2f39ede31a7679dd317b10a106c4c 15854b5cc4d7bd6a12028ac3dd428d8f835385f6
-212c410769b5967d05fbe193648c2f8275048180 efde45724c1e5d3d5317a1feff18e9071749e09f
-cbfd6b114d434e1d464b164d3f02fb5824942ac0 78ab00abd37e3a0aa97c0b0a962a20c8de220a0c
-3e17c64d46cffbd51ac3c7fe561860a898b4edff 354dff7fe9cd83993fedc4509bfc8ff2e10d050a
-2ed808063e7c527dfb18a93b027b1fdd14561f37 4c2eb3a853b16e3cb6f0e2148ab85a9dd2cfa528
-bbd210bad6fae9c38c445e4592b340a2100c5956 93c4f1ebf83801150be052bb1da838303f220ede
-dc70841b7ab3131cfadd9289defd53afcfe73822 4e66da34db1f7b10c1042be3fa399f73402b13c5
-54d4a08f5ca4928b9636cfc65457aca561f67f82 7dfc17d1ba314a5636072203deeb776a5bcb338f
-513636c676f93076d02da66b1b58d75433358e40 355b7b99b24c94f3d76cd6d7af1ea2a24a003ab0
-c26e4653fe7471e1d239b1cea3cd15b38d0daf12 29479acede00081f13ec5cafa701f03fbbe38096
-16162104fbe70eb29cd2f4bf916be69991106820 2829c643b489f03b9e7b2ac19d703ad884c8e9e9
-62cdd97ca19fa7bb4bb778babd827111985b12db 755de3f8ca51c663e6cb804f7e7d1d0fee40454c
-a166d1bd606857141a10c5dc6049f65eeaf1b973 30953c1cfb7375f57045a1720e921927090f9d92
-5ed6aaf3dd618ca961e527b9c886e300e7df8488 fce4ca9f0d2f5ef4381dd98c446146849a77590b
-6a6196c4dccabb5258e728cf2b88df2c1627d55a aa612590e8e615481e48e9d1f4c7a8213017ef97
-54cd2765eea40d4c4edc2e051822ee4cf975d0b7 58b93096b47dc32c4a1636be7e1c9a0de434f72f
-b339728bd2f6d39c93c8a48f6ca343ab161d15f1 d15adbac3627090bf7f87f02a94b7c6db1d37050
-f8f9c829e301a0dd3715281d0a35ca66014fa8a6 4b0392c01a65522dad5a0c3872ba72f952c50baa
-a9154f9e8da2a0265438e627bd43c968e7c51939 84e94d417058e2804d00159bc8c2379900bcc81a
-eccb87ede22f2939fd46c0d2b20868065bc76f68 6632e83c83f873fabbc41aa95299c74021f753cf
-8b72432e1c7358f53651cde2bc79392ce0ea76a0 75efb2b329f6008206ce03080b05041892e02c3d
-5f6b03e4ed42847100d8d263125cc173cec5a286 041774b4590bb9fc6838112fc4824fe9c2cec034
-5a70b2ef7b66d3d209d9f11351e888ac8d751942 91c6688f34b55f38f909b8cf4ed907e9d8bcee42
-a60a66b9aac7ddaffc8b4f77a22bb56f1add0614 18a5b7cb685a32db6f6c1af397782f5e30b7355a
-6af046cf5e5418c3ad666da35ffddf8897c26b8a da6f6507c35a8066d0ff9bbcf3a4f381f95639ba
-ae96d0dbaaf19bea46f2cde9f9da3ac5830eef28 e7f1980900831d12bda64af0c76a2a8522980e78
-8e7379ad8759a46c2eb765e064dc367f0bdaf47a 76c15c82e398a8ca35ec572790adcccd70bba1d3
-108c014689602c82005b93f2c950ec4a36d30b80 faeb8c225b3aa96f11ba240756a2c28e89d7176f
-2e5a1a4ef47b2fe919e0de1f0cb522d54ff3ce80 7df4b31f9248d36981d1f672eb491f825018303c
-fb4fc1adeef5d9ae58a05357dca3dd20f0d3df79 fff9d58421db950b0e274ade382b2cde4dc23257
-614c0804e7c918aa95f2e238ff17ecfb61227c70 258bc5b1566fc6af9ba3c1e88b640d08c2f6a79a
-9a6fd9866fab6456e593f250139aa27693af3900 992023a9f3249a1244b3eee518f08f04a9223728
-c95d1d3b6f7880efb8323863c5cbd2910d95e711 2e88fcacb4f207cbd326a822a8c3b797f38947b8
-b0987e3501380276b7a20d5b32cd9d79a449c0fd 318e42c8784d289bfb648d47348b40ede85a7cd7
-fc61cebab337985683a79793df1d31b9e1cf6b51 5fdc3634cdd06ed74a893f99c71a5527f780a37e
-f59e73ad996ecedcc9fde98dc6a18d26ae0f84d1 418ea2421a5f650806cf56ee7ce5824c7c8da917
-61c4748d845f686c9c63096334ea8e06afc0c225 a1cf3babc484b7ebc21943369a5e7765a37ae5ef
-c5b72eddbd1ff1809a6a19ace5602cc15b9371fa a9da9bcda6b0cbd7672957555557aa7f873a5b42
-840d23ec592591288d3dd0c24e4b57d92039c5ec 9db0d02f914f11190ba5fabf893eb9f89460782b
-0db87c1f22a99e089121f3ab57170db7c706ab10 c451fe99e27e1f58e9c51ee75d085c42e49dc6dc
-f09865b2ac1bd6c2d03fb56ef4cdd77ff64ade49 4340eebea919a9d23373df20b46ca6688f48892f
-3a8d479132b28619e62c3b2e8bbaceaf6d8cf001 d1b536a7bb8223b30ec8afb2311ce3398358d425
-01f718a509b20aa9ac467bb7ab574e25ed022804 6cd38103b422f797eebce4f68f04a67392390093
-b111d0be7fa62870ce35bdb6e369dc21209d874b a9b4f88072ccd21d2ce34fd2b25c300e11bfc7ca
-e596481f584a52b18d829d158fb272939460ac79 3c52053442080a5ffb212c37edce83b63a19d27e
-caceb977480cbdbe6da11bd5f08489693ef7a05a 372b9b797e4ad3eec2993b2e70727295ca403861
-8004abb2cf1630923ebecbb379e65d88df687476 637f613b03db18b062c6975187a6a350865bbc36
-5fdc33dd9cd8d12c334d3900de00d03175cfd946 f07f1ec2ae7b85e44dff7e536d49f510a20a5f06
-ea68f04d50b91420e1e05009f6925f94f9920fc6 65d7aeec4e1d77c37e240165d269843e8c2dc1f2
-5f46d9468b8c20ab50cb4c1f8d5dc4d88f6952b2 a95819961582ee074b49dde79f776f099e25f465
-7aecfca4cff2e817a2f0e30ba7ca91f5316bb93c 1864f32b1987fe99f40b68c1e0b8ba2c09cbfdd9
-ed6885db769032fb41e29b7d09f7bde04d009572 74bb3f6718fd417fadcf9a8b543399fdd0003065
-b0048ff3e497dd3f233834a012d2db6eccd4f09f 8b814d9c8695acdfa81e39ceb61fe51805fb40d4
-4f433ee78e3826bdc018db2e4f440f5070b391f0 bacf41edc763bde57e9979061eaf426fdd8b7faf
-500c5d32c17974e935ef8085d6ca17dec57fa518 34fcd614c62467cef402f04fba6d1e1ebcc10c80
-6e6532abc34bbb4c043c11f11c828eea3ea3eb51 974b8d47e66a886fffe119f5abdff5439102b290
-2d69c3c257cdb7d06739aed95f09edd12bb389f8 1a2375cc4ccdb15e37f09b98bdee94756939041d
-f92940376b48c909ef19dce280f25c3cb8ad3dce a9103ab57f4539c742803705a6bb6e4d3007697a
-72be638de0b391379570aae6851e05ce769c3c6d c9ab2989ec9f0ce0bfd1b303fa5f3fd2f4a4c5ff
-e9f7e3682a739a8ca559c035769ec84fa4ae0ffc b692914a9b85392d2a340d3c99dd67677669e447
-daa40c04406afd6071c4590d245d52b4b6725368 871ca9b7958e7f086debd1ca8857f8ee25ba0183
-5c759478ab4cd438dadfa5304dcfe377bd0c1be9 03a931974629c4bd1fdb578178fbe1e83af7c5c1
-5048030e2b26f734a071efefbd6e64905f2f6b03 bdb4b5848775f9f3facc82413ff920fed34360cc
-eb56d011ef948a4483316e436d7e03f0011866db 2d651e4d39c96e3c5f34a295006487fd37678e43
-a591939da183e97284948aae45bd22ebd192e80e 634e82a8e960b0a3fa90daba02bf9c492c6a7190
-71df51442e6fd912b55b807b2e767f3f0c3f93e5 8a63643feceed7b52489bbaef3cfe92f92c718ba
-a768e1b23afddbd2f8799ff855420a227acc7127 db0a2abd3dab68d1a60a31742d0368d6965edd25
-007324765b2df8fe0b9e14ddf31c4a1958f916ee 46b638d8c04ecd1ba157bafb09c45b17c7740991
-e28a726daf2dccf28da62592181088b4ed86a7ba 0b4d1741b1ade876f421dd43ad50d6d07fe6284a
-e20ea1f5fe9ec097508ab5cf7fca95dd8dc4718d 72dfb1a1128a473103af4502b567b9f1daf55645
-240add3e8e967978bfefc5cf64e9ba52a7b2b91c b9ca4b8519c32290c8dd644f5bc44c25aec6551e
-2eeadbf1e9f5a83b1ea5dc14db15181437777ec9 53c7281cb92c8235d8bd891b4bf37594deba7411
-6ade74c667f071cc714f34b3a79831736c998ec5 ec7163e5dfb7cd6a4258ab5ed42f15df8fe06233
-73aad73f5496970ab5e8d36f4c2200cd7d3c70e6 f2f86c36ca0815a497854b595c063dfcef5b8f0d
-ee7b881118b71d68e452bcf857478d804fc12d8c f78cf9418cefbb0572d87ac269bec3ae6de9b142
-61a8ec2ef74a08baef4788d40473f591f5b835e2 97766a04159f7755ce83c8b8c42fe362679ff2db
-f82e46d0e21561c5a8697303aefa4c5d106772db b16bb43f7397a0a92c7ba83c45c0a37e3c419234
-8fdb176a6b2e98e3bfc33c679ebec7cf8be1a676 3e068a322a521109c62e1da44b96969482fb052c
-fe3153a5ceedc783bf69c2b46331ec9f4620231b ac2e0c6fdffb6e3e6cc2d23c0aff43e66620844b
-794bcde9af76b99560c26fac011575997b02ab1c 538e89f15d7aa918cccc663a43c0d038f77a3dc8
-8d2ddc425d1b66f3ba9d561599cbb8667503004f 336fd437ce766ec6323c4c41541174f5f47b6a31
-59bdc19d4d67fc4ca226c650e0a341d77e380b17 f03afce3f4d76d672e37e0b983ec54929a274031
-7d8206bc5961f17028f3d21456dd35e6d3a04da6 2bf778cce876a8d5c286a6db6a2de977c9f8816b
-bc61f47f9ca4751a98b77800cb47fbf355e7a383 457c08e3d8a0e7ad10e1ff987c1695aa4b970f37
-4d35e45c258306034659742db597a6c513bc2ba6 914ae4aaa2dd5eec997e1f21ba95b2ea76a953fc
-5686b8e4ad087d7ebca20eab9240e02ac7a83e0d 725f1230f3aa380e7b85d0f33a29b51a83053a14
-b7cce3522618a35aba4cb9b7e9ce3d2f77416b20 97dbc1f76e950ee447990b387050fbc5b465bf12
-a375ebbf55c1420453f4929ce0b442bee8b61bf9 6bc607627dfb037d48c165eeaf37712e9f102534
-9c48051cb8af8ea467917086fd23b1465d2f14e1 ad63207e51cf876c1f8747af8d520a74201b2a9e
-9f038d7e67ae2aa291dd3e90126f6a44ee40672c a2da0525c2338eeee71fafc61afb4830607063c1
-ab401ea0e7c936cb04ebca07ee5e2b7ccc698918 4a313010b2855dad27927f666acd48dcf43ecfcc
-ca5307e7052f0f263121d410f669af086490ee08 c4106fc064325615423e51be870f85ab2bf73ec9
-0c59eec67e9596a3283a142b42a5e66ffc756d2e cccbbeb3dccf1a0e9eeb6b315fa16e4c8ebecb5c
-b046c17cdca4bfa2e358d0e621bc8c2a1cce0459 d66faef18880a2c801a9db494e85a2d7ea091380
-608a8ecf9d4db23df0213e161a292a1726fa470b 650408ba2682af2c9e3b48b8e8a75b93af6167b6
-aee7eed9382769c7e8565f775af70db0f7a6a81e d00474fcad8ad9b41bd2bb1ee1fd5a5ce3d135dd
-1c8156585921693dcc2b7bec842039a0328378d4 43ec475e85a1f686e5609ada878d4d33a9f2c461
-feb8b890f9da9e6ed5aae6238f0289319e6fdef5 832bff5c177f0f6498aebcf0b536b96acb243df2
-d7163662ce5c5d50ae2c7c5a9a56e0a68b273c10 484b66d8941dd920ec5ea68b6ed7034e4e5eb340
-5ae51c511c54a46d319786029ecacb28cbef2c3d 331b6a182b191801bdbc38e1ebb8daf1c6a121d1
-5b3fd2b44b17b48ac399d459af08fb96808f05da c76da0e1778283dbceaaa27a314f92ad07e7e614
-b313abe3fea3074f5c965e85d752b3622c6b88c8 f8ab3ba3c14ff2ce12e5a200023a537aec83172b
-eae76d4337416d601f2598525fe22088fbed19da f62eff3801e46946e5d83b028f66c85f22688d48
-be7cd5f82407fc78d42c93e9bc2d3812c2b53874 c5598565a91d5d48b5dbb0881356c741ba0c0ea1
-36fb283ce231e86c9a4485f0072731eb1634c63f ad0356bfc663ac369f8a5db2d4c365d9e08207b4
-949ca4fabf1ff30e635e07ed8d8b0c1b7c51f253 1a43e2f27efc25c6e48fbcd23de96681997c246b
-e78c0cc15ee094acfa435989834bffc8178637e5 95f39fa07a091c1688cc122edf4835f01f47fd07
-1dea4e0e22157f9751edba2066cc074a63ca6700 262264e73894ad8ab651496e30b91035e31582ca
-25ec4675025110ef7a4991571f393efcd25dba68 0cf76af401e73bf383216d72b3a37d4480a749fa
-195c1d04b77f52df0ff6ab80d5b8327d69038433 a8b5e2ba2c80e1ff96861c93c3d712953cc7a375
-b47a4259494c76e62a8fea25ccb7ce077de53a12 49ef01b10a0f61eb797894c5ead20eef7310e9ab
-4e80d261c0b810028f4a153485a1c02a8d71ca96 5116233ae6743ae8222c077e78c827f7acda388e
-bf727da58ab6693f154f01f97b6bad0e4c8b9608 db2441fdb24cdeba366d00d23f919de254c8e851
-fb9287738acdbb3e14a02507bddfa887dcd5c740 70bdffb473634dee0ae80c2fdd3bde4e7acd4b32
-dad6dcfd2f486ba989684377d82fe3ccaf0f3ec7 35b004b27242b631827d4dcdeb4dc52250fa0264
-274e5dcbacbe3784ae4cf9606562d9bda7860385 8e97c295e66cbf7feefd8b59f9269552972207f7
-0b4430c4be52ef1b399dc3bb38bef7d033d2d83c 709b0d94da7ae31e011cf849d776f71be61bc556
-64cb360da87b29c1e9d55792f0a3ff924822cd10 309f12b90f55c736c89cd3eb196b6d886d46599b
-2e4b6778a801be7765e334bb93ba28e10929b2cd ed3d0f81953064946e4241cdcfdb3fc282a1fea5
-9c8dd357d7670b0110071a63849f216d2281afdb 2def3cfd74cf851bd2b4ab36068ac20530bbbaf1
-3984f4bf6a0787b4ec5ac6e95c01dfd2b6232d1f 3a13eb9aa94569804b479f659339fb1669285bc8
-0cbbce68e3748abec59a2dded9bc6f77876fa0d3 3242267014c33a569627b4934b2852be48644135
-49733467438b2940d58b54525e1f7eb7a90a2d82 9dabf0a23d5135d9cefd94ae0940878f1aef9316
-145cd34809ff22970bcbada2d1918d32d7c0577e 81eee3687090e4f263b2dbdc78d90e15e18449aa
-86afb9be4d02bf4ecbd16bfbcaeef2e949deed9c d9f36515d8ef9200f148bb2d186275171e4c41b6
-bc868255fa5f53330a24c2841d0faede9e7c34a0 a7d8d4e3c80339dde4ea0ee2f6ea9bcc8ccb13e8
-c1537995ca06d542e8c239fe71930d0e9cbfc36f 7d8693d39218a80267d842b99eaca50064393526
-28286204a10169202337fe96d41ed4a600d4af17 a47deb01868901ca6b26863ddb7d8bcd7c887fde
-4d9626fcdbd74829b18aac1232800fb012b6f15a 17069fc449013ddaabcf43b2be26d840f7427f90
-322c0e3aaae934ae677bc23fd3c757186e581280 1e0a0f28eb73879d4997496c752114c1a9244711
-996ec390ccfa96b1375517598edfedbfc47b82c7 7b82a0156b3fe298098fcaac586b0953016d3835
-c6d6aba002508106b46615d2bb20eb9bfbe56e26 eb772aa3a53ab0bb1c7e7e926b3b14f7f9428d61
-abe93e78e1ef69a56dff453f55a64b9fdbfc6729 457d98687f4efd0c3d1870af797bb0591e80e808
-29db8c2a00888b6a28be4990af8e018b55f37e35 3007d673588f0113d3effa63b4a4c0b21f08359b
-9d0b44aef955e69836927c515e1375c6da9f6b75 4be3c51bd6f8bb62077204b4ebbd2c00b57d010d
-6b8d640888f63cae41ec9a2d849088212aae0534 864d4a13a6ec35af05126be4bf9f62bee3cad209
-120cbcd6cf7fce65d711a372a9b7225da083483a 724e89b9d398b6ded411690ad838ffb2021f0624
-7e0d06f0836e4e961a3ca74c1b3f6447d118716c ffcdef28cfffb132f770d2f832fb284d15ff4a5c
-184aa4a8db0cdf016d954dedc41caff93eee081f 994f38cec1fc3ae610446649fd7811f57febad50
-1c465387a9d34723ca115adee1481339956fcc85 f2dd03d85a501a4e806824f8cdffed7d2fba7a81
-64b6d0aa9a83fc77968e24a4c1b601ddf8aedff6 7265356585c96c94f6cab53fff4eaf45b7d4b510
-300cdb79f8d33cca616c1537ac02c898941a96f3 d02fa4c95269b32ff1bcc36e2c3750e5f40b3db3
-426e4e9684efd1b3a4eefdf987947244e948c79a 6e7741f9b9975c82ad831a9a8d8eb0665dcc7650
-f8e72ce10ec789593c8f1df107ae7c62c02f6260 927169eb33ef64c3989c45788867f7fabccd9dc9
-caf9d310508cbad2040301803557de00226c6e87 6782c0fa478d9f5700a1708b9851f148b2a9d97f
-a90f541f013fdefbbf596320ec4749be520c02b7 d2de7a84247b75595644c4679f495c6f407c0ca5
-9f472448afc0c20c26b0816024f34b1d2594677d c92ad06884dfb4c073a3cf844578f47124f42b29
-a545af160abbb8ef265aa6619618277d7fdd2113 a238598a18fe9b75709f925381c504ca9151c83f
-d2677ce3b3b946df1a7803a9e38d0a38faae4066 974c754ffedf364957d7278c031d50c3584c9bf6
-26fda5ed2f973bfbbead85a9079753abe5d1a532 ff244dfed205a8cbb0c7a051b41c5e3f5627c119
-7c3d4c293a4fb5b287a4f233b86f8730d849fd82 a5582b32329b9ec87c09339e6de8026781689267
-2036d672a62405226ce1d166f58b373775a88400 5c2d6338e88993cacb8b2e6b3b9c0e6fb573e1dd
-4850eb1a74e5abb0bce41e5110943febeb722a1b c9202ddd1fd00eeef0ee213faaa6e71ad37532e2
-13aeb8dfb5d0020ddd5cf17be09a95837b828d29 30b9ded8de408875006fe529768b30237be225ee
-b7f0f3e9ce5868770b92c85d4c676b595c4e4bd6 fe5fd26e48f013b0c473d918cc344a5af10f44c8
-50d41623f17b1f28e09e271732655fccdbb3cbd4 d78c24d78da2e1670e58e9b2e95cc00918f490ab
-a5ae78bf4ede4f9e303e7dbef38300aceb7ad624 d3e0dd04f77935dd7921df086df517944eef2ca8
-10327aeeb44ecd053be2d303b1bcbc46ac28fa63 34e5eeebdbad569b8da109fbf5f81b73829e953d
-42a1b3115fbfbe18fe7111d68de487d4e5d73733 7d482cc3d2525bd8c387589e284fad491af519f7
-2890195d79d6e223e71e05716bde5eb049730c78 8db74bc687c4c69f4625f0c827ba5bfb7bb57183
-dd7081ef8859800073872d5807361cdf4271341f 7b017e7cb6b45d96a663473230390219fa55d11d
-6159345e624348d1cf9a7113a2425345aa3138ac ea05d945ee5bef36ce43b3224f08d57349a51628
-e460853bdcf338880fb3dd019f2a25d93e7d4052 62108e132479981cbc4815c0983d4ecb08ca2b79
-28bbf84861ed2f1c122af27833070840407ea03f 0c37313a538975ffdf744856a39023c9d8151b65
-246448a47376afeec56a6ced201fa388ae1d3ac2 a589cf0608e3b52bfda893d4b6ecc224cf294eba
-48ef0fe4168d4cea6ab88658fb333ac08c69fc21 6e9cacb9a4d8f6fbcfeaaba7344e121b7eb5931e
-19bbd77f92bd739f6d93d4a72ea5453811e690f3 b98e348bdae6635641f09c2eee7539a054a3539c
-60bc2952bad4de46eea535c8bbf4cf41a643cbc5 b98e348bdae6635641f09c2eee7539a054a3539c
-ccf238b8d861e542ccf49a383a3c0b3c0383ffff 6e7741f9b9975c82ad831a9a8d8eb0665dcc7650
-492060e44e05b7e6fd32a637982e4b897eb032a8 b98e348bdae6635641f09c2eee7539a054a3539c
-2986cf93bcdc369a1fe6d3f586e5821a93d7bb7b 871b6719b76cd76d27bfca5f088cee4c64fe2df2
-a4d131f9abfaac7f25b0cc063753e3ce5b43bf49 2e100ada604c0ec27203fdc4b949b9ccaab3faea
-43acaf550c67a5122f2b6e08273d1c480206e65b dac438d3807183c5a94df296d2a59a882f571128
-29d6c48ae955a3914a5e787858da581126b69f2b ae010d393baaea22dcd9aec9fd6224225457ee86
-0b71334a439e854e0763842f1ec726205981c2cb 864a72ab200fec1769ed6e0791e1dad18eb0df48
-385fdba81ecb54ae3bf5fe32959209a1724f8a24 c4d91e23fe72933c5c66619da6bb65597e01622c
-68b92e4a3bd87ae0fcaf79c1234122aca4dfa9b4 2f8f4aaff82cf6aa02ac143a7fd0a607608d93f3
-979884630d10100daac9575de46ec1ec2ea32f19 96f42ca1e4b7c431f8b67d6701ad4cbb3330b556
-368dec0ab9480b5d93499bb6d405035b4a22a0f4 546ca402c87d01b3502da97d1b9d3318dc92bd57
-784a9a3ff7c9af77073e86eeb079206701349706 cd0f8b6c1ff94db9cbd672763729df303c2e8448
-8ab672256483a79a5baa53fa1ddd09a936cf0d5d dd26c941a4b4b3543cd01bb706e8c420c8116d2d
-c3c8f9dbbf418fc93f02234fc272ec9817b4992a eded3197a1dc0ef812468a5b33fcc5a084700dee
-e28689f0b4ec3f3629e03c02254242bc4811ce04 7f9e9de7262f60b83303e4c2ff83016be37df20d
-d5cefae0c3130afb6a3402b2c57153c425a95647 8716823193cae598caa8e971d17dbc898599fe4c
-f9f82e4f6f56755395b09e1244816b5150d9c9a8 3853115c68efbaab0b1d37ffecc4d053ae53f2a4
-ebf0e02fd1de4f4eaaf9a753f1112cb59398c34c 025ecfc2efcd5f02d4cd66e04fb35121f5b5a54e
-c1647c68df1df75dd62149d9454dfd8dbff07072 46167ed423b58f89f75285e82f393198222e35aa
-118b584137c25bae9ece32b1ef64e5cbb3c3aa13 6dbf4eb6d6075cafc8e66f56c1aedc312b7b5b07
-f0663aa57134a5b7f2b2f36a4991f7ff59318b99 3c2e7f6875bece6098d95393e761d66ea150d4b7
-a837def731328bba09f20f317a2f769f9777f834 ee5d6323e00617d00e47e70c38f5427d621fd6ee
-95e1a611734e206a510d288ed2938c2c50c0127d eb3b927512fed131b56ef8e1cfcb35b7c5edcdae
-e3d862ae9511ac99a79f736035faa98db91bd2ab 9fd685c97fe2039fd8843848ecae0dc09dc91d7f
-61ad07dae223cba3f53ea6fa7830cff3a43d4f01 6e057b2d99a8c331de5cc5524f2f944135d05279
-f56a315628564242f08315cf2ffcd7017e60ced2 d1fef97fbcecd51ba400032cf4cb20f2a4eec9b9
-5090983a1e6c9ebaf3e7261f261317ca1d0cea78 391218b2c59b4d8d993aa73154a154deb51c0fd1
-b96c53e53f6e09d73cc904abe2ab21ad2648adf7 755f3831c79021a544fad5e2f091a40b1355436a
-66a69ab110b2efe13e2c68c788d9fb33079992a7 d9a026e751aae0aca3aac745eee3459aa042e9d8
-744bd7c535fa074e7cd0554625ff5e5695cd2174 a1334f02e9deeba975cef5f709dd86664c8bff6b
-d9f53fd513ddbc1bd0a9b7a7052a97935908b6b2 cd3e9f4b4a55b52642310132ecb27552d578e166
-15f33e950fd8bbf880bcee85747f40654f788772 4d73063dae3c91f409f57ea58c433c3f0e7e4c25
-43e97269a251303db48ea87ed7fb47f94fda682e c59e84a2dde8b2dabf9fcf9b491736fe858a5313
-256da629234cafff4353eb1b6859145e4de0769e a6e4117b35747f354051a39c6471de5f2b74b9e0
-830ac93e0f594db90118dd93e590d8feacd64f6a 8ca76ab80b0f84c5ddee474780ea2601c7b32c83
-0a75a5192975d145dd1f112f07de643d71597dc9 9d1fead1174b0d8851dccd5e81593fdb26969df6
-8737f8cffc5f5f7b86bd495a5af233bd9419276e bad9344fa83885c05b3d51060a06dd216142d919
-7b42770d18b415b45da248dc59063405fcc6f786 9248084207e1199a7e9c2e62c736cc9656391900
-6140f9b21b49f366f8155748dc4fea6787b5ddab 0ed7b50a15b0205754106ab4e73558e49a7a7a52
-de14e8323050c5c4d03152eb577d982a371fb872 28007a4b2986a5280c2300d3b5daa935f2c46d46
-727f09ba901a7ff07aa89dd1e6c970ed07c73f65 2bc2f6b7bfe19898bafcf4eeded7212768f44fc8
-4de9909cd3a0c73a42322335b520b1cf3186f94a 0867af18d177a487ab0406c53ef28e36aa3f3bfd
-a8556d7f627630b788be4b2076f28a3f7a7d6670 05d3f0383707c2f8096d7027c9f107111c58f79c
-ae2647688b21ed5ba00005146a785bb90698f4e2 bb1f7553008882d7197fddc65d86f92ede944b52
-f160d37b8bb04413f50cf41f49efe126c2dcbcf4 edc46bf13c42940e5dd711aac1c488f11e0987db
-1fe575a12747583ff975fc04f6974360ad81e840 be2671baa6fe2f57596b3fa95b57a35b133571e0
-b2e17ebafdca6883adff221d547f5bb6f13adf8b af508a16a3864b7f6d32281ee752bd23635a23fe
-af858db70e4dea1775b3519998925b8bb2a9aea3 43b00ccc04a702dd8f21cae68c6b3631d3aa34fb
-a0e834f082eb2cfbca7abb28466c2f9017d44b39 3488dc430135ac806e563603f24948a1e9592de5
-4e56e2d1f733a01c8a4cc7eb7f1fa1e121f06c1c ae188bcb2e46a36957efb656010974027c1d1f7a
-4c5b9f99a7bcc6eb9d261214592298fc01ebd336 e49f190cea191c57798cf611c395f75ca484227f
-059b083288d0131d1509b6f1ba148ae5e84d3e23 d4b4b6136ea70a9d82eccc4110c452f65ec45c60
-eeabc4a70a6f5708642bd388f5814a65c67e78a2 3e43939663c60cca0820d6c7d4e1d20d1de39c17
-be42ba397bdea52a7ce115e69d10810fa84a3437 07e5660ae2b34736a929a42ad091d7a1cbee026d
-5e552073bbe97fc36dce334de0b54dd30a93b86d 8d025bed05deba9e6b1aa498ff3101589db7e551
-371fa59b68e5a49179f187cc00c75ce637834e5a a7332b06fc309a7f59f316aca1bc53135bcaab74
-b9906fcb951758ca62891f2312be450796076e7e d3a488950a6382c4436664628154d75297f21fb5
-ef8778c9811fd8ef84bf7bc7eea3fe925dfddea9 e27db050fbd8a02ea04623a7890386b598e05063
-f0911fd5f7bcd245e596039376126eef4dd6ca3e c15d619e85ccc82552823a8066ea4ad7237f9dd8
-29eececb06a7c00fb311952c3ab55c863d08955a 6094f0cea7467026c86e023832711f18e7cc2bab
-d490999262caee44628c5e34b3f2ab6c7d5151de 6094f0cea7467026c86e023832711f18e7cc2bab
-265e31e1f12366c61823729e057a1c5c462473cc b2fee5de7205bdabecb83e0efc3e7bb3ce9188e2
-4717b68f695227885dbfd628341c0ea8758a639b e27db050fbd8a02ea04623a7890386b598e05063
-d01e037bb9deecad9609a9448254aa266305e4e4 1aeed2e6ca693534c634d21a99648fbc60e288e4
-5526c96d4ebddafb732cd92cd23ff36b21c221fd 421f36e7719589c70b66f3c85e5ee978fb13ddc2
-a5695c907c55b80205341425d63258a0acde8545 e13843737d89e399af0005fb745e9795a59b085c
-b86df422d72142268df7d412cf890f4e5a3a9aaf d15b57e13be593f26cb712287127f74ef704a253
-6bc3b24699b361d6128427e0fc98b71af31b7fbd a815c607b3fc8770eb21276edf5eb57ebfdcb7cc
-025a0ffc59a1ca9662ebf7a73f08ca4fb57be4c5 42ada9fd1dcad666adeeade0df59686748208b9e
-579501455d299408c3741ce024c66faf69e4b353 f8b8f253767a23f0ceabf43c88b7c74a113c79d1
-93f44153fbffdb1b9ba12f63f49db5b4296d15fb 1173e99f4fd1b67931189be370de948481976c99
-711ec022b197f23cc415ebe13a0b81d1dac65f2d e77ec5d5c1acd8cb805645ba2488b5f27438a602
-83a80090a477e78b800e8d7b6dbc808c11662c4f 148f077c8f019e18293d7b072989ae95ffc1dcf2
-36ee762f7da7a54506619c8876a61f68d5c2fae4 4eba9d23f300236963114b614c8d818bd604159f
-11056731b20d95e6d22a9f16b3e62b22b5bc96c6 fa6b37b4a108babd014ec031bc5947cac6c7f8fc
-fa851c643b122c435588d87afe5d5bb973a9c55e ceedd101d59d71c9d81cf7cf5495c08ea3f86c72
-9e363c0206b49e3a37c7e40b2cd65773f350bf83 e2f26306b81da13e54a8c93bf2e233d68f56b670
-ab22976520124ec7f32fb4ca5771f2c7a6cdef33 ecf0a54a47f9c538b3af6db12161d31383c945c3
-cecb065c1aee5550cdda4b642807eabdf856ec15 2afe2998527e07d97183f5e60e7120f8137a014e
-9b44fe66987ffc539c827152e60869cfa296e437 e1be4edaa55a8f22036d02233cbb024e3689d195
-2649a029b93f4a17e00632711ea9cac7bf543613 96a4bbc756556374d679b8bda9924765e01ab485
-05e58ca284fddfe0d3606ab150f627bc4be4a19e 12cbf2c6ca6e5a19faf95a1d69ce813ed31a5918
-c6efb334b5448433816e9574136b06eb582d8379 7c831909360d511f9c3bea37678500f7d8951d1e
-5bdb2a3966ed6df887fc283d19689da2f6aab6da ccc0f2965beb48a256aaf926d5497933307e7600
-13599b354dec0427791f19bc1624d64566487797 cfcc139ae709ca311dc6f7b3ebbd5790181456c7
-636b11637589b0fa773f78a5af033223468c0357 b282483de783b4093b4420c12e31cc26716a66ef
-5b3d0e190176d15079df4aad49e20178ae53ac68 0444ade632cdb0ae4eab24c7b4e458afe8c01db2
-e8a946b20eb6bfb5b243ab159a19c5bfb1856a36 23df8fd9f3a0468c0eb89a1c4734c3e44cdb6bf2
-99d45c413b257e6ab9be76d055e40ab25d91ae0e 16b879b779d56d897ce20bf69c7aacebca28fdd6
-7e1e5a864c4cde9297f1e2a766e04ba682d9aaf7 2dcce84ebb76cd3bb6cdd5c7d23db933a386cf51
-ca242104fb0fdd0a24551e85d45dbfec326d8c09 c15d619e85ccc82552823a8066ea4ad7237f9dd8
-bde3da497983e5b4a578ca5fd2a58482af8fdd9a 2dcce84ebb76cd3bb6cdd5c7d23db933a386cf51
-81668593e3dd0446665c1d97a7acb5243455b856 574ee594e3894a541da2b232a6fb64966987dfa7
-450a756f9ec9ea6e0af86d135a2276d371c683f5 c5add5548fe0dae5822278db687abb374c148539
-a226f16a580b1745440ea83c9f0927c601434e2d a826876277c293469f13fd7b80f81dd78720e4f2
-ac13715a56faadc6cb54ce6f0349818108285a0a 2a24003567fbcbccd5814b799280e764f5cca505
-640bebbe6852f1173a4c26b2491f14970d395cbb 3d47ae1e065a91b60629eee1f28959daa5b38b2e
-dc92eeee8700ed3dbadc09765ba03848853ba580 e7e643ec1b2a9556904d3b0c9dde7809d48d63dc
-8f971c2313572527db39c971b2ae4e5c81e9b4d6 611093fabce7c8ae375cf954bc568c4f89b65828
-4710ac57820b651f14db7a380677a32ec134674d d6f776f59d68f386414c59872dcd5caedc6898c8
-1be81a3e4a9d2e87d2de035a7d3dc35d632d89b4 7f5e0c5f37d27c6b58ca6745fe079f348f33fea2
-c7b829aa04f8fa1ab4d4012bd238556501259dcd 9f5b2216a962f26d3e75f6894a3171422af5b830
-1f16d2de6375180ced006845dda807e7f708e383 e347e2aa746f2e8da06b17a5e7138d2ecea14b65
-9488a816acfb0049a60e3a7359b6b270d4177c88 df001df6340230ea586442035ed171a92b1e80c2
-0649f390bd69a62c141321bfaa0ac6afb326bc22 7613cfa5bbf9c5cf0932bd8b6cd4a98eefb9f7c1
-0b9063a9e51351412a9d35e9f551aec17f28ca0a 25116f98e2d0cf6d05fc547c25507be887d1153d
-6129e3efd62eb62c2460055ac336831947d3cdc6 83ca125af8c4b50bf5b7beeb6b4acc2369eff38a
-aa25427b41121abdda0d3179465a8dc1db73b08b 83ca125af8c4b50bf5b7beeb6b4acc2369eff38a
-859e04c2808e931e1e1b5cfcb4b46ff60ebf0727 a1d44c00ccc1505b689076c484dc0b2d4a3e14e1
-e628227750274ff3a2d7de2e270211bfc9ab0809 8bcb8d25cb2859f4e6e994d31ff9271dfc35a08a
-b2e12cfecaf586e0b494d62c685d319179bd762a f4922f2ac1f544a5d17e45761397a7bebd99ee8f
-6d155439517c671cee2c47ac6ad2449c66d80922 881cc672e9a09d61e8351b8b3310c6ddacb24026
-512ee098f1dfcbc6a3744176d2cf79b7e4f75148 8c01000c073c6a23bf1edb08b76d7ba256f52f9b
-b4666273f9ae628a6e74316b2534778683973865 1833b012fd6dad1d7b86f11fc12e18a9d690fce9
-36a448a0073b932e74a5679fbb138dfa6942b852 f7b45c78af3d550eff8315d5224d2ba16b4d87b3
-daf13e7159d622301dfcee8f8124735693dd5f12 31f35ed41cddab3d2f263861ecb2d139677b66a4
-1f4dbb61e1a901dbe13e8d8f721d845a89dc14e8 a284820c24ca8d3207e579958d7dd3aef784a77b
-7d600b529ee801b1a681225e8ee2254535a8efbb 85d767b14d330840837cc4980092e0ad26ffe5a8
-97391caf89c38178cd4b2dcdd0a84e54f2508ca7 dc6fe8617081a3acd5465ae587dd26cee7abdeda
-3b4a49f65ed7655b5feb94bb85aacfefdb0b0f47 159d8a77724d19df3cfe3520bf62fbd3fec9f497
-0b97aa0f383f9f76283d6815cdbfbbadd4f20cf1 f6944fc23cf6f2efa1edc5345f55a853ad40eb89
-348aa0b6df13e6cee187a12ba26c7f35ec5800c5 c8be43864526f377ec8733c5dc111f4a3cb351ad
-26ee1fa0b40041a781dd493f0a71e16cfe5bbfd3 6c17e05692dff0265bf43f112320ec8c5606debb
-f31933d67f59f5c3942cd82f99d95f883c576a70 25b6bdd3999454f5986eaccbe7d862b0fff473fe
-53fa200cc435d5137f9f51782c3a47f7883a90b4 4de6173e11ead2fd3e18efe0604a04669521ab79
-4075dd1d052f7f41e74b576799000d26d6fe1313 fa8af8a9e4efbe89093c624cce0b38271d517749
-207d18732c162e09c0297b47689d26c34edebf74 63d876ff39716420255369bebbd872f66829389d
-d0cf3bd9241aaeec2c1b316e2621009055233148 9fc7a9e07479a382f2715e63878a6b2a1dd96e82
-44aec4426645b3573ce62f3fe9fa2a37da3e07de 86ac90c3da5e12cdefebcbeb02b67ee532402b80
-2a93b77a80a73d91342310a71bfb74789064ba41 7f4db79a8491020503cae839dbd9f757a5138bbb
-9e35746a03aaaff7ef4eb417f54044bb42ec4034 fa9e754ba2e5c9ecfb57b2d0fde3c3a20f2cd9ea
-24ae1d161b70a00a58d5c2fc5ec2a154f60b8d92 db47a4f52016237c9f727623ab9562b61f83c7c7
-dd984f22d245d5e73a42281f03e8ec568a5f73cd b23f145d0d07f31e45b9a30e77bd94e73c9d2d88
-c3d8ed8c78776be2ec9892cea4d08507d4044c06 2d889cee7f2b3c9c3ad621bfb77d6e07fc9276fb
-9ac49122560827fc43ba5d7f5b3df11f0ac3ec25 186a7f3eb4e6301303ddb7a1259c12443e1cf1b8
-17b5f309e126365eec42081511e5add9fe508254 711b62ca62dfdc30dc9d4feb5c03e43dccbc4a8e
-3ca43c9919f64641c0a9e18507e74df1e115a8ee 254834939ba7b4bac291ebf39afec3f36a26a9a4
-263d4857dd0aceee2f13b11e071a6dffd6cdde36 f904cc16619c07fad5b065f033ea18a25c454926
-769e39521b385ef1bfb8a39cde24674a1d21410e 45a5412cd0166fbd7791e0079f82c48ed042f8e0
-fe4d0f3f82a8870d6c8fe129607a12f0a9cc7700 5d178b78bb2e620037311bd6bc8c49712f9ac1e8
-7a1ebbd837c00cbd4cc15db18df018e4d72af44c 54fb393bda8c7b8f70cabbd971be5f72de4a6108
-a5a4a133a5a2dc12f779533ef9e8a7c7e66288fd 44bc6570899fe1953548d7487e52daadfdffc5ee
-4308442f39bd56d12b24f99e648c89dc4353d35e a24fa59a314feb3c0ef916842a6f648c04da2716
-3a812bf8b85a47673d838aec465007f32d9ccf84 507a1fecd1322a7feff471a6a2ba96dba63cf860
-d8b8469628e933d425eb99ec6a395edc245858ad b32e6491561256e86db7190d1c8df0cc8cbf065f
-17056ecd28911816a2d9d0250352eb5d7d676e99 a28c4e647c0c0dcae410d19ea31ac7508c264ecd
-cef5f1dacfb61f3341b5b87598e74f6c94f6e0fd ed1abec3b4ef30ae6faeb8db677141fcf41ec357
-b10e5bfa1bfd1a7c92b33684ebb4ad3006d689e8 d77896e87a24b8f42eea285f75da4ed9a193834a
-750c8d5d8e7a3399eb27ccb94fa59231362ae02d a8302ac3a3ea854877c243386d5cd2b029fb1f31
-0a95cfd0478bb89ee74b68db73db9faec2ed7f38 98a18a1a066798f77b7ecaf6724706cb233a31a5
-f43fb7bacc51b0795c3e51ebb6ecc6286e44573c f358b79dd6b91fa69faf28df7b5a0b91e2a7d5c2
-84df263912f1a29ecd193a2fdc5140dae9af1464 182e1cb54895f8ccca85ee6669c730163d78a63c
-2210e8510819a25d9cc15a590d80c69ed33e5a75 390e026bc0bae6bf5d3713495a9abe5460074e46
-c0eec53696afffa427e74d7bc3abe1f59d3b9281 09d120cba5d20585994c35cff4d1e8aa5026d00f
-f2fa0bb156c744015bc5b72a12ffcfbee7e29bb2 53fc89a765cef32d1edb602748717b28425990e3
-b2479c7fcb48e6e7ef69d8c69adb2032fef7e2c6 f51c60584f9cac2546dab5decdc48e0b8359dea1
-3cfd599cec76108d9230fa1d544c1c3260033249 cbd5fbffcf66328da67b6be1615587a018ff981b
-50432f63e34425f08e0071ce7eac664e90194467 2680e1cfecb52fde173985cb5fbb6a1f951f9ee0
-3f695d44b04843eeac0471199b304b403269938b 64f8bb3975fd7bca4abee6e9c50d22181fc1ad7e
-44156b29a531b622c0b7bb8b67a473b1463366c1 8a3ef98ed41e04e318d7adbb95c9d8ec4a70b688
-c3f00ae7b73bfee7c903b916ead8bea3ce42cfc5 0f2f0d1ee19a9cb357677e3b13e9240d32a04781
-e20fa2cc8f80bfa49b6ecbe1614bbfdcf920d367 769f49ab37d04b64a307a5f718b2785709ffb78e
-144154b03030b60987ac0f47acc4462cbd0a1b3a 13b400d0c6796e60b7b89385268a55fcc93bec9b
-816b43f283a7daa047208ef988154690b25bedbd b8fe2bd77d538a71e9eb4da26a0a3d7995807da9
-6df73abbfff89ce556fdc6927d784f723ad9d41f bf950039b286eb85ad4b3c0b9f5bb69952d07c58
-f906d55094c78abc00c6aaf332ce5887ab999f16 1ca21d14c04eeb29a605fc7bc1676aee921e8183
-5cf0960a8d163a2323ad08c6b31a2b893acd95f9 044906845c74c60b6709325723f5ba425d3e5383
-2fb68426dc0523f84a34600f64fe760d40bf772f e5d9ae88c9cdbab0e935e03ee6e77b18704b7dae
-56816e79c273c384eb47d82b64408f188330a102 1f9153bc8b89a796a3cdebc58b0ed1dd4fb33f31
-ee623a7d067d4f164cf40d7c8eff0f6c623515d3 b933d0f0c694432565d0be6b90a43e715cb3eac4
-991e63984a42ec9155187ad3a100e796ab3531d5 bb20d6c943c1f37bb8ebcdc37dd0a64968ebbc6c
-f3ec4700c6a3a93473b11ab4f6744069ef048aa7 f0f215200a4f492c3c3b9488ce1449282f8c0c82
-191ec27bc583c8c339e7fab3c7845a3717da41cf 06b3ce938c2f835b4b8cdab7fa0bb08efbe0a34e
-792f0d7057e8bf1b176809931d4dd51f30826ca2 3abf227456b9f17a5aeef3777fec8de8e8bef4f1
-aaffa0c5e372eee0dc7d96725772ec3f901e918b 3fb0d1e5e7e5c75d6efe0a6da35af1bbd666ffcc
-44bda0467175d5c1c4072b7706f57f74efaca24b f1429f465b0f2d876332dce984747205284f6885
-c4306c43a3efb3e3f10dfaa5d0e0e1ee7a32151b 959dbc32db38172defbc7e231a265d22670af277
-efcc38156c4575a4201c3c9709bf686066298de6 1c622c915d04566cf58af57650bf360ef38b0c3b
-ad50b41857a87018bd6d38115d5e7ce1225b8ddb 5d07bf8c5476d43a8e906167b34a971ff3c15e63
-bd16ff66c7e5377bb3dc054f8c870f5898eb1ecd 8016670774fa2b09fbb5cb08009ce6747fda6329
-ac642626ea8b8d74cc93682e85fa8c7f08adb29a 0b1da9f0b3fbf44494ec067e569ab72e977e3439
-4e1040e21499c22f3f86d26d597b700ecfb50527 c9dfea30a73084b15cb8071c2b4e8b9fd1189b83
-d52e4923399bdd68813e139e85daad3073edaad2 9a9372d49173652365dd24a707120019e87a5c98
-620a46b78270107444512ce61cc72a93825e4403 f802ff63d87277061aec5c577ee01f4f0f028310
-886f24d161e5ae73bd3253315941735becd7b0da 12f8b9718250d7806c14ddb77c1d2b75ac504a1d
-4d58d3a0d8b8543bffbdf56a7e71cb65a0e5557a bbde0a4afd71ae65ec3cc5a7f58891756d13aaee
-3fea42020cfe917dc42a96eb01d81a19389f8df9 5a9b1a5dbded9b4bfb53f9f60118cc0e111adb9f
-ba091f598dec89dd9a93ffc692ed3ab309523a0f 0f3cc6e94116c1ac9ef3a1d7a89935c3cb8f6561
-b9c3bc98b7e6eb0a0856eab69f157a2544a5a660 f6b1b3cd1f373210520b3fa092b9b98bd6514c6f
-943e8f7e1c082edcdd062fae3ce0a01145b51b58 4d75987dcd43f264f7d275a2a8f4815bb1838810
-73a6eab840e6c9411cfbb4116bf7e6a96d5e1af6 dd428d47117521cc6b6ea788e1cdd77930c2a7c5
-1f3549e813061a0fd77a45406f385a84e676c3a6 5b7f2b503a7aeb3a3bc92f6a39aa9296e4e9760b
-5aad89b4124c11c695f055312012c2a1f0bbc8f9 d7ffb198b74f1cb24c22f0f75fc99bc3024b59da
-e47d390f6dcce6a114ce9e4ec791d2d41850f664 f931bd9b5b519e63c1f158b93eebcae2d36ab4e3
-ec4191f2dd4d85ab6dfe35f95fb9668b1950cb80 05e7d87e6c8ed70f3258696128b18ef618ebb14e
-9076418a73cb3cb5c3d5a2222f95c343b1e47c70 c274d77785042d7df9a719ea9c449c6fc0d06e5d
-81e9688294374db89867c5dd3eda141383cf2bfd 4b2c6e9d9637d9420a10cf87438ff7276d61b2e0
-bc8ac580e407b9d714314f5eb8e66283fb39d1dc 2d0224ac9548b8e909f3ee5b98828686a6865484
-1db5a49cebb1686c7c616b2ac2dadde4ff7ac273 b66f7057ed7f205d7fb38ef7dbdd75eed6b152e3
-f48e7cc415017829aeab9f552fe8e66f55ed62f7 60abaabb839d8271a7a4490d62c6da177b103d3c
-8bf73bcc30ff76f7b7ad0db7a5189c343d2974a3 04c69b8e8f7ebaf804149be20ac86d7ad0d4dc4f
-2fa85bf556e78c9a0846740878de008e526eb28f 323f68cc2a82057a9ab79a6a05b85b52e13e2503
-c94fd07118c30b1a4bf84cc8490e727118ffc9c5 5e28110f0e666d3579fb7d7d2bec5f6e8c67ce12
-f59fb8a721b72cb29bd2872c07a4847be5e75e85 ca5eb1c30ac92d693b9eef4e4cd1a309f5ac9c26
-4f9f75afa75792c7034b384659ae3fb700ad0c9e 9fea2168f75f9146efa98cd3f618f1ef07621285
-0ef007f84b2895b156c87c86acd03e601f89d2a0 3e7ac6a750f3baaf74aee9e996610f1fb206271c
-ac23ba60903b9463c0eb867e07178c67620ba860 48048e02644899ac0a73f05c0ddfa62f84d51421
-cdc5aab756c488b2b9edf6de2bc1a074cd1406ec 2bccb6efca923cc942b6238d283ee1ceee5f6ae5
-b8d22f9839ce46a381d2360d63a058c921d9ae9a c9fa0287f03cdd3b4f21c983249d33a846c3a956
-35826603e21aa819b9bbceca79c005e85d8ca7f9 2466fd72fa2b6bec3da1be60b24e84b9a549fc4f
-44b2cf9c79dc919fa47fb57e6e1dfb389364a3c3 5d22dc0a8ad6ee2d17f6b02e3c79c8eabed8d93e
-b60e0326656f9c6cdd7aade2e881c5c1c335c420 cd2fdd63bcc8585c9095418f958da39d7feb79db
-3d50dc2d0947a64f0751a8f1d73f52cdeec7a82b 5445be6630f6af1caf10ce084d3a55b8c9e0784c
-9196ae7f9cc55ff1449acd0714bb844818f516f9 bdc3e4221d0bc21be8ff437de7c2441d94da8c67
-7d6dece296678c387110876826b372c548839154 4567adad19622ef9e340f5a1fb2d21fc46638873
-38829d15ae5acde638294f56f86ba4edd9220aff cbf639913d2755e365ff27c68bd3400492de65db
-54da3eedacc844708926331206f58bf450c121bd 83bc2d088edd04fc02568de68c0cdb8b07a0265a
-1b91bc0e4528bdf9a84c97ad9a3bde615360a307 5ad9d021d1684adcda75d1feff20bc61177a4cd7
-5f3f52267aef0623a9faa42db76919044b7feb40 4dabab142cb830bea8ee95d72d42f4a456ae99c6
-096b11aab5d67817a8147ac43e48d895203e5f5b 0573b5b0561ba2ea061545fd6796063933014f40
-3c1d420d21413c638affc3d8241bed1127a28427 0d97a64b811207b59e5142dfcc036995fa0cec6e
-0761b13622520982783df3d1ce53dcbac5dd43e2 b0e19bfa030bb0036037a58860c1b7b5e04747df
-0ef01166c9a3e612b714b4eb969993344b793aa1 8d26caa6a498da3b3fe19d10df71b9640dc6f520
-0e9aca0aa0e102292904644b99d6b9febc1c5170 b056550d982c42514f6b6172e1a1e68a9ed3c762
-dfddfb6acd5ac516e68c30eb3a211758b37ad5e6 0847830cf64a8289a104bf03474695c439719e8e
-0b2426d66f397792baf69a87470e24d78bd53063 9b4915d3f96cdfe78e51fe71021333fd7aae7702
-1f0d4d69a48c7f23a71bea9806939c13790192d5 2acb1f2c26a7e160db066d789e00d53e78528048
-dd969910eced10bb0b203c845b00c526119d871f c4ce0b064ff1af89888500c4d429f69699cacb30
-4e017904dffe8f244b2e92e44a771d70ce752aa0 26258757f20e88a2ac4ad1d706d8ab4057ee2c0d
-31f2072e38da8da16077e63d0ab09467a07f6a27 680e389df996735687f9751338ea4541a38a6060
-fa0ae22e3013ee57f9c0c3b86c4c2faff124847a 429e1489bea92918bc9b0ca7138ab836df21093e
-157e8a569254b55992643501ac2d7b2c1698c01f 45b61d59c6edac79e80b4a38024f334ceebcd75b
-2465218c0ce140b6378fb25326ed26db5994537e bd4aa6bc8f390c48fb0fd0a1f7c9c36000d7291b
-ae9865a2d1badfad2ebd4fc2c2fe589e1b954225 e4ac7a3a3a580e7fd444260945d3b84c4e6120d1
-b4231607d469c87f2069a0d3bedbb91c9ef67797 fa47ba0aabdb4d0e9aed17fd332fa99309007e04
-9e3cae6ee4f4d7cdcbfec337f4dfc5fb0bfdc671 5c1cd69c82af27db492eb178ada924e749a2f21d
-16d13c221481b16e2ebfa0e54947123f9b8c1ad6 2b3e6b7b4916047b43aa5dbb537492578197b8af
-6e1c03e024b23abd01e11f6f44fb540ad6240ef6 1224afc1c08943f9fc3687301d6ee2284c93f8cb
-9023a548f2ba1d5e73fd1ff7216b21376805e24c 5318f860e541afc915a5acd41fbdfc55940ea9d7
-b899bd275cce5aa6333cccc94772b14d139c834d e40b676c75c029e60ea5a831d89c19dd1b5c651a
-d40fcb4cdbd5c58738c17d21469ef9863917fa20 d81d6738d2e58a6bc32cc6731a76cf790a7a1ca6
-81ad8a6ca35722c0e8f3cde970f820c4ec2cd9b1 a937c19273ae5a01540c59712dd05ebd1919292c
-b3d1834e4705c998b64166514924d5b0a14b4ba8 230a37841cc8e7b3f2eb9131d2392f8d38c33369
-ec44cb636ec6d13748b8033187560a371b16e069 7ee894662a4efb45a134bc216d5428c61b2c1fb9
-bc6a6ab2ce5488647fe28312dc28b31ec719e253 7567b7d9529e1d71ca2666fb7933875919284aa7
-51e9b2047749daf32e133d48d0f9ac9270824ea3 9ecab4e802da66496e8b232858fc1dd007bcd6f2
-79ff0607bbe129bc6c8baf483cceb5e00f3c074e 7925bca0fa6449269a837554bdebfd742c8d88d0
-a01ff8ec0b49304588601046e62a5e23397e394e 15a654f5b3daba9843f537f6cbf904b0b79c40d2
-defe06a3c39b20a25c695fa00c30a23a6de10aec 17269506f1cb0d269a6720e276386b1e8641e3d9
-f9626e818c6be4804cd843fd2b9a6fb51837b838 0395b4d6db2d89c7350477eeb4b2ceb684d92814
-f7110f55f3434fbb91e7dfcfe36caa1eb4b2047a 0379f2ff54a5c0fd6c2e119c15cb31340f385deb
-3bc016eab11df78561dd24338ae065e457b02f40 f19c62c1ef8be3357c2d1509cc238eb854f508fe
-e845433cccb50a0d58c30935438aedcd36001e5e 9b0f9689f91ff1d3dd6239e5f572dee44c3bbffb
-6c13dc21c55f122a1cee074d74b73dbc19ef9d3f e73c1c7a2454b2a5137bbe1d612f1b123ace2d36
-51199a15743435e300894b00c308c7f2ee07ab1d 6bd0f2e3a033446241106e6c05600103584d9beb
-9c7578bf837318e751beed4d44424e38a4486f4a e8fc4139818440e26fd4d7de5ba00e27a81d03c8
-f0727fe1294a31f57bbdc73a8098c50fc4fd192b 6a3ef2259bac747e99783b9fff60350a22bfe328
-376d26c4db6b065ad8623d4e082e6520fb39064c 955139f970f903bb39aedae253976854e16e9da5
-00bca8c2c8a4e3ff63d1c8e07a6cd8c727e6eda3 7c8ae6e32b070ce49ac95d3bc5cf0c3bbacaea0a
-1396896450ca558097c1174833ad843c2fa81538 15c394c5e9ec6e9ab54e39920e59e02221d9c533
-d2d2651a86ee87f74dad4185d016c966c1379a2a 954dc1b7702ff245f8b4d778e46d3288efbae150
-e89bcf1c7150c9fdfaa838f82caee48b04c1d874 c027770da19fa49a2f9cffd70d2e1107400094a9
-123f55ce4e5cb553fcc144d80c1150cc84352b32 029cd879522c406fa2aae47a8a2d9739e6126443
-ae2e1752362a7bcb72f3ec846eff7bdd6cdca6b6 0ee6a17108d0ece910c8e9c685f0f3dcbb83d79c
-1df958655b21f2ca4e2f6f88df64c22f3cd1b0e9 d787020df40c244899fc7b0779e267b3a92b5a77
-9da7c8fb33baa7a7661271e7e7283483236041af bd6684584186867791cc17af02a26aa07fe6e154
-a3842358c0e435389b966ab458b269063f0b9f5b b9f235e5c05b85c52200413d63793475bef29211
-ebb6d86a3037c1192c03d91a3f85d0695d996eba 4796d016af2dcd9e179dcb3a256c427b24162b1e
-4bd4500130b79ecf0e26ea1ae97d0b5bd60c45ec b1135c1fb5b6dd4caa5110821c651cd1b7e8b573
-33dd25af2e160f4ddd56e0f01070ed0b506036b7 70eb44f324be0ad3877637d28749b92bb0e0a90a
-d658f08eae9d32443b8ba51e715c65e1e713a1b3 9d8e94fb1eb494020ce2e8de7fbed76ce63f8566
-b77b02a78f113e2f7068d92b969cbd3a109fdf49 2b1651d58bb7237b0ba664b6dbcc92af0ff52977
-c9dde54ebf14e768b0e77f7c36a9e0fb9d933b2e 5347481ce4e6d48788ee1be3e4d5f92b5fabb0d1
-a89c169b913cd0a896c9576691adca666dd43236 4706bf8281b06848a721c0e2c80e5b20a44df817
-2c60b77f0b48c6b0c22b7ab33d8023d8ac74c399 87ace25cb522085fe1a35da31245442fc3cf76bf
-9a49ee2493cfc34f4edfc473194938a0ce3823ec 9f301555a2dd973cde35cccdadacd1ca9ab47eac
-2a8fd7217d7e8ae71aae322395473e6e86336220 7dcb9e4e60e6daaf9ee165004af9419e54a1f270
-2f8eeade211f371214619164f38237fd923668b8 b8470a20bf5a857603b7c9f1501b13928d1bc355
-8b745e9c14115a8b49313a96dfaf59305d1e258e 02cf2d76103594dba5a46ad55d807b5b8d03a7ff
-c1912b757c828ac416c981305b618cceb5a98234 88b3973ec2eb9f2784882684ecd66a55fe85c28d
-07421c249efa21dc2b31da60a7d0994766a0ed5b 23527f65d5c92687becd4639b55b5432f9ceacdc
-9b7955fc7f4fb5a65743351a31ab6e9b51dee193 fd5e60a78e7e35b4cd8f3960dc93f4d9c6c2645d
-01eecb0b2ed9552a2c8066a182354371d9eb95c5 4e80867e9e82b891b9b9790e2da124fcdc8d36f2
-a14715827e91b120f0ddfb41253000063509628e 46df813ce4433596f97c0e7ae6bb583e3b607c24
-1d4c97fce5be9bc0a1c32a75792de0a95c37243a 43a192ccdc92b63d09960980b89a6600a293c3e1
-61da16de663b80757d5397588f76a2507df934c3 fb0d5bd161f4fba9e05bf422e30c56eda1a191c4
-4c62be7cb3dd4c697749b993745ba7579c6094ac 6f54b793125b96221d124dc2c74b1f20c8573677
-228f28c0d4dd0eeed33072bf663e1df071eac979 49ace9c3a122a9d3c8f9162c99c6abf06a12718d
-5ccf217f25137160518a1847e6c7baf5b539c9e4 59c1ccfc581c1f15e98403fc2df4ff4e52fd566d
-55a761363d02f14a96a54e3bd3a888a243254375 b3ca1edf978c9b54fb2f0371c3c6432e621a97ab
-cad0a16644d4b202fb79e031ead10adee8c852e0 ec7c0d00149f45812c7fcbb42bce7f93746d0310
-317443f4012db275674b7fb8e1c651bacfe0c3f7 f5da31366651af34d90fd52653b2c0cde42c9d09
-687d65e689cbe3536724dc87deacb345d4527cc7 840b94193ce80043d48b0041bd8bfedf9c0e4e03
-562d4ef84ed4bfab1076e9e80a0cd9d525c3fc6c a62737c4ffe36822fcdb26ef3dd84ae41e50d078
-2c1a95f697a4426481921f0239187ab473b9cd8e 73beca92d12f8e40bd5e1f23962c3b2cd57d8b35
-3129369da25eb9337fcb89860c48ee4d1b34a0eb 8d605da71dd46b4b2a9ce8d87d441de832600cc4
-0dc0621d74c47c3de29057f633bbef82673819b1 f071d18ccca5fe22ecfa7ba75e124c7f865d032f
-a22885eb091babec8c8caea4f1b4e4ae43810159 1d95e61f99ea381334c0e03384814a6ab308d9f7
-6169f9f4196e43b5727dd88c0a90e8444bbfddfc 0243c41392d8391b683d4d05296d33fc78d7a7d3
-2d3fada19748df28627034573570c5ada42d9d90 8f149b622b087c2e58c09e951ac9e2cd26d94b67
-f754a85a78f6854be3f3c1042841d999d505859e ab05aea76d1ef5ced914dcaf97963bf91b6e3e66
-184de612f245625cdbfe74c4aa6f0b6a1ca518ed 46e400d12d62203b8a3eae5815a412dda87cf712
-cdaa43477c8e65c5426036c8dff74222ba6cacd5 bc3a201dd8eac5736ef20d976bfe807255a9f418
-90420edee7deaf09d3a0d14db4351130014ee593 109a320f54894694b132333c34e35b3a4c2f6edf
-a0a369adac33d9e57e77f8feeed5047f520a2539 102bd9af096de0a81efbb797add328c6e9cc71ba
-020d5dea675f91fdad6391e65a25566f4b8d1260 bb62b55de9a5ffc768f1035d3471ab710f9062b3
-4a4e39db71b36e7eb0fbbf4a086b73d957b6dd7f 3619facc3d4f6fe79540acf17e8054125265e997
-889cce7fbf6f5117e37035d995c71b20498f5171 d9ac1e695a57bf50afceb1e9decd52b2c5b1ff34
-0fb50fa33d8ae876649bcb16a4534c479ebddbd1 3aea5a5cf822903e1a55eb50b9030779f08ea504
-fc0556cf910489d6c3a34256f8d8085842213f9b aac945168e3f4053f1b2c5b363f753179aa959e8
-8fa041cb2f441934405d62f74b73e123825f82b9 646adb7fa3465df03caf953c82b9298f54ea0271
-a1cf0d82e6b359bbf6275721089ce92540702dc3 813768d26d5c82e2e631e83ab65fea982eb0cbbf
-29cecd459a7118f59a843c06d4d0052bf259526b 9396ad94991ca02c4ce49e86bff22348aeca2d9f
-10ef72073e5a41d39a0607017cb47b2db719be29 f543884a6fa66e1e4556169dc099d74cf58154cd
-369f49712d83bab8fdd69b195346ee5b901b1f08 ee551be7f73a9333be33b56e15df050e3f9a0dd5
-3d206efd6604553a9779f2aaaa9f81ef7414c76e 817013ff709ed537063ec868170faf4c773cdc0a
-f0e76f1443f5d0db21254d2590c9ba070622f912 59b6a68b72292cb63f108dae7cbe0ddf2da73f6c
-c0d8e7dde21bcfa8c2d64f8f0d5658a009f8b5bf a8aca577522d6f532cd275fef43104a0476c6d2b
-d1e9333a6203aa8d8ecca6358edaf72e891c513c 2b1f879adc53031234925879a6b5e92fbd1cc00d
-1a72cc1397f6212843e9f4024c34b71384ccd20f eb66d412596a940b452ae2b591c981907a3073da
-6c0458f637b9e0b387f83396fab5e27a01689a39 308edd5c395f89849dafb680eb9f653889a06f69
-7428f2d2b4c627dedfc45e8db4148fc6816582d9 ed9cb814ba17357f533b5e8913de12490d3504e2
-1ed83044f23f90f5b8d006f5bf287fedadef01e3 9b8d6d2e667c7d9866c438cde3c533a977cde071
-0da96df3a9d56a46da5515a12618bd6ae21a4dd6 7391c665df5a3ce14451401ed53709adae50886f
-9cd5a894072b65cb681708f86bbc1509c0beb2fa 7c6fc9b9da2a528cb4aa76ce6d6e4902af3e9edd
-78cdc8aaf4c2056d7ff9e315f695ebee9c754011 00b3d0919376b4d709caec3a312ad447136f59af
-e7e44334b0bca9210cea5025b766ae2a0e346054 af94cb6cd04d716af64d97ff09569542edf36c13
-9215608fb6040c2d73e0f79e851a019d5f68e135 a21a00073b46e0106470c82e0080820ba221b162
-a4ddb804591d594aa35fc55afef394453ae377a9 75975654ee77c66443146f6daabcc90706d32110
-84be5363ddad1c37687605b711a879712a36ed50 fa6b19defad13463c7af0802c1fde62c4d6ac086
-d282b460b4d1b54721f51e778ecbb8a802fce7be b24afa113cab0d639a6abf867fc2476c5bdae8e2
-8ffa40c566df4952080129f20aea44abfe2f1ec0 b24afa113cab0d639a6abf867fc2476c5bdae8e2
-bdb6f6f26c4bbdccdd21cd5cb428434033d6de8f 5de3269b73f58908e531de1de41b07d2f2aae3c0
-a2019c2e9d98c15306b79d21332558863b5364d6 17f2e8f9b9446ebacf4c40de285f2c5016805197
-a97d13fa235b910797e86cc5e727d1af5eab5c67 d082750aa26a68493b29666532f3fcd1ea9e7116
-fad66b44e009f92284cf91a01f28b7015a233c98 eec3a903ac3f85da3032198ff9630ce3ff5a079d
-dfa44e114e323ba2efd1ba7963749623a659ab9f 8b83c409f63b6a1c54950646ad7f4865a61052e5
-69859df6edc6eff88721faede6ad9e247ee3676d 9159f569d1b6ed0ec09f99f0f8417dcc073e05db
-1f9f3552a4046fae0579a79014c3fcbfcf9ec047 4401928ab8847079f1314d376018d25441259357
-a98233df1aef0e35ef913b06bce1d7ace46b2727 4401928ab8847079f1314d376018d25441259357
-26f070b15c0e5e128093879b279c85f5977ef7f0 98eebfc1777c7a69732f4e8d82c353fd3ae0fcf2
-09c863ad3bb938151bf7e226d2495383bf5f2140 8ffa561fd85d9b965f7fd9e30d8a202fca5d4e3f
-28bfc5285ad2059d634b675b743a86c1c2130e9b c97ccf12db18d0f5d943e8afe59fd5bf0bbb619c
-5d27df607ca521039fdf55fa9c9c4f74b8b9f25e 4473980c858ec15a46426000988420d99af9e5e5
-a4c295364b2658f4c7bceda480ea6e6ab388b058 46ec6e73f79df794d056d1688f741c6efeb37609
-aad050716c2b86bfa34b6b6cc6c5f6c5ab5e60ae 3514a3d892c37a5e2724d50fbe7ffd73a921f43e
-11861572817988fd9ea724cdb59490c23bd95ab3 204ce681933175ef78dac50b32761d913b216e4b
-1050d4e809b6617ba6fc87f16ffbfe02d5ad4774 104042ecb1d2ca3060ed5c19139c1d1c77cea8b8
-3d01ab88080d7ad043dd2a1ae54bb5417bca2db6 d339641674028716e1d7e4723b75c4be9b8799f5
-b4efc1452dd6a05db3b2b5fa2a874fe704c097c4 7130ebf837806bca976ad14dd1a15f7615e80ae5
-adf04c8035243c013d0de4a0d7c080cf3033bef5 34e3a8678c5e699c43afe11b0ba57376f5cc6f72
-1eea85008843ff06d782bcf3ff86f5acbeb821c6 e156ab3fec7f6fb76ef277c4196b173b7a57df73
-b0a8d84c1a9ff25b007377881049e6e38008c275 e156ab3fec7f6fb76ef277c4196b173b7a57df73
-09c03ee4f562c37042b0f3b5b12c5069fd503008 2d24350ecf29a8cddd4cc9171dacd7c8e3a7672d
-84c217152cc830132d8eb0f02a633686f3813ee5 c72fcc0883abb0e5bdee16b7849861db91424a13
-58ebceb68c9b9a489b355034469b28b72bb585cd c72fcc0883abb0e5bdee16b7849861db91424a13
-97c1b2a0aeddf0a391bc186a9a2dc36ffd261333 b8fe646a90e26c64b6cc56d3c798af9424c357d5
-4d5360526510ec0bc6aa33bd25b4a552f8b8734c 00e25a99240a4a0a617f780eff2b88d4bcd3aae1
-45aebd001f3653f9e63868722ca5163ad264e5e8 ab46afee8aa9933b54ed6b4596e858cb90b1553d
-1313c8e770d880d38156d69f2b4352d779cae21a 46d41b15306714cf7ba6006ff62ebcf974a687f4
-f74b3456f35b7496ed1464f4465e8da7cc053357 36acfa9ef2d76bb2668fed3f1d986000c40542cf
-fa2d0eac91d6384f47364164f122e684593501e7 d6663ee38843c7a3b959d09d32db743fc6337eae
-292f9d40273ebcbdceeea78d2b14eaeebc804bb5 d4c1f127e441b3cd811c511d60d342728ba57564
-1d7c3317005d567887fd0a6f969a30df478e8466 7f84a857cabd064a7916b5a2c7ea32f7b92bec46
-68de53b7cc640ac84f3d216dcdac76fbeacb731f a1b645518a7337cc160f29b6d3db6d24f8e95129
-a25f958223ba1a933fb52033fdd3fa1cbbc89b3e 20fd7eb60872848e95da25690450ad7f5f5d958a
-1a7b746f2ac47c42affa3ca58a5359316228a6d3 3493355a9e27b50deb4b42149916efc8ebe57459
-39ba781d04341242f5cf332930a5af6671d41652 cf24da342b1b28459c8498a6312f072f8d42b1b1
-e4e0d62eb60356cb4a3ad88b0012e1ace444adc8 2571473979183679a9b9aecc82da06acc78bd027
-bbe8f7fd4a9b1968fd5a617a2aa7ce275c87f5b8 5a9ebe202a129f5dd26f2a6fe05b88cbf22cc991
-676af4ad3139eb31a6024518ecb6fd7ab56fdf0a bd9160548b5f8277a0ccdda94b1d563d215867ba
-a7045c117d05926b26e7f532c4885e02c670776a 85fdb1e5738c5789f72b093144d969abf9431494
-574ea1d8b4ada9c20ff1f9ae4950f18e4d27954d 5125c3eba443841cfc16ca38dbe3e6535697a577
-b749772d688edeb8365f44128a234f2d90c61c48 0706e4b443f71b3649cf58db1458f043d7eec789
-1160785487f772b63730959d7cdc2246f9da6ebf 10f878d2f3e627224d0bf5528696a4f9dcc761e8
-be4948bc49b552f8c9e2787ed88d361237d1f41f 6f7067c5968a1a87a0b88ce8a14b52368de3c0a9
-eaa56df572f8274716650508cc14e5ed81908223 dcc52a3e1487c6cf60d5b847e03459fffd097b0e
-21f79c84489dd6e2f072782572ee24b7c326885d 7e5c63c38e50fd325115c0314c93059d4d2c351c
-235893c184fb7a50f076fc1f74f7c6f34feaacb4 5931dc1a85d4a8e9be3328af1d8e5517b23ef2d8
-f0e8102f42227264096c18d7ab4d4aa1bcb19fb5 8fb45487b2ffdb60a34a07fcd729e24912562c34
-b9eccbdb2d8deae94fd6a4abf19d44aee5d74d35 31f3398c79570b984998ca1813656f5db32082fb
-150ace008c69a80fbebb3f0fd71e278a1264a1b8 c1fe9622b22e94ad1a9488725bea1223e5fdcd8b
-f8eb76702742ceac931ad51bbdfc941ee1144ad4 fbe25d5a8044bc878dc4a47d67764a6ce7bf577c
-54b94e1fe647a09dcbc81342de8d98489f9c49fd a0ca4c27fff4258186eab018def7983bbf09c1c0
-cae1b471f4bd7c1067f9d6ccd65ab852e935578a 5e4d37ef973f5b9a30471581f8a8c8cedd69c176
-102e5f104e10e03c418db2473722ab1a33d4e785 ff5eb3c0da88c41d0ad79e21128bed4e3c58041f
-5d4d643ab11cc8656693233c15a76934be866a99 dcfdf9782812e8d5a873132eee1b85b812330b89
-9dc826b1d2799ed4225d9647c7851a4895a239d9 c720206c6d8a977d39f1d1436c12ecb9691b1399
-cfba99724c0a58752c7318e9362cd6d94f747916 e068b3d672e6f797027c4e5cc377a36ddfcc4e02
-9a9fce9d3f3378750e088a03ade38c238006b6f7 614bfdb2f13c50d385c35fc947a76d8ab15bbca4
-470f7919158f878338ce4a26d596a790ed945506 8e51dbb8eca213b2839f1d48118c8a939ae97e74
-e1024d904640c9c19354e407107d1bc531ea9ddd 2cb698fd234559e5aa4c7b9421aa488284b2d15b
-38f6d9372ccb6801273d6ad73d4b5807a98def2c 7091ddefe7644e108f08e04a01d92c40537a902c
-f1cac2304dbc6d796c122ddb148987125b1405b0 a0901d6fc5289aa200e167d3d8bfe0e6a3612a45
-8d0d2dcb42f12a3da5e7650b2b15dbd9525abe61 87c8dde6a10416ccecd0447ee57693fe7232d6ab
-a8b364c492cd6cbfd64a9e81a659f92f026e7eb7 3bb19435258a5fd18815ae3edb650f77bb986e00
-3e462196cdda0c4ea36be07e2eb6da77b5f34d35 46bf05921f2c14996588d2a6b3678c9fb67bd120
-e1c5f7089f34e6716b7956611bb59da344ed58b7 a2746c77f9f98a3085d06db7f520f4a752a80a0f
-42887f640f15916cee09a8f7ff227d1db574b765 986f05c59c255fed4b2138783e292dd304339533
-97788563eeec53f1ac11e1da209150f9da3ef0cc 17fb69f06e0e4b74b15020b4073eb9426079105b
-89b6491fa4b3ee213a2285b1e4d67da454fd34a3 5bc94d6921b4c7de756ec0e9da1f6b6919083ae9
-fb1eb81125f76ac66cf4d643ac8908a80dd2f3e8 c9b3d179a3b37ad0bee4ed99c9861d0a4764d2bb
-b92b7d0dacfd154adcd8fe9474ed076bd9741e7f abd64be27147d5ab36b79263e9fa71d14815aa8c
-084039285897c50f0903a49434ded93cf02e2575 afd117653abc6888b654a359cac8a09671ca79f6
-c26ff1c14f0c0e9c13dfbed15c577533a5415c01 2042e5c302b4f63c5e118221255457d008d99f96
-7c666c31fff2772de5cb021b5a13dfa9897d77cd 80e36a4d619cfc4a7bcce50bc26292079d11a0e8
-96f081422e42b117604b0cba14801c3edb2530ba c6291f893129962f4e89343a1d8362792d45ccbd
-629f0094ac33b9f3e300a470a0c7ddcec0ca3813 68f636d6b4c0a82b03afc1ae741af12fb5f619ed
-40955d3dff0474b938bd76d4a305733202645ab5 56a3c1fb878593c4e15c95712d9e44aa6b43e5ce
-86d51316be10d04478dd5ba54718bbdeeef135c6 c9c64a72d1dd7f6801660556f0c1344e885bbe1a
-621f14ce07fa57eab16c3c2d7b880625e308b9ac f93f271f32e81fb122810f30e9e4d7254d111d22
-86ed22b8b87a3dcffdd69c4b375e0e92435376dc 479354b5b86928cecd19961111a4e69c4aacdc50
-b70aefcc724ab61b729e96f0118bf359a4d00e6d 9ec51d81fc8dbe79e490e3ed5da238e8c1ecbba7
-b3eba1e1214571ef4978d197fc125f25f915de62 7eb3fdff87dd950330cff22901a9c9a31c0479b5
-ac55c43af54cdb535717ef8bf14ac50857ee4c6c 5db6892f792fa107945e6e59bd9739ea0f2f6f32
-96983a4b5315862a8d639980bfaf1de6b9dec5df ac7ff0cc0f99f6e0a77fe690e82c1dd1150e39fb
-2fbe3d46a71a51e658b2435b873aa179d30fedca b95742971e3ecd385a5a6a706f68a1761bf29efd
-2a46c5688895a86f4594c54a68115d5c976261d7 24fd67406b66beba998a3081fab9a8339181fdc9
-9f60e77b8c96013cf92682a7ed28c398928cb501 135818ec9a7db27f6d8396f8f32880a56a38201c
-18c622e2e7f92d76ccded5142526fd360168ab6b 1edd2a6c87bb05e23acd43be8a0ccc1a6c382708
-fab7b3ebaffb41af502454c71d83f08d5a061a93 0df39eea0ab4b8a274e2abafb67164f65b98b323
-38ef70ae17d7c50389e15db3ef64181874e89632 732f3e715aaa83147502102c713cd585e69fa0ef
-93914135e4ed8b7fb0785235e177466994955e09 0b52d7a285f8665db72990a4a621a22eb77353ea
-f744a3a243501c9282ef11555f653d0997afa8cf c077b3c09745ab3203941f59391240cae9eea2df
-812b134125c1133cb19320a9111aaf05f751e688 abc970256bb84510cd37e4a3a5a337c1158d0823
-cdb8bca9dd3632040998857c7b6bf84e59ace097 ad47ec977d9d342b51e4680732d2ce9f7dc9f668
-687d5b7c57c8a70ba2d0abac8b004bb859828d11 0d437ff0a3ff39e983ca6e1ea07ffe226dd12fcd
-724a2f4b812456cc0a02373984a6f7e703ee2a6b be6be5d353da828f72cd8900a4fae683a8508106
-7903a60e0ca1251753f3a7db50aea71b0bd46fad 582c5dc863064ed7bc655dcf47a345bfa3fe221a
-4c2119ea3d253ed59e570f06c93012319147ad3d 2a8949952b4853128dff86631689d2f231892ed9
-fa3aada1750224f49ae5ad04dbdacda3a7e00bba f74cc1b56367b32a4f398a3e6afcfdfe98b0c5fe
-482b61bb3084f5ade6fd8c6dc2593ebd744cc7da d45d8af1701303642211f62921cc0ae0214d1349
-c6dd21a21a4db28721d03677e2dc6e84b7af7528 52cb9108e89988a9b361f8ee1895f0e352d27275
-0e93aea3a0205be8d3d68b96432ee7188ea02808 17d2274b1b8724cbce4e2a87afc51a156e589d21
-231d3e698232426de317ee89b7574de6217e1bf1 02b55dc75946613f8921ab235c2db54348f227bc
-dd53c33fabef65a64c94ccffd3246a435197cd2a 44cb42aa4a37de3cf8dfafc21825e13e0024f4f1
-05a3c9468d9180ab3cfee5fb8188193a64fa96da cefc4883b84956d2c4f15a4e0cb009c8cd3a273d
-b1540230d96d1b7ee25dd671586de9e1f5cf1273 d791068655ce9fc64ec017fcea27096ab42a1d55
-faf6be983eba514dce21bbc9b90e994550e6a9eb a6b7752b769203800d95d196b7f918faa94b8d67
-6f0e52ff4feb69d9413c2bf9a151f142062a9bab 06f446226bffdb3cf14628f7ac02836665688cdc
-722217edd3c670eab9dfdb2fa263ee9229a311d0 33e7ea5a0b0ae5bb3f4d7578fddf43daa80c69b4
-d4417336a33b30c06690e6defe21aa3e6374c371 3f0618e8cbdd7f7a62fd7a1ebd6c91591b3ee6c5
-e6c344578238a7e4ac223bc25b38bbd38f7db39e e1b48b83472b252a0179783a5309805528db416e
-2b216a4671fbb9a2cd920e1f1a141f8691fb2235 6cba4235af74857051ae63f93308dd5eed18e579
-9280a040de682ced152c432ec9a9628f74ecfcae 5dbb63549c15fa217d0d4e0d75dd736bce6bf4b5
-30d5dabacc5c1036af738e331e34e0015a7423f5 ab40bed1226744f1ae620857321363ed95e4d5b2
-f5c9565b69eff2c254bc53731a569bed27c9f815 62fba42709c9173d36accf04a58c716193d6f25b
-2e40ab253166f9cb2e8c780329b7b40f0f974e94 f1ec4f005c32c581eb2a42af30783c7dee272828
-5a202090a8356efc6177eb6701f0ba292ed0391e f4885816b89ab23247767a7019abe53bfd9aec5a
-1b1e1d46aa5b92081e08378ad725312291679400 1e044fb448739512a2d5cbc3e594159897553e1e
-bc00702bd34294fa30acec6cc5dd595e97fef9f2 12ded2c5c19b0b769faf9c5feff84f63273baf1d
-0df9fabbf14679d72acf4bc1394c5150e67a9d5a 1f98d5df6a12e5543c9f8fa77f0398749bd2c4d6
-eb1ed3ba6c3d02dc2150b42d080417dc0c7592dd 00dbd7b2dd57ed7ca75b172dd1bf01b5015cf969
-9076019f63366e02060ebbf49f8baddd4c58f124 fe339c029ff4b6331dc8fbfc9e2e3786d505bd85
-0e4e8e8f12d2e38ce9c6df53b8058cc2f0771769 6149801367c9a992e8c3c69ece32d3cc394c9733
-aa5c99cc2dfa9f5e497e90fce224fd49e0f8b5e0 da02ceaaa5756227522a86677b862b49d94d5d94
-1bd2c634e2a252e076839106745ed89179564a13 245ead0a31e894b1dab1e56611d01349ce752d61
-b545cda43ce8626927d106b7e4cba53edf9be2fe e09be0a716efa5b13f2aa114dfe7e72ea06dcf13
-491c658b772cd89668b9b2942fed8c501b258ef5 1df000df69127861cb8e05f13426492641683644
-c6be7976e10a27f1a0167fe91438d2fa0183de77 d28f7f15bc77949a1987cf28aaa7dab74e2f5769
-bd45b16ee5eaae8061e0f53b879d66dc707eff19 ce4ff200960c6637160df789301e57ebecfad6bb
-8f596a1973fb8d20de607ceba4c1e1b2564e9cfe 55be7a00f30e562e189a486dc02e85bd1b0d45c8
-6920fd2cd0400c88d6c49972bf120fed52547e28 cb17c35290c3b537a3ee6d7a9285a90f9109108a
-66d7943e8f15b9db6b712cc7d9120fe362bba9bf b8c552aab7d4f55d1ddacccc5cae9a108d407fef
-45066bcf3c3fb7991c32c356feaafa9c9342217e f91660e1581129116eea041687b6bc028ed9495e
-27a901415dc2f9e00ee83aea6d7279a516bc96ac 86bc8fbd9475d21f4b29512bc963130e1bb0caa9
-7d9ec5f58717ae072f7f6b844ea52f1f14793235 3d5f6d297906673f2855191e20599df7b032f362
-31bd9503bc3df818108b58706f0e790a8f9fc604 55e446ff231ca9315f111ef53ba53035c2618803
-6310252afafa1da98b44e4b4013a6121325e8157 fa5c560f5fd120e194d5e242f64959d1fcde893d
-f8ef473816401d69a92c91a2b1397316e8f0b4a9 4d9171a963ae44c12ebf7358c4775c2afe7f741f
-01436ffad84a86ac545855bd15e7125dca000f5b b3990fdda426c468bf6c6a96bca633dd5f6557e0
-45eb3d0392a57efc05ce328f18dcfd2838b7c4c8 2c52cd8580631ae56b090f6540b16cf9c4950ed8
-b6fb20c7eabba7f1e1577b8d3265b81dcfa038ec fcc155ccc821f159acae7252e06383407a7b3204
-9e763660b6f3b7e9f1effd0ce669b1d6a7af9b9b c79e0a5c5832845e15d0cc2cb9c9043a5b194ab8
-b3625596f07a18823e38421743454c746f75d3a9 5441c4b1c66bed3672a604ed8963ca10d8cc7920
-3d59569abb07326d7eb28fc6afc2b6dd88cdd874 c7d6d029ac2e48a41d8dc2305a5c4e3fc2b72e9b
-ff64d8af71f7f1d3ba07547a426c0a26cd8614ad 25da47b75b3c654f9c2919a864e38e0847b8d3d8
-3389918ed27264a1157e0b7dfa0aeff0ffcb3538 8f60cf96b2f225492ca7378d322e530fbb85dbf9
-312b9e06cac91c9638d056851062f6f105addd1f df2689e22b37aa3c859b7df932e86e5677d0cca1
-1cf158070ff48af9ce37459018a5e9dab72b8b3e e536ba04da9a2a0ca8f9bf76f340ffbcc3ec3d63
-f017e872c73b1ccd141b90e7f3d19b13817d79c4 ba417ec682fbaf84c19b92adf790b7b7662f0aa9
-2186a0bbf8d01c21db746e99d61771a4d9bb438d f679714f70850514d5b05498ec076cfa3e00bd0b
-4754b2b0afba119b278caece991a2bb2943a5780 1c45279a6f44128172fc3338ce6595f19c2c99a0
-9a9a45d1a866192115b66e8314fe557afc53d4ea fce0cb23161ed4dd1fa28968bb84ec14117a625e
-ebfb3db0f72931ead73bdfc9f1b172c1a1f67f48 42579166886528ec80d9e7cae65bc1025bf29ff0
-b3f64b876f9fb10764eb5fff4f54b93d73e9b2a5 3651e961af5bc477f3fbc2089181bc55fcf2e799
-9efaca8d36c9012456a991a2d1b1abc184869f75 4818dabf6645d61ab20f7fadd67a47d58b6f431d
-f68ebea04051071ad24dfca7bffae775ea6d5c20 954a302b718ef36ec5137029fb795f3bfdec854c
-ce9b75ed47106ecb4b169696c8f7622307bbb6c0 fa3311fc6c60afa5cb08cdc4a6e7cb13144b8233
-5add97e5b6cf5ee75ebcb970274a4b6ceae5c9b8 d83d6d4a1894b7e10b603cb26dc5bcbefb3702d6
-ea4b95381d8e29c2573ebddf57e129a78130a7b4 82b63fdd40a120726233827176c553346ffcb0bf
-1c27854bcd4b4aa8ababa56094fd81658a30fa89 42e30e1276405410d6546169b34e36410c0d0c8b
-50cb18c058c712b9fc2e0e3e72349a8feb21173d 5a475f3f5a3e02be1cc7402c022272982b955962
-812a01df217384d593b835f68870b48052761d28 102f41bed8ca49c7e5002635374e0a07fa2966b1
-bd9f4087f2e9a735aba9be9b557976334f68556f 9a8ba2deec70967684089ec5b7d9817e01e3708a
-2e7dce77aa839ac04db2d87edaa7fd1daef97ec0 ab28eaa1c78c8784112cc3b0bf12b7b8a10ca7be
-c6f1d572084812c70dce71cbd8a57ed5bf9eec36 603a13aa634ae170ee58bbabd2930ce755ccd587
-e1c8b3cdc105449c92d6f79d5afb6422299faadc 53823c6b4b1a1a848ba2856ea5e6da5edf941adb
-31450b2cf83c6c84368fac68e13776538a67e52c 33409a437e1255b872aa2dfdff0d6f66015be483
-6b577ae1478c6cdc4671ad354326d1303e1d323e bfdccba980b827ed594827b42ea9b3208610f444
-bd44ac2ad76659e8a9f99144d4bacf0218a1d07b 50e9a0cb5c738a5a720d1b08ee58f3d7789be724
-872eba58a5e5fe0311efcfd88e44f5a44bf8bac6 986dff71e775be43ea78a8401ea513c8353b108f
-3abef0b17d1bd486b22116eb3c4136576667b6dd 7f3ee83a2b13cd51a7609a52241be7b78369623f
-59516572cf9fa35e59166af4a47d99abbcde0f73 1ec74cce68095ca3af85ee53591a68839401b237
-545e2aaf374e3137121ea9e1fc6299541e1baa7c c7650e84297c5acb88e245f1fcb2c8b615e4052f
-63b28cc20988e55e0256f32a79bf597cdd418034 4c51a603fd494f928d433152fbc13ac62e625c6e
-4d74dde86bb724f68f0e95c8a7c35a981ec5e7b0 6d65e7064abde471f9aa395f1f354b1298a3c4fa
-ca955fa965eb0602519214552175e1782d7d431d bf0887521c814c760ab848136615b66f76140107
-853f88c41af918bbff1cf5f2bebf083b4d261724 d76044e248e4b8294a6bdb38b1048f83221b8c32
-fb7ba5f3c2c28f4887e1f5e61507d9d8ce7d51e5 e5ef98e5a9203873a879bf0264223e4c9361e9f0
-dad02ed84cad8a598d894762b550117410c68786 f0a8951f863ef8df5c72a075c3d1bd8a1b19d49c
-f9ca99d75986e17a2040b37f42f0d21c4ce2394a 6a249f50d9e05851dd103555f6655b5fbd7e3008
-b9261b9f67883455b59384b7fe17713dbeff291d 5d719b2e39a40e03db02b0211bb894e6399446c6
-ff742f036acb8c6ce20af4fd8fa56604de2ee618 4fcebc4d4bb7914ae6a8539ec3aca249969d2e1f
-0ee535883ed2d790b73daf96b05c006ab85c8494 54ab501819d8b71813c26cfa897dad92d05dd4cb
-097a68b6d073d90642cc4acd2308a1a7558666fd c04f7bf89b48a1bc94b2d000b63c19edfbb9b421
-97799effdea79d6e62ceda63f98bfbc450eb9590 dcd7607886d110c44603ab424c42105bd33f1c2e
-8ef4a204154adbf1b73ffbf4377c57fa35583abe 4cdd8fa56391ecb2576dd1065e3802bbd1a0d75a
-d56f10c2d9674019cd8592f4f9be92ecd5af88ff 9b445be1de24f33cc9843d1e30238f1e57a8cf20
-ef661cd14a5cb33f3ccef3154cb06038181b40ad 637c26761e38f66382b6e114fbf8fa643f9d015e
-997fe5f73dbbbff3d19f62dc2d13903dccc02bb7 635033acca5d8bab621f4b12a9a35166b3e8ba25
-b748a9dddf8a2bfbba3e89437baa212fa4595c20 4bf6045b4626f8ea571620b9558040ffe6d4fc07
-a59524cecb5c5bc36037006c92ae3c5398b3b5e6 f5d954f3ddd1f7e331ad5553864e78ff8be2a1fb
-414e93d711f4782620a4a2c326336624a0285a7f bab22b350dd4212d059b6b2571a94dded7781c28
-e69de65cfccc3498b24b0d503ff7937d61c2c6ea 9b4fb58f12cc8e1e57bc8a4ba1e47908413f581a
-ca65df81bf9ce4fdedba44f397825478c83f8ef4 cb13c5a6e94c490d8a850ead25d29910261e73fb
-77d7c0c7734b0fa7b1c55f3f3c293d0af03af333 10d78a40406882e541e73d92cc1f9d47532cb7c3
-2c05a054b4c6e22a902ad9c141bdc38208938a37 265d839d14b88a3e25610f7eb0c3091cc683d3de
-0cfdde280893169870eab2e036aa3588f4159a2b c1f4a3b90ebd8e1584b606eaf92b3ffc5d4b1e93
-0190ba0fa7b3b2e98cc5d88b3fe8f270e69911a5 411f1476e41dbef577dc341f569ebecf29c774e7
-5c09f7aa2d941d7132d7613afa870c74b5a58afd 2f9ce91af68999cfc7d78830067c76871db4b57b
-d9c832205b13f78ffac301f7d9bb12580455e16c 6c09e3aa68f3b8f8aa3d1a0b4e6f994ceb29b0aa
-e26764c4d94d6065621d2ba1b436613c3f40c197 bda5d4e501e8926ac6e61b22b2b16bebc2d52be4
-c48be1a6cad9b77280c2229dd9d0923b9e0a9ff8 96f20d358e3029eb18aefc3993e4f1085cb5841a
-1acf8a8211330b6ef7b65596a47a6366db4017e9 ee3fc4a74ad8749d76dcd38338ec1da827074290
-c88487e7c80b8665ed55ecee88a3b629271b5388 a69769c94c0f41cd665de889608b3d3ece8e1a7e
-298497c8090cfb95831ee698271fdefedb4d6400 53c21f0bebd325f8e74afc27517d969b18b69102
-36cf964d685657abaa148426670e9f82eb34a21f 0653d5d0558db2580836d25a9a0794d9fb1fad38
-f0c9ceaac4624caa32301f8a43e8df144eb6f3ce 47f90580172a59fdadfff0ad00352f8f13217751
-07321e545260891c0a662e4f4bd3b056de3cad89 df7c605368e256de06bc490078c8121a45479d65
-f8d035b265e2da4857bb698ebab34190f18b0347 1df8f2eaa44adcc3be232c1bc6e7f5c5c067df35
-a3b22b27d479e3efce01cbab57b86ad4623b551b 58c70d63434e6c4cf3126fad3acb790011feb661
-8f3fb9279ec5795a86cbc206092f705ee576b70c e5960bf0d45c4894f53ca35807a68b5105d122b3
-ba7b8b8056a7b3ac431f5a926fa7f4104609e0de 49fadbc44411f29d66ea8cdf84cdfdef2e6275aa
-109963a6ff3fb4e70ad7feb8439f878a32719539 7250b74b84e22b91e76452a1f632ad859e87ad6f
-00d23f39da095ef0424ab66c928e1bfc19472674 2ff637aa3f26f9fe3638003531b223e84d600f3c
-41474796aa13e5e0a90a2ffb299962552fb249ac 5ab82684ce1e46a7ab70e2a4d33156ef3b46d3a6
-030a7cf63c14e61db8fc0763f7c2e6d82a57c93c 6c4a64f9b232d5aab627bab46a076120cc195c2c
-387c0eccf3c9451c9ba76ffea40e9141d47c18ba 3f78cd75415c43c2d400ab382942c89917f5f333
-a1d28cc92544f73bff5f0eac1c24599674f78c7f c515ae7ce6fe632ddb9ad036ac3ad1e653786bdb
-43f77c6dbd1ebd9b19dcd72449d55fd5cbd9d94f b6c482c4c134950ab933d44494b59bbe1bac47ec
-bdaea20a0444a1a9887ab7f3f4b6823166f9292f 6da682ca193eaa87b9087a3f60ae67f8dfe3096e
-81000376f2ed4ecb5d7653b0ff8fdf4742947cc7 5501f02f5b0a3e5813d6fc1f595bec5f22d9d6fd
-262ec88d6536f2009583b51e5069e6168d6bc7d8 087b3f73d28ab1b88adb6265a8f977f01e07db0f
-fdf9ff26910bf08edd511833f39f17f814a60fe5 d54626a7ea1ac7025c18b5028c773d8d30869222
-7733ec4146a9c292916a24cef0564cfcb0bba2e1 5d2c1ddf8cd9942c191934421dbe0030131bd4fa
-fa583e7e2f38a9a3d9fadf1d60d6c04f9947d6f0 2aa15354604c0031685c144fade0fbe9f19d29af
-609b99e45cf50afe387a29579d36a5149ae78f6f 45d3bdf43b2244a830c91e7170d316229d1ed6e7
-309bc6de28daa05c2037682c3e48ddb96a8adf98 6fcaacbcbed4927217a73bb32aa36b794fbe34be
-5ba325249a01035098ccca622cc36cea5e8f379d 53771983b959f7ef2d5a425b1bb7822090aa14c4
-a75e76d7911b8c3846eb997832bdaec12f6bc002 d3e03e3961df492fb7dbe03e4fb1050cb1e76f90
-ca8276243a9ddd0d128d6e40902da1e04e11a27b 9eda5fa891c5b3675b6482f9ece071c30ec8fcf3
-450bb2969dad8caabc17bc594bdc2f2028fe5a68 2c4e24bfc7f709ad738c893720626f5b608ad3da
-4d472f5b9cb7cc6f92b0dc7e6dbc06f52391d0c7 8e894524c61b0bf6f88a402b6de8c9c471d38608
-b5595e01f33c221acfbde969718f0820fe611ced f109655aa58023a9c7c0270dab0ca28694442816
-28ec1c0845e6c4e10ac800ab74601387fd2736e7 62067958313b56b836711388b81d29903ee713ee
-fab22f697daa288951656140a482f61b8871eb4b dc7896338fa0572b169a8da64abef3acc2e0d1cb
-6d056df6de7203bb63467576db72ce3f0cc476dd b6633afe23147c2ae8b0b95bb0ba3003c5f254f6
-1062ed447e47744342ec4952b20690eec3244548 aa37d10b29a8053991d324b41a9d450fc26cf0c9
-a3b986db6820495a651f9b19142764b37462d192 081c7ec17d7005d71d7c35c70af9a01e59fbe7db
-4df7386329c85ca4a0e36625400359e229ec93e4 d3b5040927fc0f1c3e0d1ef96ab40e240d28d1f0
-6977bd2b0246db1be2091e79c40c23acbf3fb692 093dfc30901b98483b83ce990b6413a8af42ac1b
-7a44b6df04669cab8afd4df43d804aaf55310fb7 8b02c6654589529585011a9624e94b520cd40dae
-5702e17625e32d8fc29ac9ec401e9a0eb31c6d9c 8240fa0e20b7d88ea936fc225b4f3b5be82a10b2
-689789eed961c1c9a8e47bc3a67425ee4f2aea40 8240fa0e20b7d88ea936fc225b4f3b5be82a10b2
-73073e3be8b9c2325c5320bb9e50b0b8b177a2da 8240fa0e20b7d88ea936fc225b4f3b5be82a10b2
-da1ba27facf504e5aa7290a565f17b8c344479a4 8240fa0e20b7d88ea936fc225b4f3b5be82a10b2
-118592e78ec38974ea8ebd115fbf618abc20bd4a 3b1d37481d795745e91b6ff958c00387c8116ef5
-b4b4fc1359729c691cd19aac5ae1ccee1f1b7648 4f351c74cafd1358dd5cb33c610d3919bd2f6a92
-1c60a14fd541d00ee3fdf52f377f81d58fc88a5f fb1c6622f4db8de8378456569fefcaa0df00d9ea
-62a5cb4d6a905a670f22c3d4a2b42d8870e3a0e7 0724385b0d93eca96bf19651a5a40c1e9a74258f
-c80a1ae32a089fb74a1a0814f62e589dcee686df 3d55469932509106cdfb6a8fd6ce2ee3b9bc5c99
-0b2d4b08aa9f6aac286ac3de4c97fa2043eab5f6 11072d7e31f215ce508fcc27da846678684a8802
-ca6a395d0cdb5d84d78760bd6b41e0b6941fc856 6456c6e0163a87cc1cf32ce9815a743e579db9c4
-da8f5d1143391c9956476d9556c1a1f98964c37c 286f8cf120392b56e06c8635bdd32a4451219084
-63908b3aa338c12805f339709e3507f5857508e1 62a9d02e32d68a395a30a4fd70cdb4a6c58d6d06
-626919c99bc96dcd8013f9b8a1bf902b9b050f30 c2e041aeede031479eed3078f1623a3a00be859c
-39cdbedbb19bf6a83a68c779f0514e0556490ff8 9cd1392440487dbc30bbf07d5840f2f8d0353e70
-ac3ceacab4783f71a2aa846c28a88000e880a374 117fa96a91fb59905b498e20c1ceb6be3c2b3ad7
-19a0d99fe3850186f4fba8154ed2faa6d015e7ba 1c3865f14b1ed1c91148a4f8e8eec275bd6a05fd
-f0daf56a7ee7e847c96104b9dbabfc3d9f67a423 005bb7da6dab4d1439fb331381aa0c6ad9f7c4a0
-f9470048d0bc276a7398a0e6d5f7975d2547d15f be47bcecb3d838ccfd5cbb07aafe34a07f6272fa
-6b8015e921daab61ee81ecb32a2566ddd638de2c 676e67b4de3593f1331f4192f0288e2502632509
-0a6fc862fa0b75a72ba93cd9ec47dac643d8bd3e 5567799e95d1e67144cbf3a32695f287f2f5c80f
-228ad33096a79b69b29d81d1cdfcc4a24c279ac1 eca9c36e67b227ae137764ed3cc795b6cc7642ad
-f9f49343cce1dabeb6ed357e2951ecf51a0f358f a0149b73a64e731c3ec84b4cd61b27c4ccf01b07
-f8c602312c5c2cb9cdf28a4b07ac18d015c64867 405eee987c2fecf78ab0ed9d15c0a978466b96e8
-85db6e7cfe49f29c62f6bae1089dd660e00b40cc 55b56c4fc3ab602d8303c7c300d00d7a68962d29
-48e5582d8e49ba3efc797e8f0b5d69c9e5bbf9f6 b62defc647c142d6f86eaad57a612341c01b3dbb
-4945ff8a83a1ee1925cfae4123a8cb3627a4805a b936c6c0e00ece311e744ff4d76cd03a048b2c6c
-0426ba1e3747de3b1f8cf227f10411507b47b30b b936c6c0e00ece311e744ff4d76cd03a048b2c6c
-c7340745548e1e8a90e277f9735904741525b47f b936c6c0e00ece311e744ff4d76cd03a048b2c6c
-c405824047b008a882dd7cededba522e9979c199 77735f2844fc6915396b30a1b2c21104cd0cb662
-c93c414049d32e15b593e3f9185e7828e2be8c37 b2a62724f37e3a392d4fe4546b9b75a7b1ed5bd1
-eabf5c6e1bc6649e58b401c2f85d10fc55eb8503 7e074de4bbdd9488bc32da92cce8038a42b10dc2
-864d8db7079baa72d710f073f9e80870ba6f2aa0 0ad6edea4959b8d72599dd261d5fae392e19a75b
-6dac46ea35666e96724f2d029afa3f9840599c0e d96645844aecc1f40fe68902615198a7b164ed4e
-afa9990d87745184de4668dd6380158a1d8adf2b d96645844aecc1f40fe68902615198a7b164ed4e
-964d57519e046c1c290d914bafe1c4acb9f4b2a5 d96645844aecc1f40fe68902615198a7b164ed4e
-0a7145114c15c1baeb951141c14a0875c4f24fbd d96645844aecc1f40fe68902615198a7b164ed4e
-1629dcfc57dfcd44559b1d62d8576574391d5bee 92b58341bc389e1b11619df1c518ac628553c505
-42ee7cbdada800ec8fc2d8ea30a6855918f85bcb 46d7601e9212888c7cbcdf9d9eff28a31dd27cfe
-2f249c2778eb2158dc14d89657ab6b2babc79a78 407b3b1bd692e3976c27288433a953437462f629
-4167a8affe5ad29ab8efb74bdc151e6544264337 407b3b1bd692e3976c27288433a953437462f629
-0899b05dda77a65167b6ba90b9e7283b89b1416b 0b5e899c895314ae17d3bd3ca08f652d82d236a1
-4337aaa894f90eb3cf2126b6a31b097da7c47da7 0b5e899c895314ae17d3bd3ca08f652d82d236a1
-950265f485fa7c69d142cde107e6252a9bd5ee3f 16d6c0a25bfed41ba45a11763f0465f22a5346d5
-037e75e3482aca93a61a215209bbfe0afe222b73 debf1a09390458021d68519d80e5d6a12161df0d
-76c7b19ce0bc1624baebdf7032e17b328b5c6736 fe6d010f8a1d1f30a21b6902e3843aa38f30ab32
-69b622f97b0e81a91bd57ab9d07b9b27eb46fe7d 105032c1b13e4719fada483effb0775e1140c54c
-9d8923ddd3e2f189536277d19a671127258decc7 f9ff525e75b2965a3568ced36ab88e9b3f7f74d4
-bf78ba435ce3ee723df145ee0cee44a0cff76ddf 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-07dd36247dd70d0e96bbdbc3b9c13b00b5a2d3c2 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-1c2868b4ffa4191f28edf2edd3f80864bc51ab64 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-7a5d797c0c36fbaca172d364b975deff16adde81 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-98cc0a0a95f3cb793963afd7cae72b55645d8814 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-3303b5a0bd2166a461fbdd5bcfdbcae6343657b8 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-be09de9f01f43c784c900f25c241b8941a69bf6c 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-b335c00036ead4ba36ddc4fa64d58a888eeb3e25 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-76d790c391e3ec1628e9d44e49e751d50714aaa4 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-b2f9b351deef8e76832bf837df809b402f57d5d5 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-1a6f34c61e0c899c69db39d86b9e5eb4598cfab6 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-e48d022bb165daac1d36e4aab1068acf10848d29 0036c2a5e7c986612115aa7ede9a5e8b662bb4c7
-e783158d9d2da576d8523de5ee65b356d238e3ef e025fce9aa38047f22be5a98d42ae8d57bb55aaa
-3357583e0132b67734bbb1029134034d7fab23f9 e025fce9aa38047f22be5a98d42ae8d57bb55aaa
-8aca948271c668952ffc7646dd68a60957c2f5b9 34c1a4df47b1c1cb948241a41f5703eaec15aafd
-2b96299d8674caa3d8b9bd9319a92ff617372e3d 34c1a4df47b1c1cb948241a41f5703eaec15aafd
-e263ef18af9879ad1873becce0a33237849075ba 6a60ad3133461d041f74dd43633aa0f0be52fee5
-de677a8bb9c97476e37b4b9af9328dd299031571 6a60ad3133461d041f74dd43633aa0f0be52fee5
-71b92d6367e7297192750db38b0d6aca55358098 6a60ad3133461d041f74dd43633aa0f0be52fee5
-f94d2d2d311f7cf5aacd8236bac3bfa4b262954d 454d3727df48bf98d92e92c9daad8a12d98aad64
-83d2ec4d4a5e1accbe46632740b41fc2d756ec1c 052632758cca35c8845483cbaf60167a2cb3b644
-5eaaf91e0fcb1092236356f82256af179fb0ae3e a0c7cdc0572a2b64187b4db341d30383b240e3f7
-3923fa96c50f3a49d46a506d5b04fb587e077868 c924a917c38be3c0ee203a7e0a18e251b9f8fedc
-c817bbaa3ce8aa9dd0a25d5ae9c3fabbada072ab 414e8bd2c63f0fc7f3182bd94516d0c962a3fdc3
-8907a0d8ce3f8cced04fd0a3da48b72dc0c71666 de7fdde1d4d076b51f5d3f932cb9f3c1eedaa54b
-a4ff73c1d81d5f7e0de74b3b60c64bc1b3ebead3 5e8d9ab7982a33df9b6bb5a2cda987fced516365
-3a833a44c219f173d9ff03783ac6c74e07895e28 6306abbb43987dd631ddb14c367e1e93d659aac6
-31735a4315a4558d8de263b408b444934dcfa457 22f72e4037d7196566e776ca45b2a4851d8c748e
-8735981f7bcb631fb949ef33ab680a1db098a01d 9dcf94abe07cf5cb7fc83e3cb639ff98b6474ffe
-33d6bbceba2c71e9e666ac7260822e6c1c029756 b7b45be4af9c8c6cd59f47cc2f52ff9eef494125
-52025027ab9cdbcd7fce72e4f98bc3f634ca3060 f8284fbc6c9196acb1291a64e8664a8e3cb4509c
-e8a82ef50a3a4de6b1c3426ef15db945014edd6a 0030ffdf80e9372cd87175ed803f077b3777d01d
-14f7a0d6beb51269599b0129f1b034d877d761c0 155b4335f7f63074cdbd12544c10063a1255e0a6
-d1d8dd27592031efbe2c007aa056dab4cc0e193b 73b63950ba65aeddb65afdd418c39bf9325eec44
-bbb60593d2ee4a7bb742731cb3be82b3968e7947 2f85e4a019da3d0d0a8397dac4eb20a16ba99be9
-0069eeba1650af44c976d016c076cb817eb42750 139f58e4cc208b2bbda6b0062926ee9667ea078a
-b99d171cb49abbfb7bcca61d4ce7f117b27dde4f 315db93d01da3989b89c465f45d9368910ba90c8
-3021fc56e19651c1883c19f456af1baf9da84da8 355888ef0c2c5bafc03ab2dca0c87a9eb0491a0a
-99785a1ce0f5e413e4751c0206bc09f493d04252 b1bbe22ed2a0f8931bc4ff1626cf1a07db2755a4
-d120dcd874a9ac38df7408b76464722d53e1fa3d 45c4695a5aff5d02b6f2769c2ef97f1a1baad63a
-3368d8881456ed5195e0400dbf4b95e6aaf25361 7f3195b9aeabf440a8aeca8ec8bfa99809c50cf0
-b2bf3377fae17933b4265befe1e8396744f08dfa 7ce36f1fdf3fdca8868328cf9b0a5976bb03095f
-b11afda42397a75935b3683bfd44099c61578470 03657899b838ca9d4587e07413084c7840c4d134
-9dba20875ef723746ce8275b6c4493b062cf7791 e52cbc9d8238a8d6a63d8468087502db251c1033
-fc49f2ff97de11e412590bb260c7ed5eb4f482da d5703a6b1d0fd5c6735472df266bffcdd777d052
-e6d784386341a3ad4441b79f86bad46e97c9fe56 ffffee41d377aabd134c9fd0980eb7d180257f68
-70d7bea27fda5045c01be7da6c10932af43baf6a 3558c012e3bdccf9b1fa771ef90fbdabcb10f591
-339d8d851388fc528ea4e5ce5a810c695b1aeda4 b45eb7d086b61a48a0a0a24a040a44c300e942db
-01cef90d547095b16fe21f128e70a4b2a5987c71 4b9e21657e70a73f34353052c082e8fe4cac6adf
-91efacfda3df60cef8c341af0ad1560acb69bfbc 8a28054f6f0bb719614d8d7887fe57cb0b5b4211
-bdfe3648d5f9fec8d776780897bc0e2b5769202d 2b0254627d7299dab89bbce95323becfb84ecbcb
-9f4958b4b0540565ad347864e2353cfc7d4d275c 7ccd2e358430fdab1f2411768d8020578935b2d6
-bc329f2f2c92c8f8400ad87bcf9cb0bcf90b3e2e 12ab82d61d3b20c368e2f0823f382de0cee82182
-8cd8210529ed1d49d4ebd1602630362ddba78f46 3aeae7289c39537d5c3818df66147cf2eed0f95a
-38f0183dd263ba10d743c3725a33e03abf4493a4 4cff5e37d90c9694122652a2914d1445db22b029
-40148dc6abfde1d9a5b5467f3a0ad1292b722463 ba5f2d191db2997d1e1cd2652888e08c2a5dda09
-b99954dc5e2068e781d8c24f19aac05309b531c2 8a4465f81bd5ef461af8f5c9e5d093973bb2f01c
-7a7c764c87f001fc413b0bc5ba4883d21e2e602c f8061f06de849796d053444d7e99b46e3fd57392
-1243ce507aab0b51530d938af1e4f1426638b1fd edcbf42d409db83e6cfa664c13c7fc559ce19462
-7ef243bc61c0547d627a1e9376e77dc5af37d2e6 38531827b47a2b90e6df1bb62a96b5abe71d352a
-c4addfdcba81f04d822211ce9ae4ccac4a305444 c9c78cac9ec77a2fe118bd7cc945dd7e28737f6b
-e9e4e6a00dd76a15c90a2c4d0b56aadda92749e6 3aa537805f6792db911b97be04cc9f12d730f1fd
-6aa0c20937549615a391aef44f38a27fa6e6525f 1259ba68b4c5a377ae4f2a6f556968cbc76f0a40
-51424eeb13642b41d44f21beb83de21c86a32889 66e09b9f44671be55a77e9c0f33606afe755d1c3
-fddddb6c2c3a8e3fc457819965eb04fe8c4c6414 7651320fe595b78d942204d757953438b915ac98
-b9194f5f820a58c12b0925d044a36ec03a65e905 fdbc5bd2845aba5e49079a1c583f75f86dc7350e
-95cf53b9ce2c58544e844252bd6870971dcc7a9b a692a209f3875c5917e60d9df287ac97c7336e33
-fc72a58ff800dc5be2b1e9f31b46decae16f7bfb dae350e3872ab973f150984bcd91c04c42ed55c3
-d008b25eda2f1232bae24cfb8a45f51394cd090d 1b09bd23823f416fe4319e598454e9447fd0afc1
-9c74c03016eb4f7468eacaf93bc03b77739c7c82 50e6b0d48b84f0ea01f9f7cadda9e4a6c9f5b84d
-397c87a76ba37bbbb74c7b65a06bcdadd4b3847a 339f7960c50a4723fe95f23de4bd7bd69dfb988f
-024bbca29c648fd7261b467e26a024482af8c3e2 8c97bafd82e78b31ccf126b350aa07dd51a4079d
-ae6dccd91e019d003d4f738aa9b8a8287ae79660 917a3a281405d2952f63ecaf7c4603a4190449b4
-4f48b157604da2abc5a8f0d3bf56a2c75032b68a 8ab4b97895e3883cec0cdc08ac3a2f516571e016
-3f9f1fe5eae192c19f65617156a4359775a4ecd6 ef6a6663cc6b48cff14024404961c388926af332
-77343a9ca2bcc5b9af843c1d468cbb8a95e07adb 7dd60f82ff438c49f6c1bf0955348d6886600ad2
-9952ccb99c88ca4553e612c9bb8aa96ef4a9b512 168fe16215b76cfb2c593f1202d643806629507d
-1fa8ea5f0cf7fd4aa8b5588ec03623d6c8896037 ef020449639b5fae77d0e175ffc11135f9c690de
-465b207b153500bf378c7bb782949a0366e8da2e d057f8465a7f04eb24a9f703fd68ab7aba48a659
-b82a37cbf6b2ac5d7a0abdd18f1140352d36981d a24859536cd1eba1b42577b9da8b6cc144aa1efc
-f8ef1659403d5eed8ef4ef568ec08dc4ccf08e0e 8e5c9b94a64689434e0b14202a1ee7aadf00e5c5
-9a280006b120c6d509151d9af256abc550207ad1 57fe62a98eacfb70a9188cecd1fd67f71957a311
-7ba1cfe328339f5e282818a71773757727b0c26b de6260e6410a0cad4815e6e88fe2f93cadb9676b
-a75ee3f424f43ae0108123432070397ae1eed7bf bad0b541e1b24595c7c90e6933eaa62b01c91602
-221e84380b7262b896498496c6b7b19811beddaf 41d2d2d438f4d3da793982ceb8a6231a882b63c9
-d135047f1573dc7740840bbef0d59fb3f63ba6b1 4fcb275b62d58880bd02328d6a9a3f84b30402f8
-bc6e55bd45aad8781979e985de9ad10abf528285 48761f01b72127d1562f9123f8ec6e4d3d00e5a7
-7699f56555d1806b7dbb62380a7e2ebcbc909e2b 9181254db0bec07094a3d69856eaa66ca934398d
-43a1a30ae34c6bbdefe858d52c204fae2af4e4c2 50048cad535e828843e92346471ad66c8c048157
-0b45db36971a1747f1b099e93360719e21c6ec2a 9bd01acac8fe27d0b76ad613ab30c14a241139f2
-b3c41f8b968dac1793478409eba0e71a79e938bd f78d30e16527e53b507c482f68621100b4f7336d
-82a96b42b36c865dab938116b3dc1dbeeac344c6 d1b8f3b71a1130faab889c191c4d264c0dd9d846
-8a34796c2923c3b56dac1480026af29bf00f05e2 bd5774bdda550594d76f9c6a7759cfb7953227d2
-180369155ff8944e7d6c56e1e80ad4b780686c99 3890c61b7297fc246c0dc5c004bf72dc3f828670
-8b269d1c62ceb4a8fc655bd11759f5d27d119476 3b9069a95a3e36f47cc64ad3c03ab1022c409658
-9c3cf3d5e0faa8173fdbfd23b7f309307bc93764 8694a3951c13104e97128b49a326542a5816167f
-e4c126bb843b29ef0207cee72330beb904c5a4f7 71bc8f4ac68907694d29615a77d7a2ef0d512021
-5bd75e13350ab50814147da652423a918ee4a06b 4021b1e8e3db5809775ef08be8d92d50a4c0cca6
-259876136e154ea3f933c42e3be84b644ca3489f 8213f38b2d60d2af5060befe0870210cdfe3e9f2
-55d53a4e23bdb42866d04a16ac8298f4d391c40c 7ba50ef523e840829dbc4787624bd3fc4912e5df
-d4633aeca259e0a79f6ac3becdd0e4b197414a58 bd29dea66c6a6fed1cba6cb2c31e92c8fc1c6f36
-8cdc82b2ccca9361eb646616c52f126ff57bea03 35ac70075788675f2d4cd2416001979ed41dcc48
-b7ea7035ff8714d097b08748d4b53effd2a01c29 3b26733cfbaf84c39bdef7561885093a37e7db0a
-c864d40ebb860c0e2c92e3750213eb6486c35525 e096d9aae9cde059b7aced864c49776241a8dde2
-38e353cc6424c7c8c25e7fab70f1c406a8696a1d d20ec9f6d75ce24a0495381b497d8cfc019a512b
-5c586e6f4aefe1ede211e5335c7ff8d58c65d475 b61c2d806ab15599f1e83475bef82b33e4335f3e
-ea22dccd4a4c7aeef9a435e4b89b38384fb3da0d a7bb0cbde7eb00930e35bcdf293d1ccf5abdbce2
-7fa1a6c423c4baf74d276613521239f3c178de2b 2ffa7e8272e39ab225bafdb13ebef2a16a4a76a3
-9966f2119e7329dc9babe8c8400a7acca6375c9c 2aa8cfbfb2532161c7fd01975079797bdf719403
-18afe09d2a469ed233be1c9d812631761b834d93 b088cda439da58b446dcce466b0a822f536f72b9
-cac543060028972dabda6396e45e6650b6113635 b7865556bf8cf73a86cf0cf581583c508a6da993
-a9113ead38df308d3e996a856d306fb2f573fa16 a86afd61944e5392fd8a1bcaf56e00fbbc8cbb72
-9c4e98c7472c87f974dedd7e1f0b39d499b88ef7 017f8b03a846e9964c3fd92d04150836501f83fd
-fc8d9fb8f793a2064997d97dbc2344a224d38a08 c3628ea274c093ffb0262d8ccdf99d882cefc9a6
-d93b442f5cd6695776f49da72d99deb7a9c7b8dc 733d9342277ccc97edfb5719f42bc2a1e19700f7
-c27e014a93b8e29c8b72fc19a5bbae02419bbabc 478f9adb94d59045c152bd2fa8c59c3274994a39
-498bb893971cc793ba65cce1ea69cc6347870558 5cabcf2dcfb831bb031a3ff4a7de943220982801
-e6f61a8565282530e69b9b0bc49c7224bcbd07ee af9bff2f5a26e8ee901f45c3beb570815b7d940b
-8fa63455cb8ed1cb551db41b4cdd083c3955b458 edcb87c8b750ad1cdf399fd775ed1c052e801e51
-8db09db9c10550ca563ea548c9c371468f7e847c 82a61a0d7dc59189682744d7826f9ed36aa0a872
-017978cdbab2a640f95580f429e1865c03a484d9 ce83a9d746aba7a12d7ff1ebb34206cff7583c08
-4d75ba53b51a450d527856d814c31248ce0e3d14 86e316ca12e36b2e3784c905312d3931ac9f0f4a
-c2ea0b672416026a902540acdf5b8df27d7f05bd 5a94210050acacf510de66fa3677e2bfe82833bb
-720fb412df652d4f85beb29b42b98ff1031da46b 056305bbbb26e8e32f877ea28c4c1a366a8acdea
-08b3568db946845f3bdbc45a869f31dc7e4b753e 54c3412fd35f188cfc549b9e622aae8a724f50b7
-3407dd02723dfdc2b2482ca0514d2f27b51ad61f 92aeb7493bc6c3dafd33281d0fa9036bec0dff9e
-5ffe5c4b0b3ed2499ade3b20b43864ddaee7a816 76e6f8c789074b741bf637f00a7a5e5666a1f0bf
-3f4b879077e16cd3f45f76a1b499ba11698dab26 491b4109d28061b1a70709f8de58c59a80047a22
-7fe0fa96bf30e517312fd0063308b2114215349e 1036c0118ae27c4fcdf2e9d7680cab7644d7c399
-c91b97f1eac92015da47d1b1415347309f900818 172f19dd9e1ef24d3a4d70c9069a84b3df070450
-2773523f68dff2b312c5c0c353a1af09a01686ba 3719c91b18b9b3f77121a2165b15bcaa0bb84f44
-24feb328fa644d0ac108a64b9e25f550cd33fa55 8d19e8e0caf3efc2fbe7d7b3a8a603eec7c6f695
-8d350aea3934ae141ee104610ecaca2bcfc396a3 c1fe0fa79c0db599a2b37ea4a452c29d3a87affb
-739c3f14970cc127812e2477648b6c149a71eacd e25ddd7049518f61ea1cbbedd3950fc2567033ad
-c028441b935b35aee2b46faecce368ec871089b7 ec4ca1282de3ecb2ac7fd9d657b23a3614ffafd5
-f0986c5fab8398c4abe7ccdae03e3c9586273bda 49099ea21b4d0c993dc34a6e4c3e5f656970c3e2
-168f8831be14a767217f24db33aa9ab596d30697 c85406ea51f9673aa2e657aa82018e689f5430c8
-b4c9a37bb8c87ff451ac1da5d939ef2efb3745d6 a7340214191c164baa71fa0329a25b920fe0e3ab
-3a4122b1d4b19149087c885971286378d4c6369d 5fae847aa9f073b0bf030ac19ef2f3f0bd7df880
-620497bf6e76aac05678bcfd36cc002856199e83 85ef2e53a864dbdac71324e239c759c80ed01139
-7cd191541ab08859b8384e83a1ec7520ab3f3f91 e49d4711cc2e942a81843784022f774def813e6f
-8e38b59fa198c5b672484d1b8e21ec3dd288d821 3cbd4a7bb106cc9e6053c6b537f8fa7ce76fcbc3
-743c04eafea50a402ac9ff555b5b0f8c5cfb859e c284400d31f6209cae2ecdbeca88aa50fe602354
-ddac3d7b82ed1524720d56ae7215174cae4dbd60 e690f920493dd6e2ac7f896a51a4814df12d7cf3
-6aea0c564aec374e248e3f8ebf0323431389cfa7 caad448c4de2b15342517ece7644dda6ebd7ab99
-cd9978527bfb2a4b2d9c26709d415ac4ae8b29c6 075cc62d40ca67550771e0832da2d4dd0327b3f7
-4dcca3cf7c457f458568d6554a4e35e0d8a0171c 5e71b40ab471330e52c39ab7fc7ad7ed2d61ded5
-8da3bcff31f8bd9d7f43c4a01134d485e847e9ac e72443c132e6e21c80bda162586dd0333b532138
-c84a11473431540bfd87c81190715fe6da095aff 400978612d6c402d27d7aa2d8a33b15fe1e2ae86
-011ef9a08121c37ee97d696e4458988482e7a1ce 76a36b9175129ad00bed111b85d923ae584ee6c3
-eca70872411d087767b63dfcc57db6a56eafaa53 1af0f01c07c5dd0d9ae0ca3cd69d62795484cb57
-2174dcc9287ba3ba1913ce77548dc75d8faf8b5c 4b032077d6244d8fef53f2210fa067db8efef8eb
-d63636457ff009a5cb3e258be66d4c8474f51bf5 74eb07fc38197bd8e382f397e322965808f7fbe1
-b3545857aeb78330ae89ca3fa6fab66953bd946f 245c2bd655dc9698aef7dde77e4a756a8b10a301
-ca3f3843a20e5caa25bfd79ae11c01a020466bf5 02b8b2bedb6af7a94826910076448b170001d5e1
-1377d03b780429ee61c19ceb9b80e1c3102e9f1a bf1f32456741f0c3418cf410c27c50dfd89763a5
-8e938ae3e21abfc53f67a479cec9a325756b236a fd3b94009744c41b370140982128d88850323bc3
-9b03d67511ebf7aa195cebd69045302c7526ecdb 34be3977b7c8c4ee93b12e77eb809b646ab6fc90
-1b48d06c1a15dfc40c48c5e7e12ad0660219b3c2 93623f86caa7d8b3f013b53e91d468466fd37997
-0bd043fef8c29eaa2efe6bd62945fe8cb83a46ea 48ddf213740806b6ca24ad6e487062aad47f928b
-e5b2c0abfe00ea38e809f8506639fc18c0b54378 a7b5b764779325542efbc00bb4c2191d9ee9659a
-9064a4d596e451b0216e623433b5398ad80bac8d bd56beb10a268716557f9ca2845cad85575a3c65
-881358b531d3d1032c8bcca8d7036c64d2277e0d eb827dfeb9ef2898aeb19c4861623758205d1b4c
-55bfd20b7b137db6aa14ddac94a85c9bbb350b3d 6e9624f1feba7a66414f1434da689d1ddfcb9b3e
-4837252e2c983c8f91455377c8ba2f16d8553210 d8837ee4ef90518e9abb46877730bd985d638b72
-7728a3d30129ea9642ddd27631b173fd55bb96fc 8399a3632a562d4dd53d9161b711b2fb9e10cff4
-b6524f879d15ea7a4c04403f64cd8f5a8a612629 63e62d558f7e5e3a0fedeb4aa0c88b93ab6776ae
-a2b8705fd4fa05b23077d0ed89b4ee90d4bb2489 c2b67e1eb5edee285f5baea32b2921b2075dd246
-0244ada00a07a429c43b30e266b50d4ad689d3a0 0dda28b305e3292aaa132b9bb73f67b5c7fd362f
-de77cae5873cc817236e36ade13ccd718903a473 da1ec74ad86c04e7f94cb79bc04830aeb43705bd
-bc6aedc2daefb1c2c6d58bc0b31975b9fd9731ef 0401d61c186c268ecad32123e40452f2f8bdc34a
-56f9d130b595f3d6874fca15d20e37b3675ec1a8 6759181453a26ca66c348f53561b1301998277c4
-d5c1e2d7013ec8947a705598d644d47f143187ad 022c593d25052f6818892309443abee6650e11d4
-560834928bb7e34d36d3c03fe5f9c856ca62b251 96dd2f96b3e46bfedafd8cf5b13d8b6185b10dec
-d8200ad183a8bce66cfae411200c29bcc9b569ea 876c6a744088584cdccd84bcc0a9e8b9a3ddecd6
-87e1374bd826f917b305051a0197de2fcb9960e8 425b1eb5749499ea9c76d161a4d86e6dca659093
-04624a290171306795989c11758053807cf07fed d15cfdeb1d9c22794a0b2e839b52c64d8653cd04
-221ef6a8cdbe9243e5d59c7b19b6c31cab863fa0 8ea6a93b3a3263b8b71267660c5f0375d9dcd569
-c7e46db614748468e804d747f659d94b3cd619c6 bb5fd1232dddb30bb4b139031facbad52bfe8de8
-9f4684ab0f53ab4db263f892f3db36b65de67e7e d21657684515866c6eac15b4801605cc616ffd6f
-a27e10409664bb734313a5603d6fe4ea2404ffb4 9729b6908c30fe71a40cfb3fe67b26a6cf163c3f
-1b7a457388a75686458d6e0ecce96f070a2ffe22 5bd797ebeb6a21963ea73f838209330f2780c9fc
-88bb78d4172af21c2b36a7e1ff0363cd8ecb9233 ebf75566cc32b3cd220e1f5fb80876a079a44928
-466344b447dc7ad277ff81e65d2259e9f30bccf0 48f441bf1276473235fd18093138ee5edaf3fb9f
-5558091ab9b686dc4b3e36020bbf3581202ba53e 0b1f604d6cdebae30de0507e923df434eae16987
-99e67852f7b1474c5783683a402ed14deab2c87d 846b8170d3577951c78d1f8532f1bfe437f68b6b
-8148d0804d5dca5920a847815390a92f06868acb 3c1af7cfbbbbd67a7d3f0ea6c4a4f886ecf8fc91
-a276eadf0ede19bd924ca6ce031811daa4e4ab80 669f882769d9f35b56c167a8dfe32e7136d80cf3
-e927f611d27fd24e0fae1f6efa2041c521ec3d1e 6f36ef4119abc8c1478622a03e103a96db1dc463
-d7ee7c486a89d776379f6d9105c548d08b2e33ff e359fc0f8e6e7fe5eff93b7265399dfd233bf69b
-1a441f8d5282bfde25640dec9bed07695d42426b 8f6a2496332ea0b2565bcd2bda59b3d02988c8ee
-d45e627ae167da89de8f0d530fe441d90eed8702 d22642cb6d8f34e086f017e8beeef909fab819b0
-99c3875ac8fe6acbcb9573a9bf00a7f781bc035c 85e9fa15dbd764cad54af5d03da9cba437d82fb1
-eb04181edada76c91344b0df159f609e30d1aecd 5f6501de3b923e57a48ddabbaaa12fc305702fe0
-5f2f00b91cd87879aeb9e4f384081acc9aea0f0a 09a279fce8bb75d88003702b18fb52c08464cfed
-7642673c64809f94af5dcfe7986a8c5c1be7d91f 97ee46e346d85eb21a077a1032c8f5c3fb633487
-96e42336e250d0c3910b05444ebf423dee5dfcdb abe65b9af896f965020fc3eb5ad39d3891334397
-daef4e08600b24f63b3a70b6f49650adc38cd200 f06ce426ba632817cbdf68370e2576d86b17ee5b
-d5990bc98a41b0e7353472750f20a7b7b746bbc5 18b4ba86374ab698db6f7f2f9df657a03abfa099
-5ccc058cd9d76f13393c3c8a1670bd9991e9dd14 3015b1364118bbe56ec860a8a928e66f68e7c838
-efc4e9471843da2ae4c55986c2371a0fee77daac d68602dbe9c2e750cd4972140c9d24fd4393df15
-932ad19df5d6137b49821eaa800b3ca2ff7d9e77 c9f65982f492885750638db205b5c4492e719cde
-03c5a054587352327b7f25ce55424e1f72abf50d ef94a2b2410d13c0b669e370e93d54c99ba42736
-4d319d2747a7839d8083a28d7b31bfacc3ae5423 790a2ef9c5109d8bb5415872b3d89218aa5aebe2
-64c8341b0826cbdd535f9045ca43a2d0e8e18d38 feff0a5a6be1233318dc44b4d9d822ef4e11b92a
-c5f42cf597b066a89ac3201977787c1730036219 bfde1a38ab5da23b17ee1a18fe9dd943a4c9f170
-1ead8ee510dc7be6b97d75e27ff0d7228096b8aa 4abe7fce490bbbb5a6ee61d2fb3d4e9d00380482
-7c9d5b5a0e7c1dc0ec32ac0924f9a1b5887c0b90 01083b0519bc7113a890d4d8bdcf1bee3963e48c
-1a2878de687c6e607e4b6d590b754a84765fbfd4 ddf8c84a8f88ba421bf46ee4d86b6cf66df6586d
-52b39fbb468f93e81db1e492ab275916f424f162 a80dcda62062b62ad932dd2c82907f6b111a6b0f
-1934b845a6bea86deec2572db23f2264bc5eed23 97d5536ec67bc879c2627c45a48fb4d411bb29c5
-090da5785ce98ad9e3c2ff26baa8b9bab25318f7 699d24a487001a82b5d2a301814bc758e84da194
-d459ea6d9c1b03ccfed74d2ca793cc3533688d27 d764705b9f8da550bca619525b47f0b27fa6f7a6
-bb852f6edb83826221e2b1283f158a88218cd49e 9a446054e8e78dd50700f22c38dd6a064b4b2740
-62ae85a2bbb0cc10910c1c98eebb75884928b930 dd0778f8c11cb771d62347cf0b44423650f24af1
-06742b04cfef68254fe59bf87ec78fc07b6dfec0 99ee8027c0e74474da6967fe6b9ee11ddbb3d7df
-4c30dddae92ef6e0860e50e8bd867aeb2dd709ca 5c33924c980f6aa1660aadac55b59a2b38265cd6
-b0ccc761131d40c681c74556484e226c7c5a44dd e67932b1dc386a15aed03373de524f02653af10b
-7d2e42deef4c6214e63fe77ed8c9654934c603f8 4fff626a4db02b1c4f0f59f8bbb538600e5b72ce
-16c600b8993f8743f922d3c10d7826ca1e240d19 10d6c548fa24aca5c0fb9eef76807ab2a082a8e3
-4466f9ed8da2152304841b8bc13e03f5f2f5d2ba 563bb2a3e8ce0588bf58f09a78c93f3c8204c0c5
-610efc60057cb581ac604cfd8e789febd34f6c41 259bf80f301da0922af7b77e2bdb9bb68a450210
-6bd0e15da437f25883089215598d609ee6c2ec7d b962bfd275362499ced623332bb32f4df6623d35
-b7ff0e5e051961cb05256976791a343732d261c8 3b2c7b4d05200e513b637d3410b83aa1bdaac1fb
-0ef93d8208f063337533ba86f27c75de5eea655f ac25a328b57dd1b809b5e907861c506b8b3ca2e7
-e6cf22d8431814a22919ace8d0787b0019bf7a37 72fa38b3351f446a8aacc617dea5d4e5b7546f00
-0f245e0d2ab7832b3647c306e5441f82ad7e6d57 15bd40aa9a7cc9d50fa05e5ae86abd5f48cef0f3
-70f1962bda1c723739666b53f19e3dc7910d30ad 6707a75230f90a23531f1aaae0f49bfc0dae4ee5
-4990608f908e7712be3b1f04ceaefd6caee6b2d0 18bfc2667cf92a5bb61884208ffd0f336ee4ea20
-a7d928f62c3beef20fd1f30bf7b43509ec8134d7 84af2d92f2df5d345ffdd30fd2612ac9da72631c
-54566df501a3477870d2ec5da583e25d21b2fbe1 31694982ae3a8eba87910283382d355efd62ae46
-4cd44cad061b60e8cecb46b506a71f704d85bd5d e9094f1313ccd2f4220c8cc83d58f209f9078d69
-4336e7a5229596bd7079f4bb26e168141b99a5d7 d3698520d2f5d6729d4985428e75ad305c6365a8
-d4dcd6346e501c9b98024a0eb9e9cf390e3344a8 4388df854f6da43670d359c09a199c04c88da6f6
-df6940580ace329d4c4a627bcc9a5f97d0677231 d97db0c30be4b05a1f450149095e2921c6273393
-51149de8d2c113f99e717ce895e0a8a5990a887a bae3c6c981d422663bf6298eb4bd51de4c838e64
-4cf584988e55a3c32df8232d6226a06ea84f9ca8 34521b8512e73dd2d8aa7626dd1e896f381a5524
-4911485a09f88f3eb3d91d8e7442eafc727261a9 73338bd8b4111223f9a61b247f86592429297def
-d94ebfa0f6dcdb40d20cf9945ac032fe52541c3d 956b6da4a8a7a02c3950b3d288df193a4336aa22
-b146d8057b699cb6c8b17235c1e2e31459c0c91f 3416fef4e8adc7bbcf324fad6b89758cf74c1b55
-b85f5ccebe8d17fc6875d5d8471e8a5d783a6960 fa4a1dc1f6ff4aea0808db921b82befc26234437
-4ddddbfd985018f5bdc0fd70c929b1092fac81c3 ccc8db57e60a0da32f71b1f3c91dc023f3ffb969
-7f887cefd13fc7eaa3045a1570c25a9a53e54c17 c2efb1c92ea920c1ec0bcecfbeca08e8e126995b
-cf7bb4fd5f4eeea76ed9007855c31306882cce38 47e452a7e6cff45a3d3d3be42dd6c963de9026e2
-01e171fb40d7c1006a1d972e6e1be06b3a6b024d 04931d185b098b1239d54d318e14f040a234688c
-36be4596a2e076dfa32e40250145da70a8ba863b de690423e226b831f7574cb9f6b94233a1602f2f
-19682a688bde2851f5b660be7d3138f66d77e940 9018c8a03f9896a04c82382a27908060b678596b
-7db2b16b37e82aa91f9c01b535f4068c855b5895 6be441ab62a3f734c798f64c7446673470e7f64a
-c36756b00e169c1962e9b44976bc3328822caf03 9018c8a03f9896a04c82382a27908060b678596b
-fdac25f30b205461a4125d5a4f22a264a43f90c9 6be441ab62a3f734c798f64c7446673470e7f64a
-2a2cd2a4c3ad9ad0f6c6a2a0a9b65f3267d97593 d33a98e90ed6c1a7585ef01e000d4c0f5e6021d5
-f30f59dd672bc716260415d62afa1deb44deb0bf cd0805b20c1ca1cfad4c8961ab153ded14b4d6c2
-c77a021ff190e9306bdaa4f1aef20df2b2b956c2 830cc9f56d9877856d6814ed842f26a6f94fe816
-237c3d2df75a3acfb02947635e0269bb2ee47718 8dbfd23cde16681ef8db62fe5aa377b2e22584b2
-4fb0af2bc1a8f12cf87d8c2de9164171d05b76b2 59d66712fafb4dce5bd60e2c73227188c001fb10
-4c1ee3fec0ac1b03ee2f7cf0050dd5808272b9cf 2b24e63b946ea56a435766cd865537ab52119afe
-f9d4b920ed947ea724762c6359352786fa556125 cd0805b20c1ca1cfad4c8961ab153ded14b4d6c2
-b9c8e31d474b3c5704cd7baf24eaca836cf30593 920e12022ce403fad6d8e9f9bded5dfb9243b699
-da4efda12964ab95a3289bb5fd2b395c717c6181 aa2fb32f52077f83ea619ee7258315033c182971
-8876a8fa3a3dd47b424ab2044de2f76809745322 aa2fb32f52077f83ea619ee7258315033c182971
-25fde8e42b6a31968dd43285a584c860779f6a57 e94ce912630edc1d0ac5fdf7ab2173f56b446fb4
-91bcd8ace2118f4da7f07087d1d4a96b882c8979 91714d9e31beb3385e157ad3979e643cd52ba676
-1ca4ee31f62314822467d2fdccbf4ab8a2b73a19 afc933b6dee3205d7220fd0eb6e66d5350e6015f
-badab812afe92bd385ab0f7f2c0930a6a96a4ce6 8d079f3b7de8c32fc2718cc24b81f396a4e86c08
-065127d89a9c8e024d91646049c462772cd2a288 39c095378b375cca5b2f6b30a1f398c7ba47b84c
-e68b631e8d0c98c99c5ff16c9a7562b0e0875fcb be87f411827a19d4dbff1af2399590b607a8c153
-b7592d2d45bb29d29fe5f8ef3209d285236a25ab fd9e67ad6b6b61803ffbd792db2ba5c49d9bd810
-04570a037a0800b6cae30cdd5313c5d329d5d15a f3558ad46d04c808c60f925305026bb311e36a3e
-204f32eb8026e0d659002edd6af7ea9609d3f72d e94ce912630edc1d0ac5fdf7ab2173f56b446fb4
-673a6ff5a6b1dcbd9d3a69052a89f8fc88a48e92 e94ce912630edc1d0ac5fdf7ab2173f56b446fb4
-70cb66c781e910ec397df158c4696f043cfc6461 f3558ad46d04c808c60f925305026bb311e36a3e
-204ffdaf9d5e06723daafe2480e1e162d380691b f3558ad46d04c808c60f925305026bb311e36a3e
-cc4f1c2f579c34c0be977145c0f282674c707593 8f0bbf949cb6b5ec63c5ea250ff94a82d3a32a3b
-5d1608807c6f675b0c118ef60390d9ddf148f8a4 97af09fe65e715e97ed77ffa7a1a79e0a0bea4bd
-f73b34b6dc76b4bf9b670efb61efbea3567be88b 60c7c17c627a9ba02834b0fe39f64d429e4b59ac
-a7c58daf727c27f3cbf381f37e71222deb1269aa 2792ab2eb8bf26d6fbb563936c1f8761442fc7d0
-1c391b4dfb852340abb8f80066bc8a14de616806 833f593368c24ddc6717777eb8c89341869088c7
-fb247f321f81346a5be5350f3847330e05f0acbf 05cea5b51aca0e0bb8bed79cc014775a15859329
-c3e35f19b9e244fa52c34fe1894e086d43977e6f a8203d431d86e8c20c9324dfb35f2bd72e527745
-250eb52e6748f091821a1dfd0ab4a4924ec8d042 61eb883d75e386d4400f227ab35cfd0ab163cd18
-753da81961907362338f973f238f1457f9dba965 24c144cf9dfb25c3dd36891aa669176889090ce5
-376689df02de18f83667dc23095f5da9d5164f31 7c341f69102fef3328685dd1b8cb1a26e3045846
-0d5afa32cb65c4276430672560a2c66925b7b9c1 9b26854856bf56c6f5b29cb659b01abe035b362a
-accaf905adb19e4dadc4eda6becd9f05d354794e e7f80fed21b96e29dc57917ce15a1667b4e9ab6b
-526aa334438f7bac6db930b9d0061433d8de3027 22e3694c326dac68fd14d126b42994d471fe47ab
-2287655643bda632220bf3d84a7bcc98ac60b417 3393180c662a09ef28b3895b28412477c2dc0ea2
-6f35f5ca4ab28d1535489f3e457ec218b8d6f776 cb466ce042bbd4d7322aa10c5038efdfd6169b84
-3701042cda8ce6e6801657a26bf7ddd240632f84 da74fc0fe5498c4b8a6c188d61a804a121523985
-e4307aed0b5db156ed4992d342656e7ce51c2a82 3d9986a1b8ff1b02312aa560d1b324a91701ca28
-0bb4a556248332720e0074925f7c203152aeac03 9d4538386e6fd66b39db314fb94ee282a15ee1fe
-4aa96dc3be94c1978b930a9070553f52054ba819 8246c0d9205f8a26fdf688a39ad223069c660462
-35dfc89971564ba5fb4b17962d8ca7bdbcbef1d4 a4dfe4079f11142aedf418d07da7f3b5480ecd36
-9f4c9120a016cf6e0b9f0ee5c6b8b0773f35c35e 9384452696be9fd5286dcd7a35d5f1433787c8ab
-275b18069dbca3f528f3f2d41d83b04c3dc94b89 f39a4acd193d043b53ad20f7b19650a2ec84fb99
-c60f542d59f48a91e300f33251c7d22af10f1b98 4a880c334686ff440b9351ad5ddcd2abd38e58eb
-7fe4ecec140c479622854301ac6801d4a20734f8 dff56daa4ead1faa3621721dd83080bf48fdf24e
-e20811d9d4145710a2af05b148658624effb78e5 5c94a78386927deba232c495ad5b8764c96f7820
-c91a82c1a9c9bfbe0e4cc6551e9f0b8158fefd38 686cb273d40d74d243a5da0477f0b09d4cac7478
-5b0bdebfa79a99731a17044ac036a825b0bc89e6 f187a86ffe3bd5143ff70648ac02d9ddf41d1293
-28e4ad3dfa7e4ab8a3495f655686d312d1e8d45e 813c4ce2e33b877e87eb5da24dde91996474d772
-47dae52804ac93d1521e22bb3dccaa7897e44fbc b0616a04d99c90b7fd64117217980e4161c0aea3
-5cf9244159270c57b5af52b790817361a1dfcdc5 441a075a723dd5c013e3adf8db88c5d47395c282
-70b222cecb924bddab1225aaa32b7627b5d5c062 fca4dfeca6c1f66e15a5fd7135cafcef7b4588a4
-eb473d9ac67514425c3b2f4a2efff371a48b82a2 fca4dfeca6c1f66e15a5fd7135cafcef7b4588a4
-54e29fdee4f1446e4d3c0b369050f69d554f04e0 42146072cbb241b23c4a6979fb97a7387b12dce5
-9f54ff76ef66e11241a590a2299a2b84199c1ed5 08a01f8db1d40f4e8cf9065ffda70952606feb9c
-47f096742c63cd09d9e69af2c67c557e9b615bfe 5a425e5f83607c4a60347f5f294ed9fdc302ddf2
-24bcb377c3650d3a51889cc932a313740ec02530 46cb8584b5977ca09aa99fca3e2fe6c648d01ad9
-033e1bb29b86529371e1870e0480e44612e3f596 ce72384a6a04aecf95fc2af8c28d3ae9cb6c195d
-7bf96a04a9bb49fe63ee48601e609eef7b37bd71 8f5d658ea334534c8a752c9de625064eaf1f986a
-b6707ba716c7c7f9f4bd7c9356706ebc359568f2 a2dec615e77c9029ddc9b6a12859a32b24d89783
-36d0325ebf60d21bda5f81f2ba31a61c35bed28a 3420a6bb6f900ec2c5f0eead8474dc6c3c5f5b6d
-f27358b13170cf50a61318c752c60f933b01d8ae e908a6b3332793eaf3ac1ff1c23ae1e935068a61
-29a3db398306e85fc683e8d436ddcc6a9434b3d1 99c1f80ef2edc494db0bccbbadee46d93ce3f9d0
-8d880693faa9f6857489e7acdbfd5d90428cd9b1 ea0ff9d80296d257f2e3532ec533fc3ed76d16ad
-61e7fccec8a46b38561b0d4181a2afa317130f07 b330504fdbf38015ca6d494b1e719d4294f268b5
-dba88e899849c85dbd8147af53f42f9bd468e0e3 b48bcc49e993785adc85d6a68a23be61a8cc3a2d
-bbd04b06eb1aa6470cb213ef17d56f116cec0ca0 08e114e881786853c67af481523d109fe3e83349
-eab9a5b5615cd219e58edc544cbb34b38d08fcb9 9c82ceeb19e7101bfe286e9c3a29403772cb4c74
-4b2be6a6f88b871d0736342d4165e8ba8fd11c5d bfa40255006ee33b26e095137ced1f5990378f27
-4e2898e0cd0c7c9a13a596543390069481272af4 2439af8fa8ba66b26316512ce08a377907c1eee0
-d31427d5cc8a8ae0a968d8c8ab6320029521a042 bc729f738c5955ec6b96e87c5312b2a5e3ef3c08
-ec5fa866ad5933ee222c06f5d24c1e78ebb7cea6 0a2739277ac87ce104b650dcc3254f86dc809c22
-9493db8c1df603d5fc7a75188521e90ce96d5b2a eaa8301d24d3cae9e399aca64ff0a17cec3d958b
-16786628b0dc33fd9b5c0b16db7321dd367af462 a77ef5c0c14d74b1d325c419ec54fdb4eee2f307
-99fb6cf188526d8224af3ae1339c59a682457386 b89ce0f99578d5c2072040d03ea8a3b89b0da3cf
-e87ddefdaf31764fff77abcf8a5a812e79b9141a e89c722e32ad93d40081184ce7cc16ce433a1294
-8168f9c844886cec89622f6f1080c811d6ad35e8 a2a60bc1d61bf65654fd3bb2e75ef75a6b6cec8c
-b54eef4eff2d602a5716d333dd076b21e87f8943 84e8fc9cded9b382b7d40437e3f3279dfd611820
-95e699b4d00fac693898b36a8fd6ae09ddc30ced 907d14c78c5452f30c00fe68371ad371a14c87d7
-72917f1f76bcc17a23907513de7f8f2ee636a084 5b159c37de22b96fd3e221d90581b5682fc154e4
-790bfa26aa43273853f9f2167d946b53c7b5de4c f773390db8df4338053688f0a97faa735258798d
-a9004fb07651664839f1bda02d2f607ef401a853 60a0afaac5b7635b6db73da605553bd1fa709c3a
-240ae297a8d4c72e07cb96da15a0bf87987db38f e17ad5dd3698253765c5dc3588c21fc147fc10fe
-ac667b978839d482e55012c5ce8ff6670fbdb04b cfdebaa9af66c421e02aa9ea49bddbfc88ffabcf
-3aaabab76700c1f7cd3cf5266fed7aa5ff54493e 3c5c4d8aad9a7ed346b1f6847f97777c035a0a36
-ddc386908dc627376e2ee4a326b1e3992a95bd0e c823765d41692146e900016d53a8deed6bdc5067
-5b9368cfd33275a2c758cf08d61c23c7ee150ec8 6c332f0db63d78a3efdcd71f88fa3ab2a61c6d79
-719c426b16ac8d6bad3732412e01765379f7ed21 033e0d9768bada15e60e288b28f32d6cbb1401ac
-0dbcc48a48cc510c9b42c2e57d07cb75028a5c43 367bab80bacdba2a87ad9ee84fe1d547af072139
-0a8a6b47928c6e33d2f48fe83095d9bf2a6081ad 846a065fcda4b2e9c1861a9f922145d0e08cbfda
-7524b04b7a4ceb4601ddcb64f23b80cbb842fcdd 1913ed909152a8ec52a2b2b0f8033d4a06ebdbbf
-30cfc2472da3c0a0f409c0232c014e293ce47fb0 bf472c6406a3f6c43775bfeac1b690946c7db459
-5e2ee04a9dfbf49176def22c8406459aab1baaf6 cf96e403e4f04f70fba35fd73ce1a0f7ef121ac6
-7515c96f4b1cc40400368f292b90ad8d3856f9d6 b281dff7f06f779a1202616584960876fcc993e4
-e477ec92ee29d37f30f7fe40af98b88bc9ba5b0b 6719b1a502d63235e7e9814e824400e67f9ed1da
-c08540164798b46ea41b6fdb3788b907fc9937b0 8d237ba3e93ec2a6afa29d115892405a947d8c3e
-be961cdb97a3b0d2393a5a8dc87b21ab3bffbf67 a3d91a0fceefe3c4db448cab13ce0e65bad3bc4c
-3b463227d3f73717326cda98195575054fc361ea acea090e015655f62fdc4a618f8f8e6bc78ed3e8
-4943a38cd1daf989a212333990661aac68572f5b 3c865cd7505b4fc39bda5545ae99269fd631e623
-ffab310522ab9502f7e900b53ee5a52b7bdbac0c 019591b2fd37942457afefc5aad9311ce2cd6419
-0ab2c5dc8ca4887ffec0b69b8de603063e38812c 9536b9987e6bba769182c325826f7e381c6d891f
-b723e977ea254a8c4b16efd0a6dd27e007dd61aa 23fb6aab36961fd315202969f14581348f39288e
-a0c91201e1a75ec919e04b04f985be4adf0bf7bd e14e62e67d256fdc64ad3765b5cbd9c29b1ad20e
-0b552638f6280cda2ad715052d59bdd80213c98c 3c132dcd0cf1b2a8bb76701ded4524f4d89c62f5
-1a41db0fbedf63914e1c9947a25dd3e63aeca2ae ca481f4b2f159fe44e9d3b040a6a3d765a81e76b
-ff837b17b1ab4ffc2e4d2189baaa570470904ce0 d5feb88a2e6cfdc0f0c3c85084f081f07e2a0e10
-794c668a2a5bc421fcec17c4cd9c8c878c03db6f f0c4c1fa628467fea05bfac17ac8d99926c9158f
-b95afe51d368e32040a506679d4fa19b1339b3dd c114f7e294945c6c3510bf6743b52600b85aa1e3
-1a9391292e09fda3d261dffcfba04f46fe0e450d bbbd9e5af5d4f8c2f436c8cb11fefee12902ab40
-08cd8117f99ceeb570ced8ff9a400ac1ddb7fb71 eeb92295d3691cff3a63250fb4e01e031b73e9a7
-eae7adb219501f8c61a2152fafb154d0cac81b95 735a4363ba123cfa43488efe67772d0d4426c0f9
-06517f213049e2ee1353a90e8f2298a48ec61cf3 dc6055fb434288f79175f34a4d094899bdd57851
-bbfaec6b0748d967af862aa2a14c9faec0d90317 0796001055210119eabd7bc61b06059cf5bd111e
-0ce277d49e7514e32030f7dc452bb821058e4972 de9d7430de4d600bf9ccc0c3bc06ee5539aacac8
-393532563c674ba4c4034db77cf1def722f06058 b269f1ed86820149a3bc8c5430b7c77b618c9a0b
-05a377848be59375ec6713533371be979754b9c5 aa612590e8e615481e48e9d1f4c7a8213017ef97
-c59220fa926a1ba47a7904fc857d9d74ef1ae437 7265356585c96c94f6cab53fff4eaf45b7d4b510
-49a9d96267116e62272809a597304bf4ba94fa7b 1ab794aa78716a4507c0b8e36105e7286a3e27fa
-f8aa5ec4ffbd0a927b8e548306a6a4d13dc87fc5 9a4a8186727b1893114c972692d14e1a472a7d08
-dafc73a2be8f051060bdc40d90e716dac8512734 4534a3b3de6a3fd8e7b9ccb73bc3e3cf92a9d022
-8c63920051a18784948933c4e1945547a957342d de9d7430de4d600bf9ccc0c3bc06ee5539aacac8
-b05ccd948baf65b76b02c3b2a0e68b4b5a24e5e5 de9d7430de4d600bf9ccc0c3bc06ee5539aacac8
-8d8cebdfc7ef9d739003cf0eb50dc356d6bf594f de9d7430de4d600bf9ccc0c3bc06ee5539aacac8
-dd00f6fbe5d01d6f6823fd1266b6d73e005de8c6 4534a3b3de6a3fd8e7b9ccb73bc3e3cf92a9d022
-d3d932c3149ff6114c7a5ab1a9089d87004d22a6 f3845241e3560d87e3cd730dfd41115bb098246f
-39acf9b9e239a60ecb42cbeba9cd3db294215460 6c1576e97ff48fac85c8506584555e809a52d19f
-d101d961ed7548e0baaf75aaab8e8a1c5bfb0385 ca1198adb5ee25972e4f638e0c39d09c154cbf24
-2b694c3a813b078230025e86e370c373d4d7438f 415b28d7c6cb1e86ace78a6a66f5eb48e05bd83d
-84b2c2c60551bbdc5ce213b430e0fdeffd8f262d 362022dce67dc1f9af7b9d215477969dd0424a1f
-bc7cf69eee77a68206876d9cd03a77301c56623e 5634905236262ccbe3c807a6890e12e55cffdacf
-fb696bc0a6cf63a3de70f464d935622981b549fd a27447f6887a164cb7733f0eb849eea8621966d6
-351360e5864fe5003ed201be2d0b16b2e4f7cef9 53afe0e0e8421d7b984961cbc2713d98caa64bf0
-20b8411d79af315ada2b84f38b0a80fad5f9a6cd 43ad8b46897ae760b5be549b0e799dd306c8063a
-564061d5eebe9e29093dfa26807325320c746f6e 3853115c68efbaab0b1d37ffecc4d053ae53f2a4
-d60c09f2ce6f26ed8e2776c10dd4749e7e713b42 b330504fdbf38015ca6d494b1e719d4294f268b5
-a619cd61a77e3248ac1ec956088c7edb1c192502 43ad8b46897ae760b5be549b0e799dd306c8063a
-fa09f8fe5ed9ae1139b734a7a2356852dd82a30f 165b2fb76ed5fe6b9c3ab9303f93355f06c511a4
-55b5e459515dd773b5156924b9aa4e5e5c658224 c4877164323396f6f72f23fc8fe9a7f3d73f4a91
-fa41ad74509cbfaaca0cae06b129e8f43059d11a 3aec33f21ad900e8dc7fe30fcd1265ca10c416d4
-9ae470a5e33f37dc0e9a81b762868067e34af22e 3aec33f21ad900e8dc7fe30fcd1265ca10c416d4
-aab1144f6786ad81449ee4ebfd3cd79df9107eac 1f23624976add4911213a8f70496757e08478a04
-c86b591fac91199ccdab2626630969f16972c617 14d822f1b52762aea0e567b2624a1f491b13f9a4
-39567d898035b47b8ab5f55197de7b76a5d3b3df 8b9a3a61cdda66a06ae69ac23ed7c6b0b8c0293e
-f5ec9fe0bdd071c66036b0b1e60084b10d405716 0fb6805866145229622fdb43c63394f95f982070
-57678d29d6af693202a42bd318358abf7b729276 c9b839900b103d6104775d0a0ba3394c5453cc15
-320dbc0bcb7377b5f74cb01041ec0305dfe852d1 803d10c5f497df2e4a7462e4e1c611cb13da821d
-b7e3c9ca90f4f24d7fccd9871d728adb21acf6af d8a1033f3654ee27e3c4d37d05a22ef7c3641f19
-51c1a905ce9f8b9e9a2bfeea3e880105033e0993 ad3170182fa284e6d8820efae30387d5f3fe9209
-bde650778713b4b01752a2222879435b11a6b434 bee42ef9ad1f52dc0eca2de22967a3ba0cdac1f3
-34b8027b7e1c40053fd991ead3b5ca2c88cdd3d9 280940b08855c8eac1c7b26e8029cae6112aa5d7
-c9c3f003dcb18d96db7ceb16048322d328676be8 f475c6d63b947fabf066e761307477b5878b8732
-b579077ebc79fc4c33f5383f741e037436251359 2e21aa7049d4b2e1e8f21650738e72b1854098a5
-69a5ffa115dbdaf7d81013fd3d854b074e566fb7 bbb629d6a5ec445b8e7974717633044a6aef24ef
-c56932b660e239cdbc58d292b11637b0c0597eef ae91bd72c055c726d3eb67006ababba22d583955
-f24591dda876410791aecb4a9727de4b79d63c93 8138ac26e2a7a41f610486fcca3656396f668664
-3f759b5046374ae21cfced913b137b7afccf4c0c 239e448b4aee5a84167c9ce6f1b6d8ad7cb66542
-fdd1de51e9bbbde1cd57052481fdba3760055c49 02153d18bd37644498a803680904ee4b2416b10d
-99aa98e1bc9f984a69689ae1f43994cd019a4203 9642f4106a88a90b2adf9e54d720caab22179bbe
-bd1d5703a438d3ba8f192fed87cf950fb206b780 6d643da889074c013a86bfa67c9fd9b365da3e04
-dac539c1eba495c88a5f255e4874025bfd8df9ff b0bbdc5c6e29c93bf9df78996eb8e6808e0a2b41
-30da0483b391aea646280bd25dbc0e4218775cda 5b78f3a0909477fb2059636c331ee699c3499082
-5739126725af317acca8bd6ac6597510902866ef 5b78f3a0909477fb2059636c331ee699c3499082
-8c1db0428df1a232f6de489d73a082e042833fb7 1fa1725f8d7b2b6d1caa72854bacb31dbdfd0e81
-d0b85a2523b757bfa306750c0ce86876025f07da 4b8c718e86f395ff66f519b24eb708008e855f57
-a5c1997742877f0370645cfd2b06e0729331190f f6e0d071fdd2aaeca88cebb9cf5970b86cb24fbc
-5ae95749857954006fa02c5ec1e470ec4a3aeae4 707f0395f2765d38044a14409338f3cb0efcba65
-78fed7402f3bcc845baeb2cda853c5be76f42630 dcb0d54987e9ba5a2a0eb0f045c3e3bcbc7caded
-51a912bab2f6fdcab9ee7a6eb13c4473040a3fea f3558ad46d04c808c60f925305026bb311e36a3e
-5a2092bc0aa36cd19f030affee405fa374f009c4 dcb0d54987e9ba5a2a0eb0f045c3e3bcbc7caded
-aceb17ad08c7677ae5c8b4f9fbac83bf7228f57f 7eaadc7f598acc2a919ae5d7ac169471ad92719a
-29304e433a1756bec432ef18ee0893b0caf22687 2ac6aa7f9ac7aff7e85c0da480cfe06c78337b26
-d733946626d46f0fa30c84006f465c29f09e253f 1d8a01344428b03df74b2ecb2751147cbaf59284
-51dc3cf4a60bc36c707fec39577fc90be4f3a832 4d2d3a33f848f600eba189f97dc6e9863776f746
-9a62f53cf265717829c4f2f6cc0bf8a0d98f55a8 f1724a5976bdd4479c88e36dcd81664642dc2c2c
-831fdc41e2d3619454d45d3fb47316e6374d8653 99c00aca36253c85072fbc5b3a8368348336c2ea
-e5a27ae1420ef380d403e57cf4af424775683a5c 63e72ab211091095ba4fab47e5993d1c4e6e207a
-947d24b3b98205ff6d21e9448228ae2fd2211638 d0bcab748ef4123bb7ae38d33dad207f2b3cf1b2
-e2445ffa21da00dd7944b4aa63a088d3d8088536 0ff5533dc0b20a0808b9906a4dc160b3714332cd
-715bd72d67e1658c5cb98b9234e8e357113050be a14f27841af9dc9f7ea9d070c1b6815b10789b1a
-d4c3c4f25fc96a86e42eb28b56b9104e09a16620 ecb5b85aa8d17f31ce930300dbebd904a25b9969
-a3a2260da35e65b6cdecf07b3b5b09d9bcd1ec30 2daa0af612afd6a90bf4b691ec8819ae06ebcd0b
-067f65ff0d5fdbb40d8eecdd6e883891fbd0694c 998ef68ab57aa9e3cdea7d47c57670a31f4baa24
-7f4d0b757e78a49602dcf2b308b516ca26eb6ff1 a14f27841af9dc9f7ea9d070c1b6815b10789b1a
-d3816c19920cc92772cc26c3a72cc8e89f0b01c4 c4502914a115bc12a86b5c7b24a8575bbfe16fb9
-2e50cfc3df35c9dc6f19c65d0743dc2489ebdf23 03c4e3ba437a2180bc06dcd366bfaea50b5a621d
-78bddf5865a0f1cc46ecf8b6cdff7a90f36153e8 2278f0a98505d570bee9c8cce075d5525d54b3bf
-5ccf56a5c6773b7ff1e95a5d864dfcf1455af66a 1ee0235d3f273e314cf3329743cb75bc53a466b2
-930bef051fee6a46de8a6569002269ea9df29bc9 abb3b7c8edbb04a14d394a4e309bcbb1be3870b3
-acca5c22a6809fbec1b3f6d829b39a82552af9b4 e2154d2f8706bed950b65bc8090cf9db35686214
-3baa981830a1d73af064d64205e09fe9c6699008 c20bdd9ca432ad340c379ccd4a1abcc724f4d193
-8b0e15cef69bdc92a27c9093a9a79082bde2de67 a86713c23b4be97a01a2217945c32d4f4ede0a74
-fe572f89fa0820a55c21c4bb73a40e767b5f07e3 f8873effbd82db6a8ea9503dd0c0bef24fcb2534
-262f10830e23f6bf2048c359e09fcf43e3b5536c f344fc18919aa7d49f25392baf43fbaf54dc2f35
-3d25af7ad20115db4c5554f7b19f37651a047935 8dfa516133df67c8d6260c5a84b8a496edfd89af
-00656d51af83683545bcb189392541cad1dcf339 833843dad5072e8d6528a9e2c60a3f6a03f866ef
-9d272542dc48d5ccc85563437c88084ce41369f8 72e23c5ee6689be533453b8e7b19c7462f8297fa
-ce8b9c40a7a1bfd042ab23198d93d0ce57b8866d 7e7b378fd934b786993911c822515968a2448806
-fdae2a3ea6b609cf9d7be07c2cea3eaf681cda1c 03291996c3946755e4f694c5f5e70dcde62abcbb
-e594efb91714c1c6de01805fc9c0c386be2896cc 6820b8c3dcf04c033d5ba512c9197de22bcec6d2
-93ff0ea4d28bdd204618d2e19602f070d67f386d cf24567bdca8f43914e67337b5815b2bf5b3fe59
-758353a639da2f467e3a2fb06543d93676894fc1 e25ac0a71312a68a85e897d130f9578c75818d85
-45834fe2df466716c7c84a3c5db9cd0497ec0cde 93268e51857167eefb5b81da58813562f000195c
-5ea372be3a4cfd34540514d8c7e798b57e2edcbb 4575f0918778f5929a85199071186d84577a804d
-8908017029f5c46b4dc3c8517c798064444e3d1d 66644f5d6e69cba6b88a02dc50219b2997bae40c
-1a9452eae6fac6b8c933affacf5ef0ce3fb9bd84 1d6bcf6458e8cfb83274da85df9006b340a7bdf6
-dc58dd9b7de49aaba5ecffe976c26d0456eeb0ad 44b523ebed22c855a046d9d9e6b38963ee3fa1c7
-6813eaed9be29af0bba6b3077340b1ad8b45630a 0928f0f84a2aeb69107536e771b2cc53ea555094
-46d83d3e76aff60fb09d1a3125b8c3613e941557 ab2c425f330043b08ded73a89bbb45c88909e3ec
-2dbcbe0d46ec8c91fb58b1c3ab6a3a7fce5a1170 7957f4fc30c4cf80b3409ba5c108606ce36de3c3
-24dbba83ac10d5bcc083ff85af96b5453c3df9c2 1cf1b1022c28e432df51e0f03024a2d9a076b515
-dbed6bf6755460e45c79adcf55d3d56edf0a755a 996b4876876af93453554b9c018f18254aff078a
-f14dd1254e67fa58ef4f33af8a4db1c70b4dc6d8 da75aaab7e58420b13022e1fe47ba23176bb7e44
-377a88f7175355c53ce5cf4a97683668c8d7f26f 60553a4ae1558db2fc9692829adfdd51007c22fc
-3ba0782ceca26164fb9f6b0f56e8110ef23d78a8 5ecc087581478dde99ee07fd97a32ea568de4f9b
-04b0034a068b106c3db2a6005fe8597fe91e9537 cd8e2dc4eabb1ab2d0dd8e2ba6f13b5f0e863783
-4cf2e95c6afc7f1e959dad909d034a723cc9f7a4 130082e273405ba0cfb45e2c02e8312a672318b5
-bde9e2f951bf3e04dc5143ea78ce7aba8f079602 a0bb187a3fcb37462dca7e28aaeb925a23165711
-b1b290e5a6efd7cab728bb23fdeeeecb1c32c63a 79d9d69a4471fb76fd3a5b4349807b1def051676
-945fbdd9f9e09a75e667dd8143977cbd50af3997 6fe8502721a22d145eff304c250791a35ddbfea4
-512a6bae84fa6b10c28f9ad5e893af39075eb723 3fd44b2014af7b56d1cc971f06cf2f78e35d90b6
-dddb40b50424f617b354c614903a97a2fa2a5486 d5842b0651fb9d7f6a7e3f01e36ff842cc4f3207
-4ea884432736ac4eee4dadf0cde02dc6618a20a1 c8dcc7bcc7901f665787d138f48d5438877e23dd
-62e3f80cee9a768e6e746fdccbafd9413a81b58c 0f80fb4558dded6122a50ebbd201874642100c10
-ddacdffc78e181ff427d7a2e3411bfe1bff36fa5 e7aac148e616b4176f7c960ddd1d0f7fe648350b
-ff5c9cab88b6ac315df696d7469b25c7d75db8e6 e1aa725e0b8049c7927ffea6d3c04c841fd0d5e5
-a9cdef11395cf5e75f9f3a97d4708921f728c5fb 643f479b338f57c9e95fc37a910c4d50ce2ce5b9
-7bc3b59fdaf8a31631b9e6c2dd426fbde5ba3a35 5441e01bf5c99eea2f0a2191c2756c713384535b
-5fa26bebb41ee0a7a38a5368e4403ac20b4c2097 a3f781ebb91d93e7e7caec18724863ecd4732e74
-3f32fa2cc6580cdfbf9cb6c73b73438b2ce23158 f6c075ac203d50de2561104dc261d649c74c329d
-3e3758bd326ddff5f25db4d00349e3df98c4ea12 c5b229e9bdb325f2d6379123fa734f7d6f0953db
-2ef0d329d3c9de83e94737b24ffd9f3b991b1103 689802c8dfc51f617c28a629c0869c6fdcf5153a
-8c7dcb4528cfe476eef74ffc9a5266195a289d03 aba5aeed303e69a26a33cadd01c6a9531053d32e
-d1a9330ea34719e115478121bd37ab5fdcd28806 614a4b46aa650d8dd9b9f700614ae190cadae78a
-6e25f6692d0bdcb9e31a8ca24e7071c2ffbb5c48 f3375c0f5da3633cdc038af1285c3fcd5e1eff8b
-35dd747d12a3540cd0d9f2e4891e68d7836de40d 6b59f139ed9b78301dc7a2aa764032334732c9dc
-3369290531f711ec506ba2c073b50fcb8576dd24 cf7f1ab0be49e6af501425ce1772056645107ab1
-79ff11c95b5fa485ab9985be2bb78a40e9a544a6 3ca88949daa739630f9b7e8b053a6e88a4f2393a
-f1b659aa57dc5513b00cf1febb3c6a883cfd8724 7a61917fec505466c5aafbc14b6427a210f9b36c
-33095c9a12f44af3eea8dfffa445d97209a13d4c ee1863aff8d9bf231143618b505e295736c9f389
-113957091acdb3f23305d117ab459411a1c4ddfe 4f84e2d8b1947e1d22f295416f012dd05476bb36
-1bc514b6dba2d593f41bed30b893bac7f0f520d2 ae6c393937ef362940adc539890a20053499a05b
-49c62fb806050e585f43e097443a4d907607000d 97b531562e3988550c62a420f169d66aa0d388dc
-0664cf2c9edfd8d97235a97a60e2ae1e75659e3a 7b2ef2b5ebb160d2ec2a2c0c15ac7fe94d1da958
-9f0fc674c54483fb70f999b96f62b15b8f5b83b1 fe731752313c61d86fad845e39ef18b717dbd462
-88a46af9dc7a6ba24026b29bcb397f92b315ac75 e5bd6df07fca3a26542a51eb4ebcf44c155015cb
-0fb6c22b852928d58797bf38317d58416fe189c3 40e19d3f6cf367e189d5cffae3b51b87aad513ca
-654f3eb99d68422c0da5941205c417396f3f71e2 6c93ab95aeaf0ff0b6d6346a9aead9a586c53c59
-4aefba3fc4d3ef856f9bdd849279070765243551 da0b6fdaac02d4f14adbb157c5fe659e37ee593c
-bf27c3bcc9d681ee7d147255ce07e9cf257bf07b 15871ce8d24729d42e082737285938acba28879b
-82b7107d8e2f609b1569755a824d0d033b252c51 990ef725ab4a29d2635c772accfe837b90338b18
-d7dbc0685fefcc05994a177e6ad834f9bbc3f141 7be4d32d05aa7f5207d0854fee2b4c92219f9c23
-a9b7e3a12d24fef1c66a8c19cc59eb89c08e71b2 33ef52b11de4b3ba5bca6c42c147da5f8d39538f
-93519ef38ad03219085d2d54d76d40ae6cc72bb1 88e493c9498d49ddc0e1e3d6fed95af4f1247808
-88302fcb5523cfc25d37bb18bcb8b77a6c79b050 d9e31503f4e5a1f974447cea71f115bc116565f4
-cb0ea1c4eb96b7c3b268e562e97815a2d96d8b53 d7c634f3500b9bfa41a2031cff1b5abd1be81070
-8a6848d29d8ea646d6659685962c8aa6a86c1a6b a6b3a3368ca431627d3ab8f9c4b87a9d632e999e
-cc963bc1921142502da2e52aa8f930d7154ff8ed 046021561199835178f2829103110d2ee95426eb
-bc359a54c32d95b9e2ed8c64a156cc099595ef3a fc817d8d3fa995b9c6fd16a36bf54137aa77b5b9
-55d62b7c3851fa83f97c777965a9f6101e6bc1d8 a665eaf2954e88c17ce04c669dcd15675abb4894
-b698ae2a47064dab4b2c5ea941d2433312ac947f 95114c0344e0ace2dcda32a08c74cd3b25b945bf
-a9c5a48f5e403ecbf98bc67fdef2424bea29d8b2 f853201fa834c991ac674b2a295692827ac6f3b8
-27e846f7181e96900524dd3e3eeb3c0ac32d4686 3ce24554694880a2c13947d308663a9671b69f97
-7cb4caf7f8bb3e46af9dfeda9299f0911a638731 119c643a0c656e1a1752030e9c22835ab86a12b5
-81413b4ca8dd92fa073e7c22b0c137e911b7da78 2f6cb3b7f5cef46c4cb57adf5a59914c28b5be29
-48292f444bad59438300d37add3bbbf45319406c 6e94feedb41ba4b6df0817cf89fdba50c99573c2
-de4572f50b02cb84f336411f0b97815e34d69886 1af65d70c3216f9af00d5e719d22b9545a7a7988
-88919f703cd87cf0ad440b6db6bd662e1e7c15c4 0fb313e9421947eeadfc533ece80fa493b68a28d
-0d59441bdd83246ebacb643b8938b315e39760e5 8ee8736d3c1162623f6c3db3f4eda5b690a4e087
-6bb2b5b81a032058f3ddac6c6537d0ac89c9c6fa 8ee8736d3c1162623f6c3db3f4eda5b690a4e087
-62ba0909b486d61b3b04d9a236d4860c9d8215f1 6f36e36deb8908e775a02b30f798a1300af67228
-2a59ee75cd019cb1d4c7b08084a67ed29845d732 6f61663ca113598d051d3b5bf8e5112e75981d79
-163a591d1457eeb18ecde815e1348e57a0d43fd6 859ddfa79ac8adb3f00c945099037d3f9db2f78b
-83f64f5c6862d48d18cf791fcffb4317d8bbdb52 d985ff8ea831d5b3956fa86c692aac23c1f51443
-83ead968cff618b7b16b9b6cf79502040b6fe5bd 67cffc24420aa72ecf4a5855ac1e5aba3edb695d
-cc751697b487623d2981f1f1aa97b66453f26919 45b644f91a0c81d99abe161b06851310af9e9f23
-a3e8db21c136e9400e5ce693b3a8bb0c5912acb1 aecd921c270c26211a42eaa293507476f8298e5c
-26c099df624cf8f10cbf1aed86a44cda8821129c 3fc46eeb5ee77386d366e35b8a2d3e639484d8b3
-f6d88aecb0251fae8eceb57ee981acfaa6f7a161 b335d27a7896d1cdd1faf2b7309a21cd97b4018d
-336ae9ff834f4d35bbc4d04a0b8a0bc5f3ffe3e6 c937743aef8739140a2be83bb1284ff7090a6bb5
-3c045e7873e111f7dcd33790da3cd8a5a37018af c937743aef8739140a2be83bb1284ff7090a6bb5
-9cd8f9095d089cd9c6f8b98fa5eaaefcb96964ba 388e50c7070545da0bf39c6ffcfd5e1dc68a292b
-ad2d1317971d00315c201dcd7a6d9bb3a1960bce 7df9a16205fcceaa1a65d4abe94ae1b70b1dd4bc
-989fe840fcc198c6600ffceeb865e281d799cf78 aaf24e816229a1a1d83bdcfd3ffa163ccb7479c6
-e92e39a7a665d4786b8787effccd379e95b5602d 8c2a0daa05c87ef3b49484955820b115f05dc21f
-0501e92841e40129d60c9485c90d8a9223404be3 e58df12389d8aea5a37084b5acf49d8b766ccc95
-49c325241076ffad72047977ea5e49ab86ffd0af 19d0d020714242b8babc20df85b45d452656e491
-e9b46c19186a7f2dccb085c27314d79af0f016e3 216b5a191720d4b1cbb839942e80936f36be5040
-14ff91773eac5e19793dde077eb4e289fc2aa6e6 ee85f5d690747ab77d351c8c48db55f4e1ee8eb6
-bca4599147256ae675d9cab2c5ff7d689b9c62a9 c061a4274d6ee866813834e6c39f501e59aa8b64
-1aeba005ffd2280e75f37401c2740381d4bd5bc0 97b732b07a2cd6c975aa2e4825c952aca0171fae
-8477484d62c1f6eda86885e8cd0d3f867ad052fa 8e8f263cd89f7edb4630a5f73dee0b5fdff6fb71
-c91e724d4f155a6303cf32659a2e64ba1be16f83 8af0145f49f4e4bd9680228be27862f6c5ef2e9e
-ce787b5fb0c916921ac9dcad09d66c75e41d70d3 cc228bc4aa15ce88997028e12e520fb8a8f004f5
-31e1c2e83ee31227732ab849c56a27db42b4eeb2 438a288341e0273100f9455d650d90c5d2611379
-2d94da22ad3cb6acc5442c3de70be5e143bc66d3 6a478c659a8dec8f6bcf2ca5093cb175aca9a288
-9a9e00c5266a525e5d8e09afa62189ca2b68bb92 3aabc1aedbb8f74c8117602202bf907715ded3ab
-f0e6b6803604ddc12b025e5f9980311521fbcd21 863ea8595198617562d642c81db86fd064e40a11
-92a1f67a39664e6e7a9ba947f1bc594aa4da38fd f7ca10341b11c4e44d224a4f986a5836fd2a42a8
-fe36463644af4c12ec82ffc64c8fef45ca06f866 ceb69ae2b1e69a2badb10a0b6dd8829b9b049f78
-0a4d58dafb10c07103dde02d88a66f7926af8a31 64d0408f9bfaf7ac5521bff1f0fed57811bad159
-f73f1513196761c34400e9d1789dafb0ba1f7564 b3f89501a27d0b57c45d0822f2d1195d46718d0c
-1317457074c909c59853361e1df5a2300639c977 8314e1b16003905ec3203837597395743c5f4edb
-098e50d03f0175d126ea1c9235ca022ecd5ccaea 49d45abb03a609e71873de2d6da92c02e3f0e85c
-fe9ca55d67d9f03bfa04be76204db098ad578777 5094f5fc6e2e72cedaf0a1312ddc52e248497bf7
-b9b4f93c87e4d3beb4d683a70592f0137a142509 45b644f91a0c81d99abe161b06851310af9e9f23
-751dd378afc8d7bcca287a7186b43f420590469c 45b644f91a0c81d99abe161b06851310af9e9f23
-3895396fc72e819c5781deeffa0157434047062a 5094f5fc6e2e72cedaf0a1312ddc52e248497bf7
-aef354dace9e8d674f1763bde2296a1475e7daaa 0fa8ea1f3ba96171cbb7e6de4972f02b0a1901ca
-8cc422121bdd4e58f56c0dc21fa6e94ff65ed009 352301a2b8b2cf39c2e8dffa56ea2d3c2efe28d8
-dbb039d1e1a165d54c72dda51a55e148f3197e7f 325ed91f5fe3c3db9263f6eab130948ee9b84a86
-5a873451cfd6a3790ed1a3c24486106b2cdc140f 6be40c735b7103362b6b967bf2262f63bbf391df
-b10edd28077b3f4c6fd2f0e198ca03f2a1d618f7 42e08ac312014bb01e2aa3d891f7fe3cbf740f67
-edb53f3fc87b7ae51db808e168a47de3f3d6a6bb e66f1529638774c6506c174fb229e3986918d1a4
-bfb3a41711c79cc04ffc8eca6d8477a57e4640ee 28d8fb4be4477022ace3cec42f888bf6897afb1b
-a6992bfd57e5c20ae6aa499accc7856828d6ba9b 5094f5fc6e2e72cedaf0a1312ddc52e248497bf7
-8fed7bfe102ebd1f2ca48b7df21063f32fb50687 28d8fb4be4477022ace3cec42f888bf6897afb1b
-664fd5e447f7446225cb0637f89093535ac9ff4a 28d8fb4be4477022ace3cec42f888bf6897afb1b
-f2851ffbf8d3516f6e947b3b393493bdab90eb18 55fdcf7a6a9aa26480dca99b479dcd470216c581
-66d2398f260c0ca04ca4279f82079a23116fd5b9 a5fd5709759624fd5ce15425871e03179aaecd69
-b60e305d7c6c2faf869fda8d49e6762cc5f37795 4a15f23b409575b57a939ad0e30a9c17e63759b4
-7c5ca58d1b2fa9831b63f2d2296da7152b118558 fde9c4c0bcee8b0cb358f70ff52d01a27f87a304
-64af1191c7c02096c8775db7e141954786e2f110 2826a4bfbdfa340cadd3c64d580ba3a2dd8ead18
-5b4d00c1b05a3208120972c8813e88481a05bfcb 988fc9cf57649a13b1905913929bc79c3ee5a015
-38591a172019eb0d075329ffcb0677567a7db7f0 0cb308b39531fb702655139503357e2df7d9d24b
-229002c4415a08b4ce95532dc6679bb7eb3d7216 0cb308b39531fb702655139503357e2df7d9d24b
-42489c5a81536128188d79b499d784c7ebfaa45f 90aff8dc832972be45eb4539645c229ce3d51d59
-b89ba93568cea05f0d7194b8aab5e6dcbeae1741 90aff8dc832972be45eb4539645c229ce3d51d59
-03d8e2fcfb456d058a0a874a4b6f987a74a505ee a9b7c34f2b1461a308674444c23d48a2a8e666f1
-d6cc4b17f0ff36663827d334d52e3519e3da098a e92fe1b6a75495adf5ada2a8167afe9d6223619f
-eff4aa5e6347847396330640921d8800cc56307f 58d2e8952ce64f3cee9ec0a41e75a62341916155
-5077207d5aec4d8bdc9ee552b1ee02e56b31a529 225c32d7391b340bf70213790ed656654a0c8288
-97eae6ef262eb5ff65ea07482be6c1456ec96fe3 ffdc7f15bd89e8596646752f98e7124b641f5c62
-d89f6c6a625ad3b936daf367169965cf5e31a2fb d32606d50622150847509cf6cd96b017009a8680
-cb330fbf1fcc6baf55627f68ac95c93b02791909 a4e25b42bd14371ed74445dfcf12be733486c4ff
-50bb991c33a5d2a909dcbdd763d6e1da480e2cc3 24909bd9dbb8d259aa465cb851a0cef5a176c864
-a7695fe0f3c808770a6a0433f8e26ce6112aaacb 6ddd7e2e61e36e1a60d697512f5cf7568c26ceac
-4b3c945cd1d403a3db7441e6e4d3da1bf455e6da a030ebaf17cce9c9ffa32b05ee65f946b38006fc
-63fa8e1240fde5c7089506f594835b8c0a28db85 ebdd5a53425ddf0359eac872fe9ebcbbe0b4cedc
-b89c31c034935e7a5f105649db0847e6a83d8426 7967deeb3e6020ed5e08972fa23272461767ca8d
-3541479ed3852c601113a080307fa2561bfd46e0 75d7a13d297ccafecc473c6e42290c8fc544ae22
-3b4dd0d1eb5020fa3a78dfa0c1a33bc1389605bd a4075863569e9dae352fcffe93bcb5acc02ea0b1
-29925b0a5177cae629592e63e655608160f788ac df22d2402bb8b3d0f231929179120379a66805dc
-48cb1a6604c1679359f3066a91baec5b9fb6dee4 993e7657aa2cc51b47be8dddaaacba7284b6c4ce
-8f4e41d36924f350b0a94d49c069d4a40bc7a8a2 2422a70d9712190106330f83aa2fe966ecf68cf3
-a35906b57e4f5b888f71645c50938f7341d10d30 b1485e3eff784f83e75c17235abf9f30ae543b26
-6d2354f10e3c2fc2f73d279e4916d7a7b2e8a861 065f0772f1d6cf3554c172ba1de78a010aaa58e3
-798826377f71b46870e5dc9071b23be0cb0c946a bfd7379922a5e01efef477f77400515e009a1260
-a615567527dd9df41b3696e403ce3f7bb68f1580 d851d87b2045dfa17853edf299f42448e9319981
-911df12939f924563ae38b457fba0178a2c0c5f9 b574e46bd1b88e8649f0e1b47b796a6f216bd230
-e0fc722d125c0c556f8f8fd5dce614eca48cffda 87581d2b27294a6f6ee4c90f5153ac4f2e4caabe
-92aa851fb8cd271a84fdaac9319b47fac01a8b63 af60b62be9ba3939dc70c0cc45ff0f6dcf62c600
-9ecb50eda90c29e3c0a7c55d49fa5b3f856522fa 290419873eda4791d833b654961bd2e1b161eccd
-065fb0e3bf5a9b0fea52feb48012d67cbf3cdc1a 4ea5b195ab0b5ce43ee4bb3c26aff2b5dac3b8a4
-74eda0843025b78a171ce3deb2701829aa01a426 53fb9a9a253958003bb87e6ad80a04cca36753c2
-ada19421bcc77843eaffed65e9a73b6f411147b1 ef0aecb18d165417acef48144c15c067e0382496
-3c4fd7ff28fa5a39ee967dd87f358895a79ce960 b73557e27a7ec6f1a80e02bed67f189a0312b3c0
-e7f76f51f6056a8df4d60b7f7d455cfe91973a41 f4da108c371e3a06ca0e956c106087f673a9f19f
-0f9be4e851307f04e194cc950cef9f6e9af2a3f3 00f54a369a8383e4996f8d8310da2fe75553e433
-2e02fcb1ac32c8d710868464f327e4523c93f2e7 36228bd7b57ae1081478b8bd8e6b09a835d5f73b
-9bcfb6f3b4a9eb4ef7c16f0777221e4f07b9c77a 4397058aef50fc7be6e3361c12d2ef3aeb178c12
-6090b1da6b09babf1029fccdb57e9dfd02e573e7 bafc63d744fcf0c5881f6cbdb8e14b24e3d5dde5
-9a2f2e7135c18e476c929937e5fbd9cd3a070f84 cc656d9322357df79e68e6fead5f2d9c72210103
-c786047632fc834a6c6f2f5c283f8c15c0016fad 156f0870c66a7bfaa1717ae7ded5eaa2f9de0de4
-94410bf6ac44ba2b651a19d9f2fd29f863dc03f5 e2affe299653cdd32f8b7249d1d269bbd4685917
-88921b054fb8a65b2b6e7f7f3a07d49051e0d495 e8488bba59ba02124c405fbad6b3749ebdbe4202
-654f51f42810e60aa7b2d35f571e7d91e8fcc859 82d407d5b51516c361605e61c83f10fc00fdfd32
-26f27da10fede54022854fc212adf6ba8c4418fd 12f762faae403be98306dbafb8fbd24a9ee98deb
-92b7880aec4787ca1ae4e7f91e28aef9d3b7e2de 74e65f2c1f5d0414ecd693c7b4b2f2f23637764c
-bf1b23b0a54b869a8360caba8f9dff8a03fd37b1 1251b4484de48ddd47180d6aab01446d311ed2a5
-a4e441a2edace41ec91e22653c13a792eb3b6d6d f765e901c1f9913fd83e170ca3c29d316de72233
-0ad90422015004b7e99ca2759c5680510478851b 0ccabe32c3dc7016447eb08160b00e0db111c1ac
-4ae0f2153847c758d448f9b87dccb2dea412816d 1612d443de32e6dfa133663ed33deb6f4a1f0fb1
-199ae151e53f5a84964bbf9ae94601dcf082b7ee 1ce5201c9ca0022cfde674c52f26727d323daec3
-f6b61728a924da2369d13928f16358c45105c841 30de6c966e15c5124ccaca3cfe276e441eb509af
-764e10a37d8524ebdc6c7c9e40f583c60802fcb4 4445f748b802b3a660528a7daf9dc51bba73732d
-241025e6b87e008e5cd0951795ae55df200bdfe6 f5d5f7cc5a2b36c02a489618065a2497b3af4310
-86d76054cd7443dea1396b0c14c5941241846906 c2839e1cb892f75b09fff3652e17fb1c4fbdf24f
-5406b87890ef209a6f3b43cc551d8db57f9162d7 e5af61043023031c5de5326cf89195994669511f
-074d849f2a5cf6c9b1891ce0999dc3a3327eb1b9 f5e06009080f296278aa2233284ffa3442135d0e
-62845e8889cedc7e80ad1b41a3e6d8776415025b c6fffa76c3f74a0a9013a764ae1f1297a72a839a
-4dbb61c5a9268ff8521057614f112ffcc124dca5 8e3273da67bc50a29ff054eea2d90aee702611e1
-dd2f532e0e29e6cbe22ad5e37efe2c884d182330 1e6461a5e0d2ad65d4408cfa0d422c98abadd1fb
-30c4e1d4455b4ec86db26d229e4874800e9312ca 3d3cccb4c339f069bcde7a61dc66f36e750dd6ca
-f22286b489437b192405db2e9a3e380d42537483 691f9782fe4fc9f9cf983cce2caa9c0751336060
-d3b34e75947837086ad5b783b7b38adb0935194c 7523d48a57f4d4c5673a32207a66db40a1fc510f
-bc5e95e85023d04b082fe433f535aad7c608e48b 17db2fa0b6e6fe8fb9031bc04ccfedad86dd34aa
-992c2418b9009695af58e86458322d67cf47f881 18fe4bded3a7ec2ede5e077dc54dede8303801c0
-b1c24104075189421a5db3213d2678bee5fe9921 70a473734897576361f0e9d72807bf8657550e59
-c33184ed6207ab24dc26d36cfde34f414e88a3fa 79cd12478c5bc8f521429b0f4b63b6aade2d2b6b
-79e9c3c14d6aca2c9997e08ff55a6971ec8b4b2e 44c9f06b59a90f8d1983f8e155aebab48642fa24
-4c795fead2ac3c2d7be829b3d4e40a09e6a393b3 06acccdb8254c0efa07c56472af5b4dcbbc54063
-cf0e5df883b2ee3cc35bec38504afb059eb89b5b 18fe4bded3a7ec2ede5e077dc54dede8303801c0
-cef2561ec5b3c72822b44a4f31f4f6842e936feb f893cd4e8137abd3ca2ac2387c9dd3904c9571c4
-bf7989acb1f04659dbd9f9d0773ada17a2f6f041 51f6f0a74fe72d61b018204b7e90cdbc884b5570
-13cb654555a2e5fede77998b6f97580c8e034255 4970c6659aa5cab56fb57fe25c90ae9580aa7e46
-ae6b2140d1bc35dd15c8f0cd8bb26f2f1ca747e2 4a6de44d0e5950ced049efed2678e9ceba35e722
-cf7cd0d4ba8a50ef7118dff938c763518efe6f97 59052fecf7132523af71113d5857939e4994df99
-05e214ebee5c5d3f8756cff109a10cbfb4fb0e44 6e67c07003241156f96358fd0b5a1edfb36aafc4
-8beb23e682d1c7492359d0a0bb99dd7d8c43c995 6a7f8228ad4aaf6832d967fdc58945b8aa4db04a
-44b26b124894a6716a1901cc40cfa0722b618924 0e120283214897d74725dc2b854a7e4ec3b932d0
-acf77416dc996a6868466a97a876fba7033dc758 e92730b36a27f076d7a45464a2d6d411ad8004de
-edb2f0b88dfe51a0a0b81a404f6f941c83d7c66c fa5c743867889cf25d893f7ba54bb97dc2e4c5e1
-c5a235b1acc8a03b373dc81878073b9aba4c5428 70e767665ad578d99b7a6d07a1f15a5dad4e6935
-43d309ccc04f50bd8d2d051c11db6311f921c97a c540a06295073704b271303efaec5d165189bdae
-265a43febe564144cac5e0c35872af1a632e6b25 ade5c17fcbe9348232c2584201cd08acf3435063
-e543ca0e9f9d243d861a4870084b16f838b64739 b953dd9db2eab1167ce0f0c390244039cca5d1af
-e1202ad80d30b844e3e3c86f1ff2ed1089aae13b df65076809bb2eccfee0d686e4969a308b2aac4e
-e32e54664b73f32ce59cfc26fae9fb253d2bd4e2 45fc162f1bb16bca7398e95c6f0fb5142e605909
-f73de97fdc460c3aa5ec779f76128b89fe5f77b7 4165210dfff20574664f2d2a324d33e7c46b6dab
-ff86a9f5b9171ffce26ac148adc95e5e41d33900 64434e4357e1806e699f37bd4783731658b10953
-bc7d1ef4378f5bae6ca7911a3e0e5a392a9c7029 939b154934f7d17e8fe2201bc33614904b4a58a6
-1ffa757d3d9319d2631c45ae31ff9b14cc61995b 7155fd44d43dc2f277c8a51173fe2545586c2d74
-b9e342b3cd4056ce1396583a2f7565539ba3324a 750efcc7f274dd0bee5a7ea02d98851d226dabd5
-56e77bc6f2672c426cb8c77a465b12c443aa739b 2c7866688a75083d58700f32f2c82c7662d886b4
-9549b63dc5b17a6c0268c67fd7a22667c51e9bda 5ca6273d653e354db9dc3d100e068c3cafdcc202
-60db148dfd9b81e950908f6acbaff1a8db4bfe5f 5ca6273d653e354db9dc3d100e068c3cafdcc202
-c30865be48b8664e513c8790d3d4b2cccc4879cb 065f0772f1d6cf3554c172ba1de78a010aaa58e3
-ae4fecef1b1852d3092aa30c0116f93687798f32 5ca6273d653e354db9dc3d100e068c3cafdcc202
-b7cfb8f1b3465191e5785031ed95556df1d1e698 49d0402c08f4a2efabfbd25452251e870ca23282
-a647c15ceb9f7fd7ae156727f6c7bde8ad918e21 49d0402c08f4a2efabfbd25452251e870ca23282
-cb5bfb8dfb0b8b24b1eecded8fa914905898467e 5e8463b46f651f4df55395b76695b6d406bd5b03
-f345bcd98c2a2ad4dc5c5df12cbc71311bceb8bd 58c03867c3ec8589f55d502565d2a66f6f6a822f
-993ce094376954f3531b47a543325baeba827cca a15d8bed1b5c619fa6b90a6a8087341bf1007e3b
-00c16f147d763e8f934334e60c930aa322827ace 506008613bcc744adc1e632207ba9817d5ac7a4f
-8c2ba14efeb5d3c38082d4f53b3fead9659b2749 38fc178fc0ab18739e49307e1c5abd4d2ed3cd16
-ce2bea510ded42d3aafc4a93d3d0560f6e53e4cc e7695f6c91e43a0c35c935379b4c56571333534a
-25cedd51d8b6c6f02b43a8f647f3039168592dc6 d33dbc1f3bf9d9834c610940181c1a42b3380320
-d4c545b28f2e623fb5267d2ddbf886c4a6842609 15baa67812c4fb9cb2af0b8609035c47fe9997b4
-77d2c81c0268d018a790544236b7da2722bb5dec b0085714f835af15bf56bf1ee98ff30eb3791691
-3b4b105d9159862da3d641afa8713432b75c80c4 dc094d789f8936f5e30e7aa8f8db68bb286f7724
-aa295d69ff5d7d5119a145cefa078fdbeb50a964 3d5927970325824e41566ef104bf647cc801b2dc
-45659baa845dc5950d7cdd6b0579b5ba2e826560 3245e718a152bc97040b19a6340a10fb96aec2c1
-2d93b1d30fd5b3861b7e82a6eddd744022892777 f5c76dffb8eaef833f87bcea3788080c46b404ef
-d3b4108c41385fcbe258b9909ca4514fc9cba9b7 0f8ea2516b139559c73ea53549edb3595987aeeb
-e578de0f113ffa003cef3cd04aade756b5863438 ec4c29187dcaace53abb6598bf5c8a2ee9fe2a7d
-b4ad19703573874994693da66b81f87364ea1d78 a2aceff00306ab1d5b450c4dcc692542d66c70ef
-f2b3f1cf44dbf68c54afc1cd101526139e3fddde 527de21abad9c312bb8921ebde83c8006f0c63db
-cebdca8bd7d4324bfc5d79f10ac6e2d3fe2dd358 5ca6273d653e354db9dc3d100e068c3cafdcc202
-cfb5d0f5a170a464a43a549681f1e5caba43b617 527de21abad9c312bb8921ebde83c8006f0c63db
-cd13c619cff3bdcd4861db28ee90ac628f8f9927 faf42e506f901809161d0104db9ab88888c301aa
-49707b5ed5e660522578319a5451187a880b6eeb cab9e54c2a6d8fe7b45e6dd55510d8a1691fa496
-92c8944ffd040a036dda3e7265e0964031f7c9ab 50ea59d5643ed3812190f33e87c6766b58ac2299
-9d63853d20452e15e6cab1699bc5ed10cc850ce7 2310dc52efc27652cb1dbaab848812e39b0fe774
-24f3f86425a16d854044f17342941e5423c58003 08081ce835534820b1bcb6e116282bcd9b234a7b
-2f42bbe259a4e766521b9869d4d6d66cbb032a3d 59ae82e40189e26210948845635a6ca49a670f51
-9e06aebfa0d441636b0ca1657c41323575d34ac1 6e8be8d272b62d20580633e5bfc0450cbd32c7c6
-7373231f36a2d932602c3ee6962ee3a8445517d4 179f9d0b3bb60c3b1ce8ad455cb6bfbd47e3c26e
-3062d4b6eb6c53f1330a90e8b264c9ea5302e01a 8d998e30084e792ed65f242d64bb032c3cb474b0
-f3b4ced3f470f370370b718123a06fd45212fc9b 646bee7083699719c731e52890aff24d87efcfca
-503da419c23eee10cf3fc13be081a7cbd42666c2 538c3fb4c7e77a0239f7f6c01b8a812b87e8df93
-bc4cd0c5d1cef543de914cab204f5f50a71e978e 2b77786fc11005ef34df554f7a66ec3604f680bc
-d918bb77d9f03acce9c9d8518a6b6e32e1300aa3 7bb2328ada585f2fe7e54343c8a2a81724786996
-f6e3e1bc26a87a160978434ae0ac1632ef51c418 99d5f9f33fd4514bb929b877abe107e9e842cce1
-5424cf47c72e2af551a8996a98b3807062dcd954 49d7bb30f773768b8f5d0535e2cd9e5ccb5e071e
-c78de9691314b3fe71df503322aa43d8d1f8ebc1 7e96abc2eb724e42ebc57f018888df83ed69c9da
-ddba0b0da6f5c85068bcf23b35095974a7bb9b80 a87b0a069eb6c0f8ba87c4c4aa7a336f8f9fd68e
-55ec377f9ad65239c33034016e3e8a305bfce930 c06422848c2aecb6ee69611e76f3276176ca4e15
-0ba046f969b695a6c2304200d0d3ac057fef4169 d83d1aeb2463a87e74d25adda0fbd958a1b3a0e8
-bbb9427385265f312356226f57520e9171846d31 9d6ced3d35596de30a451041875a8d710ea350cb
-08f9e834311981e0a32ec58beafb3480f2e1bc9c eee9da5b60662dd959214601524d0ef3f01a02a3
-4d2ac86664e0c3613ce7ba2182222ac6239cba7c b99852d74a16bdc0c20d2c6235a43a492a9b8a12
-c5f75968374a466cad95379193756929b89b9ce6 9cc8062bc20bd6c3adc4853572bcc5d6eb588585
-00cdcab0cf3553ae1d2c97f9bded98aed3795608 1bb98f352a091a9375d3c0b321961bf36db01cd5
-f412475c145bc31ee583664c5e779e84ce2087db 3dc7590a4874174301888b197ce992bcfae9444b
-0d794d8f8e6103bad291ffbff934d0815f8b8be6 bd0dc95f692d1e927159369937287ae25c65fe91
-dc1bda52ee963ef25da7ede1574c5a4de9805b83 b3bbf57acf546f8977b14e3443e0393375fc93f4
-da695c1adb85685299298ed15e8cd6a9c14ae936 961d3252a0941d57b0c8f3225714a544e7b51270
-cae385e9f407d0d759d496ce5cd23b78d7d6c81a 44602fd9ddc23ba368a122a5fb34c50af570ce8a
-77472985ac5ec9ea34589beb38466082a8f14b7c 497cf4337627f2912f045ca4ab02374e0a902418
-fe0ba29810855c5dcf42d2f26d6ba6b286ae74da f3219c9b584e7457ab33df8829b28be9b6d2ee92
-6756348318b7aede24d6b80fb53ec7b4d3c2a3c7 8268680ab031b82164a20481123ee8e0727b7a38
-731cf4a8379793cf1f4cc4925b8b5a80a027a947 05475b2d336d0c9db51aa4fc95ee77177eb74ebb
-9b3af32a93d722d50aac99e0df24bb0ab9b3ab14 2ad3e48a217af2878a05bd248a56e55d0ded1c6a
-b023ed62d4ab588e41906e6920ec56d0dd57590c 5396dc826a326316c69b63c86cb542792932c4cf
-b2887cf8b8ed34124506c46a5cd68ee26fa1bd26 c4192730799dc8185e59080fbc4dd833a07a3a9f
-e814c43e0803ee277463d543b24175245ea72d28 d8d5f1f46c97f0640517f89b22b5cd0648c57f3d
-90cca3338b91381479daa35d72fe78c57d3c6c73 3638c7ed5bd066dedbc9cee25f2c433539d81df6
-c81803fecc739fe1b06f06e97e855189736620b2 61743a439b48ef69751d0a45c9db5e8f188f9843
-2f2e9604ba0acceec128b1da83ab993a312d7bcd 0f45e6688029149cda13398363f0d2c79d4f288b
-9161391f4f68c15b46fa141f67131ff5cd6421dc 8af73dde81df4bd2e2357a5a89a2cbb7400b87ab
-a909ebf3e5a3157f07ae3f96f1cb9213d7793958 51463cd88c274f9aa62dbcba107e2f7fa32f0a24
-4c81e4db1ffb5d700d273f7955aef6d77b8decf8 e6ff35f4f4ece2f89286ede984e75b443dfb542e
-2c7445adc8800c86ddfb65a047380276c7c414a1 5ab98c1788d632b0325779628f064dcec4402af6
-7c6fb3a20525250d7d556ea7569b082d1080d515 d9fddc2455a287118735d45e9b4f7b94aaf0d230
-68c66e3612501e5cfeb5450dcb53b8a330ae80eb 97c80c9f4441d2832b76c71f76c8c1bf83de919f
-f937564ee8f8c029ccc69964b73a60d2d7295180 b0305c05e71a02ff9b5375809f30b6a3893f77fc
-17711f6360df2ecd53ac92f319f0033b5a7b365e 8ad122da2d6b03ab47dcc5430906b285cb92d7ee
-0d7463e7f38c79752deb0a0c6b1348f871b18d2b 049e78872d256f7d4f7dc7fa9aee48ac09a4bc3c
-64736368a10ebcafa942701d1e7fe00806733e3a 1124d8743bcb07d92bd909fa412ac6b210f2596a
-29b93b2ec2c9744acceb0d354982e42537a117d4 e5a7b5b140dd9d64025b0ed752a92e4cd69d47ac
-57579c97ce521d41a2301dc8674c7f466ac34880 3bd66c0601ec7b3867eccf7bb55444a3a57b2e7e
-aea329052d06828ea240671bc82b54249510ff25 c57d3c688aca01aff97bc37ceb5bdc4c43a6f1a3
-3f98a54b8bc5b88874d2313afda279e51a1fe5b7 78f0cb1942fc3f7b8a026a1353b6178880b2e3f8
-872a5c95a70901aff93385b85178653cac56f70d 4c5f42567a403c620d6e058f62c4a44cf526fe5e
-ac329bdd89bd5b5b2a79b5f6f6caf103c1ab1ff3 5a4732713160f33dcdd3862b1e3aa56651fca704
-52a361576d266f9fb5940990890d29d91c705da2 0d97c2fcfb3e8fcb09e1c2e2c1e67049d64293ce
-7eefb8467c280de3a5ee20cd54fba2b648888d38 c07bd62d8e1a544ac9f6b7e10938a7e03e043781
-efa8ce29a502ecb3665f781ad8254dea17cf3a4d 6648934abaf934191c64ae221674c38abf8c90ae
-cb75ff099fdd72cb6791e201897267ac770564b8 f64b929e0cfa16ec83000a2c316210265d8754af
-c891144d55f0ded4d74f8d4fb5b9971e40a935ed efb901d27e230f6a229ab7bafc7a4735825ced1e
-f52f6232dfb50a363f61af8622329cf4cd83bb42 2f2675eaec813dce67be86f1d90db74668f0679a
-68de7f0e8a68ae19cae11ae203e8f20030b22deb 2838418eb07071072f3b0d4de46c9813df3de929
-4017e4bcffde5bdcebe14f14e25af06c11a49afa f68801875bbee3cc846d4b20d3e9d0c159394493
-a2cb49d33024352f3cf77dcbe888e172596b3e96 49af1b3b85ae93e36c4c2edfe6cbed146d3c8a13
-93ea502ec2fdc1ff10871dc8bb4051e27c0aed99 291a8cab9c33a1c3f9a391c2a5fed5eb05dfd862
-ec5347d5b16a9581e1bd3f830f8e8ff477fd9b50 8520b6d28268ff2c6394911a6ea0cb372fbbb9f0
-79eac7e6f644b52458819530c7e21fbeec68fb6e 666afc8dbb9a48ad2c13b55e47093c236ef872f2
-19e5d9812678060d570cd000be4496187dd4958e c97d9909e3a9fd30794026a96a1fd65c5591b3a2
-ac260c6e77a6f0e8c2389cc9f248b06a6afe05dd 8a447eb46f75959e7d8765a7a8319a447e3027bc
-9319f727c8cb30ee3e85e26e4d89001b057da8a9 9f696adddd2322017aa36fcfbe862595cd096262
-dddb21451547b2b16b321177df716ada23398be5 05d43586ed57271d4b9faa0ff010da95834f862f
-284433a9b30cedb8ac21e3daf3cd36f791ceeddf aaa38e8720a6ca3c9511b06ee5ee811812360296
-1d9dcaa4d2e694b0415e0a69b6e9f54af371ac63 65a69988189c5d5ad6957bfe8e0a537a14361f6e
-57ba65b876cbec15f8329b4c7978fde47779d498 c97d9909e3a9fd30794026a96a1fd65c5591b3a2
-e447ede28cb643359324cbb2ef8bcee6dad9be82 65a69988189c5d5ad6957bfe8e0a537a14361f6e
-2c6cb7e197ecea7c02aee0620fad6ac5da3f246c 2c4b00638f3e12bc5117d96e217b033801533414
-198f5db25bb77e5158fb09116236eb5aa059e247 2c4b00638f3e12bc5117d96e217b033801533414
-a46d1a1d41df6cb1b495f10113faed4b65b6664c 4280de677e400a764fc9784b3e43786bb7b2dfd2
-2f8b12732a12181fc19c7ec932d74a4ed8056fb2 dfb7888beb8182da09378c737d2fc4e155e7f5ea
-9bb53394ffbd5a76e47f7f79ef94f87fc6c97790 806c73af4adadcb78ed7222ae98758af5447bc88
-7fcf5ae91dba39ec22ba66c5861b9846e83ae9ce ceebc15131fb881ecfbe97fb2583795e9c2816f4
-1637b4c1898843a323d8400030728e013d108311 7b593b2766efe49a7e3cf958a6e4c6ca6635ae8d
-bc651a97431f58bc1eee7666a1dbfbbec710bca0 34f4070e75f735b857c5851b28a21da62659be27
-782102d09d8400ee66e73eaf46d8342a67c1ccaf 4adb0b3dadaab96ad8c2075bfb43a48de6f929bf
-4fe5ab4304caa72ce4707cf9e63930082674a415 4be8cd57688290b4d71932f9668d9b2401a7bd9a
-893376acf39cb41b4067b75793c5f5b2bae53c92 720f0703406aeec91a89cde60061537a50d16c35
-b048156543b6f9f87a23c116a15432027aee3dfa 73dc456c2d22665a21426f46d0e7fc283db448c7
-43959867d864dda867cd0faef53e4a55f0d2ebc8 4b58838b8b47058884d9e3204c62bf2729149659
-828249fd097f0637a8057281c7aaee7e3addd282 88f4c71cffe19862bb43a83498cd3ab6205c6ee2
-67ef839eee2853f3aad2fb1321dfb71c8871099b 991a8663ac7b7726c984e2bcb0b91f783f358dcc
-e8d846870a2939c6406e6864a6217d363e6217de e23ca3742730bb8b12cac57208723682565ed7d5
-b530e60bf5d64741c23a02509cd02930d223625d 3c8cbacaab5c0a37933e468fd8441552f937e7e5
-804c0d42e197e6d541ef30e60db2d0732d850f9d c53e57bf71ee8b2a4bb60b1e4faf0fcebe8b03e6
-5b0e62f567293307a3e121884b15aed936278c7b 7c739f964c121741a37772c069c6daab359d2666
-c400d985bd3f81c7ce24bf66ff3597c6bb51a1a6 c6b92cf891c543f6b4e87e7075f1999cd696f15c
-8c18f414fd3284eb41eb6079df36b7ec25d11377 2e8bbacbb99e6ee6e71742eba029ebe3b654164b
-3c2c21cdeb6633ac46998872bfdb8582784af7d1 5696c6965f45b02fc58696dbd833ff9d79bd65cd
-5f4b8748451de4a8a4ca1f8334193c046d8801fb b80d4faa536c91b5246c94e05f4d451d4e4bcdfc
-30c89f6b15e6ba637a6aebaf2a52668287b84754 c23edbbbe8cf55c963b76b9a3b68976135291f71
-e88f070b3a11b1734aea8afd598b5f5fc2561511 c23edbbbe8cf55c963b76b9a3b68976135291f71
-0ce77d670f2620732807a3db02fbae3a374bb9c5 60eec93e044ef9094c17915aa4337549cbd7f67d
-f3e080a3c4de4277f6471f611a7fd3db7b9a502f 0f0fe480f8e7026a38c168758f78759bbfef7e4d
-2c65ccdba3d6f16ef86176647878d76dcc60eda9 2a16f47db938033b2b5a78a49d9b9e1686faeefc
-7b99091440eec4b06b8b0b270979fa51240fd35b 02e17418aa90b3970e8cb7973053467b0c04e368
-83ac5c15571588e13798009e64b0ddacc5a4efed 58f18cc49bd5124e30b3c06c186900eea746d605
-75ebde9ec3ba224d0bc7e37cb6b9152d48dd808d 2b13de5912854939982c1039560a25b56de10ffb
-d844fc06ce7148f33c587be91654ae268c6285b9 9a41756c7068c3faae786ba4c5a04e9cb739f00a
-bfc2a10e4448264c50d193c36e62c550e97a9c95 06220bf13ff7a85810c10e9b264425468ba2b5a5
-40b4bf42c1bb713d9c8539cc114542d7fbf735b6 6eb9ced36f3cae9f012d560ddbbb85d98dc90729
-44d0fc6d4c3b6636690b0dbeba53216c30cc98e7 fbaa6392f499ea6022f6934bff9ca72a503a6248
-4534531caded66aa25b55b3041c853d40348fdf9 bcbb5043cb40b6b82997b934b15ab1f52f48b6ea
-22199f357de09d910980dec53cb0b18fa9770dbb 9499165fa3dddec7123806ec70b1ff3d0758aeb9
-fcfea645c0870fed9108325e8e839a34d99b916d 5ac5187207ba651b63a0a4c542659a4875d9016f
-571621d1125d0c8594ce67e8a94f2625a46499f9 9bda7b243e71b90373d54bff9c3af56f14e43cd5
-676519fda5e01aae0ba4760d9f37e18f89e4e97a caefa98bd88cc9717152d1981f15413360b0d600
-cd2d94bd81fa14591263022fa325773192514b9a 7015a3621258c8e7b027a94d07f2173b611e65de
-32cfa6a73e380934ca10084a75471c2a88a2c6f6 571e763dc391f52a272aff3bdf693e76ac89d662
-918f9c5d99d931fe9532d19fa43d1622ea82b3f5 5673378ebbc5855eff98b16e3759a708b08837af
-573aa0020ed692667a0a613e791dd5c697da092e 6b77703671bde33e99ad975f181c62a9db083972
-d1ab4398fe6048c508e4e3f074bc3f12da75fe40 188fe5ea25c72e12ffe79c9455b275dd0265ae84
-c05e2f283d284d1b9139208c70856e587190736a 738565bba8ace01a2585ed37cb9a90b61d308d9c
-a4df35cac94aa17c18f5a7b70b868693dc2115dc 22994b883040f346f65b34229a30078d614fee47
-f5c332c1ddcb9ea2d4439020eeeaad31c5fa541e d3f470d58b709819b4049ab42e80155c5bea9f73
-07136a638fdb938fd6b7282ade6ebd5e5d6253d7 b149f1ccbb599f3652976554427322170fea933f
-1333a823d30ea47ba7821212cdf92f1590692df4 6c586bfce53cfa3d65666260f0ec58c71c6cced5
-a00dfe476fed9ff9c1b3d8e110e997ac666b101f 73a6ab40628c49b0008853f83e8654c695f5b156
-e238371dea7d8022af28328d46f04faf43caab5c 74704b490fa4d0f1f7d162d1b5a6616878a2d924
-f3d4ad07c4d7109a10010841818f44de0d751ab8 4bf20b931756bba21eab55eccf3664ef12b9416c
-396874dbb3f0c1324011edb6d4035b514b5eb427 611910809ce5e1fbcfbf0052abd136fe23d23d25
-9eeb3d945cfea33ea0e6358570cea845e4d6b6a2 82310406aa77a63c1384ff2a8876cb0a89b26d55
-6c9afee9f486b39134a8c2eec15ad0132eda1172 50c88f09c7b5dc1eec89f3a1566113a5189819e8
-591d5800952cdbf54b771e51fb60e20bd43a19f0 f5eb6567214190876863988d803ebf58a17913da
-a617544ef57a3682fc0500efb434051cef608ecd 65849d13a17a34fd012632f2bc5bc3cdce27df03
-0abcc0c92aa459dc6efd337e0f6cf34906c24952 51fe0d8511f29dd41475225b42f9d9db8dd7690d
-428ba4f1f798182e1362f577f4791a837d400022 b025cca2c271855ad022b09b3fcaf0d43e4d45e6
-4d717c0eed2df1c36398a1a03537ab67411e6571 5a24b51d512b63f964f0ab20d408237e65fe8244
-a80765a09b88ebd0d0cc247d435a67115a252510 b9f7147d741a93e344bcb218520deacbd0067fca
-87e44026c4df0b50e73cedb4d3a4d9c2acba86b3 ca26acee06ed02012dd2c3c872f33017491b664c
-d9964c55383c6cd66b8acccca72c98dbcc7e2122 a520ad412f80f4a976183af054682e21097bb7b6
-268e5d9e70b49c7f2663d15e5b602caf56c0904e d4ea2d08f9c56498677d75de0f46e048649798fa
-887175871bbe2dfa6bf974e3e5d88b2fa622e6ef 31084bb79aaa02ad6585177d7238261e9d488eb3
-8fbf5e885dd34a2930d7d7fc8da4d2fe96fea98e 7c1ad136093d92764f73abeae05f8d67cdc86efb
-6783878cf77f9462722bcb133fef13aa9aac5ae3 30f5859e1c56e03151b295293e94e4d4cf7448ee
-f1c90ab7ad4c01b3b3bc2b6ca9f90f2e5eab7211 131d3dddef559331268826e3c77191acb0dcae4f
-1a1ecffd57ef3e92a04b2950a0b0bcf7c0aa2ecb f00450969e1b80f752d0f85a423b15c79a34af4f
-6b47dfc42ab870e5839a9e69e1812334fd965c6e ce2506a46f4ced0d336aef9f73c6abb8c58c737d
-7843d8a215043e0da608e868c01fce7a1c17cd4c 86790bd465db63371205085b138c3aff37787186
-55c8d9d2e8e7daae3f37b49e49b20e2124340e89 3999849288a61a28e4b7372a1233b6ef3174a92e
-456ab16af175f0a2992797147658fbf47833308e eaf16bd188956e3efb33e2d4806726c5f28a84d8
-ad4fbad9a3575082111a1514f6eae2ae7c1c95b1 2a1ef6c5da496932141dcc50e4ea94f6b243f81a
-746116cbe0300d71134dde575191e1c3fa3d8d6b 9d24e817ede5e6356ad1c5b70cd646a6f7164fd5
-7e5605889681a501b0a8fe4ccf6d6c3c82c0ea6f 7934d6ab4f2666838dddc0852e2b3da88b0a9a18
-232178eed00902c140da1df0e981b4574c59229b 2aaee010cd03a6fba7643eeefcfcc30df5ba6bdb
-45b6bca80bd250053bb3fc2804e45c88f2e1a87d 65725eccb96597ed6fc9aace491ce7bfaedc0b0d
-a405ccedddc2ddd6ca4e7049563f2e8c7770a46f 7ff624e2250644db2537071da115040b3a19e841
-c5cec47b1b7d43098ddbe12d686f92b9e838cbf4 5d4f0a74ad4fcc9098890ae30c8b7535c0a115cd
-c7a2fee64119ed391b3b288f00fcfd27f21155e4 bbc361eed3ed6993d4a5ee8a4e42c23fc5832af7
-3cbdbfd02ebb6b593541e514fafbcef2e56df0ca 00230326491b56605b15922178e6c8b0b69bec89
-23ecdddd9551551301ffa5268521df807f8922cb 711ba053be86b6790c58a0c0eee4eece46b86243
-18942dd85ec6fc4111ea314a3ae784a3fcdffe53 711ba053be86b6790c58a0c0eee4eece46b86243
-9b89ceb9ac603f4ed04253dc3c46c7573bf9b9a8 a95440838479c3110d1887a973d261297b9c4d64
-7d1b1995a3c5c9d58a29496364f835d644786c48 2a8ecfb6442a9463f836fa04b582e4420cd87136
-391ec5cd9368c2711e836415b21f8e8421226b10 a98f4dc995762942a7e0f645b19fa2052d0f29fa
-fb35243589922859f416a15a1dc757ad7c95b6da a671a0623f46d3ed94f2b4091d91dfff4d924a35
-c462af8f4a68d41515607ef73a70aa7cbd2490f5 a671a0623f46d3ed94f2b4091d91dfff4d924a35
-b0ded81d43cf44b5bf561b40da4eb38820fd1de4 6c561b3b86b5b8451efdb8a4d448e22fdaef51d8
-d6fd7b96d638bfc918134e4c28fc6accbc6d5db5 68d5064f09d2e33db7c0743086fdfad49282524f
-71ec5ddf0cd4b396920d81c488c3d571d0419c56 6146581337fa85f902044c9d91f36efb7d98fa90
-34cfd9988fc73840a5a1ba263ec4f355ba8d5534 b8eae2c41403ac2249fe6f81869b08288710dad2
-2dfbfbbf293460a15326780adb2827ed327b56e6 1152281c6a763c0cc96f8f05363a7664b2db31a7
-c964a7ff87a0dd6b5d0ed114c4f05f4d9a60ccb0 f835df8651f389d52b873f6e16efffb177213e42
-82caa0a5d876627d559b34b1d8a51031576372d2 c3db2fd297d04db9dc8d5f6a36d44ef006ec5f6b
-fc72ae49f12927294aa2198f8cf6a6e2ce921ccd c3db2fd297d04db9dc8d5f6a36d44ef006ec5f6b
-f442f4131661bd05e6dd0de1660631a5a08a19a8 f230439d0afeb110d57ca4fc93ab375d073c9294
-c2b3763e6ceaae7003d3fc90b2fd6cc94178da19 c0042cf2ab929082cbd9676269168ced024c79ce
-04ce46d0a29dd34b32fbb252aab4e28f41eb02d6 56227654812cb3a0cef019b56f649ef7063cc5a0
-92262b0cbfe6cf8989791bc1dbad976aa8cb270f 4b476528dee8575ef0d9808e11d19778dabf9596
-bf965efefd0f6963a1ea7fdc8bf13471d9fca1ec 895d5771fadffe16c37a2c7207b0137f8a379dad
-b9ff6f9b5851dbb7353fbae7ee6be021ceccb5f9 22a4c699b74d82aca6be64ec6d1d0c348351816e
-92296a0419464f04e59df5d546674f54e2a463a3 fc40685615048c60b5745ae68cac0b484d114d01
-4482c68969f97977bd453e7b126c712dae256ca0 f0c27b2781d47ca7cb240762a82bcf1199fa5da5
-201771539a3b83abd9ed03f3eca9884f66ede73a 5001a514442ce529130e941f4bc6b1baaf128d8b
-1a1b2e6f637a517612f3864ce1396d88524e3f85 9c231425c35866d20061af82e549fc5826bdff7a
-7e6559101368865df8fb5a0579090072a598f871 961b6bdeb175989796bbbd7fee04cdc1690fe522
-d28bec5a43511cf7575aaa07f9eed5c458d9a33b d944815ae1694180f8720309eb01dfced03ca9ed
-74cf364fb34fd04b825dee410023483db84c4d97 75360969720839090e3a3e6561e0a24ce5d3b86a
-c87cd0125d04531b9db23cd0ea3e935e8e27c573 0b81796221092ea6eae19d62b85d2d6d05c63a2b
-eb3c31a319ab01f6e444519c5822ebd5f334bb45 12267fefc43206c1b146d17cc16693d35d91df05
-9bf3589e6f9eff05d4eeaf901f96461e0a187b79 33e9163e012ec0b0e8111d39d526d255affaa646
-2074771b0c980c421954504902f8b7205d7df9d1 bf58528d90ffa7e1b80943ffdb4c9dc0148095c1
-27611524473ef560b69b6d744d8fd3bbd0c6b9f8 5d304157349fb320b1cb288286e37e57a034e70f
-f62246d3114b4028ff8e6b5aa39786eeaa13b7ad d7dc8214a5a5d579596bf20741fac02185b2ab85
-ddd4c5bcaf3500d39f7cdb700cc6bef6876b5689 5805a23920476590d4887322488a885e8c53c291
-978d3a9ca3fcdfcad935379bda5c226b6b6aba4a 88a413f14d93f134b3cf0b2891509cece7269b77
-a85edd65600baf89e6e1a948877618b88b5d912e 73bddd4569a7629bf07e19c18a66fb8337217b9e
-3f780dfef715a5389ef745dab9102820d63c03bb 38de4a61a8d1a0540318f3a7d937f26808936866
-e71211f716e0adbc10758a4f65a3840d1f54bea8 df28748931b519ebcce758c1b390ba15d1e585e5
-e02bb3bfdb81a298307737b1f1dfe905fb3aa068 875bc9d4bf4c4cc8029b60efa7aaf4708765f38b
-e20a830a87c011c36ff8de6cef0f9d7016c94730 212c118d7ec8fba181279a5e910e416b91378b50
-eaceb887312e5c0f55a19cb4348a4f3ae099a3e7 0b5ad3cffc1b0127cac79c12274fa23a9f8e5eb7
-eacae32bc94f4cf337a7bd54992ee0dafa824c75 bda329a67bbe35d46cc2a06bc6b62c43e7619d88
-8a8439ff995ae9cbb6916267765417f91b2392b9 cb96aae65019bde03c2d78e9759d89935f205bea
-4ebb9362b99c7fc86f11191206f88da4bdeddec8 e590f44f6d395a805c0891e26cb5f1e6e4647582
-1843b1189841331c3bca8e5aeb07b2c1880e3044 1ca05259128620896c9556d3f3d113b6a2ba445d
-d45b46cafb9898585102525be8a1f14258f92eb0 ae67109ed753445ea8426119c43dd9ade427494c
-1cce78077909b57452de56a86103672b78623b20 ae67109ed753445ea8426119c43dd9ade427494c
-3c3685de430a4ee4b9e117776c4b7ad3198d7d68 3d8a2a1a7414b5e8e3e886bc8122d1ceb57e054e
-3134cb7bb181a25f5c79f7cab7353ee9ffd99304 b3eeeb11ff5c05b622cd0f1e62348f884e8b27cc
-984ac2e7111f7dee8ea3ed0cc4331ffa5b551844 03d59d685cbabd6054cf517d3d2a63e098441345
-89f62bede16f85e9bf6bc741fa7d218e5e1150a4 a1622f50a53a9193945adeecff67f0b432b20cfc
-556b36612917de150c9d9ea1fd42fcfe310ac420 297fdfddfe97792b96a1b01370fafc28b61b9720
-043ba5caa26edbfd19f27438742bde42d11ce4ea 949ccc2be30a91faea4a65082ac83e7aaba6e294
-5ac2831021b3419e776b7a4a8967fbaeae047796 949ccc2be30a91faea4a65082ac83e7aaba6e294
-70a160d1d51ec7aec1757977eb33c4998547c00f 41394f590d92673bea34f71f1c537d001d82719e
-0b2e435d72c457b5aeddcec22544bec254f58262 6a65c1936dc8387265f27e08a2128f8317af02c5
-ae9bbbf181d9c2a17b510acec36a4c1e8a85fb15 bd63d0d62001312dc180688d97a3b7d6574ebb81
-cebec1b1ef46c9db3822dfa58201b9f01b577159 e6b385fa3f43d2e97d233afd181c880ecc03da77
-ddfac5970b711094b5c330181027ab1bf583a81f eacad2599f4457e2f4135510b526a8dbaa5ba014
-ac249fda538f2fd56248cbe8a329cac1f5e9edd1 8b9ccda2364d85d8ce3e64be192a50f6b4078a90
-db805b0085a49813c3bf52b9b443b6255309b60e 5752353d1029f7e85488ab65aafdd11683f9fe60
-f196197a816afe19c038d2265b462063a5ac5db5 21d9ad58687a2bf5d26cf5a32dc7d3d0dd79a01c
-49eeb1d40335029cf3dc046924e68d00e87006f1 35d3e4650f3432bfe471b64221eeb58621823d27
-6c161782dba3dc699b775673e95f9c5654cdcd77 c8a1cd23ff5f59b523721814c545c82f694850b7
-7e7aa114cd6c76ede9e51ed6a06246232ebb22d1 4744ef173f3e286338f756e4d004520d929c95bd
-d89b00b44ab6ccb71b27bee2c1fbc7417a7d0211 0135eeed1f192dc2088428806f8ec92e8b4779f6
-714cf87ad05890b3b8f8dfec40526b7f258328c3 8d12286b359cdefa671804da42bbfd3bf9c7663e
-83db0e981057ea8216c58c31e33aebbd5e6ac7d6 69b54ba4157ff057ab37d110e75cb95edb9e7adb
-7701d8d6401042740f4dde28e39cd2ed58c1c59a 64480cf3370c98b326661524f841eb2ba5790eb1
-581f461311eb8093e3c5e72f594f97e4feec0f3f 2386acf89cf9044df4645c0a344fce038209647e
-70ef30a15a28eab3ec98a41024180d67f1bfd65d 3c2f0626570e924d329539a10a2447aa7ef9f221
-fa1df630f4314cb6809eca36202df4f92dbc15df edd28d44dbadf65a399b98e3927d41f0ced17e8a
-7c463d3c5005619d7fcdc579f8261db1a89652b4 ac1c11483c54f258f0f8fd7dde21f7eab9d5b477
-b06f0ad69981d313b5bfaef17739fa41e9369616 ce6dda0ad1f828e785dc7583d21204b65755b021
-fe28d3894b58cad9861811a36025ae697bbb056e 9d05712aa32547fd9e48747f37373efb298fa5b3
-992c63542f33c77715128a1cb7200c2f41a5dac9 8f7e90045f2723a162baad2dda7d8f233ee86446
-ee23723eae87bd53d891d90b1e5948a36c45441e fc4a31074e96cdb0d3e56f0fc6feb706f67c8699
-166ab9da3f8f125f9b5e7406b75fb3698a51bf3c b2f12282fb0e1d9bf0a5d7a7a2b6ed85687a4db5
-af02053e1b9f6e6ee01c6bab636028fc574e811d d5cc358a260618161b1d5c495a06cfb40bb6e929
-1afbd90890d924e652e54c278ae1e2b56f48d2a3 00d975e3618e13bfeb0bf037e34af888fb1c7c79
-0941451e57d012c760bd1da2f984f5cf791aa9cf 27d6cc7914bcf338d911b78a1a0024abeb42a724
-a1d4c5095ae17857220c04cb5096dd15a2395cf8 77f1d43dbe7b95035ec28a26bd10c34488c64e0d
-8d219e9c53954612be0744ccf5e1d51fa41f8322 26d7b108a88ea04cf4c1258afc8610a7b76b6782
-4c8e0dd8e94f3a6f5ee3263dd457269a6ab383d2 e7686e00e4ec265b27c4ec5a0034b949e3306475
-251f989a6ce795a8edd56edc4ad276afa104ba30 61c1b9e3b907aac662c52b75ff8e4098127ad87a
-2507cde59c5582d2e0c58154c21fe72cc0a08b04 e9150de54644a025a2f1a52f423b2ab29647dacf
-f59be55fbbce4202090b4355974c2aa4446f1612 cbd7e77f8d033cacdb3a088c03f54e97196139ea
-554a445f70c0a87678539d538fd414f4c5d5373f 0db7ecf247d4d7cd882be5ba5843f66222d47d3f
-02e0ad50583233216270f4c9787ef2a09c51a528 b1cb595fb9bd99ee81a0b3eb2765f26671cd98a9
-b6d226d75b4866ab18721fe9bc11cdb537b3d852 b50bbf75bf016a7c869f26d575af06359585ea25
-7ae97f2163dd09eef7737cd7b8c25d8ce528f398 6fd1b1b0a48c7de0b132996de4319a57d665bff8
-43a2cd55a9a9a1afdaa5d3d4cddbaf6b7b5fea4d f7951d0e8522272bece8e187e06bdc75da319a80
-86681a7cc02522397ae91e52299cce67a840035c 446fa6d3e2a08c1e74bad5760510f451483ae0e3
-bfdc0e489fb5da9aa762165847f15c9a4a181c03 4059940e88c34c869e470e716ee5be3d4a8dc2b4
-9f617a7db4629de46f170793b671c19671d0b0aa a7669e30c3c32db78dad8d1cd6eca9394f843bef
-70bd8f9aeb9ee8e2bc546b83a36e05d952c64dfc d0c75e10323b3a31fc2964d651ecb9297b69b003
-dccb531ddf736c54345db8cead6c9a737bf90826 45cf1ca49f802408764338f4dd00f9096979e6c7
-6654431474f1348e3fa0dda58be6a87cc4909edd 323c59ae47c11875f41ec0202037787faf5fef21
-de38f314454a010a99bc0e8006591b3682d85184 1f948c0edde9d94dd9cec72418eaaa100c5b3ea2
-eb6f8dddfaf64867af109e3e6d22255b21b372c7 bb8b46ea46fbf7a5070c86c2ce4ea22344c1b826
-5fa213fb29e02fdc116c08608f3fa3d34f871de8 eca7af4272b6d101809cbaa421da111b9f73b454
-b1517c521c6a6c4cc077719bfc725f34db748f50 fae7f63d6043b6bb4088d92627ae1d6268bf3edd
-e99d04ef1d1154f5838eca9fe0d8dfaaa2b671b8 26057998b19c0e9d80a2b56c0d09f09b959ca8d2
-5ea4388d086cfbfc5b919cc2ed05d906f56c28d6 b546b0c8e3630bb6b25f24f62847bda0b629553c
-5d73dda94666d505a44e708821740786695f71f1 5103827dcc07158fd37f845e7888ec37b1b9e2c0
-78321292842564b2e3d2789c61e1c845e416599d 477935bc2622eb492d565931492005481896c1c9
-7f1f2554aaba1878902cbdba50e5b45fd5fe22ef f20ce3f3d061636138e3f9aaadd3b8f6d4cc30e4
-187efaed83b985c09b39e3f7b820ce873af62476 74933130553ad5873460911686f61cecccac7b8c
-d46093a9e3f7204341afa82e236d11d9ecf54609 da60b6224e433717b3ef798c0fd36c791f5305dc
-9b42a8db17f1261b25e7ade4b723df84926cda40 36dbefeee7169c5062886cd45f87215a7ec80867
-5d9ab62380681ff55de92fa180adff1b6ebc6560 f70d3f51e8a5a7ca3dd86bff5729d4674c7e182e
-7fc7f591a4d1cafadfd2220f4bcc06be68bca4d9 5c564be0b24e1020caf2e7f88845aad176358024
-1e2a07a82cabbfcbb2b6cc3b0688db4d675c07d8 20c915274c23ab5f8f37fc50d8f41fcf7d432b72
-bf3f563d5704689688c6340af623f943dcf2e99e 85f1d084f5c079eb951a80478a281512747a27be
-854ea0e13098c03d2a4ed9c0c7377b2a5bdedbb5 85f1d084f5c079eb951a80478a281512747a27be
-32de72a9e18e5a171990c242bdeb0e950ee87226 85f1d084f5c079eb951a80478a281512747a27be
-813bf987cf4380f2589d60aa1215cd36d4aaca3f 63fe9fa2dda52cc2c8dac8b4ae50bfa38710f8f6
-b7b4afc7ee14ee051ea102d00e093b4833ac9632 63fe9fa2dda52cc2c8dac8b4ae50bfa38710f8f6
-a8cad171bb25e81451c1b81d56f19e4b139d072b 0cc411437ae348dbea0de09b65863cce07a74d1c
-d23535702190b7ba72ae10b4f45d9a8f2779cb39 112b465002120dc30a83584d17e2193e26757526
-0543be22d695535af150875a99fe604e3d1bc3ae 27c30908744192fd37eab55232c65825ae8690ab
-95eb9678844f8274a00680ce0017e53d1611f85c 3ddac0abda067f78e2cfb1011cc9c3ff237c6c02
-43f903cf4d89e221c943388f7f4d1c3642831ce6 2074833206aec3a967658a49d6625ee7e33dbe16
-b4e7eb1849be49f038145f40a62e73cf193b7843 31d50ca25c26756eea2aad6a0dfc920d53d47a26
-b721f5cbd43eacd4852f895c6549406695638853 9b08e57412b5105cc916a2a5503d702a85babd0f
-e28969ec48b66a8d0e223b00ea672013ae019221 54b5e3a658b7cd21c70e518438b5b70b0d75cb94
-9bf9469f799adb422d249575f1491920e451920c a9faeb7231a23716337db70152af441a84136b7b
-1d0ecde25acff512e5705e0679fab279c4f580e2 8fd67815878d2bbf43353c9af02f5f8c4aad921d
-486c961e322031e05cf9f248acbfb0c96458eaf0 25d8352e8433a7afae8ece370b20a1c55478a22d
-73872fdc003944bd1188033d83f52ba5d6b3607b 59a510e851b5079d1cc682c55628a9ad7338500d
-78a43760524fbc7088716a92b71efb3bfb396a08 5dea5db6943a25582bf8015046f68e606c7d2ae1
-0505fdc03c2dc09cca615780dbee683a82e9589f e1c569b17c50d8f397f48d881cc0d92a12cbf940
-ce8f39dcd30fb5c3abca418887dee50f8c36f190 4609896f880614cda86fa56e68004d2ff437a042
-7d6bf8344d20c51602c90453f4b1413b7c67922a f1aa7231cabdcf8cba0e5125670693b499f1f4bb
-aad144cd0c1625283b403281e7547113309a112e 52c0b1daa3cb531196b3c7cd2693b2571c908319
-95fdbc08584e7b3b10add5637cdee304f8bb2aa5 aff0d24551d91d1ba64ad83e3496338ac1511877
-4413f501d4eb905b1d48e1423bcbdda09a957043 c7bd2046a8d7631af05ea8ed78228e9223e883dc
-db4f68bdc0c7220fbe218a02137d6d8309b335d5 dcf1a1fc3ef875d254224ccc48994cca1a797d9d
-260e52ab2668b03c58358005996eee151e3d2207 e0eaca50b29e6b8f69ea45049eb50d17ecdd7a69
-f51ea69dd942de5ab7d570438e4f9cedc214dc24 5e913f98a7991444ffe8ec1ca1b35f80e89bcde8
-fef1dbbaac464ab1c9c9bdf60d07970b84590511 1148d8e8d89a6421d31887506d7ab01d3ddae509
-42458468673c4b76c981e97ca1bac0ec1cbba35c a843573eae8f616a1355c8a05e992efc77880f6a
-c49be5f902d21c04d87c0e993aa20fe6b172918e 27044cbf6f948235905058ac939314e107311692
-5aeacfdaab20f56f106386331dff1f5a69b5cf2f 46c89c731d2ab9c5ec726edc360fee52952d9be2
-2c4fc641d298a857bfaf57089d2e211e67ab6218 cbbae43c12de4b2f2d626a68cb1df055e3ef1444
-2ea5dc26d4795343b7b4b917116c399a885e69ea baf62fc18710d39c2d2ea60bbd81f87baa8ac48b
-18ea0e1270b21a14f4c856ceed873ac61c60c819 4a1756fc1b242776fbd93410e62723233d083576
-d35ab1fbb7b852cd5d87336b8b43c81cb5ea608b a4cda68bd421b43a4db66102c7378dfd50bd79cd
-bc2fcd9df656aa80ee10ef0723b23a7e0c8e7e7c ffb3b6fb99e507277439e1b71bc86e11f6ec2548
-81fc7fe78ca68114969cc2bdef7ab069d50f8dd7 8070b8e6062752cd269735771f6bb02dc2be7dc9
-8531c214075c53831549ab5f5544ca7693a4c409 a3cd3bc682df337b1a93b8a8b699f1509ab12345
-61a8553c472b2a9ae2b0bcc9231eb12bbae7683d 6d3fc4bee5110098c161361aa278ab9d06c11cfd
-e922b0b14b4045f2c1514dcea5663b5cdf79eb75 2f59f1b533d30d2da21c679ebefa4d12e2185d69
-b49b04754202e0b102ac74a77541c8141ef5addb 7da84f992846a23b9a74fc890ecec4fc90e677f1
-1d68de98161180ce104b569b5963356208f61d89 870ae501808ee5a103b0d7b5619d93f573b36b40
-71010a81e74b75325f7ba9c6ec4096ea1e0315e2 27044cbf6f948235905058ac939314e107311692
-1d075999e56b1ca404511b1c18584e33578198e9 870ae501808ee5a103b0d7b5619d93f573b36b40
-89d1c38a086bd7738a67f8e830e131b371b9c3fa cde4bce94b930f714b91d8b49eaba929ef425f0e
-c56cb38b67019cf07ce86e3ad3b6f21f7334eb28 1ff2d5981d52ce4802f8afc1c1c56bcf12d3aa43
-86b0333a1e307afdd3dffd5767193e771b762cda 7cdafa71fddc80f0992eeef7c76633945bf26c18
-838f2fe398ee1a1c2324bf661f08425245b2742a 7cdafa71fddc80f0992eeef7c76633945bf26c18
-f2860e5be71a2b5a52d99705af42d426f8f9b6ed 7cdafa71fddc80f0992eeef7c76633945bf26c18
-2fd380841af62109e969c38b848ef2e884b930ef 4c9a398c6bc4cc6413866781cf75ac856451f623
-2de7370d77f122534bc718635cd9909f45d544c0 05d11a400bff0faf66b9994cad22e7dd6059954f
-de5854e027e1bdc74a172463f0915b5cef02b810 05d11a400bff0faf66b9994cad22e7dd6059954f
-ad0f63f4775aa8215ad099024a311c3cace913a2 6bf1ac6c9633346d6c3672c6649d125fa94386ec
-1a6a881c6cb7958f4658aae1d7e5a34f702c9c1f 89d31c3924bd5462b270a5ec7aa69dcd5bd60843
-e93148b73736371e6f707461f4f7ab4afeb6f677 05d11a400bff0faf66b9994cad22e7dd6059954f
-814b0db1e746de0d149d182ea9ba2e7edc8c115a f82a35e6cb5a2bb4419f85db16c1b7d2c21b443e
-53c474e3d1dc8422f8c32d42b07ebed3ddf6a7d5 f82a35e6cb5a2bb4419f85db16c1b7d2c21b443e
-576e4e6d0bbdb7e181598458cfe6e192bef06752 63312ea366ea51db78c113bc7b74876ec83960af
-90db53ad9020ba5a5677159da284a7a1d9266f6b 63312ea366ea51db78c113bc7b74876ec83960af
-65db2b4bb8bed4f555f57c7bbb879e13834c43f3 63312ea366ea51db78c113bc7b74876ec83960af
-e6799d2283985d31871c30d03873d36204f926c8 ebb8309154a6434b1b17ceea59c29b177d2f70a9
-a3e2a5eb194e8e4facc13ad0972b4ab6c7fdff74 ebb8309154a6434b1b17ceea59c29b177d2f70a9
-7783cb5ae03bfc452c271f2696c3f34b7fea3015 a70c2ae054014bd1398c3559d83533fd170ab9e3
-58be7f8b0d2409d41affbc3acb0349f140be7afd ce673e1e48a5476ffa2a74962e71107add770648
-559c45ea909fda637783a37bea584bc70dedf096 ce673e1e48a5476ffa2a74962e71107add770648
-8b3e654b3bd47f6d807d71156754cf1e32bc510c ce673e1e48a5476ffa2a74962e71107add770648
-df21f159965b73dd3a91088f460297aa942f49d9 848e5fceb62eb72c9e3458edf8906ff45fd8ddd6
-3ca9672776deac9ef1efe82ad417520202b00faa 170b60c22f15ce3fe245e0645bdaf1b37340188d
-7ce5dfd93e1b75769ae764cdf1028ac2171b6b61 b8f77e88a9408cbae14572d8f712310b59aecde5
-00c44a3f2fb6ed3266dfcf3337335c5efe19dda9 d671c8d5daa2cd0ded7b6a4bfee02e47f79514e2
-63c98e8c37fa36bd8c4f3b718f6272610fcb41b5 59dd1a217ee7f416650a1d982e90f1904dd4b5e5
-7d44e3d8be963f8289365639a59bd704511d9113 09b2c836f7bc51a79ca002fc18d67c9c9561f8bd
-0ee3aa1f9f277cfc2b01c4f7d2ed79d195faeffc 9f8d1be260f4e2b36b723e341ee2d6f0b448cb19
-0f90b51515e87806484b44667ccfd051601f7dbb ea0b6fdf769184d74e37e47e2fe1b3855cabe582
-2771f839e68700722a1084282d8673191a61c68b 6afda4bacae641a1fd261d0ff1ff2cda81ee448a
-d671f40ebd76d48f63146aa48b4a6cb1eef1c7eb 66f4d1710c1604ac04a58fbdbe49e90da6c57071
-baf28259ae07e66988c1ef596861a88ccac48568 1921c806d5a2ceb8d0101619b9fe1c89a0863e24
-179f13f5e5e9d039eb3c23a02555d14b8291a2ea 85eceedd443d19371ad261f3c92a1e80f1bbfb1e
-8b9ee49da0185a6ff99a1140d57447104e31cc51 ebd1d2a6667c51c9cc1e6ec74a14b7bbab09db22
-ea5937cf6cf30fd659690f85e3d43bc5f69a6025 ecd1f0d563c2629ade288a0541a5209ff76c2db7
-38ff64d11ca61b5b1af388445bdada1a9f6363cc 6bc650461583399b6c8b290970a5854aabf6f807
-0f8bb994ce853a7a23cf365ee31d5cf22b654631 64cf0d991cb0d88934c62dfda22dff833edc2cf8
-1a40e8da36cbd1003c0f4d2f91b0bf4ec4b045c9 d03331fd0c2ecab301615e0950fbd056f92af320
-58b437d2e0a67bdd71f0382f0d4f108476993d1e bf09fd886954fd62e2769cc805f8868cb33287a2
-5734e5133cb8f44caef2cc0fd41caf71329048ff 03b8d336362410e899ca7dc0a803d24e623644a0
-a131915d831dd935c09efe71f8fcda408e4d5758 48adc5623b04f10763708cbebb1a2ec8229b4d48
-9f5c52fa1cf107e9ce147664bb556977092def37 169d06e820ee655b05804a63213a8559c81a2c79
-acee9dd9763543b89a28a6c4efa2378db21aa792 c53cfdf37acc914d586dd6f0d8194ca903f0a238
-987f0cc79ab64d3499b4f7b43edfaf17c5d56cae 868113e7c6f45aa3114332e61e0e1dcb89ff2b14
-b0a646c20bec6f1bde943788c69fec63080e708b 868113e7c6f45aa3114332e61e0e1dcb89ff2b14
-5a11da8615f25eef1a7d77593b1e64abe6e7afab c17ba28ce8fa74b38b10c029582ac9c71c28369b
-48e622028d458d80c0b9c8e3d9fc8789413f735c 81d878f319638bfba531462cf39fd39107028f41
-f445e1f32efb87b54ff2e02453cf986695810f73 0b55c1ca5917c0666173f52e54449e942df03c6d
-61eef62db394e244c51831d35d01a022981f9be6 1385a18ae6fe51861c336545c4c64aaaaa02f0d6
-73a8b9509400f212b67eac9f4a4dee2311278bd7 e79c45f78fcd931efd20050aee0690a91699d48f
-ed1f392af42d816a36be6f4e7b4414d0d78d9b3a 594b1f9f9e4e03bb3fd972734debc8a923f7665c
-489efa0a09c24a5e640fbc604ac28792185eb0b0 0672de87aa02dde1be7cc296fca1a0c02cdda67b
-79b54e9d78209163e517a382d1d1001525ff12ac a5302a34726878d2cd3027f46b502405061776f7
-121bb71ccf9958bd96a3b7c0e88652fad1945836 15f4491dcf04a76e9120ad4cdad052562e70d964
-b9b6be318c8cb751517a041ce16be17c86804be4 5231ffbba1a793e06c73c01bec34c8df5529b870
-3299bf793bbde6ce28b3b5a708252a9bc06e3b73 cf3345afe48a455566e3e8bed7c22ca434309922
-fc849ea6552afc2be2e6919d04a197694d699453 22c62714655a40db7981408079b257a8b207fd31
-a4d026cb4a34bac89681a0e61e73348283b959d2 d98054d4739027e6883dc738c9a3c59dbec65819
-1ded9a3c727f456ecec4b029e51074819dc0b8d3 fbb984f1641bfec4c1a6aa1b0e5f76b0be836e45
-8a766268daee1387c82b438f12a09b2db6ffeb06 68b4ff3ac7ef69d9abb1d0507a38fef93f8b3ad8
-c9febfc0247f2f3a2ead4e16a001ccfb3e187393 847d8ca32a51749853b93cf3297a9fa5f3685864
-c40a8a950ee45262ce86956fea7b34022959c35a 4b4d4714dae3fe91625e39f43278030850445c34
-f3a849a4dcce60122ca41d70ddb41e8e9b9e883e 2f49304cb2cdc3ef0707e5b5859c5f2bdfd1453c
-b5d7820fd5802d89777cc2b4724bb7a97d2a231c b27a4ac0c6715f849b914553c03dd1bd9ae8eb7e
-03ebe26ff97fa732e5fabc00eae722b844e5fa98 30e8db6c816580a440444c7c72d951207181161d
-b036ce1985d49b382d16e2d27952006542da70b3 ca8f696c2b78788e30c4cab19c270283824f871c
-de6984c1ed7189b444a38dab9d6f9b12024c6eff 6cd4c71047b5af295682be97abc92f3a1d721cdf
-4760becc693baab3421f7b981f688c9acad40b73 fc1b7f5c71956c7f031b41abb1578efbd2d00e21
-97654b5b63137aafe59bdaf7e4cde9e7963a441e 43214c614f8a77e91144be23abad5f70f2b0de40
-6b8015816d81dd5ec80c7a1d7347391a4dbbf4b4 d48855b68bb36158001583b707c74967ff54531b
-02b6ce15bb492597dbacc84b61ec71e41ebe38a5 b1ff3dd3bb6cd87f7096bc55102001b40f4e7647
-03f18a6989ece7df29f7733a9f69b9d2654d691d d88ae39041675f083062e1ffeb8f793f4c526f53
-b57bcbeb37fea64a4b32a533d3fc9767c2dc0499 3f935ce8ac660511fd61227ca4d4b4577122ff86
-59183223a9534ed235dc6e64421d45f8f181151c 40de3795c262d2723f7cd4459094cdf72aeb95df
-45eebd0cd41bd92048802b9d2887ebf00abf7695 eb48edf97235ac19de0ae8d2942e9bc3725f289c
-c99a105abd9f5ca4782ac59f142d8841f9ab4862 cd1e5e884a19c4c489e2694494557975f5eff830
-58c64aab25623b61a7c4b363f33cb57a4f090adf f6fa1b93a7b86034e63caa9c7ac9ca2374e16317
-b4e34e26630453adf37ee61e1dca732a0ee2daeb b8606f2aee22556eb25efd3bed320d107787ff94
-b8492615a935fe3084d00e87c5084668db7ca4ab 2bc54bfb3212c9d2ef7e04a93ca07123a27ad4e9
-130d1167af19ad8fb57e1512490354debbfb90d8 7c30787e21f2f98fdc80e3b9548a93eb9af8f676
-86d19e3bfbd9948b427fc2c07871d0aef0c2fc42 309d9c9ea0aee56611305f2e4cf1abaa6e64b185
-f13e4f04c175a0287147c0be7480de245a4090dd d6287a83c0db403921e3d1f15f51b263b46164d5
-c54d3c52c5a82e47b4f1ad85a19709fbe31b3def 666f09872b9f140ffc09c7dcddbc4339ffd1a906
-dd06a1042d34b9d375eb6d6273be4128d301db5b 4c704794bd9071c0776260a92f58d3073a1bfa42
-53dc23455ba57b5143ff2b83ade44da6822ad2fa d228050f95b816ef1bb3f6064e8cb9315fc6f924
-c13c4c18ddbb054ea2fc837a9ad085f7348b3cf0 1c2adb67eb5f86aadc839c12d2f361d68319bb11
-7e7ec0b60ace07b7bc5ef42e9cbfc6a2ca26fdb1 e9670cb6cf3517b8d189a8902567a42ebac1a3e1
-371d56b86088f6345d4af0ac8871b048b6fd290c 8b49a83903751019c1fa1a2c4c98748ee6a82fb7
-5412fbbe6162dc048f0e77268270f6fb9bb1568d 5ca05bba01390dc7c379b8503acb61ccf7684c36
-48ff6cda8d4d17e3a0ea046b43c49e404bd97c0a 8132f11b4f79799a149f84a43e091d610c411610
-62eb644e84ffb66490e3b0e88ae10c008baaf322 7eb3a04802ffce6345c26b0b744a6d23ad31ad67
-f562f45ce330dd20d161b9beadacf0632cd840a2 64f3256066eb2aea00f1eb03621a7d2a2a6d5d91
-4f52e2a61837180cf57e9d92711afe7205aee66e 4c89c95e181361d082d403e60fbc8d2fa1baf530
-7f63dac5c5eb8090bd084256ca172649664f3cf2 493d824b339bf427a454a6132d18d15670a0882a
-064ee89eb0dc22667543fe3fdd2cdf89b75fb914 b2ee1b66b1a7bad5b8cab49b7bb83c8fe4fcf1b2
-9b87a91760498061bd44743df3dd8ac4910b9112 00f7282043aa26cd118c944b38be6757f507efea
-4fd392695b053ec1dff575fe25f6b2eab6383e69 45c3ef30265d1072b70c985042f8f6aefcba3fe2
-48068a8557db6a1b4b8b91cae198fa8794cd18b4 8c3e2a9000dc5fad9221ace9c879c4a8e75f1203
-d6c98bf370f5bdae64b1ddf5d8247e0babe7aa13 26b1327fba2e1312c19ac2dbaf8a4d6aa77fe9f4
-71ea7f19573bc7c3f5e192ed6633f2b24d685907 dbea9cb0f167e40264acfbe47433ff8179730384
-a0f551a099762f0ade1fce919f6acb467e2ac4f4 82f67918ce3e0dda83175f1ca5f6d9d147ce393d
-49e628c3a0c5e489cdf58a6fd819d28174a24d54 a1d1e3416bbd99e47601537ac629008a0b431f03
-1f1f3793da608f705367a596c3448cd8abb02004 a1d1e3416bbd99e47601537ac629008a0b431f03
-aa4e1671c45075110d56c052761b898f7ccf9cdf a1d1e3416bbd99e47601537ac629008a0b431f03
-9354280716a37853c6199839f572b3b8be02d88f 1fefb91f2760475d9f9580c705fd2e607b2f6333
-57b7b966de27f6fc67ae1500591b99d0d5fe9a9f 251365a1e245ccc545b042ec54781ae9fbe98e14
-0bde37f793afc07fcb0c6531355df7fc0da7e3de 5420db949c4a1f4c8ac9b37af80b023edb3e3373
-853d939c7ecd085ad30328b5c6704df611db4560 85648199d4ebc7d929df59c848258b8f5b5c0e19
-f4d7e8fedb5a2b08222c0012bdcd8db829ced3db 7d417e0e46fdd4bbb65b67ab9bd85a3dae047258
-190d67576797bca194852307eed37d934622face b8dd2068daecca315525311707a55f6af5a8731a
-ffb494926ce939777a6acbaa4dad0758c12d295d 4ba74917997257095cd6ca30501a9fc04e7e49ee
-6386959b2eb3590f6a28e6b2e0663f351ef61835 61af126d3e2de3a56f47719244332d6b8fe913a9
-40dac01c2f73f4cc1e1ba33717689ca1b08f366a e676e9c0d8a468a5f22861af0264231729310c8c
-74134c552a9b54c32499aaa03fab0d95cb1832b3 e676e9c0d8a468a5f22861af0264231729310c8c
-050509f85634a55a96ebc12c46c29b6f9c5ad5d4 822ec8baafdf405abe49248d29fcb3dc25ca31cd
-1789731b0deeef6d4d77e0d0332c2cf8677234de b84ff78b2406080b43b59a84224e53fcd769ff8c
-100770d114bfbad20cb87bcc58486a2ed018f496 2a33bd90953fcf08e5deb8784d8797bc343631bc
-745e57c8b50f5e6dee36b97644d8e239e48074c9 3c3897cc470460dd80232016666cb94e7f9f7a7c
-4a289625ba0eb2f79c39d8702b6411ef298b2b11 e676e9c0d8a468a5f22861af0264231729310c8c
-b223e9e63b45073131b4eed1d0c8571c0fea8ef5 e676e9c0d8a468a5f22861af0264231729310c8c
-15cb04b04b22ff3a8c3aeeda8e4cf11f095f527e 3c3897cc470460dd80232016666cb94e7f9f7a7c
-1c9ab2b0e470ff0508ec387b283014991226f4a4 6fa4b4ea0698faeb5aeb52abc2ed7b118fa901cc
-c1b09dbe7c7b4cd8c9100a62c5fe09771cc2a7a9 30ca7ad474f8c4e4a3a3b48a20855cba9ba80851
-4608af723b0d75da66d593e116a4441567d0e98b 2c5a20ef04276fa0075b5832e1fdce6daa2377fe
-ce62e06ab7094737a1e10c79768ad4224d0253e7 dd99555b2c73b1d2b2f79638bd27848e076f324e
-ee8704fe4d3685a1f55d38ef06d4e92599367996 c438cca779e5af6ced1d7e1869e414c01e852640
-9a254036fc30708582afd14c818293d5cb7c1e62 62ccf4ff96ffd50aaa7a2d1b07a105911eb13d7c
-0ce8062a0fde55c97095d8ffa3dab6cdeb6be58e e9b191b35865fa109787d8044c960c69b53c57c4
-75377efb16a45492fcfd75f102d549b77b75a279 9a5e12e414dc09c206af023aa03f9eb38d67c72d
-d191de82ea7ee9ffc479376a4497f3ee62694804 6fa4b4ea0698faeb5aeb52abc2ed7b118fa901cc
-30444252cfc830624de6ac280d03b8375108bf0b 82a70329e5d53719bf19b53729a91f6a6f34abb1
-b818bf8253a3bc00aa1af34fb337234cb6023d71 f9698dab96802507bf8c2524ae1fe3b3c598e926
-9a978439f38c53302d2233c5791d441bca50d47e 7218aaf06ae012f0bf4fef52de47c2b0e0a01906
-6ff6d850e2d00f42ac81d7474558b74a9076d71a 87c7fe69b9b41e00079386c4fcfacdb9aa3e711a
-6dad0110b937ae095fda50d671b8087b60d2f31c a01574afe2fd4fca5af97f0a4dde5b48a43510e4
-4c42cc17d17a9f77fe89ca90f1f08e83b4b2cafa eb8ba9e6a3f35585245de561a7ee3ed0fd05c79f
-a1577de40a4ec78b2bb7633136cf725c80f1e8ef 9feb1277be7decda67834607ad384fd742fd47c1
-89325ba763e34577c2ec1dd97d0d49059f60214e e00dbb8f1c2a86a8ef1c73ae1e642d6f4850102b
-3b927fbc250edade18b5e613ea964b7ba5b19bfd 3a638e964dfb198d972afe87954b1094fdb71491
-0f5a15c10952dce5ccfaa1b8e8a0505500b6ba6b c0b8f84bac413a2953d062e507a6f396ad6f9143
-ed56a338d5a4fde3fc577754367f99e4e0b90575 b24b6a66807091143435d30d2aab624b36e900bf
-09eabcea531bdaedfdf3d1932a0bdeaf8c67c99f 30ca7ad474f8c4e4a3a3b48a20855cba9ba80851
-ac1e6791d031b9d3effab15346511239d355a2ed b1b0f9c3defb81c622c179de5032f33c092d81d7
-5768356d83b7edcc5e7cfcbda73bedb5569ced78 e6ac5b2be9f40c30cf65b21913f059f3126650bd
-13c38cdd55ec55e20fbae7374f6b484afb5b5a0a e6ac5b2be9f40c30cf65b21913f059f3126650bd
-b4c7573e77d7fc80858225ec35714a89bfc583e2 3d28d569feca6efd29a4537aca9b3fcf5b6fbe0d
-45e9b23159deffaa1fd107b9132cc20433d0628f 7ca0087d013a8a8932c5c4c42c18879cf8f2e7a7
-71c23db527c5cb3e28e8645b3417e33ed47091cf a5a903e1a7f06daef7694d5720bbc4b6ced8ae23
-4b21d5257999fc1b42a641cd6f4124f613b88f58 946e037186d0879a990fe57d4d9de94c3825507c
-8383874d18d6af5f5f2b7151a5b59ab77df9a8a0 cf7ac483bcc3dce15e8f27ccb9b0166baef73867
-bde0d0d0ff43987a565979cce829b4327039b23b aef1385dae4ca242241803ec65974fcd618dacac
-13220f1ee2497be9991019aba3b195b28fd1c7a2 65f7fc398a2c2ab7f771b9c7aceafd4ad37a81c6
-fdd84d3b5162fc53f518600236b015531c6efcb8 65f7fc398a2c2ab7f771b9c7aceafd4ad37a81c6
-6e058280689d47de4f27eab59050f7933c748efb a734aa157043c1756cd16579d66af9da395f16ca
-ef0a2bcef309b74eca94f870a6d64eb3f96e5f16 ad48786b20fef48e4c2dec8ab43110f510b97096
-a45052f6bc8113bbdce76e153c4202675d3ba898 3001e3ec0048c4e270bcc4c5cee831d0cefc92ed
-59364a00d3cf3a16b51548b0351809068a2f1993 4f0c231de0ee7e08d7d711533a46500311f871ab
-6fc24adaafa50948b8dc6bd5a45d7a02bad9e421 82d0315912fab53c282deb30a2b57fee74a2f938
-8c7f3c4d6e7ca43a93eb8ebcbab748fbf3998a7f 5698256623914b2135f43e6b7c5e292cd5043144
-e8fe444303180a25e078d03f8b6f7bc9a4a85caf 617385d4a40b436713fc4dac415e573e3f398d5f
-7e8909173bdf5d771d2befa86bc77495a1f5555c 63e326bc704a95ca31c64009e5ffd9aa82a17983
-ebbd1f1096cf72dc7e9286e75acfc5cab919ea01 c64a0d0cbe7d9ec815cdddc2a09d31b9b1205ce3
-0e17773b02f3270e0e24cdab2dc6309ce1b1a341 c6e46bc351786487bcac89db25862042c033f858
-7b40331d93db3f26a8e51a9bf48e323fa2c66759 fc6ae985fd4a3d2f493f220156844463d745a45c
-554ffee22590308decf30dff3d03f77347cc4b4c 726717d4e0e9e5856cd665de9fbdc1938b2e2a42
-1288ff2a2f5fd45b0c143b4a1da4521b5ea927a3 effb4acfcfc7d5ffe6bdd5423f62141b17becffb
-97484ca3ab75103c48f825d4612e2f9fd5b13f7c f13f73ec8acfee941941a351bcb41483f3103045
-0656f2d66027abc72a20d458f856bef65e690eff ab221e0796aaa6d06a7f7b60ab6967ec61f62029
-7cb66e5cbc48aab976af0b4149fb0c301e14e16e e35967dd3099704762a35f11adfc4c2f69636c6d
-570851c5baa5722408f0f22307387b67137451e9 8bb9037db719ab85d495fcd6bae6f797be4e5001
-108d1ec557bbad8f645b8bcd0dd74b167e9ce03b a73266943ecde262de6d880fc6a83a23750ac069
-b508ba5e906ed0c9e2d8fae8ee77c47952490478 1e042b6feba90d2f8e164509a164eeb583397715
-585d7ca1db8430205141ec0c4d6f9a71355fda85 d30e35caaef8a855ab87c6fde64bb64630d38d14
-7a60ae6ddc17c62064796bd74da40bc46bcb635d 842fd1f9a1df01ef2d1800d51c518aab19e4d69e
-90a849ae639b9494a5488af7114cd92a7e87e9d9 72c9324b6507c9536a45e25f3d5e8bdf0d73118a
-21319b33974dbcb1c3ce736692bd3a3afcd8bec0 c293a028aeed8ad3bfc277ce22f826fdecc6f970
-39d330a6b7842da5dbdf0ab21d72e20b187f9162 cef21e281f668335ff3b1f9bfa023079d0af4504
-bf898481827b80c3bb43b3779443ae01b860fae1 c304f458232cfdd0a975359c0920ff3d9a439c91
-7314bfd2a5342cff3305138872b266c1a9061ad2 97a4c29fca44c700ba43a6e44c4226098b3059bd
-e246935cf89bb5c74caf8558f71344231b71c4e5 16ba32699b2057d8f34ca1179466bd40ebabf885
-54f51aca12b5ce513f1e94f118671d9d9d97cdc6 78339118001c7c688d8d106aa4adcbf4589c7bbb
-72c956aa9a3309442eff12eb25e1117265f1eda7 be9c8b02b0249876ea94ca7b446c271b15d99433
-d6d853fa935e371aeeefde4cf70ff60252e1910d 7549c844f6be5da0647094862784383e91172046
-cfb83488bae261f3ed3d03acb97b9836a5a8af03 8c727b1d7585c86237a24fc7d9253911a42b2556
-b7124738608666d45b03150bd1eb7b69c21fd20c 8385c68f9889a61a27cf0c55a4315441ae616bc8
-944d878e09cb7fd6497a720d7ab34fadfac4628f 00cb5784f48b5ace3cad81bc114f2a55b253f220
-b8d63aa36d09bca5f3ea7f572989dedcbddea2dc a59a4683ea3fe28e7fdb1fe5a7dffb706bc180ff
-ca116f988c14f23d57135e1ff53d35e9e805710c 7f7fb8301459e89b5b5c14df515e68fad10ad6ab
-aab2e9eae403e9c57f2ffd27908dcdbe0902c7f2 df6c2c6516a44f83b117995576b59f106765319c
-9b8b867d6b6213dae41317833d8b1d7295b7b599 15ec79af804effe826dd1192c3dbe411389b55e4
-6efedeb2b79a95ae561cf6caaf390b24ef03f723 00e58668809c86fa56045a52ef35305b20463088
-32c01e38e98979c3399461be2908e4811062865c e92565208b57a2430cbe22752f5acb296cb954e1
-241ba20f5e05a94a86097a9ff92cfaa148c45f61 5c5bfcebc734f7015fa59b15ba258560b7ab16a2
-c76888b41806b03fd26f09cf1691a4ee379404b7 90b4c0f6d7bbccbfb824dccd9bce1b27838cf55f
-16b6c04d2b2f4ecbcd99573e1664c82d1024450f 12768db59e9f2a991237d460f6cb8e5d260df2fd
-49c4437fb85d6bb2077309680e5b56fd5b213de9 63779c20ac093636a9ede1f087b90b808c963ce1
-43cee192bca48b0d2adf9dc95eb14d69de21b50c 109f684856e2cf95ec51529c947271aebc397a20
-3367ea6260c1bfe16acfa50dd9f18df262ae4b73 28b276c978928920df0eb4aaf62beef5b15309e2
-f5aee9378994d21a21ec5e208f7acc8dd066e65b 5dd8893400707d4144341d1494c08d6a29f82d25
-ea2db9ce7998fdb611e294736a4560353d54f293 3a4b28a9c5d0d73a9d1d39accb0c2aea11893107
-6318273b51587414d609ef7c253f40503ac372c2 91fec93a94ab9066c8d0dc4e5e19c2207c1a9ba8
-b47230394fcffbf66fa72994ef7a731244bba9e8 1de8d6b49f071b72a105eb0e430cbf11349aa269
-f75068a2e663de45c057e6c70a6dcae039df8524 80ec47697a513099124fabf6914e5087074363be
-7aedb468245012425451ee789381961004510bba 44cf89678cece1dd56ec9c16b73364faceca5f04
-2b5be4a8dd1131a2833b01d2b043b30383da8a23 805761c26e8db34e7dfe07a9a30bf478960ee5a6
-08bf6e131ffd71704ee46d3e3a85d8a035411708 3b550f25aa807f22001a8be77b3ea28a4b068a16
-b2605e29d4bb7b288c1b70559b63fd4955d487ea ca244f754ee8200d0bcb3ac80993df94fa75a06f
-d26bcf72db430e4628732893c174452f75e11e44 0171ecccbe2790d0fcf9d04f45c322fb1e1ba8bf
-9f40bcd7aa3545ee6d9ab6930f2bd88a302e6f80 d1fd3c5c11cd04ad7daed25e5713e8d137111527
-8e11741b3cc8a6cd16872df53dd837d263e18676 7ab19fd1910509c204a34f97f11c719c90f81b5f
-780ad90f214081144079fec06b7ed3dc5128ab09 5d86f3e6f2cf08838eab0a0cc50eabbc0d1379a7
-59d354d5b2c4e65b7d3fe3ee679bb785a860cb81 ee4bb4b367a84d72b65f6483f0d7e6e96d26d6e7
-d405e07185d82dd9196b1982408deab7f01d59ac 39cb8ede5d02e56b56f2e5d4aabdd82dc99226f5
-bebc7b879647f911efa2ee9406861c3763bcc954 add10da5beb1d82639667a04707d647b2090eadc
-661d6b43262f40f846cb29f96f91f9da57476867 5d149d5fba299cb864d57a6de93d4e47e466a65b
-0233f432f252b0ae133e35446203774ed99e0a9c ef97b0b77bb36162389692af3e4aedb3af9a7c0e
-0fbeebb0c4b6e0b8b5575a71abe9e92870b184f7 be3dddb8791ab40fe01e5c2e6a57a753c67f220f
-aa9040f66cbf6afbc7f7f6502e292ea144f5123d bfc56c6bc238e2a09f2cc909ec16ec4e36489f9f
-8022728ba2541d6f266dda3f3eea719798d81103 da4f5d40ec75a6af178f99e17c586ba675baae24
-5863e94910d10a216d0fe79035271f44e154ddeb cd2257bd4e3ddacf3cf167274c649a012d066617
-56d47210822348a2082e95e20a46fec6b8e310b9 f61149c8723298a594cc00ed763da14225ea5069
-76ac8b7834d2deb2283d2cd44133d2ad6718d789 65ce89e3579a9c48c824ac599b21de00e94e34e6
-58006024c61f7542003bdf0e1fe57af171930f50 5781dbf9ccce28d7538c12c8c8240052fecfd385
-940bf6f180c59ad88cdb2230b9c4ca9b9383d4c6 76fadcef5041905487002b10d4a1d5808addb587
-c68bee075fe20a49efe64f5c68bc67b492e3f2b3 bd4a26ff2424ba0b50ee80950c4341c0467c49cc
-9fc7ee3f54627ccdf56d47fba58140cdd94261b1 c5c043bec4f8f1e66b46ce4e74d7314caf47f51b
-ab9bd8fd091a30f65fe0c75fbd3c8ca8066b43d3 aefa59500fe66b79eff44091e59eb24b42a642ac
-38fc534d57658ed00e6138d459770a99c77eb099 c08e5a162e6b0d0ca229b31dcb2dd71861ec4eed
-27bc9af979d7238aea683bb656228737a6b6017c b84ef9a63e20a1dfa487dbe02449e32fbf39765c
-286bb8d6d8b301f03707bdcd4ca626ff1f5c93f8 67346a0b8169e629dec2aa1edb36df6f8990b680
-7ef5cc905747e21391d3772428fcf03207ddba37 3a6a013dce251e58376dfdd6c81781fcbb8a1f97
-33e2e9a97aa254f73a4c036a948ad7e7720ddd18 4ceeb838fbcc58e9551160952dc5951e5acb4588
-271e03a464bca8fbe13aba36963876b503d476e4 e3496d22a4fe25c0186aeaaf9c76f0605f6d0aed
-1411a48aef025eb212039bf7de330c102d82ec43 f93c71e3c5d3bcd04b593c4a99e2faa41d6ee86c
-3ab3cd44a3091f87c26bd33da9fe00937a5d360f 00cb5784f48b5ace3cad81bc114f2a55b253f220
-d6b59485ec24b0dcc905e92a7ef67807338eb0e7 00cb5784f48b5ace3cad81bc114f2a55b253f220
-5fc233811e393cd72bc06e81c64630b5d7907390 00cb5784f48b5ace3cad81bc114f2a55b253f220
-9f8d4ea0a32109adead56cee19b105a9a46842dd 00cb5784f48b5ace3cad81bc114f2a55b253f220
-0febc2d1e5a4e8ce08b7810ddef7d85486d5712d 00cb5784f48b5ace3cad81bc114f2a55b253f220
-58f370d1470992a400911b08b5411e5ca1937ede 00cb5784f48b5ace3cad81bc114f2a55b253f220
-23290932fd94e283fed961e8de5c48995c7112fb 67346a0b8169e629dec2aa1edb36df6f8990b680
-f34ac2a90c88c5d949dfc77dfc6aa02a24626525 f93c71e3c5d3bcd04b593c4a99e2faa41d6ee86c
-bb66cb8a076ac568b304055e22685e4b28f6bb2c acf2bddfb43aa61e056217113df35c7efd7faf32
-26054cd6d44c72d4367078d82da03e13846306c6 acf2bddfb43aa61e056217113df35c7efd7faf32
-46c9d9fc64602c0ca50cabf175573c189ee660bc aa6106b2cea442330750e3804a9ad1840651d334
-a9a597f97d29642438c6448a487274844b9a3642 742248d2b60c970973ab97e5e2e598b3d9092833
-8e324272f4c8aa2b20aa3bafa82d96fc6d2dee2a 94a53ed44cc84a520c089d62b0063f187bbf1c32
-396ab40ea8d1e295bba0159e7c54da63af4cd0e7 401b1186df94c56d4a08b66c418ab835c7f3f3e3
-de9229688b70e45c3de1abb9f63cce28d25f4903 4fd91952fa76fba87b5b499ae2bec08e2cc905c5
-aa9e3294b0d6abac5f15c50e6cfb059d187bcc87 b43a459d62dd0eac70c4bf7460c2e0b11cedb24e
-01b312775c5d09ab4bb30e3728d9ca6bbe00f1f0 b7fb01584330f77607aaff5a7b2f7832918477bb
-ceaaece10fa241322d56e41a70fd8b85c463e8bb a04fd109100fa96e301160a81051bef4f0d8a214
-23667cf59547816080aa9c61ccc9c73f2f783d5b 1baf5a6043f4925b4668b4df7929faa85269140a
-bcc3c70710415bfa20d21f1f2f721247982b9d28 a3fef01a7e32407ec852ad2cc6615860f7b2ebee
-610c7dba2d06a7028dd25e6540efc50a2a3e5152 6dd55be0ee47e59e3209709b8b65e5d0a66134e3
-fd27564b8a8773ac7f046630e79c95e3353aaabb c4d4c08a71af30fc7c852b2e882fe5d921508b18
-96febeff91ff69cfe4790da8d2ff90546d513bfc 847ccd5ffd117cbc6ce74f2e8de3fa2cab43fe32
-2d08704436c4bce49bd74853c29db704f432c362 53d99be42a066b315ddcdf34bcacecec8dc3db03
-46048e927491f4dd1f12b064a07c446cf062f0ca 04ebb0edbd763a44a40501d96bd59bb857e6c88d
-f37f952c44a086bf77b6daa253f8ffd450d5f9d3 8e7c1c7cf50918e98466fe699bf52618e1fd500d
-175e2491f5083491463249a9936186b585f514ac 577e40082479f03f060da947a05c4d9de4c1e215
-2a77e59cab25d7113cafa62e603f81849ff5d83d c90bf01aac0ed29f48f3678715bce9c3728abdb8
-6f63070f56a04bd8074e62ec5b8c6478a6a0049b 8121ac4eceaefbfc7a32ddee8693fd815e82e4b2
-4a8629ab8ebafe0fecd1664f81556733b4f0c13e dd3257fb34dd44c31349220fbd7a9b2e118d9a52
-66ba16c82d05456f7e37dfb8fcf00c33e4082554 cf9069c0e392837dd0becc920adddbf317b555aa
-5ec53ba1065ef5e30a433d44013ddedac88c3bea 8147d4b9d7d0b44278af76a039e5c2ffce96df8c
-7ae4d57d24acdbdec9be054ba1887a02c1a75a4b 60a88769de3e3ded0a15f8e6779621f6088ee225
-d3a64aa710a83aa23e79b324f693d9994e19cb4b b08fe6ca7a3c85b8829e8113527a50292ba20a2d
-4c7c8d015d7e75d619ca7aad8c47538d96598190 b3e35db34232918be4d4f9962e01ac8402f75f2b
-228319d2c9125c5f3e88ea4422c6d6af151abdbd 6c5f2f7f3015c54197b9ec1200c6fadfc80b9cfd
-0860da6a26464ca21b4d27ad51ffa1cb27d94924 7e0a30f4d580f40584143274aca8120178e62b2f
-31446d29dc6d0c4b73ef806f5646a35e8ccfb748 d04269ea50b3179e8d5965db75f7a91499df19d8
-e2a197e38ff7509ca056b4312499c20f85ebddeb 17f218a8de25ffd2f14ff02b90c3a8ffab752f92
-ff7160ccc1e5f91d144801327bfb2ea29a044c89 cdb873b6bb5a439d9ac65b536431c86c81f47532
-e6c5f3b23be1ace8fd81b8397ddddf52d066fa71 6d8cfaad354955608807784cd9b813e0923a57b4
-d50a053b72f3249a3da3d7aee66db831b2fed4cb c547eb837dc8f3994a20f35c50e8940f6e7e0b07
-d4b14117ae9fd2a8b9e57977ab9954654c74315f e3fd3dfd1e325d59bf30e1335f9f57de18b69af3
-10064a9e44c2a46b6977a63a496038f6cb0e8161 5b464e176e3dbce519947fd444320f82f8e3c8e1
-8a7518e60d141375572456080bc7290eeb9aaf27 7e0a30f4d580f40584143274aca8120178e62b2f
-0af9371c12b2daedc2c063e945e69ba19c1a272e caad82c1f67c68cdaaa8e754a1089437d36b2377
-f7e0a15c09b74e91618b15fb0d24db4e396ce997 caad82c1f67c68cdaaa8e754a1089437d36b2377
-ed89e4b7d7f4a61d7a09a384044728f96f85837f 9d675cc19bd542ecd02222a15569e7da4a21acf8
-3f3a5720847423b84f92b1fc8e007b20bdb5cb4d c4fc784549c803899a5b890d553c5dc23ade3077
-b680b46f4d97cc03c8cab36461fff0a7a101b420 04d643585725f4e323efaee1e5ed3ff861903845
-e3700727fbb796ed553b26ebd473893d5d645bc4 91706c19a5586c4154f16a216fc629a60fb32084
-2cd09ec40210b43ed25d9825d81cb16614b8c6c8 04d643585725f4e323efaee1e5ed3ff861903845
-41167d810a36650bf7a8296e950f34e03adf0ef2 5c0864518bd2fa96a17707a8e254dcbb8aed6433
-c4df021895143bbc440627cf8ced8738c761dd04 f4980142b939296f4bded44cd652b92660788e71
-df983489d7f34ecec752ded3a443f2e30246ddd2 a49dc3ba1d4ca37c78f12fc122fd4b27df6bf98b
-d1b53ac8b37002724011d6775a993e45c2e00e29 618acd345524756767eb60658f19ff51e9f67d41
-8456e072585474c3ac648b5bd83d37679145ced7 6da9984d48e94c465c218f4fe3b14f66b880678d
-6ee30549c6b32db4dbc067aa0891f5e736fd2af3 3d1ae16f76aa11889357091b5b506e15914b9639
-4b7a12da4bb97a36939bbee86e8f0c4269f6f325 19792cc6d2bce5298b9f15a1709605f453976a5c
-109a04c36799064be75b7fa081a00d56a1b5b00b 20e3a6b9835ee3fdd58f4bf1e170f42567d9563e
-d29f7328d1bfab9302d92aa69c285ef14a28c6b1 4385be14afbfc99d5f965b81c14189a7c7beedab
-db95557f2b9a90b81aed46edb1559eac18eed701 054022ae9ab6ae9095f9246940e6c6cea13f287e
-e9f2b7250f3d059afc6e1a14b6d73339a398a5a1 642a0a25431caf856cd36f58c80e773e31c98efd
-2660b6eb2574e4f4f42afcd4e7d4ea210b0a7712 fc4023051d147ac711b004c8af8cfbc56c1578cf
-f4eea4719597a99576fbec7b5d6a59de7ad243e0 01cf2ef81e2d327a78992b71f231b6dad5e89fc1
-39866e7ca2e15e40f172e7d133a604de1c584e58 154e9cb30ead980491c1c030cff5102e081766d3
-b2550229adf6207c466255b93523fec7fa76a817 52ca75ddb4ee26551bd4d5834d7961b5b5e7b19a
-a286b4a3a79d15edd37f18148f45d3dfa8c0b0be eb82f0b05e54dea3901abed166ffffde2b94a36c
-0ac6cc2fe300ba7ee11bb0f2af2b4da2cd905b90 315c526dbfc5593410d28cde229a434d4d8bf16b
-7d89e7dab9ddeb9675713a7319c35ac531c6134c 090229a79e11c9dab017bb565d9bb18c29fe7b16
-cafb9fce533ac95490ec536936d0f784f7a65acc 34a2a26af47558d6dbcfe2d4c73444e271525a7b
-7ee52a28f9ac7867f5c091402f6efba99c6ca048 5dd5466f32a551a1edac82ef54aa3947ea2644ab
-be449de79fc89cf8247455977dc8bbccbce477d4 aa3c7be52e657ad986f6307e60c1e6f029a3dcec
-1cff1a666fec2acdc97867b1a0473c5ea6da472d fc47b2c3194ff5f418fa7be4b4fe37370a88e14a
-3e44017309f19ee9d886695dc80a1835f786e772 eff688cd824aaf4062d822c86c017098133c9395
-9a7656ebcbcf08e88637fb35a5c7a3816789570b 2d6b9a216ed82f6b784c1b5365e2e9e45e30398c
-706235d41fc06ccc9feef64fec206a358cae1a9f da7bdcc4f33a137aab28b49395a80ceae2413f42
-1c461a5945c62825c7e737b60512d894952b547e c99643b8281502dc3c54fff6656e3f25221c4847
-c7bb3c372fcced1d78a55ff12ea9abaa215304d1 b26bd1cafda4be9b5074f5c23aeb45e89717b16d
-ea1259a1953d29391c4c42c4b3e955c8366ac049 6d5f3aeb32fb1a42a73ed79874655a1241369c22
-e690b271bfa9b705a2181af66e373619439c3dbf 3b39333134f4b6c30acfc761259ef8fbf1fcc142
-605e94afbd360d830f25b469121ab3ec2299d114 f76955a024b04508793135cb361928a62d60b854
-c3219e6fbd71f9c2ca708b4d4a558ebfa9518a5a 0eac1b26d157ea88497d2a6e63f4e18557f56193
-04d96e546186a673ae30465c55a92e0d677023ad c06d4e201a2291890e98d54210dc819d7e6dbb13
-8e0f356e2b1fb80a12ef28653f9696c4a558835d 5fa24ccf8492ca37b59eb1c6450a8734ac5b71fc
-eac5c27aa6d62e98c7cd5e03578da5e4c47c393c f38a4877b2a05b99e48c40a489ebb19076b67d14
-93031d7aee510fdceae69a4035c4434de36c5ca9 5174afc652edaa352f26c198aeebade8b83c0750
-67b78cfdb9d9aedb18f912f70216cddf6456216b c321c523e4b2febd5681291433819e9cbcad47a5
-cac8641808efd89eb8a49b25c99da33f109cf5fe 0d2b8f45df639b2624fd98115e1c0e06a6ea8728
-8af92013451b467ae5c861237dc20144398b37b3 ae21f3a8459b9271da5b2c63a08599b0bb1331b9
-fbd4d6f398155336e7e8336a5abb58e226aee908 75419182bb15b2ab645cf949c95d97590df26303
-a577d1cad9ff2b1d1c96058f7eb7b94ab66931fa 00da5c522cb7ea44a3ad19c8489bf2d34d419cb5
-f951fa0caf2ab20353c476bf7a86a7e41b70fce4 5d9880f2f2bd704d4e3b7488cf293b7b01423359
-bcc70630cb43b247f93c2b1b6d46baed33607e51 fdc0f1ac064041f6d607cc3f9bcd6eae6f8f0e87
-7ef5a2c38ef8fb14725ee229ae65f58eba5a62dc 939cb501ce9e23bcd72dc6d1c47276dc948e5020
-5e7ce89a4c9e21f77d247f14c0b589bec11b864e 4f1e1fc1d956f01a91a951ae5d83ee17ff9ab949
-a755de1ac19580afdf5e8545346e1ccaf8444d7b bfeecde3a6815479770ccae5284cfb43f9402fb8
-eee530d3c6ed8e87c5345e0538011a642960685b fcae12a4935ed42a9336e0501d4236402513ab7f
-aa40cc65d8d778fbea2a0ff0e5b4c4a94c539636 8f717e02c35d386d7291004b2fa2cc1ad31971f7
-183a92c058f8ca8f27931229dbc556d1dfc4c4f6 771ddcb35cba5157ce512d031e41a4522f79ac48
-9b4800c8de742b194ae05ca84cc96c992605c345 79601c328cfc466766e9197f664f0831eeca137d
-1a3a773d433af98199729203e693d7137753c041 6e25397d769a322e486195da14c7f6e5a26ea5a6
-57ddcc019dc7f85fef3e237c47cb56f8a5f713dc 4f95d5230c9663ea0032ededf65853789f847bef
-65c0e7f76d967645acc083c50bc86767b1ac6ec8 c5350f342519f195e0732d92da3a9796707ba4d0
-c378df5321bb54522d14d3faa49b6b36da674bb2 02c1b7f3a820a94acc0ff60a8d6a71754ffb6f37
-6ade2191ff6f1aaa465e11b2b55d06ac49f4ed4c a4433365a2484db071e79ba4ece8593992f8e9f8
-fe0048f8b93627ce56eb96e342ad31e862d4ed13 dd3a12a5d7fddc92adeee199e43210f025a3c4c5
-00b0c4ef66c0edb9fa2a1fc9da73f965c732e6ac 311847adde5e7ccc67513de8628995bec8e7cac2
-19f13b82b1b1735a6dd8e3b0039dbdf782b7b3e8 95ffc8869ad6163ad69390ed163a9f8f602fe2ab
-95c50d1e1ed470a7e6614e0560434f2f044b2741 eef8088ccd5cd68a99eb3c056c1efa34b4cf67a2
-f4361f70ac78274bb4c2c7ccd2a9e13073fe25fa 023fc99b7c23398333c82acbb2ee473ad2ddf297
-db5722bc0155d5a54bfae8fe315bb735cb16878e dcd773ab19c2ec05d731ecb36fd7ab182c6fbca8
-16f9699c0085a8636de5a5455f6b1adc734fc0b6 6f88da287d590fa3d0a8438d2672b75693a68955
-aeb6864eb1ea2ad751a8edc5df5e26e2ac9e8779 188dff95f42fc46c03ee0fc80222b9005821df37
-acce43d168c3a3725ea3672b643b29fcedff5269 a35dba9750454a7ed8a8da95684ec9bd58de8419
-8951c3bc9fd3028e2be36edf726c43a37202acbb 644696fa4b01454ae584888079c34f4491acec1e
-f7ce3bcadf0c80b761e7e525da94d3e0db89b3c8 75b36792f6a953e19d8f9dec3631c23ad2ac4818
-0504ec6f65dc5cffe5351d811f37fa8ccf2b798e 8946cb719e6e4b88c215ae660c6fe888a30f8ed9
-76c45f6689828d9a8ebb9e9c9b2f79da5825229d f9a4233c9be9a9d466ac53a905df72557c7c6149
-723e043cc45159c8748aa7a204d8308ed1f5dd25 3c83c8564ea88c0369b38e48ca33e1a9a91f3c1f
-3dbc064d85a6a7a0fca669e2a0b477046fd4b36d f280b97b513f875c142ebab550c660159014e822
-6075d04ff75eddf5f6ff662c377d4e487ee76028 0c5df356c568701ea959270875882bf249f8d2b9
-57c12b96d62b13a0f408ec47408c530e5c8f028a ff9aeea0b83f4bdda542da457e0b5a9950ae9805
-ca01b8616d14bb463d96caa038b2992a31730f47 c874614700e4146d58af44381e1337ead4123d37
-e0de6f28a8b66171eece17da58b2adb640cf8bfe 117e7790c0828aee8bc5981e96502c9a195706a8
-86b4894ed60e8a33180b7ced89740254132344a6 7fee5637bd950c554a9579f96f3562b1a844eedf
-0ae60ec009d629b2fbea7640bbe897c05c22b528 d527bc1ddfebb9adfde50ad676b5a3a5ed8608c6
-22d090da64df4be682bb039ec5b05541e168f4e1 f43efffefc97f93d3b81d0380dd758292774bed6
-7268b20bf19c9d8700a12f5f5846692b8d89c3ee 08a935ae4b5c4e3f2afe6e607048598c841e478a
-2b18f2d4c2f94b5e44d5dade17e6720e9e719c54 641b5eee651a8f5eddfa8000d26f4b4583d16600
-10f7ce48e8198e53bd180c768da0f3b9bd1421ee a1e1562cc87f5f9fdb06affb1a0b3be93f012969
-a601c8ddf5c1a8036585a97d62e956d5b4fbad49 cf71b17f759cd085afff92d2b013e05988d3b39d
-82e328967ef95d3ec87bbd691849cae9676df222 9867b057bc62ce3624ff1cf520e9eb2aa859a0e8
-a31660efdf891ac9df632a8727e815e81e2dd2fe 03eea64a47716ee494f2724b8bc72816843dc73e
-573747122a3d2386bdd7a6e0560e3eac1d62f2c6 3186e9bb3199a11c9e99b93783a780e7ef2095f0
-d3f96abd5c7691e0bb041879bd2d649a4a9631da 1982ec1706d99677c7f301673cb557921dc82792
-b581ff19adda002dc0c1085416576a3f8a1e4b8e f7899dcf8f5b69645cff5ae968b48ad30f62c566
-c8e020601d59f19a8ff0309cbbc2e1c519ff5752 46b4326af1a2cb1092f3bd60f7ba41760c761b7f
-41b0f9710b412ba4723bcda5eabda5590e91a4ff 4badff6a7d96e979a801417c43306cc0556242d8
-bdbb7292cd4a02d5bd482f8a48369da672c4ee2d 3bff35121ffd1625de4fbe46b5be100b778a8653
-84c7cb2c9eb62504712cb509a5aeb16e90880cbe 74ef8ca7500dfc17436aaca6ec40807311d03fc4
-c6b39664d4bb2cfda603b72e26b464d7ed004118 7855abc9078c3e4facbd2d12a84844dc0f60f8a0
-e471d9d7430f68e2a92e71710d44438b096e00a4 de7599b6e3635d173867876047d19486092dc9ff
-441a2eb4111f0fab7c37835c7549066200fb771d 9806d067a286617f9aaf9774309f0354736d0acf
-72f7ec87a410b2754e3a9a81c9a076cd99de26a5 b95cdf9c4dd8c59c93c02d8816681b139a30d679
-8a35c03a5357673f2f9322c3b7526407129bc3cb b4ff1bb1222911544f0ba06212ad1599c0867666
-559f7b8551078734ad5f9dcfe3ca1a0e5d37ded7 7a458cf8b48e49f3cbbefe6cc7e7f589d17d583f
-fc58fca1ae2a3767533e7a0b0ca06ade2a4bac49 52526de03e2e2290ff00f6b705a4a419d6f9e784
-04331a50a2849116be8834d43ef9c46abc6f98d8 6655cdfef1fe4fe075bd98147dff3adc03702fd0
-a967e8d2de4606245f8851ed75fd4fdd593d9809 4139680f9249b5c1ebed927d829e06f82e3431a1
-59f5ffa839c238544279e0e7d1d097f42356d543 c6f7ce9dd109d39ce54dda632f8413d74c2a3790
-b2914df9c7e115b71ab80faa3ea483666d18d0a1 34b27abee3576f4943df0a384eec4f2968ce836d
-3d081af920314d0277993114d51ccf0e5d2c1bd4 c1937ea655f7e8b6b1bdaf7c5bdaf67575c79607
-09265cc36b3d8e21f528f55b79ca0db499225485 a6a848b42b9588675db04fc66289cd4f1b22da9a
-a4b86d56734176e36aafadd4ab8e6fa5effcfab9 9927a4a9a8135028d0cae9e0ba56a206cd31b489
-20794328b483ec23184913cb2bc138910d996b17 1515b7e67faec4ccf707cfa1f107deb47c726601
-314925212c84d05770e7642c5758b807bebe0fb6 761bb43112979ed4c6a01099c7e2085bfdae2374
-aa31821f357ba49be141349c2e0a8e63f0804dcf 6fde9b05dab9e73ae0f1b5464e7bdb0fade92169
-132819269dfa134f57bc61e26050c15ecf74b723 42e6a2dfcb880c7a10e7d2ef1b92ee901a629d4b
-164729a6228b20a3e532869b9ec1552ad9a98c28 8142b5fece3467a0ff195d52dd899a11c30e9c27
-1276d5de90e17dce330546de2d9f3420433e4d57 34a3033b7378d45956f9db01c9eaf147e6c9e569
-b91249d59472e62bd1536e473f04f7cf1fb98051 125561ca5ed0b16c7e0d0117eb335e9d654c3a7c
-ca9f03839ebe56d431eeb4fab512337fb60b9c8d 5fb9a26e6173f07deba6d092a50d2beb387443db
-22640857ec5bae226108e7d6a786d0963496270e 2791bf6bc833a9c21cfb3b90fa84ef6d711f7d05
-eb9845c1d241f7c50a3f9e71bc669617d4f9460f 67a3d5ab723f7a370cb9a73a219cca8920f93247
-6bffe087b1d2795bb6a7053685c57328cf85cbcc 18926d8a03238b01fca5e4881579d0b118cd33eb
-b42ca7a81edcd3babb847271dc2be5fb666fe8fa da293b8298804bd1119c4e71af8742a7473eb8a0
-b6af677ec75ccea7500be90a43215fe334963a69 ccde7912294c63f7d6f4bdb2f2057392fe516f0e
-15d5d6cf6f4833817d1c92f347110d07ff13991e 2e88b856182c3639bc1f6c3113984d2a6e891c3f
-e5fcfb526b120fc4c55ed824b02ed32447fec8cd 6510a0b0d8d1590db94b51e100b0bd6a8bfb1646
-6c0d102c1ebc4fa4036432b14409b9797e0e964e ac5960e5e8c2651662ab2aa6da19a755052ffba3
-ffacc7a1457fe72f9c2ca445f2b04c5af2ddea96 ac5960e5e8c2651662ab2aa6da19a755052ffba3
-50be42ee18d65dee6078bab40addfb152480f3bc 3970b13892f6d70b69805f698d76e9c26e846781
-66bdf24605d42ab94b27eceb77b34f9f6cd9a48d a3d240346266abc88c2ddd4e3dc1daf380283289
-d7d2edc5c6be5bbed05cdeea516bf0db70ec615f 2fed74cebb55d5a59ea3593e367ab3e341d3504a
-d4be77e4b99adf624360022ccf071b3cc2b27910 591b85ff9f4c7a659e6d4af5aa24fac86d7165fe
-c22ba00a7a7e6d8c71303d79056f68ad61073b43 69ff8919a172ad3dad9f3b583f5272696a04d63e
-8a9d4d1da1a774901987d4625d2420d4c4f0f5be dcf0900cdbe0ea3e09b01d69647d925e502a1b8a
-10e25363bb38deb1f3bc5e6a05c72d3ebd74bdba 1075f225004658628440841f4c73acdd16583027
-1f8a9f1c3298b7f92f481c1b0e74bcf12a3218f8 d4279a5b01f16101d887ea61cffeaf035d4404e8
-a815b168c025d3294bdec99a874df2cb2f384bf2 60a292b082abbb8c225e751bcf0c286507df3217
-c8a652de750d35b1c347d81f9b7a7df3d02312e8 f29b531e62842ba293d4103c7dd0fc891b729acd
-318dcf2184c8c87c8f5ce61489f4daa105f8c0f0 f29b531e62842ba293d4103c7dd0fc891b729acd
-9a848a6867c0f0051df39870d436f6c44017d8ed b7fb6fb77868c792994d2bd46a19e6c8f23dda71
-ef1cc4cd9439194f8fa89bf948a06e09dba1d85b 03fcfaf231547609a09df9e484580069cbcb1de1
-513eb2da24ced48f01cc18c6607cf3805e96ae7d 4f0ce71f078ff4f9d1a621e98db482a08fefd339
-e1bb1e5350116194eb3e8ad3aa282d89e934a53e ae4d75b8d137c13fc984ea152a2f652dfd72ac9e
-461456737c5d1ea28886756b21064793079bdf17 8aecb243365d7935713c47800c116bf646d4968f
-2740673f95b056916f0380bc75eb7c387b19ac23 e4bcc1f3d381126cbcada52a757fcff7d707073d
-b70ca767a5e5720e907be3f5fe3cb3c1f27ddae3 45e199b2ad86eb89fc40d9025e3aece951412671
-286c9de8b179e5565c3fd97f1dd903bfbafde173 f7c3518e514963d33f58d985ae56baee1350e0b6
-7ec36c6eca63b764efe6007ac5bf245ba218bfda 932fae8758839e6a0a1957b0c3c35f0b72722f0c
-da4ef957c652ca89a424b9598928bd4182e8cf21 fd1ab1031e52fe6fc9b31ce46145597835a38044
-ad7d6a204e565f5b3e81f72c0582ddacd31b6180 a5759c8604fcdb3d4f4312c6fa32d18d48933f5f
-fc8317186e02841c25336192d063bcc97b3dcf0d c812fac0281f902c3141a0685efc665f2f71b8d0
-fa0d434d1a40c2fbe01e8450a8776b415ee58f03 d6aa54a244ea79b84ee3e78e1c2ee31933f00d6f
-e563cd4079d32be9a669993ae6b56d88a8a07388 9bb5d1df040f9469e3e0e88e82d4072251053a45
-57eb2dba664122e86f6cc4a8702d07a9a20245a0 c54df73168a630864802c76c00eb637dad9e4ec7
-004f522f56e5c48f9cc0429df8f0d07327e31e60 e5a161c7fb871b3932ad54fc3a18037c85453835
-d7b3b23e4a24c23622dfbe7f8651b043e48242f3 6d5c45700c5449737e730de553ae0d8585dfa780
-48e30bf63588ded1cac834a962c857ba79ae8ab1 49c8fa5624afa653407a3cfcccda984018c8bdde
-88a9f940c495389a47da175ea36817268dad5b26 17fc2908e9a1ef34a9f53a41a393caf5c3cac390
-1c72c2b28d796f8bc9ada2f6821d3986a179985c 7b67f4d3040f73ce2098184c7cf1f5b4ca2a7f5f
-ff10af1f721fa31a620ceca6379407e3334d1ecd 66a44afcf2d2d0d522a27315ade4a9ae7d041a9d
-e9548b505a93fd5c05216bfbe5f0abf427851d75 2298fe6dbcfb0cf5b1d9fe2ba578b50fd6aff1a3
-dcad4c0cdf91edfe9e29932b6fee2221b98be3ec 8847ab5e2acefb0d5ec71e7dfa43874cbfe40897
-b95e8f8929979fde0e9f0ed3b6239ef49171bddb 0ae9ecee405a174937a1498fe2e8ea36899d4e8c
-df88c5f5991b6f316c9d9b6417d1fe05310fb6b6 2c6311378915bd9d07a88cc59e830ea0bf927843
-6daf090f5010abe492b5efb1ea1ee3c9ea6da16b 5db107345bbe367f692a243a600544c8f92ca33f
-db15071c7591b42f1b724973ff5c969558a0ee4e e33eea3a1f6a4aebb01c10187c918ba3c4ecf1ba
-2d6fed071539a219665556f825906d9a03a79f98 6277249940fa403ba21287b60357d2bc2d04f227
-522be5c547f5d6c5b82a2de7afc97f73056f1f8a 49c8fa5624afa653407a3cfcccda984018c8bdde
-b31d9483ddeaa7f0578c479cadd569342160626f 494c47873d4d4992ce7b14739beb1527d1e41221
-2412f819011354d4ebf851d902321d7489c56afa 69227fb0b50e1250a6537b7dce9111886e762e08
-11e8c8fd2640bb46c2c264bb8cdae42c0b95cde1 7e66976513815cb65fd1898863ebe5f3c2a22715
-ad3539e3d9d70bb7a71fdb41784bc46aa8336f88 ba4a4262add3c0d881aafd27ac5c628b273630d8
-b2a24ae687de0e7df28d3c140f405856074b0ca6 599ea51f4a0254c5d0d9351735ed0c37341f5135
-6c9994cbac97514572da374148cf863139bf505e 407b4a32f2aa56a7510be540b36f30a370ee2214
-edaca086d20618829046494bd9d824f0f057a9ea 3755364e11f3c45f8e8a8c97865a191842dbfa8d
-9c476e68a754bad25abd3c78f41a35f2738e5c64 8bb30f927f6f9904266db64114dce31a1554a1cb
-0d23a7bb18143b2e4de65882a6f9aefd7c0b49b6 d602f976f0b5b1a4a9705d7cc2aa824311e83bfb
-1ae95138187ea8b599c29e8461863f47d00dfae7 08572f450c93c811bd5fc3addbd69bf4aa25e90d
-43640f06a90da0addb7f46fa06e3fe160faf0e1e 9059e41161da4b6ac68ae0dd8cbd0f785b38cd25
-2d98ae0fea176367dfa38dd0e93887b2b54a4c39 bb014b04186ee784bdd5c19ca22be72546539a91
-b44577c46e5129ee43422c5a848bf9cd0273a901 99133db1c99707b53a2b2ae4d7205f9fbb31d537
-386bf719713704de12d93221111f732a482e4004 f588e7a509664cb804eab9654782627603772f71
-ce4196534d89b2a93ba6fe6a31aed73872c33335 18bc4d6673db7ec2d8b9e69c1f6158e93e2db7d1
-e41700518f82fffe60be78738b6a4a729f9a3096 f7db8f40aa335112639293f341f80febf5e77aa5
-49ff5ad4afac7fd844323ca48b295abc553b7dea a8d97c0214ac432567e66cf586a57e1b2436884b
-afcd74587808a3347000cbfa14e60cafd884a2da 05de97f42249c66fc5cf7fa0dccb20fbb8eda051
-8fe3fd5801f8545425d443fc6c853d172fb19c98 d11d5b01405d6235b5b75e0fb8d6179da2894768
-9e16a8f7f6a60367817ab06047b5ec82fc66ddb4 bc5a1ba214f7ee48be828eabe3071573320053c2
-3cf5547e4cb88e39f1424a89f5751ae68757cb00 5cccd92ee98da009c4a649b706066836d248ffdb
-d0f1364940369c0d7589b183560c0c7d020a9463 81ffbc4eb3e22afb5273c2b865186a2b3e6ae664
-162a85cffe4e2480d227bf0b908c26275b492403 d5c8b1653f4438fa32412295d44fa49fa1a20f11
-f56af34e42b1f3140bcaeec7c10e0bbecb222f9f e54344418770cb5494413d26d5799a2373026010
-9e1cb300c0b985b0c219dd493f10611657d23c69 13e1d7c429ae65d5a6c7fbf9c9ad837eaab20cca
-fb41de1e530aae7642e918d22102cf77ebd07a77 807e916b0923023331cfc8c2461575bfb2e574bf
-86cc0ffc81d8a11363cb5447f3291e4f52e8c0f6 0d2b938ea0256b4d26a3bd7a2d138311b0cbdbc5
-d899a179f6d22d524cdb6146d70c9c253e0ea4c7 6b312089098b1e39bc945fc79f694972b3fd602e
-b3ae71302f560bfa8c3cb868485d12d25e35cabe f3f436887a7dadf3d9adc78f4824784fdb1c95f1
-ded55b01edea1510be3b09cecf46a0e83a1c89c4 dfc3570aa250bbea7c28a809ee1ddc9dcf3318b7
-06a594149084b46665f7c59eff099bc16d6647c9 afc0ef24c93bc4adb71087b5fa27b10fdd9586a2
-afdeba0dc922e6bd0c5fc6dc43da804150fb212d 21101c0f2184ebea1a31f2a9458ef06fdaeb094f
-11fbbfcbd763649dc1d7bed969d671e0bdb0c7ff 3639f550c9675d4b4247b96f7c9e7b72fa9865b1
-de04c506f51195a2ca283028f06ed6f9f0f9639f 38dd76dc2c2a2d1e80cfb08c3ace54ea188ee31f
-34383f454a08cc5fdf65959dd19132d8a8183afb ca9b865d6bc97be47bc68d8bb17873a26aedc0c5
-6524681b5a86b7d6eeb201f7e7122b8bb51f0679 1d4dfcb56fede899e59cc469cc9f04776abfea0c
-32911e067f6612bc2e2cf05c7de3c30745b7f327 e9f9bd65ee5b5cc27f966d8270ecb84ad41c41f6
-3f5668ba63a471b53589ea03079d1e5748200a40 ea2f3815dbada2cc7d824c1feb17f111578b5efd
-f6c5d895d597f49bf291209fc2e9312d6c804b04 dc6279004ca7f84b1bf96673ce150d9286c97991
-5029273c8a3a38b3a43d1c3231be1a088c64d25f 2ac239c14a725d3cbd20b74094e0945e9577f544
-db3144fec6468b7e8ec2bbacf69317f8586027cd 0f67159ac6384dc30ff434c6e324e26fa58b8439
-c940f137c3f1a2060f58ffd4f224447aec533148 5cccd92ee98da009c4a649b706066836d248ffdb
-89b73a0c4f0e31f39f1a04a7c2c34e8586f0d6ac 3532e72308a70f7fb42ca10e984a1c21f344f161
-54caaa476c4246fc1cf9d98b19230614cc52ea03 897b5f9c7c29c03fd92f30cf9aa782aba7563c73
-cf77e59eeb5eae17a1c50216d22e1ada95101a23 4e7896e089853aedfc9367a06dc0cf48ffc83a65
-334e87d4f63d8e59b1af2c895246f6fe1a6d5996 9926406cb08efecf74b60e8332bec8ac69173dd3
-51e50618b9dd9295e787f1e967623686d1b97c92 046317d462368c03144039235f5f0c27a8d0e222
-2f72f22c4031525e15bc786c5356aab3b971b7ba 20d1a100c3a5a3af61dc304aff5d06bfa7c3b115
-ac552e27264bc2ca7a9b3d63cafec52234d2f7e9 fbcf426bbd7652fec874e3391d1da92b738acd6c
-7eb782c1761b462324c90bb187e651c61925f5c5 506dc381e21f25901ef61e4477703c87d4e7f378
-995befada5380cbef6d878e20c625b5b52babe03 31381080390d3a4029878033b96ed00353f55137
-284c51b595591b3ac385809b42264c005e76084e 31381080390d3a4029878033b96ed00353f55137
-6a2ce220cc50acee2fae5435a52cea5b40a474ea 115a97b1bb8f582b51ca28ad249e617153eb79fe
-6ebf10ebf5940b454f4185bee1e34f1cfe4c4a88 e285986d38277359f722ce1be8258bc1050b5bce
-8e027a1ff3325847227194bc4e367be3eeb1330b 776754847a5cc531bd36bfa4701291d3e1fc02f4
-1245c266971862b54eef7e1433764862011d6d0f 7dffcfd6cad60e3889111fc3c809738493ac0286
-5a28e6ceb9fa10774c83c2b8dc29a44a753e4a23 a3fc45475165a5f5bb6b96f0be09cdbac33cf917
-e32ae4af515bab5ef9b6bd5eda5a7514f213a578 a3fc45475165a5f5bb6b96f0be09cdbac33cf917
-28fac9745f63a87d03ac2233e068b0fc81b443b9 7e8ea59539e602ab3d12aba23638108d3546a5cf
-8d7794da371f86e5590dde0e8eb71dd063e04dad 11d1eaee37c87fed8a20f27f34190083411f2ffc
-1353820ff8e771d7219cb85c4d4beb968facc502 f2b49a6a93f7a867e88528969e66ead764896e60
-31c82a560be1c551e1e18ee6bd63e569e8456a8e 81a3e33df32c48175ec43db73f3623163a8ba7d0
-d333a5260601438041e6422b0c28f4123cb68839 03a424fcd0b4cb1e116eae463b175010c1f2b48e
-cf1f845e60cbf6ca7b6ba3b171bd6f88ff9a6a4b 03fed7612692e8fae4297a7d900c80229ffba23c
-a8f0e9016c89dffebcdad2f9a0cb1f92c0121344 f608a15c78f99006066e8db80712e3eec753892f
-723410720fb6fae14be2e90ecbfb2e97b1f073b8 432668009fdb3626c1f6390e9e7b4a875ff65a06
-02b1fcfdeecab27caedd545cad460bfaf9248b05 bf2f48a6c60f40a5afa19d79c0e373c637cbfc0c
-958354f2c696b4a7cc7741c20943ed84d6513946 be8f79c656f3ecea53552c4623792ecb5b3523dd
-33ec568f12052f5ecc2ce48c0b5b52f6a52fdc76 3ffe4385670d77456c2c4d3cfbf8d29886e269c0
-f60c5ad4326b2c431fec0468331055cf14b28c05 30420042d15669b18cca782dae45de47d2a32b6b
-b4750edba176cfc5c1ed0bffa123dc48bea7f30e e78419cbf928f512c1c50683999a6d29732abd85
-8f209a7246572ed0f5a279396dde98004d8d4eb3 e579a9261f80dca20dd080cee1e3281db4a99963
-b50b9b8c33eecdedc0a4a69c7a8addbc428d758a dbd443bb8def243f0b779e6604074a512960c292
-91d5c6679a766dce47541d142c409b391127ec7f 759b07c40eb43960495a7d08aeb285ec2aa3b002
-99cd9eaf22af4e5969a56ebe1f67a4427f8a52f2 cefcfe501580a2270ad37893ec5ed9127d2f75ce
-4acfb2ac9c4f51d8fa5892944c523b432812a06b e895d383162f5101ea87e57b30c70ee6e506a583
-f54e320319418bae66e71b089a33cdb9c8827bab 64000cd38be68392b1aae9ca60a33ba40ad4f89d
-ed186e24205775a8d078689caa7043258cc2cc49 8d84c6416223f67a553c33e8d9f982da74b2570b
-ed28f5f0ff8cd157d134f9efb1e84eb6929bec89 49eca959151e94b41079ed1ed6aeba48e31d45e1
-906e982d4da3cd8cce02bb8081c24852f5d86fcd 05723ec11d3f4f0403e25aed99574dcd94b54014
-3cceb9a482cba0b6cc2269adba8bae4c6850bf17 37a84c4b0006ab099dd2ac22fd07bca5d96b2908
-25d44dd6b16ff008b6a73c10f24a7207e4c5848c 3660acfc8a5434e3b856b5a44692ec1fa11dcfbf
-69432b7d5fd27d525854e8b4c793188c9fc445de a6e991e90f3e5725a8f61d7337d876781f7d0efe
-161eab4a28d16652231d693c963dea279b3a934e 28edeb9e47e25f63efa622ad408fc77aa35e3a3b
-a6bb267a41a0057ce49279a334c251a95aea8c58 389ce3e5b6e09ab2713d68d09683ec0329141ff3
-079a41116fb3339bb8231234bf9aa65edec13878 3bbde80a54a06a336263135d5dcc7b2de7534f5c
-88cf0ef3c10cbc7f6106754b858831faaae2e450 5e9b6ae946dc41337a98e8bff650843bc3721711
-7fff56949bc420baeb6c14f2726c83a2c42b849b 4a951c6a056cb9cc8a66ecee11bd2872ce8283c5
-3f77d2bedbd3ebd16f95c30d4dfca3ddbdfb849e abc202c16721d9c695a971957210132ec284d41b
-b425af9e73ca214732f47cd6496aa705fa465714 3e5e1b00dec6d94500ddba5270bebd011601caa7
-d0366167a71ad29b1c2a4f4cf924bea46c7da49e a0d1a4790a2252e9c7450eef8f4aa2ad4a6952c7
-2df378811fa6822f9a288e53b4109fc8bbc34fd2 41c45077c49861ac703a31fec2b94f32ab35b94d
-37413c15f73a1fb5495092a4992f28703feb1754 6cf56404031dae0d6f8a9796bfb948b8b30dda45
-a02564d91f7f76fffc447b09450230294e2c381b 77c899bbf47f75e05d70ce65cbd8984b45634532
-1d8e4fe08a706bad91748de92583d8bc44f6b3e0 c12ac674cb0a711a7094e58f082ddd616c168b9f
-aa551ca74f60f2f6cd8bf2bb5d9fd4108c124ce3 40a9c97119103ee94844ec5b71948d17522f451a
-36173e7ec1c5ca1db35850c51d9ba878eba369b0 b5583deb10a5d0cf402e259011f13ecb026257e3
-333e2f22f125eba63c81b5e153a2a929021ff812 1e258e3da32a594cd6f7c90d3df469c3804c1972
-5c1176b39b39a509509a8c3305632ce46d297d8c 842fe5743e4f00f280ce45df86e2096c5d9759ee
-5f3d047f0b18cad4dc1f3958d45b7975c4895e97 00225da9dde3fb324735ed4d94fa466a70170bef
-0966b50c6dea52e8b80a573050e1ca0996c24d6b c89c4c8b5a156f7558c00f07bb0dbc3607f42863
-f02ab357d229407360ab0a889b6df29a377191c9 ef78c035785805f6c777ad61867b349d6ad04e6c
-d1bd0f17ffaf9ae7c8cb1a0badb476f0ab3e4a04 26144ab8d981a77a84b124ad6bd9cf708eaa0b63
-b81927151a188e397b9f2818eb66cc9950c5dd3b 02d7ec6ab73480d2833ce1663ae32e77be61fee9
-46d6b5658543d17b175ff82dace2aacee2d8c6b1 e34f1bca1112202254a4c4ff4fe096e539caf199
-3dce69074e28c06e0d16569990044a8ecee1257d 79a6840d89e907ec22c21098620384f108c28acb
-0160afd678a5c216f1804daf84e27ab17a721d53 19db6bbbca738835d4732ffa89e597a96aa7d58b
-4e1fcf22261f8f12a4f339a392f944a9df97ec64 60564364b5108d472d7926bef1d3b4876cdfa07b
-5bf218eb4ad858082b349b34468f2135b7a63ddc 0e6d9c83edecaca388f9d16a50fe4f6f3ac9ae48
-f5b6445096a2aa0d600270e437b9e9e1a29b3f1a 90c31234403a131ad4ea4be06dfa4048912ee258
-cf0282cd6d6124ec9633966fe2f8a63097d603ca b69e312f0a158b0dcd7e88fdeae389a6d9795433
-cbef5986b36de549f86e5f2ad83eab9c9c18923f b8484668b12c738b4c6d81f30b8fbe4d19ff911d
-3d18f16c30e9a10a726b7442e101a53ed7623c45 289407574e12bcc30b4c3f31e6c3762fbb74f148
-4c8a74cb44f894c0cba267cc0d3bbfc44bf52959 b52f9c01d98f7f903a847032069c6a0fcdc141a6
-e681cd0d92131259568a7361531678aa1d35d1b9 4bebc50dd91b826584b1001931c31fffebb37527
-40f3e95ed3c1c9de8af1537f4ce5d23b1ce0a05c 6f9dfa5be937a539dc573aaa4b9df5225f6f5150
-ea27204d30932313527e2f26b95feff9b6325fc4 2b671ce972355c8d1bf3f8b7145016ee42a1c83a
-6688b1924716aa5e8a4151b7140e4c63ae266928 a31507317d99808457f808182545e619684cf16e
-0aeff9095140abd0cbc016dfc9efd2ffbdaeb9c6 d8be66d37c1f1e0042ea0a81b2f3598e6b9d54ef
-a58bf2fbd089dd6834558e8af8d1a1dd67e914b7 4d40a7fc4d935f2cc25a53aa1de62ddcef9c80d8
-05555713751fe1952126fdbfd84ba6e5dcf34095 5d8296cf1ae6a1c5656b13f0ec77366557f391e8
-77e8d51928297a33b7d82561a34e2b2045dda3eb 42b1b8545d8807051fa2ab314a670a0a0929335c
-5dcb6c8f68f19dc95f63855b7a74c2c4a21425d1 5884e5ce4e91bf6c52764aadcf0e3119e3ac375b
-56adf2ddca6f97360ee7080d493572271f70b3f9 d7cae730602c6685c7a17508188f8521b207bd63
-60a6c2ce8c323872c679d995eb46128009953aa4 6f7ac13911b9ef9a41d40d1065dc755817f24d5a
-7b33c09c174d80a56083d066bf9e8af8f3dbf91c 92cb2cc82168bab296897ffe3026195c45490e6f
-47168d1fb1030a9242bb1af296888b65db1f18d6 bd1fadde45e11b01cb5f5b5c9ea7960dc6da0d66
-21a4fe58572f61abbd1585651139103fbe619346 60d3490b09c1efa132193dd318b0b0386c091b12
-73f226e2df4fddc3451ce7cbd0777def910f10e8 c359f376d627f4980442f8189927e8f02afdd6be
-7c279bb16e838c3543920bf389fa2e43d1e377d9 2f680677b1621017d9fe0db7034f15ee87615932
-58f0d7bd2031561c2a883015b2bca6c56050ec48 ebddacefa571b9973704fbad539397f7c6012708
-bc88c92ffbe0887c84e0d208ab06b3b4610c073b 9134bc62e76e98d40063506b1da2e80108ca844f
-ad9582e5431fd46b67947c93dc15bb88388fe180 2dc9d38ad3633582da79192b87116b1a39dddcb3
-cfbdfeb023edfc802117af4590ecab6c5f708fd1 7079698ac773db44411d60171a9af42ddc27ad5d
-927cad3525b5313ea64a886383f09dc2f483ac1f d84221c8d6b93da40d649397e3e4e3f451e6c3ec
-1d3427d1949e6c68ac79baf77691955186a40256 c7f420882491bd62a4800dd35edd755225e67c41
-0d232823efcd223aa21b18a8294c5fdc4c18a022 889056f6139d5c4c93d583d2fa8ae2bb7aa89c08
-b6beba011f09af69cb714401d95ea3ea39c95f3d 3c76026879b264041f548fe834e1cd7cadaab06c
-28f5c930216c6672ff2ab71103fe0c43ac20f38d 51a7488a10686c67ae40a3749e9aa53528355001
-c0acd17125a2ba65a055f1727103a419c91d37bf 1214310d892444ba379ab12f9a7f51be9edacb2c
-20588ed057fe0ac29a2d2ebfc1e316e232b13b9d 4252bc6e02b3e20b2fd4d7f7b562f54f84426398
-ba2af20294b15f5df9f44180e52741ba645b97d3 921ad4c8e9cd35226fd562ee09ecad6116e10523
-9952f6c1664824fe6003f36293115c916ea8f090 9816685d809bf19ba5666dbfb041329bafca561d
-99d8b781732b2d8573c9a5aaaa6b8b033ff7e179 6e4a55431413ce2442280e6c6db6548619804ed0
-31d9e0f7344a01308253f1b6bdd25157122b4a53 d9e7a2e14e2ee1a23b7c1ebf78bdd10a0241db81
-688bad179b81b1ef808e5b5183fb7d7ee256e39b 37f3faff5e0c9026192524b6b6392ff917e8a4d3
-3ed4974eb9ca913bbc68a0177dc16fd83b64f73a b7109c91578389f605347e94aabbe4f5f5f3c7ee
-b7dbd179367d1ba0a25dd7979d6f0a4cecab6533 1b030c8c3ed11bd6112923b07a25cefab85258b1
-126b5f34f33d9f21b4e5375d286a492ebee6f15d c3f57cca144825b85c00820bd18c1d310b239133
-246c1ab315a9de43a9cbd2a98be5bb0cd6912d14 707816f437de1aafb177b0b3b436dd5663be684a
-e503f613780793355919870958bdfc4a3c054255 cf0b35e0fcf2a61b6afd733fbf97e170b3507ec4
-99310fb4aa33236934286aa86e25f4941224b803 d57ee0cb4c042611538372ba1f29c7768243e4eb
-b580a9d1d3dc3907bca6f193372a176a6fa65a64 303431250ee43ce5c8ba73caafac5d6c9060f5b6
-be982f7c07b7404e1043d2a6145411e37b025c88 3f787972654a2bb455e7ad963c35d0b1a34054fc
-24fe0d678c8abecdf360ec814338fec0a09022c1 83c57ca0f1d56d9c14b13892a114cb0d7012a54a
-a8139e82741ba4e8f62db7eeeda7d269c19b489c 5e31c2d061ad66d824cb64479acedebc324ff981
-90ad5f447c9feaa5ca7549c05d6d932bd80475eb b8a0bbd40fc0ef8eaec7c6bb6e040114b9e382d6
-4ac0e946517f1575cecb6e0001fd17c9b1ebcab3 c41077c977dac27afb5c45342bff40dc10098315
-2d71d0bf0cf682080a9e2317e3a8b4a176e6e439 c298ac39d28704586d33f669b5e004696a2277d8
-ca4b9d0053ca6fa335b94e70af50cb028a156e76 2d1d3a74398ae623cf706f90217f3c8e51bb8fd0
-d6ceacb7926d02d34f2196a3970a93d7ffc68b47 2f89fc28006bb54013dfee341bca140ad8a7a11c
-395ef3653411162697b11da01042037b760c2c02 387a585db175b12407ee333f49b463ebc4ba83f6
-bfeb6802129955a202268f0eec2878d72b4aa6d0 4521f8a0ab8b18b2c69aad8a13197e1dc0f333f4
-52ccbbc8f51543cf6c9388a1fa8fa99cc7d5e998 afc010a9e1b91d909cf0c10d6451d83ed3a5763c
-dd6d1c5db5a9a8e1bb8d9d031a3ac73aa4da46c2 83c2a27638baa6607d542689fe2df0bacca1d066
-7e464d714d2dcd922ad08f8d1868a70e06273e6f 9988ae9c671140d02d187b50105500283606b736
-907be6fc962eb35a6909b749ce0adfaff464f771 3df3d37bb680122f01a20f3f454423163b7d1b19
-82a7a8e9c1c3f243cd9223fc2e33ed6000b6aeaa e2f08791e42518e778d0dc0d7e60fece92fe2475
-07de1de2bbdbb056c53e2d721ed2eba3a9a221bb 409f6c600d6558d522dc64603df6dec6026b7513
-6134ce6953e705f808d31365f57f3506e365b748 a8f3ed6f661f893d8dd10cb4b6b5161ee96c5238
-b92db58bddf92d28e892382d3b26113e5315bbfb 721fc49c6ab38a127388523162e8c0eac6746928
-2913c626c3c699e43ffc88c79b13662c91f1bcec 40c8d32183819e12bae9ca8d80bec465fe4903bc
-ede35a3eda5090c7b4526848ea8e1dd8de8e4666 6c0725b3b85f003ed6f05adf0dd2301e4a3fffa5
-d9fa9fca4f19cd5464c42f0a6910f9c8f57bff06 56047438e91d2e128ff46d40a484a84e9fd41c6e
-58f13bcb2c568f1b139c717371d002f11c680b5e ac02f57548d3fe5aa3ae95cb02da94c4e6bfc60a
-a265bb179a42b389ccb675a13de8737825acd336 588c5501aab83de2a9bbb0631e46bd335de3f243
-057f8a455808da4ebab38ffc3631eb6685a0cf99 6e8034755f21ab0f13c0ec003ba9ed0d14559db8
-f5167c63c44a475d511592a572edea8e835c802b 75500c1ae4addf14266354875bce6d0e58736d11
-b21a9a03da730d25ce6a8d0fb167c4fa21cae681 3936a292ac26afd6148cb190b1c51b9fbde94bc3
-1cad8fe0de77b77b316207f550c9cf061323d0a0 e0ba42490f668617691b117a650da0567d41bc93
-a4b122e84d873d8704b3cb7b297303a96d9c2319 b80c56cf62e3b644213092cada88d1d85ccb2c91
-f57d1ac0fe0b9b69041780a061a9a3d1465e2aa1 efdb9341765273ce2e7155b1213f4f18d163388e
-0305673fe81e4b723179d679077dd403041ffcae 4ab20c8ad17787fc8cfa2c612f62343cc35e99e2
-3428c3f34ed7ffaeef626f33c1e7ff1523a84bec 0a246543412af65da1ca90d635563800130cc73f
-edbbcc99d398359fcf6ee92678c012aedb45b108 a666d3535bc3380aff333e492a56f1fc59b346b1
-c0d8275afab16b5c9a8a9272f562a53c179e2b87 61620c98177f2e800606de6c0ec7452060499580
-8ffc6b571e0029fb5b6d9aba79385b3704a422d9 97757b962916b1886c73ba456e5db4c117e7b2f3
-0dae1632eae7efb3f435f12e94e6779ba2795fdb 0f718d808cf915a9d295fe735ac6d3505b67721a
-665744220ae1a1c35f6d6a92973db92dd486e7ab 4c4b606bfda8e8e138aa9a1954e99e0faa8f2f61
-85084883fd5cbef934bd6399fb3db056080d9a9a fdfa06666e528e16ee268910f1ad7efb4a3b7ebe
-f27617606f52cf0ae6d0ea49d52451fa8b6000aa 87747a41490aa20263ae9a81f6802ec0c7eab38c
-a682219aa0490b6ec007c368e8204df9f1b403ed f70c92325663ebd40dae9370cc1eb81772b579a0
-3ac26c5a5b8ef97c5603e304c1562dd0c78a9a74 93b4f298387f14efaa2662b227f9da8148ebe3f2
-0c0a430f9211a074209b7216748115ded4663056 97e6518c187101605832ba87d1ec002e7a0a38e4
-7fb0db64e226310f13a6f5a80a500d14870f178c 7375c598a3bbe18c2f257ea402bca2a8fd8785a8
-6bcc6b7fa0eedfcdc32d5124ef29f99ac5d34d61 cda39e62af9395dbb3f875d25d37f4a6ec23e40a
-00650a1f5520f86b0082ded770c4727dc0bc915f 66e4b29ca32c6061e8059e83d5fe7469cae18383
-255a7dc2d4c18ebf80ef1e80ab4755bfeb70fc84 e4e9f3df31a49a317e48f2691f1790cf70116e1d
-df9950d6af6764c2d4a518f44a9a55dad68b978c bba89cafd0985b338b80042e7be790fa6411c2f3
-be4498c581e8bb174bebbf874cef4ee10438fdba 7b9d875c96a081746d6a31f235babcb6c493665a
-6ef64352f2df5355e17808c1d2d5ba4f60d832ea 7ccf79fa063c418493e53e78b5fb362750f4320a
-80c9ce2ba8af84713b0659f1a1bf14dbac8cb63e cb34a49ada9bef3d00a4b52bb6cac84696f87178
-ca0cc75d5b7c2150e71d8298219b89b6efda6941 04baf484984d4ae8df8fe20f346fe9fca32062fa
-4a567d2aaaf136cfcac26793af8ecebdf827c68d 13e17e1134b6b0147df050cdcfcd9c9a325546b1
-0c9792e44fe4ddf3b1bfb387fdb71a72bf45acb1 94a3319706e9efbe1313784264b5812b3f427c0e
-94a5eb92cb3dafce23479c4f101e2d614208000f f5e4cb676b2d23d5b031f0abe7d5820c9f85e3bb
-760e059cff09858e7513b29c00a95d57e7cd45fd 9a36d2c88e6e68c9a4260a0cefcf9f5e42bbbe56
-689a3346b3eb0d65c06def3af97c777dd05e93d2 0a5a8c9e683ed00a3f9803106764365203c379b3
-8e2f4df22547e6329e3386ea53750abd1dd3e365 825480d30b94526b027066ae95bbffb88f35e137
-7efba83481e8972335fe893af052bfa2db73fc3e 1fde25f8cba25e2fd5e7b37b73e78b32302c6775
-ecb2cfafb12b7bc8b6378b59dacb46684fd94c6d c2c8611d55558c7bcffaf3534ed6a7a2d542c561
-e456731175750ffcabc7de1348e68720d3dcd1a3 2949646eda09bf3f3cda9fb1a55f5f21617ae198
-bda574ea34f59f8b23debb3aff5f7b3a01fe0cdc 124d9e01143d28bda7baff7e1793132cb7b0360d
-132d402bd3977194f276e4df75e729e2809cbab8 514e4c27dcf58e65ddf10c5762391821b26dfea4
-c683e59477fe0ef0affba5529a415d21ba001357 fe7d81843c982c7d5e04ad0ee0e23ce0c8631b8f
-466bc75235719798aabf1184c83c0e2cc723eae7 095685d0af78bb4d924e7a6a0ef931d3d9197656
-de734ff9635e68044b5643a96d846a52936659cb 5ea5702b1d79d0dde5003bfeff21073a49501b25
-1b2c1fd01810b2dfc2e2ae921c0b2d18300bca07 ee6115e2883a663d781e94c2bd7ab5e914f96b3f
-51e62e60f229cd5def17114a43686bf75b3fc972 b1214ed7aa187f29c2f11c37c6c465f686256f29
-2c5e93e5633fc341dd551a3c8a3db1ba0833b763 f7474f8332184046364256f5a6c2178039d6adf4
-8f29efbbad4cab3b32413087158d298d5f475aa6 4aa740e77f067bab6473b148f8a96b6eb967aabe
-2c24f9a0cccc0f15c7ecf851a70119524a9bc342 578e599e983f4c1c92f7bbd2332ae8cfb8efa464
-139b72830ce4fe56a777d8bde86752ca3b21d961 963725a54eb45247fd6402105d3d8df58bdb02fc
-a9b72b01b97328a835ed595e76e877459fe76415 26fca4fabda19492862649824473b487bdedc3f5
-3afc3688cd823956d4410aec7692f646d269d27c d8a97bab9c3262708371a88f354ee5f8e7bbab86
-ae7e42c2f9072ec27a52dc65874511bf335dc054 6b3e3c9c4dc8cd17352f7c3e057bfbe0e9c810db
-59e740694a07f5dfda79ea4fb5615ef738b57875 6b28958302471178e4e7bad4a16f5c4ad7704b2b
-2df1dfb4a8d718cba3d60fd604f635244f442eeb bb6903dd480ec73c2ad4e02f6133b16b750627b5
-2a9d96827981ab08bdb89e1ec3548b01f78a66d9 8f13ced37ef9983682445d7cd430b7313bc1ed88
-10a11a07082290797ba0df17fa931c3d77ae99b5 90c2b9355dbcaca157bb3a8826a887e677057363
-1a310ee0cbae7f3102cee50296af2dde14741457 c53a5e0866c494305b335e9922f74a8a381c804b
-8e7a35a0d73f2196b9e36f275dd34a56c592423f 1ae8aa5db95837d45df40a3827839b0ac066297b
-a8706228d4e8f3c12b7f9496a1091335d38dcdc6 5d5539839fbb1d978629278d29f110022251c7a7
-13bce3611a6f739d1ee5cc68b037f099feb56e8c dc00a01bea56f2c4cbe6d2bc9e8dfc3024f00f32
-3031de2a4bc0f5616f1d636cbf9e10a3148237d7 248c7f750c213c92c6185a40b69acf5309fc8f8c
-c5f7e94a2a534c833be2ce497006c10a4b3e185f 4ce2146bcbeb06ab95ff69b5c14b1b497169d4c2
-ce360c51edb29a1ca70516931385619ac6d8aeaf b66ed96da1451f6a0368b42ce71e795630cc8e8d
-cadda764e90637fa548cedabfbea66e372383f13 ea4e55860a623250de5b5f1404fe048229be7fd3
-408412380feb1b11eea3aaa43174d31c48140e53 d2160d8b91ea4e8b8451e5689304f1a7e51bcc1c
-8e00f955c228f7f15b12aaedfb1cfbe57ff7b131 1f2807c3861a40661c19f627488b9f97981b4dc8
-01f221fcd1becfedb8206a980f69cbcf9d3743be 9540dbf2d20a26d72d6687f8d8787c53fedb7107
-0af1ea29b9cd7fab3198d3e6692d244a8b05bedf 744b960d0fbdfed99900ad0c21d152fcfafcb17b
-5e5a4f5a113261a0f1c61ecd43fcdf0b20236f34 b44a5c6e2665929ebf361e1a5881e8c1173c8c43
-5fbab7aa32ef03ab76001cadf86977abe4447114 aac393714e05f283970826e36dbc46b3e688229e
-21e5224aef318707ce708a39f47f52d891c8e61a 86ec163393b9810dcdf5646436e53e06496e82fe
-e2b649e05060e2ab59fcca50e94ca26bc0cac0cd 078b144a3933fb817faadd16505c8ebdda19d1a4
-d1397afa42194878e468391fdef276b3f8961ddb 9121a9bdfab42d5278a77df8f9ccb046d3a1bf30
-985877fd0aa30497b126a3635ef1a24499c030f9 e09d173eeb39c4eea37b014f5ff1a4e38033263f
-00aa0f6a4e0aaa4bacc4ca2251b068cfdfcce938 796e098332f955805f5b6f24377ebe216fddd955
-9d968aa2e9eea5d55e95292f427869792d861c95 24b6f1be87ed88eab7d72ac3e4262817ccbd1be7
-bddf8d765c46d0f0ffc866ad30b3d4617450817d f698c2ed9b936ad86de62faa104c9f0bad8dff7d
-c86370e6d83f3db5fd081b842f7c1f1975602d39 916069751b50f1e3dc31287f27389e526623b2a9
-2378b7a173ba5ee71d1ec26461dfeff342cd97b1 f229879ef6209176b6fe6f042b343388e7aa9f52
-86f65d2db936023bd9d48ddd67153cd1e11959d9 f229879ef6209176b6fe6f042b343388e7aa9f52
-0dbf118e132ef5407eddab09df00b402d642d9ef 8e5911c8bb36c1d01be1421e7f7e1fbffcd1e331
-80294d7ed31aba2bd5e165b5c96e6c45183cd447 538ef473b35ee5f21293052a6725d52a9fb6fc5d
-8cb2b08cfc3046788c965c82801ba14e91fc75bc e527ac07427a207897577f944152da3f961da0e4
-4a0fb4ec30d65388a58f7c45828f7fecba38c59a 6a08b3ffec6dd2f016d5cb4bc4ed7c4ad62e4c47
-184751289fee6926979f8b7335ec3d7b911b2dd1 0c862e016b2cb62020b4ada6c3e9ecf1cac83497
-2de7e9d1184d1e5e3eb65eaf3ff671205059e9d1 271f6f0c88ccc288a8401cd9fc44b4987347b96c
-fac4a759086a6c2c04cdff74ee680af4e9df63f3 aab53e2db12c62706c5199c9ac87fe8dc561d855
-b99ac486c6d6ea18b9b486d297bcaaea40b6b0b4 b52fd6153101d1f7d8933629559c41dc9bffa46d
-4b376813e385e06adb6d3a50fd664a758169254f 9e2ddd8f7acce1a2dd8f5170b77f54eee1c1916a
-856241ba52ac6e3a7ed8984d9c97f14bddd3f0d1 855b8df5d0dc371cb7bc226d43ccfbf7be12feed
-3ce26c0b6ab25cf06326013ce6de022e2b1a6a55 295373a7a8483d35289ba5c01b711f0eb12dfbcd
-7e97b35a15c5cb5662dc06fecf09d8af79230af2 8926cf9df6c1ad1beab9413c4c93317d41dd0cc1
-b02a3cbb3da1ab399a3fbb3135b9b20b08a3725c 6aa3cab77e38691639938a3115c962169767b1af
-ea9e0a743cd10d888e026368614d7ad664941478 8d7926388f55724f9765cbd3ab9b5587aa36b514
-223e00b300947798850bd6d8d0d22be7b5439cf6 cf93dbff48999009662d4ae36fcb8a0f50c2e3b3
-989755b671232f2aca4b2464fb703859612a0c79 3daf58c925addfc64cbaa19bc5ec2a6069c75bfe
-56da68fa3154bdf68efce26e1deb92df9fb31506 a68057e04943aef7f9c13b390446759e954a6ca9
-d263b243c51c3a86361652d43c20e85e5879286c 3695f611185d0b016f717cbfbe10c51020fa2c90
-f4bdec1e891ecfe0ef24077ce25c326d7335a350 e7ce1851d3c1fc769997140c833a6da09db9176b
-1c54016dffb6d5ba6eeaeac5d5d86f62a110ac31 faca0dbbd72b582842251c83625bc863366dc13f
-9fe5791f0a27070662810237e6c38a00512d01e1 a4d96ee73dae43b3d4f3ada5940025118b5db9db
-b931d06bdaee032e7280d7eaa70c50e4c04fc466 fa22adf5b4604f1c6648dcc855772445994ff1f8
-e7f4d8bd28b7a0e5e1d257c0088a84275e0d8937 984b41b84a26e33a4de2999e947b1d039f5b8293
-aaa7cb570af767fcbf918624e9e87a8d105d8990 3abb5de1ac92ae8a5e80be9d465e172601455cc4
-df28afc5be704e57408ae4a9e86e1ce6f88f7fad 92b85cd5e0aa567bd7995ea8ae00d2f6057576fe
-69f721d7d0a7e5e4df12e78d56863a06cc815acf fcc5b30cbb4c0b6d7535a77cdda4c6d11c162a26
-b47be114c743720de6c626ebe28d8c0347047d2f b2c4c85f2f233bb6c1d249bd5d4d212b9144f593
-a050c3b1c7a34b19f2bbc5c4f6efd585a4482c7b 4b707bf6fd021feddda96d10571640a554d3a883
-ab0b81f8510b8d7bf9ae12a0bb1c49ff077c1022 684de1735eb6d0ceb649619419701523d54c30ad
-559962bd4f0ee9ed3f39dcec12fe8d2c1d3edd16 bc021ed6c39e8d0367b5673400128df7f74a502d
-e1c2305b83ecf5e10c9b7f7a481f6a5af3cb95e1 3469d90a115b900f8f250e137bbd9b684130f5d2
-b924342b5b558d32923f830d7f3a61d96e098a29 d81ce835fee2a05498cd59b6ec902c3b16163f59
-9f65b9ff23add4dbb4d9fb8acafbe440c4f5a1d9 7d5d0ba8c997f615ea05a6ca767532d7799ea2f6
-158e0438a11b11f0dbacbe92adebf6599d51f316 daf342a5cc6042ac87c2e6ac32541b022904efae
-8215f49d650bbdde4eed48c30e75c6b9e8b9df8c de4037cc7e9960843a5382bf22883d2325722b9e
-8276501d4cb7a29bd2b09503f8902759cdd3dbba f93965054295fcad6543ff55324d0eb40ac344b0
-f4c0761897c6f94bc7c63baa3dec4f06375de70a 5dbc6c19d7ac0ab838aee781b17b706bbdf3be43
-03b83d14ed746792cb93325038c49dd8f9a1b214 077dcc719c1e9e71731396fb6e4c4cb55bccfc60
-a95c1f4dcf02b1b5bfb28fd40770638b5f9c217d ff3b47e27c20100a2a1b2cbf3caf93df462f18a2
-ca39ee26d25372f6f7aeee24c3283eed7c550b98 21f97960f0955fcd2b362e095951420c597b9b61
-a4206fd81a5fe47b25a894d1bc936397ca4e4dc2 ef41172c4fdf3c06ab524e1b990837eecafd9a27
-4e375620d0e904212df6e1b5241c1aa4c21041d8 912d552d6941a1b841da26d0b1d9845f461d4256
-11dcdd20d2d2c76e4d892d4004cc430f667ec648 f7803c1f12cc15ded0daa185676e580c6c68c59b
-bc5d037b4a6474d8416db876c2c33f9e2ac00808 63b7577e2c2d6c7bad9ee8b950aabee23bce2d90
-685665c04de763afb846011d56234ac2ab8d4bd5 56951d9a077bd8b2054327e66029a455d1b45f68
-68876b50ac969475214dfe401a0ed422dae6ee7a 29b938d0ce38cc5534e5554e3c2849f4f5a99ded
-ca9f9269c70aaa90279908a9cca3ac8b563ba14b 8a973f7cedd5bb80b55972638634be0a15138df3
-e098a753bef201fc53f6423639c89c0c7baa01c3 68ca351af20e72582a5680f4132da2298272ceb4
-10666aeb22062aa2177d1b9ebbc4873fc609d773 522e9411d08891fce929b32d324f7ee2c4652b59
-429517d569688a99bb6179f34421da46ce34c29b edf21e796de44c7503e12269f3cfb03a0b94a89c
-14e8e922c7a1bf8f5ff8ebd1369b1b97e94590e5 ecf5a9941b1106aa58c65c90e6e4bc32e6f4a6cb
-e5ed4e3b55975eb0bd1b773f4118379c0f9a3dcb 60af4ed0f54ee15a98d8272ccf0d7542e30dc04f
-d2370fa42d3abfe71ef3ab08be555de663efbf6b 3fa7083a4b53bceb6c220ad2940350d57de7e0b8
-6c0320e5033bc3ac8a94a8747e83ab38492e671b 527c70859ebc74d1ff1647119044e870f0c57649
-0cf04d42b897624e1c5bfde1c536a7b164411f82 6cb69fdb2dd27de7af04dcb6828d64ae5581e63c
-91af13b2c6d24619a49292f50477d54bdacda361 eaa2c5eae5260c3079da96c2618dc34ad97b64c9
-fe1daa52fe3a322238f8c69e98b00e53481986ea f958f8a69809dc95bfa149465c364be09b1a7436
-0205392dedefa44133efddee77091a2faecdd5c4 be6dd8cd36bd7d2c9bcd94848d964be64859b036
-baa986073d0007328987e2248b23bc05dbd94458 0882ad334f297c2567840099e822c7388912803e
-55644b06b553b27872bd30d6d9d290bdc7aa2f41 1108bb03da1806bb788b4f497cac3a51e5c3c74b
-20ef473d2acf83ec0e0285b509854ceb9e09b76b 8a28e62abe457830a5f16535d8632ea35562a6cc
-02cad0251604089a67c898dab83a6d8752d38880 a79eb12cb163eacd52cb5f5f028a0d05c6f22786
-6dce77f43c36e4fececadd5eae33e31c841068e8 ab41525ed55c3dbc1a4bd596d9440b9a2e0493b3
-719c05a8335c240ec86d3219571ccc1c13670d80 5bfaa343008b48c6b38db32dfba84919be508e63
-d75661666c90d2546debb18039f7fb78c202f60e ab3f2dd8b15ae597bc43e7a0d6626e9379f68463
-c9d62599f20b22b66a3ec8f0775f1ac4ef523ba3 4e2295cd9722bdc2e196fdca61fc0c201af1c773
-73724a91c9ecc8696d1b1bb75618347d6f2bbab7 125a14208d7b74673f7ea3efb0f7d71a7caff7c5
-153519d1080efa5a5cf4df11a38da096f623fdb7 29eae00bbd731b13436fb81023dc732c76dc8133
-ce455332807b5ce34fd673dcc708762c35d500e5 9c7eb0198705d3476511c357219a6bd0612dc6f7
-874c48ccaf2e3a2d50e7bf436220cdd198b8552e 12f1bcd866dc14014cc239dbfc3d2172e19b89df
-3d132ab4c1f0fd2d9e0342805bc786a50129c36e 866f6ed8d9df01ae23eb20c510b32ecd704f1be2
-ca91d329aebe1ae6511628cc58841fea394acc80 389a338a14b74e99e7839aaf1709a61fe7ff16d2
-c5c92170c839017f7818b687c20aa41b987d6461 2d145600988b8ec7d22047d60204b3935809f410
-0a061e53de00d3779b7f60fe60611b83516a2a64 defcc20eca9529b58f80ea87371f793a98f847a8
-1585df0e8141037be0a6131b50556ceb488b5762 04a2ea84eee4ccc8da2646332a509ff6662b1f2f
-054c2e73522b8631a4f62e7d31f8940a68a3f693 cd5a44b2b0b686b19a1861f135609d2bc788af7c
-b192372c1d2fc89d6f66029051a72f24be468bc4 0499b25a6f59a21cc8feff2fc49e5fb89ba664ea
-e135d439c32ba6515a4db175d32a0c6107d589a5 39612e4a01c3bac955acefa180b318627b6f0415
-70260f1d226bc60e890abd0dbe799ad9f045612a 7c0e290c9f36b8a758c43c35863838f44e6794f8
-d99bc6f72a423287cb7895f0320d9b750dd16473 99760c2003bed20ea45bf9c3b9d1703c2931999f
-6f7ccd14db3087a9e3b5f954c65e7b4cdbab197a 8087236ed025d443ed1c81bae74ceb43276c02df
-16df81b9926c18b314861ed3cf735e3076bb1aca ae992bca2396cf626c9507fb0c0a29f18afcad82
-b98f0eb435919fcfd71a1a7cf39e13b033e570fc 864095106adce10f04549780355d023013633d53
-c6804cad9426877a7085c6705b956be902dfa158 d7780444d8e8e64d9fa361f51b32c5326eeeef03
-539f9523fbcaa45e52ac62b012a368352d853cd3 76044a462e1559784f500f962910051b0385aedc
-46a3d40524934c99cfe366a7a8c8924e4efd2e6d 58909d04788dd2b58575b619f4682d6d8c53526a
-11fb8091e3ab7b204931b754862052c808e8756b b08d926975beb3f7c8b3c6e2131e5b59d2bef788
-f7f5f70fd38130a55abacbc4395090d2750eb1e1 87da3ff4b442edbabf209a83ffa4590d35014a20
-7634b90359265a625b70fb1d4282b22a7a83bd80 73f8230e1ea7fbc105ed404d81580c1c9a0fe6dd
-9c1a9322f8099826ffcc2eba40f88210678f5f31 2432b7592dad1893aa97762e29b87f589ceb182e
-ff7c3f6a87fcd03a965b20eac2a2e692f2c5ed1b 44b14b6a88f930db1d6930889888bc1aaa4f4403
-ed22c73d2bb653146e40e1d31ab4de0e5253f0ba 86085198d95708ace37bf670070134dbda8921f8
-188d91cd4bdecb41471a2593d8096ab50464677f 1375c3ee4bb902b263ddc61a6fe09d5d555c856b
-cd7aeba99dd28ea35c50a4455bfd265f75c2350d 30ea464580a9da6b441584134cc5314823c5e510
-e5eb8c31d2df167bd831c61ec0a90b1dc9d380e7 b6797d00995cd6dd968c05985822bf2270e10461
-32fb1694bf4b9ae5898c7e8c696f576f82c3f7ec aa91891a57da9beae516af7c481ca44ff6fa52a0
-306ee48b72fa943d112c270cf52b58d31a5b3a0a 46b645855918b0835299a4fc6c1e7162fcb9e7fd
-4292ee9b01d415c461c68346d0aee5b3e8d7fe09 2fcd774fc1b3682bb01d2a31c6348b03ca52ebac
-a41f4d046e1d8030d004d6c46d1669bbf9dd5ab6 4121a053d10ba51824e0803590340e00e23efee1
-639e351dd6014c8d310edc84390c6b6bfe0570ed 6af85d4d16b3614fd32a08d07350ecffcac3941c
-d12441eebb0d4077934ca658c941fce77edf3c02 769112e96499e5bab2a35a91feae5895ce66e571
-2d48b5fe3a649e0944ad2d0b94bf6ccee07c3685 82421b6a5bd2010066ecf8d1d59f88fb4f7b8270
-002b1c894502a3a2c640b04a518a12474959a0b7 ca29cb706396c0d936753be7c72a8f1f5d0319d4
-1d7e8047b285da9ec206f516d63c2772532f7a16 2178798802ddea9a69bd8f7a7b2611a349f458aa
-b78d13c62052817b6c415696c619bd1907e045ed afde9161318c077cba9a51c176b096cf4d4e87fd
-9606ce8e223cf238c236c0c29018b5e480f31e6c 86e5db36b9370a88523767b91204a6049491735d
-529bcb72e8203751f309fe39f9873c3ad68ff84e dfaa40f95022d86b31ed12df1e16a35f4f0b952f
-1892a781e28144c75342b65631bacd673df29d72 c7ee3a23fc022cd4e8e8089bbf72ee675057a20a
-423505a7c70c659f3469d9afade695f2c5f505b2 f07eb5f3a921ffd7e50f498be34661a379ed3d30
-56dd026141c2b250b503263b6a88c1223db3e0ad fd4b65c2e829dc74a9689340d2803b5e451bb2e1
-5fc59bdea3489aa2df56007615e5fd77768dd01d bf8dff0f10513b91965de09080923932adfeb321
-f126565db5e706d738990d562e14606083bfaff2 b7fe973670256447b687a624279d6f5cb7ab4cac
-f9b6ec919ed3a280341599a75896552cae1480af 42a86e44639c1fad16cc076509c9c8aed0bef8df
-380d8081ee642fd19c80abf896b8a905b6ce63d9 3410f9fd2bb43cf72e005b5d187ea4d91aa48cf8
-274265dd4d3acf84e9e4ad073b382c2436db6884 5c8b7cd5ef8fb925fa9fd85ebd21b7ec3339d271
-122a8b93845f24e2af6a5628d9906cac704c07bd 806123ee5d46c482cf9969ff043d5fdd08548346
-5c73835acae61249182fb17d445f95907f5053d2 6cc44913f5599d9c7bec5af20fc8fb437c6ee119
-e7f16c508247b60ce44995b0cc1943c912fe0b26 1415903a8fe119440f69c195c5b75add63f9db6b
-ba4977d48be1782e94824d43ff6e26b6a8ccca25 1d32d31f5334625a9e1a4f448e47d67b1cd937e6
-46a107f7fb767eb07bbfb7178eed6c894073e252 9b2ae4aec6f19c2c017a22903dbf520d9f393bfd
-6d8a338e210c133228c6cc6d6a45b61d6cf33246 44dc81538740b6df573b5fd96e1df280f1324ef9
-979ad17ac58b6e5f5c0dc371df2ce2b059f52f2c 27f01896b1467afed76a8b97a1cb145bed48f007
-52facd8e7a841c7dc7da295e950bfa6b49fcc31c 9163825c7e323d95967e3a1f8228cff203925d40
-edc6d7f65a5768789f4ff8ca3016e121b87ff918 43c2c0f8253142a75cde2d94c1cdff28a206419e
-fa6f33f25b4a77b5a97f7a81d95697b78dc567e3 493020c9d8de6c14f59044ef2b3506ced8adb435
-15c431c56258c42750eb823f9e930e047bf1b27a 214c678dd06752d63b988b1e32811f40601caa32
-9315587e8ced0b5590ea1c5fc9340afbdc36cc22 54011c0eb2051b9035b2b0f0c1ab0f89a2a8cd31
-574092715ee8010b2f3cd9bb7b33997d20711663 43feaed8a594d84500162b708d8ce2bb7a58122f
-f78825b845549194dcb584e8c7e977a12460785f 592792d58afe1dc674f2de686f4fe7b3276ac46f
-79eece70799566389a9df4271ff1423962fcf63e 3ee8f2d8a94bbe086ba51f6fc983427dc3ad807a
-0621e000abc46121842a117dc03b3f191939f5ed f9bb0fa34f6f7fc62629e4caf83a646e37cfe3ae
-e7cd06aec737a233846f7c161ce99019cf203419 92aaef23cc3d11017defd162c8390f9fed6aa53f
-7096955c3cb531b5d11163c5820168be42be3751 cb712dd621b5a726057caa8f1edbc009a29a6c87
-ebb29530bd0b690484e56c406d098c6b162cb61a 9f0da580b0e2c304d9b62a4d030fb84acf465ce5
-22f87fb5b82de004af915827032fd2b37d0796e0 8d6cd15c4ba74b95aa733da06e90a8fc67b8a6b6
-f68d74a4d2525efa34a3ce88b3677581adfcd273 c78b953d6665c3dc0f2c76bf4a52e7d4a2171266
-1fc978f30bcfba9a56abad0cd3a66629663ac6a9 ecd563fdfe4195110f6a94ada247ec5f50f8e8df
-ce66f45fabdd27789bf6276b874456299faf27ab 028486161eb67418896bb054d183bf3604774a8f
-955c29fb99e101ca97caf5b247560f93dd45a30d 26082cc1a5e3c05b7ed582281b4da9cdf5b7201c
-e608e3863aebbed928b0950f3d8275a3c76f22ea e8ca0cefc34bdfff87dedb84c1010dd83f6407f3
-65e108ff74f807ed47e999294ee40f5d391f285d 8094e35d3519b006acd6be39480f01b805f78987
-1ebf42325490148943e5e751582503bcc58181ce 08a63a4ab1913531baf6355601b8464f20f36663
-aee8250d6faead47685fbd43241732e93ab8bbef 1d1702af82bc2dbe7911cfface30defb43cb91af
-6e5bbdc66b78edc1eb0506319b9a9b3f0ff1b25f fb848567b3d166155c51b9a96f636708c4df3caa
-c4dd8ac0b867e064f3e5f2e5aa95562fd654a773 b527e22a95397f59efb489de023dff7a4f48d18f
-4d793268cacaf99cc72d5079c706f1ef6a08aa36 473ac80f4df5193bd0ccbd3ffa101b682e431b69
-e26be7269223948c16ad3d1cbcbd300931a74d15 8cedabab781100df9e504ea4a1a143e786ef307b
-15b50ca6b2ae65ca2ff74e721205833b8171eb58 6cc44913f5599d9c7bec5af20fc8fb437c6ee119
-172d61143f40bfefc2b197e6e1269c3a3bd59ea0 70cb4881f8817e70a1dc850a5c01d4e8f66db355
-769241593da373ffe08bbde59fabf699bcd820b2 a02e21696227cee9439d5ffd64b86534ecb6e867
-e919e13017d2e6b02b72c93e39ae7bde6b15c3d9 da5d92f51e324cbfbdb6fb6d5bb3fb19a3dc6157
-90d47b64e902f3a158171ff640fd70bf585d242a 988203fb0578e60111fda34c74657d732b8ecb64
-ee45066c858ccb92319f54ccee16e114fa8e6076 24f5172dc7e51ffc15465cc1f78929ad048cb801
-b617e51916652a33d732df9fc5bd150f2ac3cd7a 0380ece8bc59fc348605303140209d7dddf237ea
-be1b7863b4ca93730c4995550ed8e9db3d203a08 2edf41516e3a40625ab45d49ecca56223715a936
-e2c0d826d95350b5927450ac896607fb47b48f98 1e4c48900ca4f70305b5ab0f21803330e82541de
-c09ed44e46154e7396782d9272a555fb228179ff 8c01d8d52bb75b62b00e4260e09a999d16e42d18
-b1cee8a0d6957f21c1e771d10bb031a22a984e21 3dca2e8c3483ea2d612f8c0a6f7187e18ff6b971
-ef311ed38970bac58902dd388fffade0016ae785 1f5a33ee9e1ec86c07482dde4e7652a8e4adf579
-cb694b76ffbf81e609c09c9b387aab1291dcb573 7dc49749eb71ecb6c6ebe439f5024fb082083698
-2e71919742b3752587aa8dcfb0cfa41862dcb1bb 966e7353045426df5479011c0b8602d2d7058825
-9a9440b2727148d726dfd6bbbcef323bf28a3acf 962eb455a2ee20f8b20c843e1b2fd9a11dc886e2
-819c67c262773b9855848d1cd6010150afa02ad3 7c4472e0039a54a6ac2b4b84911ab555b8210620
-efe5429b1c3b195f6113fea479350293a9a36af6 464d547df704fd82c9307632abb283e2a0ab34ea
-d29f05487e13db56c5153c7ab7530390a90aa336 4adaf9d39811f90baa3bba8b27024c250a207bb6
-cc65811654f912dffecdf0761bc83dc5c6c13a26 6b0c396b0581f242f338f3b507852e5c331f8e86
-d9f602f939ea087625ddb5e588b12d193a7027a9 25409b7a25121a0068602cb30b6df13e7ab640b7
-ff63612975c2ea8a6426cfcd5c62d35d8c1e9a4c ab714e02b3fab95ff3681d59e351b415e40c88ab
-1b5e6516948cde487b1a528fa032f888001ca50a 988203fb0578e60111fda34c74657d732b8ecb64
-32245cd7592dfa070865cb4a6d8478fbbf944545 ab714e02b3fab95ff3681d59e351b415e40c88ab
-974e7c632f65436db372e1ee0c897658e6a2b9ac ca902388ca6aa15927aa8aa5d0c8adc438459bc5
-f9c3e55f80287d76614fca2c2f1fb9bf480dba50 94e648b6041a608b2bf0d1256cc70ba9bc979be8
-df6580cc7f29dcdb62c4d0e8a0b7939abed20181 eee09e3a6eefc517cbe087d748442f1d71f64ea7
-5fbd272379e33d93922616eb42109954f7ee15c9 77e1b7c1267497ef8c563c1b4b191e72b3864361
-7794921d614a02ceadb76174d91e4ce89a23ac78 cdf79048b8addeb3f7bde263360dd3efb14ac918
-b198ef3f2ec3ccfc78a2852a4f570bf039a59533 35d2759e932f6089d0fc570f1296594c906d1f47
-15d3caa081898b345bfb6e5c251b88c5b3e4753b 2a7122484fd4bdfca6570add19cda23fad5b8ad4
-fe84f48d79d6f619e00b27caecc1207a04c63ed4 f93d43dc8d0dec8415eb85ddb7a05751350e5e4c
-7820486977e61d47a18cd16fef23635bb8b08cc2 9093d4cd6f4956863cab33cd82938a1190b6f6dd
-32de61d2ca7e432e5678ec5c932f2ed39b1d5f44 2686d4b2d45bd5a130d6e4fa0e46a910d4641d17
-8657942edba825b3c545745c2ed77ffe62b15d31 378686a35d8e4f9dd06576b5539df906f83ee709
-33d4f28fe450b30d63b6c62bc467c7009d3f37dc a5892d568bfa9abef250c7763f168c994bcb9d34
-60ec1fea0217bb130a093e20f4d44dd170004559 6a0d18a59befca70f7112bd2371716de046f932a
-3a20526912334f1f72a72fcd2153ba222287c30e 174a1d20ec98187e48ef1f0d4bebff74ca05b92a
-3e2110378cb264b6bcc3c2809a9f1dc5a0cf91e7 06a5f49f0082605523bc00f2bc1b343d9f547be8
-8e86782c7ad96231fb36246c3bf11c61c8350a42 0db3eb6617e47beaedbcaa9ed83889e61f2ce6ee
-d0b8237e657cbbbeac80515e43db5a5f514cfd41 80321db9db2bf83307b2f5472b9cec18283d969a
-2bd2e0d18d1c78da90a6cfd757d27bf4fe67c928 a4f5b51e2a85ce67cc705dc96d305d1b7a6deccd
-e15753d33988f5a8048082d9e55d0b497001ba1e a2cfeca9b7b47e26540e3179c1337aaa3f1ecd2b
-1674d3ecf204577a133a619334513fde85f10ac7 938f29d698f4f92240d3ffff41f22ca57136d9e3
-0464d571ce4cca770cb504a17652aed3457fd553 59e2d538716aa672c64e54a22d01b8d061a10405
-9d7714e5e910d8f93dbe895ea354258e7dc69004 fbbd603f0603fe9cab9591234f6c01c02a30f9cc
-e575c85fbfed50430deb719c287b0fbd2c7c6420 16e19c3360ba7b04f1b09db0d7804e1d63db741b
-c0f09f3dc897dc91caa8465bb88fe42a3c97b8ca 9f72f5bc24dfc8a9ef405baee99e0b8d87591235
-d7f56f6db226865acd974102d50a24dcb55aa430 f9cc7ff08f7081a69301ea9285affe6d127769e6
-12b009103d4b30560ab44ed04821f91c99ee601d 06b47b50e8309e152c1df7d705106c0aa08a086c
-ad47fdc82f6f96aee8bf8a3399181e0cb54b16e8 4e0132f607aa1ce5cb479bad68f9e10487aad818
-0fc205751bb368d311691ef1cbf55e8eb55a1c37 3eff95df5ccf4f41b3b7fe42d865925f5e3494e4
-2624e0d8b6f4ce47b6adf01d2c21203967562d5e 93056bfa1ca1e862606318c322d30f35401ef74a
-2323449d96cb015e2c11d778f8ae6e6c978abbf8 adfbe927ad319e92fa8310ecc9fd63b32ae6347d
-d7a845da24c07df0fe00866f277556e96dd81846 c7aa118f705388787d1906a0060f922e6cbdd3d0
-ec1083bc14be385098cbb8d00d24090da9d88837 c3a376f30ab93bf0d465c2c06163650a09e251d5
-cccf7590588dc64763a703ead6073ffc4677f5ae c3a376f30ab93bf0d465c2c06163650a09e251d5
-7aa8ccc929a29aa269432986a028262234b75ccb 75ee8fd323a8b538ec6d2da5aaf70d2a0184af81
-1acc14a5e7acdabb25e5f87c979ec4c0a4e6b9e1 4ca46a679b806213b4969e12436947313d245476
-9fb7c97d72b89cd424f649d2d1db1fc59e1f3c76 37a7ffeda5b7c5fd30110ac94950d9235859dcb4
-4206f9061a676d830b62ad6c88beb6f98c67f39d c0df030affe8561a5bed364064b4c4a356d790f8
-388c6d09894ac13125901abe14cbefc3cf77fcdd b034a6e27f38f7f6eddb818c38a67b51aaae996b
-4b0319c84c683afe577bfa277c0c2ee04e2b9efd 39ae61249fc79bdb150160d8858541296c7182e3
-b447707f20f5f9f0521125c89d5873d47843ef03 34fb952ee577fe3c29cf5398900a33024f5a0c68
-59d3912cd039293807f0c113f779a317a526475f d20b56aca95ff0d6979d4eb544573d91c00fdea8
-c614b97be0dec63286aec176a614af095231fc0b e51e2cc8508551811a6ce2815e731681c7f8dfab
-2f1c7c17c09742b3f1fa87dfc5f2b2dd9c77ad4d b080f23b413ff8b2551db55dd477d83c92163900
-a97d9d88d15292fa16358dc7ce261c28478d43c6 90f8c8cb825ce192a06d8ab7d0ab2e53eeb05c70
-4de065d99ea25364d20f8c7da547bce60ec3e4a6 8b0ba29832643fe28172fc379e8c72d115c63167
-84c13873fdf809e60018780b673b3c7ef90c22f6 4c2f60ef52c2895231c4a992ffed35a1ebc7a408
-7cd04385d61f11bf056b542a7e663428fc45ab63 5b07dc88c7d064dda7e73913c5d3e7b73ec82f49
-a30dd3983d87dc9bf4dadbac9484ad10771c6d02 11805b57e697b04e6769ff834234ab004bedc5fe
-c2b308f88b9635419d8bb609530530a4109dbefa 6483bdd572589a30da70ad9b3bb5604542767716
-5b9fd93ed01c3a93da690515eedc3ce64571973b efc3eb7f4b9ecab2b21e5cc4a1e88a02ba533255
-8ff4ca292fb72c88e0d723681be9255060f256c2 d0005b0beea0fcbb864db479417a64c4e76c1fa7
-8cd047cd144b06ee5286cf43407494ed6b62c48a bd9f83dedefce69c6cdd836d1682e4e481882e13
-4047e1058f588867acb59402cd492d013e2b50af c15f1e80e3b67ff53f6ff83809323355a2316894
-99a819e25bb659de3b1848edc954b2bff4c3758c 182a87b6e345ff4b27798537a77f5e92b340c417
-dcba08f46b84ec1c7ca28240b65e121f7bd2f2d7 e2897fc99d7a479b7dd8f44e5f55667ba64c3fbb
-d37ec4402f8a03cbbb3285c3ce739ce84e3516be 20e0899ed10f486d9fe62ecf3a9a324d812a6346
-db992ceefa852b1537d0d3d8ecb7cedc34ac9cb7 24119135c7e71aad389cfbc514bd7b17c93f208b
-565fb867998264df0ac6d01d9126e2ba8c5df083 6656f2b856a7a1bed41cfde6a757d40d69b97923
-0d41fd032c78723b2e57a34f80d808ea00553094 eee871f7444d124fd3a7b64e18cbef60daac8f68
-2168aa2800010c07371fa58db75bf9e48499cc2a 78a54c2bef30f137bcf90ffce77789652be7bdef
-d3ad6ea5e74e3d30329bb459c6084c89093d1c5f 0a3d2b3c3cee48a397519e41574a19d04f128336
-5209831e495e6f63b2f929caab57ccd8428933c3 a6b0ddb5efeac827d0f7b8957fdce21a45587f7e
-42426cccf648475cbb052d7e2a7b7b518793ea18 e0fe4af217d8dfb2258dfd6622a2d2d106a9804c
-ce1896cc5b82328ed0634dc9e5b70af48c69e641 e5f658877e60f82cf62c304cbeb51c6e0362a93a
-9e710d6f1da047d19b5a080cab0a8f6f956d2a1a 60d000825eaa6452174865af23e5c7a3ea6f55d4
-80b6110ba41e4fcb0594ae45bb620db5bf36f611 e20d55b05ad754b1dea89dd3d21f5e18ee3b2c76
-37baa70ea94bdfa7c98c3f186e51bfacb2c7c0aa 9f75804ca41b02e8f54a4708fa04ce98864d49a5
-2921db205eb18f71dc5c72693ffc0c2a6a2e7633 f4261c7ceb53e58516e88ccbda4a3acf46aed0ef
-59399a7e4a2d44d9431dba7e3007154457f9353a bd718c768e4bf1c9903716a0597d5fa339b69177
-1a0467d307f3a4dd8272e43e44bbefcc31fbc228 8956c0b3be314bc43db68309dd49c31b6b2ba956
-f458579312c3d5ebf9947abb17910d92ff44d4e6 39d6b1b0dd7124db0156bf11d396b4e4b9834e61
-f0a4e3b74ce419db85d3387e59b98c020b40038a dc9eda99f7c08ad851dfa08dd2b78841874bbb04
-ee333ed4f2c3f15bebfba1e53a71007a8e9ed299 d5cb9c32e1ba0e0bbc2f573505c0439432565f9b
-cf767ad168e2e10337b46fbabf45f05036aed7e9 9a698c3a7c56792e38768067b3abeaf7f5e2ffbe
-011803639866412c3b95e687c898597ac3dcaa33 7c7bd2c7de1aedd7d3e9e26823b2d5a959f375ea
-d2c280defcfedf9a65542ba7309f43e36b134240 9cb3d8fe20a62cc9323bfaa791f3fc4d2796e7e2
-b0bc655de708913e1b19cec48a85a22ac324ccd7 f259c2b936f2f714abe88491d39cda346d7acfbe
-0ff0601e5be262e3995dee247868d58fce7db297 13ebae5bac84eea8f2a21de5e436bd701a8d7f3e
-56c5d185c19dc843e3e63d23d2559d206e5d4d5a 35d3ab83b1a8f5327a04e44b654e39239bb387b8
-6f42dd213449f12b28917f5bb8f59ea6a7eb381b b1b2a90e5077cdcd691e90100edcff727a19b1b9
-6fc79e5a4f14f72ccbc56a708e7b7e79d70261d3 ff2bc12dd5480b922fb012b58159f7330b13262d
-ce85b22f87bf4d5fa852508007eecfb6a75481e9 4947014d12c2ae80fc6fd1e237c5e32181dbdaf5
-47f95a5a48c5fe8ba3802dde4bb4701382a6ce08 f12c54321486a31d37fe7c44f4cc0c52beef21cf
-593455d5b7687e88827f5e4d2d41546b1749c1b9 7dc138f512356ff570a56214cb537cdb62f4b94e
-e537eb66055340e66f1c4e60028ebef751580d8f 60485d820cc25069cff8e391906624c1806f99aa
-375004ab28fec7fd39910db452cf12dc952678e8 5c11bd5960d1ad9ed7949ef95a5c505747464076
-30e4f7210a2cd403343fcf5407e1217bedcd428b 4cc75b287c61769b61a2aa9501839cb8fd441fc9
-22f389b0ad20dad794d20aadac4f5a307a4e306c 84fb93ee49d5de19bd6cf0489ba59fbda5b085b8
-9144f42edc62a208dd0be1f1ac77074a5d31c0aa d1640aadb920b676e5514aa260180f11effb62db
-54ab2f208eaf1a56dbd214110ecb4d632c558d71 5b469611921ca4791fac1c393940d9a013016cac
-78923646539d9808bdc15d4861be441a89ad632c fe65874a2d1eea33542308ac28380fc60a5486c4
-6fffaeca5044af9f2efdfd9864bef22c303b71ca 8357322e5a41b51778bf4c43d35d795ad49c885e
-f5e7ddda26c1180c0f2b90fa915f0c289bb01356 39bdd2cde9599956f77e8af1c83fcc45a496cc15
-01006aaa297f9735bcd72de57f9623b83fa7484b c4812a99a5b5c69608d9e1e41eca395ae67dd278
-f5134e0a6534706d829a5be0b25a2226600c9c40 a1d57e90910b7ba87803f5239ec1d542dfa9023d
-0b9d1c1a4b5ed6ecacc3ffd608fd48411a695336 3702ceb5c93f9ebbdcc629ec3f7c5a48c293fa8e
-48c14c992e088a8ef634baeee5f8878a13869e60 c78859bf41188926b19b210b834e16795fa384e3
-1afa5aaf273b64c420a6e3ec964e659549bfd70a ded5d05b2f3a83c1f97209c07f9e432d7dd1b8b8
-625c9154258be32bbf99bd03de50de0c76cb0f35 882f34871bcd764b9208757d30029476ffc062e7
-8ce696aa951ae476e60c9b69e4c2b928b86e7e2a f6d97054976eb443d749b07333d8e04a31c72210
-b44a400205587cf230bd50eb6ffda75a54e87f3e 4b6459995a113c2aa9c8247f455dfb1a0f5a97e9
-816a01143eaf4f7e5a3c51ab17171e759a9f2f1d c1aa4150b46b6a9697b20a7a8fe513c0a08dc023
-3ee9e9b53340c7fcac96cc61efd8c31c80b35320 20cb6ea7e6552f750980f1999133b7c4a1da07ea
-90d7853020339dc1ec05f111fa46204926bb5a49 1124ce9acd8424be5131783f03214c9efb2bb071
-151a6e36293d918c8eedb8c47a5b2449482305ab f7dc841fbdb2ad53558a664fc6b5a0b587d51b1a
-4620695c43564b6c00ec52ce3d5b5d6bfefc5dfa 44f57298b9f20e324f890e265282fa1c68af9efa
-8e7ac6d15bc993c867875bea49462f78abc9fb05 cd315cded0341a7dd1166e85ecc25d4636113b28
-a54d18cf6a8f875b739b0009eae8f955c1dec62d aae96cb4d69c917e1ce970351bec091942dceb5e
-03d3066961d69e1dc34d33a07b4d7ad4f98cce23 4f03a6bf7f10ef5860b639ecc7334cf5530f4ba1
-e327fc24efeb1e73dedccf323240689f2ed4f561 ccf00d104937d294c351984f6b21661c2a62386e
-7c351b0a6a9c9f484b66a5e416012531afacdf81 10e0c38aac74dc1ce228df9f0b10ad315e0b68d7
-f06f4514dd2a59e61d9e52c464847b2ebea0b065 cebf31dcdb7539451f592ef258db2965eb161349
-d67f84e1ff1bb8dc823f6230705bc7f440acd3f5 9a2346627f60da7c3de2ca92b520af390af379b9
-203bd69023f65a97500784a051c32c00c900322c 3b1bec3620cf3e35563479f2165200904b333dc8
-9783b7a19a1c6f2abac981c2bbe0dc65b7385bf3 3145388f7d71182710c3d530ec08d3e90e7d3aea
-fa0bd2ed69ac8db7ca06ce522246f8ada76b1bc2 705cfaa6c9bd8fa26a23feab8acbd0bfd2647de3
-c9b5783dbb4ea4b887d1e0fba8f30691dd8f7509 93ee6ac4a08aad6c2399bbddd3f13aab8c98f2f8
-efd661c093e47ba8425c6d912490946fcae36903 d571a0cdf3754c3fc2283d2138ab71d97cbeab39
-d752e03a4d7d17effd1ce5a284ff4929fe57b8d1 e139fab26653000a4c8115efd016a46fb47532f2
-721158770c4d677eb6a7aa4e10a5c9bc443d75f2 03bccb137ff594bf75da901bc4666d51a15b2df8
-451edb68feac2b8e97b8fd2360f2a5ffe9367182 265676933c77f86b26ed6758198aec22c91a4423
-9ff8b753f79c66672c4a17f4c966203b1419890a 9475dc172f630ad4421c39e0c146950552e3627d
-0c79677ed6f1ed5bbfda837c1d2e1efb3379ed1a 8cad3858c5d160b9d76b66e9253bfb1c5135dc35
-e6fc0064b744e2de8f975367052fcb2af2006036 eb40356a286df5bf753177129171262d40511357
-936ad0e8796c767c5d7e78ff9fbf0e7aa1dd1c1d fc01e6a5a6414b471a1210613c7aab5579195ca5
-7a17166ba55f9bf152535d516f9f5f778017f623 21279ec774376f431f6b2009800d75ab9b59c4d5
-22febc8dd12079e8992a4fc47586c9a5c726c911 993df8bb053163e8ee4aab29c50685707fb04778
-4755e15fd1b06d04650a1ee55cac477a90f735f6 9cb1b6cabe851ecfce8f7af9a68d165d9e0551ed
-a5957fb400476d44095c298c72ca2963eeeffb96 7046b64789118c00d08f52756d14a21bc268eea6
-8438b47ba9803aafff4e1062077c211052d9e863 2b8fb794639df5f66513e83ff947ac070831c046
-7c5889d666e78ff6aa53c8ee173b664f2ca85098 42cd2959e6b00c71b243a55a13f5c5e1d70f209b
-ae7ad60d2fadf2afe474e79d9895073d296f69c4 40847bc1f44bb47e9d0d4c964d6a34ff57fc955f
-e327a4fd65d71258fa4cb2871d4f691003a4cf77 b6d96f2425a21b77345421f6515bc4481a289173
-7599f0dfb9cb15b50349a2f1a74adb36630fe3f1 2f57fdda10a30c726824276343caf7d9e3560e68
-e17ec1ea6e1b652d3db28ddfbd9b83e5ed760a82 137df32a0c8dc304fc968cf968e0ef37ce3e0087
-4c1775f1d5fd178f42bda39b3f7a08fcaf6c0170 b9a8ba1af31476874d10c50a46fab099bab93fc8
-65fe1fd01c998aaec9b9a8971209112b55aebc50 3b2ace1ac21fc79a39e8bfbf1a9eee1e7f0393ed
-41df2619d690b7340a514132ca3419d389ba2cfe 3469d90a115b900f8f250e137bbd9b684130f5d2
-8bb50206850c18f798cdd0b5d610b07fa3166367 3469d90a115b900f8f250e137bbd9b684130f5d2
-4b3b727fb39cfa85093d5147280548f3dbd47218 8c4f61f68294fe38745eeacc2e561c8521eefebf
-0eaa4fd5ae5cda19396f84836b3c7760568b390f 2ebffbec7c272b99b1efa58eee64d2fe7673fb48
-2a6fd42989bdaef409da103da3565b4bab982d24 02ecfa5cd85cd5eb77befcebde511b4851a99621
-5bb17421d4755bf4b5a56edf3d74812f961c5e7d 3f496017705b69a7389cac105871621bb3ddb88a
-6dc1065c1e3fa716cc2a8524bab78a056581e4f1 3939b668afa3b5cc896c3096cdfdb9aa7aa32875
-b15910b90a5c8908a767018f5ec6f1a6bd4ef054 c05ffa08f1776065371f65e6ecedb96d6eb53365
-2d7fe033b42bd8d8fe9f83f8e4c8410467d13c25 c1a7b1bf1fcdf149a755be8093c7c2d5a59c4008
-4342a6ef9f0f3ea53113f06f0dbb644627927261 1158b74011ace9ee522682d369168549c7b1501f
-9936f73b60b01770eb1a5f0302085061dd950331 a95d7a82054b1ae8d51f6a63b87d8e0688f53af1
-15ccb42f21dd7c3913336f5e23bc35cba7744b97 2de4c59b0abf6fdbfdf24f2a7d473cc9b0afc807
-3c78352568115bc0c9e7344706eba00aede019a0 c27599959ff1fd125591cca0adb6176bdc4e7c79
-64124bb866f86225bfaee37ca93abe98983bb151 676a80b4c548a1a58e5dbf5cbdb883ad5232d1d9
-9e4496474899b2372d88307f68e03ef0bfb0819c 30985f3bd9fbdc5f0b007244d88e0a7bd06a746f
-74799019977a6fffaeeb7ff861c6fa9a4c7dce28 8aa3966728f45f87b3cdc3393bad05cb464a8f52
-7a0364305e98b573d2ff93c251841ff107d5e1cb de2a884bebb8210886f2db63943cac23ce19a74c
-85b01bba6880b495215d5f46297854a4a05a05b6 1a4cc7dccfade6097aafbbba063c63e9fac52b60
-878a1f2a60c9dfdcce16603a73d64b270aa95019 3a020b750d40e92df55fdfb133f64fb5753a1cf6
-8c41087e9733267b4dd2fc6c53236a9bc8db1821 51bd9ef57fc871b859598ae406be5b571c3785a1
-c2cd4b7c6ee81d6afb8d4fdf302af8a35662b536 3b1d6e51b54cdeb40fb3c4f1fde94b4b6497d729
-3b6c707f83f222b023eed176cbeb8c2036dce87b 14200799e339247de65e02bf7089f5dc08e5197e
-639770c620e00d2a3ecac598c4ec03ec48e9253b e809480d91f0f058d8bba9e9950bc19bdbbcd0c3
-c8ccfee8bfda161a355e8c016b84c3a68f4d93d9 107b27008eff43b0f557264a1311ac6383bfd8b0
-19d477bf847547c5511179e1018572dfd15b3ee5 633855e625f1d2d167f601852f4bdbc57e4c91f9
-66a34666454652cadd7c9c6229e9cfbea2e39221 f6a48c6ea3b80fb24a124560ecab89e37d63c7c8
-c549dbdc260a485faa702c2aa38b0a975a466320 6b5964a8b23d4566b259e19528d10b4baeb866e7
-1c0a899e0b77e9d0b57e0791cd71c81049d129b2 1989c37425722a8abc0e771b2d04caa021c22757
-0781dc197154e07551c2855e152feb7e84a72523 a47965c7ee15b75d6e7a60288a1d9227afd8f8d2
-de14a4f74bf8700fe90b80fcf43ebae458a76241 c00914a784e8a6260b7bc05473f8c1b606ba3135
-6e55d7072f314ef307ced55a6abf6f535cd84286 9d6181d2cb38683bfa6e46343cc40d0c5bf10cc0
-6912fbe12bb35cf1eef77157c2af953ad080f502 e11a81baa9ce8e8d7ecde837ccf98ebf9e3497c5
-10d64539b6451d1b637128ce2718d30207de70c5 4b13adc50354688c7359ca914d93bc53ae19365c
-6fdd352b80d68f90425465da3e1fcfa98cfd1a19 34e0676063a6c6156febdb643c6c77a3df204774
-0f5587cd4fa024c96b79edf40198464a7192cb8f 495d19669a9787b58574504f0730b5abd972be57
-32a7d12bd6363047a39a901f0d322cefec624882 99158efeed4fa261e9888d4f00e89625f7c66304
-1e7386f9dbcb779f8fcdefb08a26b107dbaf43fa 99a63d7ee83dd3bee3fcaf1512cd7c7bdd7db952
-c73fb2ea49241d4b18080a9a783e521ab4f7839b 551e8211240464641b87d3885745a7acd8711509
-9b94d915da46b7b1489f0a6f2e5e0e185eefdd34 c2ffddaca81aeeb9963f918ff95a7475e8c6dc51
-290fc0849b80e7b7c9a71f991b21a897c7d5d7ce 6742e1f549be9b50bbe24f0fcbd08dc9d3025170
-bf232b39ceb8693044edf02d2e617f85ed99f958 7ad7b7e8fb939205c88ba060f1eb8db8402ebc29
-b42f2754145ee7e2424a3036645f2b52d55012d0 aa1bd77a386ad238118054f1ec0da1c52b678885
-7d909cf3a93b8ef4071b6996fc99c7d7a9fe9f05 0c91725a8e01eee47fd9625151e1377143c9ab8a
-ab4259fab08edb2d26197146685ec18f3bb80b52 467f3dce6ca383b0b4cb2db8d191d265505949ec
-577afe7220e183ef9105eb1435a6e1fde1c7509f d7e93d57521229b3048727164d27ace4050ecf52
-8b780144f6dfb8f1d64e2c8b44113310123de944 75280739180331abbf83a0948fb1c1da643a88b1
-c4f787709cf885238cb0d5f1dcfb19a4192a2590 1120f0e92ca381595f44e85ef19623db6660f3ec
-12549f83c32719ade8f75a314c6f99705e5fa5aa abb1339bf2cf5f4af48742d93ab52f14aa0ccf7b
-35481567974fdaf9f355439ec88014026d764ceb 6f0274821d6cf3f30456019d22be15f01c620be2
-bf60f84977ef6cafb2c0b57b809e969c1a1f86c8 9bd65ac2d705ffa2d90e4bf9339c7e2acfaaab8a
-2d82f9c576d43e4b35e06bc2e3a3609922179f8a 5a719a0e249e250a47a7eddffb573a9d9bb5daaa
-b8e274c55fe14ea567b420ad4988658984e0bcdc 7cd5360353b047d7ef2925a3128a645f4507c713
-95ca9b914805cbf73bb27ca53326b9118270fb36 d2a51e3024bf26b020dec47b725126dad2f0e32c
-eb3d884ae029343865625191a59b0d54e4a22555 5871a4694c9aac454857c33d06b7a339f23341b8
-ca9bcf8078bf5ff4e09d46175511fafe52f0018b 7dd76bdbbc47c612ae5c9e8bc8daedec7c5b7a70
-8ac372470b411a6d0f5426f2c5cdb11760f88206 e38ade761350353fcf7736a2687c5f072222c839
-19f1bafe798885135b614312fb664eaed6446c44 99c82126639b725a9b29ea084d5a7df2e2681600
-b59b55567289e0c04df7ec9556b8cdcd01639dfe 1636e8e89ce439cd28e8c58c086ea54cc89530f0
-a292bfac3a22b8b9636d86c4a85fea138ad3e32f 45f05955e5cf1693396e486ecad8c05795985062
-61c82816aa447d379030c2f00283b7d27aa72684 720f1fdde9e52e90f87e433c41ee7ab7105064f6
-68925ab25227fbb6c36da32a49a86295906cbb54 55de168c5bd9324b4e36470f38847fff582f30cb
-2e5494c84c012a835a37f90dc6cd817f89052af8 e0db6712f305dc19d15cea7851b645e3282a82f8
-d4cfe9814728be0f89265d9dac7267fd956f4b8f 3753a77af5c26c556c7a2053cdc1ce28dbf98ca6
-182afc2ad57756c2d5f15354751b617ab221fb18 cec7c088d70f99ccc2faadab35a13815f2f8f167
-d030acf54d22bdc415fd39ebeec1e276e8d96217 8a35fe438067cb45648d346ff580035667cf4dda
-dbe412dde99e53e9eea17a99352f6739f4438476 943f8d0ea87115de778c69dc4de2cefcd7d260d1
-cbac8ca300e0358a730111ce3dad50e789c4fc34 8f9bef609fcb2aed21a958fcaeb685abf0162bb0
-2d3adc62f235459f9ac856c61d73f5be46a63330 fb70d88548fefe638e66923ab98fb7217275a999
-f1fc0ddcfd3d58590a0b011933e91bd705044a99 076e7f6016dcef3737958d3ee780d1619f088efb
-2ff0437e6986b98f92a92d89120fb24505e812e8 29a00a32030bee2efd40981af163371838a8ae90
-e6fee06798b3151c828b741b4b17f08c9aa2451e 135849ef92fed5dec03943b3397dd4ae49543730
-7cfd654ccb414c46ea75448dd1c880e3c5be1a6a 9e5e4afa0129692bc9b0f2a6305b0d43e60372e8
-856274c7da8bc9b468fda6800768dd8f628b574c aae827312b15c1fb861730541d8ca72577c419d2
-a6abe03c1aad0146c672f0c09382ebb030ef54d2 dd1cd0687fc4762e1734de5b20f49bd76d69f91c
-a1d0afa7a705d12a286150125b0a8ef15ff76bb9 9c61486db64179e0142fd521b7c6c03119911296
-3fba90ac8fc944af8127b4ed6c973e1c327ac2a6 1a652eb76e1f607e57a66533a65b03cb61d4b917
-0de3082ccd52d1538e3aeaf270fddf7c34c8a831 6dc3d7920e4c1db45859118951277fe4ea2f012c
-998152ad10d2d4ce74c4bb532c3ec86ea811509f 7ad040447ac24b07de7139f72c21f0fea6bab3e4
-d52e25b5b5b12b781be685a70659505974b99766 3a57bdf05b181d5aa2ea406bf09e85feb15296a1
-75c0738c71eb98c493371c007a88f4a6ecb3d152 500d2f4092a81020466105a78b49f92aa168a2ea
-37f23e8c2a7abefa3e340b0ac1c941b88a7e3dcc 051b34297504ec92188651c8ff16cc3b0acf5d99
-2056d0843691dae7ff49b8bf7a4b59eaaf01c60f 2e73e40cf2aa7e0b3ce2431b076215d1c0090407
-7f2fa1aa07ea841a8f3258bd4509e265c1351a26 9efb0fa6bb7a4e111d9143bbf97226d3f46ccc53
-fc8e933b97f586751a6759c82681acc5ad7ff677 fc7335126230684cdff588c7b32e13cdbd81dad7
-7ef13cdc15c3c0a8daf390d5120be63ba51cf29c b6ef5fa783153fe58f1765e9b7f2422bd7b6a4b5
-ac3e72c616c4160ddb682a60ca4090f527439791 b77337d5d3d1736162296685413bdb53de0c6c95
-4f2f4458450955eee2f58c85433c4ab027bc760f 879228f7a165e3d3c2c5a051126f7d1e5d62d1c7
-4feb1bba347a2a5acec7277e75f343179711cb4e 8318755281989263e38ca636d77f18db06dab783
-5f85034942906788822cc5f87409e3c3b8622e99 3cb5febe81d26c92ce15638c66409d1ced4eb139
-cef951fc60f25bdebc960a322c2e9a252b67f729 193d0ca145ba26996049ddc2ba622466aca529e0
-b44d64ef5ac457a8e0ff7cb07758826091bcda7e 814e1d364c5fa22e7a729c31f8e5c480798c44d0
-346f315637c6cfd9efac3853ac5e8bf8fe0af02c 0dc4bafe325bf1d4b4a4e8ffefe60bb0f21e75bd
-664c89ecd2cd8a8d1b383117004f75b113a97257 bff1d11d4a18ba383bd8f183d9a08fe36dad682c
-80b14a75cf8c65a838b16a6ebb74aec1b622ad0b f3c371243e94163eae060eb3067d50ee9f95e2d2
-d7b3f4943840a6cf5dfb0b4b717942c5aee8a4a3 fb90a3d689caec4712efcaed07666b5ecfe65dc7
-dd6939683f389470a0fb82daa8762082a46e1d54 6ac833a0cd949f40ce82292e1f95898beba14d86
-40556099a7f674e389cb6f43a89750e88997da6c 8d4ac5108c152a77da39f056d6004c2cbc600929
-022e29802b7d90712236d9d713fcede8590dfd58 c77b6616e10d7fd561dd98c793bf65d643e25ba4
-8bcc62622aba2ada6e1818b8789c8c5f10212210 c9bcd4429342e9bcbcac3d46d3241f6ea391953f
-161e1f48c120c382c1f8daa42c79659c8594f1bc 67f75d8a5d8de598f7d1ad79c727ccb7400b08c8
-df83aa66632b63ae0ece74172236c90d1e02c4aa 6aea6c30dc79dc7e11a3f6b6416ed8c08e6c44c0
-3afce25398874992e5fa986ad37720376b6aa840 f3c371243e94163eae060eb3067d50ee9f95e2d2
-8d9f801ce542b37b8314ee6e313f36a6927acc31 8d4ac5108c152a77da39f056d6004c2cbc600929
-ba053ffcb69073a5285a4a1bc6c2a217c68b4d9a 9d981f5898198a531d787ad681b26075b236c0e3
-c1aaf46ee681f3f031647d5c6ac976476ce1c7f8 8f77171310bec7eef5847e593524807b5c7f0935
-80ce5ec951b230a64f03d7dcc2c6e457c5a53ddb 774cc2ef1e3ae663b0e1e75f0a445b93fd036d23
-dd44dac251779b62d9244b6e17592244eb3a688c f70918cef4aea2f5c6acf5e7203d6c692bdee0c9
-07066a9a6467521279895348633719c6cae3800b c8c56e80c23c46fc5af50fd82533e9a2b102d654
-45c3151eaf015dad5eb20c8d42d41932667c35b6 ebb01811cd2f1d17ba66757e3497406263399460
-f03ce2da8c62310c5f09c9018c4caf20a3488f9e bff90456f5f2ccc5dc5a76e3082a3c5d4a03327f
-666cf5f5e4c725624caeac53f4fd27cb774e369a 581b904359544a1965eb06e7eb8a9a61ad14f681
-8383ea290eedc5f211d7eb0948d94c577f63697f 4837526c32efe82e0bbf0515c8d6bb8ac36be85e
-2f83242734973a41b708bdcc2eba8241af964ba1 92cced412e1035995b74a004166665ecefc9a98d
-7bc88af0b9098d641b2b28e2a3ec3e774ecf65ec 218b174256b27eb1a8b0647308bd3ca3312189a1
-db91c27a696e0a4a9c3b12bf357f29f0c03d4605 f44b8637da20a495b4de457de3294cb45d7380d4
-adac6d9db636282ab26ee43f01d8e2cf09ac8369 ba3b059d64f66b44e0b6c11e085edd570e8b7b56
-ac65a3fc03b3d4766bd29e880ed45a6f821c167f 4a8618b9d7f65a03436cab39f92a8394678b5f9b
-be6d18d2199502b920eacde2197b2c0209a4cd88 25d2120941c18666e86c76b943e3e655afa7dedb
-28c4c0a1096a66d8aced77961a28e1a3ada057c8 c5c98f0c3d3734e15749ad4be492441a4495668b
-37d4b2ccb5b05707ad854ceb8f85ce6223e4c8ae 1ab9582a29cccfa5b432e3e6681145fb6ab66745
-017d739f6be46bc5c43d465fc6eafbef8f55ca2d b4eaa4283b7971b1a89f510b3fcbfc51ea0f41d2
-1dab587ab3c1912aeb811ef83f2ebf07db073032 271ef3943b56c928b2f14acd884374a18b07a0f9
-489d95a0f4e4c81d7d520bfca7c3e475c15ee74d 189b8aa91585cd575ba6cfd872e2cdc4696af83a
-373f096726f48eeb4422686328dc2af2ff368293 90657ecf9c79fb385adc3a93180bf933e6b8464b
-71c419cff89bf159f7a5ac9543676a66db7c829b 285b8bc7cce9730c5c644d192a5f59f4ccbfd33d
-dd76c14c69eb5cd5d655aee4290ced75ef2c2799 2848ea3905471cf542abed5c5f5cf026e645c2c3
-dc4781099dee46e5d6b5444a378e498b7982447d 5dbada1200b7e9493e21c5f17e70c5b47d28ee1d
-f29e841fac1957fa8ca73db4bbd60fea7e4346f4 c015221f0248b209090d38087e6d1b8206142c24
-bca2bc94257dcfb739880ad5586f829d161de657 0b49dd30a114350d565a4f25a356fe67a23f1fd8
-14fc6d2927982a0a2fd8c0633961d2657c82477f 78283f16edfdcae1504d4cb355bc6451bd3aba10
-f80938a0891e1a195a1a7ff4d5adee1c8c1d3fd3 2f957911e34e5894b24ca8abf231517601e6c2d9
-e389280351cda95d310fee87f4f81a4615ed979c 5e987d12695873585d683d3ed6f0192dc9e58a10
-6f61468b3268b0ce4969a400f75619d5f4ac1d93 7a6b2abc4022b0a329687244a9e6545bbf4f7047
-5ff97d4926bf5bfbcf8d925e0b26276919f7980c b437c67e6989e9d5fa2f25932f44101380cd6135
-e73a78c7c2076d0a01b3e3b909a39cbb5353c510 ac45ba6638e4a2a58c218b7e2794978c3e0afbba
-d66580cebf708cfb71efdbdc83ab95e0890b96e3 092b5ce115dec0b926f1fe3805ede6cdc0f5cd92
-c8142c9d691245ec2d67c8b78d41b590f14a4ddc 3d583167f7ed847064a6568f5396d44343069ff5
-fd47a0f0eacbe92de976c0049f82cc5d7bdc4131 b7c8e441c96a92427049e336eb0f96a87a03e4d1
-d256fa30329287c650fcceea92311770a4cfc83f 70dccd2ce4203f8f36717aa93f472364b2e57b22
-14b697beb168b8a063b4a705101e34a61f2ce5ca 7e9405450222dc03d363c277e5be5db319ed0c07
-2a0c9c964baa4e00aa02890c47e0b0a2a0be230b 38ba9a39517d2c2156ef6d5fc806ef00e3d2fc36
-d38c580c25a9bc66921b351ea285489d69a39b50 19997f555191bb8508acd302806f56be04d7da7f
-f9ee2c852adbbbb87918f4c50249ce66db85cf26 167ac759d32ff1b5481ede24533c0d0b30998abb
-c17a00626efe6a4db6cd59bc464e3e27b6433036 1a53ace5b72bccc26fb17efe78070a0b1342d4b2
-381cac97cf51de9e874b51e0b94b0c028c336894 2802bcd952bc53b89fb1c0ff63f5223b25840983
-11e080536a0a7084bc8738c9667010470981e5d1 1d251b6b8f6129ef3744a0da21dbd17172d71b6a
-f68a1ff3498ef48415c48e52cac2b8c80a45d4a6 256b7dd8cb15ad3d2bdc8ee99b2a1f7f1e494d1f
-762ac28300b10ffb7ec192e08a013dd51891517f 990a934e670e2d078df9cbc5968d055c39b7ec7f
-2ebd0e594f57b3dc544831975c26a9ce0ddb985d 290be2bf65bf65a07f90d3a013a319132423fb2a
-5128d49c1dae302c41b89f065c3dd43850f34997 cbfb1d73ecf0db26b595b01f8155ba9ab904c243
-f8cb0871d861cbb55806a3883cc6f0dc8f94e6c0 d5e4e7e38c6bd33748a07ec4ad341ee7b99cd539
-befd741c1f99300548d5d1e6327e6f920e5b1434 db745b77e666de0903025af039a27d6334aa9732
-b70461684b45f53da3daea3c9bb9ed9392a07722 d0043efe8163d6d08cb3e98ae7f07bab07320c3f
-26dfeef82a1d2adf4415aa264d3ee4466b3dec5c 93737e849b85e23ceed604ac5badb07a6e24a13a
-24350c8f2e4f279c7aef8b15f29bad1488467a6b 574f83f77671ed5135d179d231b233379051c068
-d4521df9432f89b5f2cefb532e51ac0efb7e37f6 35119092260a6326a8a3a78d3755c2a8099b801c
-5fe8a29871271b9a73b28f13138f51b4f890040e c6b62923e9e731b31efa5302ee91111356a0f3fb
-cea2d8987f8f9b138e5b04618ca5e9fb41ce76b7 25b6f46454a0da1b9fca8e97114a1025d693377a
-9e5c01c283f7306c8cf091736dd0bd8243007d5d 6db79988f40e235ddc1f23a6ffde9e609ee79741
-8dd4a52c014d3c0eb6b62afc0d44195750420fc1 8996ee106d53b8f7808e1aff0e55d7fe36dd3971
-a630b2420b89d847c43ddf6ccd08391cfd3354eb bd24aa3faab002a852dea1e3cb91ca72842b4a8a
-152f2db221fbc0018064e1e51ab5e360ab04db69 f6e5074156545a1da4d8c00bb4b0b06fd275edd2
-72a960008b78436a5a89035d78c79a87eccdb130 a96992516884eff6a428813ee96a7ae95261650a
-d72415638615a63bf5ad5ba2a68dcb21b0e2506e dcf362b5ac415969d0a4d9b983eb67786d27cb70
-e0bb1735312d5f617745c8cc3491e1f85c493774 80851918062285ef43f5f0c2e9c9ff9d9db8edfe
-45b0881a6b1c2a0e968120a28bc3ea3db7d29117 eb63036789646c3571602b52bb18a5dc53a28e4a
-eadc9ebd83c1f72e6754a9177be1771934855f8c 8506a1810ddb40fe24339702ca310787263461fe
-2b0d8016fbe96ef5441cf317c81a41d9417617cc d2059f15190b063e5a44f822204a8bed162edfc4
-ae4a557181cb1d06ba0104eadcdb6a479a33a33f 6cddca1da4e8ff7fa37a150355c6fa9ac3945c49
-5fd560ad6f891bc5bc43153f9be8c8994107f7fe 5c7732339cbb37d58277506508cc76df1d4f4ce3
-4834dba1df60847a56536eba6a95bd2f297a0c0d 5edfc6eb2dbdd6d5bfcf71064f2c4c717e0b7f2f
-0b836655d43a2aedf41ba3989964d136529d195a b97e22318ac3da74653191a0e1aacae8f149ed47
-c4a4831cb4e0152bc72fdc59f1f04c54fff00e3a eb94619140d5ed875b77480a0d8a0e4f96ac95d2
-aea03f65a5246491aa876ed3ae06369e1e8464ed e6fa011e8c0282440fd97e5e875a7f8850f9877f
-86ba7f38c1cf8723316f59661fb3176d4922e1db df9e611d3ee1f38c0a0e062a369b078dcbd24f5e
-bb09006fa3c163913b767e877f6ecd4c958ecc4a bf249fe3b7b0f64961970a9665701f3ae9a8db09
-d8872272a9567ef3e431c831988c0f515c1c307f f5745059933f6d5dc99c47704e8d1f4bb52cde18
-7b3da951a6147d34ebabd9821ea994e22bd56f52 4b6d8083d259759b62ea858c1b7095d78b79c6bc
-b11fda21c9e67b8c0d69af51b9cb5d8716286eb5 ae9b2224caf86caa28961a6b52ce97b6a8d383e2
-3c2fece289756c7547275b0cbb74c1887cd31a20 da5d9d89c5c01d79e5f98bdbe53762f2b65e465d
-e2d745f07adc6d1628b4a7dcc68f905f0276aa09 6eebd542d85b561d75b69cd5cde69b8bc0e7f17d
-088dbf6acfd78dc5fd838d61cc2f7a255b70035e cade0c852fd42e4392dd833b5cfdc56750725af3
-d7f7fa4bd25186d15b91b6c5f0ec1768998793a6 04d8e4f62eb9e5d891f346f072d991b37d574cac
-59e9246b72eedbb8e440a351a19927bfc80c05ca 0f0b62626e21d0dd3612e0316c925edb23c45f43
-f2a51b9957c0fd82d4faab26b5d4580ad820950d 0d13626b0b24b88050709cb71fec51019c678286
-230d88814ed552a158b0e33d214ed1c5c938bb41 04dce1a3eb8a52fe1a89b8456838748d332169de
-560d601d85b022bfb30ac4e2a7d8e0e7a39ffb34 055f39c1a2f4852bea83e1ff47062c925b4542a4
-ef50e21800317e850c428b49d4530a941c49fa84 c3139dfbdd0ae7f93be2d48c0c8d47aa0a95c294
-4208bc29696678f6c072f36bcad49ad4dc70f56e e5071189dfd41c6fed8bf2ee649198ef5f58c944
-24667b1dd8d1c63d6009a31e5fd1a6da4c413296 2cbabf9a0672b203e9485054647787475868def1
-2004ab94aa0c43b97c6f616c336d60e411c57697 75d7a8f07ccbec9f5c86603011089386a2db0d9b
-d70141bb68cc8c2dbfe553edb2d17cb8512c4a7c 21c4fb00d11213ee15bde44139b0e5d4b5dac9df
-1bfd1e36c944f37b4b9ed2afa84f119909c0fbcd fb7659312c3e46464c23cc3bac5c155ae005ac5e
-2d22bde047fc3b342222d6cba343ed33435e7765 21c4fb00d11213ee15bde44139b0e5d4b5dac9df
-0f0a3632a5b02620b6a1411058da559e284440e9 de1aca241aad7e5cc1f1ec4e8228fbe9dea593ec
-f9818f8b13a702744335516b7aa0897e62d9cb29 609e5e2dce52852f2ccfb8669b2d1864c8c90ea2
-4dc8e0f28689629b67cf2c874c46a1479203c21f 126b0b9fcfe0b192e7a5a4b56b20dc42b10315eb
-a03e4d4557032f45cfe63747058d14057810636e 6cd6408ec6cc166433531161c63f2106d683243b
-06914326b4cccd27082ae2daf9c895ab2aae0711 e1f06c4a6a364be8485aca4cffc36504cf4e8dca
-4f61337b683ff42425783df88edcd38eb1c0b290 4063e1c0b4574367686b09d35f05c7a7f25dfefe
-61a83065d14662810ad64297159f5fc29eb4caeb 7c3f0be53793d738adcf05ebdda12f039d239cc8
-ed585d764cc7ab25fa76495c023d237286c8bc0f 589421862494adf47e622bdec7b7386a52e8f595
-156184f40e0e00f044b9c1e2dfbb0ba40158e42d 391f9937e2727ba632cd60c41bb06afbf0d65b21
-e0e11914f6d688bfacae1b964cb1c8a53dae28ce 7394b93c7077eb9b189c47f3b3f46c458078ee9c
-c3472c49eb00b0feb264b0c671ae1cb73ef6664e 5f854a81563af026e22a60010dadb6d593332174
-acb23ff35d9481e7fe2baf80ffc3a3d449d83281 c92c4a6fc4e61067ac84952f5a49df4a30638884
-56b1189d3eac88dc06424750bbf4f247f96f869d 597299114deffbfb502a81e5ff1ac76982189cf5
-26dd1cb1a3c5c62b4e1c83eb617a43f3adbff072 e2a94a2a5ea14a5f0457ab101575ab9578063cb3
-00256280c44e35ce32521d8b2c2c0a83aaf0471f 8c58bf57aa3c2f34553be42dec3084b86bb8ec86
-64e283ec0c6c562463a3557e20aab9d14147ed1b 21c4fb00d11213ee15bde44139b0e5d4b5dac9df
-a4ba50289dc8e1fd6153789fd8cd7293adc4cf8b 6cd6408ec6cc166433531161c63f2106d683243b
-bbe4bf59a81ceb310b0fd3dc01aac16ee4e03696 4063e1c0b4574367686b09d35f05c7a7f25dfefe
-ce7353fe2580f9021a00b8ec284c144dc41fee4b 8c58bf57aa3c2f34553be42dec3084b86bb8ec86
-cf70af09e474653fd3460de45771e5abfd43190d c93a00b458b1d1b37d4877353cb301f7f16c244d
-89d1c66e2d421e6706b3af045b36ba0be88a7ac5 8c3ebd9e6d27e018aac18db1d4b0d9df99018ffd
-8c3ca50bed71ce3f78e2a3175f39064c227b1503 8c3ebd9e6d27e018aac18db1d4b0d9df99018ffd
-c9cba188c6a54cca197c620e62b1df37e9afc648 7540e5f591ec483e585973f2351e0d912c7bde38
-1654be5558a2be4ed29b1debe377817dd4f10510 b6347509c318c09e31cffc802d16be7b1646a6f0
-c995ee6de0606e2cf1310787d1ff84e94ef4f069 b6347509c318c09e31cffc802d16be7b1646a6f0
-7fb07af02c73755cc35e00a5321b8175a9981434 26133883fb042137dc6156d3e46c3146f0e3ca17
-f309cce14e2d872bdbd0166e282f0359189799d5 18d0e3c8c7388537f1c2911e48abc3e22eff67da
-e998304daca773676d8b2ad8c98af17e9b200d90 5979986ad10fab6c37f15390bae23c361db242f6
-91be0ee2593a54b5f617dbb97523aec8bf732ad3 d2697a19629b637355eb90506011f09b1f335c4e
-6896109f729884a9978ca9b17c4db9cdd22c2ccd 40db781ae6f7e3ca298b4b2ae4a6e7363fd5d8b8
-8a57f08482ce4ff12f04bd63a9eb9ebe5a8e0002 4dcd59302247001ff78b750be2e785b58f13f8aa
-ca296cc12dc458ae2284b64bc2a95f766f29c25b e3e25d84026115adab51c997587846a16c9a18fd
-53b25b1bb8b0e841280f4367f71011e428f5d7a1 d589294c9d036678bca94c1bd8d19e165b85b773
-ff2e11d6e2cd0d16c3e473338c0847c88292a0e0 91f8f51a14f08310626bc6f5021fcf551f9159ae
-04886abd07d8b9711e7304d18e6fa264d726568d af3a9ad76f9c3b68a1b2dd0507b41dc34861de2a
-085167348587c8209856e7c9ee769e8ec44e843c d09e9f3cb6792c586c168d94e1b739923ae8d219
-94b1149e022af5ca5b1448c30f60f7afb5635e8f 6831fc2e73426e59087c593ca7172e80a55343cc
-b7142c1bd405cba6984c77cb8e499a5026ff4781 42f3efac1ec9ba40adc05d40d0e88918d5880f76
-b132ad7bb84350ee54a6c8b9a949227dc0597f49 89bc9dd78c3e113ae8b32bc759ba560a389ae4ab
-99779d187950e674241dab82d1a47c6d254f197d e7bcd0491f9680a99c07a8e54f2abf885efc538b
-50813ac70224ccdb44ccf01d0aed1964fa4714e9 7d4c9a24f0fe49b600e708401eef1fb64d628923
-0fdca9b11ad858200b96b044146ed40efd5c2466 37fc63f6aa086659f837582ffde5d4391c5a9c07
-b8ab421829d2275cec06515edc6f6e35d1af6f1c cf2d03ebacb4d290fdaa3e7a552d8b1fcb99ce58
-51208d24db999f0b4e5d498216c728e6d27314ca c3968c6c528ea2a54f2780957f6d1a77cbd1eb77
-07403e34aab2d13ffc628c72d06dcaad073fe6c7 19ef38bcc0634384b50e33647950c59f5399e77b
-05636e697c901f1db517a14633e9554a341f8c60 0b497b39408289d4889b1e053602a10c3a0a3fe0
-6b707bb922e1b246b22349b25650dbae0b57f5dd 0b497b39408289d4889b1e053602a10c3a0a3fe0
-0714ffd8e7355ed0085dbe3ce96cacea12ea2523 40cfcd50f7e082abd65622b187e6ef793b990196
-e14b0cf72bf168d4befa743638a35c5283033240 e0b4a1924749a2158c6f1f7f21b1371eeca2cef9
-f87ef507c5e06674c0288ba3c7267643dd7de7b0 041c6b11e6a1ad1812a462b633ae3f3bb44bc3dc
-0dcfb1ccf142788d636400c74ab416929c3f25f8 96976af6bc14a5504268c9b7cafaaef7c27246fa
-a65a6f1456345396fba66a1ca02540e8dfec6dcb 3f0cfe1fe7921cdfff2380d5642c47e14063b307
-a1c38ec31ca1008c410f36357f9a66581aff8f2b 90c383fbafaccd6b08df6dce1d8cea786c34d71a
-d892d79ceef115d57b8a32dad351673a76871816 d3614311367e70453f188d8d7dfc7327df549d70
-5cbec2b5390876952a67124fb359efc54aa1022b b39cb4cb7f15981d7ad709aecf6ed215ae742508
-fb6659314a70045564da15ecff1f6febbb05fd3d e856d4a21031e757afd66dd18e89df373db3c9f7
-1c66b34b7fbe010105dc7838a236388af51c3a4f 36234778ead232321cf7009641e43f7bc894c700
-e27bede79614df82fdd3c0d24d833ec47e2fd505 6b92e2d11a58f0a0b22e917d39044da81da04697
-c9dd9852d76b2c81ecf09fe92b769053f0fc0388 c7145c408f47e10f60822004bf4efc404dfec014
-f6202a52794096e1e2e6d6dd47b6544100e75e08 6f5bc8c83f1f2d8959c4cd0c92bf4817799be520
-8adef2e3e10ca0a8d31b3daff64daddd5764e21d e7bb2483d632653f817144c6cad2c0d9aa990121
-4e2de7eac08e2290194fce6c8345e99b7127360f aed4d64f1036a8d2e476f7fd787b65cec9dafddc
-f94a0e0e04d280f02585d7fe98fa261ba9dabce0 754fbda74499eb48d484cc939660e0db9a59d79c
-0aa1cfe2eaf51cfe96698f6efe79057abd3ced4d 12769e547e30067d494a6c01479a18107366ce2f
-5a4cb18393eb0956fb1e20f51498aa332e525b85 6876fa19af2617b9f15667fb539970de91e901eb
-67467fbe1cbad2d218249a1d78515c60bebcc399 cc18b2f498f0a1902646c586ecd99a43037d75cd
-13d9ae134bd0d0c7317c0e92ef3d7662129d7cdf 186ec24b62b74a158c54fc615d2296cac21951c4
-a86c755c394e836665b0e8a8b095d3a29a485946 88afa6ca0a1eaf5df0de920171ad7140ea7f8cc5
-d1bca88cb63f9183c0a33818a1df855d933652b5 173408d6344ea8d926559e1e3440b98e2f8d1f39
-83460ac72821e44e4b0502fd4e0dfaaee848b458 0e8fc648d134f79c1132cc997f52828ca2fa3f83
-ad121848bebce0c05f43324a3a8e1881d115490d bcde6976d6268b51af9e7bd8d4fd848999dcd813
-98c673047f46d17bfbf234320cf44b7974359f35 be1d3f24703f08c4d1905f78493305f181d45da4
-5b0385e87328f6d3291dd3dead62a901000bdae3 7135cc23b33a00cf6b2b4d969ce73db4c097b705
-3939f139f6caff2bb192a2afde18e51aada4d57a c48a4b912efa7b44c2f321e4f0aadcfbdf2f7c92
-d764e420e0253445c543de8b8b8145bf091caf6f 28a778d5c2f371ec2757b87bd0d1e106192169a0
-3bef6f249a0ab74f823e67fb32339abb92b13165 b0b02a5b57affbdd5c267ae46c32d30dfd4866e0
-80fe32114f838ffb1a75b0846423f85f9408834c 0fe57c0e0b1fa9e5bbe790f99a1815fc166331cd
-86809a62fdf0c2519974b5ec6f1b167601d7e1c2 13d3b6e1b3838250925af14ebf5bd1a1b5c88fed
-66152898f9eb7f913a4f416786af0ac92640d978 d425d5a583f882691214020df3dbe152e898fb74
-b0426b014b6b866f2852906a7be017e73db8037f 2ee600a76b3faa19c896c1651184a21b491822f0
-3aaad99629d1d6e0d947715c0124e2c36e06d95a b4263c560239d75e1c080bcb2e73f26c9c2480e4
-0181efe8dc896416fbe0c6a4b500eaf55f91a7a4 7b36ecd98457d2237c5fbfef24a2e553bb75c872
-81c6e316dc8b0b6cac6e90c5ebd50c9d392b0713 a8b25f4db64aa4aa3c50ca129bd5939cae14c3b9
-d81a53c74ee768b8ec83ad5a987f0e7d1706c154 296dd42aff4ce74c4bcf1fd14cb754464c5a9493
-b8cdfdedfb638bb75e8bad051e4d13b609958979 d2e5274e20e4e8219c3afe999dd0e473b87b62a5
-e675bde51c3328f043861ba487970bebb5f7ac06 ca06ea68f1c254291674a7788fb5f88d02219e15
-9d76eeb9778ff3a294d837cffea6d9b152e97a4e ef498376cfbfb80868e6b82ac4a14f81860c5cfa
-43a2fa49e33b7515ccddd2f16f73fe58ab9377fa aedbeb48e0d37987d4a210854197cc7aa29d57aa
-19a1ca282aefb10a5ebb3813429f4323652f4557 d6ef02a284cfc579f952fed1919b9ec0a5ab58cd
-a0ca5b576639665ee3293912fa488a6d245a26f1 70cd3290f8dad9b5a15dee9aec527c4d4ac81bb9
-1d6c470d48337731ecba933a1b24d2fb2f014e6a a32609d0113e944d097d4c2e5ac0979dbe0984f2
-de1befc722b6e3757e784c4a419e04e6938bfeb0 9654d9c5aa83003f853c839825794c486afea262
-6b40da47ee8c23005e564b779edbda036372f246 988a187bce94d7762ea5aa7bde5b7cdaf7b39d44
-1fc859cf13995961cfa3241ef8fbe2980306afa2 279aecbb90c664654d7c57c35367bf4d017993ef
-6da8ac42e56e28d4b8be280d46eae049e8cea018 7acd34e4cf23c6962a86bbdb6babcdf0e161f1ce
-818541c93c7c790591c154733214475c6cb650a6 636444eb09e149041e880f60db07796e8a33f2eb
-82654ba993ebe8f5b9cdacdf601fd9b257756257 4fd283617e9d484240cdf6d2c0b259154c89f9e1
-4b90aa824b05ef6d29973b55bec8eb6210e1edf9 def6b3be188f8086a0844d8530c03c7110ad32ad
-ce3124d8c7af8704de23dbbb06914d90a243fa58 3b5b67c5e47a722bdc0a1ad1c32de9c4fe346f31
-bb9668e4dd6ff51bdc85c785d711ab59dab69dcc 88302953257116a2dd66435feabd12328cd2d41f
-e35c7ac1d414b2ed6093a7d61404a482c6f312f5 76b7127b73d3fe688563cc4666418a78b285c4d0
-718cba920ce7b6dbfc111696aec69f4fb2915f6e 99652b6dc1c244e6a6187acd45e729daa1bad556
-649a71bf2739fd24fcbffb4c92137122dee4030f e0d6cb0621878a7eba5574c287a752026c468750
-8c142a158a84a9f2c5d9822c613400d790107fa5 6e709d011e6a88e87d248609abc6e65ae20ed6f5
-58b6322793dcdc523ea550ba124302f8520094d3 ef836a4e0bc03d59062f910a9336c5cb9f8ad5ba
-b037b42c6ddf5268410aacb594078d0a615610f5 cd494732994b556b565dadb650d1d5d9ef4cda84
-4f22cd8bf2f35e31e306361e2ef037a716d0b82f 30ed4ebfa073cbdb3b37f199d88e1655cf92a4f6
-68e5527ce173758511c2e6dd25533438905bda7e 9514c4cec8f6b9164e9885d7dd9a640fc9921766
-bf239e3fd6dd3b7e8c4a077f37a01108ddfb13dd ec26297bd376e70b83a24419bb9d59442969e3fd
-66249eedb6d0d7da2182ba76609a2e4fd8336b57 9ff6a690bdc8748b030341a323ab250e9c9b22a9
-e70909114e81d8d8f23976254501f34fc03e7d2d d5057d8a23ef0fbb6017275e244336e7f5f89935
-8b2234351cf0dc6522dbc90618b4ca3fe6476f2d 20e0ef152b232beb8faad983e26ccbcbfb8aa404
-66870ec1d274e62ed7f7f113879f3bfef0c4f519 709270213fd0662a3b8ee8f7717c11e72939f908
-0d23ec89ef9e5a761494c1f35465a66be9e6f94c 7b81716e6728492d9f40b77f40d284359dcc1ad0
-b3bbc3d5dcb2630716851972d4f6de70d4b83898 b261ed59828a90737d1f91619766276848844918
-22b7964ebfd5952ac46b122bac91dbcf4d01bbc6 560139ac97091ea1ed85ab47248667ccef7bfc16
-686628355e4ab40eb4be7ea99764c52ef7fd2abe c0e17d97abc156de2e1ccf8e3364e5a87be1807e
-d6be7bb50bace05aa28b894798dfa568b769e413 26ab48c25c216254c25273060c024dfec7c7f634
-39a0bdcdab338938c2036e78cec9f50512db335f c86045d157ee14f6013988ccc200554ae0b402f6
-1aa104620588bc4ce7e8dbb1e385bdebb27f5a84 91fd438c18ae1bb7a91930d404213b7ae99e95f9
-cf4be8bcfb0685e5ce2b5e95c77cc7f0770a6968 a1f953b076e6dae7019de692385169d6286433d4
-08867a84e2eab5df9a0d9a25fd06519165f79f2f c37fdafeacc75beea47a723aa443748040c021f7
-c97a3dde7ccbfc513e0e7e2b33409f0c2431f64c a8a3519ab2168b23ee79cc365bc9f3204ba10987
-976d4d1c55b63541347f08a833c3b975769459f0 18039f2f1e20399fc1a0a154b16962180d825c68
-a65c47c33d8553a04d83ffcd6c139781960e824e e8f4e5b2b7efe44f01260b5df3a362cb3f041d20
-f3e74d6b438cabde1ebbc3ac847ed6e76c7350c1 5f589936de7639dc3add71b9c184d32b8c8aaf53
-30f5bbdbf4f1e75ccd3e6f0fdaf529a8f179a202 0e6373af54469399932ad4801a9a5f63f65f9803
-5aceb859ae4ead95883c6a3fcf6eeb1aef6a8678 12481a7ef38b51c09bcabc2178f5ad31b8c8151d
-c097a6420e6ee1b7253528a3251794ed995bba42 df56430e6bec9ed07c96b3aa077b2fed6d46ebd5
-04a157d201eaf320e944a2e3435abd5225ce9f5f 2034678e1c3f8962b153831d5f5fa3dcc9e56bc9
-cb9caa16654368fe6085df88aa0d99bc58571f44 159feb99cf9e9711f034527de1a42a626a479038
-d2c5c0b29af8766a08f97a427aa21448a3672103 7f0bbd77c254f8ed1b489d51e9c1e6d7443f6e05
-2256d2373dad8dd26d0f60834ac98f40fb7fbea9 758935368db62f35ef44b8fcd88bc25ac6a5e3a4
-2b090c6e77a61575005e157887ac4d34cbcd800a 47934ae68c563b693d9e84c3c82d036f2f374340
-78c34bc84fbde9bf162d4bd73c94836497b464f8 7f8444f0f1fce47710be8b30949b830f5c279c35
-6dac2ea1b05080b49b08922b84d82f552d5a32b8 7838ea7177856fac80d019ad8a6cde814fb9cf33
-a43b2e00f4f93c36793060dd43096e3e094ee8bb cab2857b501fea6d41ed2bcff0121f158797f095
-37082c59b3a491ff86cc046a4734db3047a78968 a0d9a2513e82e14bd025d6ffc17695bee0997406
-82cd8931092eee6947a099cc0f48367f73a0f107 8cb009872b08883d1710f0415a4e8e311a3b892c
-23adf57e7c6337e6040e640677865046dcaaae95 1d71e2e7f38b132f3a5860b5d543745ed9a541bf
-6ce5bbb31657c325af622d218bf009329f67fc28 1bd0ee2ea8fbf02fd0201b0a2c3fbe97639fde6e
-2125c86f3cdd19b22db806a46fba827760062bc8 ef706247aadd988b87b9943f8933a821d0c204ba
-e9a5c68fc031f70b5784da518f6ea33610ffbaa5 59e566f8ba36ff09c99003c3ab474304da48e158
-ed58e925bce968e1fc75f95a906c44af09b60141 8dcc0d76b7f804ea9e57cc9a7a073179231e3c32
-38de5d46959d2143efa7a18a14e3f3aca5dc5b57 fde1feef41f277042e272ed99aa5a1791bdad5fe
-fb5314ed6f4235005f6d278a6a9565df12ab8739 90b35b6f7e1f7ee874cf4e34ea922e6029f0d918
-6a41b531be5d22495a69c62af844b011c06b290a 316b65aa4702b2bb04977ec5c23dabfffdbc6412
-8e6dcdd0167070e05632d973b63334145165b3b9 c3eb0471a250ceeac23d23cf4e3f8d3488c94cf4
-11d56aab4789226a97d38e86a2b9d0c97fed122e e36a8ebb14be8922c9f06a7e0d805976df4582a2
-f585798b75c2f1861daf8a9285434591a632eb94 d06f2b236e43cff176ea58db6f930214fadfa17d
-8ae47fd520af7507fad79c609fe4f32d8b758da2 3fbc0a57cfe9cbc932a1f3ce088f819d321d7012
-79b7f3919cfa5eab70af0ee7e2c4fb09e7bcb570 018b396f86a30bf8322be04f316a67edf2fadbdf
-e7cef87fae3959bf0c0ca03753b7487376951408 defea7bab030db9ac951f1b8ba80656aca316b95
-07f38e1baf20b5463230ee33a180bfa39a107c61 5b6c795a461e1b194fa8d316e522b402ee1b6677
-626eb95c5c519f14a3c7f769b60ec1ab0fc7be5c d4fc824b2c782590e6106c239ce4888ff417778a
-99bf05a3d4379ccaa15dae789e9c960edd40f632 4567ca2c2fab4abb9e81fb2989c82161b004d3e9
-6947210f2154d82186a6991e11ef79019c87561a aac5df3fe4ba857af8fc3d2343bfcda58b385592
-5b2ab591090d3b944d3e48fb8a965375c7b67008 e43591b1c0b9c092ec67a62bdfb845279d1e97a2
-e64d9a95fa0c7d9a6054191cf62276c4e412850e 2cff83ca1e074d2dbeb1915a9cb43d16c03b85dd
-94c213a538004536f42ead21c47da8c84cc8e805 d65e785b5a0123e27aec45428f9b28873380c298
-713f55924d900383f74f5a9773907cd9eeb9da96 e635213b018b4a7677537a18661ef46b5b868aa0
-f4f81a3391a7f02d098e9105af98ac8cd881ee58 170315d346a66eccd64f16672325917330217dd9
-2cec2a8d4c3d2abbc715cb16f39848325277c445 2cd5630dff079268f700d51cd8db6bbaacece7a3
-611800b17ee06a3cb943669463739a5182e13a5f 0fb229fbd7f7b10cfa1b41afe6e1449d3ff739cf
-bd1e7acad23ac09a27ddf85751c2235ca1d420fe fdb1f1dff65f59bb0943359b89ebf3fcf5dd4394
-645b60fdc792dbee6044807f37fd0d096b6584c7 9e71e09b022c3c13228e567d811155f6f1db89ef
-1a7480cd9ce67056f41d42b20aba7d605df48380 517ed0b6d09317ca7dca891cf9896d873c7eb636
-853d8c15cc28e6c36f116a46f590d7ffb2cdea23 4e9d2aa73de2a59b9675a4feffe46e40077deabf
-e5217cea4b63a0d0a7892313161a67622c4fa868 ff48df5787cc59cd27ed4d62998e1c8d2f1c567d
-a1d82602b41e8bd7db74526cf1a09afc549db014 b61e7cdf62ce41cdf2ffae2d92e555396c1d29fe
-8ed4ebbfbbbcd3807135859ff10adb948839037b 1865396505fa0d34cc39fa0e32d5628df1bf3357
-4be24cc54a766685236f34b8e7bad5fcaad5ad26 737dd020183467065d0adb8817bc22bf3420bda3
-2ecb55c9c8e36d1b1a8f0ebd7f1baf8f9ffd51fd d3c494134678672177f8d0ff9bd4558e82d519b2
-86c409d43aa977101b43f97bec325e7ea1511f61 9498390438fc1a9faf568424f14f9a96408f90fb
-2c8d4549dec1e93987c4fa721fcd7c93b8834b57 f40f0f1806c8d900be4e5856de46796c66a800f9
-6a33cb7d1beb6837ae0e8ebac3941739ee5a59fc 218c087427d19bbf55997609ede20ed5266367d4
-35ff661097c521e3ad5dbd9dfcb48b77b0314171 8d822d19439c13a4ae7a3024240031d2dfcb0b29
-86fbf45a99f76a1f4a114e79f39dfe5113d03139 800edaef0362c052750ad0abf3d0262e86f6542d
-d92c977c8c474892d5a6413191074daa8af19622 95c60382fef4d800025bb046b4642e2fb505dfb3
-806bde122baef01e8c08dd0361a521e254d21bb4 4c99da9364998ada21a40180a2910b1d7e63ecf6
-a07193711752d34ef46c69e4abbcc8b9847f3cce 35f9a7b0c7568b27b6218f130d3874834c37bcf1
-db3858ec569de143b8f648463a101e92134adcf5 6436dc9bf9a2620ad171c56c2fee16697b9b04e7
-5156caa0cdcc77393840cb40926946e74a5c581a d7a14b55690d65eac93323bf467af4b13186249f
-85b59eb0499685ea0b78846ce42d5c7763ad5d5b d7a14b55690d65eac93323bf467af4b13186249f
-a871cc9cbf3fe4d921e47322e735eb786d5c7527 66b571403a407c0e34fcaa23bba72541536852c4
-3bf196fdc18d11a6ccca45feeb2d58c2abbc8c5e 43f170277f29454d8efcd5179934c79cd8a771ef
-8de815fc523aa07548de44799574d022f95d5d88 b60793731f919627177a21e69700849689ba7403
-9337b73188ca6c11e27d7a08ff3a231f4e83692a 6bb70967d215bf10bb36cba805a88b4f2002c6ed
-d37492e76e49f3ba8ce731ef1dc28835b9e82e95 42b2dfdcc5451222fae1618ec140e6ef3016a853
-c68d7807bed9f99289574ab5c9c95d3a017db272 7d9fd0238e2140cc668f66358e764ce7f4611ebd
-32a7e23c17606e1b4f49cd1e4c75e1e915885775 9dc082afb47e0045970d80f1d1b77daeffbbccda
-9ca674afc457dda5ffa91292a8b53cadcea74294 f32d89dd60ed3a24e496cd10c17500f21d4da211
-1e215c0764e7cd78a2fe18125bb97454ed037e4f 438bb167ab3cca02428fc6881845b88737cc62bc
-fafa5da96f97473e06cfdf6716288f2fbcf17d65 87bd34ee4754c2ffadbd5519f897f356946e156e
-9dcc1ff49e5e2f634f1b3aca402032657f612c8f d2382d374139850efa5bb6adfb229e3e656cfc40
-6c24576307ad7f3a933314ea3566e3d38d688989 87bd34ee4754c2ffadbd5519f897f356946e156e
-65b05cdd2530aedf89678417b27c90fb3dc1cb60 86bb2ae025fe0bdc40731013cb401f3606bb14d5
-9278fbb1505718751df6a2485cbb29b9f8fcf18d 86bb2ae025fe0bdc40731013cb401f3606bb14d5
-6515901ee275c6c75a47e0ab459a4925c70ec471 7cef66496a6fb98fc090b362eafa64f64c62aace
-b612d507696c86bd6cd8a35982b0f9167624bd54 61ba3116ebe547a3d2bc1ac0c555f29204be4eca
-4f26f73c3c6ccab65ff332ebb06bd96b019ed721 b32c57f89c82c7efbb2e93a845f048f352db4702
-87b40da7455e533d254b6218bba7694947ac8999 9b2ecc66a0a26e0bff115121ca73b9e4f365080f
-db9363c248ebec980e4dc1cfac0eebbd601823e2 ec26297bd376e70b83a24419bb9d59442969e3fd
-e39e4c98436875ba991e3903dba0682de7005181 ec26297bd376e70b83a24419bb9d59442969e3fd
-00bd1368203d38fca294591eea54a315742f95be ec26297bd376e70b83a24419bb9d59442969e3fd
-52ca0b05d3e0054da6ca2fe224f586d295b75e78 9b2ecc66a0a26e0bff115121ca73b9e4f365080f
-f3908e6c3ca565aae1fa44514274a6bccfbb619d a33646a38252fe62b2e1ec70c9b79480fcb14b4a
-1606d7db898b3b6357d64b2aaa0941564816b2d7 a33646a38252fe62b2e1ec70c9b79480fcb14b4a
-27cbfdef1ef2d5f9660d1c32de83b0bb368308e0 b7617750b25fc91bdd8cc9d123ba9ce384050949
-78615dddf947d27d449c0938dcae24b137ff819d 860b47e69e1bc2dcfacf476f74376e998103efc6
-86a9dd9736d88224c9b3d44be0934177f23a4c42 089ba5cb33657d0d98d2c10a8ddf45f45a82ae8f
-3128591d982dc76816d8a76dfb6a9be325d5431e ba083e39086bfc18e2686833e967e323834a01e6
-313435140caaa7f876cc0f1ebef0f35f34c65086 b4e25831d09112f766aa9b7a3148aa2566a415dc
-29a3df8cce2f82ccdb6488f9480a2fca49859083 b4e25831d09112f766aa9b7a3148aa2566a415dc
-f6995467c721dca1cfea6039f58d32504d00eccd c459c97e9f4eb64a65034e31c753f6dac02d12ef
-9bf53c0aa8fa86d53f722f49e952c35228d73d44 6b0fd12500f70cbfe2f983856c2059048ae15cc6
-3ca70e02c616bc3c2d9bcd149c10fa02dcb48988 345b8d800b0c988ab2833813e0ba613679e406a1
-d88ae86d79f223be714cad0257d261dba3868312 e6e7d01ac1adae171fe9bfedb0cbe6efcfd4e4be
-177bb2606073a8e4f0a4d82d012dab18c7b1bf55 60022c738ceef8ea9a428e7d9047d690904fca25
-0e465dabfe7ae1e8c01cbb23c6666718f4b4d1d8 06afed123126850e0a156a062f551872ac9ebf28
-e85da3f376e8cd7795d727c4a14c4b24d556f708 04277843c478396cdf600d723399f160fa122a8a
-4fff5ae1986d5d1c61c4fc94e89ef644602033a9 48355caeda2678286eee2a7f768d3b6d2ab842f6
-89c79fec9c536f55038da243f2670bba0898148d 60022c738ceef8ea9a428e7d9047d690904fca25
-660832a90c3f03b3577f860ea2ebd63cc7396a18 48355caeda2678286eee2a7f768d3b6d2ab842f6
-f108c30001cfa99f48262a37854b9dfbfbbb0da0 0a4519779a4c938181aee0a027b2dc49839aa52e
-f6be862ac74cd0a80c2a8be611015e497cab3017 f0faee9dd9826b794a5680ba3cf53a84e243c09b
-b1815680ae1bec5f2ee51159ba1f7ad3824192bb ae56575ef88d8ab9f343c8f1312ec74f4314501c
-6c9981669ab585e2e74da77978ceadd28ce77ccf 1bab7e4b4344c27184a44bad81211b917c4d0805
-9a7bfd35745f7d84687c846e474d5d03545bdd1b e534d84a56e067a52a06ef072a76b537aae6003e
-a9368ea71e3eab01c1d9cbd9113ca9b2ad4b4766 806d1d85e2e530b5bb2e96dc13001e5ece7d5a60
-7832209ebe9d300b64d86e5f7885b6778ef7fdaf b1cb595fb9bd99ee81a0b3eb2765f26671cd98a9
-267e8c35b0d81cddf9caf021cad812e5912bba3c 450ad44e30ce2deb72be8d448c4e84664246a6ee
-198c10c16c3f4c6a0c2a3125c06175df0a4aea53 26082cc1a5e3c05b7ed582281b4da9cdf5b7201c
-ccd61b47a85df1ad45b10cbaea5a37d6d332c743 c892e523259a5d508e01a1899d1d9ef8aa5cffed
-13b29333f1dbdf7c1d5f3f977aab4f2a598160a9 df1009b73b3989818e4176b5f66deeb962162635
-90cc171928a8b40239337ba3992e34264f8e1b29 87b65d76e06ea438392f7e39d59d94db39f5f284
-142edd3dcb376029b3d75e177b0d8bb8ab648d28 34fb952ee577fe3c29cf5398900a33024f5a0c68
-8afab2af36e5d11bf309ea14f010af2b99584f22 8dc1d50c8febeb8c20172ea3c378ab4ec14ec39f
-4c5751ed6b7d6038bb23bebabeb8bcc2fb3c1fe3 8c824e6d152a930a04617834307235c090348b11
-e0a1c5d4fe335adbd0fba52e9bd20adf50ff24db 03175a9e8152d2980a300dd21c4ea09f7ee2722e
-0ce4b37cb1a2f6e0b1a07f4ca27318e727b4a9cb f540eb7f4e8eab9f61480aca70ba6d9f6a11a09c
-7e25eb8f47be9d8456b0284e72558a4da06ba530 03dcf9f81424678c90bda1e2325fa32f98f6baa6
-4d4965a96a37ed15798ffd9bfcc3a52fd04af5a8 bee2166f2629bd582593c7e099bbd95117ec7505
-fbd4527a6572816bdd648e373d7bf9e4f71c8efd 5d783e166af92e1550c012943fd789b2cdbf457b
-78b9f46bf10034f9663a70023f497a93605257f8 1d148e4b616a1c0d3fef595656dd9511db6c4b89
-16b5f30d24e34e183858c4935e8cb7f5b34f4392 9ba82c767850c4ea1fc7d2ca0d3ba9a999af63d9
-b8d5b134eee4b5784018aa45ee4509206614d4a7 ada9c3b24ba6e0369bc181bb4072c6998c0ea90a
-f7e28c906a9add7655386655c186faa07b4a0015 8a0a79f25c11f181eb3350f9684b12e699056e0b
-b4d577eb92cf8c29a67774c732c2d69b5ecc27b7 bc3285324b5d1a2233ebc25afc27d9c3202b34b9
-26ab36fbae94618063ccac42b99273d41b10abc2 250e23b40c1aa7b1345dfb4f8cbb7f21a5e0a1b5
-d9d041a1596a23a5a6369133ce9ced7f789badeb c7c708cbef7fc796e37ed500ab1a11d82c679050
-752056ece62347235752517ea2967ed322f27d7a 8fc1c87649ed51f9d79887302ff6699e5352aa94
-08ce04ef72bca3b7c23fcf559f9f76e836a94c2a 6f06a8ccaf92f44727a4e37a957288b85fb7ae8c
-5dc7a26b5e7bfe84c29ef9ca7ffb1a28e1d08995 21e4aa96cf43832030f4af97efeb85226b4ba534
-a3c5fe1d32393e35084ed0ec31112ca165a14cf4 a4553090062fba60f5e472b4c394c920cb5441a0
-ae34e31b113b919d6007484e07c55b26cb48558e 4e5408e54e864908385ea08018220a019a6890f3
-1abf6b3604487a44eb21bf5536238fdef2831097 ffa657563457559ed32ffa1d75365270b058df75
-79561d5f8fc047a90190b64b817d00c209529707 720a73f531be6a6e7fceb7e841a4e1107144eab7
-2577ccaeb54044ee726e1a7b2ad0ae24d36d62ad e83fc7e1d25942d9163a7fa2e3fc3126fad019d4
-d5b6c71b8b5ab3132cf1b70869ab9910e240c577 4f2835a201cd72c76609975a51586041a168ddef
-26b2194cfc84db665911c113f9b60da694ac2c07 65a5eed85dcd753429078bde416ec755a39e96e4
-dcbb93eb9dc5bfd951b1cef897b68ca9a9074b26 621fe5742e2c0df678fed7d11a9f9f1e63b4a2ea
-3594f61308b74255fa9186b783e58cfd8d045595 c6c78c5bb6404e411fe94993f86364cbc8356dd1
-5e60b9ac7beb8353d424582048d514218319c0c1 b0b933146bec3341cea74b428db0999ad50ec75b
-1292b5d62c5c023775420c745615b87cf48426b0 0b3913cdba3a85e056f6ae16fdada8605b74e7dc
-46eb66ffefd2c6ce01cbf625d29ada1cabfcea16 7990548d1ba7e85206da54423c8cdacbb8f15ee4
-a0c7898db51bd055a4b4304b41c441e785b96fec 87446560a7de79381520042d0e96267561b8c9f3
-16099b061ddbdae10d769724d677e89ccb2c0a3c 87446560a7de79381520042d0e96267561b8c9f3
-994d1c429bc65992caa452912f8f9c7c88fa47de 6c272d2f991acc684e95f14e992022efe35b3aa8
-c603561f70e5c9ee7a33f11fffa328a14820d51e c1cab395941ed6f378129b263c7663e8fa2abf6c
-ac6a3527596180ef64bd256dd3afa2da85c83331 3d5bae3c5733ba0bbd6699ab2264a7882655f96c
-fec79d4bb6e9d46e569a6901c14fcc4837f5aea3 a5d83e85915f64ed288da169be7a8e7629afd0a7
-a7922f18ea1ac6b0982323f8a9e969d379b76861 8404cd5cb83ed93b2bbe148dca34b9c2becb6f1c
-c27981ab8d117f35f9dbd65aeaa74011de949dfb bdafd73ccd928ed95a18ffe3707cca7abd16bf56
-e2a0eb0a7e3961788402e8918e0c253983b7c0b5 e9e41ef280be84e546f519331e685d2cac3e4598
-c7eb7c38aa530e664e1c83cd0367f893095e63c8 625702d6197f1d60f202ae7aa456802584705d79
-552df0103ff84d61920ab29e42d1431dcb391421 77b4eb0805f5ccb0bb0f286f2d23a2698c848b0f
-17d242c7a93ad3610508a8848bb4194e9585bc54 2e53f527c51adaeefcb75551d869046ced3ca2c4
-60772220efde0615e798ab7994ba5e48c88022f0 339f6d71c385fc5e3571748dbae93104e8f7940a
-6e843b956c0808525a1462a80c2e9f04e62e2873 e22d6a00012e93d448843c72aa59c73cfbfe5492
-703f3bcf70697f5f1f1638ce10c50d276a0df407 c30f9cd99d9973f1f8fe2be96861d169bf0a58a8
-c21c059ca5abd1160cf364925041decc2902d5d9 1f7d109b78ae90d753c5b8520196849e920fa3e1
-29de980892697222ef220f607542554d77e52f40 9be2838481e08bf8a45e7b43262d4a474e8f5451
-4db6d435b9acbbb461ee68038f12637821871746 6f85470a2544624da0e6758a9a67f672e10676e0
-a7a458500f6e4288e28f534ca25db85b2345fb29 80a6b55a7634a36a51ad82644aab33c02cd9f58d
-f9d5ea41488768bdbf28b5bc4c8f006709b552c2 01b5209d05224346082294aa705cb36ec615dc28
-f667a6d8c171e90d0d402cd6afffff2818a409b5 286ef0f13365cf18a6e0efd709ccd914c305cae0
-584b706d32d8132f3eec31beba4f010762e926ec 430e17646c67e9ba8b17b93a2b8fa5e6102cdb40
-14d72a9668bd7440456897f2b3b33f69a075aea3 e0f2d9af832b2313240a4337d30ba850633fc2d0
-286c6e2456ec6df617fd5ff58e5094c7795ad76b 0e54d3129dc6442b4a94d1b0e2caa6b0f2c1f578
-309ea7ede7de8b14498174449597ad2270b67762 19edda2e9ef655463f496fdf7f3d32240137a2c9
-caaa3086345ef85c5d61aabe6eb2bf1e8ad7ca87 dd8e1db3bc9c9c86e53b7281aa632d578bc2b67a
-95517b969d4e762597ecb7a09cbc8e1f1434c1cc 2f11c598d091400f2f993ddcd3029e66b1edb722
-92ec41af4cfa8f96fc4b9070163e4865c0c84cd8 defca45520f55878210053eb83fdba0c528cf5fb
-2611d25e37bc34f725ff6d640ebcfa0691127ddf 01c04735a2a5e17176bf92a184a4d19c59974556
-d3e07d51cd98887b26970bcdecd6cc26abf0e775 85020b9a90e0315f624dc7384892859ef467692d
-465bc751e152e18e53466ef6d2ffb2d74150b96d 2cd73f5e7c69558126450f8721acdd642d34c938
-bad9043ffa146d43c88fe1d393c20d3b6286712a fa7acf7b97537d7277cd2661e7a3cf2c2deb1f95
-4c2f76303fa94380a462d629067379db0ff21b6a adfec7b1842fed064af55d1af2cf201ff2b910de
-c3f011346e836ac1d9165add0ed693dc5d04de4b c2e67ae1ed82d2da96c9a4cab82db41bcea98d44
-90c37ee665ed8798b502793831163d3393c22930 ff1b0d986524077082ee02e458d4aa2c8dd13569
-a0c7a134cdde3f88d6afb473688c416337450f15 2c1cf91abb6e44dc5b003ac6c3ea5ffe40027454
-13287b27af262b450d40ba17106e61a520a452ec 5f301c2f144c5cb3ea22c2eaa08f5afc9cb63b5f
-3fd2c598e31614d801102a2b50b3c0434006b666 e3d5c7d9b5e70a35d252e01260b0dcf3138a45cd
-3dafec2c2a5164c98346e73fc9cfbef1123519ae 7d149634794f006c69e118308666fb1fc0379498
-f6ba75f177305641050ecd89cdf3722b2a11535f 28781d15459a08992ebbbbc4448667a20a0c8711
-dcb3cb461e2d9f87e719fb92bf69da3b6ea0ccbd 8239f28a568bda7e6a58562a7026eb7cf404bbf6
-c099c5afbc6d9327eeb48a0877deb1959771d07c bdb9ad0d3b6e47946f08289e409ec98b1cdc2662
-34da76a46c613b929b7d2af7d966497a814bf73d 7cb27cac6aa77f13bfa67492be6931e73187e3d6
-711d08e8eb7ddc8210b223a5a169113bb6519e36 60847c1bb5d44b6a3f94e226b5b3f74e273e5299
-108daee5d5f75102d37c2e4da2aa9eedf7c116da 400ae78125c508e6e41828b8ce1b7483a8191dc3
-c69e1573cebd83f7c0e77139dee7ad922371ad64 0a6f732a255d2fb8ff14f6783df98470e75dcd77
-183397fcadf8d38183a727932a4870ea02237bfa 61d2f4fe0144af98a643274a962395984b69f010
-acda0a1d9fd7f83fc23af5d32b1d592b84359bde ef78f350b9dedeaccca92b38524d815aba0870a3
-3561b17e592345d52e9c5d2716714b73013de70f 35796b0fdb7f8d7a05ffd09d6d11dee9e86b6b09
-8fc574a4ae87a7dd63fd487dd0ac5dcc628995ba c99c7be00ccbb0ad479b305a9c1e915d55d947c3
-ef1d57e4e5c962f47ea20fed96a01d19cb4605af f6adf9e5822608827169c9839588ee429b50943d
-e25dcb73be17b4167b0ce4c917b1e9c5c45a3ea0 6b8265b31cd378eef4d0c3f5da53f8f2a0a080a7
-53887715dcf68d049d0f3b61363a0526522e76f3 5321d5be104ebc705d1b1fdd28bea1be21d492af
-c700ca697826d006c850f965db4cd49a2a9ed0f0 55b2eb57714ea5182b05146c2e02945af1f31e14
-545fdc26973bd84de9fa690f1ad89ef57c1c00ae 55b2eb57714ea5182b05146c2e02945af1f31e14
-64945d5254c1e8e16f109fac6af3223e7d284058 ce4c76d34ce1544be8a8a56927abf6751d9bb94a
-cbb35a429a16f8b83b9c96f804e4a682191aeda1 0eb52bdff951371f2be48fd26155d570694da219
-8558044c4c7d341fe58efdb046d643f291b0cb60 a83398ff4cbbcd68b3156c13b2787fc20bad7db1
-efacfbfa52a909ba981fbb62e9a9fa59d971adaa a82057c5c8020079d9be33bcffc7f3eac11931b3
-30e5efa0910f826c46e55558caf3694c13aba584 3f1572b2fd155f0aa518b50dfef5d1a99555ae76
-f57ed33828881c0e5357b0240153d880ff59d360 638de708b2753f2d40dd2f93e886e4e64dd03da7
-03c3daa2c79d9bf9d0fc2bcdf195902e7c3d9431 bbf39c629437e74b27ba1b2c7fa4ea6b6ef2c3d1
-9ad4064d1c96a38b70017e411d6145049f383b97 2daa8a5c571267379e2065468e034d2c11d100ba
-965e84d0bf92ffa3820d890e500f694244b496f8 cc80822b320bc9bdbed969cf004e16442506819d
-08b5570ec5f1017ea39e0c96e63fb10ea81a1fb2 8c830e28f63f44731857d47e012d07d65451456c
-0e53737fbf3fa7bbc50fd7add03741b2d67c5e58 1d922306988ef60d61af0e2e25d2e5d1794cc27f
-c97dfc475a809adb6ff924fcce8d09d7a2cf511e ab02cee0418c921e06af8b0fb9cde56b8a4eca63
-73f60e5518affdf4603353e85609ec2195258114 5548948b3d23c19e5db326ce776427cfe9331a22
-63258befc70134c35f14d3f87a02fc4d40bbb915 1ec17d659a487f50db32933c6509ffd1f991d368
-0bbd83dfa22da827ea95e67833468949a80228bc 92ba4c846f0d8b1bbb7f929f5468375514ff66b5
-7fb5ba69fed5599421d531afcdb3f6b805de728f 366efe4ef9c8a8dfe627820b5664df07591e5553
-7e083b497d75ca7e1d3b281d28a9e689d0d9a4de 5136e0af410e97c95e243d4719ada5e0ef92438b
-550ad9c3bcada7739ff1abf01df9abec7bcc5925 2ea529e3ae2cd3d9611e44987af05b695ecb1a29
-cfaa197940439c38ac1ad0203d419a94858742b8 7a770f03430bec76b89b3d519906355c978de06e
-c18a48de6840ceae82c042be8523b9cd0ca41164 f6db28f7a28be43bd1301cf174077d38d90914f3
-441babc2e623cb2ee051a46fa20493a9e8499b76 41a522ff3e0b915d04ab6895041f13525e2a093b
-3bf742ded1820c3162bc71ab18c89800a92d0fad bacc8e296e3e0358bc79706094878ca324d383ac
-f08a0316d84cfdcb1ff7c2c92d62d109d0e67cb9 fa4f2bd0652f73852c03e9085ef39f069391885a
-2e88dfa6ed0e183f90aef0cd0e888f88b740f622 59a2aa53d904625b25bdb05570558ced10893471
-240c9e185ff24a337120c21fc42cce0a5296c00a c4f391bd94eafa26c811d3f98e276f7bc24f2ad5
-21f54b8c129a20db2de9c2e776431898bb1c7008 c4f391bd94eafa26c811d3f98e276f7bc24f2ad5
-ff7499cf0da6f0650769aa184cd0e3936a21af81 d9bb3bf3a2551a10a9d7692381876b01f9e44085
-0536f77c93be3f99864edf7e551ff7ec450255fe 07f456f6edef464105fc628f6d9046e00fe7454c
-0c51ab85649c82893d6327db32214601dcd3fa1d 19701b2fc9b292a0a32b243af293d185d49828a2
-7f155cf1ff7be2becb3fa114e96f02df3dfe6166 f3633d99648ae7de05082b0ab90cc4f84411df6f
-8ac204ffb5479fd519a0ae77f772a79a31281f65 6508343a43f28df251fb6ba47ef225c8070f8edf
-a4f1b6a950128e4ed74b282b2d466b5d5dc24ab5 bdf6de7105e6ef290604d5c7f385444ca5e1eecd
-86fdc320d11ad75f17fbaed9f28f696f448b6815 fd31474d3472c982da86d45869cb7360ea731632
-11d1b06b2aa2df05fdb5ea127c97455f1a46fa01 f540f2bfbebb022a726dd38a7a8e4a132e08beec
-b6c30a51f13fcb7564e89f7b9dbc70197d1e73d7 36851e28a1ca66f9d54a6525d933c665df85a851
-5284bd177dae4d5581f9eab82e164bc2fba88415 34c971769845c136009c2bb80baad529a6d3e1fe
-8175e99170f53fd08f55fb5ba6450697db490088 d3ce5dd77dd2c1e7b7baff94e245a2ab295b64c9
-88b69a395174637b18f316505660bb9d9bfd86b1 757de5f6537cf3f22b77bf2a04bbf0567908dc8a
-95de37b8936d00796ad6fe1a5374e80b81194da1 c17129933e6c89830961cf77507a610a41b79f28
-d4391e951567a118286805e5a2066c53dc6591b3 42d5b1e0900b1deeb0a502741b88b6dbd339d64a
-de06c3b278f129310bfb4098d583c01b9e6bd678 9a32441c083aac6dca92198e68dafb110a7fb606
-36f145ef914d6af7f31b0037ff62339551970d53 52a02404853ab89e5525051461269553ad8212b6
-a84b340a3a1c242aad94d6841b1aaa6dcb918017 00d07ecf21958632c9b0712c35093272b96a079b
-2f914d7aac7714eb21c0ea07bba1b06381b189a6 1f01d47c02870c11287f09887eaba764a8d43383
-775204be885cc75272c46c19fc2312f75e927cd8 66fc81273ee024fe1a28c58778823b2f220e915d
-fc1d0f40e29a5c7686eb6449a5992b14c54bca20 cadc3ac251c30020b88374bcf005149b09821b4f
-a529edc6228981c01307fe4edfc8d81c7d45b0c7 158f0536bf68ddbd94c99f815083661830c07486
-f17f4bf3709b288cf1fdb196659132f8550bceb6 384cee33b7c9bce2921b4d5aa085de973146ad7a
-55faeecfec253e7aefcd5ba5bc1d6b34b9bc3fb3 07946c520dc7af2fe969b9ff13087a1c4f2363d7
-9f9b0f2baf3155280153ece3ea0d35a647563ce5 07946c520dc7af2fe969b9ff13087a1c4f2363d7
-83097df2335462ba2d2f59e8411cb10350ba7eef ffffc8f9f7b474264153e21d1ca184fb13bf94d9
-f50626e2745c063fed7dfd831487a2e124c852a3 3566717781af019411b20bf4c0c386dbe82d4594
-328451b383ab009436ac8d91d72ee4410018440a 014ddd55e416152b4a14a8532e234e8c0fc91556
-63be9c0e8fbe6f347bc059cb2159454df0713235 40f4e6871a15144629a040fd85d7e52d1e8bc19d
-25410d33edf24328113ac5507f580c574e9fb7a1 19facd96e3d04611d179102a7cd81ad07ead56de
-7bf17a4c9b239b753c3386b76fb15d5d1f531644 ec6db81ca36e165e12a2c18fa3ebad54f987da59
-67241117ace7409bb0c3259b8df88a620d7e25ae 87c7ab371f2076a2a843af8ba6d9ffbe1a001037
-2ace52ff9f836eadba73ea8fa2baa1dc979b819f ce775561b1d82120a8a32424f901bd7c1a491cdc
-c7c4500b23ff450dbb1898334f5b20d3f9a8189d 86dffb8dc3f24bdae7f6036f4cb7c5e92d0900e4
-a6092e73c773301e305a9aff23b8981c004d96ce c828259f675735cf2423a89f3d93c1c6ff5662b8
-12ba70dc78cf093d15ba38e8646194e866a55dbd d52e569b443c0dc00a46a11d7adcda13c0fb9d1e
-bc1a928cbdedad55c7da8976586439e097bcceaf 3f5f1378fb3f71ebfb3b8a1e2c766c85a762505f
-d80bdc39502bdcec94a49fce2ffd2fc63c912368 7b368f6242c980de3361c88ad859b7a8fa64aa1b
-f0c829e82ca5e0dc48f48b2d04bf2e2539f7362b 3a6652ac2c5a12ecf4526adbd044e3ea470cade1
-5c8b98234c0d5d297b0cf656e4c9af11e815057c 9b12ffbfd462a121b60123e231b4e5ec530f5d9b
-ef4f91e341408d80b114652ca5740ee9ae6868f4 731369693bf2cf81f5554466a717d66652ec5771
-c2a21721bdd2b235c40934057882a8808dd62534 731369693bf2cf81f5554466a717d66652ec5771
-216ab7d3f7ffbd0a8d6e980b3711fa46e959c780 3e93da2fb5e74d09622db087ba1142c9a58ea22d
-0ec04b96761b478bc29ab345741a8c62575bf5bd 3e93da2fb5e74d09622db087ba1142c9a58ea22d
-23e7319580ebabf09335bbef457d98283d0a2f30 3e93da2fb5e74d09622db087ba1142c9a58ea22d
-cec2bef426e21a2de9a40a2604bfe6ba05b74a75 3e93da2fb5e74d09622db087ba1142c9a58ea22d
-0504506add62822be6d6a57c294fbf61562300f5 e2d9731caa1b883c7f8705f6ebf3932b82b8a833
-9eeb8916f6621f32e9eab9128e7394bfd6ad43b6 1065c62d1fb07be7e4b2a488e6ab6e00040ee1fd
-3c70e031c59e6462bcdfc1e1ec7304517b9c4e48 ae267443116863f3aa85a2bb24c3ddc3148f3a97
-8be74b2018283f44f74f241f4c851fc77a07c7c0 5e1447920017e45c72e3751512719ce85e21b8a0
-d85dc1551adfd43f0c6ac8b013b6bf60e1cfd27f ae0b264275154d031036874be11d2e5992e7f474
-1de7793b3349b15071e569e4feda75dd38cec8f7 7b3dee305f3bf5c257379d55c2d04abd32f66e3e
-d26f97e0337c65f4e63cec50bcfa5bedc3e39699 4f01c0b0062f36641a37442aebcc1bd62408638e
-67cc1d37a0155c659a04a25d4415d7e2929a9639 de6d1470b8e2cb8884f5aad8f34e3b7ef7c81ef1
-3d44a9b5bd2ef0d596c9b782dbe90e4a9ad4c76e 54e4cfab2152e6d5ea42b15e89ab7533fbd1821c
-d285f7c6c238610c111001ae5c3debf728e94b71 fe6666bd0ebf81ddd450c09f58165366d8eeb333
-4c8f25b210aea4b0409f275de5f36b79b25840fd 5ffe806cc4f5aa5fa6e6f0ae1699c55239eacbe0
-63b699f90efda6753be76b5ca8d619f103243be5 cec88e16c4a7940390c456423e6f34cc8f7b453d
-bc78f09c2073b290be8b58f0e233270e499a11c5 056dc46847b76232e21a4ad1529017f3e1d5b7f2
-0ca73904d22c59787dc0e7080246a9223213b891 bfa7f2288b399f3db7cbe9f222be3ea41b188beb
-ae95ed647eb3af6732d5e5339291014708f4f5f8 de8129f850ff5c13d4973c4eda362fda21a294e6
-1ef4e1104381308190423ef79c6915279ada6981 90422dd7704c5deea44c4cad620ab78a8eac8565
-39bb580a8fab1cd2e0ca1964ef1ad64e2af29b1f 02e78528a675dd6e74dd900e0d5c4dc3eb6d8733
-1fc92fc19c98e6888c274a3aac3a718a732f5cf0 40d0f9178736a45757edace81b506a5703164f44
-3c914931c9caf58fd8783edb95115e265bcec6dc 1cac33101ed2bd750bf351d6a4e9fa728975763a
-c2c27d25bc1722ea917292388a1b34cd9a8cce1f 62e898e4fb16a3994dd2a5160ab1f94d01caa19d
-308e21f85b626175817ccd2694cd9b8c5c800d19 083c58701d095a84c651bbaf61c63b66475cfd0a
-f71c2fb40b8db2303e1635f877c534776ac76dcb 85d8be59e4d119f660b92b86de6f41c3b40d4ce0
-c963b48683d979476e5299108316de208e73a89b b718341c6714c55ccaec39ff40dbf527fa794361
-91c5cf358a04bab35b47786b64da06dc53e30236 ecec4b67653887b78f0ef9d1df86f2941adbfef1
-bffafb4037bd2050bebfee2bcd598502606cbfe3 f3addfbdc2c9c5e806716ebe11b1a9447fe6075e
-79acda5d9710de0b8efb646c72702c5c67d95d59 d9c5a7bee5efb01df0f3a0c07ea7281e6df4e703
-38cc721f026eacd592f01d76485b871b9256fb2a dfc7b9f277331f91a96e0319f7b5cdccbb06127c
-db03b9a6ef2ea3bff66801d71633a36f84101deb 318bbf88f7061f9cc790e1d4c10847b27ddd5726
-fbabe2ed5c792a839055d1870a05c31860d42d1d 10c6ecd34dcb8fcc5940a4d820440470dc2c4a86
-1cd5c5af03e533a3b111d9b7bade95b46c852100 98b048acd8227062d2746d3f2b2c6e89b7ae5649
-584b5f57ef7ed1701934ac9cb673736dd83a21b2 e07a0173e4ac5beb85ed8dae918e7ac8f52895c3
-ca0594afb095bdd1ea0edd6fc678f5710e56b92c cc85f056de57dd0179aa39927a5a50efb8bb6351
-17db93a3b866cf76b8d9eefcf02616b52d8b177c 3e0af4bb0772d8fd1551d9a13da82b112d541c68
-25ee492e55dc8c212ed8cb380b9450dca3fc9d99 d3d39a27429025ce9620bede5c0619d6489570d5
-f68bc2a6deebeca7c998c939dfd7456ff031955f d13dc0db5bac5ffef420e08efdf27051e2a7d97c
-924ff854939723257f6c6fac9508ffb633177488 bc9e930582a0f3c0e5acc8df27ffff9a77859d63
-13600287e8a20bc01372ded82d454d1501342708 258d5010e71eb38cbcbeb3f2416a6549165ce89c
-fbf7b54e150fd98d2c9d2fea9ac88692242d6245 f0e007cf43f50bcbc03a24ed447539a2b3a80b4d
-afa3b400bdb12cb23c120deafe1a3e1119b4f41c b3603464c682e5ae17795ffd776a46947d02f595
-f8deb5f01ba537f0e0224a873b17a5aeaa7157cf 90169dddf8f0f03c43dee225a608af336c504b69
-d638660803e4d34f62fbc78389f0a4e5a0938571 e404a8a2ebbc452579a606556c73c6fb1e4268f8
-aaeaf03ed7f68aa384501d2ff51eff5529fbbbdd e92cb0d0a0dbe88ca77666ea713c5dc826591a3c
-ba6d6466406369de9aef83308e43cdaa5d5fe78c 9e642953d978ab6884d4550dbaea92e11097679c
-94d85ad7f44829079d622831833c1e2a03b538cb 2e60edf8cc4afb21f1f7e50ffe6b6bbf967c5042
-9ae5f77780b1d1e81117a763ab9422d784bf903a 5221c67ac78d3f419eb5645577873fc87e697d47
-69b8b80014081baf8ab69362840d0608ff475b17 573468a9c522e4d04d34cf74940787e19c828563
-bce4fe27cfe3eab80bcb5c7001dc1fabdbd4378c bbf46e5e87959f320722dfc72f34e1aff4224bad
-4e69475cea1e4cfec37fa28ffe9549236e32d4e2 6e83234027b5ec61dc4516fa3ce84ea2a2bf7f8e
-7c71c4469c1a4e2d33ac0263ba52ae51800a383e b4a2c0e3d130298d3262f25defc276ba2b98ad38
-02519f98f90625219ad080af37f53d97a0c75950 aa01a256c1eb8515e8a81d67c5addf306af68263
-9617aa9507156a3b43487b55544b6c8ab62f0c3b 6c7880c6feb27802b48b636a00148ed1571a668a
-5ef5b9c9f110da47c2ee90f2805774c8ed856001 71638e90a92379aa2977441959c5bdaca39e7490
-0a02db025df0b1414c6a6fb197eb7cb6331d738d f6fa1b93a7b86034e63caa9c7ac9ca2374e16317
-b11226d2ca506054fb58986d2400195cd282f547 6fa4b4ea0698faeb5aeb52abc2ed7b118fa901cc
-6129afea34b7a9b0853c62b94335a655db9a07da da4f5d40ec75a6af178f99e17c586ba675baae24
-edb69e2959d4a747b10881dfa767a059e504587b b43a459d62dd0eac70c4bf7460c2e0b11cedb24e
-d6f5551b33a0fd38d8adf6b6323162735e86dbb8 8aa3966728f45f87b3cdc3393bad05cb464a8f52
-ce16e443ebb55ef91bf9cf7b8d7928ceebde971d 9a6d23a9ef63e5e70159843e9a31d5efeef43a25
-591536e260604563769ec2ba1d084bf24ff78a34 8ea2991e5b99f7821958856bba6420b03d092a54
-69d757dca510953b839618ad81a63059cc29ef43 ed86859de356b269c33307400cdef1166055c25c
-28d69f546fad77f7423171ccd25f9afd51220457 7b81716e6728492d9f40b77f40d284359dcc1ad0
-a76ce6a14be2544ebdccbc51873ddc9ad30117e9 3dc2b9b7a96b4a8681b88a9f9bea123b75ea256b
-ce0dc5f7b3c82112e5f559208c78d63af7df6a5f f514859db67be1dd65459e2bca30622757df0085
-ae9475c0c5baea572f505966035d10524e1d195c 6e671fcf7ffb9ffb887a28ccd1fdeb29d16197a1
-d7725f3223e17fd63fd89f45156ee9feaac4bf5e 0f7fc337cc33ecb7db9551eea0beec816458d424
-41ae3d87095188895273e70998637714eff3f9ad 5368bd6132c4c8f077cc31591324463c1e8328a5
-079ebe7289121bbb04203dbb3f4ab293c147a983 efe19fefdb8689cb40663f0d1b1d6cbcb12e9be2
-b3611394154255eab19019b52710a8aa1b40312d 1e6b6ac1c6a2e279ec3372c2981b3098e2835adc
-11700923899fb3dd724c000eb16832137ed05d0a 669190fb5d35f5e49107507adc9bfdb60acc48c1
-260ee0cebf177301172dd196b461e9c845d8a578 856c19e78c41263e1130f33b11c5de6e4b388ad2
-4566b2add4f042c6816adaa7d562666a9299fdff 40b750cdb1f4792f03550035505b3f92a61a9554
-3f1ac574761461baedada679103208f36191e21e f8aa4193c3d64df4f56386861a8e1f668491488a
-bc42254ad6978d9036d83c5d7c66e9f71ea97f1e f68613db3057e5999efec18dbd73a2e1a626690e
-665c5c1d05e35435327ffc07f8ccf079d6807388 039c042f4239d14b1eff3ff3f6991f62e8e1408e
-0f6de8eb960d4ee4aa5dfa8124845019598946db 5371ac265696d74b884d6868f9e5dc1122d602f9
-b59b2fc91523b1f7ce745cea931765512303407e 5371ac265696d74b884d6868f9e5dc1122d602f9
-88484ad0dcca07b769cd0c206f553d06ee0889a7 5371ac265696d74b884d6868f9e5dc1122d602f9
-37b95a906952b1f358ba674afe1cb7e8287a092c b7eaad728dd93c7233fccfb97c9cd848e23c9084
-50042c2f8269c32a768a34032cbf690eaff9755b 29cbd2d7c516f11b9ec58babe1ef69118510d253
-cf97e2b9f69870579018cbc052b5681613e47686 29cbd2d7c516f11b9ec58babe1ef69118510d253
-64b29fbacf521062f506b94e8a5f1d28c030b3c8 2a661ab8e3b42e439628e48b8df5648c3382d56b
-acaf2d41d817ca1f66c244a4d02fb973df5d4889 457a51627e30ffdac24052d52edd4fc8e12d5a99
-ed7aae468d764bf3f2b67682addfaa353ff64777 4f777ffb99fefdc6497c61385c22688ff149c659
-650aea824c9a13ada3b4c0a5e6c05bfd70bfdecf 4f777ffb99fefdc6497c61385c22688ff149c659
-6b44e525a1138e5b66a3f660eb96b8c1b5ea048f 7b08fa5e162218349651c6a0849e200f20d5286d
-16fa7010d60a0351a127245d71c843e5db40109e 1f650585eb5e5cd8076ad327f247d2cf4c732680
-dee406d624244d7806e96dbb98ad1b1228e04ad4 f24c0f2cccd9c8592c2c5127533fd28087d47bac
-2957b49f4e50d396eb746a029cb30b0bfc744703 340566bd9a7e33c8527c4e5e9a07229c53581ad9
-c72134c7e3ae1f3a1f955a647d6a72c35601c302 ca73740bd16d4ae49a4ef4fc44751d458138ab4f
-b771323c80b778cccfa52ea852d8e25c9b6c3858 9e6ca2fa08554937ca900672c28bb56e8c1546d3
-ff5df024b80be643b43317fc82e0c277c45062c1 d3fea588b077d8472bcad24e6cdab4cc188a0c9b
-e74f9b7f7899dd88cccc23f35c123eb9dace2786 c6fb214d3c6ae8d326aebc970c9c763f50922146
-871dea606468e81619fca3afdd144cd5e07202e7 507e3e15a6ef91899961d71618f9d4f629c77bbd
-2f54ddd2e39dfd21bb7ab4a7c0c6c5669a598afc 969b39a87a73062a4b49e37076a1ca2365f0af93
-2fba7f256fd7ba96b9d9cab7e41b9a897f6addde 6a4b1152bbd4841f947fc255690dd3e1821faf17
-7e0b43e59d387f9c8b61ca002e20a4f1b85ac87f faf8213ce875483e89c00cebe702ee15051382a2
-c8b9d8c87f3732cca56dcfa37f4352b1099162ee cec6c87ddd9f585e628722b10c523469fa2a3ff9
-f74968eb03ae3c9b97fea343128800b94aa34e76 4b53f1c828f39f32d08853193bea82fdf9702d52
-2cbff991df4127d712a7f437a56754d3bfdcfe85 cff958a750a5343d0a895b8340926814b0ab9dda
-966cc965b217250ea9aeabd1c05bf97a28390b97 2d61f53d9be52419537e5fdfc2040574e7c7027b
-146c12e1ab15e155670623b6f8dac70e4d3f5912 20a887e0b5ea8289733e925c9f75908b2855421b
-705cf3d7fac5b7c77f9456a6f3e2878a51e6531a 0c59611ae98cdcc7413b2b1ac893a4f978796591
-dae4d6ae41271257ecdacf3216473f5235d655bd d5a8685d6e75b742a1945e8cedb8ac1204d87e1a
-0d0e7ca071b0bc5ba872269ee35a62d2617c52b1 5469bea1c8b8f9a3d947edd4d6368b6e019d3aaa
-ea611fee563d547186ba1a1f08758513dbc89b70 4d69aeb748c2c0236beb7c21e3467749791c2b44
-2ba1988e4b46f0e6bc408c94087f1d34179fe76c bdf6da073d1b3ee90955d67bc2aff0535d4640d6
-ceb202a7e31820c9c24017ca6aca65350f61ad57 150d5f17afd5e0ebc3809aa5ffc78ac338e6f31c
-7d75c1ffe8cede6ba05c602ffe63a29dd360a7df 78e20de31b545a2bdca79af0d14a0e0fd50dbfe3
-4cbdcfc8b196f0ff28df1d0897023ee967cce2a3 e65507625123999db9871ba0eb4888a79c6f2411
-ccbc97bfde1ed6620ebb5ff48db9350318269d89 7988acf1d6ab16370e81f6eb900d55650e6d4ffc
-d632626f9b11c5eef6796fc456c25ed36c0bd174 c94e698ba0b9bf9846a0fc12e9f2a790f03d9f83
-ce8619b4b5230e78db52d3b9f70cea777275bd92 c23a71dbe6a3250c97271598612a3581f4848339
-e352b33833dfc9f79060616e9e2cd50e77ad5e5d a5bbcada5d14c7c7929f20d2ca159e99dfb2dbc0
-5727ab8172972ed8597d28084abd65113ea47a36 a2611bfd9953ce5d36f598c507983c6ed01dcc38
-19ac97b295e80d762970068f513d94fb5cb71bd0 8e650bd22e61786fed169b0874f4079ccc28c413
-b9e9003ded6a323eae6038fb14a9676482c4fb20 b831165533d5f18456e3aa07584c18e225cdc162
-7b110f1e6b4ca5f3b15000a6314773d4f85f26ab 4a3e0ad40f0060c50a23c267fa9f8930b6d647d8
-a7a47a589cfbde8ab7a99a047ae07680ab31a1f1 05ae45241592c4c7c5945c141f972367e9659141
-098044b25d48a46369f4de3d47482e35dd270d48 2dc88b4aa627d76cbb94bca857d44402d143436f
-f3fc1679ec4e98d1556d1d82edd3418cdf35cfea ffdb627f79403f4132212395afabb2810de47abf
-9dff794eaec4bc9821e252b6013736cf0692933c 8ceebc20bac8678b44b10a005ff8298177173036
-580fdc5569b5534428c58f3cde645a23de983200 ba0f1d72dd0a2eb81be033a017c03ee6428016ba
-e4f025b6621fa0dcac06fb5b3b53e36770255164 39c45e56ef5533d2da5c4d68ec73c07e8afdbfe8
-373c6c758430c733c6e29d00861eaf9f7721557c 39c45e56ef5533d2da5c4d68ec73c07e8afdbfe8
-450632324af3777462975cbdf4d76e6a84f4be0a 9e0b6bd619ccdeead308102bc27b3c3e932c18a2
-bedcf487524ac02e1ce51a3c01eb1c87a740952e 1f6fa22781f0272ed685ca677952ea638ee23cc2
-9526cf63c5b214da6a424982285ffd813c65264b 1c6b8acbaa8e1c7141cd05a20a096ee9f090f9f8
-dab419f6d246255757cc0869e975821fcab94d8b e56f3cfb13b65ccae42f41d29d1a4efd91c19ac5
-79ee65c93dde2612e59e5ee1302aa815c65687da a872e385e2962003b48c9343c289aaa0d9932137
-bc2c43fede43a208b5db45eb9481db7754296b22 995d02c6297d77534a6c0e2afedf94258bc12cb0
-3fd2463124f692c9c15207650651d2f209e6e5da 75fa14fba5f9a5535e139770213ed6d625877a50
-d902fc6f66354046e0a533b0d7e08333be4ec5f9 dd2d883dcc2d485c0965dcabb7d9e5931038e713
-46899a58542f44ea4fc00158e1395de7a5babb4b 04fcd620f192bfd3c308ed4c5ef5631a821e81cd
-3e8fecbb2b6791a88cd255ff229cda34f281668c 244e83ed952f70f8eb38d1b7c00b88cc0ee0f027
-39ed0f82f0be199b09e3e0862fcb6bd81408ffc5 c0e7da248497a8206b641e1c2d9af6b64d3e5851
-589204e1381979864fdcf63cc31c7cbdfaffbfea 279530a921f0cf2205ff83a66e334e4111dae4e9
-797fe6ce5c49daa4f0d5bd166d3fee1f8f408a8a 29ba0e781d7136785ba7a0033038d8245c5a20aa
-3641dc10c086fef7dbdf85c9b5b47d010af53456 99c8351cb11bc605ccb7f06d6cfa5594bb01b39f
-d474b519b8c19f4c2ef7792163c775bbe71933c0 9ba3bfd7cf5708bdcdc96420e91865dbbb47ddd6
-43297b92c1bb7487dab6610bea61acac4c355878 324bb80ab175e23f05ada4dff4e4f3dbb4861eac
-5e7929450a19b7beed5cb0ce2b53f09ff9dfc4f1 6f19a0ec08d9a312d87717a1babf748de1c057af
-8eb491fbb191c521ae0de5ae3a262126d8b17329 7afc5953b7c208e3b984536085aec684e3d8bde1
-c63dc203fa9a0930b926bb67b3953df84f12ded7 dee0d6f133f9eb786623579d2fdd1d21d1e17fc9
-b6ba9e3f42ab6910c1177bb1f7b62e046cfbd7b1 2ea921b42d88b665f8988c687cf2705354343713
-b45e6cd716ed9b2dd9ef41b8b9a0fe2d5b714afe 3f2130a72e240a786414cc8f81df37eed6e4cbc6
-f9dc56f42133f253ac69cbca7101da52abbdef94 66db60e42f14ec612c0750dbf8b682241f8ca9c4
-c5b3adc89f280aa3e6a6d8ee51170986848f13ab 9825f4dffefceafa1c95d7804dbabae00abc5112
-37aa955192a76546c38a93243452a56e9b51c5d6 aa597440ec5a78456091e28b91424ca236915b1d
-12e767d3576e2c6fca8889369d5d4ef87a15fbc3 d7194f53429a43a30118ec5dc9af1b7f7a81edea
-d312dfa7c91582eb8302f134f80fcfb027730dcb 72bcf9e3f477e65f990d772d6ee320767dd5361a
-9a01a2f858e08c7a9aad77e3622c68765a43546d 2081ae300cc2f364af7eb5f9eec2c2dd8ed03306
-695a29fb03b881069925154541e4d113f9679ba8 58b837bb6c85fa0260ffbe1cb6912f74796e009e
-b64b900bbb3c402807592d766284c97a9e4f23fe 4bdf85b1448d3be77ce85a79a225905abdf4c4e4
-b62a19f00e8f209f21798af4a052cee8f46c6b7f 8acf92b0d7f42eea99d04d259570f603d15f4462
-4f7322457d3fc23ab02526bd87f606b0932fa8f9 9c74a9572fe6d792555d33ec75af0e35a7a12a70
-b6aebe6f52de88bb049085fffc8ea0734586928e 4201fc946e232ef5e6881c3b425de28aa5c3ed71
-4f9b9ab7abeb5110a28138ad5b354c503e6f5bef 9a776d9207aff243f1c9e8fbbdce8c729f539e47
-d3f6a7026dac03bd491a09e2199025773176463b 85d7307509c22545c892084ae1ce82e2e04f68e3
-a5cb541dc3984461bf0822ac813df9c96c443f96 099d1585ee59cfb423a1f6ea21d33b92d55f1e0f
-269ca10e7c957096b9468822eb4e928a8642c725 ef281fbc5bd7e93326c22143305684f4fe63a455
-830096cf5469acc78480953ff58adaae66ff8099 330a9feb4c99295414b0812b581e541899def906
-cfd91426196f30bf24c6565a31a65ce7bcb08644 48b13bc3667642093bd02f49d042c5632d2f2c9c
-e55f14cb0973a04a83150a4504b95cf4ca1cde0c 293c86363cb2b1a6731e30fe00831c6a39cd2fa7
-4075d651687d20d9827733eab40d06e38f615473 665a28aebd9980c27dc990606d6f3a7414f179b4
-9f7b5ab3feee5bc57568ed310554f0bcaeb73d61 9665dda314503eebbadfc31e1cf265ce76eba2f2
-cf0ff077eded80ac470fc86a8d6bb93216587822 fdb8b6cbb453387fb44d7c8239be038ff1cd14ea
-73043006799875847d1771ba9b8f3ebc61e6065a f403ca0c872568d2827946a5673ea87dcbbeee4a
-5193e35de572110ae45b0822883dfd0fd6ab66bb a40caa96f3c623c68775324e93ccd49f7adcf537
-9ab57980f9216a67752e33154b255670b78b2645 0da5690b8ebd3c5822882a3ed393113e9a40cad8
-9fd5c1b399ade95cf101ab228dd1ec83d9126d73 12d14eb7a36625d580e88681fd35efa8084aefa0
-05a76e4e4695d1b21c92ea54072a72ee88a5d480 6ee65ac48e84d16b801c20cd270fb40bce53de33
-ba07badea9be3caa69bda2bb2c6e1a7313f33f9e 6fb824b95fe02a3e1d3f25f15a1d5c1ad4cf6dc5
-59a812a6a0893071ae73b5053c34ed2de03e59b3 cac6710dae1c96f2d37e72a87049e447c109012c
-512242049933f4dbeef59b9a13c070bdafd41b21 59047901689bbcf83c3c6acb716ef395cfcac1ad
-fed54d013dfdc322a1b98e2299ff56ef7962399e 80363d9dcc94b6516b0fb3229e9d861f3a0b798f
-e0d095ce10158efd473739d29b1342c156c5dd74 9f229bb91ca417b77c590dd1a173f9becee13409
-c28f9a30c6cdc2e3b51319dc488c38d9f5d99271 e027d34ab5884058d46ea6cd987a7578adffd924
-e544dcffd9724a5eaa0085d101e74751eae333d9 40bfa8f7bb69bbedb767dc31cd6c67e160797abf
-c3507fcaa043b964da9acb1bb484753e5d59439d 113228747f650e7102d9b315607a0efc251e1dd3
-8713a3767590f541abec3bf81c697e6807a50315 5e74edc56d14afc23ee601aedc4c1e81a32c0dfa
-de56fc5302185cf9496385f9efa95f654de3f8c8 04a8e29736f8c123b230c9bd62e8db36f3809ace
-757eaec6574e211dd0a8b66a5547c6359d8b4b37 a737b449d167cb0a573f2952730e7c2b8b3ac8a9
-ce0fdc40dabe62dd764c5b2ef6676087983ecba6 246f2a662aa8488f72b65aa12efaf03e27e9c987
-76c6b0e01528f64b1cb083530f11d719f8f7e837 d82eda3dd12c6e28df4293ccacca47f78daa5028
-25e0caa847d3f552262eeed5d3bdf2aea1b6bca3 b8168bd64ea1847db11825af5349d0e36f4c3434
-7926fb2b10bdd9674cd1707a881eeba70a8c7dc3 26dc2bdc8541b431ef4055219dd8d55154164baa
-a8f8842888350fbddba8161c15f3c58a24281eef f682715d1c57205f8d5eccffe396e76728f493ff
-8c007d4ba1af676d3352d3f7b9206e811447fb9f 15e5ef9192611c0a54bb5337220b38fa041e3e01
-4e9ff73c774986c7644cc344a94041421d58adc7 01afba8c3674363294e53baf2176206a1b460d0e
-e4a4248b4e0451b4d836329c1435e4450deda224 1d293bd0134f9607a2eec5d62797eea97442dfda
-3c64f35621ff9b038d3536ba578f26914fa4093d b61cdb31677db58a1f2124333168a1cdd4888b77
-67a8e0518b5d27729e45f534f42b3f543345971d 02d069f58229aec537888ffad42cf68e62aa5a41
-85299f2fd6fb0095cee932a08d1f9b3a9b3abc21 f289b5f7879bb1e8ed2da81ffeb334af14f99a62
-cbfd8063093f12ef2f4b479c2e287edfc7f6704c b33e365e6b4e833e1ac8c517a1bc7d3101a11017
-3477b5a153bcd1d0cb6f6015a2b1fcb99b1b867d f01bd483fe191f07ca9dc4fb11527313946f82f5
-f5ca4d9dbaa92d8687dc36d88bea1291e4a5ae10 2fdda6ee75a92d95112832df76dcf19134778c2f
-8fa0be1623a8ec205d35c5b6c13c278f88b8ff12 55308b1b46bc0314679b6e578b6f4a32a8dcc83b
-dacf5f646c66197f3b84a6130288d5742d64fe0d 42d60e66cf09f0b2f44f7b3307f1c91f084eed33
-4cd63916abca26c9930b3d6b86f6de497f3376b3 ce6c7301511fc9bb97cd485fb439f7494d895071
-a55a8ed8502377335ad078ebb2243bae0b2af51a cabbfbecf5998740d643dbb08164d62f97c628dd
-74f07809635b2b0d877d151ddcc99b63758be9b3 17bedb1cbac50f00952efd8f72a7aafa5723a71a
-1603d2d159309f17187503bcb39fef877c4257c6 fc60f5e063501e87cbf6ad5f09f1d9943756fce0
-5fa1787fe01ca044e554e6469b26d87aa66d7a88 8ce744d5363be1195c3cc7343167f5a4d775930a
-48626d4aa3fca1f0f8d7b3847b4c0cc4ab7b6be5 d1f26819d29f4e30240381ffe0df571d075e0318
-9d91079dd1871052b7fa98755e3f3f5fade8adf8 3c784e080bab3d0fe963546736fda626038c78aa
-1bc804aac70387072d18b87132ebd21d46f03c10 575ec7b6a10767736529cf2816a5513de8614ead
-959454967a2e4d74318b49072d727372b025d157 f6cdd93380d684357726607ff9ba74b4fd0ace26
-9f69fd370307cc46e18ed174227cad699f7bcdf5 3d80d2b1b2a995a9c7a17b49670fa9875c0c0525
-3699b9bb58b3a76847e89ab20460daca93f4c8f0 56f6430088d6d0c3ae1eaddf8418325191a83ead
-6a1932efbe5f8bd233f2adf30a2afed67f35ab7f 9eaa8a1481eecee5206eebb3149d5036ef1ce293
-8505df3754d8a7f72f5c6e88f3bdc6892752edae 7f38fb38456d18ae3c95f7b9c0891c082869944d
-19d1715f6c5ee154353c848b496422e2905860e6 f24ff7b6764fb9c9f856402ee5bccdd57815dfcd
-1e591132fbf2ef0588e2268e8921cb98c35eafe2 bfb9df7a043eb3055f9335d6cb20b06b23da0520
-64380f8d72009acde966dd1456554b1449ae1490 eb2e148d15c64c257bc328c76f475b8919bd385c
-4bc5523c74227e8a26a502e7ee5232db230277c9 4492b53146b5783abdea033e39dbc434feef3e9a
-ed724ef4d22d3c18db99b1d68f0314e5ef4fe963 7d7dcbf0f6e3d39ee7fa2d6475be108b0826167f
-03feac796f6ad1bd682fcf965d7bed1f767ed2f0 20dcd03a80dd2be1e04bdcd127c54cec154126db
-2ed240ad79ba48a5430c817b4896bc85cb8e0d76 47111180df742209f0e5617ed5571baacead5684
-9b2f09157b89f32da9990487587549e2e4d8905d 8c87ff4f449bc06483e4bad70aed3d0c11835300
-48ed09e6dd27a3708d1239c3305c1a7d9e62324d f7ecff5b4a6fde972b991c0f8ef2ac2fb82dfc4a
-5655ae12b53da13108dac86b795d97aafe3cc648 33a3a29438a3dc62638015341cb9981d28762697
-8a92ceac260ceb194cb65f796661599b608e5c14 ccc7fa0e3b049b174c2f77b214fc22dc87b8df7a
-42502786695994f92474b5d756668d1fa04de9ab 43db431bcf572965cb5b3d6018b7190fb0d16e9e
-539532177a296f759d6a823708f9137a13d1decf 2a0cfa22d7a1e0844c38046d2e38b5a772c3583c
-7b4e9d4092243d8c0dfe1b269928c26cce31b1a0 d16f439e547c732270dfe2e3752cfc9664f73655
-c350b02fa8d2ef03d97ae23177da1e4905d86252 7b977ff073851c229a4de4914ea11eeb53fb63ff
-688db499e2d145f2b06c0d87cb11fd73e9db07ad a26ca45bd377705726dcd188cf2eabfc5d37821c
-90075600599f57124962fb8689ba073571fbca98 13d147b1e2c6dc8afaa945814d38ea963ce25de6
-aaf1b416e5e70ad33be28def669a888d3ae16be5 67051994555e1566b7fb2a6b262020a987a7aa5f
-e9e846ecd32d51b9f70872bf118d13abbb86409f f8c5393c4661dccd6d137b574d66c98fe33d1b26
-d3409dbc47c158b6130e01f2198101a2e380198b 8ff77d9f2446ce774008b8ae39fdc30ccc69caa9
-39807275e2d1cfdb30082627d8fa4e5dfe0f93d7 5a14e2ffe385370506a81d31ed6bcc908c909ba7
-2793da3c084bcee8e5513df3ad7fd38f1a6b927f 881a671cb7be731b6f3ab57607aea031aa9aa92b
-02ee1d50c0bd5875122a78266712d14f2ec592e2 8383820f10dbd1184398ce4aea3d3496ab915e65
-d7f92ba643a98b5a2ceb8e47e5f9944249744bef ad724543d23d31f5d338f996b93c2ec934101ee9
-b1e0896317dec7d6be5d1033bd456aa29a9917f0 38f87f29a1c682ce173f0b5a9583b16185c3d707
-6dd09553d7fbf620dc047f3c58df423324dc1e35 f0480fa0d3d1ea7503a7f3d0e4fc848508ddc5d5
-2ecd4548c3be17fcc39f79b94d00d216a100e5ca 9d9ec17a8ded3a8ce21a8059797a94c824c68451
-aebba4977826707a4b7880a6cc61c163db8a59af 580ec7d0c70aab542d47a7ec22c96048de990f68
-bd3abe2347db888850ee4d3a531cbf2880fb7ee4 3a7fb9925c8b6659c3eccea5efbbc1223d5f7309
-fbee1376ea5c6961408e4b68b8ac03e222d22a2b 04438d8686fa1995671792c3a2a7c276a8351b78
-f2cacce6e816482e597f4904c5a54fd282e0c08c fe9d7d0e272291d20862a7ac25d46f53ba3abfd2
-f4b661409f2c6743f4924d894cb77e600ef82d9a 3bc54a60c02fc09f609e5ef4f5269d8d3ae3ec50
-5cdc819c0e723be77112c9aa41cade24c4cd40c2 1465e4ac74df38e16f934dae42d9850318e9695d
-4ba70c8da36ff345e6e5ba65c092d589dccf3322 5a16f8a866e18e42d09aebef74642f3e3d006101
-31aef3cfb56f0b82a97ac965374053b21d60d2f4 112709a9ee8a46a0eba215f286aea55f971ae17d
-746ff664d6f9a2b00a85fda6f48e6ede83a345a1 e2fb247f445663d43ebda5b0c8e78409d9d14cfd
-19c67b901a6bb79d7a5dae3035f3de341d63abd5 564df94596b2311fc85fbe48f884a5b395e23d9b
-0a9caba4592edaca5abeef2d41f966892c7d29a2 43f02be63d37c2ccfd1b179cbcc1962744226a11
-04232c2c3f5f33b582113573d89ac06d888969c9 3f4837f055290f12e663b2a42a824de89201b373
-73ea2dd4851d9f4e0ca550e77cfcef276b26bdb3 13ebcbcf3e088aebf4a70f7fb72c095ea8d5b249
-d4d44001ba932dfc474f56979ae58bd208c842f1 b1395f85346d007a8d54b2ab3266721a65d3ec46
-f4e3729dc21609465f9dbcfe655e21965a4b2367 b92152b6572ff187b8d810f47429b86065f26374
-5454e37b3bd1d27cdaf66274e0941630b7a3c06d 0a351f0331c3cb1fec775379adf52adc73e58861
-74b5ff18fc3b782f9a981981996d311a1bf9e93b 745de7680ea9d8316665402fec3688faed73002c
-71eb1bdc06b96a5aac2c148d02a3c17de8320d8e 71a4d8bb762b74db26a1e850672b6e00a25d7228
-225a409ad6dd88b118b5ed94b450673fd4030b01 3012a40e0e8d935f3d1a6bcb6c6c0f6751f94f92
-b161e58b36aa18a1206db912c30fbc273bcf59cb cd9320fe2ef1d28368976ec82c873e9fb2eb8fb2
-4c8157e65b57b4e285cdf6b3fa6e649162985d7b 580ec7d0c70aab542d47a7ec22c96048de990f68
-ee086b9306ec744f2178baa6cba67c0635712d94 70ec3f7bbcf66be0b069a42987923e2585efbe68
-a2fba65cb6eaeb8f0b95013649b06ff31726123a b71d9699d5ea99c4b7c0b2c1f0b998b3ccd6dabc
-9a048169fd437e0cf7ee82e19b36533251a53d13 c19eb374884dd6854100528d8bf3d2a2da274d7f
-8b7c6c5a820f85450b809a6f35d74a46137403b1 f0dc74f892fa850c0f77d8882dbab6087b15364b
-cabd7404e9799b03ec5ff8b1906ece10915aef1e 394d62b1549779ab6dbcad01f836e263574d77f4
-e78ad4cc44409f73a1fcdc43576a4df7344dff3b 42464b57f894ce83adafb3c4088e5e4f3f06129d
-57372c4040cc81cf43815796d23b38cd66ffce91 1b83a47e1c39376c1cc1c6c510d89a28ba6d1a01
-adc474e183be1a70ee8a712983ec177de74baafc cdcedd7bee5ddb1da6cc22b0959e182419b1c425
-d67a28c97e24a29a9dec06b547f9a68989ad7ab9 ff967a86c46dbf21fd3bdae3b5043e280ff7a8a3
-2f1834ee9d60baad907f11c99e1e6a5d3a149afe c26d3290bf199cb1e16954c67dea269125e570ee
-550afcc5b2b1c9003bfd7b4971adf791d03c60e3 41ae4db4928f077cb5f3cfa6c877262c617138cc
-3a6cc7a49e27b02c742e191396e2a767ed9beb8b 0e3a6b3d2b0719624caf98fa4eb1228f1603be44
-2fb5d85b7d9611525d0e7a8a4820ef3e26140bff 46d6773e41017da7da5ae964f62440572631b214
-85d6f72517bc893ff1a9752177155ce9406d2c7b 1df20c87262c6f9f51f220b26ddc5ac5fee19c0f
-64f659da7d47063cf271e53bbcfd863852ed84ac 7a1c1ad5c08d72b4a5dd82f19360c9e5d8cbcf89
-04598bd07be8cc1e7157bfea57c2fb2f93ea0003 d2d308120f49056c85525aac85de64edeaf53dd9
-dab97ec1dad646f3506ed548069ec15c971327d9 7add9ad2a49705a79cb21be8139f3755bf39cb5b
-c716e38f8c1ad423d720346821d3b3f1af4cfb53 0769b40e270c58bb775fa07e676a58ca032460a3
-a2fc86803bca7fa463c24f84f64225a5c98843fc e035398afb8d3f19670db68f5a1e0cc37e7761d3
-bf5b37f36ff2629a86f616fec4949b8dfcaafedc 04eb749e715d58bfa85d0b18e9b71522036eb466
-fe3d804cff60b12b802d3456063ec3022b825c6c 46b0dd965c04710219180dd53f851f14307da4f7
-d3dd64a86388ffb0d2684bc80c04bc2e7bcb266e 230480005c79e92124c467bf406e234db003351e
-055f0dc97a8691f89b48653e58eb1951b6b3b561 0d96a298f5251c701e405109c2c50a5ccb33123f
-1029b0934b7e7713bd97bc0c8630be2742580240 b2f0095cb45543e4d36291c3c0768fd9b0f82527
-4fe08b832d4022613e3bb25835ab29a23ea0b836 bfd5f8751d782a35ea64edd3aebe27a8d00acd52
-87dc20e811198bfaebb6fbe27bf6e75220a5cf90 c7b703601f93e5572a8c4c16f6a29a29815d335c
-8603109ee60fef751835be7177e1ed1c09942760 7255532138284051f0c8946495c13670b2df3687
-af1ae878171c20c317eb4b50cb1b625739372e6c 2164742319bac42adef2bdb913b3e7b5c8ec4df4
-04ebc8a508e0c49cc2d03920892fe1bd986fed93 893e7032c5d417abc6e0124461b919d76ef6670e
-495a4aefa6cc2f5267f19f0934ce0d41be6eee0c 40d360837bdf68f6de483a978b7dcbb142c4df1d
-12055e71bf85ce4894cb3d35a9c4a46cbd245817 eb02509acc80741abce671a7c4787274c49e5e41
-79c0487c2280daf29454a7a456648d2a941b0e46 a24d4eae85b13aa9c339a48e7a57bda4add1ce69
-d8163a4e0de698c46595684e724d449a48f312fd 37d4781b009984526725406a7b1bd22b3ba70f39
-b805d440d8bcf0364cd65d3e19fb4c0264afc1d7 7af7d2df124e00eff68e82bc0a765b155bcf1238
-f4fced77e3791a28658e69135038724f5c4afea2 7df63294240a1de4e37b7f6dbcaf956a94366c39
-c7fde7779b34ebd176171b4458e11d5ded2d7cf1 266c1977c95de7214279fe7b7c45642f1215e883
-1557ccea123f77153025301e2bfc64c6245b8f08 8176c247d7289ea22c42494d419e89ffcc128111
-432abe40f4ed155192fc980a010df9bdcde2d099 b1beb446953f27b8319d1b2f0a385827c8c56380
-15ca6a51cccfd2f59b3fa1a5fff1fd7dff67be44 259a7f8619f761c68853af68eac8d48266c61ed3
-8550a4df316130f2e16256409366a2734db9e22f e537028ed3b77811311653635e2b73d6cd24090f
-3bbf49d8800ad9c2db9bec18bb2cd11a7b81fcdf dacc2fb7d240e2d8967916b4483fdb815575908f
-480f67e4eac0223626ce549a20760e81c4bce5b1 2d7183f4a98402e09ec2858d4d040348abceb4e6
-5bff1bc600043902838cf73a2dbc34d803994c3c 6e13d7b4f9e9303ec7c76054ce87747e3d9205bd
-d6339f44cf966622b2d86cfaa5e02772fffd9c43 cb2c7cea7cf866a3adae2f64168f509bcc82f4f3
-04f8e203f126442998e000c8c99dc1664a50ef90 1c6426518562f1f34920428301fcdaf6015d5915
-eaac19489aa6f28276f1fd9c93a479298d51f9d8 a1e219f743968bb425cb56e43a98d0689869a055
-ab510b6edce02cdc14cdc1cc1afcee4b12b66ebe bfcca3fc790c65b57c7e9dd862810ed0f1169934
-239fd82121fe9c0c066d5a6f8cbb752daa172f15 48d240f696c716f93f76942489bd474d93f58c60
-1c4d5467b033b88dabaf9bf5175c07b4ad3ebe12 522fb89df78c1912e0ad65ee5582e009203ac701
-0f5f6f34112a6f45656c99d299f4dfe4e2f6bbe1 19639d6b0982bc73c0cc45b6978d6d5028247537
-8b7a908f064b28b657acb4f197b040ce7e4a545f 4286c71c327f07d0344aa25dbdd7d5b6c9367e37
-0a747bf9dc55ad4684617dc73c77651345556a85 660548c6e088caafc55f80af863abb1e60f46215
-0d60c87d5ebdd43f7c3cbf70b5df2df5939a48b8 47105837f437dff304b4990d056c182205221e0a
-2049eb26fe412e388fff514bfd02dfafbeada5ca a5661d17a1577c6790d810f48d0f404b738777cc
-fb454951070b563643768251e8c7dead911b5bf4 e1561dfe38d921728a1f818d306c2e36315f908e
-274d4d942bc25aa2954c1cd2fb572a282604c652 7e71e34118468b2a1d630e6d9551a4a73b67e929
-0e875e5d6c3d7888146189c5a31325198c894ca7 1579fea0ded3ca62e09cd4c191ccc13a327b3ffd
-8f6a2486122dccaa701cf9d6d032c23e8d0e4c3f 33b429a6a6d0ce542d417c9e5e0a6dc836359c2d
-0b35bda8f29f0739af60cb2cc9e645812701d80a a923e0cf95ccc13747f85f84a84330480c47eb00
-e67bee5946463737e7b78ee39cf007ca619a569f 763baf5a588937f533471b461ad002eb0acf8a24
-2012f21d23c66179345fb26148cfbe19835b325e cbf0859072abd61217aa6d472f5c3577790e5e36
-91b152c32f81fca47ddcb24444025b58982e2a6e d45c893c42f4e0371eee2c8e1883388b8ebbea69
-c2266da89078d9efd3e8033a3552475833ae498b 06a10698ff9c4ee62d57bb1a5596ad0516e73126
-163f10d967208deb788bc34212d2817159047333 6e13d7b4f9e9303ec7c76054ce87747e3d9205bd
-fda8f4f609b99986ac8884128e7f938ae43ee219 e2f01ad6c248ae0867e9d8824bc919d401907211
-6b524fd9dea507d5aa86559523e2827e39fd4c56 8a1c1f70a0af74746ea49c7b9e17c0e524603434
-0a16f66bd81b55888252c386d45ce912f1b2f24a 4edae2c9177fb45fce82dbbebcc889dfbf222851
-4fb779b0c4c913cedbb8ace9b641a825a4f08ff8 0c0a074d754c99e34f656f8d0cbc4cf9038ee595
-fb2af72d10231e04b2e79a7d487ea9e8559c14b8 3bdd99dd7b9d181013f4fc89c7d1440ecf509e8c
-8b2926f31e1024ad441b8bcc767ae334b9c20668 46a8e83ac5b01be198abfa1c68315fe6f25967ff
-b5921c51180d0d649220e53c0df41902c715ca98 ac518387c798d2e1eb73caa1e1f73167d977f162
-c77fc152e30545ef3fd9d7f686b867e680a03075 4bcaf13b0e0e1f6002bd5c73cffb27b8f4968427
-85a14b20af3432e77029c96ffb8707a541aff338 f8a98f4c1ed3c555def2512855f3f78e1d21245d
-78dbc96c1f5eb0501c89ff3f7ce2a69af5c136a7 246b5d28869858e7540e125c549d6d499b62ae4e
-57cb1f956acab6e0bb767b54413a84f929d4ff56 786b7ce6c2290bd2553e134407a4c02691df6280
-7514260019e9b2eac3367cbacf07a92054deb9f9 b1edf10bb9654e03632e3c59cd961250f6a6574c
-30b1624d75a0dc84c0f952c23587ffff757224a6 ca3b581125ad04174410b57cf77f1dbeb450a9a2
-2ed720a6e1c4c8aaac9f791e98e3ac42f2cf445b ade725c689e7a33c549364cfc25e229a9f0079ab
-c05b8d1329a77dab85df1ffabb31d547c0ee9acc 38afc08ae4138249e87660c430c26add36d9d404
-1b65d0d42c67f4012999e5e593b37c80e5b3c5c4 8a58fbb76f2a8a4e3a15670fd5d5f20856906449
-73b87388cd8e793d30325acab4f679e27255a333 71a17489e258ef31f17558d1ea5b14f1d1ed451d
-8a45cefd25353264eed19683670651daf50ae1e6 38138d98f5673c8a7ac55b266ddd34f8e37cdda7
-379585d98bbce3c83aa927707ecb41150a1517f8 065ed2c0a6fc021d3edacd947a70b009d68fe35e
-ce38f719cdd9329b74a140b84c9c6ed130dcef9c defe3eedc5c3e3351d48c7f81ad593985aff2615
-64c152e16356b3d284958f65f5b94437ffe829b9 842ea478f35a8aa4d7739e0600ead53bbdc45448
-3a31a20ccb954950558e83900b9c10b3e24c19c7 b860c94f71a8c9e12187d2e15d0c62588c5a0be7
-050ab9232a5a8d9c9fc2cfffc80e3f323fa4cdc3 7b917f8b960ae5e44903ce43c1949dbf41940169
-c0b928fe4badb3e5eb9cef67bf19d9ea74cbd2e3 6cc29490d750f77ab525327c88c013ef1eeec55a
-2fc9ed1b55607b4f836fb716184c8cf97be3ac04 625d61614738d32239886ef79113e40de968ce9c
-67ffd6012e90fe52d5959e2bbc6d6b5bcc45124d efa12bab316e0ddae0cacf3d1d8cd345d63248eb
-addeb9c38ec85c269c37e0fcd547f0d4c1fa9e1f e5b8f809ea6991d9445013ab7179cf04642b2c43
-c69d143d1e903931eb33cc67c1c5dcce3a211160 76fd067edcf65f0599924313e820e6323664dc7a
-0e6be7770d5e2869176de450563c767c38de3f1e 1ce9a88d2346fd01106abd63897696edd078bbc7
-a5c14418734d689876dc96e1c2bea1b5e19e2fe1 3faaeb9630310249d0b4f6e3f2a3c9838a8a6451
-bcef26729381fb5a61d360051439965269e6ba44 6da9516ce2f044026b83e25e32ccf8f8b32ac45c
-5ee181719b62c6f9d0ab4c7e93db99dc9265b1b7 454d81b33212339571e4b8370e584a41fc424500
-aec73db52d4cb686e48fd7b4d305e661c94f92f2 11ecfcdf666dfccae979b2f6c7cc749895b86533
-d1a250b1401c1172425d6a1e64c9592fc9c6cf20 b1c904c42965c3f09fab1023a80ecdde0374230e
-e625cdcfe7028238ece29893833c0361299ecc71 ce85e0ebc7e9c908e0fb65eb2dcb1b41aa6b6478
-070dd9af0d82b79d6a558699f828505bda50fae2 3530ae2d2e607ed60f7292136b48421bb80ee39e
-663cd2f558c138a7f13d55727342f5ccbd7361be 40e630783da28919a7630ddaf90dea2c901173f2
-867a93dcd308a13ff8cc47737e3a0947be22ec92 ff967a86c46dbf21fd3bdae3b5043e280ff7a8a3
-b33bd0859c2fc024fc1df3fc086f9c0a458d3c6b 4bcaf13b0e0e1f6002bd5c73cffb27b8f4968427
-fd206334cbdcf1b9d001eca40139c701080c849b 78dad65b4f1596277b90f020da1ef86db44c3889
-cf9d663a17f3d4fdb92e2a9491553ebcf1f32fb7 8a940c218e088382a2c5f0860f05901b8c6e9ff3
-535de4b7c329c0d0f1840745fd8043982648b9aa 50897c6f795dd0771a1f83cd410e5338ed50ff5b
-3e6965ecd1bea35764585acb0184e3254dfd393c 2c735c856c6ddda746c9b0f413f0dbe6ef7ceeb8
-905446d91cfefceb5b3c80e04b8a51550e73d6e6 25e6b087933d184d9f7f0a85fa7feaca972c4f8e
-1147fbd720b75fb6742e268b960edca960821ae2 230dae1449fe209587ef0638dc35074432f39d66
-7b6519fe3942c62ac01089b9da4f23d9ffd26d03 346bcec17bd23e11896d4b4649c3dbaaa7d4bd55
-913cbba4b9c2dddb0cc67c85e50b835f34899ce0 b9f7fc1a7234b4f53c8a9e1192d171684dd23243
-9b5878836ebf9c2d3eab7a3987c0a2ce2741f6bd ad965e4d984206829ba42c57a761e6dfb50cc374
-19ca8ce2282d102398af9a4f7129855fa6191eba f2f8311fb6d49b9bcf4b0c624caf1181f4dc5124
-9f257db8714e58f9b908c5722d83c755c741de2e 9b61e25ab18b52abad8b6c4922d4a6ddce4826d9
-cdac97d4e7203bd98e28faa251d676e1eea80e29 fc7ff2f45d7c80465145e933ab16d7ea7bbeae26
-34b2a7c0b530a805e76d6b72886d4531edfc358a 10822014d31c17cf024b415d73b63d732d919ce4
-2bb58ead2599c46df052b0977742f2e002619ed1 7935fd9b8a58131a3d68653718ae424149a02f9c
-1bd9e1485298b4575b33c4013bc94d6932d58ccb 362e952c237765f6235748478e0c93676d1201ac
-1921049e427bcbc5c62bbf9aad6198ceafb78993 7af3d3820eabfd01e63b736599fed8652ead506c
-c8826aa05301518f1798c6f2ce8b7dbfe2dd0f35 538464655796adc87369e775885a7a404a7c6ba0
-4a79679166d0eeb4b175e5560c24ea39a8537eda 6addd667dd17a2ef8148f6fd88dca4d5e843522b
-577dad371d89b7402ab4ce4d6abad28d4e611189 d06e07647b44fc686bd3c10b1bc88b7a987a7046
-76d7a146c46eb7d68c4db8485a17163b04cc0249 2b0ab07c28ad7d54c4f0070681c88925557b667f
-4c20013d52034659ecafd57ab6602c4d35d7c2e2 daddd6a9efc427e1d2b4e9b702fe7ff751235630
-d84a45c3214acc92b224eab52b1848fc4e8e0f3d ecfee41d6b9a27511b09f5e1b98db358048ce4f5
-4d2ad7bd09b42398dbcfedf2d25136fc4b2ea977 9b61e25ab18b52abad8b6c4922d4a6ddce4826d9
-7eacf58b3045651b88f482cee62e41fef9893995 cb6b10c51d5895d067b2d5db5d947bae6627684d
-143316b1fca3a740af65f32eec22cf3dead3eac8 ebd8bde275409d2068d9bdad29d72d2e5b5b9d87
-de5cfe6d10c8db82bb57a0ba7a91ac6b70cb4a1d 9fbfb34f2917a94c46036e113e28a261f129df79
-f38ffbc3d456482a3d673b8a7521d7ca3b360bd1 e106b7df2916164ea25520e04a5bc3f1f151d114
-2ddb205ba7bb86272aa32f8872753cf4bf05452d 76a3cd3aaaea1156cf4d366742bc87a7f38d3856
-33d001c07a5d0d48bc5a873e2fac6c50aa79f58f 7b5830c54b46e5d599b572f9ec9ffd13d8736cf4
-273bf613d1574bd1c0584f2a6e717a89a0696b2c 5722c7f14daf734eacc9bbb4d7ed6e2a4ed97e23
-234b063919ac50cf54017782ae5d363eb3d81be8 b71811ac4ae82393b8293251a0b93bdbc6c833fb
-262cf60c318a79980260057fc3e4cd53e34e31cf 12fc9073f40b690d160ea79b3779f6bdfe109d49
-6081067f39d1d460db92904f8f81b32090fea1cb 67e726664191a0bb7e1d7a940495fae85c29a226
-ccbf22ff283c5c3323a83de77aaa2e68b41d41d0 82567fc599f471f3c62bfe713d0df16145466bea
-97134deef83dd182bf974f0ce763292c48314b3b 5da2414d48fe58d8389b996bece494e0750d973d
-b59ef7066b508c4ebaedabd3ce33b63aa60ded4a 827c74ddff4ced7dc7e9ef936c7aa4f5208d44a7
-59ed8a51e734b9a1bff006130ce40ef1906f1612 a4ee4cd6fbdf435de53588607ab5490daa11d265
-eb04f4709912d17d7eb87d6d8062d997c1196e22 f8db2e1052871aa2a34e600c6010da8098f881ea
-8a45dd25b926d48fbb41c03a1d06c8f9b268672a 522e2fe4bd9025e06a64dde528f1cc02e58fd80e
-6788ff579917ffaf5299eee153914fdd19c65c1c 4d96f0d95edf6060c70799ce1cdfac078ca56bb5
-74aef2f7ee70cfcbecd394d28d4174c6c6e5fd31 63d1d878924eda8582007dc0a237e24a896a56a3
-32cb62db4d28933453a53dcfb996da76be5a47a6 b1a2c6884f58dc10acc2e350de95a2642d5371d0
-d7ac98901d52a8ef8fc4a907726d36f1b0e28833 4f777ffb99fefdc6497c61385c22688ff149c659
-e75c73efc9efdf7fbd9627a3185ff0eba0e4e259 4f777ffb99fefdc6497c61385c22688ff149c659
-556724eab089905bf6ef422c89c8869c85b63f0e 113228747f650e7102d9b315607a0efc251e1dd3
-9213013cb41a3c0ca6b88f544264d8cc56109f0b 5e74edc56d14afc23ee601aedc4c1e81a32c0dfa
-236e0570dc8f562a4f8863d47b255d71682b1d7c 1d293bd0134f9607a2eec5d62797eea97442dfda
-7e3ddc4bab461cd1f4ae9de790e8b547e7c7d315 02d069f58229aec537888ffad42cf68e62aa5a41
-6b73cbbbb41d818e3147f337ceadf78a6621f9dd f289b5f7879bb1e8ed2da81ffeb334af14f99a62
-65d47f5178595b1873096931b1f3309dd32feea7 b33e365e6b4e833e1ac8c517a1bc7d3101a11017
-019ec9eb70d057737b487ff840f5fc9c80219d3b 55308b1b46bc0314679b6e578b6f4a32a8dcc83b
-85d18e16a37feab90bc9e123c616a8469207e2d6 864f1492ce85d7cf940f9a12d55bb99f33c991da
-99ac4f921c0c6a8db7ff648c92d5072624ffcf6e f7e20a99281c94642ef1022cbe792ee36628f79e
-bd384ded42684ec60c750344b1d6e920d052c62d 781a7309ac27b4bbeff18375c0eea57421a3685b
-02666db305ac1dd3ae5eefe958b7ffd3ec623fdc d78b875a4b032c4376de6fa674c344c65b671a48
-d77b4080cadd28d6e696e0cb01beb9f657403b54 7ee9222c377bba67c0086bada8a4a584c669c7f2
-7224e59bcb25ceb0aff8068cfa44cfc3915bffaf 482563323c0b0ab93540a49e0d7088e3d94e31a6
-a4730b5821409607b54ebc13200eabe63fef9edd dd29954f72d3ceaf0d5d80493b09ed01fbc0bc8e
-4f3fee9acac53837ad22c64264e784381a8bb138 0ef762f9cdc3c8fbb236ab74563e37bef5b9251d
-f6e811f9059a235deaf8d25dfaeb815f55086169 e8271f284782e74e07b2f9837e54aeb2c3e52884
-a1f1b7337c32aef5993c4f38e4406a6521a9c67e 71327a4f35181a4b3630029e4a6d87d7dc7d404e
-dde5c986b2dc6ec503c929cdb04dae702d98d2de f5a08cf5ac2d994ef81d49bf665157de009d1d12
-66e21625654700cebf602b8bad34a117b73c2bb1 7d54be0674acd01535312314926118d2ce1358cc
-7018c8f8b2fbdaa5192a9d31c232b4aa2f913447 4563523ef7c49fb952689951f582635d8f97c085
-5b4842804b10c3aa7b09ec8e3879bb9f17e1b6c4 989b216c7d2737c1d8ee16ca9d9fde87856da4d8
-e67db1911e63aedfd102f7452937b0146b941e9b 9b61e25ab18b52abad8b6c4922d4a6ddce4826d9
-5ad345a7321c69c8552c009c72295b6fe68a4e99 989b216c7d2737c1d8ee16ca9d9fde87856da4d8
-955508cfc5934600bf30471e8272d3777384a694 b35b0443acdf14e7a793cb6c06b361fc733357c8
-c0fa30c3fb1c3a13465d969c6f707e8bf58a5303 70322594163bc5383dad471135a95dee25772f8d
-b8ef73d012790290ee845d3022c92005258be26b 7bb8ddb7afbdc1e5bb0c6baaf51ee02476fa8924
-e7e0b0336c806cdf898779ae9ab8bac3f6fbb2f1 eb5787934e1553a2f7b1d59807c0b965f323abb7
-49f0c13002d3a7a767ac04fda1df4c3b38eb4717 13f43c54081042d6cf2459deb28e36a155978b10
-fd1d2e9e2521ad94f884cb59ec5f58fabc5adae5 2d1660256867c773b219d3389d74f6eb682ca679
-a42b472e9400b46c5f8ff9e3ae4f00b774b850a4 e1d67181d03256ab6fc85f8a52f13836c000b586
-0e4ed46cdc46b22546363802ee4eca61dd30251b 064f3928a52df13a3abebffe70b4d798200c3fed
-3bbf6fd09dbcae8c5e7b923a18054b450186ad6a a15d4a0c1c125df9234c997aa12b879f76d88153
-b24a41de9aac08034b07961fad8a5a8bdccd5001 170457ad21d163a816ce372f473ad3d8b1c70aab
-bee2b2ca3cd3e3b95a9da929fb9fcc611ebed3d5 466486cd05131cf0e82e25dc81610dcbe29242be
-32693b9f42b1571dbd0c468ce64a6b088a1e0f81 d102fddfbfdc26efed3d8aa3778b3bb49761466b
-d44d18828e98ffbe8c3a0ed1dc5104017554da4a 806c3326605b37dfee8cc5df8e3680d01328e76a
-1dc5e7b0c73cb0b1aec19708b45cd087dac9d93c 2e235d61af2afd400b856210d28b4199dbf5cad5
-9d9147079fc8822b240a1cc7c3a3a9c5ffa24316 a1863a011b2e30cca1360b835dd83c0cb8b63535
-d38cdab80f969c299b97d95c2c4909c626bd8619 cfe92136e39f81632b86c50a16d56fe5b7f8bc4a
-f4a7f7a5bf4fd0b1e3ee69b5d2f30295d5215375 24855aecf29afdc29ae9174f975cda163b70483a
-9d93cdc418ed969c2062009e09dace61e2c343e2 489f5807b54f2e92106a9c778802a6e082e2261f
-baaeedd947f2a529feab192147a3c2a9556918b7 29ae95f61dd55e48e3defeaf307c862b3a51fbdd
-42ee8d92a5b2981d0457afab6c4d63c7e043529d 506e8d03e0c05d96ddef5c56f842e8df5d8ed5fb
-8010514ffb0ff79950f7afc51ee43ebb1cb177ff 9bb9b04f66f1761a94a7efaec8d6c82e7953f408
-267e4e00203a217b7e36643984dd8c55c7d3b0a8 0ed5e981d2182cd00b993fee04cca7f94a03e921
-e8c310f4b45dec47bf7e40e0220cf5d5c28ba430 42987842594d699b770eeaa1d4fb25266f9f9359
-2eb4852203cab5256ba340debe8a8bdeb0b77fcd caefae4c110454be9c8dcf3aa6dbf75b5a2a6d16
-6b4ae0b05aa40d5b73c1ffe018713f4c392bf21d d031513d2cdbe42bff02519938db075968cf79ab
-7457f4783c43516b19d4102bfa43c8e1d52c99bd 8d6f8111afc614328d17486898a80aeb6a4dd7dd
-2c49ead62c7ef02fec4b15c08c145f866be2e4e0 39a4f2dcedac8ae5611bfea2fda5ecc8a711f726
-64cc88db348144135fdee35092a35d28ea3a0990 94963269c51ab0f2fac3543bb36e847afb4948f1
-bb7adf1f109fa453d5ce52afa9e395d1092d595a a31e4bdaaa7bfed142f20b82d3e43fedd9d025dc
-41a6d459266e3a8e62ad3fcedef705f0cd538571 ba0665f533b64b21a8c0905cf22d6942352fcfbf
-1b99eb9b304b5eed67f9f82e75b38a08fb2e4362 fba707f62ebed3e9c9668a9293d9997ebfce28e2
-1fb9dfb2df94ae24b86ea6fe6a64e6c0eba86d42 3341b93fe84f98831598ba6f89e0d1c59f05c7b0
-59023e644e3044c5f8b4c08b6154ee75080f885d 9fcc737f0de43a2ee2c699b40713d3ca290328b1
-aed84fe6ec404d65ec80fa94680b3c6540d00c03 c13e1ba6c38c7d85f16193e882b6f0f4d61d1b9f
-38ed4bcc87b87e9fd145299f596073cce6b2586d 593a65e4a92cd384fa754566d93414ad6668375b
-4d0e7e673e0bf8e25c3ccec2187ada2aeb414ef4 4468247d51e41e39da5cc14a692bd6d0b4e13b03
-59a0b67c79fdced0afed3c05d18515f8fc015c26 e9d2413def4d3a04968a0264e067eb1466f6a466
-6ba97546feb8a67b014dd3d914ef9dee8bff2197 d48f1038ebdb3071e7d7045b041905b188d03fd0
-480632b97be241cefcbcbfa2d7ab77c5e7f45eeb 2b2969b474e07e77cea6b8e11d305c7a5ad936d2
-17c81269d39c75d682496e86d0040900c053fe1e 668851b2ef0f8cf8df07a0fba429e4a6c1e70abb
-ef457934a89b62d3f169a6896f124aee20dac97d 536b045e9909da3f8853398d6b437b63027d4ef9
-f9ff52255eaa6fdeda4ff6a8c368316981cc1f4f 536b045e9909da3f8853398d6b437b63027d4ef9
-2a46c6002ace7e65d637f4385c7ae781032b36ab 60095414957938bf74e85f31dd22481a16b055f5
-6f57410821f359759e8e2207af31fd6a22ff0e7f cf93dd80d4fb21319ae409ab03eb8da17368f0bf
-2070e104e02d6b8eb9666024c47cc0e575d2097d 806c3326605b37dfee8cc5df8e3680d01328e76a
-abd511518e5e7169f9256e8bc45468ad41887405 cf93dd80d4fb21319ae409ab03eb8da17368f0bf
-fe72ee5f327041bfaf48a7c69a3f293f2ed9ee33 a9370dbe896800aef27ab5e3263f74e5eee787c3
-afb756fcc20a26e6d06e88ec0e287a7219105fcf 012221278b9cb708c9be9a8af6f736f4a77bc083
-ee3b7e3f7543d608429a5e26d4535346aa6e3c33 0100466ffff3d6e3ae5696d49d10aa947c2907c3
-9538c8e823e59572f1381320aa837397b64985d4 b452a6398f370bd91d8e2e4c1491d184c70cbd10
-cab75ec291192242e45c40f32d6e95fe89c45cc4 b452a6398f370bd91d8e2e4c1491d184c70cbd10
-0e3c834d4a6244c6834bc18b22da5fcbedf7d03f b452a6398f370bd91d8e2e4c1491d184c70cbd10
-c368d746b8891a77bbd7fbb6ea70f160e083b7dc b452a6398f370bd91d8e2e4c1491d184c70cbd10
-56a9357bf8bf23c6b6f3b25104de32f352e46ba7 fb5ed31313a3add1ff1c223f2425853c2d9a0fc1
-a8afeca04be321079f1687d8ca39bfe41e2480d5 1021e38e30c9515f21bf271c465b3bc92d7e4433
-0bb0aee785c3efbbe74545268854c85d684ff4ce cb4395a062dc270426c8dac1d2f1ffa5e190cbc1
-d111619bd08bb03dafe67bd8f56cc7c016eb4abc ecf54791a68f383709fe461aa70129136dece0f1
-23066afeadba5a4d081681bba496d50979c872df 14c17f0581c48be10a12bd4651e1db5f5227318e
-5a169bee947ad1aabd7321294783bc4c63507daf 39d815d4d32f062edadfb433104ce04f86d12abc
-5ee5bc7f701de5e6a83d3ccda5a5f488a8b94769 526752aea2d4b877071d0d03cb65ed0c41533aed
-83bce4a582d027ac9185310b0c6898371e3fe90a 0c0e5ace27f30e58bdc4c42e03d33cc3970d027f
-fc8f1fd0172f3545ad9b14e44df80966e4afe2b4 1fff0e652385711777dea532e7a18b6cb4c8fe26
-39df669c4709d7768f49a1ac9131d3b34efa24dc c6effba6a45d03a81aeb2819deab422b36c14e37
-b1a89c1f380911af6680521595a235a756c28b96 5a0c6c9f436294e5157b8542a9f5f3ed9aa8f422
-8f8909b22111f240d72097db0e294a958c519835 633965e840a61051066f3b94cd6543ecc6e7ae33
-2323b26204696e4ff74658ae6ee4f2943b7707de 1e5a801d2dac612e4d77b64d1819e284ef06af33
-a0e19cff339b010e72e3d8a2eb0a653b9cb82704 39dcc373687e45f9c75b9ff56e0cceba1954e6ea
-99b1aa9c3a79f944e3351f726ec3ebeb4f93ae07 a0d224e6f149129857ac51647fe4988210984ba8
-81b11dbbe96224df286dc9e96fcd28ea38aa89d5 7b41b8e58f30b4f237f813e6762e4f803757fc51
-a7eba208ef9fdc9312cc4e33c434ea60ea8ad4dd b8622f33131d00bc06e9ab6f54cac664b295620a
-46a8bc22d7feac744ae974a4b8c2d682fb9e8c07 f64cee64c2c606e190effdbddd9eb0f5cfa9ff36
-4940780a1ced77adfa06bfed67b4dc737eaa7c92 71454462ab7a887efeff7c176c2922bbb653c259
-d462ac2fd5be1434f376924b7e94ab2606df8115 c1323889e8b96c9836e67886dcbed8a31b79c923
-a8d6f566bde361f842ea64100b67a61f7a889046 5e4a71649d709118b37707e5688fe1eef5c7efd1
-f3822dc6cf8631dbfc683cf67e1179cc33b7fdce aac2578c0cb511e313167dae322812c83af42a0e
-f71aa64b5341a7083de93960b19feef214a81466 62b0cba3c5d61320658e22f10f8a73c081ad8c90
-822c1dcfae6b45919081f3c66288bacc4b21d115 1219a617646a36c18b71fa8c3d10da86a3940068
-8b390909f8e220a8dcc28fe5295a10dba6591d05 814f6dfcb366f40f590094c1b99411c86ae7c8f2
-1ec5b37d65d549ceb02be64e52bd4e1aacfcc83f d8fd40b81366603383106574e7f53031288e5ad9
-8053ca1bed13fc5589297a3bccf5f91fe6802fc1 2dad8a2e86b9e46df63052de4231f9b8ed8a3515
-1956b829eb775f964034a429c3c330060fc7ca60 417d8215d52789738e8a709b96d2920258915f8c
-7d934d9b7eabf81c42408f24eb738c1350e57ad1 4043ab5f28d0ab8ad099da22ae4a1be4929882e5
-d4d0e4ccaab24d8d5ce4ee06175beaef04a72e54 a5eb74eb551bfe71f334c6ee113d54823e73a345
-b09bedbfeff2327cc3727721f90c0395e18e72de 99c224047ecd39753f07b0de86055e7f6a885002
-73f9e9892a737acf32312e542e50b1febaccdc38 978fb8c7623534b1119fc531251456705250c69c
-cd8219772e9e3369ad8c5bd672274874423190c1 3aed97384b3a8354c92d0eadf78ca545b6a29ef1
-47f6027154f1887355d0ac6be59560a27c6c9f6c 59b5e3076a9e49240a659c4da8ac0ecb691a74ca
-8af1605a5f73fa51a7456d039140c6c1dde6f8f0 7fdc0357ef7818f88599d7a16e48e20c0919df9a
-4d6650b4d79b353b5a551e472f90326002189881 74dfc8ddfa85417bbd34f7ba365d881b45dd3c43
-d7a43c972af0b8396e3f9d5b9acc64c026ea295c 524f2031b3b023892b8a3bca2cbcc340e017ba77
-50fef0e56778b66cb4582d7e2d8263be252a9f70 b1ae262e61616aa732698f45b59cfba55b985a02
-4627863f43d5e2048ba17297f01beb7f4ea36f25 f5532e116134e917eae87c997aac4a613e563000
-f09addf92b64ac2e0de743be16b8eb95b0ace110 9021b43e46680420fba5f440ea1d64e67d19e384
-f7891c4fcf33301308b2c26bffadf4c137a4872c 353dbd917b9255dbb67af2972d4cd4328df339c8
-149203ef0073da5da8f1942af84bee1770f61331 7569780d0e8c44a811700f43e45fff44e7da9d86
-aaf12dffddb76a4e22288fc44e4325c7bb129d65 af1cf9093de66e7cc8d8695dc0abe598b27421e7
-6ac8208958e1a7c80e4ba093a24713b1a8d99dfe a2100944710226a855483362fb1c14f7e4dfa9f2
-0959f17b2283951575d0f1567a2b73c29b498dce 83edd8e5fdd17bcd99adff99ed2f74af6cd588a8
-9073d8f4f0dba952847974e38bd056912b0f7691 958cf8613bd8d06949bf7706ee81169a6c289359
-acf754e9a5cdcfe25357aa66b86aa5816c1162bc 7b7bc05509b59b241dbddfb33278d27b4f2b23a0
-dc20f8bb24e262dc52ca93b35c45b47e077e462b 27e47e31ec8f34ec72c1068e7e5c1009209441f5
-bc7001e0cb99ece8e87b3a99544ca59c2cf71e9c 0105ffccfda33bc3ed426a6d3e19af27e9624e8f
-bff68fd21db8f9739a6fc7b7f38e77cc9578991a 27cd846560c823f8815a408ece63ce4427ea6562
-0809a3f647a63adba47cfb85ca4ca8b49a8eb70b 609828f9d77455c3de483279af6df8f57040b32e
-3b55d118be39c651d063cd71f069427b4d317d5e c487f1706d1ff9adc2a9fa2210edadc9186f71c6
-d6dee7d898f9d38702631b9700e999e243535e58 5b169ab3bec20837a588e4bde08f45dc0029afd4
-f2df65ce055f7a13588b00055880e236c01627b7 a56da82db647a4bbef837dbee23c64a65971cfb2
-65dd84522ffd72eed116225ecfacdef950007646 3cad9069ae3d6a667c25ccf456db78b7d4b84373
-1b246b58e4961dafa327f854cfc5916bd119cd74 f00f18db6d80affa626ad940b75279c6ad4c7607
-b47d08eca2ef57161bbc1d513d43db39c115ac1b 4a33507d666507e1d6cc22be7ad84fd3cb6de8b3
-a2e025a7054fc676249a4e9bd547bfad57caea94 33d4b51d26f49b0bc6f7853dbb6e87c267530694
-59f8416a783ec62a5d7df61dd262647b5bc1d9fd 7815da9d7808dccf92c1ac334ef31ed751a91187
-7142e1030a2cda10d67273042c06c6ffb1e733a5 cb0f9f92c3ce588630e20fd5292212d9ad461857
-d4b77add9330e13574d7273a8e9eae9f8bc28b10 afc75becbc70336628339a63d90c2f308eec010b
-12ddbc00ebaff881335c1174e2c83b30edf51925 a44a575ce9b8af4d27433879f41a842bb45032bc
-18cadf96ffe08d063fe1057ce4a3adaec4669de1 cae0311a760738548dc1958019155d49494a7a0c
-2f7cc2676e39e85d9378faabb02be4fb53c7eab3 e2dde96362abf75e6e613323e9fa87638140474d
-a5f17d5a88265ba98a7a7fb8b526ba661377ca06 e876705317f3ebd2983ef1892bf3eb1ef0a0bead
-73111ef483d41234d17bd350d93df5059a0abf92 cebcad4bd6d0d91551e08ff541e2bdad5b7f1eef
-6c0325b899b8a0f555509b4acd3da668115fe26d 9296d3720c2dff5058c322820485127f4ce66c8b
-71125bef7b2be503310b811987380ef445ab0b87 9039992df4dd44d72f51268cc2bfa11a1bb9ae64
-1e0d556a0212397e58ab867ad2215a6196fb3c11 f1834b795c3be17d670d1d902b7271fbd8114ec8
-3fbfc2be3c9a6fdee3b05bc61a02b50c84580eb6 086a5acd73ef744a65a5d1a60cdd40b63639eca9
-b174a71a67003a4450d9b02af577dd294bba6d7f 709f5d75b1e713594257b8d8d000a76e4e1cf340
-5d240145d6c6fea9f3499d5097277156d5609e79 b2d4ef9a534c84d77b5f3bb8a8c7e6c9eecfa399
-fe6c4f29d103da9cf2263de6660f1d5bd698434f b2d4ef9a534c84d77b5f3bb8a8c7e6c9eecfa399
-ed238178713e1b4cdd9d85876118e8aa94027b2e 5a2f159d8f35f5be6aaf6c40f23a0e82de11a3eb
-5aa8265af69c95ed1796d9870d710bff55aca0ad cf863665f9d6562630020adbf119cad6484beea5
-4a63cc050d7bb4afd2ed47df51a9aeb8b75d83fb 49509ff19999964d339bdc6b2092f53f69642de5
-45ca121bd8a243dee35a154c63973e38ab32010a 485544372fa991baedf73ecd316b84a4b827e5a6
-62fae988467bfdc44df3b19564071ed578ad8841 08e1c8c10cb0531b95e66f178691e502df863d52
-182481841b842578c4cd2a118535b96abb8d9af7 ddc51fdb1df00c120d115c9a46d470aa4bb5568b
-c977ab0405363cdd080e2092c92b55174023a2f2 f97fa67f50b05709c4d5f6b5c00c2a481589388b
-c287df9636b959345423a24d986a2408467bb2c8 9e39b3bd2c2ddec478fd62e5df037a93d717e982
-b5ad791a9908d81ec6b3f0b81935c9bd85b86212 2dac7dd4806734df9f67b18e935528303f625766
-8f9fa9947ee481b5d448fb9330cda2cda6d7ef27 2dac7dd4806734df9f67b18e935528303f625766
-e1a870b199accace8437095e4db7b422f25b26f8 48fb6fc9b65a622d7e1223f7480a25709fecd3a4
-c613077c8ee661b6a14b520ba2f3e20dddc6df37 2759036cc85ff946fe054afb2c9a1cf4e0b734cc
-b61a934b75897037644dacd8b8f443fefb738340 cbf1c92243f4c0cc43f3a3a9ade1466b57423711
-199d3402bbdf733b6f6abccb4c0699b2f5193a29 354e942bafd398ab5938e043ee7e5f2cfbf61919
-c08ffa0d3d4aa4d94f32d896d9c01de5da55c2c1 e40f2d958b80c1aee1aa6d27592b945942154387
-4b3e8494e559b9dd95d0f7072fd10baed294a918 2f7d4375f3ca82b1d4968df73acf77110ccb80ee
-1a115b676716ecc4e3109f37e70e4d24fad74c04 344b8525b7f3d04b57e304feeb502d0ca1bb3141
-46b572eab4a923ac071b4a374a36097fa611d775 f0358ca4cd2c765a5edf4eac85a0f55e73237ff7
-2370ef9a9a1da9628db5397320a25b159c2ac039 7c290f1d710f24a5e659e09dbb6220a91de9d7bc
-c1390c88aa4f31b61e9ceb2dfe69f161a70f7ac4 08f11469cc11a241980593b4732998d8bf1cd996
-576c38a94d3901341a71bc68b96ed8d93d1a0ce9 1341a4c4cf6d7facc8b7e59d4bf1641f0691ed58
-ce94348baa1c60213308f974de52b2fcf10687f0 1341a4c4cf6d7facc8b7e59d4bf1641f0691ed58
-dbf4e0755408b93076b844678acc195af03e8e81 17debbbcc878e26f12198bfd46a2f22bd890510a
-939238d58e6dcf7c7d91f684106469be87947e1b eb317dccaf8e46751f3faf9e4fbf4989152faa30
-c447099f406609099c4ed082af6acd0fa3cf6a99 4404119f7bb967526f9b4697441fdeb93e58f11a
-f2f5f2e2f070220366ec937a1ca620c8b57c6bf9 ed00de77d9486c79742589a8525d8d21ec47f70e
-06cb39d5b7edb2958db4d658e968a5afa850ee4d 371352c36936f4aafef68f69e460adce950441f6
-656d45938e541af776eee94ca86d96330115f47d c8dbcdead3ee52b68408e3a43a9e753bfff5a5f8
-b7e9b3b27751d97c5849a97b89bdbdd88a7bf613 4b50b1755f2c1ae753bb1f6ba10bbebf3941992e
-2c0f2244ffb3427a7211d911b3aec09e2c0023c7 a41973609d212ab7c340cfd22e61963516432f11
-35b27b6248fe2767e5ff4cd6557911cb1bb985c6 3e7dfc89005bf930034ea1b45c51b3c97474065f
-378259e1a7b2491607e028f3289640d689694a26 1f85c37aa48e70afcb1e9117152082211e405276
-8c88dde12ee7b33e80ed370bc579ae0736703016 649e750832914c5524e666245d87a1b1ccd8a533
-60c5b5aba9b457d930bad879e9ce1d7eceaf3553 c09f450d9ad374e0a339012569cfcc86cf792214
-d313462be4ce88e0e0633e54e03c428e49d6828a b00886b61396de958140745c6293114235f5ff1c
-c40aa7628fc72536e5f1b6b3e0452b3a9adc1de4 04d646dbfa6e26ed15ca42943b43de7074d213bc
-2250c6db86b0bdf3da650789e5b92027af3f472e 6d3d6091c040f3e37a0d45039765b99f54e5602c
-da1b5ad890bfc7d53eedd49e96bbfff204b574c4 6b53799d9e0dda0fd95e8cdaf179987c1ff2b669
-2804c8f826373eeb52f60e89b90a7b477d019f77 d2b5deeac34a1558a162e59c45bcf24edacbe88f
-e184c55c252cd2c30957248dc1cadf73ed18980d efb5c07a78e644fff05a3f17fe8c80122fffa767
-845110fad6ee1eabc78453df94be0737bb6e2b47 f6e808c6726bf9bffc05e50ece745b1ad4b6ca58
-2bad6130d8a2234908f69aa427399837f0ee719f fb22cefe1c162677ca5b9f544a8d56b7d2cec3da
-a0bdde20af65d14c0cb61e184c0e65d77398f858 2ae80b94e0edf157c66b02344562bd8d9212fcbf
-daa2c6020bc717d696742fa4f1195756d731c045 92e032e65400a7efa2b7d4894929da76b41a9eaa
-1f48c841b1710419bf415577ca65d6f5ca1d8401 6bcc1f8e6eb357b890536ba9fcb6174116317d8d
-15508dc34f6362a7e179ec88b7a2d978067fb58e a670f2b045a44f5d01ff1f4a30c0b76246ee7360
-6add674a5d4e61b8c48dfb7af49f168e0bdc7b88 933f5529a80c6b8082fe00250d48bd614c753a42
-c0e81b4c20d1b2a76ccb5019a84b41bd60edb009 8fa10f409b43abe0a8b2c6c1bc5e2708b74c0dd0
-66e7c0b0363e6c2ee73bef86686fc1e11040d037 ae7682dc68c83305cc352cd067e376b754482f09
-2e2b337cb1db31d3788f9971f9a38849c2b40611 a9cbce4f77d838a4abd5fe2ed01d512ab735e704
-02f8b2ded209a6108109dffa2400ce62c05d1fff 2952c1be68dea3a89dd9056c5e49255616f04f48
-93b3e1e63f9b8f06aca7b6c47b60ce9818334800 8101e6d2dc3a0dc97a91409844d13cdd68795852
-e8eca1482d8542285ca7141b7f4cd3b381b98d98 63b807482d7a1f68660c7563d9e6b13c75c76169
-b7887caa45db8fe1dbee0a4ec43d136c8b5b9bda a5f067e487e47630d33aac06abad2e7094657f2c
-48fb091ad08635d8bcc73604747be2b88dde5846 4a47c60c4d00275f6fe27ef18e6592af01705298
-f73e779e13b44c2e9d9137cfc83ff96dc2f0065e 21cbb04552cf02186dfc975a8986b4de481e6ef7
-f1d22544673054a5b34772e89cde79271545b380 434089fedcc35386d23dedafdcfd1b3cb31040d9
-7edefe360f325d9d58719a5c1e98d4e3f158b641 873527d68cf42f5e9521b9fd0e26a995b1b69d91
-af58d7878294a2768f670a1864121a9620a756ba 3b96e8ff9c998bf8f1f10b268ea49bc6ab82a9ab
-c88ef71c63b2580ecc94e8b2cb4675cca056a50b bae3fe976cc580a8f01694311633e7e710e69aeb
-6b61d2013f29c70e3760462595931d0bdae3edc9 a6f1043c306759d364c6450085fef901b1b981b4
-6013e6ab6c8d832259742925ba598399c7e31db0 d22cf4ee0ac52a332ae224068bd5ac9daac569f3
-ef59df2309a0dba0f1df8e7442c6861bdc54b418 7a2a4f60d207e9e474ea2318d7c312672517453a
-56f9111faea2ca9a0ff6c984828583b456f43b38 ef58e9b075efa3413e4b3e4fc09479bca7a828d7
-2bb0661016e1e162eaa33ef67b41c004ac7f20c9 f118abe972f53323c3ba4f451a5182a3949ccde1
-9f38702a537920dc23d0b455c4195fd2ae37fc4a 14645aaf60877fd79aec1f5eb7f6d99525ef2ea8
-5458d58b4cd0ef2e7d22b9fec9eb12ee77dd7ee4 28c35f02b3a061f818663f12cad2806aaa9f5d6c
-d656687a50d4be24810bd203bf7336beabe34ff5 efb090ccc77cf6da0fc933c8439894e41f7f04b3
-5d9deff7877bd654883d556ceef566458747dba5 229a224da35df763884f8e2acfc59b7db995a221
-c8857900388fbb7f3d735e3b2343ebece9063482 bbf9a1af3fcc458c25a2b4c58b670cb714648970
-5c8216a9c77f2b44f2426a9b43f22d00bab6066c 158046e307e46387ac8253ae143125bfbe195418
-ab0af4e26dde1242bde0202f07fd4f4b8adbd741 4f0087dfa8fff0b4c8a2d679e58294e3eb756c5e
-e8dc4c9d28e7649f28b4bf2495d9f0cf42d9e28a fe7134e794b202e4a1fdb34f619fac33b0347693
-95a9b6f2177a5d7612725d0b89dfec47247dcf25 2d024bf027194bfec89a666fb2f028c8025e8dc3
-c357aaf95735594de411e9730885a98a3b716f68 df40d2fc19850958695635894f0726376d483ea4
-00fc4a63f862519a88ae02032f30395ebf713b8a 982a4e1aea08cb1e4174b6c7739f354c9670fc5a
-2754bfe2f4a6276eb02d683c1108e8f522538bec e592b6423c52d113e82d6a23f88dd1ad0f969589
-4c369f52e1aab9bdb1f5f2a42b8e1ebbf1070e34 de24520bad1f3639ab8328beb2ad4696c57eaad2
-1160c4576e51d87c4da2743ba1dd7a27de555b38 8ac57f902db206824e8e541dddea7e71346ee599
-6ef6a3b476fc97e2776d0df9b44370bf6d98f224 7f7fe634968137f9b0830c270aa93d26ae19ceb6
-0604563fb7cf3586b5576988cf04748f2a226963 b7e00a4053103ad266f788796006ac52a0647145
-329cb945742594bb85607b4580a155d9b1021c95 08398e650c222336bb2b6de0cd3bba944aef11b4
-366bde9fa97d347f4e0fbcd2be7bc195ea48bdcc 08398e650c222336bb2b6de0cd3bba944aef11b4
-4d3e82558d0c54c91c2c0810cbb6b6a0cfee2a37 08398e650c222336bb2b6de0cd3bba944aef11b4
-0c5918cdc141f4528fc79151dae65c47fe3711c3 08398e650c222336bb2b6de0cd3bba944aef11b4
-e2ee8f1df2b5926fcb37353dde45480dcb98caf4 80bc6cff515118a36108967af49d3f8105c95bc9
-29715d1e65a10547f001919389c64af5f004b3d1 80bc6cff515118a36108967af49d3f8105c95bc9
-c6b520e4c547336e61ae102b0d6c994042d58bef 576db9e674130ae3f53190ce6a2d6856afe84e0e
-0d90952a5d8d52e40d65dc423cf65d6e74204adc 857f136811c991c5b15a04dd5a86cf51222c63a6
-2af70439a8d97bcaa6981826d69c83fade561bc9 d9ecece46f083806b6bf254e98723ca77e973eac
-a5016771448475258006a08a8258319814ae3a55 fc627fcab5ea89bd79f74d7fb0fb1756ac8eef29
-5cd2d2ef99bd279e85e9add70aae0ec64230a1a0 1db29fea03a771f1d708ce1cd74c209dbec8a831
-1576ee6edcc420804d3c6b3e6864e92667606a89 19d229a08a143a3244ad32ce74bb445c622c00b9
-9651477ff77b91e3dc3082e530c5eb638945f6a9 23d8b4b72d2896a18f9eaf2ed521b8313e597bbf
-d06b787ef9bd22f3b077b147dc40ffa35c0b7b09 10d09e6976f6eca0c52c829dc68d7d1979df09b5
-35a4566568f4837d42b51f5ba0ec6c70ab49346b 61d0fd98325bafdfbe79866df30d1251132be87c
-45a66299908df2d7db1cb275a5db767c4ada0269 83837efcf37047cc1ece2cd0d7d57e0032217295
-5e533ff109402d44226b01924e672ddff0c57449 d7f9997a88ea6039598b5e3bd0614c2e4ea43c4e
-20a9a1429a2f8a0acdf82cdca537ffd2a5debe1e 1fa8b5224b25974768364f933c9271488d035ed9
-f2aba408d53c89f45edfc352296e9899e27c2b4e 5bd1c1875df8b8a943db03b176936311295aef97
-36aa03b3ed9aa1d1593837d2a6253a6326f82536 9ebe642755c8cdfed9a65ffbc2388a7717795957
-5b7aa934024c83267e68b731874f42c5da08f57f a36c39199a08e586cb4ab6a78cd275fe8a839fff
-0186ba6db561c6bfeac70f2682197c92e59f2131 f8966cefedc7f55bbfa017203359682d0806ffbe
-258c3cdd1d9f7040bca427df4aa01807d005997f 79db5bd534ee4bc0ecd42e264b9859c8d5697a18
-d7562acbaf35d248cbad38ee8655521199bba459 08398e650c222336bb2b6de0cd3bba944aef11b4
-935cc947e7a7092be3da565e6b2f1be8103b4d09 6532d11bdddb63db4fdd916497e673e3cf742882
-5c0535a130243728c5363cf976af7fbfe2bbdff2 e03cdfe0129153d2f55b80dc6f8787201aed8894
-5364ef0b4aebd3a57c78be1a12f37c0c29e975d4 a77965a2ab35b3c9c08d2d619f8eccae1eda5288
-f84d698ac572811878cb4d17ba5a56e44cddbd37 0a185c2dcafc2d62d31d5b817fdcda503a983301
-3ee8f9c476c41e9a7c82e40053f7a833582ef5b3 2f888ad982331bfdfb5b445f11f4c7344ec0395e
-2eebbebb8bb0b7015232ac689208d1d2c821cc39 a2cc3928e140af9544911b9bcd12608b38236dc4
-46c1ce620f3bb44274bb70643a9f8ed266efd59d 12903ea6be56faf74a82fe6b962c432dac1c96ef
-877247c7d49e070dcb9c102837a8a438a04fc6b2 b61d787d3b603ca6cff502d7f8ed988278dbbc32
-c0a3cce9926fe208f551d204977709ec1fa84b18 3d2df7e77094a48bacae669cfe3ac686626d6a0d
-b05e42e0512a70ab7a60a6ee60104cceec0a6b02 1d3d842cba78b00d75d235d9ef70e587065b5e18
-71a316a817bc2731ca45337250e0e09df622d773 da554d2da83443aeb643203ff95e976b1330a07b
-a251b89e23999760f0a9073c28bb17d921af7a90 e2e73e1d7dac5a305e11bacbd2036ec9553c2eed
-eafffd4f34c1eb27be8be544c41db83541d0e6a8 bdc90b5087ddf32b332a4cfc99f88bc4981551f7
-8f0d494d194dd2ccd864994107715282c4cf1c1b a5df3212ce03611895e3d2d89e5b589fd61b788f
-8e6b306dfd71180f51313775e49d268519220bd9 075ce59e4ba8746077f858bb91ecb9b66a35b33b
-f2c6a7e39de47bf97838450197154ee5ec756044 fa24d61467bf1bf3c9fd9a5cf579491e969965dc
-a77a12e74d6e142a70596efb0841a40f4f9bc49d 3cc1b9320b7c72ec40651fb63ae1514420e8783b
-00258b4b2532c17a1fa96bb785fb6f7064e6cae8 a79608ffa2e0bd37fa754202a1596fb39038ac3c
-33a47b8d1257e97e030d647494c1e4b0e4ea63a7 729f7ca9781c32e83ca6486f183070683b54cee4
-57e483d5a21b1443a920cdd169504c4f390f9b1b ff11a6191a4a41a938edf34bf88447dd509b16ef
-b0f36a4e073ddff66c93897fb3df186f256c29fe 9bc455cdf925759a7836589ca02b555c5e43e281
-751cefd89a1eec5b13ddf1879309870f964b0ce9 f2a34989958234ae06a98c84eed90195d9f52eed
-d59078cfc7ab5dc9d4d36d12424652c16e03f8db 7cf498cf0dfcf14069d9cf6b9c9e7889b6520502
-01a607e4266a30154ed6187b256b841e4c50e11c 150f9330fefc71edcd0c7e8322ef3330f733b664
-99d5be37dd745b1ca4277154adeeb80b2d3ff3eb eaac0c2ffa1942e643330092e1fe24a82f3e8ea4
-07fcf166ea4befcafe206bd866045d5ace55cdec f36ee6cc35341b779ffcb372949e8bedddcb9a18
-8861c4b96a53da5f50f2e39f3d1e808aac1ef4ed b0e7571cd9f29a32211d506902996797da96c58c
-0afbc0c942cdde9565ec9f3b8c83ca0d0beeff92 1fd935ea737dc6b0d1155110378803ea75d188df
-c9b38afb302cc6e80af85b2b3dcc7e699b958244 a601a75a47fe5e6803a9ec673ba56d5295fbf638
-7a42e0d7f8390622270060ffc860fa1a43dfac9b 87950f1c3ae16c38d68acb516e38d1514cf6a974
-97902f15ab521c1dacef8f6d7cd5260afaf19883 1a0c7145f47033379b9bc297c4e69850d33318d8
-972d96e8a077634ebe8b4d4c1bd23f0baae0742e 2988bccffdeadf854d5a240ca726e986cf94cb36
-b1ceaf1eb1b09b0becfc016d5915e427bf51d757 42dbcad0c32a80913c90e776b80c3fb5ac909ce0
-2593d6c0e774b8c16bbb9694c328a79fe73a2d43 b92dd9e772fa91203ad9a4e0b0d870d946a1f67c
-c6a05f1b15f309778513a6e807c2e6883d00861a 87e500d4c3dff499b44ff7091b1039862629a3a7
-90f4c8a7a0af5c720c278a80a542b2f985eee8c5 b32579806f7296998069840ba8fd460534171478
-6e448e45195101ff338e1bb0717c55032e378d39 463e619cb1d669e269d599023579f1107fe6413a
-0f9ac3941db26fab38256e9f8bad8fccfc2b1d05 174bf961982d2272f62748c78ffef10c3560d0a2
-f7b6567149daf56ad3452d111fb4bd72c800b79f 1d357f2bc2f8600e2cd9ed864e153729d618ce7d
-f0f3587e021f7c1a9de265630f7ec8eb02b111c4 c1f23a0c3d8b04576bd16336d64bf6f9322b6000
-05c56abd6e03cdda27c134ec4e5415c2565125e1 91f545a115bffba65a755efbbf7b261cedc63648
-f10c6507e12d9d236775b464973ffb1343c37b3e 37c98b2e6c28d7467025bfef474ecdac56585c0a
-6dc7b5d8bbc71d646b69b5f9ad67cf6dfe8441e1 ecfb7ac704119d3c46d11010a4a852bd91d985eb
-85fefac4a8f4bb99373d98e80b96bc6ab46a8be0 a9df4b25fd3d0ab81d6bb222685166efd7d40ab7
-1a465353e2e912523a2dbc81a5e139cfb85da7fd 4ba6f6e4908472b134d96d5029c321bf8add124e
-8f5124d621d4ea37032f469dedda0ddcd5d59775 c5508cb23f74e5ed070a32c9df74225882d33cc7
-9a1fb3ed96cdbcfab43c40fdd9bcd04ab0727ad8 73b25f305de7a1010aa63826151a4156d4fabff5
-1976850e85d6e1bd1ad12cf138dc6a859eb1db3a c7eabf134aa09b5d0718dffc5fb84e6d3232ddfa
-ec03d41d74fd57fb0eb8cc4ec445af2207e1e3bc 973d244d90604f3211f08fc63370f53d08acf4d6
-28651e3efb6c550c5f56a0de205559b6d03d6ed0 a38b14fbbfd6d26b01f8cfd5ae252e4fd6a0da3f
-c1f573fcb464296f27b279095e86ccb438e369cf a424cd459843ba99fc0b3a162332bc14b779520f
-d9f8531ed905ca64d149fbb30d90bb0ee82b6c69 91ae32a87c2a97a81670d6753af0128f3e08ee36
-27c89fab7c5db30b4e761494c20d292d0bc171c7 d3a4cee6c7ae3d282c31a161c8e5fa2bbc8d0a7a
-334c95de29dea5824ebf4c02e1b19c93eb514f4c 81c8d5909c42e85a01beac83e366b02c7636fdae
-7229ca26ed621b5e1d27d93816693106841c937e 81c8d5909c42e85a01beac83e366b02c7636fdae
-eb1dceb4c6150f235d7f71a2f0fa520e627bd9dd 82b154b6dd66e29c2727c7cfbc75c3ada63a07c5
-b4f89dd035e89e3b70392481d924b4648cd354cb a1154e1ebcdeb3883ba7f4c284232b04b66cc50b
-5fbbad99e8498dba31503534f2ce70466523a71c a1154e1ebcdeb3883ba7f4c284232b04b66cc50b
-6b8c4a7ed17eaaf73181f233541eefa86eca1200 0b9b912a0ed4a006d371ae5caf3dfb324c6b65a2
-de21b3e1dbbd19a0afd4abb9dd2e87267ca337a0 0b9b912a0ed4a006d371ae5caf3dfb324c6b65a2
-fa7f8efad586b0ce2949535d6ac00724d5176f2c d4960b2534ae7288ff6252015af921bb1b6771c4
-62e66e42fdbc80e34156c2d49e324e5b0b7953cd 885c34a83f35d7fba7494ecbdf9a24d21e2d898f
-e297ce8f8d2b4fba339ae746dfa6f472f57921e4 a423fdf1859b9b03b79cd0f021b9e7bd38cc4c4a
-cf13ebb1fcff07069b47f154f5fd326ce3d02fa9 bfe2c35973df2905db80204da1626d9458d2908b
-26110d45f7e8f8a7271530b81a6b854059d59b40 6831d36b5fa6dfd73b3c52073f13e35f9ccaae66
-a3f41308fb6ef23c9c8663b5664137e169e5a708 fdf4ab815f044a5f13564757e7757ac30af1d602
-b45ecf0f0a26945b4a7be4fdf176764eebc85650 9807f3f8a38c4df29316653c331f76c32a4be8a9
-f929a1a336bdad021141c6ec7acf6a9c705be22f 14c16435ea76d29aa380adeb5892ab423fc1e0ee
-b120b53da6c7b09483b5fc3ac9106b5edf90f609 082160a9019e25f73528a66d8745505fdff3c673
-ddf9f9ca214c9990d42cb578c57152639b1f5cc2 a23360012ccdfe49b95a7ec8d922044632f05034
-b2292f3418a0e2cb632e1051b33cbab248f49543 d4dc9fffd89a183b2ce3fe4c901577b820c42af4
-1feb7353d70165d5450eda74ccabb6a3b10f35cc ab002c139ec66275ea14dc0ea23602525ecac6da
-74a1b84700ccd98ead047e4da406b372b4fa6bda 8e82edda655331309c6005501df280082bead262
-43e11fc2393917cc6c18063bb8e06dcde2a25cfb 7062b325b8e204a1bd8987ca42581faf357f6cfa
-932068ad0bc65736af7bd91e2f9427f26b17935b 5c139928a5535ff4ba2a4e1692ef03cfe1e57d02
-e57beb71818405a0265d0e1c0953cdf794e6e8f0 bf91514cc60f59a9c773d9c3b4ce2c0bbd878fc9
-7af05ef5aeb0fce277e62af0ce7559c306bfdc7d 5258381d50de35bbcf296110da395c32c43a732d
-ce31167268b79529de2383cf6ebabff76c903b81 3fb00040b6312da68acdcdcd0324a6f054fea69c
-fbfbe60820a2f13778c76a28be4bc66b61414127 61cc9171e6bf755a216db872afa2efe3f96a0d32
-e69d181d7c353d44ea23582741818a628067f6b6 7e3eb22c7ba14a17b2bcd546d9ea2ffb6de2c6a0
-9baffd28163bdf3b02262f29424e55c8d0ff6639 a3257908c641a96860bb2ca96eab037f15394fbf
-1de2f1630af236c653e27dda15da020cd83b8361 9e51a2959cb5c86137154d2614fd328da0f4d118
-c254cbe0d8612a7f750e71c66877f55f2bca8ebb ab187779593d4430945b38ae019c0d45981f719f
-03ee09974a412a3123c1e2f6dfbbcc826ec7d58e 946a780db57ade3b23ace235b1d2cf28d94cc664
-3881ffdb4b9518be111d82db615c24f1240b3475 0406b4fe06fc24e48f4642b495107b748a52ba07
-0e2e65513b0666e3a359ad65174283f366c20dba deba617c957ce30bb51f1b4712f638de7f6380ed
-d6112bc21460b9229cddcf75c00978689a8feac3 ee71ea4b0fe59f4dde99668995620075f6ebd809
-3e6ae5378d47c755e63d615c9cfab4491d2af518 301fe4945a5d40dcf9e6204e474934079ebf88b8
-08bf8e36ccbc8ab63b51da53589c5b62bed3cba4 4ba9a8707a9736ec39c4a81dc9905b9a72dbe51e
-efd5ac0975be77e734147e366ba2bb4988dd27e6 2bf4ed9868179cf91e102b7164319dae41e31bec
-8ad701eca657054ed87fb7e298b2d5f38201b414 4bb5df595e0a9866b18c544118bb7769271054dd
-bb7ae402c6b6a4a204567dc0105748672c9cc925 acd80d81f876e54c2f80d38607f4d2597b844ace
-b0e8c75da072ff80d32422355e8bbe38122b721f 3e2e0dc26216ba6706037a6dd542d56ef9661673
-79a9ca145bc81f2b81cce4742ad1732c744b2f1e b8c110eb872dbcf13ad547e43c05cf9d9187c6bc
-02a2de3177df852e5d62a7cfb49fe28b59a60efc 9ac218df96015f11ffca113dd5182a3532685f53
-69a1e1a6dba152fb9afcf841a1322725ade7ae38 0dcc44bf7d36837ff3410eaea895cc1b6fafee1c
-3dad16920785c573c47b3ac6106d0c8b7298aa3f b1e5698510c9dd274ecc6f61d1bf3f0af151b71a
-8ad34b0d4b3fceb1369f4ff3ea73fb109ef908a6 d534f860111efaf258173e7704746c041e5d3688
-11edf2a07ffed95c6386f37e8ab87ef44f2fcbfd eaf23da54693bf9006f26a3e448356993707bb73
-fe87a29982f07d7ee994b232cf4b8c70d0e451bc da39cc65dfa7532b2192902e2e53db76244487d9
-a66dc82241860e2597b7f3c67fe03d611c94ede9 38a3fb377c4b3a5becf111a491c68d013033e963
-4b2e1bdf7f59fca637431bf1dc4573b83d39d746 27576d2178fb726c6cf0e91d026c880633871ec1
-76299557885514514ee1909012bd2ed00004d66d 09f286287a3d922141da4f2e173e1659cf758380
-aa0058422c7943c89fc8052c4e220a763cd86683 b6a51c5590d25799bdca166cebe02699e9cc4b24
-4fd2f67b7318e46a4358423f5d585d407969bbcc 3088032a402266285d62d0bf0256797d595ba7b0
-f87f44fcab261a50e2a42ed6151f1f22e7db71d6 f19bf480e066a361fd082d830b416c6f90cc73f2
-83749296507b473b3f7d113cb1fdcf59f40f879a a9246e8cc7de594f8ea6f53a01bff7f9ceea4963
-15685e8ac6b798af494d21183db3ebe3d264135d 78bcd6245d4831c1e379fa2edb407532defa95ef
-25a506712410cfc34bc1f6d0600dc3cfd9bc6cc2 5fa9fba0dcaefed1fae58acb94c9c8b9f2b19fc0
-1d028ba4133bfdac140e1b4d052e217ca19a2b09 30d82739b16bd5fafbad7e9dea51f34dc4bfa3d7
-96bb07bc8ddaf0edf41a15a4afde10d6910c1c11 50686824c61b4b94c67836ecb386612c60333c10
-71c2b509c087730e0575936c85734177fc5289ec 8db86c19bdc053199b4d1558ee9db16231a4d278
-dbbaad1a71861059e688e477d1f366a512e0f2b1 12e915d4d01b1ba528f3d05c297f784a601441c4
-14bc1481519e59342b6a0e5213628280ba223f2e a423db770870b554cd7d0a0215cb89069f9c6446
-316384a215c9009a45f73fffab3a0637fcc669b5 d1a8bb46d19fb45c3ef96bd1d6bc0525a8a86b3c
-d31421b253541f346ceaecf337864a0b8c5703b4 26d749b6b255df44502a599cfda7dd0e9f06c80a
-170ba15b46769839a98fa4b1158ef54df61b95ed 52d8da4900eb3b61d4977df206c94fa5e3d172c9
-9d21d9ba2ab3b5da78efbc7216d6077e0822462f aea49c66c0949078650e9d0a8d0facfd2e6daf77
-887cefe0b5aae5045dfb00d4b6bd5dc331ab494d e2071a002bb9139b7c267d07f36803273e78fb45
-0db3a157c42125b20e96d808b90f3d73c43a77d4 9ca55a4ced96685c6185d36134f4ad256ef355a8
-51b17100e9b454ffe790890ec03fe069e2f16ae5 bfcd890e95e1051b506e27d9530e701cd15e930b
-992aaa7f9577db2184b5504189e8fbb2e439d0ee 11b28939a2172041504e64d0305cb6f91de0fe56
-1f29857116174e4f51002326c0e2ca45f297749e f22756c8ee394abdeafdce9f6c1a8b5885aa719c
-b47d5f475739d6f927292404b9dd39e06c18d471 2b7a590e214e2a654691874a7c89d92041c669b2
-4c6de7363690fdf043fc49d1ed8ef9e2e82b1c50 0e8d5c059668e6e59a896a02ce597f4c1b5ece13
-25e8458ac5d2a0fc5ae2b893f90db620cb428145 82da83cde2dc6b6d81f324cbf9dad27b768f604d
-841c5e18dfb38e3925be47433d57b27be1699351 9cd318d833ca5da4f1fc29b214c52b8ebfae61a8
-b57db343c1652f4049e00c8358baffb41bd5a871 cbad988f1f323725bfbbb666ca9bf47d45ecd223
-4121dcb9e7fbb668f85220ba691d9cc62cd7856b 3edd2cb1a208bb78a55b28a9a8d5c73f45a71ea9
-07d387c08b70bd96985935de70e56772f1cb5f0d f56979249c6e0beefabdf7460683ddb0e893d654
-f2dc2d6b09112edfde3a14b7a549ca4fad7cec4e ee4c39a4ed0e9f1c14b47ed10ecfddab7fdf7930
-c6f7903ebe5a4946e48e5709945dda1668dfce65 4107f37ce493ca927a85a0bda1a2ea7a9ab1d838
-f90e95a971362a0308329733ed52875169280437 a7abac3df03f3e3959e3982975e87febf4d5a5c4
-e8636ffb51923105239e7cff6a769e8831782c8a d1ecf7c9b0a64ee60737a90a0ac6fb7c071f0b6b
-d59488a78392ba5d70ef890c1bfa48a4f3756ab9 b7a3b2b9bf80a5431edc07eaecfdb164b90cfe3f
-9cd901530057322adc41a97bf42102d74a8503fc 93d5748354228367be4429f59843a5d532f70847
-fa96e7ed70bff908431dafb78649fc1c661b1ecc 4b91424a76267b977fc4665e5f2f21f3d7ce96da
-924306afdd257875bbe1d5e354051776166f22dd 92135fad2f4edbd4927c04086a0e0569ba804853
-aaeae8814e4b593d2f0fbb225e7830b3da45792f 91e58cbab61d9c35ae42fb50882d4d775390790d
-3c7116ecffa186751a19501da6eea91bcd288943 804b95c52fa182adb48f3924f2c051b534dd92c3
-d3e635adab8acee7e6366fa7891e5a45ae2b8094 94c19152c8b3d6baa58b5afea3092becdf796f7b
-c184f7284a509bebaa0fc5e14b2870635c3d2da0 5754fcb80de9ccb18320bb575d3498dd8a52ca4b
-bc47ebda21f28c9654d1bcd8cce0eca56af584ad 49f919ad6963a37198cf2cc7b0860320efffc542
-a5d3150671bfb57b5210f742b05cf30a560baec0 1364cbf0c5e89d2413fc33303a08bcc535b801d0
-119f0db9313642071dc81e8e5261983f098323f5 b3affea49935213c3b3874f29f3b912bbe301049
-d5ef4a7ff0e902c84b1f051e1a9a073e5cfa245c 05a10e87fd910584b28825caf974264218c31626
-3f37891e886e32cfbe93f64923dd42c2f7256e32 9c92b96e0af408d44593c9fe5ccb4c70185d3b2c
-a1c12cdcaab518a7e84086342e796ffab0118186 3dabfafbd9956dc8beefa576ebe49d1d8b9bbfed
-fb54e18019edfeb00755f1d734379ca91894897b 484ac47e56745007c55fd1de367597f7d8f23cd1
-c78a2bf9d629640d0f5963d7fc33b59c246a6232 e5fb4d132735bd88dba42232a1a45a75e245afd2
-9b201dbc6475d42181cbd1693fd92545027df6e4 b8c110eb872dbcf13ad547e43c05cf9d9187c6bc
-c420108b19757607ed11e30b69f936fff8525244 9ebcf0616295aba6edab401ca3edac01f41ac081
-f17bd8854643b4b8b18d30e9fac3162bba252848 8263b18c3cdc21050209d709b893193bfc9c799f
-e6f71b7f1500f7e2e8681266d9bd4423345ac0e5 ffbd3db166edd0608482833221f0b3e99dc1f101
-e46cd9cbd35e00b96758293714bd13a925343284 7ddd24a763f48338f26a985f7b9348b8047c93dd
-9951966f517676030a416f192f729be9aefa03e4 63c8973285ad166010d70fa31cd61518b2c4b314
-6a0660a1b984092506798922bda36432f59295a3 d1f15c6d893a6c6ac438d9b15645e56229ee4647
-47fa35ef81e0ffc75dcbb711ce4631bf2d0aad5b 352e9915d05e83ac9f00fbfce541d6b1083f4bcb
-83ba42cb28377e50daae37eaad4b0c93ecd3eafb 02c845ded61ef6932fa1000178b15e78a73bc8d7
-fd86f1cdca01115a624d9f33f8e95f7d2710b7c9 c39b8e88723e6bea03d0a7c2129e4fdd3926b7f4
-74b05f31b6a1fd7ddaff3649b88c139af3d69abb bee2c37f31ae56da54d549ff74b0421cdfb8c6b5
-ff4909625209ac8b98bc1f8fe330e98a1fbb0a74 07c2788302530d790ade664f15b40e2f4316a5a0
-ee8c6bb2310c4ce50a23cac865bffb6258901825 8d71df724c4a1ab217c5f328866ca8e21f9a0be9
-83106b4ed9506e656b82278d6c2077dfb34d241b 9dada029711407a688bb8194c2ba9a2a34e963ee
-99fb969d9b4f2861caa0724979eda705dd683276 f7aafbda6a10b9f0064841b2c7b9c433c36878b2
-70a4845ce851bcdca06901ab4fc237a91dd564a0 73ff85fcac65678097d1691b04b63bfa0658861f
-aa1f12178ced9a0e6051184d7184e3610ed62ab8 1bf24ff41cd3f328f36b7dbe1f8bc10d69747d0e
-f378555e0d6e65c8475c9563cddc67f25706a291 6d5ebe68fc73e5a4fb57bef7b719c5dc2e746e3a
-7d6039d6d6367970da54e02b13926bc630a16841 6d5ebe68fc73e5a4fb57bef7b719c5dc2e746e3a
-7e69d75cc2986033680a6dfcdf42af4e912d63b5 24e6979018650875e7444f5eb6d5a56a77e77711
-ac89af6db250c108f3c61540887878347a2d53a6 32fb1722aa08a5cbb666aeaf37c38dec55c3d1ca
-26709b326999ec6715a16c2e2c0d26776d40a016 7c36b1b34dda68a259c19f4262e9b34e4f0d82e0
-8c80c47ce3fe4fb5d3150f7dc29eb8d46bbd2c5f 15fd7cd7aa5d2b7b15829c5dd688404bc3eaa112
-81c97bc91ce77b1efac4f3df2ce8645ad240612c 15fd7cd7aa5d2b7b15829c5dd688404bc3eaa112
-3522d476584f5b6f7a42eaf3207d7374c7ad7201 51f830380cb7608e8c6d881ce26ab668ddebc95d
-67377c381cb2012a29c31910dafc2dc9624c222e f6e569f582d2537076ee6d94c5c8304135d0d2e2
-99c545af02287426e106ae83993e60051bec7c3e 3f17dc5079abc6d13e1922b19db190cb7d45eb88
-9f838e2c43a6c3b8cfab7e7f1652c50a76630eef 944703b5209d1781b1a0673c8ca1d933278efb96
-6cee4a908540de47bbc46318679cc7675cd0e3cd 530922bd082351571ac12b7dddd82765885554a7
-353bcd1a4a110cb7e85c36e02acb572806a1ed78 2fab89e185a97be9f8046dc18d6c9fa0dd1c3d38
-1fd567e0a202379953e933520f0a83226b2eb90b a10b99641552cff03bdb7bd276ac6aa978fb35fb
-99751e49526d02a41fbcaab90f6ce56b5997d9ec a10b99641552cff03bdb7bd276ac6aa978fb35fb
-5f60646e65ceb5cc0bc6edb3a47f4093153800af cb5d841a8bf2558c46105d808800b8915ca69648
-f248c63952810abfbdf52404357887d5877faddb 2ebfcf62afb35807b123411a473f0d9b5fc4bc3f
-8a7f3c722c10c82e47f99a0d08640ebfbb1d6a03 003a1b1328031bf19cb42189e7eea1b7e855c737
-51fb9fbef28c29c4e45909932999eecb87b9bc28 9f376f87667ee0a5a0bde72c71aa4744028ab13a
-16e8382d82c9b8e33ca99106d3b24e09529039f9 23374ad0b452690e6cafdb5b1bbf78bc5c3fb69b
-b44ab9f6cb51fe9b8a2e895151bc74543f3bebe4 05fe57ebdf94a9a2a2b0f34e6ef338b778c0d0ae
-03234869f9bbfb1dbe16db0d5dbc534e5b613e39 e0aeda86489276d9f774e6a3133ef928e60d5304
-1b88523fcf9f4c93e7449b4b173c87f210828b59 e401277b1d3d0211e46e59be0d05c76c7f07068f
-fec2b449fbf9af842ee06e1be7198c4b2b879400 905a8982e75b300c88c4eccd82b20acb5602cdcd
-8be9afe40b24ddde1ad5f93e3a6554519acc7dc7 fd10182afd96674b3cec606d9766f485109ecb1f
-edc5c58b28dcfb88c585888f653b26294c110578 0ad00971661078e36db2265837207b353e3a7112
-3f8ac9d2fc2094adacc739557e9beea6628a4d28 4f4b563a7b11b56e9b3b1526994397b585519b51
-522bb5d2b502396a2d38919e5e500a037f2f8c75 69d124d13dd3562a88224848810a6c66ce91f06c
-3a5628ca609964bd0599048e615a0607fe2ce6c9 8980c1887a6e850972464e5070d3043dad126e74
-c493dbe926a60150e3eae9dcd9088210497af00d 4390a4714471b65b9f6059bd0cf491a374d482cd
-9f1da93d7bd1acebb02475ec0747fe24f11be96e 72c27bde5dd9887e3c9ffb84b2e8497401f9d40b
-46f4d65308f414283fe08578eb8a3dec718fdb5a 34ad2f34b517f84032432b3a7944741eab9b773a
-aa43d7ce78ac25a880d88c09dd873d25bd820bf8 3ed29fb185491ed3576b0f006801f9efe60f9c61
-34d2a238566b6374cb676ad5a0de877170568ac1 f2d019b5a662e24429514e59445ff6cf99f339ec
-0093870891148ff85dabb3d5c83b2658ae2cdf15 b2ff95cffe9e1c656c1e90e00db6b27b279000d4
-cdbc521428aa437729039af491399d267a99b7b0 28b31f38296e877840b4c791972d929719d245b8
-6f5438ecff38be987d2df1315543e12d698b2345 9d0495289862ec6cd169c5af3bed4493cf88f058
-00372f37df3091ee93c3c13675c9f1bdde50dd2f 4dcbebe106dcee24fa44d2500dbbe1e587e44af6
-493caa4eedbbaa310f8e9a35add8b513aeb9e852 a4076365bc67c9aba5dbf2a9683fa293f2dfa50e
-feb85e59f6afedb476a9038c26028360987fb21e e594c11dccf1c4dc1579f05775e49c1d9a44e375
-7d32be85cac7e7385cece2dc2491620d12450e3d 5c4cc8cb0f4d6d10d7537f7a8abb03fad79f9644
-0ad68abb1242eb0077756ea901c5ee84cf463e67 69eb745c9889a102392a2d4c39a81b6564e2fe43
-e57a8b89a9ec77f593c12584aaed081d72dd57cd 3e709093c208f8aa6a28fed4f083fb1286d6e9a0
-69af59092c27e2e7eb91139f7e1dfa3f1e9bc76f b8ddbc51d8088c7c6c74e9993cb47aa21a209967
-86b64c92a5917c71b82ae69b54b983fae44b09cb 0885feb74343d2500864b32efe3b4a327ebd9b99
-55fe5c2dd5c850d94983877ea2a1641fdf768731 2e71f405cdd4ab33cb16b12f87437ad6cbee43f8
-5f9d7745e4257b11cbdb67f3d6f9b5e95c8584b7 0966429874854eb0c732273f4110bd8ef706c910
-a5f583c6b709310febc327c5922286519fe5d03f e9e267dc8e73acda26952f653cbe277bc0265832
-e27f99dd81fbd8c59aa55942c495b86a934511d8 4538f4db151cfdfe6627a5e78806d682d01e190c
-0318ded433f768c971d12e00fa8db157e9f50168 169b4d1bd6dc2873e01bfc0c42172d04e928d3d8
-9363b8cb71b88b058fdedbb43cbbe8c315f143c3 5cfb485a01a5b4a290ba7c5500da12155ee11c49
-b59b8f3cfcc2eb6851b2c153d2cbf794f11af0ac 4c11e6822e3b79060c7548c9e53b5e68c2b1d357
-ff70c6f1f0e344b6b3890c46e4a8cb1c380690b0 e8eaf6997206da1e9bd2a1098fcac0d6fe58ad7b
-db952e8c9a6270414def2b153fe021eb18c70d5b 47c1ed77bea398dfae45ef67856e5462b9f2807c
-0c59ae77c9c8a97d6c9ab39b85c068d46da391f6 89a027468c3faacfe9ffd17e3f5b55d42ba35c69
-30ab9c73223b14444e4864a375754e6d7c651b7b 7d0589835a9e912f0daad7aba53500cd68d30828
-ffa195928e0b9b7f5ab10fb0dc8fce65e29d7425 0771054afe855841a63fcf3349414aae917eef78
-aafe50bf4970b19b07e2f33d1ef50408179ca7ed f1fb86e7ea4559ed07a71bcc1574f949edff5075
-4ebd68d0fcbea1ca9c1fb729414c3a36394b419c f3f37a742574a3d550d924edfa437d52c6717ace
-910f4ddb9e278244ce93ad0e47c3c1accd032330 316e7b97aca1c9f76d1806bcf2b72c61fa7b8e80
-f7c933f4042a55388fc4f6d8c6652760537d9f7c 11d0025c02c07ecc5e5ed11c4dae9d2f0f911b45
-82af1090e71c8fd6b246f1394916d82046b11866 11d0025c02c07ecc5e5ed11c4dae9d2f0f911b45
-f60a4b7c87195ca9568f02d2c68e894fe8c07c34 f06e5e295fcdd48af037df92670d62f32ffd3a4b
-5e0be06ed246a3817a1ae12b9051416d156bf00b 944d81539ae2791d3957d1707497af16fefe4d7d
-fe07beda546884feec20c6d15add17d1267cccfd 3a9a146b7b98be0ac805d5460e929cee9fc1f7b0
-efc2242586e3dfb6b05a75223312c49084fc2e4f bd5890af3def9ad91c98ed46525b4a2c50bb3cd3
-4c438651cc7a1e37b8c2f9affdbdf0ff4830d573 2dc72ada2b3ade1fced051da2e8b701bfb851aab
-6600f2f3abbfb4c2190a1725d4217ed771866a5b ce1d6697e8c7b9ff6de782853fe59809d982a7e3
-7f7e22b949e09c678b132f690268196208165b24 07a86a6f1d44097d9f66dbd35a8f8a653f496034
-f13eb2dbf02397f00346e180544e93d2248dd7d3 cf1522543241ce6ad389a8ccc17da96d658b594a
-7706ee83d26920bfb971c71f1602ea8de0e0bfd9 e53a67edd13eb0586a95d98e9e7763a1dcc8f31a
-27d7647b7069bd809caa2a0648296769a27285b3 cfa29657731d5e8aecf92fdfd879850307574a1c
-e6d651b41909024a353ea30f1c305ef17b9cb9f0 45cd0d92bb347ece8c55658ac4b34c14d6bcc73c
-585ba793adad8f739ee6d4eda7300ed91f597c27 00206b53c4023b53a03e6c0e3bf7104ffbd6a3e5
-5e286472d4eb028efad6dbbd6bc2dba75f6289bc 41b344251ca3499ca7265cf74a86508f656e5d17
-b1864ec635d11a028e74384f050faecfe8ebdab7 84eb9b4d798633ca5a49bd291b4a034c7ed643e6
-3fda40dd12bea90e0a3fb53ec4f6eb8d43e497a2 18c177f61baef1e0a74b8e5b8762b5157fd03488
-063e0972362ac00404b73ddbc1f8b3ebdeeec796 1a08ea4f3cb949a9f9de3bb429263de97b009c77
-58b6eab4d6a9bd846ee92ca0dc75268b3f5b2693 40f88ddee2c38d6b52191fdd350fd45b0c212e03
-f71767a598289bcc62c1d8f6f68918dabd7a7428 86fa7c512b81851da6ee677a76ba6cc84cda7ede
-bee7b9c35150551c7eb0c6b310f3266ff3d0c0ab c9bd4cb7b4cf67df161a43b22cfbe26ea54f1add
-6fdda311fc73f25d2d5d3fbae1ff400791fb774c 57e52e037c9e33fbd9e17c8d3172441f7cec4230
-c6ce3774a9ba3fd626855b64241c5ec4e4e192fa 4183ee4e479c63e0c903e010fc0c5f7a97681180
-987e871ceda47186ad97db5f4b6d37091b3de282 a71300a511092ea8e7edc6ddabd8861e68f7b6d2
-8162e55ff6586af13bd0bb5543aa2d26947d60eb d141d74d15cee3702d410d6c8a02be84b24108d9
-fa5ca711afe58b08b860767861ea0ae24d3f7749 1ae3476267ce18a659e136a989db33dfdddb27ea
-344d167e79da979f46ded316acb8e8389142f0b0 c278fa6a2fef76258ad371003065906cad683fdf
-572c0ff25eb3276580282afe7affb461d8066c67 a6efdc98b63b964da5a1ffd0de6390a294c5e706
-106c107fd12459164b3989a91f91887f7c6b62d3 9a540943f3b82023df7a2375cfb5c6a50f02cfe3
-d03fdbe2bfb2b7e54a8d11bbaf67966903a78666 c8b681de6c27fbe08270dbc167a4994e3455ea0b
-647286528fb57d9188eb8479aab7c80c41cf74f7 7cdace7368031b53b472977a21c5a7ef8a10a984
-04847e01c10e5f8ceba51983c087b5053dc0775e 38e8dbdc3a9edecb155ef51b0520dc1f468cb1b9
-795a42a6623a04fcf43d2aa7a4fb1eda216e7dc3 dddf0eff06ab2ba521a5bebd61bd4a70f57f2188
-65e13090aab3a0c22491bed29c9fbec5c62acd28 e7c5b3b54f61282375b0014cbc5e243badecbe36
-5fe8558bfb44faed1dae73a8997311ce73a30c5a ca296a36326d5471a7742a00878d2279e5fbf32f
-d917bb805386c48ac8d73a062df32c1e29e83262 afc22c2bf03f578531421bd768b8dd258441c5c7
-4c97ae254d0638356839787883065a0c2ef7ed99 7665ff99eb8d11d2940ede99126782864edf7558
-87e9e2fb8ca83abd94c57a209cc66fd2f99cfa03 04682ec16eb98ea9fbcd42efe2411aa043e4e92d
-92f28f9f94acb8606d581d926082d77c1336b93e c60a5f8889a55418acc3516270586a116303e869
-afc7d00c3e7ebca4ba32a8324776566550f97517 e5024ba810bb9b70d3c3a0af1c54f81cf4fce489
-c08ee917b558e0576345bb23d50ab0f51a67617c 5cc2cddca6886ef39d758c1b472657429f72f4a9
-8b6dc3e3263b74f0c62f44352835d60b7f89a5d2 1eed72a5c04e930761305d6366942a69bed4ccee
-ebc65a16fcd30b55b25e5c8bff87baebf33b9116 496305c652ec45af333c715b41066b224defca53
-7d22de34032998eb69b5285bedcebaa5ee064137 20b22da28a52ff8c3c5043c68989762545e569e2
-e85b268d260d7320d2192f0acf7d59a6df778ee9 9e485d202bb07f42b12c3a987c066770310b800e
-81dcd8cd0a946ee457555cc449790664b7ea5c3b a3140a36a8548bc50a38fbe86933f2b746838be2
-c93f193aa787e720fea73694d0637ad2a462bac0 af91ff6b385d32909e307814ed58191f84a2cde2
-091e6a07fba1bceebd7a6eec8abc4feb97d25ff6 7939ddaab0da9a93368e5fae6a7e5f291fe7bc65
-46fc70bfb59c114c10a55fb4ebfabd97b01b2c7a 505fa5e652ddd6c379b950d237b4406b4cd993b8
-8e50edcc50c30cf441ade1912c1c2ef486705ce3 343ed08db30abd18d14e7d2b88a2727b45998c18
-f4c8f0eb64c5832ee6b4a7714227501d0570c4fb d810ae232b7d1c4d3eed1de37e423bfdbcec259a
-435ae7a93444f73648d8be21893cfb25c9fc607b 26bbcf3928950a91a5ce921abdfe2ef5e0f2b89c
-bc1ea9241af077f3f13afe4c156a4a1c83fd4f80 464c765ed68a5df969b2dc66022c2a8fbd40e642
-e4c611204eb7d10a3d2b9ae77667c86ddbc44d8e 368de70339ff98a5c5625805c27f06c06f576471
-472d3889b960faea301436a505875cd8afe33ee7 dd4fd0e1a168feac2788a3eb69ede256539a60ec
-f857dc2dc2b442d4651e527b6bb15ac070e39bf3 636d73bf7a8ce99365f14107b05f44aa75915101
-ff84af7d759b99c0537993ffa46beee1890e325e b04419f61d2f818606a71b05add5878c3f59b740
-8e1d881bdc7dc378ae96587b65721c20b49b0c00 c4c6a336a874caf2df77884d7f177d0632229c6e
-eb98f15889ed45f4280d417ebee9532c2fef2aa7 05351ae1cfdcc2a7d0e67d3193284da2dbecd4ac
-29de8185ba96422242316e899449888e786dd86c bf73c01fb1a788e2c982fd84f1788353d0949290
-c65e358b1c8bfb25f93fcdfb06aaaf73dd8cb516 21112dc4a71f22cff1d3f56b06bc6f2c94693f11
-a1d2371eeec158d4d5c674580dd7e85c8a6f475d 34046f91196bcfd36167022fc8506d9add427a16
-19b28303842734becadd42bd5431b6a767422142 272bd131fbd58136373b1856f152c65c649bf16c
-0e9d498328aabfa30b3d79561bbcbc71b9cdcf11 451c42c65092aa0e0f120f6a0ddd35aac65c509c
-4668fb937132417b21ca484bdb769e3037b46733 634a7b2ee76ea5d49be851a9abcfc05ffd91cfa7
-1b22370a979a451f101ac0719efef8bb11b3de79 1b29e496beb667654cb238c9cc3ca957d2f2b696
-346af31ddce89bfc9af276686ea343b0873e6c79 82a23116055cb6c17e9a4a79c3b7632388ed7bfa
-b4a1d8d0a137b9b35892932020c037326f798cbe 784b19b30ff816bab3064d0e59cbab3a5720f40e
-9ff5a4669a64045258f472e6d8a8ee4373209b1d 5ac2a0eac8327d88fe77e1fb51c1cc178500a572
-8de40f42bb750ba3bd3ca243e8e516abc5a6313e 204a3b09557e60bf2841743f47294db86925c88f
-9a8c58529306f727b4885982535bba86cb9e998c 375024e1a41acc9ec383e4408800ee59f2a91ae1
-45742b6b6b34c7cbca2a0107f8c8a121fa792f99 aeb314a80a5928ad1d53c4d367dc2db0cd537ef0
-9f3030247c560c33113a5149ffc823e2bc92d758 c83d57bcc56197100f6b8c6f89d06b5d715c0aaf
-91814b44ddbc3529e77e92b9914db0cca49ca2dc 8f5cc3c53fb9fa40eee2f4ed1f315da276f2afc4
-71428f331534bb6af3b57e6665bec710005fcf04 7645addfcc61ba397d59a778ee1a4cc8a4fc1936
-e5835560d1f44eb6d1440e5a9a597533c3e1c4cf 352f54e5fadcfcdc3b476c4588f6f8a58331d400
-c56c57543c5189feed4745e490c0c92784e7c43c 59ddec856b0b83b86dc4133d466877f80ff86eaa
-f258ac9b1b3b0227d8a04883ea053f21fcde8f3e f164f9466e636ce06534ee01f7a84b544d8d8e12
-d9a5d3063bf57fdc38e86c3051dbb1b752c4ee59 9f97541d2f8591f297aa54bcc22e6b917c5038a2
-c73f0af8b90c6384af392a6fe859da0063451ade a05460c1496d0ba8db06780f18b6def33f0b563b
-fd3b2e57a2c66a3014e2fac32abcd0a18093f691 5990a07b4733e67a8a7043992a9aada3cb311d00
-3b42de6ddfba12a7b91c4605501b608ea92c4934 16a54ff08ee6a5f319d87c4f712a2e5fcb049d5e
-91e336003b56c4773ef495b2ab635a3b9bb0501c 38c2e8257ef325d4009cfe2d478262b5e975952e
-31724ef10b3577cb86ac6093447856d523fec3c5 5a17dbd2a7cb76657ce155dde8a1e8ae29cc53da
-f525184fa51659e8c649274354a8b37f4c7f788f f182b58cc71dbb26a574fc19d8d528a5ed813c8e
-69dfcc8a3dc4c20d7de4a7490883c41e52dba2b7 ba10b62d617bab843af5c472f8fb51a6a4f894b1
-384e5a7222b8a3258abd97d244a87d7afde98ddf 2662812b35a98b2389368aa412175b43f1af023f
-726fa47d31e35588bfd20983b8d3a17fe65c1b1f 5ccabfe523d4e2ac5b4047b25acd1e2353582afe
-7bbd4bcced2442ea55b2af50d1577c9f1caeb664 28a0c60d4601ad9c0e0caf8d6a932b56985afd04
-58ddfc4dd95f07c2c0b757c635f08adfe1e1e7d0 5d4822f3f9f0aa25f06657454a238ee6074093e2
-c3512973fe8a30c6fc149366de4d608af2296b1e 1b273bc87a9ee6fbf03b73c895fd9f3f620bac8d
-6249f70c6f5bb1f1bb7dfd41cb2e69c8792244ba 152314aeb3cd1e841df2612f37f97a72ab19c87e
-e4e38b3c1eecbc4af6b908dfa34c659f60e3cb3c 32bc658ded18dfa9d37fec7b000b8ec54be066d2
-7a1324b197d5d8f867b8ba14732d0f4d34dbd35f 21e3dda7c835f920011e8f0b401d62560216f161
-5de9a908329188bf0632f73640951e59ae396ebd 48d1033bd5897238befafc16830e5fa99932db4c
-5762f91cdf8eab86787efff5cd81d3f066f65977 3790a89a8e0d2e84d2340ca4cfd3e2c23b90dbcb
-5e6263dda4d83edd4fa30ffdb2891e4bed951597 3790a89a8e0d2e84d2340ca4cfd3e2c23b90dbcb
-ed636fb5a1a2b1265c55adc6f34393c3e88438d7 ee2e020e96a1186e9a1e719412cd8b26f7747cee
-ba1c23fea75aa43c3457184bcb8873a1c4a790f1 a8b3d5cb9be853eaa6cf5be284a26b25057fda8c
-306b25b154b6cce1dc7ad6d131062f5d5c5ce7b2 2617addd543a8cd0e7f4a52d164b20f543f90841
-6de2547cab0b47333c41ac172ffa1e6052ef0b83 fa3f5bdc7a040df0da1ea60b03bf5236193a4775
-add212abf4cc88c68577e7004c3c0e53dee7f49d 22870c81c6fd4f37d4e5015ae0367ed3f7ccc3e2
-f785ff8f11b8d2d3b4b3a94626729b852218ee16 4664dd27f47c4edac49d8ef4b3e3a112c7826395
-2780df3775fb9e1f77fa11fd3e367441f6aef4ec 48c4db6ef73109e89128a078e060f6a51d0f05ae
-e073ff79c0c0d73317641d381ec1b5f7b720535f d3f8ff4a4233ac29138bc46e10838df5c3df6c5c
-57e00f7d4d4f54a32b76def2ef7337fc1f369d23 cfc4b6a24f18e29f71b393675533831eae464193
-c85bf5ad1141a6f39a4cb98bfc464a5a0d7aab80 90553bc12b07df5a1575daf247f69ec0a0916b78
-68026445fb57f0985707233c113ef340781f3aae f6758fc4f8fd7ade83ff4e96c3fa3ae024f4afab
-b6db08db1638fe81b630a7a3a926a79974aa5d3b bd6d14c1a2441d60735663a4c6d48c62e6f8e208
-90768a0e85be22c93bd01cca35db39642a0d8a4a 5eb7ff11d12fb23e2656f772393066c48d629ddf
-fa4e71795410beb8cb2faeaed1bec2e622fd0c2e 5b16e9c2b77a186098a0fc20ed653c50f52887b5
-5478808bffcd2503edf5544a619ea1138cedb8fe 9b2e645d1ad582ceb83ff52551b9b7326aaebd57
-a94cdf7a048c5692e6a8c760420599730544a1f8 a9c93ec232c4be6b9517d21110c353d85a8007b1
-5e09489404f46fe9a63d83bd8b5e5f36ba13dc81 57700d120cf2cf12e290c8083bc3f7928ef07c9b
-e6feef9704cf1c1cbde975734c7ffa1ed1438738 8326d22d84d29150bfab35ec09151f2b8901f9db
-5022712def4e4f39455e7edc19a3bcc1f941b77a c0ff86cc07652ffd314389a6fb12567593da8672
-1bc8229a01a7ad68cc95fb0abe5af1767fa271d0 104da54eccb10ff3f4e8b7e521af829fac4bb2b9
-7231bba459a9b7b04a39eb0fde376c605d00b06b 28d976bb13b55aef28d985cfbb4cc2efe1f0f882
-64a2f336f50d6fe08a0dbccc7a35bbabeac036c6 a2ee4a665a92785b72751385fc4ce25adb0ffaae
-107a07a8c5dc8e10545049540eb008ba6981b7bf 8ee15bd8f273925a4a1c0d17bcddbdf1e7b2314d
-af20fe00c768b4660b3560a36b335bf5173873f8 664637f03a179943679bbd807a4b8daee91e15d9
-cbcaefb8671c5e0bca7d93cf2addf647a46dcf02 cca45c219b85672bf13f666af3a43674ae6ce38b
-46f222c28a106f15a9fd37d391a2a053e5ce240c 2da95c48f00ae063a77af6ee09852a3a0261f1e4
-2992101f5137b4ffd846c6b0902a7dbf337520f9 01644a63641e02ad38ccc8780870eff070e66f78
-833a34c52352d65d56de539920a0a83e9615739f 8e8341e91bbb26fc0163347da8dc186e9d27ddfa
-6e7f7b441b2efdd7469e3f09dbc4d54add5def0e 69ca3fa7a64b47b534f019b419504acd442fef71
-6e584bc8bfc004c163fc256cee533d8c4e927df7 54ac3fc538de1d78394385e212c3c0e607750d4f
-e355da6b1595e30e36dfcd7ea2b6cf0c35be087d 7069791eb2078a2ce0613924a51d5e0e1e0af08f
-383f63ca6761bff8883b633767ce9374b7768a8c ee1d6fabd15d48a19094966440773a1b7cc13a14
-8d23110f23601c6a2f85de0f76374f9620ed2bc0 f0cbd6dbefc174441aeb269950fe354fa84bff5f
-298b530ca1039db9dee8eb724b54a02d844d6ddd 06039fd5696bdc4d3b6a6650827b8ddfeddaaef1
-ab9a77641172af7dc30ae8241fd2ac2b7e6fea27 8caa24b2db4af1c57dcda4b6134996d7527420bd
-d438ed59a06e059fde143df726078aa563ef1b0c b228a510ca2bdffcc27b4650804712bdee9386e8
-5f6905ac1600c61c2e16634e304a45e03cfa64d1 c010c043f094aef67ed10d2446e030da5b3badde
-5887822fa046e3ba7f4268b8e25c0df4d02f135c cc9cb448276becf3508eae1b1fb10fba3bab76a4
-3f2aeef06777cf176df1f719deb7d8cfc0866dab ebd3b9db0d2b57ef1b1405c4de01c733592de6f8
-505c679639d973760ac6f6a55fffbbfd8a26ebf9 b91ea9744b4d3a32a43a3358deeb221ea0f3ede3
-fa71a523e1a50676f8b9cf33b683a7cdbb7080c2 375ec0b12f230e9e1f0b264b38fa72a39dba9ebd
-8c2d4a1272261a4782b3ddb4058d0a2e5e906c8a 45c5f0a6c25b3d7b831fec3bbe60516920f8e4e6
-ecae806fd93c6e5e4da6eec69ded696984645e40 ce4487670d6a3c6b5853f61f9c2510b6d37b73df
-4eb37d005a385b7a7ff6b8a084c97e1cc6e37073 608b9d83fdfb142063d959856cbe60db3d9f4693
-74f0b3d22142f2e199a0950d31abb4119e074d01 6470efee0c6b527e179b7e3fc26415bb7bdacb52
-afef97d1ae8a884e2b75737610b204085f9cb487 08d0fd7ac1248f4869ff8c17d009b9c045b2a298
-ff6b604f523315712f75a719300d54be5565755f 43432c6b10a134a7433d07c3d28f130cf318393d
-ae27f8e9a38601f8a6520d0cbc6132111bd232f1 e6ac261b6ffa4c2ab32a6b70b3ee40bb542cac25
-98faf4b8f159ccc3711fecfba0b0de1000555a2a ba38d23d8f31288a32f831a9e4246499977ac61b
-79df8e882dcddf8fbf982b927c711e5aea8df33e 6831b708cdbb70b06065390367ea05917e4c50f4
-c0c7388a360909037dff942384fcbcfcd0e35d26 8ef7fcb6228d2d085f2c7955a350351b87e00798
-0ec1c8ba96dabeaa5c2c89cf182376ef7c4fa48e 645609b17267cb91c9709dc16af9016bc0d4332c
-46ed0ca3fc9dd38c56ab4788d35d360699e9012a 93323fc451d0af499e1986b063d83f774a126a38
-731a64d68c16574bb6a77a004d338b84fd3bedef b43c8541aed9e620e469cdcb5744c26506f25405
-4297de6a40063c96504a5545ec530644012bd165 2fe7a249b301cbc81b609869752489f8168094f6
-f761569b1ca2cbf9a42e87517fb9f39d19c8fa1a 499c35056937faa892f9547fa95837aa1077ce4c
-c3220f7f76990aab3f40c100294d41f3e047bdd8 79e91053847938dbd4345f001fe328c9805d9042
-3c4bd64fc69803dbf49bcf3d8fb00051a778a48e ba02e6dab8e3e4a6c6e0fd7916b069f1b62bd3e9
-b833be139f98d4d458bac3d4a00e5e98d529f74a ad2c3917e8e57e96afff2b091df39d6b44c89ec2
-10a9ca790264435882dc3c43195038cb81867f44 7257da5e2eaf360ce50b28eff4999922308c4589
-191275178854f2f0e12619bb521dfc4dfaf835e9 37d8eb167abbc28e715d741d03adf0c80c8249ac
-115c4715b47c93d1bc1caa79dc798e06c420dd41 a086dc7af06b1a9af6cf9a72263d608c9df1fc5b
-1fd9b8a42111d8cb2cd6bc3a165f171d48de8f0f b3b0383127a7cf6bd8ef8f20a11bc8e060142da5
-d900b14d19669e0e44d2e977e65bf94ce107bbf5 e74a2359f1edebd11f5ad00075eb7c4fc1085533
-1aa2aadde7770de890f193f17ee9d0084286cdb3 6cb30bcb34cd8170aa6b939b78d7a974c8ca1879
-20ac943e51259b83a0968cea408e20e28559ff8b 98a87fac0fd51d51fafb18f668f473a5e3a7b1d9
-40d9e6ec03909789837b90467bbc02b36f950d0f a43e73dc49f5df17bd8e35613dbc8a9c22531659
-b5091774e9ca95e6eab1253341a1fb0918b735c9 83ad7a3ec15f559a56684262768110d84cda7c32
-cbee44e2b8ca796b485ce9e45303dd847277c437 caf246995db390d914074b241950e72333c62f62
-3474531e1c5b8cd45bbf226d45e733e77741584b af2c070b358881450478a94c951647cba4528e24
-ab478d90bf460e722e8b58005ec022f546294879 e27752143bc06fa3390bc180a2a8d93d2d4cd65d
-6f4266f5f3c8b5d82cbbe814537be6f3b6a7e824 e36cefcce75c5b7677aacaf888bf8d491c6a7b6b
-2b9256d5da3595c1692b66c280100874b3351aaa 8d44bbbc15ed0c107e1b99814694fe9bd8e7d43d
-6c2f4c3631efafea8cac6d1ff05ac23e63aabbf3 a35db4813b033e2e6b50fc120c1f59071b8372ba
-5c8f42fa1af5da22aa7920fa850da6bcaebc24d7 5353ddaa8bcb39f888ab7fcabc4b337c4f9bcb40
-e46da78dd81292b42afff891a147a4a01108cb8f 041a19f62e774bb39b68dcebdf3a38a339f71540
-29f272ebd8c6746dbe2136a742f53cccd5c9dcde 92f5186b57320ac20cdb4d5e6207e8c875f1c374
-3b51eec6525a5001d6253914ccea944a7e15a063 89cf413c20120924b65c195e7f508e7272d66f59
-21c3536b9da62beabd0b74f4af69530d13d621ad 0cb5f64d5d4dbc351b80b0b18bb63bc4121c155b
-8115a495a300e7c65264181bd9e47de6fa38579d b79da03f8324e34ddfadd1223572d46b62f6ac57
-70d051e0829717590a1575e411d51936cccc61a2 c97c5048d527ba6c805bff6173b8fd761a6853de
-f83d832d3ce5eeb77279f58d1fda6a2c5dfab2c1 d9b075957a645f2645503901ffd5aef921551a91
-393701fcb45a975153a65665e760af736f307a70 6e81f1b14a754356ce34b4e576ebf67a6c288237
-5c94a5dfbd8513fc5a4e55ec094c58b4eb7310de b79da03f8324e34ddfadd1223572d46b62f6ac57
-8573f1aca6106666b2487132b55336ae4185862f 6e81f1b14a754356ce34b4e576ebf67a6c288237
-460e56b3296801b8d618debafa0dce401203fb7d 4d47846871a4f8b231035bb2b44a6b0ec4a0afdc
-34e1fa803593bf9cd736bf10fc69dd9b6afee87a c4dfbda6380fe6d8f4a1a1853390d11f8b0e3ce7
-20bfa61a195c46e7bb1344e9f358a7f8f9045219 035a8d5eff757f10d947c9829ac7238416cf7d80
-e61190f27b8978a1fd4cffbc3b488d05a436de1d 7cf8aabf3eb3aa6f0d269398af56fe9880d6b859
-8354379d705bba217a706c0c61361ba6991679fa 7cf8aabf3eb3aa6f0d269398af56fe9880d6b859
-dbdf4e7b099992b7a0be04fa4d67dd609b3eed80 bf99838a1c4c216d46b2ea652e06a95c8d52a531
-af8939ddfcddb580e36bcc872240f58fbf58fc94 3f785616f0e6f4c513eb02b2e24f2eaa5039576d
-05f6dd1c2a4d867edb9ec41ef6ce549cc426e2ca 938345d998bfef87004401dbee323c05ffab3a00
-6cf6c412a1fc4a3c48cd19b5ab0f99273f14d431 63fcc102ca764a15a8b67af2f3e190266b1e411c
-bab8a69e9528929486f204b50f4c19ea2ced75b0 7fcbab82fc698b2590b2e560c4ed13517a309406
-a90f5a1bc4fcbd927a54a2e629935daba7ae2fc8 45c147cfe9248ef351128853f63d0cae80c888b8
-83ec479d3a9466fe1b3d717b3e15c37891184561 d26ec147937d732a50955fa906e6870188dad2ed
-1000237f1bb43ef14bcffce20c8756b91367a3f4 a69b949cdb33db583b1853127350f117bd3ba3ba
-1ae6e26dd26eb76f49d0b1b8d7b8be5af2f57623 d8034336b0846717d6b05aa734b642f8497fc74a
-284c8c4a10072b4cf92a44d6992479bbb53969df e9b7df02cc7812d3ebaba66c66143e134975e597
-693de5f98322b2bdcf183d876f52d145ba1aa9f4 1647ca0fbe9cbbc6963d6e3a204dd62dde9c951d
-aaa335c7b7851d64ca6971d9db053f6469be7028 b50ddd786be8d92ceabc8de1ef734592b9053586
-8eeb6aa39d47ce804ca4e95985d966ed4aca4eb1 54a4b2929680f16c27990e95a761734a4b8b98eb
-9000f3966028ac5ca61545c5880abe315bdb9bcd d9d1d3486f640c191e3b9613f43742abd4002dfa
-a3b85d5c6fe688ccf353d479a8d470f9f7a749d4 5a066b2dc8b7b727f609f14a167f255751dc3bb3
-572d490c9d4f90792bd356970ab752fd1b8785b6 9db3e3098370a6e85bae7fb74fbab9f790e3c701
-aafd1a03cf9e47f1dcdbbd7caa8e70db46135fae 16b033f64fa84b0d46131e0fe716911504d5fe5c
-e87f1d80d7fb64ea00805fcbe16c1ae1779baa4e e160574e19d1e50a45a39ad53aa602076e2df29b
-924d091c166cd69a2a3c1062a957637b645f9b97 85d1dcb5b1b4759e0bf214a178cd7ca36a057f1c
-b8ac8e18012d2567f81e4a4196ce36386723dd18 f6761b99db49b2851c6793bc7df9dc3a5ce0936c
-bce5f867bef966c2226e506c1b82966e1f33f4e2 7a5feadf9e972766ce11236439259d091719e3fd
-5d420914a9065929a4a22554110cf17bae3529e0 6ca75b2356da60baeadaf67f5ee01a3643e999b3
-0fd50a6ff54f163e04864f2b0fba5a8f1d1ba72d b725bce5a8ff8c820d878b1b0f7fef50145978d0
-20854fb41148e14d3bd1e7fd62cec9628519d1ef 78c65079894d78d7b9c63223abe53f900e467ee6
-380b2422b8647e294aefa545dd90822a91024a83 020227e951f26576d577118beab064354e027670
-899ad123f396b10c67330164e0ae18a483df793e cc8e9bda5a733a4299eb759f23e9e5014cda3a8a
-0c4ddc13f7e740868c99e1b43b7f63b0862fcce2 af9b8b5ae647f4527c33c9d29ae425852ad723b4
-f9cb59cffef2daf2a55d9249822bb937b16cd454 a93518a92f2e045f8f15b6b2679ae58d1e6b1e51
-3a6708bb6978fb14830d3d22e3d504ed2dc67feb 399f8279f92ba3955800cef51fc89d6650999516
-0135d844f82e4d78ff070443f815405a53ffc763 bb8e99c3d58d2e279019883bc4f38503d54449ff
-a6afed006db0611a1d6114a3fdb4bd1fa162b1ef 030c0698878d17e38c8f5132b2513203852b93df
-8dd431486fca576d0584e820a01a7c81d03262fa 50e0fa714817774ecf437793d774bc8dd7526574
-29e0f28d7bf273612b3d606a92c19c6eb4836c18 3d1fa6516df37f7ebee4f2c2a1fc8941a694cafe
-b7bf26050a0ddc058c26f80c67d474cea9fa1ea4 320aaad0c95090765f47528dd7ba42b618ecb011
-b14bf5323b16911c09e49fb56a63d21fd96f4338 b5892d251dbe6514c44ff197523461cc3417ba6f
-5f92e746681464da4473c289880a325af8dac4e1 f465af51c163b2e4b548620f8ae619b7ce580c78
-425d4e960450e74f05926c8d4bb7f22ea945dcea b034bf7734fe232bdf7f56d1f682810b6b6cb319
-18e2ac3648abdb82e07d253fecb26cfb36209878 880c35184c19e0c86ad0c2545abb1fe163035bf3
-15d04b6464a766219abeb66a62e4118d68a48ec1 6a0103b936cb82c94591dffffe6d54618bb58132
-e92ae606de12d5a54e17de7fd6082098824122ec 72992df23c5777797c08c620b92d44bae878e9d1
-4d8b5e2ea3d1590f764d4a929cdcc80849aff9ea 9f045d21e5fd33e9890bf2f364b4632a4d07bd98
-0ab47ac1e316bf8d14b9a88c233397c639f39350 f28ed6b36790e0c072affe2b359368ff59c4bb62
-adc94512ea9b94bd321641fca798b16105142f64 82ac0a95a4e0e7a150260d9aae65ab7607185a5b
-24577dbbf7a455457da5e1d838c8560d826db52e 07e0b1c97dbd863db99d1a67c1303565949dc5bd
-6f28b241eae2fbc2daea485d617d4f310d758d49 453d323125d981b9f59d81017f81bf84036119f4
-e7e6f09c529319be9f38f9cff9d9937fd6e87485 144a001ab5f8c0514b4272011bb4175e8d4d04ed
-b751c84d1bf212d8c0c2d34762f40992c4c22d7b 08be7d93337f8e0a14df14da2902f8bc40a6d6af
-34dac7f524da52151978db820b5ba9f57706f2c3 7a7c80c8283e28c3f3e7099abaae404221aa9054
-4536ba0ea3da487679465002e93bb06162a290f5 a6a2777a767a61740ea897d1debd2fdf268421fe
-dc5ff7a937713119136fdc91f8fd33cb2135f5ea 1906e1f4cbd12490b13b69f950bd7878f2fec927
-428d6659850795ace4f1a94f711de8521cb3d165 b8c268599613ef7f318175a3293cc6538fc3accd
-4f45c9bc851f0cb0db9cde3a9cbf12d7d8207aff 898b1045eba2f211fc93de44e50a49c7cb11741e
-2af3cd5b04ae62f64273d2c825ae4ca83938e1a6 1650fac8ce7641b3eda7af7ca213851a2d2bd0e5
-44a0b38b1c5683cd4896e63a560e4e2167a122b9 c10ae2c3b65d07b9f604d28ef64026f84bcedce4
-63740d7fb3abc64f6a444780402b11c8bd7521d4 130f71d2b3dbb97f1fef5c8481dd94a76194359b
-aea82e0ad28bf2b64076a4141fd90502816e13a0 67f0f609dd5649eeb0f5ef220a0d995128f1589b
-56dd857fb19e7abb664a2106d407dceece0f484d a8d1deb7d8e8d57ffdb6ac3325701b22e0b79f9c
-c9ffacc06cec5b38f19be2ce1169da15fdcb41d4 9422c3112bb3122e6f3e5c4075fd8408fde2d515
-51463f2a3b2c5211645354acc81b425b2b405180 c159cdf3e06df1e9de0913393b54402029d19671
-8f74b66e6580e0e8a1a9ab93ef529deb954cfeec 448eea5c7a63f771da4e45b59546eb2fe6a42d84
-9656df0c7069c9aa0962f890490d620960dc85d4 64e989221e717096dad6f23f306573303bb85c87
-c9d2b258ed5dfd8171d17e7f9ef333b65ab1d723 817e18ebd0b7133a97e59f412e99db8d9bec53c0
-2b268726e17351421b2d23b1388c2bb606ef1721 288ad9275fcf55606d190a91623660e5c02fa1b0
-3643dfcc42e6ac92e7825ddb6ffe262f6dbabf8d 580302562b82c679fdc48eea8c7248eb4dcdae52
-ff018c9403519a57d7ae5bfd88b96750a0c5d029 3f3fbdd03fbebd036a585f2a043be2f55f253998
-d2f32a56d41bdbf1f7e5010ce08f93e18186cbfa 6c59c18bce63b71159c813acbba985d74d3e7411
-4aa32bd877186e4675d45ca82527db9cb04fbe5a d8b7dc875e47e50749c7acc803b3b523a9eec769
-450bb5928253690a25a267f485cfc9ca4922668f b558bc1d1ba3b7c0bbd057332ecae7e829c0fd4c
-5579ee1373ff71d06320e438c5d412d59f20c358 00c4f4274a1638f83d454b67c54c166cefaf6dc7
-30be371bc1ed2d03ceacd93147982ff53e41c9b4 9cc17eba7f3c628a344a8d9c98664591fc9bf458
-cb6e3e6a4f2d28cd7f55cac2064a011f27cb0bf9 a0560d6285750e039004851d5720268f495babd7
-de4b60b2d970b3affca6d445637f0460d041f101 402cf5d02eeba86f66574bd24c44b4ae89e4fe91
-ac8af56a61146f5d76ab9eb6d8b97812783643c0 c6a848b04640923013811c53509328e734ebd4d6
-6287b3b1fdfeef94549a5d73274a8abe6d83d263 3c38db0331db0a88dbb529f98ba04a321e4cdf40
-ec12cbf19e9b6b6d8f147b08df7ba12b28389cc3 d126147e238b4c76424131386ecf05566cd7e055
-0af243e76243099826008154ee6d9df9302b0c1b cd62f9ec62332c6475f5f9e96728d0a59ceecd80
-0cec2eb5b7b48f4ac41af7427ac7303f854361df ef5f493f1ac415f03cd9e6babd87a1bc85023553
-19fc8b450df214da19b62c46536ab0596e2411d2 2da2755df5c7a714e754f6679de9efa6eaefe21d
-44434038b3f3faa5f7a3a6d9e885841daece9a8d 2769766af3007c62186a779a468dee32a0543344
-453d3637bc7514d6fa3b69a0425fb670b6e3a46b 6f75f1e196c2f4db6a360a70750010bacf232852
-085178b31de9524e816b97708f7e4c2d22f234af 6f775ed8d8b994cddbef104728df35fa91d06f3d
-22e0bda0bb761491b984b6ca423bae907325ae8c 24802df70f200a0ac11644c345b95c68e8400b97
-144e66310d5d54fe7a5f3a5eb346ff7e62ff5906 6a04e32ec405cfa1416a626e7a5f233ae31f3dd4
-d7302cf4016e53c6cdb684f75c5a13da048f21fe 7f73707fcf47da2e34199b5675c11a50e465fb55
-c480520b7822030b5c34b3a8f2184c9a95aea9ee 6e7c2ad7b5f03193ee872f4fa083d038e64a5576
-f4ce62e229d1587a292a7568c7d209232570506f b2f51de043b97274dec8a4d1b437e12e0325620b
-09c6af4a8f2485955a2bd7e6a3099647d023b043 3487d68f2343e1dc6a10ad4bf1ceb746d92bd8c8
-cb285383d35d56c86d919997529c9f4c39e4e42b 8c3f07cd795534fc56b09d77d2fd41a49db0dca0
-86193803788596c0fdc74abe470c74cd7a2dc48b 7e0cf38e30287dd1f782e4e69e4fa60d2a00b30c
-7855d22a0e838d9b4814d761b5d80b4d37ee380b f778096981b835e41cc3a3f1d97a458f0f70cff5
-24614416895197a71b311d3df5a801c2cd6bacf2 08b0fdd5efbfa47d5d4e6a6ac54724079a1dc83b
-bc0f55e0e20b22c8e6ce6ac947505afa37ca8cf1 822e3b8794e5709c2af5402bc8b84fdcf11fde32
-199be248f0bf8d553011749d29b31a49b383a2fb 96dbc86046579b717c26df08c4ce576062f7f571
-a16f2fb0406b5dfba2ed668bf52742bb62168280 1fa273e4597feb0dc6410aaafff6a69c75997840
-57a318aa10a5106c13443fc36f8e0bf6bb04fc77 5979b36b581de01435dd6a96782b1e4b8b7dfb00
-30a851f684d27a2eebf924c4b92e815972907f59 90e892e193bf51cf4361a5a5d0099d354b42d854
-bdf695d7f3c9020bcf2dfdf78cb0dd4d260d0132 5dc36c3d33f361da0627e02b2d25d1a4eb0b98f3
-d652aabf457c441937145319158c3db2c13f8fac cbbba12cc91bf3edffadbb2b659ebc557f1abc9c
-705ffba471601cc7fd8763e7dfb98d791781bc56 f667774d7382060ef3ae61f25e9ee2a8170614df
-7bb560d39880b79947c9ee3e46358bbd7955154e e08c5c1524a17d44b9187fb21e2b76f590f9f23e
-d764b89f38f9abc59b313ed12178e1685a14dee1 7fae06f4a0b67613a25b9d5e80114de848f2a519
-7903be288c501df185569db180ca076394e048ab 94584ffdc2de23f250fc39c97bdffcea32d8b321
-c7ebfe1ecb17d219984716e60f250e8de0626962 29cb97173841041d33f49f41def78df5f3093fc6
-0c8875a341bf0ce592e4bc9a5b51d5c82dcc8f01 3b448b143d391d8210227fe74c5bcd22dbd645c8
-ecabe0d234126f2648cef2803a07031885b21220 b22ef2238754137b0217479e6b0fac47a1077021
-14d2bf3e70c795e197b0ad21377df15ad855624d b6f6e09463b0b4a190ad7f6bd6aa2c227099007c
-a581693ac321848b9c421ab532f32cb98af9df42 c442653d1be47a2b851e3beafc7d384fa149d7cc
-03a85483a56641bca1c347ee492174d4fb9143a9 65f6ccf6d28576a7759da291d7c851c351fbb38f
-99749c4f637a7506c57d42ddd55ce3408748258d 318ecc7388af8fd68adb7cc52aff9a7d5dee80b6
-9ca2ca6d5b3df64f563d82dc3c16c984244c4d6c e48467e5abc1d1122fcafcf1b6c17ca71a893c61
-9835dcaf799a1935eb51b80764c339783a40d3a5 1a392e1d1767ea9a7ebeca83f9a9e7b5ee5e7636
-06f6bb7ad5f806dee693e194e986c7361e982552 9adfdc0c36403784772e5bc4b005e1cf5c7dc2c5
-ab9f03b08527a5e8b6b264f082c7cfe64bed08c9 026a5b532fa6e29275b18f32fcdac3f624a3a560
-e6f43bc8dfcb28b1077b86515dc9ea9d40cdf9a6 9e613ce086643874f5b4b1ff29851444543cf8cf
-b474b830aaf4169c5552cf3e69ff50235041bc08 338461515dd69c18c3d698ddb04f6cd793ffa7d6
-14524d93bd08ea3d2f332c611fcf1465271a3ff5 ddbd130fb3f88dbfd43561edfe355bbbc6c2cd7e
-abf337c47cf4727c21904806226d2128beddd6af 655404b994ecc2a957744568a7c30d8e154c0471
-0f1386ce5dfa285ae97f207b9c5dd6797e83195b 3a10a96251e93866114b9f65a7b523aa24eeb101
-b77a2a10273d095f383926d329269ed61266e4b6 e7371e710a38967790a091438fbc22470e13edba
-fc18ead6c06fd97f441049413901db08e6056a65 565ab0263cff7cccc785d3dcf6c2acb4e3582f76
-0061a5be98f4b4410a7ab64c456247e38d79be80 6406e3e6f5ceaefaf401b1976dd36af8ae577429
-a0b305b74dfa7d64dafe9ba9aedc01ec661622bb 2eb95f8d4543780ced3ddf0d2c03af4286aa63be
-8a5647b7c96871ac5d84f9cce43cb57af22ad83e a17694694e122d6dad636f90ed4367763d9df257
-5effa8480cef96f7efcf454a79897319a4524850 9041adc8d8306571d72fdca76ba8e297b10e5454
-5baf734e3a603a6c1f3959d9e1ba316a7a771dd5 0838ecbef3242e277a1610087bfe81f047c74fc7
-ac97ef69d237151664d44d468c3dbc64241194a9 9a1ea9274cb1b3f4fe96fd59f6e35e37b36991c5
-68feae2ef00a97624f78a0c5c609558f8010ce46 5ae440d06b294950aaeb3a8c1ce410e042533cc2
-7d0729f73400b3dd9731a32fcb99e82e9b3cec90 b9bd6bf91f298bed84298108c9a82235808bc828
-30cfc48b72faaae11eaff2db37ee53b9d0ef80d6 fdd9aad635ce61107aa145e4faf19d7dd77b6819
-4c8b2df4d6f11de24cdde24a722a03b788985740 dfef24736a3ff9b4a781629ec786cbc54c14a8f6
-f00dee7f87a42e0389c16a70b5f1d98ed067c43b 0ce03e805504837fe8439dbe29305e3540dca094
-03141c014c6e6b15cf23be42622e8951822dd15b 14125d821ec1045cc79154b4f7c67e25c9e410b6
-ef7257e1b0f14198c0ba0035af38b3d153538536 d8ee282f23e128cf930c057c0127ee309ead9891
-54c34b151af3982f34a86937530b7a131e085b9f f0985d6edd1b015859e0cee13462a859b3818202
-bdd63088c0c3ffa4a6baaaa43802452f6081c2ea d967a37c334d98ea89f0b138de2c11815cdd7cf8
-7ef7d78b024403d2e9adb9b90dea6df0a77a40a2 52b57679e2c245dafce5ac2f84ff0f3b60ba7af7
-c13cb69c2ee64881857518ebc211c4c8a5e081df 069925484cbf6dcc5fbbc041aae9cd2971a50a19
-a99836f5ef397452038d1e845330c69576f1cf61 19fb995d4fe1e7a2daf07daefbc208ce80173981
-7f3563bcb3eea87c44bc3573c1052524ef2c1b7c 05bd31d835fbd7301b6af0114d828e0bde243634
-fb506035987150da9dcb9e3d2195eb239d9c47aa 47415901a0d01446d98177c3cc5b1a87deadff15
-e22f19299376c1488e77611f51e6a9f854e7dfb0 b9622b07aea789116f1862d45b12453d51661157
-a4b4ffb88c588e43417f8cc8fc80aa144ec7e27c 069925484cbf6dcc5fbbc041aae9cd2971a50a19
-69055c8e87a9f51314651cb6385faf81e8efdce1 b9622b07aea789116f1862d45b12453d51661157
-04328d5105f2dbab78a97b8d48c57e6eb00aeb2e 5a91fc3c09680db1be4ba137979dd76fdb52018c
-9d9b93456f6d1eb0aa4ff0a9cf8576f70450e18e e7ef5e373381000e0f465dd2f76c505372649024
-040ab4c5c33f2a02994271bdbbb2ce2b62f3bb37 e7ef5e373381000e0f465dd2f76c505372649024
-f1c1c04d0e08411308fbae6f6453dc4e72d6ae88 be441a213c9bda32ca68613549927f5becc639c6
-dfe2ee40ec8a9aea1c4a42643165252561d6869a dc3ce998bd93fcf08efd88fbe01c44dd66bd0424
-f988346aa6a5f86d4b2966cb5c12fa958994a1f0 c87625fd6397217238cc40f2a95bcb67aba40df2
-464996db92b4edc8f454cd196ed912e2dbeef17e ff38e8213b0fa9298973f877df7f6acc37dd4e82
-300163b2f81da5f7f8dced64a6a8104ceb2c7c5d e3d8c70dff9ef51327085ded526e9d2621b75228
-d0a7cf5f623e6d8c5bad3d47fa280fa51e2745e2 e5747297eca2b0da3bc30c85468edc81c2b22eca
-e3f9e1e277cdda1042315f97ed2b6ffd3bf49e8d 8fa8edc0f9cbfe809ef712cf24d3a19afc4dc246
-64d87e31395ddfee24407c2f5e1ad93c1720e1ad fe0be775890bb0916537905045ca44bb8e7bbe11
-74e1c7fcd8091c6ef9f759d32c06b9d1074cece6 fe0be775890bb0916537905045ca44bb8e7bbe11
-0c15a4540eb6fb94a81231144e12bcc06e263ee9 c87ec4e8da4f9797d2679c6de1303cb0a247b00b
-f153750169adfc1096a05c6424491b85eac6e306 be66c7d25eb64157dd4bd9b2f49540bae4fa3ab1
-a33372ae1939de387d27b68f53c04cc185d7b52d a1649e088e3a12b2ea92e78d97a6441346f9b156
-98110e955681b0aae3905690b4d3246c4d1a5c01 3d7123c0be970a9deaa59f1a3c7f4ae5e097b114
-2a488aba455a031fb463fb688969e513caba87ac 7aacc57437473ce4e74a43dd14ae8d94821127a4
-871947475dc6eb28ddec5982d754cfa5dde88570 983a9c7aa0625921a0186885c5c7ed5f8e0a394b
-1f69d381c83a862f4215c044e74a8ce10b4d962f 6d1ba6f1961128f2e3ab29889118ce0daf0c923b
-364fde49360a306767043d129173e6dbc3c064ae f816a2651367c7aa85cb599d3a45b7283cbbbf04
-83292507a15aad69bda16195d3cc80984506e38e 552106084fd83135f63994b809a0fafdc2e570fb
-26cdec82523b8a2821672849e42f10ebc405a44d 167b4eda28026258904dd4d5a89e671bc11ac3a7
-525f9ec2dce3c6b4d63873f7ef8d1281063d63fb c3d56d20872239f08c9b152e58f20d1f37670ec4
-17ec348f315a33584ff051df540f00f0a305d1b3 02336b7adf2b7cfe63ce1802d24523a9eb2225ba
-15b47afabb35756b6135d17aaddeebc47b626533 4a9aba7f6ada2529b5b175e4c318e7c0a049d2a1
-57bda785567d065a0a37253c0b690e4c1726f3dd 4a9aba7f6ada2529b5b175e4c318e7c0a049d2a1
-e749e66ade26e848672880c14ea32105e2d2cdfe ebed865055bf008a99a25c849f45f4d7c828d7cb
-1005a583ad35afc7d0544c5db8cab2a4967eacb8 d0f6c76cc987b69b5c3f0ccb11244e4472e7035f
-794afa0e5eb0a39e4edf276d172ef122817e72f7 ef1003a4da556662f25db679067741946ab8e677
-7e2a4d8c8f44fe8dadd23594f7a1f4d6cbdd7b16 4b527cfd145bac3b19ef3195d72d64b9819088ed
-ebae12ba3641e3a93f9278edc790205879d0bb46 63e841fe074bef528f969e3b0f9aaaf125f3c93a
-8c175949d5b4656011c9e9c97d34123dcb48a341 5d8e91b939d007ce042f1f5b1303ea7571b2ce93
-df3bcefbd170f11dc796a71c69d2c8800441f6e5 4561a93d53b0d4a558bb0a9eca41eaa670dbbc6d
-392b353926f9461baa513dba98d05ae51938d560 869b12002a52168fdc6b4ad4ca83d4edcd9f6f7f
-de8c799d4745a0b14d9b9e6ac4c17ed47d836220 ef68840a4e18c12dc58fa5d6f159f494b4f1c6e5
-418ab355a70f8a26ef522dc1c14a4e582b46b007 9a772f3d30b4e472ab07840b721b22295fe1f55c
-e91dd14ac221a8078a2359d1be1faec4ff84815e 7c491792c3f11eac197d935c67188e5727189aee
-dd8d8588b48847cd1fc021a447d11e1e9eb0dffd 9aeeba846640dc48e96804e4157c196f021787bf
-d3761f048d531f915a25d359eaddeb03e29c3971 cf7fa7f40862f9d38e4d60bc0f47c0d29697d70e
-4f88b0658fff091d0eeb43bbcb2c8c4843012b81 142cb5865801dec1f7f931a01149e455b6515d69
-c19a4f2de6f37e79d5f14164b4251f8d26294989 e911892ec0c73032579e7f8c159cf41889139b2f
-114854e21a9b56dfb2075b99b87d77753dcfcfdc 4c3c03ebf0560e5e1dd589aba39a19e664946391
-cc69a130086bec6f4b171c205c1cb80209208e19 3d7c4d3b78f4ce77f587648f2fde00330359392d
-2e3f35b070caf09a6dac78a9cf210523d57de30a ca95b1cc73831c47360b6ce16f00c177a4512c32
-01ea48f92796da5794d9c2856e1d585df95abf3b ed7528f477a4dbe6e730dde40776a45ffb5fdc36
-e949e24d616c97621f0c09a2d0a79eba86a04859 727fb2b5d8eb6f59494282e2d810b9bc7c5fc139
-bc8faaef8629708c94b76a0ff574f6eea096bb8b e988c27e9799793d776bfb7a9ff0cc5bb51a3eda
-e985829241a3aef0f7f9176d4b417e9e5b2d8f65 17d0dbe450878ce4156ff0bcc8154624875ab503
-27a566e752149e8361642145ff47969d3a650973 eefc5cc5075488b13e010449d0035242e7be807e
-d6487abd595c0efb7dfc0216578bb82dcfde85d4 1feb4986ece9d70136893ecbc9d37451e836f07d
-7e0699e61c3f3b442552d8b0b3f37ec6b74dbbdb 41ffad21515dab5bc7f7c8f3ce0201ba2c97516c
-2ee04d16276916d6102bd8caa2b667f7e1b7ba98 aab00656d98f544484df05fbf4cfc80d126bfad9
-3e365ad1981b16232a48cf99d63d2cc90ca27141 ec5fa7c68e11ead89a131cd751d6c618cb41d27b
-314a3ab7ede3db80c29094d9721901dc0cb75e25 c0fdb30fe486a88bfc1ffa04e0bde3ce73f4d566
-4ade036155bb1dc1bf5b9ffb4a5b7668301b03cb bc6085a58df4c1e0324e94d7a385ddc4b2ce015e
-b5a9f0265f4d7ea1eb6fe12913290907792a5a4f 17f77710977cc29c6d17893b051bc9a600626ae5
-b799bed70c3ad2980a81ea43627d7d473cd1b194 a780793c3970d04c0e95da8734ffe33db4c71faa
-edf84c4eef84cd6dfcff22979ed2c47ad0373e07 f5e627eff4b990eaced18623a100a4fe336adde6
-4f39fea55c74a3e0139ca0da4861d4805df81642 57e5e657fef26cf5ce2d10c4f53667b8f0f50208
-fec93031db62ba29fcd07eafafa2b6e258b06a56 9d5ab0618e054fa62a49b3a7260aaa99d99ebbb5
-84f33cea8d4c1de403d582173bda3f14c7dde52e 8bfab46157580badf9806b21063c745a582b3b83
-0644d44aa83c38b73162789ac58fe75837f766da ef1003a4da556662f25db679067741946ab8e677
-b08dfeaf9d722149ebd392bc5495edfb43dc678e b9af0fdb462f77ca9c0de398b9b76dd1179c0659
-cd372f9af800cdc099bed9a328fa9781660d40a6 5b042b5710ce9ca18bb5825babb870fa4b0d4aa5
-d7b10ec88802051baed21b21b14d47074992e4f0 2242437a9499741eacafd275f706b2726d2de837
-3556f25c1a99f2c5a67a5b3ecaca27129ac65c98 4e59c7e564a3538e0ce19a42591747275f6909bf
-a6b3ad6d43b93e8c533e30338098f338896d2631 7a44442ff57e7aab82b1ed6546de48558bb752ca
-c402779121585d0fd5f22397765363b69ad23d6e 55be2dcbe7f79b699af0494008eabd299433e3f0
-23f29fd5c611fae31ba329042e98edce9c47fec4 a3a9e5b14e3542020820b8423a8662404f95e6b8
-1f3c1443d4b44fcf45c43b80b871c2fb89e6cb9a d6da8ad238c5529c86d4ff3ae25586aa39693b24
-6ff61053ba621e9412b296411ac36418d0f70e8f 445d0f42ad677a2d765c1f57a2fd0bd5ee0619ea
-b81914b6488e7f505eab82e04bf9aa962d73c67d fe59e2e6cf75bb968f2799fdc3106cfc6f575e0b
-06af8e15a90c944223dad77932dbbc800b898ead 3cdb05dab8b554d9f381d3e6323f80c00ce36a26
-7fb9755552228bd8fe01e3aab09999be989ffc22 e1c8e542795eff8a3fb2a899974250768a98d8a3
-fcd219f9f88362657aab81b85a7a662b84ca8d97 5fbcf65cc463ef0fdffa9b4a5e952517504e52af
-3b8469c14e6c313fdfec95cc4b0004eed1db24f2 23cd572cc8e05b8442b67e2bbe2a586cb79e4c02
-fce2d4f9dc1ae8d019f7dd2e0e4ca1f2ce27db60 f769cb4e16cb2a4743cea755272c0708a3d817a0
-8b888c0348f79cb917cef59b46f49acdfe425f7b 80c425fd8ba1c5960d72714b47d0573661f00211
-aea8e85520224521fca738d097a5b1436ee880f0 3f875117420d7601d0f27eeeef963edc1d4eb69b
-81a1631032c5ab748a1d27469003d75e490df23f 13c9ae10ff8b109566cc282e0f4c35ae2dec7864
-8bb66cc4b8d747ea2e0ea0d602f00dd3199397e2 823731fb3798970285875975efda688454763a6c
-e5e8166dfdb9886ae11b97829efbaf940e512c37 d93ef5a615edf5e4e434fa63ad629f0de4a6e4ab
-fc54dc0bf6605e3fb515101281b3c010bfabe61b 0a587c0dd9b8c77da9b0f67b12f2431af136c2bd
-004efcb6bfe4fcbce8847eaad803a953733b82f4 621839fd11effa7083cb4982496b2acbc23ea0dc
-4bddba942c47cee2f2d87d0fb8de3d602d89c3c7 29e397cb9c790bcd9e788a01cca694bb4ea27b13
-ed54b051097dce004f74842445d0cee41d19d2ad c249260939ef6a6187781fde24304f76c04feefa
-7b80e9a76aae8a9e95eab731485b01a318ec0a4b d07cc5be8d75d5856f0f04ab33cce1d6387b94d0
-51974a4315f578b55bc9c0535a7a21f6a2f7e54d d07cc5be8d75d5856f0f04ab33cce1d6387b94d0
-c596f57c820f29150277f43e6ce84532fc57569a d07cc5be8d75d5856f0f04ab33cce1d6387b94d0
-e9419ad5f0e10e71844b1f274630b79359d8a9f0 09a2a15fdeb5713fb4c23749aca7ddf8d948544f
-3900b0178f4bca8e127929d03cf6009e3920dd87 b2ddba8058dac6b1bdd8470ef5593b8c6fc08ac6
-8c4c26009042d70d321d2a76d5fce4d6f55aa923 760aa224c88e029305c0e2e4bd028210db879a4b
-05417dea4e8417b718b74bbfd077cae51b330e7a 78f9acc289d640ab90aeebcab647c7c20b186e49
-aa872090de8bea0f31ad365ec7e620e4aec7eeaa bcfd1468d242367bb922ca2d93bd34de88b43c2f
-de3fab7e3b2f456d58f90b28d5db742aa9cb5cb2 1daeab9ade6accbd0628a2ac58f884561d7bedaf
-4fe3563db1f6a2235ad622324f07f777f40a7424 36b65e27482b91a5e801a75ea50e4846605ebb6a
-b437159a401000907c7681dcaf52420563c17f38 30f279bdd1a8598dcfaea6c60096067e2e98e05e
-b30b5cd43285b11bdf67278cd77547a88e8ddf65 20709399c81b85734cb78fcede744637be1b294e
-d3f0f4f33c7a149b7edd1253d666dd96562354a5 86b1edc9e6ad4c33842ddcc56315d278d187a1c7
-000cec8d70105b844198b95ac30ae710a77270b8 4c5a22c7c795065cc48d2c33ac3d8ebdf99be22e
-a1b885cf6855b32715b4f8bdb6fc2c8a6d7f8fbf 44177406b157d576817ae122e1822eca76ab9ca9
-ae37e18a400968cefd729b11bcc151efda2755c0 2c4be237ebd9e7acb8c925a335da6ca074bebd6a
-aa8272ae22978a07aa54734116d14598aa96eb08 5bbe22b9e05083c321f26cf742a664c852f08de6
-58607c39475cb579c601cc6c48a819586b06d84c 44979e477be126f1c6595e7f1b7709a832df7f97
-26871471d56f8eda24b5bde70f20a9ae0051edcc 07182b4de263444c2bf5bb7c99c84e2bb9cd1997
-4469678029bf76a7c5781e87ee445da9cba54d39 dca44140271dc6980c381be157eb3e5af3cc03dd
-11c64e1b78c0f5c62d94cf0804f69fa48de050d7 48a9a985396b54371ffd594249a17d9bc30fe602
-1d4529b6bad4a78e3da13a2e9ce72a93a30f1f08 28763e81300a7b8c5fb0c1ae4bb59b02cfd49c65
-6fbf2b0cc85481d85eba7697851402fb804133f4 1f78bb274d7940cf0beeb707e2efeee7466bfe9b
-8e96c4dc684e2d13d4e8e5aeeb01df29563ab82f aea5507d5997dce1a1c46879b8d88ff5a395ff60
-88be541f3db5ea477906e7619844040b6cf7889b 9a2776020f0c6852c3b7fea7b5cecf3b9cc482aa
-c10c7451e1906a973532dea8ae75cbd7e81493bd 0b0ca60f8cb973afcab66f022370fcd709fecac3
-d9ebe838b16116698b92795e3fa93b590d94944e c2318cc214da2ffd3f6f1c0197debe5c5216b2de
-88b4a7849d76d207508922d19059c021db86f59e f92d07f5e105541887337514a243fb41101094f8
-465272b0876ebb7340a5d8eb837cb444e8c06fcf be2ef9ac3bbdd91e7ae6b1a56040e38cc3d40456
-0877e7ad67f53a5c8066a78d47000382e0094b03 7e975130398aa8f44a7aa5a94544781f639028fa
-7344513e3bd088d0cac50f71878c883a4a756023 d5abc0d6c2f9ea77d7f28f3015d48e52888aa28a
-dc98399072cde03a200469dc4cafc257cae2b3e1 777cf8a3dc3ca5fa2844d60b7a6a5deec876f5d5
-8138eaa7eb91f93520130f1ff60242381f36d59d 37e6e8a891afa6b9832fb9fc43ed12c287923280
-c862e44bb4b3d03843407366ee844432b26b304a baf1f1f33f3287664687758b56ed3709a8e05e76
-13626d8449fb073bdc6297b30b1c6653d40fa835 fc9eb26f0d018e839b325b144cb52acc484a8868
-32d66a0bbc9c8a8fb891ea094dc5753f4b554f32 35998757bc54d5dd8fd35e293ac62c87842f852b
-6d7b2978c7801fe7d3931faef5a244040ff08229 8817b5acad2f3d5c1ac9f68fac3d5b3d33c4a742
-a9836b9ebe90712ec8268adba960bc91a37ff451 b9dac31dfa5a623f51b9d030535a67a22df59ddb
-3831f745633e776b509003faee1c655f56f29e72 029dc5afd76c9e3efa4df37ff0cc7b111cc28c4c
-a985e500c204ac901e90012136002bdf55a7bc25 0b4fdabbfb13ec5e13ea9d9293240cbe6295e8d3
-f1ba73e00e5c1835d1247b674690c050936cc780 3f237fbcbfb081ec8bb8c7d741303f6edde104dd
-accb709cf5ff7d481299024a0afb54a1845319ea f99a0dcd8e2232071bdea9949126223d3cb7328f
-d7661fabf544c76aa329067f63d2d02e6c74f265 1e08fbdae45739a066b452e8a6a026c9b1668db0
-803ec796295812fdcf06ad1cdd85370e517d5de8 b3a62ecb9176101133114469af020762e3253173
-3b711b695789053b0877df263a50d9b2618e45aa fd40a5b84f3dc9f18d0a65ed6165aa72bc97664e
-a1b3bb68c3d2b47ba6483dcc3f309a4da220c516 73ec22da3e3901eec5881787c70a34912d21482b
-edd8f22f1359fcdb8e2b14e3488ae9c7016ebc6a 1de3d52f839886737c73d9133e93dcd56cde8fa1
-880ca65972de5a08f1dacef5f7d40089fa7e9363 8863dfb9edf5d761de36c748e4dfaf7f2cfd1211
-f717e13ad589c5951accba5ec3e34c6dd78393a1 53c458e2cf81da3d40c6958a853cb65b1eb26046
-51d27304fd0c7ac62cc0c87046b76ed4a16c5a5e b0a0e2ae58b97d380102d15954c7e1f05e0c0154
-3c6fc63b187cff55fbe89f000c78f684576e931f 024df9b674a0714de3cd0ca0b1f37c19ea4aec88
-e424cb37d80ffba8b1f0aa74347b8e8323a30767 2f2c02a930afa85abfdbeabb8ddc6d347cb12769
-a7c06f0b80ee8b5a6a442386b303c5a85fb64ce4 0327bba84cd121312bbf313ca2d8405e38fac98f
-c58fcd477caf3e435c3a3b66ff3e6bf83b853eec 6d36281ffd08d59d7ee7e1999a03ef8ab150a2ff
-e811bf9216a7be73caebb51d6870f4dfd6c98fbb 01b907e6d573f057403fc45b9ef8a9fa875629a2
-7aec2c523e41b48f8c0f3c4569a0f9a0656e0400 6367116a91ceec0b75d13cce2c91656f1d551a37
-a801af3728eeb1d2bde9d23a5f604379af81b074 2417e91b7a184e48c97613dcd52683e465cc443e
-942329a13e407fbde415b957b2dbbce8e684b473 92d9aceea9249b61a3a08aa125a9a7138d7b804a
-af42810b946cd0494ba899da4023715776a99ea6 f96f88b87539feb6ffb935b696ed5906b1b9640a
-25413b98699b0edd9f4e866a781cdc845e901b2c d393d7448346bda27c25aa1253e9d86ca2b98f5e
-9220bedf3758e9666f727b39815027b42ca2d9c6 3d39a1d5a43838a50f5c3b4d3bdb71d99d81971f
-d7c7df714203aa73a64625097d98b9b4c7639b85 9a83ca5942561f59215e896510dcf3e28c027e62
-192a3ac13b16781f77bed1301dd819a2920fe70d 5b2128c7d0af6303107044fccb5691ad105ee3f3
-0cb9fe5e307b1ccb87ef8f678994645e3088df1b 329436bf1c93ad24aa8b2e7c63332e6dc15618f6
-ceb4e14691b5f1f72133cbe9f1f2d3476b4edd65 65868ad97127edb4006af52d59b96d49478328e2
-a0c669becb718398ef98bc883286999ea0cc6f3f c1fbd21bbc423608aa58b8b819ce1e5cc3b5d2fc
-05ca808864f4ee8ef03477b91b4748913ea50cfc c1866833816b4f201d332447ca9e29e51ca5f032
-dc898775784361f4a27ef64dfbf00b496263297f 19a4bfab5660435de98a77b415d42c33d1932340
-c936cf1575cf74b8a068a722a8ffe35d69cd42c4 3070d9b38eac51d0db0b842dbe4565126b3ab7be
-605f8b7e9596d26c3c8a45ca9444e8ad283860e2 3070d9b38eac51d0db0b842dbe4565126b3ab7be
-685daf3376e143bdbed9f7ecc498efbba21c8b4b 3070d9b38eac51d0db0b842dbe4565126b3ab7be
-0796739d2229af54607f5df7e3a0649f310b081a 81c8d5909c42e85a01beac83e366b02c7636fdae
-0e93e6cd415e7e89af5a1dd359affa1bb4d1ea28 81c8d5909c42e85a01beac83e366b02c7636fdae
-604d8811ac2949c93101194d78cc464d98f80ea8 0b9b912a0ed4a006d371ae5caf3dfb324c6b65a2
-99c38340b5c90021759b1b15cb514860aba6305e 6831d36b5fa6dfd73b3c52073f13e35f9ccaae66
-fb98cd2348adce6de730d0020e32dd234053effe b8c110eb872dbcf13ad547e43c05cf9d9187c6bc
-b344b8ddaf2612847786ef80da3ad9bb31cd850b 6831d36b5fa6dfd73b3c52073f13e35f9ccaae66
-1c5c7af7903eee6a3f90acf10fea2a3c8651700e b8c110eb872dbcf13ad547e43c05cf9d9187c6bc
-76f241cdd97b089867712842e7d39c092540da5e 63c8973285ad166010d70fa31cd61518b2c4b314
-74eb52fc7c7303452abcf4ad498c2f4912823343 a10b99641552cff03bdb7bd276ac6aa978fb35fb
-a8ae99379666497002484e39cdb29d0e7a72004e 28b31f38296e877840b4c791972d929719d245b8
-1176fba44c4f6fd950bc00085671061587270640 28b31f38296e877840b4c791972d929719d245b8
-8d79a2b37455582d04c04f14282e1b7aa67e9694 9d0495289862ec6cd169c5af3bed4493cf88f058
-3d83d485754c4068eba69a9c9f6f7a38e32774eb cfa29657731d5e8aecf92fdfd879850307574a1c
-c6270c59543488420d0c0523156c9d99e7f157b7 dddf0eff06ab2ba521a5bebd61bd4a70f57f2188
-bc0b3aca9b6f4b1ac96a248f3a904630c802b476 375024e1a41acc9ec383e4408800ee59f2a91ae1
-b30e4d3341dd4c7ac33ff31e78370c35bbb2b794 3790a89a8e0d2e84d2340ca4cfd3e2c23b90dbcb
-859b4f348010621f8f6d5ff747a66768ddaeed53 3790a89a8e0d2e84d2340ca4cfd3e2c23b90dbcb
-2a9e2e0b8796f9d6311c5a40c4dbaec493119eb9 ee1d6fabd15d48a19094966440773a1b7cc13a14
-1a69deddb2f293070bd896a70717d0f0fa677ca0 79e91053847938dbd4345f001fe328c9805d9042
-633080fdf6886cdae01db1d646847ec8f6ae99a3 7cf8aabf3eb3aa6f0d269398af56fe9880d6b859
-403d3ce461e1b85e63890f78f25d015efce38071 7cf8aabf3eb3aa6f0d269398af56fe9880d6b859
-77d76844cf8b863b5afecdc76712f91d8e192808 7cf8aabf3eb3aa6f0d269398af56fe9880d6b859
-165f6d7e0c56974d5ee06bbe516cc4d8e03ba3e9 50e0fa714817774ecf437793d774bc8dd7526574
-63b489781f9d03948ca99df06ceacd6767c080cf 1f05e3c5e49772c71cb3c8ce3501ad5b6ae974c3
-7a34e16a6f3b9dec6e0afa1fd95dd5cf4c35aa5c 0a368688dc9f11952ea35c7ffa5368da30b2c81e
-79778ecd5a86377b6ac4b2386e3508219c023261 db9a110042b37b2b6c1719cc6001b2ace8d40eb7
-6334badac44319f2625ef363a50f4ba5cb914869 a85e6c0f049348281539f34d781831e330f006c1
-874c3e548fcebd07f8df0cfe1001a8f380ecdbea cf1c6e313847b96d434bcc08b1c9e220b01821f3
-27bf2c0281f9842be8e385581d2ba0f077efbd46 f6477903e003c25c018f67a76f0ba2d9869bb29e
-e68934937e9e3fa46fb5b66db666c944525c8516 cc7c21e602d6a75866e7b280a6a6b2899a1eeb3c
-02e5e2d4b9347f94163dd790cf8e0ff27d16b9b4 6e7ed6e251351e9b1db177648f185bdfa1415aeb
-de0733ab45566a2ce1fad5964a7775a7689f8ebb d3c6949ffd953ae9e71285939696e7bd62280a18
-d1dce52e91e75e32d6220929f1d2dd64e90f4c2b 1065881a68e0f0bdafdec03ac7cc59a37ed04421
-895e60b6a95c04b0497339b10da60f4ce5119a06 db5e2744a0d619af9b3876946a1e04ed49c1eead
-60ae80b9711b3bd44b7d40a705b586e35d453f39 1f6947ad260b71a89d116ac7b72017ea1c401cf8
-df1915abbab73c8495c83ce95862fd8baaf292e9 644a22a1caeaaff7e8df9f1487c7fedf60e5260b
-90b3aafaf6461da7caec088570250fe1988443f4 ebc31d5605b00213ce57946aec19c19dac442cfe
-c91eea2e9c7bcb70f1d7355c13c5fb65d14f6bbd 55b48a3e0324a008bee8cc0691183e25ed7985fa
-6c0e577aba1ecadd16bbf4d1cd4f6f5421c57c57 31aa41828a58d4c93ec74200b98820e74914e30c
-dd26ef37a0eb2221a4d1e24c57c9f9dd4b58d612 e2d475332b2e5e2aa055903f5a98b578a45e1739
-0f494a1316e7b660525641e1d25b432961bf2a54 7e5a225af7edfbdd367bc135eca91dc8532bd431
-5e2c4f196bb1dc63f20ff3e55553da4886519f47 e20da68edb60cd618dbb08194545e85b4e42fd6b
-f76461fd4156af34b46cbe218b9a60c08b0c2fd6 bddb1e48feb12b6c02a1191670515e1f2fea035e
-29f3281adea8262986c5ed46a6fa31e4ff3636d1 30386e03bdb47665fcdf837d24449e0dfe606c08
-d3a94cbc18a01aa67089fd33007c5febb4e7bb79 49a474d64dc1446b0a285f4006ca48d35e9d7f70
-d9a91ca983770647d0a2ef95f6014bf9a3cb965d f0a0533bb9e435bb2195f8b10000170936927375
-87779fbf4b3d38036be991be38e1d89ee0e63485 1d192598a3bbfa0fb6d804a5139767cbfdae5d85
-a621c274ea85333f3d0a092fe3319864d739f13b 32de2380ab2f290c1a9da23d79604b5329d82e61
-f3c455a8b499c36b116a625381b70279be825a56 98ace0a12368ac6df9bc361ed6aa9d5820d51607
-f323c17cdc69ea8b38c3773f5bef67d6363d5fe0 013278cee2b733bafc6b2d7ddd9d7e329a9ca3d6
-712dfad3821983ac079273eb364cb4ebf6ef99a1 73b03eb75cd69628eb10c67fca49c5e52c87ebdd
-10cb1ce27a16e439b8c229e122a6f47a9d6217eb 1242833b9effcf8f19948a4430645e7c820f2fee
-67f66365452729e86be9d0f8d06d728a6d6a0407 e78c39104c0fddbaf5c8262f14e52ed578efe664
-72841b98ba62b5b7bcd9ae1e537a30a139077699 ca10694d89aa6844c3982a5602955e874c5eec26
-6a9472e06b30bf1df8abc68903595373a7b83350 cff664fb0715bac346d76d50078acb65d90a6864
-0b12a401109716f363bf83cb9342b9f68e914da4 cf4bb19d84ec0eea5ab2172f86f4c52df3473d4e
-87e0b4be34f9f20ebbb2eb821e0d57898aee5a08 181c966dc139efd5a93352717e179883e3c0070c
-b79d6af376e6a080ca2e4ddb43360188db49a87b c8119154f5b7ccf4129c83778f19f5fc89ecc94e
-55f5254646ace7820b85440cf2d5feb0cd00190a 88e4b68233972fc65112193b7e2b22651b095e13
-6bf5369b277c21af90c2c3c2cf9eec73c2ca7858 938268e04496a94982c8240c28dd5c53d5e6725b
-46125b578c01dd39fefa9de2e22ab2584cc8afab 03ad550fa191ae7a1a3a7bcb4adeb7359f072a53
-4fe03c4f593e3f74290dbf1c66c7acfc65ac9c8b 257cafcabde3e83fbee46b2fa0fd2ef3d915063a
-9e4b027bd8678d75924b25b24db22246925e8338 80353b37a851f3de827d964e29181073920b4700
-64440f55cb78eeebd928b71f0c9a54b44f2a2856 2f4d0ec69e909311c02e01cdfd924c49ec2667e5
-8fca935938cd11d7d63bc3d7a6e97fbca67e9174 98695b4ead98efc37d1da29066ede4e6d826d674
-f1ae53004ddac2931464cfd6e105bfe5c9ef9179 d70eec73d60fca62cead2cec18526452d331e75f
-b8faf1ba90a3a9936ceca0b619f3454ad5e374b7 94d7760ae30f34dcc4794933bc12cbff6a8b8bfc
-15767be1275165f208b69ac0599138de19d1c478 3cd8c100d8bbbe71612af33ae77352badf13f66b
-864c1a1314cffb30cb78d12af9a495a87feea96d ec24056232a994d1d60accb1aa908058cd589f03
-9af11ae8f39294885d1d5ce1e9c7bbbc4d6ac259 0b052b1ff5d35c70ec03297869172a53c882c5c2
-2f2487cf7fe6bb8a6ef176a07a1aef8e4bb72455 c18d0af3247b6877e7e56eeaca3f0e73f96972ae
-9a69aa4080134c172c7f9c1867ebeba1b12f87e0 4594aec2d9a8db4d342faf167c30dc712158a255
-a4a1c8a2adf55a5987a60de703e4f2d3ceb01a80 991f075447be73d166cbdcc207472f0138eee3d7
-57c7195c983cc09f106049c01d579be69f8fbd1e e1f24f309f2d516f8b2a596948166956aa1644ac
-2018be0de0cec5236674ce86f1692bd37e0efe0d 40bd518acf9024997c15f61ededd152fd53c565e
-5157d74efebee512011a8ccbb87d0581231ac812 2b65d5c0620712e559d28f864c6977e4731dcc20
-9e6b785017db38fa9f510d5756ce59aaa92c5636 a155fb46f209ec7f470be6e87ec986dc4af07bcf
-2bf8d9bca8ab745c6c7e774ed4f6e784d98c674e fa8c62a8c5bee4654983484e1ee2282a2866a669
-416dd6236f2e88660b0b8e0455ac120347a46146 038c41ba3f20c9d0ac0507f5c847c667aa01c7f9
-b45b49d1adecdc3f669ae4c19f9ae54645a6d01a f97ec1ece214351a992a1a9f8dd4c8208f76db45
-2bd82c094a504a88f10c0971265424ceeca277c1 1ffb2f9119409ab848495c469dd150084072b3e9
-ff6866825fa0c4afb047749e4d406dfcc764c504 d9b0874cb324dacecf29a6c3d5cd6f264a80601a
-ebc9df03e8938cd924d7abcc47142b43c8500297 4cd97490d1f7e468e20b4c486b57264fbe5d0914
-5ad9a5d9217380b50cbdff8b941e094ab8538432 92b2a3bc57c7d1327ac8bad3f8c35019c31a5d11
-184b73f0ba1eca7afd17fe954d0eafe4394c33d5 b22a4c6b84ea7c006fab5b292d64ac9148312445
-3052bea7198485156f0e9db06c70450d34863055 0968d31769637131241ebaa25b2c5516acf7cffd
-e9b31e81dc3aa4da78d05d4a74b18ee988fd5765 77703f2481844b1ab232b0739e8dbf6133333beb
-85e89c08f8365f3a9bd0312aeedcac8dc6a30ff6 76c0b81785c0d920133e64b38974826112b45e54
-d6653155e5692c10e4e6e441e63fe42b1bea19ad 8a96274e4b796250d4211e225d9dfca586862392
-0d9c049067aa261692047810dd80dfc0995c247a da8031bea616beb73bed9458dcc6c3d28ce67991
-d6b2906a433536b61b7b661277b7118194accdda c849a9e98694fa2db7ae9ede4baed3caccfcf888
-42f15561bc6fdfe278c68b49ffbcf7d3db881b29 81d65e152eae5e163ff7e594c3a4bdf8db51b931
-3abc67c1323a9b31ac007a7ff82a4e13a7bdb4f0 43514d2b474da50cd608391798ea52742339e30d
-18b680f4fb57247d89258dd672230b2eb91d3341 5297ec057fcc70ef7c8fcf15d4b626fd509d43c6
-2f275bdc47002d21a7bf9faa340a76093926f8a8 73b25970c291cf02ddeb755fa9a43cdee5d3ee93
-87b8fcc6b9241b42fc39ccf190781dc8fa2ebaf6 f01abe8653627da4c989a4fe2d9fe3b26b6bff2e
-bbb0fac99ac6bdf2d8439d2ce5c042f57d50e7b5 b5e7bc633dd251743bcfae7282610454aad15ed3
-84895a882661d0f91ffa9c011e0f46ba73d2a41f 2bf2ec374b870846f335cb5a6077d5b70c790d58
-961721c51443c8d0f8d7b401e52cf17313667dbf c13cda33e15550351f7824588e75033a814e6de7
-40776c2d6a23051c547b9a8c7507083218945be8 c08baafd079504cc1598d4f30e22e9abcff9fdb0
-fe787640a0676bf32f63126def0942b9dd446fbb ca7116255018c5b5b9441ffc549babcc2285dd98
-e474aca3bfd9d6cb5db93ca5e40578dbae102614 57a4a7d69f5bddee0c8d9a749c130d38a39aa0de
-939083ae4d3227c482ba79c24e3963f4cb1f04ca 8250f703f545fa5a2df69513cd9bf1478d390bf8
-7adc0c00e608973458668e2eff6c10a928ee1d00 91c3a54dd3f133a4097ccb64616ac07c3e3361f1
-c746c97d07cdd850abdb0e5d53fa668874da711d c9cf317d95065aa5a7022b3c11be510df0985010
-b00f25d12182a9573beab2c2326b32393c0d5822 44f7168ae5896b1e405c5cf8ff0e5d19155ea06a
-4e190ec921fbba50322287e21773ae5551684091 b39fae0586442e71f448c9f67c675e9addc29391
-ac6b870c9bb57618f16c660a34abbda84a4b27ae aab0532683afa4f2d89cc2b1ebccb1162b977a00
-b3547ce79b85417fcda4d0c38b376c5ffb66dedb 460bc009371b965f1ff05284d0c0f27463d1c44f
-6263c85b05e241704785151b6511c1df00e6a1bd 19d2f0abcd235d48296c7746ac40e8c7abbfe8a6
-43e1c6776e4a2c6919d5db6b728e0212e144f123 4895364504ddfe152f33b7bac539bb987e39862a
-9a9796343b6381535969bb2ebc5546a0d6a25562 86a3063dc32b3e8a1424458f18d08d32dbc9892b
-b9deabeb9ebf157480f39e11a8f4e7eb5cafe487 135b8cafdf74da36be5c216ff1631ed91f8bffca
-96b0781bfa50629286dd40037409deaa66e30347 f6c8af117593f709809070040480b0cd0bc80eed
-3d026987d2a87ac57920563a54bd9b5cfb0d3fd1 4e7f8a83fd1079f1675855b3a7b65638a439d54d
-d85fc21d3e76e943a37cd57140585126b3ddcfe6 bb498bfc79b130cff51fd220e68102385fc6ac58
-f2684ce7b3f62bb3ef3ee0a9b69f1de9323f0d11 1b669dd10987af04046b7ea3e52e4f5a2bd62e42
-9e8602ba4ddac293c8fc0d886a0a2c307f58479f 49ad1d9598d80ce804537f16aa4cbdb803dac968
-645d770e19d3bcf0682835174e40d68e44c35147 49ad1d9598d80ce804537f16aa4cbdb803dac968
-e30dad1aaa647bfec1998ca25292d5791e58d90a 0f6b7eed5a9524224a0cd7034c53060e24f1c06b
-fcd17bda39331727f2ca6a4b7cdc1a934033ac40 3c905a4ac552e1eb3b305a62f082d23dacd4d9e8
-4b16ac1da2cd572597f21965cc6dbeaccf82e4b2 0e5e6678cb5cf09171280ad2681365f434a25c70
-998e28acfb30acbee4b5a82db46279b4e6012f76 86d1ddabe154dfd0befa806a3179f5cb53e0889b
-b8a012e0f91ba5dd704eb6bc8145167f823d03d4 cef3a093100581fbf78ad5e305221dcbba2d4336
-cde448b7cdd11a4c7f202413c9387ca0c11de0bf 46002088d9a4489e323b8d56131c680eaa21258c
-f6b4ba967812232774a03dabfd0e4d5856eb0391 46002088d9a4489e323b8d56131c680eaa21258c
-2686451ab9255d14d8e7d3e5eec9062b4f9e134a 46002088d9a4489e323b8d56131c680eaa21258c
-26490a724219cc5b71c96b29bcf507a55b2e4aec 04171d0aded707a92b2c6a4a55d043166d28c492
-34e358042d219e673865155567b188a7cd1bcdc0 490a06320da00938941ca0f144822a6ea98d4e82
-c9ae1f61e6c0af40e22d96758159bae7c1fb793a 4c501905598d62d03807adf9875130fb957c6542
-060da10c40176dad48902200f47b50ecfecd19b3 cef3a093100581fbf78ad5e305221dcbba2d4336
-a59d3121c2e0f037cd9ff43181f15c813ae2ed0f 47552345fa8d45bffa9a77b2b33ebd77824465fd
-353fb4ae483b9e47e116282363bf205768bcc764 7f4cb07a3504bfe0dc320ceb7493ba4760f6388d
-05d47d5cc515748d9c7450f9a0789e3d4fa210e1 3aebbe1e77f99c42a7c771da42b69975aac9f90d
-efe861f1a93990d66c5dcd4d0a26a375dcad2b40 9836f8415f058b0dd8ad89636800228a47a63765
-23f0f13abc8b2317d80f864b0f7ae2606ce1c665 98f81d16822ff5c2afe5254aba382d2c5c8f5c00
-0f8f5066fbb82ea4b8f5c6196d65f30d3c6dc7e5 6a60b2dff5c921f32eceeede1f10c80012b788dd
-47e297c77de231267a7fd43ab4a10aebf972181a f324591fd5473231dffc95540969640603c61fd3
-642d42b16903a339fbb08cd501a791cb28a5f428 198f7a5d992a0058804edbbab7a6a2a657e5c581
-7e3e6f84715399c05c8286905b8195e52fdc4f44 f3153f7c2a1e1184a72f780dc306077e9a057810
-4d4271e24d447c5504b0e994938d7398f13dbfac f9d362f146415476c809484d5309afd5476d1d8e
-d32fb25b2a2f046a5bece267949a2ff25cc222b0 7e001241902144f6f9050195acdb4b9a7c0f26be
-447986823a186934977563e49ee1c82cd4ef776e db89bed2dceb9d29bfef4892495dd52a31507414
-600666aa2e8194017708f0d084c6db0b5489ed90 e6a744405c96782e4f6c9e8a3fcdf210fba5057c
-2bbf934005f34157a1bedfd5e8a41e08579e9193 d619c387ffdfc413a725ccf1b054936dbb9537e3
-f8557451f9f06c71fafe817e2e2540ba60da0a5d 574f1c4d33b7fe02f78986a568a435f9b6f36205
-ab4347da36eedce7a5dadbf5acaad66c5f48a077 bba3b3b1412b0d9859586a3c901e00609959793f
-71bfcafcf657b3c583f07fefd822dafcbba6fdc0 ae912f10d08d9af17ceccf458489e4b67a40f35e
-da0017bb3703eff770618f2446c8c16fa2d34db4 57a04fdca1b60a678e5cacdaf90d3f0da7d742c2
-f69c68963ec79429dce5195855416f31ae5cdf4f 6dbdcc8a40ec3ed3cbaad25a2c3e672c84fd6da0
-e446a002644794a3f7ac1897aac9898ff0b1e7e6 8f885415d594efad85d26437417f98ce96a017ae
-fac03c5150c3149edc6644e26e2b62ca1d92838e 840d6a3e2e3a67310d2a0554bdade696fdb4c67c
-db156bef667e008a76d1c92c27c169400ff24270 0c6565990b02b14d49f00a187dedaa400353c4d4
-f94389adcd458aa75e2611b0011ea6f205788e1a c14eb0beba09edf4eb2a42affbac8837d494ef53
-4cc37c9b14876125c79dfa48b2d49a6e70545c78 6dd71d9417aa904f1fd3bde6b1b4f945e77a85a8
-dda3906a9a07a6a91d1d7fa19625a753b8366a5b 1e8a633519ac5002ed1e5801de3761bdc4dd8505
-c23e5f2ad051084f488ba0ee26ebbb5392945a18 bb79c069e215f2fa78362fcf36dad6c0988f260f
-afb2daad8f000b56dd72ccc110c8df1b6f65ed24 64af694b9c7345a41f841683afe3faab76b19ff6
-a3cfd0ab91c374ed7ed85e87859240837a54bf58 508b3ab606a33581f04a607ef18197ac216d6a9d
-fbabac36a68ca46e808e152d9f945087c9497c57 48370f10e754f70f36132be2fd65d727987303d1
-a596f4cc313383a7506e2333d0d744ebce931550 2426a8e3b900d42b283d5a04eae00a823aef463d
-058d96c1cf948f1ec899fbd07aabe0f118edf5dd 3c95518c55d590ee180d7c3e114de167a1c0a79d
-9ea5cc83949f74820a6433daec41949510e644ce b3174408ad5578df352bb5db6631245675f548bc
-ed180d84be43fd7d4ceea68e2753a078f5bd7255 a4d561324c4846a7a63ac55fa7c93bd07455d38c
-8640b2652c8c7ee4041e8525698b00828ae6bcfb 00ef4b45f676123922997b146369e501c2275699
-fb6c9a1cebfc6b3a1a51134a56c7814cfe3c93c9 909710ba4233a2d59cce255f44801e726eda530f
-2f4b18cc2bbf5d7c7414ac52430e60b52b91d08b 811c5606efec50862a084f09a9e9e68fb8f92de8
-63e942913ca22af593f69c113c7761af7e73b844 e7b2b3a7465634ffd1a9eb3fafcd15cf2914ccce
-bb3f8a4600881691558fae7ba9f2dd9c91928e82 516a60e98e2281beeb3e85e25c0e0f34e0ac3515
-e1a419843b774677459ef28571c8aeca58ebe9a3 b3174408ad5578df352bb5db6631245675f548bc
-daf8cf056977b8b6da87dff89638adc9558fc318 564ef621e85291b6f7fcb0dd27fa41f522d041a9
-af83ab0af01cf68cc05c6f2c84e93d98298cd1a5 9493d637cc0c15ee6bd094ecccb5c0532054d701
-85a4852e862a50d28f3dec2b4907956ad7bf1d60 8778d25a9d34e61d39df574b4553b325c7d68d35
-0dba54344782504a093ca081fe5b67d8eb5a8c5d f7d79dcd92b92fdf82f3becac5030d335e7222a0
-35e9ab4d0b5b9ef4d2d0cdc66f7c043c9ab51f0e da03011f0efab9f912c3dabe81d3f623348f88f8
-4cee774321f5637340ee12e36f4cc2f8aded4b52 c01fb937a60ddbfec5a677f08342ab74bcea779f
-cc83b61823dc4827f0769c76e046ffec7e26957f ab0855e651ddc222833ebd6a5b75767784cabcfd
-744aebb95dbd70d53c010bc84fac3857dd8ca11b d10f6b76dd9f9876c12a4030ac27614531c406af
-4b8a54ab505576dd4ed0e511e13b1b238e27d15d 216d9ac91d3f1515707ed9b556f7d943d9cb090d
-ecc6434e9fa090197b0ad52a4e1fef06bc032392 3e167a65b3eac2060ff95d59e94dbee2c45453e2
-a7ece056ddd0f14ef069ab11750f2f92548513e2 6e419ec8cf58f54f0e81173f22599f4a2bdbfad8
-19932631bdccbc11b53f67e93028421409ca30ae 04f9ae2a887178a9fc4757ec84041dc3d7961475
-3135cc055a0159cc80568cc38f6a3dcf99880bef 623bc48e9702f7b26f1011dc81505324ee1fc158
-98532dc215c5d56ab3ae7dfe3b3ac1369c672d2d c643243260a2f0078a980866a363d2b004c132ff
-576bbaf1fb330582366d94582b39d3b1824e5486 029e4acdf3a670f60da69409b8ff7ab04e831b64
-fa5ce4b0f55785a153dffa5ed8d31e571d76554d 27516eda01f49396874634f01ba3882dcd5d30dd
-94e280214c1ad73c4d9001c3a964144802d848d7 e93cb9f2d9cc7d59c893c5547fff5c84ba6e80c2
-47c4a95fb549e0344fc44bd2313fd0851701a9a8 c049d561700a7e98304654d4915776e91b99cdf5
-476483343a1ccbd53c46ced7d109e63f8182d087 af94fc00f35351eb85dfea0ea36293a83e3f541a
-2fc891b036a8501f1391f2759be8a4db30130ae8 de92bd3a151c23e9d119e5335641c35dcc501fb4
-d996083a7de615dc513739ede863aa41eb7ea090 f0619933f36a2ec3104823addd685dfb6367cf05
-504c2bdf8375fd13b460ca778102fa115dfb4923 7be712fa738d44cc253b730369dc1060aafceec9
-adf574f166b8d640fced01f841313aa9cedd19b9 dfa4b4cc242d4086eff788482edbda0da4c8994e
-49c7508e1f00f43488c5c0fdf10689b85ab0ad4d 34bca16e0e8412862e3e88c32cb6decf7709eed0
-38a5ae59ff3a500051ae310627e9359731aef590 75d7654510e8001777e19ba524252cc769c0118d
-7ecf29551b2d60e296b0fb176637cad95669a03d d65322f53646542ca09ef7eb819eb708e5dc5a7a
-4f584bfe7d75a8faca18877df0e8e1116c6f3b71 c1edefe2426609f996c760611c08e2278db20c6d
-74c2ee5681c8dfe4eed60b75e362f39776ed21a0 b25c92d5a847ccb268d8440c02807453717fcdfb
-122616e40af87f3f471d720b08141cd8bb9b7f5e 3f33e4f04b63c83e1806bc18bf0faefd6f4548d2
-fcb2e9d4832daf67ab458c98fe5df595748bedeb 8da0b5b8ace7b222053ce5f63a9ee22358898c1b
-94e080dba3f125a137fefbcc4a5dff01f6793a42 f6f4779da58dc2c677c456832c3da1f7b2d2d41b
-3f97a3b88e244ea692175a8e9fadbfaa4283726e 4c82f3d3ba692a0a41a86b48c8eb1f7722b91553
-acfeef58ecaf47b1db6c7320279b8749ebcbfe5d db4714fcd8ea9b096ac17e65829421ffdd9e8430
-0382e1625bfa77df4516b4ea05066df3dd2beb06 ea671748807ff9709cc2814bf41e8ca36c2795b9
-91f6f8b3da5f217e96b44a73c7765cf6fdb849c5 8fa579e7bde47c5c929adf3012d1fd9f56f20ce9
-38fd9243ce75ada8f01a979763e85b3bb5620601 3b194022f90db08e49b0ff05dea88f12bd25df61
-6bf1f223f4fc997b30226c9651cbcb8f434abea4 203ed7498b87af621761b0853fe3250f28ee5368
-0d6ba59ecec176f1f2eb467459a270f3455a9e99 a9fb5c9d7b95b6d847c35dbe758b5427a156f61c
-caed098bf5ba93699e5ef5208abcd965c912961a 9e381ab18813677256a9ecf9d5915e97ee487fa0
-7783401de4ae3fb1f59fd66f08272ce831826374 2179b59493060da19356fd115ff97d4b3a77783d
-382a146530e31debff7c2ede8d5c5a8376b8b5e2 2179b59493060da19356fd115ff97d4b3a77783d
-f37eca6487b40440cce63b864e9da6de65af931d bb8b9573a3229f36627873c1d47b0657720919ad
-40b328d4424096bdd644ee58fe97e9498acd8c37 5d2b2254feddfcf58918788aae6be180b9889b05
-ecae1fd53428f8e1c5b6b38303e76f1ce7100514 adceff6d37d939178f8a7575460e004b22ae73d9
-3616049f87159e0cecc8502b573f27831c286663 b2199311ef2dfc06da268bef3e61525082d62f3f
-09398d54b589279650850ccc5c351bfba1d4300d b2199311ef2dfc06da268bef3e61525082d62f3f
-c068fe9b5a4172bf649e9706c32e7855d66c7871 943747a1fbb9bee279a1a643a783693bd15e65db
-8bf4e1e09153f4b791fb1824440ba6f5b8562588 9786851c832aa3c3e5d77b1f5cd5757103ef324b
-bc19ceab3fcf9ad465f5252364f30c15ab9e3082 c863a31159b089bcd3bc0e8ab147f1080ec3a21b
-77bb6c7607b8beb04ca91488c3026c12dbd0fcf9 5ad41d74cdbebd6d1a62ab8f89aff751c5d8d942
-411d4b66c2c6fb2b99c8b81111ea5caf1d829a06 7387707a77736cd21952e1c0ebd6ae9a7a9f8119
-65b154cb29a7a1fd6ba54f2aa92a76242e2c5263 eb8c4576330bc462a04518191310253dbfe64f08
-a7b741c0a4a306a445eb1b9ffbd42bca102516d4 db2a950515744afdb925a188f29cfd2f32bfc1a6
-5eaf703db1ab6f7ae6f8fdaf39e63f0e650e383d 14005941d00d8186edf28a5342704e04991cc40a
-759217797b98aaea2f385dceb4ccfe059c2c817a a42c35d43a0dfc8b22ba38e258c3bd70ea4816fb
-9954b5a377bdbd67f62f59c44071ef593c491278 2fd22125bcdb02194f95d36361796ad6d9fe5e0c
-dc651b7090b65a18de250c09621cb26091b26f74 b53505a27606c57159a7843419a8e1e8cbf01d6b
-8bd4bcae1b82b52f2d72fd1793df6c06e5476262 23721947b8a6426143285ec8edf258ad9759680e
-8aee2400b18371fe2b49984bff4c519008380d04 8dca30bfc8836fbe6a7f1e14c5dcf800e5461b7b
-a51ac1935866d298386917c06cdbbab3bf8e78c4 e1b7f30581bb996e8290cf087ebf47caecf7fec5
-645fda1f10505efeef2c8fb58d92ee09e9c554a4 adc91ab0f66c05218c7c437ed2715251100e0c5a
-00926771a2ddd69151f4a1ad8ddf807f2995bb58 23fed3aec76f0caf220e290691bf50cf49dfd029
-b621b263501f97a4e0dc54a19447420e2752f29e 0063fdd53838b24c104f993b146af9cd960c365b
-2d9683b4ec098b615dc3e070ae1a98a04fec3ada cd9e60dd0cc0e72d0ac9bb42237964aab35936ec
-67cf690628baf10385c946b4a819d4cd5d7142a2 75d7654510e8001777e19ba524252cc769c0118d
-3b2455fcf53bd0dff972efa79b238020a598a770 26b97eed5156cee3214d3fa7b8a7598125e5dc5c
-552757ba706abc39cb3261f2ce85e02e0729bc40 12bded3a9739174079b793618aa5225f8ee91332
-ff4c0d56d4e27677f44101dec51b13ea502ebe89 0400486fcb82dc537ebe8931ff1a0bbc20bbbcb6
-cce0da3cb1d79d614cbcfa54855031ee8939c2cc 9f5137117cc6e36b47adc8480c7eeef7368267fc
-80c79986e7c9d8ae143f3a922596dc31b8d838f0 bc61652bafdb56487a9cbc765e4ae14e03b84c47
-80946ace8143117b9a3db4d99f28343bb3e41c32 44924abb76cdbb6c7e2693e7ee5494929ab5952b
-0d4526bc2ab1eb89eac79f2264f6a3746ffc3eea 8ed4150a8f8cc0d2b7c3f138171be1f56816beec
-9638fad032d6079a0e05dc97e099b60ad7b27155 249f1918420f05961d85d55999ebe04cc810ebb9
-0c34a0c6f7f4388302a298f51c611b9f3e16b4f4 578884a9e9a646c210f698e1e57a3eb073515516
-345b0c4785562dd5602d33993bdcea3fc95fd00f 14634bff2dbbd271d5b70eb656cd140a99158c37
-f4bdb5a6be3fe857534eb8952ea54c4fc4457752 7dcc36c8da64d130fbd96750379c5baee8337025
-298d3f91d318d19bd04e33a45d92c4fa31340f33 517bcb6b5072e67f8988f41d30d3518dffcf0699
-a9f91cc1e24ab3613e1ca23152b8bd666e10c68b 495ea8ffbcbe681fc0d82dc6246218f37e285c52
-fee568847f6340c0ad217831e6914d5fff3cd087 dc82070ca7b8bbee1f8a9f912b074d6f2d6419bf
-36a5d5e76894b294e3220c7b9d20b517b7f31fc3 3f53a36b58abe63ca3eec82818e318ee67dd4d3c
-e909cee3595295a4269dfb809e8c42efd0eb3621 8038663d96c359e63e029753dc8a07a3fa0b569b
-883acf3223be688c33216f06cba894b2de8b1659 b3afe93bec89a62eb994447678697db65ff3c86b
-9e0cb6d57b0ff196d8e51e801c27ee5168d0a885 924c0347abba2b514bbc7229e0822a50b02d439a
-1c352638e3bea3e920973d16a2161407a557b6a7 d150ca1fcbb6769c14313f029c30e980a7738bf1
-a2fa3462f2766bb34c655afd6525814c3700e38b 3c35ffa353f6286a9e39b4c09a9e8aa18d0de1e9
-5c0320ac2184b232b6b5da45e78061301a552aae de38fe84a2ce60c3026903118b10ffa6db7d5844
-896913291b27b0d0bfa809b8ea108441fd63011c 12a2d87d9ee21002ca4a1528078a01e154036dd9
-9488700a20f52615a43266c94268e9bf419aead4 74851c34e3c531e3c3b4b4f1026c8b74ec1733ce
-b93e233513a0eeb6611465f50b5b4de3f0f8fd75 d2dc1343d87c88fc2cc528cc8f3ccdb027b4fd7d
-d7fc28f0f539291b46dfbde6e68ff136642f3808 4708aaf31d4bc863da2c835459d5bc2e5a9d5d91
-af27cab7beb8d13fb79d06758190d18de0b74dbb 27fcc93b66f0b9322cdd6fc941037d42b7096c0c
-1fd3e4ccd21e10ba59bcf94a691482ba4cbb87ba 8334ad8694fc7c7b182e0ef4f63d4ce1af5f637c
-1869e99b5ce208bf29204f9ccd02c1cdc1a5a655 32a43bc1eedc97c343988a2238721edf12b5e78c
-4e7982b855d106a2bb2cb5ee24c0b00d68de0a69 bf9c46a83412ae809a284c41af4d09dcb3184cc9
-7cd0c0de6fca769834939267f0846e2c07b9685e d3022b749792c9df5e19423c9435d7d118d17d99
-ab6af162b9b68f2a221d0980b0c72d39166814d3 9752d3ff3baf532dc0e512183aa14efa7efaaaed
-30734d95732b7cf722d38de6c79472fcea7126c1 990ae7f53574e6b8cfd703f822342f717b8749e2
-21dd6e90043c80df6068a6d8a87066748928aba9 ffaab4a439e2701e6a022ba7a0c8470362d68a83
-c52841c7df9e0b3fc4b69b00fc7d681901216620 345b907104c706d1b02740ffeb5461f3359f858f
-e9967948170631cdff17e86521263b56f0173cc7 c60fe8757ea1ba5d503c85dfd2718ea86d936364
-5b08f654fe1e1f8e372207108bbaaed33e2025e0 cf6ea98bd9689a814226ec2e47cfe2a0b06ec9a1
-1534c2faecb9970024771bc58ec9ae64c133683b 6268c95178191a54568a6cb53f61381b82ac57ea
-c9e4b0a84cabb7210b8e9fdebaa7ba34ee704aee 3e2e22a0d65010c510ab3b08e6463f298338da85
-d35ef68c74bfc35364354561ed0edfb0367094d5 e217e0423a03a5eb54e181e302ecdd7f96007aee
-12f94ed4e02bd2b3de806aba479b5d4c527d0221 8dbd5162ab78e1aa383453b883e8dd9695dcb159
-b192e95344ea2356ee66adb7d498f29f3f1ffc60 4ad87786dcc1e015459de497966717917c98a52f
-aee8339f8ed49909ff1eb1178242d0f7b91caa28 ce073f44501571d4933b5e6d4244d5d97bebcf2a
-333c9fbbe5209e54c16d5060da18b3e4bbd2e948 28d15379672b014da04c959bbd2859df4e7b3fcc
-4c028f3cf246bca84c3ce6fd6398cc34c070bfc5 c8d06f87f49e549042456cc8067b5ab83f9cfb93
-0fba50a34c54bb726bf38f78d1ee2e086a900a5c 2fcbb662ded2aa5531a274b0918a07015eb1e494
-f0ba871b30ed7b5ad52e905871ae83b7c5feab19 c3682378de75bf416d6466c6fb99cbc101bf51f7
-e8c173679b16301da0d266f1b34f68f05d13dc7a 00b1a76a1d0681a87be806193b4aac6df0690d05
-f66bc11c0888e0858efb4149d20c6d89afba9ff5 b9d146570826520a118b1cd6e9820b94ae2c82f6
-b9114cc00ce6301ee5643196a6fa870f0103d4a5 d8ff9abf4795d1e7d80ca97079b4905b35b56065
-66759dabf47adf8a9e62dcf3caa4c98b651f7f10 b0d807612497b3b53cc0af3c23be55a687a366fa
-80664017a8885b817d2747ef333ab45015850df3 51215a0094caf271e9a5b6222fa133bc5d5ec55d
-663dc020312ace6bdc901705230ea016fd3d49cc 8444d0349781f15ae7ab7fe0a09d1e136ba08db8
-8ed93fcec43297f7e6ebf6ef30caace808e299e0 d3249968e685f2aefe222b2063988ebd905214bd
-12e9b9c752b5daa0998910d64189e3501666323e 9da44d9370def32b736a2e8535758ff23e2b86df
-2c40d33673ba661e5bfd65dce4201c2beb436f52 062b716b6d684a7f541da69153e1651ae68b720e
-301854d4e79a42c0fd2b04574c60c867f4b99de5 69ba226cd06c6e7d915467993e7bc70ba5ee47da
-b9548dff227f22d4df5b0ea33c587fecb0d37bea 9d11e7e8266418885f339d73bf408dd82625b9bd
-4fa6ac22f59a8db6d96711cc81a61fee0116b611 61e7e6d51812aacd3545d7b7e37fb6667745e07f
-d66c6bd0ec27d71901f2e9d4d80b8725dee66ac0 c7b766f7eeea67b31c36e62e6f7a5d88926dadf9
-15cf6b607949339e9a3ed0a162aeeb257aa61650 5892f239c45cb7a2ac3e91039becf2846e8d9089
-d42841ad16c67ac50f0b1005c17ab1438da1380b a4fc03eff29895847b81ada0e32973d2693d7ede
-877b3bf046919a861b4215dc7596558280616c78 d65dc0e6fee05905836ad69545096c90e5b23cc0
-7567d06e702bf1266ec6520a0f8cf50b59fe4356 1633757155ee02637f1e1be3fca7dfd8b38ad278
-593ba484afbe79aa3827b97abe60c87d626757ae 6820229c5df4a5e782eb36f60722a21970b37765
-659df2493946f5c203472b8e07518eb72e73319c 0db7d317ce0080d58aea76c2d455a354f2201ec9
-a29767f6c3c868f796c213662d62e6294300faf7 f6bcc10e38f2653adeda3cefa85e003c019183c9
-86c62f643516dde1e4dc69167c09e2d89509571a 76526ee4efed302be7300a77d4362791f30328b9
-ebc2c08882f8088990d6ba6886c754f5b603f9db 34ffb2a12121e9d72e835c7807b18723d1b5317c
-3b0c24721b2afd23994dde312837894e92702259 34ffb2a12121e9d72e835c7807b18723d1b5317c
-7076e5fc6ad029b4092f0707e447cbbc47c4fa40 534248618ff3a7ae3d6ed38bf9d2e100e20bba78
-f64b9d3edb8b8a499d919ca9a1e0aff34efb2859 1c4ce0438f78be98ef58c8fe1d1cbb0a61b1e204
-9a3ddd6601bba3282f01fef454e827202ae5d5ff 46a987cdb5c7ab7b981edb2e0b43e336903b628d
-294857974fd8318afac176a00fbfd5d1838b56b1 209a332341ae9becec1e7e3d973c86a7f8469dd0
-17de112eaf0bbf09ab0ec6b5207b3dfb8f1e4fd7 82dca7fe4717798679a6203fbb883bd97189f1ae
-c72ad87253d67c4a849c41c2a266c6f60748a13a 82dca7fe4717798679a6203fbb883bd97189f1ae
-60c5700307198dfed3bd9b2f2beebb60f7ebf2d6 c96b05592b5f0fc0d6aba8bfecefac87dbd383e5
-69388cfbca5bb410fbc524805d9eb9b1c1674e4a 9ab07473509aba5c78a09be389489fd724d3a32a
-68fc2dc3e42cf00372f6cf524a45cffe26cd7237 4511a0832dc316f2f598d101c0ddf2f1a63cdf66
-28a7c0abbdb6e615905ed279d7d7015e73fa4695 4511a0832dc316f2f598d101c0ddf2f1a63cdf66
-59cd2f4b64e416b4bcbfbf983a7fe0fb0707d9c2 daa0c24c8e13904d821ed8341080e843d9b0befa
-62d343a07ab869fc9cf7267c485d1fa6ede76625 99a762870af36cb7af8b8d2c3bcf3596f66c5a56
-c6c13292f37b4048913f5707398e741f74e41402 6fc97962934dc349567c950827a73c92c4addd4b
-bf192de6355f944c69f38bc8cadc539da701eefc 808c20b68613da9f26eb7de007d5ffe231a75878
-7cb61d79582b2a04dc2ef28672ec5af4dac10d76 f544eb00dcc1d9367e41bcf6316af63dd8724979
-729d376b71af170386160a1dbc1f9a2942248139 824c2b63883c63a5d59efc67f64d353ded4fac89
-759c560677c7eb41f6b542a02575ede09fa6601a dc67121480357e0cdb85dec9d3c35d8270b7b684
-f3b47e335cdc774d3cab85139cf279b8c2902adb 50dc26b5b851e4fbae895716db26b4fea838532e
-0ca885c5529944d3b255e8a950a246257f092b81 4e13ff62392f104f41736516624b992173538aa3
-4ae8723c7d333e74a52b9f5059c7b454ec3fe1c4 5d702716dfd6e99f78abc78ca43f882bd607ff6a
-cb6d5e6dfae65197af6508c577178976d600dde7 30ec31a96c7073f2f26f22df3cbcee74cdcd1f6d
-dcabbae4b31218df4f67f17faa613f69c7c76749 e5b5ce556da1917d26b9631f135227bcb98c1521
-7357f4ef70dfb9525624b284343c742693a9b1aa 51a18ab756616558e6e822bf3399e76b10a85be4
-7e3f1f8d0cb4019c8f50991e9a83dbb3e20a85c2 b23c8990227ccd68b8d5edbde44492c62f643a51
-dd0a3f30a50a6742182c9743cf51f8667251fa00 cfcba4ec6c633b1a2a0b88a3503cd2645719bdd3
-ad6a7fc9d93a3b10141fb5a9297d38ff9d4b7d5b 9a66c8e6eb459bc4f1023c380aad3ffef80fc020
-564cf98aa8f48b3230b66a2f0a922591dce176f4 3ec7dc364ca8a9268949310d7b5e07a4af06f7b9
-182797be1b11b9095985357d8bf16acaf3b37802 033387186e79cf11b9a7dfa6110d1106dbe275b1
-f2763c0700c548546b7001fd5a2005f2cdb43166 033387186e79cf11b9a7dfa6110d1106dbe275b1
-bd7c5cbcbdca1bd053404277435b6488386e8a84 a384b9c6b8853215e3df6d5d456cf49d0ea84e44
-f1b0ab207a7fc2e3a613c610ba9b11ea626805e9 3f1aa343fedae945f575bb3cbc7ba3f4298bdec3
-4e4c7a60d23eaafd21bd440ffa832b28648e53ec 3f1aa343fedae945f575bb3cbc7ba3f4298bdec3
-2c589d50c85c4b2f836f5cc4cb366f82a750337b aad6dbb8c2b883e70ca5ab3ecd6698d58d117da2
-862956b848b711ec0f9c0ea6743af7ecf1dbbb96 3dc9f0927e096976283ce2492f0a7da327aa76af
-33678b570bee98b6fbe1c0fd1e7b333b05f43583 719549325a584ae90dedb6fd90a322f21e0bd26f
-c04f905bb78055d1cecd02e3daf07873b0cba149 1266ed2e90d28f28138b4b460449c68ba36a4892
-7bf59571ac3ea6e2085492280d2f2b06d2f1bc7f cd146d0e161481abe4b509e0ccc78093a84ea426
-51c09e80faf38add1d74cc3f0b598840f4171de3 978d174ee5cfb92369762870d1430c647ef61623
-86a2d84cbe2c64a1c8cae7b2a5b9ebbb790f8695 7e897efd0006a11a2b5e39f1afee83b1366eb2be
-d26cf666f6104e04b358a3408a0e6e2198426616 668851b2ef0f8cf8df07a0fba429e4a6c1e70abb
-156cb858a627f25e65e718f77947a20f0e4e7b1d 7e897efd0006a11a2b5e39f1afee83b1366eb2be
-71f181559a720cc9b069840b661fde8ef63ed447 5ad54247c67af2b4d225f1f5b4bab1a38d67fdf1
-4c35e7737c0e403617762b72b74e528f38d9b897 9e8ee28a8c4fd23365c9e2202275eaf1d2bc4caa
-116d16b728331cc239f243cdc7ff53bb8c45c1c3 b6754cf4aeaec9b1f248928275c24f09981323d3
-2c9e9033ae0a21f5e78840a169b3de7cab85ff31 37f68e34c9f9bec488f5354d65ec38e0b038dacb
-86e1b828ba470c04ff07b65ae6e17ce5f42e633f 668851b2ef0f8cf8df07a0fba429e4a6c1e70abb
-702e6bf3266be525812b2043f6fc487cc0c4df58 37f68e34c9f9bec488f5354d65ec38e0b038dacb
-505cd7bf0c2d41eb6c14168ae3b4653cbde4cc43 ee86afda1966f51cc177136642b3f50e57584b03
-ce2fcedfff13c3104cec0008e881b70f45207789 75a61f227c87c1975797262ac898071cf7d25895
-28d1dbdb4606fa624a842bafd166ae3a05e2407c fd8fe8a85c2cb61fc6fdef0c8d9b20b53e18338f
-e99b9ca61313950d9fa6f61d0adb71a9e8c214d6 98813c249d010cda4567f5383eb4eb1a3541c555
-617271222b62f7a833f7cd2d387b46858b143b30 7f601d36e7da8e716f90357b51737b99a18fe4bc
-328e63af353523131ce1c8aae678b6411988bb9c 6e4117d96eaf8f1c41dc58deec427dceeed4c31c
-bd154dde9f40503f94a99342a4f063f09cacf552 5d5219690f37db1402859826f802e80ef9375fd6
-2ca727ff0812e000635afeb43cead16682f62898 33613b049d7cb3bf02157e341047154ea02f31fd
-6e319893762ef750898ff87cedb03296098b76e3 06c9d1be8ef5c029e388ce32f9adf8dc15591c34
-0adb8734137100abc94550d5dc43b5c2aeea3aae a6f9b629be363cf8ddcf77974cc57156db4b5251
-d56ce54e7f86f2be9408140c35c0ff0b304e364e 26ca906909ba31c4a2a7ace0e3917ca7018948f6
-4ebc3cd4d95704b43765f44e2bf99564eb8bbc90 8cd42ef7bb2fb57cfa43ee63313a92e471ee652f
-6326fc5c07a28c0cc7c7a753c0d1c5448b06501b 7fda302fa3ece52ab073e05d72eb8ea9e8e1436a
-daa40716df7eca4c4d4f2b031cb24dc7e710d105 e91e8765810202bb40d021422e0bfd664f80bed8
-b70d7f5b7368a87e0e34a7dfc21dba423542259c d6b8b90f49b14364a6b9e626f10a5654c9de38ad
-b3785405bb522a4843a2fb90255df0f44274a606 35c4e1d972480ee32d3aba33048b322ac41e56b2
-069cc73e2bdfd0e1a94724f8c2ff0e12d5984f00 bb8fcf324d345bf301af7aa69e87f77222ef7e31
-b3a4f8fad4a548a5dc33586609ae658b5a52e5c1 485a3cd2dc2b3d97336383c51fe623470fddd7a8
-9da2670f9b326b7c59ee5d203d13a28d64e9b2d1 c1a2b4ac4cf857d1ef83f21f0855dfba5dbe4c54
-003c8587f9b19878b7f9a857d350c977c7ba7b3a 1201b92192f6beea68a0e1ff35dda1cf8998c6a4
-dbb30b2600cb034fb066a35c8dd715cdf3e73f3f 035f1b0870ef741d93448cdb927619e01c1d65b2
-3bed177218028791f7bcde5a46c17889cddca3a6 9358a275e884607d5fb52eaa2b0a20a64ec95933
-d27d6b331497b1559309e76b8e5df1fe6c36ec8c 513b4ea330d1725c862dceaff1568ff43c306750
-6c0be583c5892c94e425e0877156536ac6615a67 75e00221d1cc2ed6037fed47989eb0e87b5c5075
-ebbaf9c9e2c54a4d0794c676687616cd4dbdfe8d 75e00221d1cc2ed6037fed47989eb0e87b5c5075
-54e80c20a59ffb53cb5b7b9e623a21492269bc79 0f43f7f9f8bbc8e7d895be59903b64e555e98f86
-8a6db8d812473db30843b1ae0df8c092aa1325c5 ace0b34880cbe5d3462139a61424930c7e2b927b
-e6b6ab698cc7a64dd5724c51d8bf99794d24df29 5784f7aca22e1b9a2f06793568eae7d5f1cc79f2
-4d7de2db90f712b732ab1110421aed35e4283763 436169d50f1b0f41a9b435109aaad9c0d7bc1505
-e2e28a4fc870d113e043b4272f6a197d50b2d0b4 ae89ed658ff35538706ad80b6f8455890ed6a089
-5edec19d8fd3ac0535b5c659b68f8c50affdfc4e b2619863f3843e374fb00506b7573aae3c3c9e46
-8d01be999ef6ad2dd7e0463284d486657907b9a7 4f312070fbb835baee1f4287a7dc16000e474ceb
-2af851547e21e3f0448d25827ea3820bddc6f1af aa8959ad1fdc6aa9a04b1e516be5992168619ebe
-ab238c83851888a33b8de7ab3005b082c0ba0705 dc875f801d7bd3beabb34c6714953285b27e9eaf
-4cf5fa353e9cc2aa856942d4a5bc9bf26cbc89c7 dd0d57ec1c5d08d3eeea0ddb0f3c848d12d3a38a
-290892eb84bcecbcad469ca777aad085e249a700 b25e44c1c734d4145533fb141b26b6c3065858fa
-67a1f2f7c8fcffd0c44d0e6eacac58e72c3640d3 4aaf625ef81db9072ce8cc47644a0ec75538d020
-18d7fc49a063fb411b1e95ed1ddcfd0ce43edbe3 dc4a712130c7d5069b00bc83a963b8a9f8762ae3
-55edae504ea4c456e82f8e41a9434d647b7555ac 326529e31bb1e73a47496364e8801d16023f575e
-105ee5b6db5c5e4b62a4258136a87b32cc833c06 da8eec96723cac9800038fe03becd0eaa4799b50
-9adc0abb09b7e6e9fa647d687723435bdf201ec7 ff06af5624c637fe49db455e6a6a1de38c6924c5
-b4ae8cf9a82eb78d048f0c9932ae796db1c8b7da eb5fa371f941c3a305406ae0008b5646f2a9cd55
-05dd620e3c6cf67f0b0b7438e6b5ef38ee69fe6b b96fa4a58ee1470c4a8ea57f08a05767c8d9a9b5
-10cc39a9c280af9c4f75b28f21decc0fa6f99769 39d8bc402d5f2b81579ce26a893e3921b6915d42
-7f30062905490d7699c4ba9bcc7ac690db59975b 2e2741cc94672e5bbd02605c5b32da421a81ae00
-61704d365b481c69a2a464cd45421e98fa875ae0 c66a3317068b711a327540e582018f0bddd1fcca
-bcc8187e0052bc2486fcddccfc9990d4731d4388 2c6a78a6dd0794bcce75aa511b4b27727fab4afa
-8b41f2854013c2fd1ef3b84dc855d8329985eb7d 32af37ccaa95f495f2408745ee4f2e333054cd79
-bc7c3df4582b3e6805a672b25c054618d8c868fd 329e650ad65fd6bc73c0c31338fe5086642e7dd6
-6d51a12cb2d87758bbb4d733873dcafb3c8fc6d5 bb1770161921ba7f6fa5035dca17a2477d49213c
-f7ad20da9c801e0dac456868b49cf06e7eaf922f 6f0c439fc646f493fbe8c37b60312d40eca9e4c4
-db193de37b75b9486cb14383174287463485b635 119082287a66c1e83c69cde7eaea8203a3553503
-f2ca61b2ec5a866b8fc996344724e3e88c70a80c 4ef913d0e24d826ec1455d2c31a4ea1bd0ea7d1f
-7a2a9bfa441bf83fd27888003e64beb1bc9322ae df5e89c29919a6f607a13bad1660d3e0fabed001
-36591453d452be67bf3e2a01f61d77e96d5ca667 caac564c4c87473ffbd4077d9e41418c7bcad4a6
-ae913fc8d13b8a23e30e1f24ec6a206c273e7a17 e89231a40505028c5f5090669a072b4965badb50
-43ab6d2c16efa92c6539b68ece0752261dbfc454 a424272320e422e0e9030342a0a6e78f52622eb2
-d16fc04bc9d1840208b60f23035109810aedde21 0df1259ec7128a0fa548e5eaddda3e646f9ce8d1
-165891b930d13eda58bed970e11996017ad71191 fe9b0ba51cbcf380b97d9633b7684224000f2714
-3359b6e3d3b86d843add285fc3c6ad375847c5c3 0eba87ebb2e72f41312adfb1bea031d3dbf7ea6d
-9e3b821c09c094fa39c8f0edad16c37e1d953415 0eba87ebb2e72f41312adfb1bea031d3dbf7ea6d
-7aaba190c5d4fc5a709eb40eb30681ddb5b93ed0 adab943952abb458abcb99e2010173651bc94df4
-1cd395e3f261617077e0f705306761ace9e39366 fa45d0602d35f0ad378e5d9aef07d20125870966
-f5fac94576d941b6e295bd51381ad9a81c54db55 3618a33ef6cd4718b035c213e5926985111f3968
-0df612813ed21d8e3e847efabfe2a3727519503b 56b5ddb04ef681567e31397019c52adc5d93e43c
-f06cd34765ae130ff5b7fd170e7e0f57e7570367 b26ca99878d92696da40bce969418acfc9d2ba6b
-c97082bcc839fadde0b1d6f50f10612d0febf1f2 ebb4459366dc01c1bfec83e783e3a549a6652f63
-81d081bc0eebd265a9378cfaf88eb848ed3301b3 2bfd36e76304b54232c655f0c1a37e8ba3aa85d0
-47697334ddf56840d7afae1415c40e97b97f2bed e5ee00327721f02dbb89662258c801530a31f29d
-279f4cf3d94052bbf7921c0582578fa4939ef681 921f5763288459d70acc2183e9baa828693d452f
-bdca3e3a948ced60158ff9827282de12a3cedbfe 96f428ddcfcd6c9ccba8e2f19592233c586d6705
-13c143a07bd41da0442e42da1b82ba7603d4e49c ec576250a072ff15ebeec5f8a84e6be042d04065
-d2020f2f48142350e00e140fb15a96a5627ed2be 00d6a97b7b292e6675191c8fa00c8b49f59ad5dd
-ea50ff72db34e232f4e7b10dee796d3cdcf9ea3c 61bdc93b70668b78f4d519bdbcc561f0fcd816c1
-6cba33b905cb22b7c09a8eebeaefa94d1a4fa255 5f8de6788893c7974bea29a1221f6a460eaa21e2
-4570266a419629fb7a4dfb334217245ae5a748c6 ed9389ddc02e707b8d946437508c1453dc941d69
-242f39fe35deb1bd5d99cbc119c56b23135bf1f4 3cd07ab3484bb3fb7c833a628476dd588507ca3c
-79f58d4a34f57684e674ab6dbecb1cf8397b8568 dbc47ec2ef07a2108ead71f180bf0182d77278b9
-9a5629a027f803209a51c29a83cbf196dc84eb79 e376ae2039b4efe93eb674bf16c543902080232a
-34673dd9197622481ab0bac77ec0b114f49ed361 70f0b1853e2272802256f9587c0c89ae3bdf778d
-5bd1d6b32a05a3c1218266c9851b16659825aaa6 f983c3948b3dfca61107f9191a20d480fcc555e8
-d8161c37d1cd7a912c08ae80a86d669614f3d017 6186b3be108bdbd785127df350d614f83f4e7508
-57926d773389f708294adc31b7fc18f46744f70a cb102e8f5b18c24a66774f02f66adb24d96cb90b
-c3168b3385e30b5d508b69852c4c134ca849a9b9 301600b25fccafd46cb69a661e08d2b9ee6906a2
-2d9f05545c4f4508ca3809c2d5ff9bdf5bad45f1 ce82bd3826091cd3474b6586343f0ea760307d4a
-10d1ffbd63b061fed7b85dbabd7698842dba2aba 982aaeea203fed2b28293e853726788e7f8efd0c
-cc57bef28969a2f5c35bc9f70b7299f25baf9f2b d82c2a3cb72a77822765b03317350ef1da22d6f3
-724220608c6eaa8b25029186e350cfed424c2c53 bc8dec3f75af349aa3d483f335bdaf0607d671d7
-828042f98761ea76da1720bbed9630b7abf706fc 818e46b010524f0891f2f661a249eae25b3d88c5
-b1b5a8a48ff755c17c824265b6bb3ec6344b04d3 10cc375bb0dc2fb5ca4b15733e5f3ffa87dd5a4e
-df8fe5bf835684acd77dddf0ba58f49cf7c321ae 607825cc2853a1e9edf5c0e51e7de199ea387a6b
-a23c6f6f762d5527d2d5500771d26f0ebcf9da50 468b96b1457684e7b36f162881008347243ccff6
-e0419c82bd2ff88e266220d99a0fe3161fe87097 b29e953e4a333e5d9a34a4858fb66d6079494c1f
-da1e681061aaebdd117beaa14ccde948ddf1d86a af253b764c14c1a50819bc672a2f895ddcc51d51
-92255bde603c8794169d54b552f1941e1c1ebc8f 6f03361ae5b3b546c4948a3f16c2161bd022a668
-40a02261a7c3d90b158019ea479d28236fa3a61b da9ebdd13e3304f3301b7eda648f09b3be01e113
-1cc82ed9f6fba79c77eb85e3f4430baacbd3aa7b b6219b2ad0f5f8e3ddaf5823b2c32fd6adf0c27f
-254fa9bcc522baa16892464f9604e218c84202e0 36536081e1e7b5428731150c719c02b753dac32f
-d6608534445ef025a98c2546da14ef766ff510db ae24fa5d5e7703555f7bd53a12985e6b44a03261
-ea31f788189c39b78fb3099cf44ac75f74234646 ad23f34beeedd96d07574126bb644ab793ad5c5b
-cf57ffa9404972e99c614ef8c37afcff55e70057 47a00fd8fdaedcd86b906ea97971f3066bbad7d1
-ec8cc676b4f1e0239da64cbb4eb04f0d381d7a9f 582ef0656af505126e11a4aa5ab24a5b0631dc38
-2e6f978203bbaba1bc63d8f2ed0b3a84d74eafcc f9f34ed9a900de5d9abcd3b06ad3a545eddd7abf
-d5efb20635f0a15cae314268df0931c00a183ae3 8cb916bbfd719a69373be8aa543190501f03c7a3
-f310fa9c839214f50c3797108ac01260add43bad 963301d4bee22cc1a8aad6bbf24c0a2b18f445fa
-6a141ab692a1026dbdbbaa354519a4755aefda50 6df642ebd04a1a4c190f4ff91f277843b1d0c95d
-5156c505948d6370f053fe12290dcd1fa107f682 8d6f029c44db1068851861a19259a48d6e7c85f6
-f2ccc5a5627885d91496c3ac0eb6b8c7177f9929 7dc5f72ce84c38a46554de507d48f6ade4f1d24b
-5f2bd7b539089b8a8211b5f562dbc56a9fc8ece1 0b3ac3b033ace99009c184c9232139ad9f589ccc
-221ec2c9b8afd21f5e4728e1b25b006c941c5032 bdedda2987930803ded451e7d01f0c011f28a4cc
-d8ce98cb5615f40669044025bf18781ce4a2880f d1d927b40adac33e13142b404053a2f442cb665d
-bb9d78ef146375b59bad73a8bae52d782b2532a0 8faad403deaea8610b79ac149558ba23c9fb98d4
-94cffdae6d5640af8f8780116e7aa1e7bba5a4cf 675d3a6a5c41aec48eea8d6c8a4f0ca8742062d6
-4236de65513b14736b51aa395cb5166a350c147c 619318835030d296132cb5b2b7f0f3c9be3a292c
-7d3b1f8f01dc6c26ce5e6c54a398cae23b58febc 737ee6ca888cbbf4587ba39ca3479a4f5ac87fc9
-91a042213dac73ed14b882db6d54914e11004ef9 69825e44a5bc6f870ef2188c24d2078a561bd87e
-6ecf46ed376e8771da531aa78eb16f2dd0d4a9a9 5783bfd2372f8532307a1aac8c6f41f0f755c89b
-cf96d83536bca0bf91a035c79dfb2262060ccfd3 aa6ead31a32db8dd1922ca5a640e6bf5aa105c87
-263094a9443c2c5a883e5caa629409a1245c5b47 99002421caa2d918bd20bc82161e104d8e3ae5d2
-e2a13b69e768bc2a41d5e060b0a46d49f86584e4 081acb747626cb96dde99bcd1404943c9664e243
-ea8c034b87973e57a0cb4ba8bbbef74683555bed a1404dc582bf5043226b9a964dcfb0454b9f4831
-578d78512b5058fadd54b5fed806d07584d70a23 890f1539de0a58372f97b5440ae28c16263b8621
-d97809c973314d7c365d1f673664a9e7b01243fb ac1662f478bdcdfe0a27b7a3c6126715274dd29a
-52893bbe61ae850fe9fd8c88a02594de2622e61b 024ac594e14ad1243543277fa199157aeb480db7
-391cfcb56d9db5500d4836c2b59e1f6da4d26258 0b6cc7344d3cc1ccb3eb9b3c140cfd2a9d043303
-9d4603db319c7b11fc5e75af0de08a4ee95c68b0 e264686b46cef60f8cf329a56fba5a50c300294a
-a45d04eebc9cde5cac449ce7d18e3e8a16c15204 b3b93f4552379a5e1627517ad3eef67c57544ccf
-57bff28dab75b237e3df4df93f7c821fff9f843a 948453daae293fec9c7560c0719268990090dc03
-025cec8bde94639f4ae313eb51170b060716eb52 5f7bf57d246d776361623ea75c3d43b1be70ce41
-72803d17a65abaa647a081239492e78246ba0651 febd68d59f61c7f60d2424bfcad5cb65543e6ac5
-2c955b9828e67b2088312f30fc59943eb0e41602 e70198f00aee86e06cbafa33bed2d3125726332e
-47df29cc34a994bad5f0b536327a852fbd474b18 ad9fb79ca752134d2dab93ff2c22d7c749c132a4
-f0e9147baf74e153b8fca339478a389b133322ee 2db3be0dc183264a99dfebf7a0ac262746612f6b
-32ed80cf4601c511589076384b00f1a31b174de4 4a7557fa83546420f6998e9fbb81d6e8f9033b9f
-8c8506b4aee67c12302f701af744058bd5d971e8 3f335e277695ef9f9a9d3684f9125519b91d83fc
-20aab37491f2780be2cf625a1640e7a96de8e3c0 13b2ff2a011b1fe7cfd4239d1070bbda88bc6b65
-a01335caafd712608421449674d9135e1219f776 2b540516a87f89bc413f876f3b8adc93655b0986
-02ac8f2be401b3c9c766a972e645d62912adcb39 1c42855eacdadf65b055d0c2dc706e7785c1cb19
-a472548483762866eb6039edcfbb27a440e3bcbd 9ceb4f12d35c2771acee57f8758ca4529e50eb6c
-cf7d800773a2832b25e9d419ee33fedf9b1b5644 2ffc058e7f0d07ad4bbc5b6554b37275b234d98b
-f4536eb8f3f2d2a7e2c4cdd320264c0afe90f517 ff74d4d486939524071a39165729b7d3ee4dd5fc
-2a89fa973b611e636026d6acb4441a964dd34f19 5cbb37b6cbc93d1b09ca2a9387bf45b1d137af6a
-fbb0e1013b1379ab87e4453cc412decdb0dcc32d 9b2b719d51f4bfa8e167a8cdac79c5dae134b6a9
-020c9b3b14acff7b07e6e75be40aa6b22b3a1dd9 88f09a04cbc78f4735a3653102c3472de85469b5
-2d6bed58b731470f9446da7b5a8f0f8cf3cc778d 050636ca61d5a45bc773323a15d43c9b9ff381dc
-c083c5cd52511bce72fa14d2f73f3b12190b5e0c 4ae18123b3cd9273ac86ee8ac6e5711b132675b8
-abe27077a8693ac2287d9575d5b27957b8a2b0d9 fb96e36b767bb858cd35557063b6ea342da9a26c
-f5639b514f59e42d4ee1789ea80840d395614c26 12776cf895974403542f0781eecb6468635d93ee
-5e37f87f80da34e686de796f1ee031d4cc727782 eb4f042eb83ac1ce6bbda6557e7e403baa1706f9
-862c1cccb39e70a6bea3d77b9b5b06c9843ee603 688a03efceceb81acd9fc9fd84a5a471c4926fcf
-1dc4b70c44532ff6677eda5732b3e385841b22d1 61b2b9050c0d4d607b04d779dc12db5cf3cdcf5c
-21bdf5e33f612abe1b159a05dcd10e9bbbb45529 e8038a0d1bb10534df8799ba53cd88cd60630cd2
-6eb70866ff8c3759ff6fa863e7d2d78ede6837fc 09f593c46f4e4583e3f26b182a225876149098d1
-85cc8ac3f2a79ea89736e5098ed6866b51bc34ef f0f030c9f0b8798534ac5948d91913dc81f59a58
-5209d7a7dcf442e95d2c74475ca7bf5a2090f2d2 5dbf08ba3d56c8f91d00f1ab4b6dd76797bdf25d
-04c6a32bafec722cd26a445ecf2671a232edda3e aaf489b514e10dc710cfcd23cb01619bed9c1a86
-257e6a8f16b59710ca891e172b2008fe5e674006 9307a05c3956fac20a57eab06e453ed4564d1356
-cce6ceead25e835d88702af278719db2e7ba6242 9d18dc6ee6110df0b0bd1ce722a35b5b4b90aee7
-15576271b79ae5341aba9ff9dcf2de876ef73b17 b0cdfee05d57bfebe7918029074b153930dc4581
-5d588ec254e34dff443222f5c1b075640ff3e0ca eda59faa263052dfe04beb5868e2860b4b845fef
-82077f4b18ef44ff8205a3e84fe6aa6f5f2a0939 e045d3378cece77f1073052f9ddd17a22d74868c
-569e847973723b3635e7120c86735de18e0430f1 2ac00d3dc1020a558c8e012032b0cb0a5cf35c66
-b87ed552372f9dce4ece32d5fce423d2216291ef a5834d63a5af7277a947cf3f363a82c0b6ab46ac
-1e1d01e1fee4dad05ad1ee910d17466615d09f4b 2ec8457d03109c937d6be5ab31fd46ffd236c090
-5594a216ef68b9a25ab2fb3ce372bc99d09cf271 a6e8376086dd3c952ac5cba394371c593a864e44
-f4285050d5e0528d5dddd8630aa91191906e09c7 55ac7fb0cb2677c39ef88e012123498c52eeb144
-5b3ba5be6c201d26f65bf73bb00db898f2e0c067 47b40c03ab7d152182906c7803769a4ce6f5630a
-f525fd4d110d94f839aeece22f80dd07162179a7 eca113ba5209a44828e4ac2b686ecbb45a53323a
-c1373fecf04d153fbc94be6780bcac13219652f7 a0c19e74f0f88c06e455b6e0f7a9fb0a71f80f6f
-f1408ab6392d9bba3aeb5f65fa05037918525e57 4b296544b5475ba3fd1c4ee78ef731d10a496e50
-8aa5b8eb5a676da40dbff357dc1a108c13584b52 8c507d324802892b7eb12e95a9e56418c03a3140
-09efac4df6e2ff2e61df1972ad4d195cc67432a2 c6d15fc1b5ac840c86e28e3d79f7257a7442ea86
-b072e53069b9554d4bda435eb95d3c21c64e5063 0c255435d02950f73c6c60e29eb99d9fa8abf267
-1c8d973ac88a1e924d3b963c703f0caf1536c331 2df16d913604e8023189d8ac6030e1cec1314c2d
-5bca4af764da99c8bf28c3d76432102e4edb2c44 9f9f5e1f3253962ac4d208c3921778fa178f6927
-3f1594ac5c09ea2ecd03052fa621a6d81aa4a3c3 e4732af6dc5b525fd78b7c5ca05d9b130bf8e7c8
-cdc67b70daef6020e16a26e4dd295e4aa7d8aefe 3c07299c24fa5a3b30eb6d840b5d6f1fdd51478a
-996ca76ead28f8c2dcf46ad28b84e164bd9fb989 1a029e59b13bc43ee4ca36cef0880bb2d6632d0b
-6f341f7914e9bde28f49674c6db209b3896e1970 466ac910e70f1d540523459b3ef1d6e9d5949fa9
-7030737a70edf0b0e5f543482963306468a51d1a 0a3c5bba505b4741dd83d314a2d8ede587412c58
-913911bfddb69602850ec831faa1907f00dfba6b 42848aa6b235fc7467894c2da9ea4f303cdae30d
-2f993385114b8a753afd270d421f281715e47ee8 b7d06e3aedb6687612ca4af55d3077ffd7c49a1c
-7a154ca3e121cfc7ab3daa8b9f1426d2d1385b07 ee53aaf6e1acdbcb55e857cb14425bacceaec7c7
-fffbf9bc7d81f0bed30d55c57cef197a50a212a6 3977d2eacceb868abc0628fc548a6f05bfa12511
-a6fbad92a57e5c379ee94dcce4789701cbb77d3c e18594d55593f3fc9a57c1fa6ade1c0e2df39858
-4e6d9f7ad14a7406cbb890c25b1b8785bf86bcdc 3e24962add58967eba59787612402778dc1fa8ac
-6657adc2e7cd60b713a22663f1e90ac6e1a55b98 bb08ccae798ed8596cde6bb609d834a3b30c4567
-780e92fdcb342c286fffb1ea03f7935b35c1f9ec 21aa4c0751c9f46a464f4f1f53baa71b989387f8
-aa25d6b68adfa5c95f2bb9a5ef3e967d3902f6bc 2bdf14107dbb921e812a1ce36e631bfc60d61a64
-1fa392106404763729cb9257f6badf5def5b263b f18abd1677bd2f17958f32fe1a516f261aafbbb5
-ca37dc8ae05550c1f989287dfdedc9a262091d1e bee128952b25871abfd82902dd1e5e06374005d0
-83bf57298bf0823c35ca08947af99b08d8db2e97 81acca7a94470d858fc393ef4bbda35eff2d22c2
-18ad56eba47c03be9b1f6cb3611b5bf92b532e51 70f647d3c67ea93f4ef4423ff1d858781ce22f1a
-26264eca6ae716c4940101d28aed8ed552998240 3e566448929d65e4ed719481042fc4f231869676
-c474b830f6a3ba706a8d0b06443b7141486c6c3e d85a6155290daf1e2a72bae7e8df1545232758c7
-c47784d82a8265b0885481ff5219b80e340144bd 398bda69ae77f145bd43e47e3137e3b1bf5e0fc1
-a8635a673f32e17ce909d3cec1cbf9ae9def5944 2709db8cc3eb52aadc19e7b0207766333b32fb4f
-edabc51fe4fbe2b0c42662165e1c91316725d105 e990ac2a863baf40c53e72cd2ef15b0a4ca48b36
-ca8c43496c1f7120d7790d54da8ecc8b43d42cc4 522b2f84341393e7d8882f8002dfd9482b17b227
-0f91b6ae5d591b0f9165a2a30da310c72ac6bf9a b0b9dac555a984de81fc1f6cce9b7f10016911b6
-83515ba2f4021d218785d94332db4ad2589c437b c5108cf3134a67ccd4bfb5c62cf212b5ee300240
-1d859327f815e62cbf6d840f9eb02eb2524e65c8 bc199a9820a7b87d79bc91372ccbd8c600e968f0
-2484ab1474f2c7925cc10836e5fa9b37b9526db3 a5c172b350bfc5fa9c6d5ed6f24393fd260f252f
-3ceee8905829f563d1dbc61f0fed6b34778213fa a78b4c27fb585029420e1d1dd0b92a4260c47d43
-fcd9191abc287992fe8a2dd1a643129d69b31885 134498072d73ed548e740ecf9a81b35a7e2be582
-34ed72a1959cb543149a704a883d2136677c9dba 4b296544b5475ba3fd1c4ee78ef731d10a496e50
-87540e66981472dd99ac059eba5625c38aa3b58c ca77adced98587939d1b1a28f92ed4dfe3625583
-d16c3cd52fe12b9d6bdf4ebaf87abb3d91a2d717 fbccc157a81379b2e594727186cfa23c70bd0802
-626821d6d3130a350d7db4901abc49e47f075cc5 62536b4945af9ba3f53a9c45cf30fdfd6d184f16
-0db59923593a32988cc7c8d6754bf915c18a82b8 342d8c13c9744332482353debe32f04580b2c5d1
-17e446c18eb6e2881c9f720b754582282d07fb56 0f0c288d61931dba6e65b694d4b0f99072a5cc65
-af0ceb62a7ff60206bcecec70b32c3319116accc 7007e764158da556a633ab94269711ed39f877f6
-472e4f48940b6e49857347d5ded72c5ea4cbabaf 76dfa3dd22e2db956df976bcd43fadc78e3a7a6d
-844d457cce59bc6ee5eec82fde233e69038e41e1 04ef1cd6ae91bb6035fa87e25ddb9582c04b9cf9
-bdac5280d9df9f81980b69d17f3d3709ee43f480 62b44b59a6fd75a6ce4e4119dfcb46ce3c5f8421
-9e9a49dc752b0f680a16331f24b3ad6e914d8bf3 db643850ce34fa42b81e313ceba78166543c1bdf
-0e46bd0f241df09591bb19f2012fe34a47f767e0 5d5bff8638ef16fa2f67bd5a374d91c831b755f4
-bcbb78bd78b6f65da25e6c6b52bfd797f48ccbd4 d427086732c19cb95fb2979a40b45ca5f881eceb
-870e00afea3e0f0784216842ab28e0afadd5a986 ed6806b3a230552735a537d291674a9dc267d701
-243e1126bba81321162654eec94be9690e8ad2ef 8f57b908aae3ccec856622b3227b0125f8e4ea40
-320e65d4cf9d0a88d7c3fe24356a48efcf94ec5e 7dfffec5dede8704f7b63cc62f7cda82f523091d
-fe2b14a6c3372763255a3a2a2e37d2bd04563728 96babb78ae1d955c79f534d4883b06af9fff500c
-9d32177092620fa9aba80f10ed04a9b7b64257fc d3aa8d9591c98ba725259bfca7772ad83d800889
-00ef9f17afc51f62f1e46f08a6cd22df6bdce821 047bfc191efa27fd1cc7f0568ee71a2543389a81
-0624de0e888760a64f256771201bd7ccd622cb2d 929b584bf6bd7e30f8d67f956e25980bdc9e52b0
-3c4add89790470edb2820c4f8246b859bc0da2eb 8cb985c2d49035ea3002016b308f79cca697f962
-3f45c4eddbaac3bc5e02561c22ecf63af9104ded f85b25aa4651cdc8b2e5b806f5aec0f765f30074
-d6e34f284f8d49017623c508d7966429fa9cc6a2 4865c4fec4d2732a584a2e29c5b2a61b4ae16c09
-e17a97cc74cc3c02130caadddbc35e2cf6f6fa69 ce5daf405207c9a241f8879eb73bc56059e764b1
-4371e65beb5820b607b40be67070f336c158ba45 1143c7a6aa9a756ed5ffa0b35170494ff17e0b53
-cb279705c25004806121af3f3e388260b8f8537b e9e90528003144eb6b1372ea3d86b67d6ce1cdd4
-e1ca7b0bcb6384fa071c3a256a079f05d1b3f355 ff57872d08ea38ed0fb90aa4b9379ebec9fc76c6
-c20292eb5a7dc86bd1ad44f09630742f932a86be fe55f5243c25ba5ae8c772858619cc37e921a127
-cddd86aa002d992a39b16ffe60b6ca295f69f5b9 c5515a1a693441e56c72c1944c63b603fc8f240e
-f8ee034b87a5fbc8db727c7d33f3fbe3944f9613 731a609c36c3315029673e82c48d7aea0f2f62d2
-6aa860d5c03848cd3d90566c8f80957d52578bc7 03c18f729dc26c785f9ebdf91370a0706fa1e2ff
-f6282889ca3cac3fc937f8669ad261d7208eba0f 923f71ee5fad591f6e5cba72340723b5b390c4f3
-3f0dcc9e28c0ba9e65da470943ce3521d6f9e9e2 3e4b947f79d88c385e8218cbc0731cef0e42cfc4
-0ff5c6af45faf3e467264854036e08b2cd811bab 41a4b372a1c0adceb126cc2ced4c2d1ae028522c
-06f2342e905983aa3b0a9068c2da073c6756b2f6 7c4cd2aa2f3da1cb3ed740669b31dc6519aa220f
-9f350316cee5b140c22189e1e7973be8a8341d9d 3e4b947f79d88c385e8218cbc0731cef0e42cfc4
-5ddf7c271f6d1d6d38beec36b7b891cbe547abd7 7c4cd2aa2f3da1cb3ed740669b31dc6519aa220f
-fc3256726854b37642cdba16592057dff10d6417 f3b9aa41064489a4e592e83e2655853493f00ffa
-007cfb57421e37a9754ff26dcb84672addece81c 91364650a3157a6409107e4f281c09ef253f4730
-ceb1adbad774d92c4d6b1b1268aa3b5ab79e9a8e 9f3dd81a6c4a568689aab8da24205f49651b28f4
-fd24610885777a56ab8aec5fa30b4160eb2f428e 654ab81a3952c6119cb6dde6cb7db2df7ccb6596
-8ecfb2d74baacb1bdef7ee0646be606943917d9d 544fab6320cb8449dcef8fd8803d87d70b9349a7
-35629ccb93bc71828ea5e6b1f6ff44dc4fe0d4af bd5fb620aefdf2a05d7fcd89f1711c8213d07ed3
-1adc2badef668253635822eada5488f0497471b5 bd5fb620aefdf2a05d7fcd89f1711c8213d07ed3
-eec0803b4e43730e346b117236c9e106976f0e21 5fde67b40c0fc0a444e558ebf82d9b224dcd01bc
-60ea8fe15d3e431c51a5b70e2fb781a7320aa2b1 d4ec67f5ef970c419fbb16b77de4f338b9be160d
-6153f77aff4952247eb67ce3a0151f6e4f2a7b6c 85167462fafbabe8fa534ca4c2228ced6964b75d
-5d958617f10991a17014c1972f4e4075e32ed246 be783cc2c64f78ab6f50ec6ef0f0c1b15a09ebe7
-8dce298b1dc79a6fc2bb1e2060a7beecd7469128 6c41a9dc62ad2e4a904fae260b43a409f5a3ad86
-24a281bedb570bfacbf549bb588139724735a9b5 e29859a6c348ce830d9d759c3390c3c1ce788fe4
-d6c65904fc78a157cd3bdd6650b7395fd8cc70ee 38707d70da92edc87c52a68b628c494ea5814bb0
-ce3f0335bd5f264b19749fab24ec49daf4254b52 d069910fb0672fa6234df8b282a870bfd4fab46c
-c432b898fa2cf81edf9caff369f9c278595629de da230fc23b35d7e0b41d611b07850890c91f8aa2
-88a211be0cdfeb4effab19099fda9d3a85433018 da230fc23b35d7e0b41d611b07850890c91f8aa2
-b3f93d52c05c1419066b73b419c5233051a94095 da230fc23b35d7e0b41d611b07850890c91f8aa2
-0b950263a36d0c6990206e448979faff69fa029e 1a55a0b092532eda678d03aa0cabb841f300a2c2
-cf6cf8b5f2cc09c48e5261bd95085c19b10903df 0a3ff57a4322eadc342dd8254d3c4290fe4ac657
-4b6c0e8e115909e1e76e2904819793e42cbd6271 2c448eb38a122a906b7701b78eea1c433e7e0a8b
-f76b3fedcbdf00e9e7a58ec822329ee64bafd87c c7d7fe961024d0a08e50a21e57f683cf678b2a9d
-e31d7a5d49353d8c141fad2138c1b75e83ef7e82 11328f24569432e71df007bd4751022d6c9642bf
-d084caa191f0358cd53b619ac7a409029fb081b8 b7a1d2de1b8fe66a23ecf23ddeecc108b84676f3
-13b481dc0db742ab0ddb45028f32bb970e8c5a79 a2ecff9ed0c35d868b1dd361c99921521ae2a0f3
-7f4872a3aec4984bdf54c173f1418f2307a2346f 30733d7899dfe5379e24abe8120e18f6bc401b68
-a28984424d8117276581af0f6a5f75a465a066d0 0f4424a140157fd6d6fc979e413bd676804659dc
-a7e200a2a6f0a350d2c12c8ea727658f60f8518b 6a7b2ea4c6f7204af2f0cc8aa00a398a097e1667
-0bbcdd372178b6864734fc096a594d07ca80b93f 73780f9586a24957c29020c496bec18811f7f50b
-ae363ed77d520ab65737394950cae8ec741adedc bb96e0c2f455f273cab25833393b1fea514eea48
-4eeb1e7a1187045bce46f52bace19028eff329e7 e552314eac1bca466faef3b0c67194ad503d7d7f
-7e38f6645a855bd56b245253e2f7797b3238bc28 65ff7b9719982a57485f23c62b9ce5a2d019c802
-113fb1132e56f793357ba05ee723929cfca3823d c5a20fcbb78ebf53da54ebe6304d8ac5b599a9d5
-f9aacc83a4859fd219fa7db92006f81ae6344e7b e215f25569fb63ca93fa06a2ea52b7f17739f4e0
-ad77b89422acdc1f3903d34d9a52dd143b793e97 38dfb0c40734aa3eec3a4c190c194a18f69c5e58
-3f0e1eb8a7638c692191c073243c24ccaa01c565 173fc0e4246ad8a90f9190b723ad7753bc22c480
-5335fc4231f134f75c90a571a11a21914e21d82b 1d66c9e67ce0c610a8bf495f465e7b312314f326
-ac36df712dd21cda94fbbe383e227a23f83ec6a4 fa0591b74fb5021db794bc4510c32aaf3e8d1b2d
-ab4fc1d7c4a2c48abfb2043f5aef6e300aedfffe 0ca8f7a4c7ffe785f73cec434432a18bb008bba3
-5ad0cf2af3456564003b494683030893e13f4b6b 38ce81290ee62874071c1442deeb73e6144521d6
-184ba4febe2015a8e1407421e4b9d3996313bd25 1dde3e6881b0751102162413b30cdb456375a462
-9546cd37ab9696ba4c156d7584b680c8c58fafb5 1ef394f60704c9fdd18c15524a6d34f9bf7bc31c
-fa79324fafa1f7de3672d31a222923fad304b35e 1821e29be4b718b44e68375748bee6b70df5294a
-8f0f7abc3b5935b6d59e350240cdd9872c049098 6d6bbe6ec14293678edb4739f61d003328b5f4bd
-6c8786e96221847f94d728f2fa9682a62c9a7896 23de7c15cd838cc7b579dc9f554a0abd52f7e039
-0e88eda3cb916ba4f40a0435c82ec83530001df1 eb4315bd5e107ad0d763e24b07bd75853b2d04a1
-9b1ca7ac6b562e97872808664cd11455a4fb5165 f3855d221a928e3a14e48d46b5d656d4960bb355
-1c769ff3801ec5393e51872b7fa49a9f14eb41cc 142e2aaf4d7a88f5438be9aea596a4323713bef3
-7368c6467f62e1f18c92d9777f3607f0a829a23e bed04603022a5c84a04482c9a6852434c46d5f9f
-9134c2dec066b7c3a5498ccaacb56cb4233eac2d 7566937ab13310f5352e1bbcb4def1120635fdda
-18ac1e057416f0676522ea1ff5bf207fd291ab15 dbeb12483c114667beb9bac01df6884e89972eb5
-909a2e017c0b379f3836459b0c79492670726a91 fc8c66522cb41581d5eb6f36e6dd73aa5442f5ef
-58eefdb8f0ccb7e18d4657805e9800d4e5395dd9 3c4d870fcd93e906233d3a89445f492d6a7106a7
-a6b85edfbc49fc35db3152e65812e0e4b995e474 4bf773aac716551681a4dffe3748ac32333735a4
-a97062cd54c1b16d0c0a9a2dc656b3e8bb8781ed 132b63160ff740b919ab2fb3fac3ed63c00256b8
-f89c1cabeda4f6e8eecc83e7b5b45128deb50d97 2551f5a9a0fe0e22f26eb73654058312c3065965
-bceb7caa68f24d5fee53c5507b2749704d86d9db 6dadf1909348c6daa70aade321a53ebdc087221f
-e08a3f9c34090af4e0155cd7e8d7e24b698ff2ce 09ed6fe2a361ae2f8d8a5ff1582e084dbe20f73f
-5437f2c87968452fda61e08fce556c028f33df1c a87bb4a643e2527d0fe35be6b912f25da3a8eff1
-e8e8f8440681e0f5b124b8cbe503262017f1c4c9 4419bc31b58c94ff2bc296e78a9d4379fdd37374
-bcba0f8945cfe9991dfec44243a1d03452e60357 a58d4f46dca9d852221c6f7289781e4b0dc37bb6
-b2ae190da473ad97fdd83544391516a908c4f7b1 f3a7c5ba1ddb91ecbe3b84ba347b7838be90721f
-3b1e361f09a3d7c2cea273627dd98e2b038811f8 a2c929462a8905414606a12667ae6a295af2a297
-1e373b40b2076c7115de9b3b09bbe30a978050d2 f996e2b6af5dcc00837e2e014e3a7e7e84533c6a
-0503bfca902fcb2f223f65ce8db450a3b4b81d5e 7bcca618ddcd83c9af44f752a7111b66683073b6
-cef10cf1d34a031c9ea05486be479dd1ae5f6ebf aa499ad726932ee9faab6cbecb169b4cf89603b8
-417ebf61b846f173bf662984b7eb8748f85ea1cb 0e82b68914f7ca04f1720041a45cf42274acd1b2
-b0ed5a8166f3eb988fdb2d2a9ba39e8cc4b9aa59 bdc78ad44d6a252252bcb871d20b1ad5a3237bec
-f272a8eb88f9ae5d01d8f6b511c715d3c0959212 626b60ccef6a0bff05af035fbc09e9cc2127fe9b
-2489e28d1eda22bf84ae15855a74f8aed7d987ea 40bc36319962b83e2106054632a2d21e1c007a36
-87971b4c4054451b59abc7a923d701e645a59524 fae1b1d8f06599f0a73c6067d5c93c445d11fff7
-914a441a5047a8315cff382cf13e0883f59557a1 a6f2305a2515a6d999682e10a78deccf11ae5724
-648a84423644c5f266e58d3e3691526a14911989 a8fda233ad8afe0532e38eb71d469cf166b1a5c9
-563141e9d3c5a24b718d605193e41ec86a219207 9afd4f9897ac80e021592d62f5aa93971444cd96
-9ffc92b9c25a40d38559a4fa8f5bf617f29dbcf8 42b8aced25ef1acfe30ed31de1919fb191a47375
-f7ac28b29eec937bd4c1bdc46abb69a9e4af9562 13f515e71fb0431d06aa35e090eb2b3268b206b1
-ad267431bd1d511e08d58a7bfda27186c7436efa 7b153d2981bbccbb7ffc830f0305b55c597fd9f8
-d3e55e75a8aabd2103b4c3b451a0626f7980a3c4 df2b4b24e5d9b8d7216067f0f2c88be7db1d3d21
-ffd8c0ff26b97b45368a200b1afb59efadf64b81 14b0d2c3983790eba06622af13d1d2260bfd216e
-ff28433a27274edfed1b2de9f80e6f3b834ba097 ec59fb7b63e5a6ae7bfb77a4e4765234ccf81b30
-43626d144c4fe87bf6018897bb64620e542af4c0 a15ca0344bfdadb7b010e2805c40c933ef7b8034
-2da060b4ed4fb070608c6c80e17be40592a12155 ebdafa2fd37aea05ebe15a986133a01367c21392
-80e6aa8d75793ba8a48c5c73d44cad8de0f9bdbd 94be8ed27a48bef0d916b79a57c0c219c93d3a41
-fddf0efcb61160d8b47893092c327eee30bd1a4e 57dc08bbe3fc740f588ce283b4723957d8bbd787
-c01146c2f737816a05f07ac7618935c3623be0cf d5581947bd3db1009038b87acd1855b04d48e036
-9498a63efe9e0eb3ab4538cc6f2f2c55275c82be f132aa4188280776d32921d1c001c06923c0cf22
-9a3368da35a0d08363ea9717a9ed7aa7e21175e0 d079f7a7541772ac8466b475d96d10f396e82ede
-db6d54bebacda90cb34e97d813692e9ec7f44002 127fce117ffe8b1a5234f9dab5011899e9e28f79
-707a66c6dad802a1153cebd3c623a50d550f9dcf 2b5a959cdc9926a1cdd56c0f84b90fb0c13fdfd5
-b79756e1bf8a40c3fb879d3d1a66ae4aa2b27b34 4192f193a24428897cae12b8388d87f08bc3c7f9
-a9cfe8877785e7e31d74ef6769cbaa15fcf0fdb9 f9051994ada9c7d32d75a65c047700a5df42ca8f
-6403ed0a917991e554e18309dcd95e124aca8288 207c619d377139cec85b13ca81eb8df5730f2888
-fdbe83b15baaaa1e1ef23898742392e3c77eb2ed e0b15899f98e3774a940ca977a68ef3a632a0b52
-2fcdcdced2fe9a2aa5fc06bde30800fcbfbeb61f b7bcfb60d4b98d0402643ed669b7b097fb35363b
-3f7acdc7d9980c30a30162ed7ceb3b398d804677 b0bc7ea16769ded0fb67214d22c02c85094515b6
-e6ccbe4722cc19e72b4714c8612f73d63c498198 d93fdcfebe2c6d7ca21b2414198cb9b321ae97ce
-e72fcfdd7a52f74f8bd112185d0f294fd0bef7b3 133894b8925c58144a6d125b08a3a563fe57b040
-cb97bda35429d60fe5cc4e23de33c070b3261798 3d4b63b220ebb3976a2afc77f4ed1094b573db3d
-c3d11a330628d65b40e797e2db693bc4ba849749 9bd4a50d99f7e89ee71fe6622f7b0bb11812ae38
-e315a5e5830545766ba2f7f32de8fd0382c581c6 f685a4e16af8fdcd43d37276fd7f512ab0f2096d
-1f4ce340387f0c283a1303af7a2cbb06fe114b77 ccda51c597216a3439b6d34b1d0501b2e6674648
-c1d4d3d6f41bb67e016d0c5ff5f8ca9fbb65e5d2 9aa5f9df9957c75807c51205c008b3cc0484ec65
-f9b555dc3b4f44ac573f4269c9d5f0a353bcd79b 07359c1b5f1e665d4c48d9aefaea1e153bb50f32
-b8e3afc4a7281382c81fff0b97a78b44b11f3bcf ec3907e6e9061874d1d54d76ab509a39b50f62e2
-96b1f1e27e115b7c221e8e389aebb2979314654d 59156187e211f96b92808370b2e367f384623823
-6aa238305d8bc33428d5b1f74acb780b9482b60b ab1423cb33d16271e67e6af0c45d71f7e1820343
-3f7514c711d45c009586bf2a0d76ca8857dc3635 61569a1ec6657f306d47a4f7af12a2dd98896f9c
-de51b629142a819222be3a1616b9ef1d1be000c4 6b1f730ef9c6c3d4bddd66d59a1b8933a20c4b2f
-fb83d44e57f4decddeaa697f0b2374de8cb143bf a7d14c480f7c5bb9b4e9ece4e3c2e0ed021db772
-9cb79d208f05978280671afd1ea16d185f044852 3a6595a0ef190e6b9535cc38dd6e99fea64a2b53
-d91622eaa119810923663c16e656558569140ae7 5b86b8d368b6f3939e4b36e770b0e1c1bb5744a5
-d406ed7fc191d70ffeb04ddc5bef2ed7cf5f6e59 9450aaefd9d89240fede832c417e764edbfb6025
-fa76b8e03f6a04c18a11cc4e55f4857d20fe1ac9 52bd41bbc73ae5c739373ffbc71f849fb7c52002
-c281cfb6d652a160bb6576aeaaf8914ff2761d58 52bd41bbc73ae5c739373ffbc71f849fb7c52002
-be9c7abcaa61365027bcad7eef7e989b8d145060 4f0fa4ebd9db1ad25c38d347de45e230a82efc77
-302a6e75351367a8dd28128cd54d5a5136cf0c87 bd290464816c856ed6157077190d20a528fd324b
-e730a77329f950f1412a17aea54fd4499f1a791e 3a073fb0c6d8e29c355f8f875b82bb0b9cea1283
-7f20e9b230a9f86b1788e40e323d3aaf5ceb4627 375dfaf7377cbb2d3a3f8c44cfa16cc1a7b27c5c
-8044ea08ad190f0b919446204273d6f1773e84f6 329999cf41983487355fa6bf3cf8e958c9a9bf53
-c04c58de687640cf196a3f92cdf3eee377017395 e10c3fb897eb2a31572d5e7e7e80ec1bccb26f1e
-f68d5546d4b05f1875f3b891aa8f146ac0a7d74f 31b7d9a66c49f7444408da4befd5ad011b82b20c
-582ca7efa899f5731a66d456847a6969581b6cdc af764bde3685a8d756b0dc55b1a25b27a63cfb1f
-1f3ddd705abe684d077b84e2dcfe00321d8bd139 3bb79ecc872ff58aa5d07c00eebfb1861a358cde
-ca1bd04322d5de0504ac394e92826062d8b6913f d2adcb1aeb29ded20c6626351f58165af80f5ea6
-d7abb629f3b4ad4c14241446a44540be9d27c568 f796f693a84593a6ce9b8b77fc392f6c0d44f05e
-e62ab230f2bc2e47197e0c42f0d5dd4c38f65328 e70dda208c5bbc14ed6a6a421dcb7cbe96ac26a3
-4e1a643c4cdba7c953e36953140e0408ff6c4172 f7f669310bad4b01fee2b5e6ea10a37d279fb5a9
-1865c0a373099744f1b9a8572825e5d2ce2e558c b49740d22a3300a591df07e74e90f1683153d591
-42c3a96e37cccf9257c0d25292ae0c5ceaad4db4 56097bba55bec10c78459c6e7e00b56b32ef9539
-d73ff3e06b66c977df499014c4ceb0f49ed1f115 5fe701d59528783e8145a1340cc75db8bddd481a
-9f0e00873a6f865289309623f1632a980e97895c 93109b5be2ac55467d41a8b89db3122c120e1ebd
-36b40673f3c535501d5b0f0c5e38b7841c7642d4 c58e3070298892d7ec1fd11a51440ebd8c862d08
-504d7a5bd8d0c0e71c3b73067ec0d32183bacb92 b30a5c9b3f6bf1dd61164effdeed94ba9c997ed2
-616a459801a2b3fe1e1b7708c7604d306463184e f6a27a4885aa0f107033e72255420a0d78765dc7
-fa388b2ac7ee6bf3cd48de8763f61fdf5b773499 9bfe253402d2fa26077fc5479570adec6f3b5d09
-efecb8b7650b0c779948d38aa290cf3cf5402a95 388cd0be1c71168ea73e2141723890b8d2fcbf13
-e5334d1b8aba0eae810af23e7c9f69769110c5c2 1c9c98f5deccad8174717f9b3c2be18e95caf873
-c21b1bb15afd8a82f4a050efed4cb866d89109a7 de36203be33233a1b51dee3547771c26121dfb7b
-4774fa31cd0cf445ffcbc8f556c7f1c41b9ccce6 4b2fec9b04ea40fe7ab152ff4e4fe9657750559f
-42010becf94dba756e659995b35f9d69174f99c7 c5202c0dd91d0b808cae2cc9182398087baaa165
-c6b5447e2b859501e9b67a7c8c1b4f24f4075248 5ad4a42bf9fcf0b96cf8ed512b42710ddfc19ae2
-fc9dcb634eec9217b1edbb9ea6c3fb2906416b9a 079288d8e314b0d896261a4f4471fa2d23eacbc3
-4aaf7769af4812a2cd080e4b3a57dfc3a5330fd2 4b7ac1d5593e86b744aacf09c55fbd47f311082a
-b78f3db5bf5978cfc2d8f72a96e5ffe42c9b0ee5 907ae9a857503adaee4b81cb42edbeb18268a90d
-5a13e9b33d1b2be726d6f640e3c43a87cfd4eb91 f467b5124708c770afc3251258bfaf92350d7c30
-f6e4b36927388d0b02c4e32f7a859550d620498e df1662d99c5649eed5e9fe229127f729ddedac51
-5b22d74e1b65badfe75ce3c66e3349fca566e7dc 950420a635d5dc1876bcb0f112b1d9bc778a8a1a
-39166e254e4e7232ba630cd4ab93276d79cf8fbd 8f5de12afdca4eb944d662bb25b4bae9fd6c8874
-d32b07e1d619da0902ab34b2cd193386ee588f71 7595c85a5b743468b8ffdbdabe8b9b3ce4c4fb07
-6a69ea0d53dadc162719196366f9fa864120653c 3cce3a388fb9db27bd4cc5eee2ab123e41397e73
-876bd39b0dcbb2808d4d3049a3ccfdcecc7dd53c 8677c54785c57fc5ac83852ca11852649bd22b28
-d30b2e2832d7ffb8f9a83734ffb410824acb84e1 984ae997c743fe3544f91bf6173f5004a9605eb4
-9551671ca205d9eb458000a5f924c533d60a5e31 6f769bff5269332c14e1c7586a71138979d52f7b
-404b2388a262aca47c90410b955f20bfa1fef75c b981b37f43cf5a959f63ecc634d5849b26f2a3fa
-16e16f66dd733946b685246d396bd5dc9549f138 82934d9c2e8eb62a85999eab604bdda4fa66cd40
-fc4c4b93d9680782c8996753497161f10090206e 6a7183df23333ad28188fff06810f572c125f675
-db0cbbfc21c957067e65eaaab0eb71f4ba8be399 2c7cc35e56af166d484181f083e5e504b8c17e70
-783d728a309c2aea02c84c85909f2f37ec8bce18 a564252991f54dfcc6ba2ca3cbc5daccbd706cf7
-9470877dc2d5e676a818c86ca8e8a485e25cd876 1e6a7898a892b99f25a1ce8c36282251aaddcb09
-92c5bcabf1af1686a22f25eb8fb29e74e57195ab f87ca7cd5f09b384c243f7a849cb4579b7701b32
-bda5610cbea6b07ebbc56a69c4e112f8031d5147 884facd084491bf37486060be2ca26e5b2702cea
-92b03540d9e38fb1ff60675a39c808f2656a569d 3e4b947f79d88c385e8218cbc0731cef0e42cfc4
-92d1b00821317b6c20f6e984a8f9c92bf6eafc4a c7d7fe961024d0a08e50a21e57f683cf678b2a9d
-86ca404f07397a7121690cf68c715c4d5de52ee5 09ed6fe2a361ae2f8d8a5ff1582e084dbe20f73f
-332b17186d929acf8377222817148bd0d26dc590 38d301bd0ccb23141b93e358c536311103c226ee
-f22ab969c08fcbd3de3682ce9df28453b530bc94 9fd0df070eeb83b9003cca19f00afbfae47662ea
-93846beac61ba8191cefecccf315ecc51956b919 8235c76a637de3128de72315af9da8b1fe69a969
-6b427a693c91dcc5c5b46d3176daff6313209531 c7a7529d3c554c1587dbe1c105bb9ec8aa7abca8
-fbe380f1c7a4008749123a227e7168ba8310588a 501713cb08f6ddd0cf584c4d941c5c0061acddc0
-7a62a6ed73e9d5ef56de2d93c5398669204fdb0f 047073a0dfce60103c78db65be5a41053c31d13c
-0a080c4519cbe1737ba0e12d64fb3c84686c5940 1f15a74f40f42837a8b0948bdd387b576a626da3
-34e013c1d5a1a98c0cdadd57ef4b88ef9a0ac50d a4ed2cee6b3e305641350f8f75bf802cff55dcc7
-1eb90618219635b06933267cdba1d56c20fb1772 97897bd674979a81df000943be7b32d62bf1fdf4
-4056153624018c29a624e280bdfd9ed985954629 f87ca7cd5f09b384c243f7a849cb4579b7701b32
-741a49ebe18c03ebe1cf9df55806dd980e576486 67bc3de756ae20cd828906df5f8ce41a9ed3fd61
-fcb8215123bab9efd1122fd0972628888a250b02 67bc3de756ae20cd828906df5f8ce41a9ed3fd61
-11b6aee199cd6672c50e9d533fb9d2e8b4807515 d32a2dab39997ce3f952a8f8e370127f209bc114
-04f5ddc4907260d668a952128a6810ffa27fa8cc 758f460baa65cdb5ce047b4951d7217dfd1e743e
-78313e48e6f54639c241088673ad5e4a89b58d8e 7dbd09a646fdf5f6a96776b5bd36525a3ee319a2
-c76babd8e1384ceb9d1b88368ed7cc739311ddca 9a0143503ff36871a94d6fea6099bfc97a46b198
-e714da7f784cb3ac3bcbe39386435d27dac70264 8c2a5154e5a2127c20790f31e949090c9bc85e9e
-55df166608dc3058498330de4af20e6f009d90d4 0c5d21efb33bcadadea99c77678a20fc5ed13fb4
-4916c3c670f8a0b354669333d040964340ebe2f2 863ef6c2899a49114bb6c9c8c49240d192b48962
-2dea858dbd55fa39781f86b2d03fff8e49640d9c baf5a730f870ed9382b4b9be6e30e0ba96601e0d
-7f4c518ca5a60cb7871cd876cd1286aa7ab42861 f913ab4526f76727254725c553145459514d35da
-66aeba124eb1fe07f796b3abe63a9aa11878e521 1ff69e7a8dbf9d5f3f5fb92b109dee533238991a
-34d8eb7e16d4db342a1880bdda6918b0edf4215e cd4c3a5370d8dc189280a45408fe09bc9bec8e64
-439c90ab97dd6440f2e2c09a31298141e254252c 0eb9c9e94ed4e2ea0c3ddde2d08ac4e0d3df1629
-76eb1e4a1f9db097f87f49551ac37c27314bf26a 5f022cc4e539e6ac24c00ecd979f542d39f0d6c8
-bb05d89848b98c9d7838405f7b09195944f0816f 0f57d91a7bfaf53f9c66ab4ab6fa01e6a935f379
-93b9231baf82fc4226b3eca132aa38f6a31a4f27 60286495bd1245c3c369146061f1897729e0cd96
-8337d0ad3874f684647bf6917818fdb2f64f9609 0962101bfa7df0643a6e625786025fe7f8a6dc97
-5a1dc6eb57d5e3170e0375d2a1b0124a98c3381f 491cc530c0c4625caaf69cecc64e3e471a17a5d8
-417623b9b6a4f0e000bade9a20d31c73df9f475e 4692e0398e1a9df325da58f798aa4b276270158a
-09b265536d2232db1a3cc2cc91c3747421b228ef 14dc3d04ce046884dd1a894a05d34048af3dea4e
-311469ebc82c8007e84e0d5f1db0888a0af4e598 a314bdd53882fa93ebafe3616846a3674b70a195
-71febed2e5677b68887d6ef9970717d3e670d0f2 36fca13710724f5c36320e6a478e282c2cee9ed0
-0d77fd9e6403a666109f423f495eee4a398fdd59 08ffa0a1376a7efa4bef47e93c2db38833d32b34
-e9cca512811550159b883ed2a853caad800ecfa9 a2ef34608dc4e6ba2904e383e7f981578c4c33ae
-b6af412d07dbde2b036d98d452505a078ddca28b 88de2ea714f7e028a6eeb7480522bdcfc9edb74e
-53290516675cdba4b9dbdea0eda24d8f9d197eff 4feb25e7ab0336c0101bbb0acb611f0e3314b909
-014389459b3da9ae9a750124c2de38d7ac27317c 6a26eaf03ca1257e8c48fa907dfadfde5d00075d
-470248005860b7be53d3dbfb0de18cf78c0e6766 84383a3938833fe15131bbd8a727d4663a5b4f69
-c1261954b4c07768aaf780a562dcc003df992843 d8a1ddf0af6524e539120e37603ed628f9beaa1b
-3b6aa3b49fade0b7a02dc65f30e8e573861ab3e1 2fe47b4a747e19cc77f7e45b3531246bb86be62d
-81457e6dde9e171c48abed6ed72b4833459792bc dd0f0d1edcb0c4d3a90d6beeac098c1f2c0f59da
-5001544f165187a85b448cd78e6c9f99d0bac474 c3a0d81115243934a0e471ac47116e6416c73cda
-b6edf54ff3484be5be3371aeb850a5086a491038 672b8267717ece93c1ae5e3127137229b63f47d9
-4abd00311d4943291abbb3628617b55e813a9507 edd2935d38266087a808fb9880737d7f3035a91b
-bc571d57ff7c80d10621fc5ec2e176cac2987783 c1a65ae24241b8225371ebcf81d20eb0361955b0
-54f66613d76cccb6ab8a0bf102991cd06f4e4b11 ac02c493bfb7c90fd2279c245173689cb5b57c0b
-08397c6409eaa71362c1ab6d720df73c881b2a7a 135528064fd4eb9494045189ac0d5118a5efb0f5
-33d6370814fab055775924067f933e51f16ea821 337af75cb01ecab61875dbf2d079e637fe57491a
-f1a82bf8bb6d903edaf9c68f7f34a2f03fd4b45e a9a9dcee7a2a082b232bdf672bab6410eeccc983
-a5c213f9845e5f3040067f84e62bdda57eee5cec b145a1cd417995bdbfd96c0f1c4f2f83ae8b0349
-fbc7500cbd33c7130ca2847824fa89b7d06e6f7a c0d3529b545f05752e21cfa177a82109e70c5f8a
-ee3ae309867d88936e2feb28a96a5cf56f8a5233 f1643961cea9c15131d0950a336c64f691118538
-f358b583cd2921f3720d8c64d3fa46a6f9ebd273 651a73804d3692a3d4e102789dc943c29163bf63
-b7cb436dff0e88b4b64d2a7f11890f69c676e9e1 0a4ff55e021bca0345f0a59e046e108bb4f447c3
-5e1d7abcd8a0c4486e319d737d951b3a8bdbdbef ee9a61311c421f2aa0533c561a02ef0da7400c1c
-33549cd8f473078f1862a171e2915d3d43f36d1d 31a42f7f972809f999698d2ee31972fcb8957dd8
-187c45254bffa842697c438795964c439d4ca91d dcec32b0cf042677014aada320b7696f2169e122
-fa7d5342f9e36383064ffcd5144d733df99ef245 81034d25ae74de3a54affbb1d7397f4d77b49e08
-fb5d3c53a1530432ad2cedf227e02cf48c91e2c2 11aa6d680f39f3234b5bf078683453864d9930cd
-bf611b486077e92f81f391a5badc6cdfdb64f7c3 edd2935d38266087a808fb9880737d7f3035a91b
-b14845face05bc33378628ec22c4bfa31e4f95b8 52f2a7052bf0cdb36c02cc58c720f282545293ec
-bb312b4e5c10e2525267f9093555da9ffb0b192e cd71298bf0f589f4d519604e44fe3d09793d8d86
-65198988771f1ac252bcc510b75a1d41029e5a86 7ffea26224c4fd503650ebe5b67c46b415b6c65e
-218873e0346b6c69d8d020cad70a000bd7839060 a1796cb5e6d5194c660ceea95bb59cef0773aa5a
-76771651501e551b532ecb4bd2ece105235cc486 f0254cf4e598dff8bfd3e0b264f70abf1cb43520
-5d404b1d499bf97e96d589406ab7afd9535547c7 27bc4b74ab63c434449929a8bb6c81096a53dfd0
-5b49d8bd6f762a59709688d00d2201494218eac2 2fa04c4f10c202dd011bfc76a9947df0890fd0ad
-9cf31989e740894405c0b129da6bae10d70943d7 a7cf5e65ec0cd8ee7354d0dd7f67487e390e08e6
-ee207c1a0828bdf738b24e3c349fc3597d075633 22327cb79c1245656417612c6795941bbafe4082
-ad1ef2e51497cc648f653d4d4d1723e0d413af32 4fbfe7d2a2d290754045ac12192be054537b9f07
-f63f5f150f797a25ee7f21d7967dfe44d25a579b 16a2a9be32740e7f0016314d35b684087d43bc2e
-f0dbc7d701464aadfe952218a08bb9e22e7fa346 f0c0165199ec2c2cab5d5d5a1756ada1d617a637
-8fb84a6ca81ca3ff794a24ff2a42a045b3f49a9e cd48ea66b418e0608332a28e0e4e4a26cdaf4d8c
-f0baa26d69f0e7a9086bffea72a4f84a15c06736 3032f1c0a769e9902259f30546e057f8d240f0d7
-9637e33bc5ed6753a2fda51b0ed241f5d93a27d7 ed7d1e75a834de957738b52a69125889f4627bc8
-dfbb8ea34cd66c50e1a3aeed9bb9d2662bef2311 20e953c2c12a3fb30dfc0730ef7f6a94ef90d039
-2aa97c6e644f93341bc75e4e47517cf2b2e49707 c4a5d2c12fb79db0e1a530c7b4dfcc5af1b1e34c
-627344a7d3dd4919f911fb8cc287e8bebd191dab 35450d21a3605cb006532ead9461e0ed150e4635
-d82edd748937fb7d28abf1affb0b903dbd104d2c 11501cdbf86c48265941ebca2659575a604e3e36
-2a92b8d8bd87cc25f10f6db922928b289f4976da 4d393ae5054ea81deaa60c69b52166ea6c1de1a2
-ba54e05a408b061cc84e72b0e7d0052ed2884f72 43448991c68f1e5e6f8e636402d75380fa3a44d4
-71ff1276bb1cdb21680a2f102152b6d530e0fb1e e16e32711cff332baa623d673257f10c8882c87c
-a380ea9d499bf2411fcd1d85a9fd1a53516d6d4b a9d4a07e0778954a53ee8b054802f7219f4b8694
-be26e86be7f08ff41d91181dadec699cfd6a03f1 5c638558b3bb0e0a716ed5e605a40cf648f72ce1
-46d6c4624738430faa502134ff0827d544ec8f04 87089b4b7807e2180b211745105b35c14c47836f
-cb7a8a94c332f8e67e9b3d7fc40f04147218e4dd c4ae8d972a3069d14d4448968776d27c819cde6b
-b8d47066a793c69ee7a880f38728b3baa5b1ff00 10fda26ef7bfc5effbe5e8567374826abdda8137
-db6ce867d6b0aa9fd1fc9a66d387d0dcedf3772b b6bf9b2fcc4d5b4c76fd93f449fb9cbdd39592fc
-914db900403bc13100e585d6e2ad31cc3ccd30a4 70336060db553d991726cf75a40dc70247007fa1
-8717ba1f5199c5d99e996be2e7128f6ffa9f2fad 9fde3a30dcc689399c0688e46e37b45974a59588
-3a252a328e2e871006a3cf7bd13972826cb9ab70 2fa01756d3202775498b9e299035585d7eedf752
-aa84978409384f845a0e2fea82c0b4daedfb952b fa9c7fe2037a5ca79523fa82ae251c9df8804e57
-e90cde5e07e980a4f8e4111608c0b81ef76aea9b f1e8dad421d2bfd27a7d01626a991e5b466bb984
-684e868b73c4639ed074605edf74d25e46df0720 ebc812546bcf73b5fcb64b87d2997f32a1a88a08
-ce0981289e0dfbc2cd28888831b5dc79da3d8137 735e608dc6c9db3798914e08dd8de95341f9e717
-c0a953646c0c209e071ad5bc7bacae09c205945c e7a4ef1330fc1499518a2e07efe8fb8a38234a78
-9417aa363c006f1381c71ca80ddf4312b1c8e6dd 99448a39ded119fa45925f1435b9008a483c460e
-316783a256eae1a2118138fba671fa1f0cdf8c4d 057fe006dfff0663284180150ea49e08c0329a10
-7401ce34f7ab9580676271d07bfed2db661b1b87 dc97a87917b477d7837b0645cbb74b2f100d0161
-ebdc60985cde60deda2a1e66fe8cdaad89fda77b 251552b9c14c89c5063d86485a2f8aa222306a6c
-134b8ded51d0ec304139264dba86a40a21cd344a 5e34fb35b3d3a55ab3830ac1a474ea28b6d06858
-76b2ae548c383fe13ff05866f90d247a4bdf7657 b180942783aa20a8e96fb85a8d8b8e876c60883d
-d3ed7cc74569a294e72983214cc7aa0ecd8e273f c5edd8974db66b08447e372d182f5b23db1134f9
-76ebc0719333d7a10cc04402b37b53e62455277b 9477f53d5c676e8fae263516532c964c477d7ff0
-cb8d979f65cfa9121fd33ad6a8fe100292f49739 18d705f70c0cbbe795118b74403932caad1b7476
-2744ea9de5b9087922c2f83d5e7f0ffd77ce1943 00d2cfbaf51bb09ec409f256a360d70ca96829ba
-36c73a33072b39342b73cba60347cb955f91fe44 d0bc621a5a5200e53b8ef4847989a54d2e577595
-f21a251a70cc3591848354ae6fddaa998080fc67 2b22a3d93247fc9bbb12c649375ab27de4726aa1
-1bcc87ea0ad01e4e968f112cd76beb0f136e20d6 c467a923744fb46d8e2896b38165ace17d898dcc
-221903b0b829b715a72acc48072e7ff36ffd6206 2891afdb40175efcad8ccd8bfce1e4fe7209dc5d
-4cca402c7d8bf7058710ef7fb5bc50ea1afa0f8d f3b50ae38fb906ff10eff1279c11b3bf89605b81
-99b7619cff1863dd76deca94d87e9d648fada8c8 2d374b398649357a9c84ee458b9472d675cc8792
-e3c6aa2b43b4d83bbee942a9ff5b2ddf1bbfcf2b 93afd2229e9b9b1c05078ecd197decb4289c613f
-a51b1fc51f18df1a0178863d5b9bb86c48dc1d98 00c2eee8314065a1abc681ffb20669480d53420b
-0a5fecbec9fcf29036f354e635293a9affe4c878 a476705db990b4678dab5e1e4f7eec017d0941f7
-0e25640affc9910e65d99621f184c7fa0487ef20 5e83cc82d00a07033d4c464edf8926d268407fe6
-e8840b2f94225b8efe28979a41f05d4b6ce40791 76b15256803f847e230e44eb3e05a79cf8998e83
-d4001b60ae9fd0cca3fff4ea9c8dd6af3bca7c3e 25eeba708953920b17c486ae2180932e24b1bd9d
-3f21a2f314605dc25d6e14bc5f141680bb6667e5 70150866e7f1818bce23f397e88879f68bd4e8aa
-7211d65b632daf3b4230031d0c6aa230053f5dcb b3b2af736d53c8b9ed6914a415545511868e3431
-cb5218c101a13d09df0faa5cb50db99f70de615b beb4c4a1f5d5f9f6b52b2d9bd5cbbf6acd64ff20
-358f7e8125a659c1a76da81c39700709acba3f28 72660b9d0fc33c1b9a0a774ed9cde5333e3215aa
-68e1c47314fca9d1600089646040f42e3b09a955 aa7b770fd6cf68b727b04fda87f7cba913594e7d
-e759263e0383a50ad81cbdd45e11c4a7bd2025d1 e46668edeb20d6a846387c3e3d61cced2a47f355
-3ba3c0bc68a6a09450be8ebece45a6935531617f e5bde89e63663c1c5c8cdf256c296e43c2a300bc
-6c05f61887f89011f9401c56c2a1e76764bb3692 2de2852d4090f5714c3144c50eeb905fc5cebe25
-236689db2633e901ca03f683a3bb5624c52d8d35 6d7308ba3974b269689962a8b0477cc0f9a70690
-2539073aaaf3a8d995934418c294dc87fff3713f e85f328279f1870f4f77f77d4ddb90efa9550538
-a7c7fab44e25fd0f4f2d4b53d266ec3ba05f9d7a b4fd41909cbe3ddb845fe1d5bf83f7847b954336
-e235e9c0c3c79a978e9df6df6f69eebc28b71004 42e32d435a38e419dcf2979e7e5337f9bee3fdf5
-61065e019bae840efbda03cd2f7a2d7d086558a2 655ca08b83eefe69e6879a7d55deec1c02f1afa7
-239f6ea70329590103dde814558c898954afe46f 13112c14680df03b1b71c4d8697dc57baa556c59
-a10badbc592900c0ab71c955db48cfceb42b0722 817fb2d9068241294e423ae39b984989eac8df2e
-c90f4ff6bf331fae190c1bbb347f5e5700c096e9 601808ea2ccaaff5b6f1bca4055b43da88be8ce4
-878a0a30ae6f1fd0f2aa3c682c9ba0f51c74c720 2185fe31d9e411d70636f578f6751e593773ac76
-7993e1e773c2fb8b0a64a443365fcdd0434911d9 99448a39ded119fa45925f1435b9008a483c460e
-976ea158de62e268407c96e9a1cdf35a8c193af5 f7380f6cbe31521c13d16f9cd4adcc9c9ed604e5
-974ad2b8444c18d99683291f84452fdc858a47c7 a46f498db141dcee165f9e14fb9c481e995ec853
-057dbc3ee97e9e037ef269349a42409c9f689cf3 06fe72846589e6ea9e85b41803836f5b903ff51e
-ee5330128e28d00738cfa3017bbc16a729200751 7d7ec04d784bd15033455d76e6c1717f64ce844e
-3b164f6ab83b0b03473181a554fff25e842954b0 5d94552b62ce75ba1f1efcbc491599364fa6aa30
-b66ef67cdf3e637978c7e1fe2f8012757e8be473 80c4a8ac825a35c6d527c7c5fb51eef51cc86b43
-f9ba3fcc2c0d20d59d7b2eb7d898edb8ebf4cb3e 4ecb7017f95b259b8bf274ec91e4aab8c20ddd96
-e49be33c33b38c1e04bff8ab802163dfeb3df828 e78a994571905637d68cdbe7eab4197d669df309
-3ec2383d630a78da9fbe6f6aba0acec02765e17d a98ec8c6420bea39a896dc341cffd8f4ca8ad452
-0febb54cf6fa4c2ee9763915f09834a98831efc9 6f1350f8fcf27fc199f55d92d1de2ce949272a14
-b81f08c3e2b3932473d7d21e3b17f78cc476716c 7fd29f5d00a45756a64887546054d12bcb8dcc28
-f2ae4663c4bf92c2e27a0bb8b29df30faac0fba6 57eb09c4cf962ca5aeb85f75daa742f6985f3c14
-b76e0ebf04a1bea230890d2e3cdf07bea2fea632 57eb09c4cf962ca5aeb85f75daa742f6985f3c14
-dca182757a90a77f0190f11949d3b9ef3f28c49f 21ef3c1aa784c91657be21056e19e59e46314946
-001090b7095b148d939be0fbfb56b86a2b1d5aa8 a10414a113befa710a5aa7d9ee00eaf773ebdfd1
-82dc2f50d0185bfb5ecab87086e0ffafdaf6ac0b 953d5f30479361dd3efb727e295ba6b85de74b90
-db3769a6289b29960453dcfd4911b030f587a789 84b87df2a2d7f1cdc7620a0b8f88c31a1080c3f6
-ff89211e1cb0fe1c94659a54a41a45a127158db5 cc03a9f8beebb65459255dcab63d5664eeb14752
-8e9c167af0c476faaaa644fbc9c5310529f319d6 7b00a2b2a9d93fffbf0115e54ed0e670fbd7344a
-c9c4f23497c7641c1f5f02de2969193e09bd1c90 4059cb69e8cc1e3610706a99c2fc89f890566359
-43ac0fd93b8ec7a34d9e2bdf1c00a74e96a60955 44c5b7eda8e5449659a382c857f80d1b10b82bbd
-3f9c541e3536780440236e1a4d8c56e64792b6f0 79e1098d19ff271d26bfaf1e8de6c7e1b453b90a
-ac4482433a3b7834d11a2749bf2112b75c0124df 024eff360c1be7303949c84c8ef18089851c8ede
-aa2b7cd4d21731ad545ff5d6c560deb14960c955 1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7
-cf6c443dd247cbe441c93dc060a9ace5e665d1ba c0baed3ed5078fc1f6f9ce7e854d87cd5ebdad94
-7469e3cef3d9bc26e00f1c2e98c70d009800673e 94a20ab790518ebc0e6b6c39e392efd2bafb15cd
-993e70bd89b333506ce260b6277a753e41bf7ec0 9cd0fa986b870fd82a2d4753a126186a08a92d40
-f96277746437499e492767dd9ac163c8af0ca2cd b89234729964e8fd06f0c4d57c385cb0e0d81ba5
-bc6a47bce77b8ebb97e54a09a99b69b56e33416d 61c7717a3b0501440c1532bae2f8a9c73281a0ea
-afc098ca80711b7fa62a7521fc53d42c64df5f00 cd8f855f917bab88617e48508ed1c9ef652f5db1
-b53d569b874904b0fd718d409bc2c2ab79510c37 4ecb7017f95b259b8bf274ec91e4aab8c20ddd96
-b8553707547c7df76fb7cd5091100aefb22b33a1 d313b378ef28b1338a5257e28be684fa552ea6bd
-ac5b664344e79a945a591ee935188a3e91feb6ed 4cca988dec686acd1ed2dfea3fedc91803439a27
-b5a407c3650f21ac92167751f21c04dfb5a74230 e7fab808996a08a07206e1de77f74327adc148c5
-49db4afde3fcf7611199aacbaaf169bd154cd062 5080c99bfb4f5c85dbd3c27dbd5e27fe8d213d23
-c8ddadfffb91b14b8a7ed2c230abcc623dbbd212 036e551d5efa310ddb92874da352f0cda8a48e56
-4c1df2a4923d7258749872ef32f945b5de91e6cc 586e5e54847ebd15eb4e60ca3c55c2f87478802f
-2d1cba063d4805e8233efdb96ac5c288baf5bd6c ed67670db18d18c00fa46da5303a68d7cf1bab62
-1f2a0155041b7c0114afa16c081fd1dd401bfd3f 968f9c2619174bd45506901e4418f10373c6f331
-f1faa60ba2c5fa6120078d0680f17030a3b803d2 fecf95cab85774ccd56e54becf7f1d56e1787080
-9982d6543247a8cd08d8dcc2f408b63704f5c0e3 fe6cb82150c2d1ee805067df961558a334984ce7
-0805525a6fb8e80a121d35a2284720070288288b 5eb6c2f410277262314d130e71f8c3e4d771f3fa
-41817681ceff63b26fee83e055e3218acd5a43c5 aa123eb43c69acace02649835aa0d62d96386935
-cb826cc32936e3907d9967cf5075b530f008f578 d51640d1670059e99bfd8c214cb84d16d72f050e
-fa4355595778a8296cfdfe1a347dfe249b3a4464 057e1c6474164b0a4b1ec64053652a2b5f1db185
-1b0d81a4678e240e83e9cce01bd0f0fa3d074a8d 2f2b36bec87520d1ce735dd7d3c7ff5b13791fb2
-2a666ea3910acb136fe4f35c2912e7dd9988aa40 fecf95cab85774ccd56e54becf7f1d56e1787080
-b70d446a1737b4b84eac05a447b94c12c865de75 7423f9c8df8e1fb43959a5e23c25daea4351979a
-01d0d09c4307f213294c647debfa36a0c8c2e6c5 cd726f435a0d2c862479c71d620d341e43347e66
-76fa1d86715435c87ea7279f615983557042a957 baae60be112114498737893de10bd5126f6018ad
-06847c778fdb5467403771ab88b21326ccc87a03 910a3e7e51cb4c407e5c6c037c615e52dc8bb891
-e14a4952ca046a43ccb0ffd49b330bf2d0362cf0 f0203ed16278854aa993ee9323a96d863d2c75de
-e4d823a04c6b5077b6d47d999e7e8a0bd05a5583 8fe8f90d3d410d717e178f5f8a8d56cfbc10ed62
-be05519cdc0166d0ba82fd559e8f2e8921eb573a 433bef2ab2043b6b89128ca7f26780d7805b7c52
-2641831b54c1544a24766fbcaa6765bcfd66c21d ad295526870ac8daa04436ae986f1162dbffe83b
-83e90dbbbdc5c34654ccd524a16b093220d3fd8f a4ffba5a9544cb6095961c82a1bb8ee4f23a56f4
-d0906a2dc2791418fdd0e1c31f5ba670cddf36da e1db9196274aee5d50b979097cc79945b5133b97
-e7f41bb8d12ceeda7254a877078e5dfb1d607425 fec13757e4061563cde1635f80f3de414e784349
-ddbdb2613e5fe6ad3d6f645669ab9b647bba4c05 48ee7cfbac5663f1d89cbb38519378b70d88056c
-c18f432fe0ae3511ae0005002888e16e09200118 5a4d69f9df7f54149adee0360eec668aa6793bec
-6a63b913f274761bd5f9c6b30305bfb869263429 4e5f5d906133cb376f7de2ae1492b3f431d37fb4
-197d9d91179ee45065d496d0cac009fe90ab20c6 e3736f92d0516d113389c95e6561b4b71e516df1
-8c96e0d46fbfe76ed50135aa9c0166eae952d599 34fe0f20d29aa40733e2b72c09013b1f594f2b9d
-19c906e9f42226a02faadaaf922512b10c97ce03 ffee071b83712edfe29c0b0dfb0f6392014a9a7e
-624026a46301161d88dc219caa68c503450eafa2 9119fc2ed9ecbeff31234cbac79bdb9f48a271b2
-c002844d26371a84e04dc414c0d23ff91296b2a4 b8c9aa203d15e1267434126b0d492aba987fbeb6
-4ee1eed2c196e44c1e55b7ae8fb84be600d23fa3 86f7dc2b995a84af95c8a64ae196da4adfde2e5d
-63e5ed85a7b3047dbf437d12a76bd99b425a91e3 19ba6e9ebfefe3771854ec16b10cf00ea3dbbf26
-e22b1d038b0f16bbf1bc91236e50271b0e9d50dd a01739f44065ef98b80d632301e1d252c1ef84b1
-cd8cf3fb8309c43136919e9160a09e4915ed6887 21d57b1b0e9739f61cc6fb210a1d872bbad355b4
-422b875f0e6681a10c0a9425850aeeddf36ced25 73a41806465c1fdaff9c6688908efb19011913af
-5253ba2548531bef83ce78e9da4041e5d4b8a609 f053c9585d481ad5683b5a862cabe5bfa49d163b
-fda832f29aca7e72db69d901c8d069264571adbb cd3c6d9a5e6f49de31db8334d2c6d6e9447cf519
-a57480e0c4e63c767c244722a3c29ac1958c380f b65afcd6d3adb18c49a8a5d61013977df6c6fdb3
-26ffea05841b1ddce8656de6f72e93bc17b760be 08d48d897ccfba1110884cb3abe11896d2ba6002
-0917d4ed15d518d8a79bcde924113d4d46d92303 6ba25ff7d967b3599ff19e6db20188c6616b61ba
-363b95ab3d49dc63aedaf315263e652d15fd4d59 2de376a3a8ca15833dbaeaac98a7b4c4bd570a85
-af788dab23daad39abaf2cbffae48d13c0132bf7 ab599538e1325000ec013503d86766059a08b914
-03681d4c1c382049ecd4d30a8c6028068d83a547 4981bf790e6b583f20336f2b5d3a4bb22c7b99f5
-24113cbb876e0b050c7b326f8959e5f06e4223f4 6a9d9a0c77059058c1df03fde682ab21cc62477f
-b583e769bca577900a2edff845856dff8afafa4b 72e4d7f83dd63812ddd9bd16761f33651670666b
-e00cd4fd3c02acbd96ea47ce558144f17cd55ba8 a52b9c014623f19158b7847164ef2aed29e2a9e3
-13bc3d60829cbb35470994627d536bbefaf0f199 c38cd1f13cb10fc61a832495bef660e27bb41f57
-3eea03c6530355a9be68c9b6fac2f33a37cfd6ed 16413689c678c0f3dfb9b91893babbdf787d0096
-f1f4db55a35224f85ed8c5985bc42188bea35330 58bb35156c873f0e8b468d0fd02c898dd1934a0d
-c1f8da90c3e7744f75e29bd31461057fa90e0368 5d7cefde14aa0b4394e45de2bd433889d90a617f
-d96d346e0bb2b246fae8aa16f7b0c1ddac98c87a 6b9f8404a0c3acaba9e17e341e3a736c9f48d111
-d264f13f20b25f8b2b06a863c64117e7060fb0a1 07910e23ac6a74e310d01bd47519089387d9ea63
-412588eb49a283bd5ed003935195ed23113d83a8 77b5f4461a018dae815458f467140245539a02d8
-58fac592e9a45912e498e73c0758db4dbe0d1f5a fb1db2ce5b781e99b4fa48976a9d287408c7cc97
-21d7c084ce58f6c359999b91353466f7e1c5733d 23ddb696f795edc5743e05e9d9155211bb03f9e7
-6d4bf0879d8eac3f008e123f605ea9ce738b5356 13f8207f1eb6ac6eb6b46e9d35109f8e39e833be
-d65bcf4f9b95b99262ee7cef9515de4c33065773 fb085a04b7fd177ff79f29812708a2c0cc8139e5
-cafef5f0d8743a3d95be3495722aa1ebc65ab618 41fd65fbc899e24c192dbbf6f0cee825d59d90ab
-add05baa33715dca6c87f5632bf6e18a426df99a 16413689c678c0f3dfb9b91893babbdf787d0096
-a2f71a51661538e0613b8f5253dcd491e6f5121a 41fd65fbc899e24c192dbbf6f0cee825d59d90ab
-2cdf5bfdc394c17856ab234a46b611b8468ec36f 16413689c678c0f3dfb9b91893babbdf787d0096
-6cd33a7c6be956a987b0d9d59ea0f48d69bf6864 41fd65fbc899e24c192dbbf6f0cee825d59d90ab
-ede7b0a862ba2ecb94c403a5ccc0440822ac0754 233d2bd9b4e3b9f02911558dce9bcd20d8e97273
-c856effd53d14bc2c4025ccb3988bffadd28885f 788c610752f52cf901bc36f9fc28f5cac7afad8f
-548ade52f0065c3aa66892f42d3100f0ad5a4e1d cdac10b9c7c0d35365b4beba68a0603e2988b971
-d806e75a7a20e718a4f3fa44d584ecbc77c8f97f 02534b0f376e7902a305b97124d7ba7c7270197f
-7968ff8ee3fd7bc9047f48083efbea86f12ccf97 9384e8782cbf171dc74a5824207c14162106a433
-d9402a1622fa022ba981a1346950aba2457ede37 ad0bd5e33243c7dd93a33b4717feca3436bd770d
-d749a8c57dd89f92c65d83ae1225c1379456da9f 7ab508c7147d356cc75606d1ff149a5ea784f8f9
-eed28a1d213e716ed661bd52d07678658960370b f4b526f49f51b7636438deb0292523bc76832507
-dc3afe6ff64106f8f2f71ec46818045ace2b8728 53ba76d55bc5ab45707af5b1dc84e2310b4caf64
-e30a6bdeaea2a1ccf68d820d1a933153c695192b 471f29c44dc19ed7b7423de114cf907681b4278e
-af495c9b6dec3d6071a61c47848b75ed82f86cc7 0563a4a46e7ae7537929d1050eda61b85d97ff97
-d718b1eb3a6aac4e0a73de9edf393fea564523bc de0eb0762dc26086816b97b415a78ac03db404b8
-464db0d7eb9965444d96a851e6a593b7288929fb 5c6ab3808e367d7edc83b8ee0a48125a6e03710b
-1524d0bda0783c1f7abe68f9cbc90d95553472e0 125c356babe39b02bc96fe62cfc4fb01d76b389b
-98f8b4f87a1fb605749a036cc01063e4652edef1 16413689c678c0f3dfb9b91893babbdf787d0096
-a34a394410ca9798b0d1f600e2ac13848d50402b 125c356babe39b02bc96fe62cfc4fb01d76b389b
-c4c38b47d97c4dcb95bcdb70857ccdd096a98b75 83ccfa2b7631e2c3e9737fa68faac9ac2f68a2d2
-e0f9437de97a227807d3cb812a230a8e1306e3e4 2d05884d1ed49868dc1189311540bf8235c498dd
-61be5f0540cfad94f1ba9b66f5e4fa6adef35719 2d05884d1ed49868dc1189311540bf8235c498dd
-b7ee8ca811e2efe656134eabbb2ff8a0e83da8a6 bbff5d32bbda39be00c0afedc9097c20b8d50cb3
-a1f23604e4d586f2659c68f2a6e7144c76cdd890 bc5794983934a88b5e9d0535b47efb16d33be94d
-839a0b7edd8903fb190c7e0f6fc068cbf1f8db92 b968c2c91ef70c4da889fe54e9d2f78724ce8e52
-8a378c69c2eef5e108939be389fa75cf16409c06 eae9260ffe414780fde93e2f5ae90bf8d7db6824
-d199c7e16b9f2feadd9d8eddd6a6ff9f95d6776b fd49f2e86b72190dc4450a934d3595547f6e46e4
-0270b738c109c62063f7a079dd3da5e644afc1ef 0adca23bd5437ce5aac2ea86b7bf30fb868ab2e6
-a6d92fbaaec22389e9522732c3bd3ef1e39664bc 31089eac97fe2c89743d08d4efa6d7d915de3211
-6bef0845c0bdd1ff5ac3ce722f17143d91cb07b6 b3fc0168410f70c2dde88fe0521530a7a7a9b6b2
-9aa928bf1d31484139f4b22f1446debdeb0041c3 071f68c064283ee4e0c59e34aa15850757e2da62
-cb1fdb6e8195fc87edba4b637f8689d84c861fb4 59969dc912ee0a4d6a1459d89d373fce252f9245
-1fbd10ab200a7bdd7ad4f843ff693a16b17f1181 93aef42c5eefc06c8e07003cd5166b9eab697c63
-c30a0d81f40095be1bf4eff22966ce5191359f44 b7f47356ad41fedb89291415d4fe947243675e95
-8348f85b508724ce43a7a1039ae4c435c8716e26 a74ff17952b78741a7f2b2fb2a85276f61dc2ea8
-cdc9d6ad1c9c59e8d448f976bc6e4f64747e9f6e c04331b287409c5583adbf95a5eb1f01c83026d6
-3671a4451adbdcb8fe5eb2a4c676490bec975338 c8dcf1170d9211f54d6e2091c48f2d8119b6aae5
-400ab4143ec8f05b78ab998742588ced59f398d1 dec4a37072f90d96cbdcf8a4709518d6a61ae768
-08894ab3ac95b391c21b1ad6abf21ed372b6e42c 2ffde4b9c89cfbb3f6ac1e469525d579c8f8b5fc
-bb3d8232b00930221232ec43d2fc4365db3527d1 863ef17c540d1152935e26f57e764dc322b168e1
-7044242b25c95ded871434eb415d6026fa3b021e e4dd2ff5ea6c604acd9dc7e5d9ad3b2b181e4af5
-b7e4b4ba350c693e4284b9b3aef8ed5ea7a2f91d 90da2804f1772bcba1b1f95932bd0272b2d7e6bb
-d5c70d78299144c8dedc51287b997cad2b0fc4df 012e7388ed3b9a3950bdf234a705a6849efa6234
-5d64b49afff2a36398729158dc869ffa75403b09 6e0d70e9f2110431a578c52bb607516b5ab32ae2
-06eec16c8411eec6b4564c8c4d3521d53226324d 2873fe29d85da8c9b534dc933da5e139504c12c8
-4992b2867a0d9753ede584fd72c8f75dc31c9355 a222bb74dbe2f2d758fbd8447b15b7b39305ae2d
-0a28f8156fb1dd4e82ddc4dda5062dde314f3db2 23ff5584ec0e6cfc0ec2a3458a4321fee2f2b721
-c946ae269ece75db78ff1e996efd9e55b4bbeab9 698326fe94b982c9cbd1333f658852b50dda1dde
-5df309bd14134a7d976b5cb02a58c3424a79ab4b 9103cbe382795066750ab5f9fceb443b5a67de45
-f77e0141a1f2baaea256551d8ecbe9cb9bd9dae3 c6969fe44e58c542bfc6f1bd6c0be2fa860929ac
-8434dbda6b6268936ee711fc30e00b6d538de585 0205434261f9e7a9a52d7a9edd2e6847b7d51ecf
-14ecafa78db72f470e87b5833d7eb49975c284a2 6c2475290c1c1beb31e8d5e3d3b5b47c76a2700b
-e9e700e25dd6031fd6b36d4ed00e043b64b6f75e 423a0cc8f25fde6fb81071d92ad32f42bf3a4de9
-e4a2ec91eabb06187e1197cf4830fe08dc8f5be7 6091eab775ad82949755ac9f5595f3cfe34fcedf
-2708df725ae67bfdcecd853a3a42854e1f52df0c e18e3f16be92083f1bb6f2877d9bc61c71307c28
-3fd3811319a4d30bf466f614bb675aace5d948cf 8052d0acefa19cb29f2d546047a2e9e382781467
-24a5ff0541572a06621e9027b16656ebb02457f7 08b3baa3d5c9b65039cbe0cff084f9e208750e8d
-4f5a92cab8dc55d351b07ad3f54202e23fc4483c 012e7388ed3b9a3950bdf234a705a6849efa6234
-797b208e49de9643f07f299fc31dad97dab0a6dc 1b032a3ae98df9987a94244b0cdba88f0e9b99a6
-e8c78c9ce9d6fe91aac8cd22689c68f903390d9c 211b569080425bf99705959eb7d5bd9bbb8d9f2c
-14c502f8f11f18b6ca2b14111a797fb4ae5fadec ef37110f6f688434aa5351be00a94e2253aebd31
-56425d756db6d1e778197d2b0b1044f7c4d2a61f af60c0d13fdcb0584533ab1b294734301e4f404d
-f82ec384477f77f2664fbc4b8ef98848cb4f7ba3 ea01195699f7f88602091eb2cb5d8adaa14e8819
-a3bf443ea429e4cfffe8527ffe1db2817627208f 2ad4aeed8a3b8ef9785887a348385b97ec7d5b5a
-b3cbf11635facffec7783b6d9f068552a52ed7ff 82baca6c32236fd9a24cfa56298b1169d197043a
-8796b4f18775165d36aa9076a9dae24f36c3fbc4 27f2b5cbf1ea9ba5470603b7c9c0c09d6dfb345c
-b4e22550ee8f7a67e2721d688404fb7a7b78fe79 cf3d1f142e62dcc084deb178c5120949594a9a67
-9edb86dc189ad9149875e24308cf59282670eb7b f12e766cf090690f1ffd9e17eff0a37ed9ec0af7
-9dc397d6f6229827579025a7a7e4906435ff3947 2ac5b4d60470fd1e5dd28a3cd1093c8d479965d3
-181f314c9b76016585925990c8e1d9e2703c6768 850deae6d9da6a584d98d1b0463a4ab5ea7d54c4
-46df68aedebceb3972e79e66ec53ec02dbb1d132 95dae16e5f0e0b783dac6dbddffc27ac83a2c6ef
-12225fcabeabd08ccc3864911200f369546c1865 442aa2d927402e5ab76217efa82630090301d044
-eb9c433f23418cab7b8878204066c9458f65f8e4 654d0b72062106094b755221652b1721d7e0fff6
-6a4bfab52d4518f8a1ecadb3826365fb158d623b ae1b7a5a66793c5436de10a9b284fe590b63d667
-7cd322fd6bd58b09ecdb3ac0122e53f41b34461f 0bd3e5d7703c431637b9d09e2ede30f2764bc29f
-22b1133abf405e37e4917b9fc53f80cb923da36d 80fc99209b593260a74afd70abe1d2ee94dee859
-49fc60cd1311c702a05debd2a99cbb27ed57828d 263213ad0a197105010a42f632128938917527ff
-89d44768c9f502c72976854908b248d3149b6898 d71a5376382154302db2bd9f1137cd46ac9a9b4b
-9c5b3c3144febc022c4c2d35bd3f6cbfa35deef3 f9d1d4efb8a512b03b88ae881059a8ca461eca9e
-2a723c28bacbdb107f3959a1274fd14130f02c51 5c1eaf082814c519574ba2dffa04a6d970fe14b1
-e34dfeb90e76d044f16e2b7935df3d79da70fed1 b0fc4886dbe74de292551bea7d30cb92b075a99b
-dc679ccbf80fccd53ca0b68e5f39b52ba68b2f4b e95a2dd26ebe273b497f0d3b78acbd0626b55806
-48468d2339eaa090a4ae1099da06a632f7d1339e c77280480493a8d6144f8609f70fd8827bde273f
-187898fe10e4fdc80d8dba07982ec5b1896a2ba3 5490270526b405a4ac02c66c1a317e5b09e57e30
-adbdb1a51322ea71db4078656f73b29c688609a3 38b902236085f7b6f7fc01bbd4bf1343a24ecda4
-c9cd0164dcaefff821452bc7ecc59cdd0999f207 608df7ae636e275cfc2a7efbc3a44c3737c1837d
-43428c02be83bfa933c47908e8e00fceef31da80 47d55fba59b4f3fbe3babb7d4b96896ef07ba8a3
-ced37c8ae199c9b8447632342ee9314dcf6dfc44 d21904e2a8d6bdeed150f6227f474cf67b09a077
-c4b93a47006f8c815dfa9bd394a2119cd05e5eb7 de15940d31a9e59e3d495b8bf714d5cbfbe5acbd
-9633c07f8495e28b9347d8a6dc15405a5c300683 67e9242bca4bd287dacab167090809bba644b133
-ebe714ea1960d58a98798987aa5b7934d3cca679 1bd97ed284da5617ebb6fde6aa3b271699b48927
-aa4f1cb46c769c10c4a327364ec4945801fdd585 9bfc66deb93347e40e7421971ab60f61205c272d
-9c6d0a9fd35a714971139e50fb3eaabe2b37bc4e c5156f525de97a652aac48718f4f8d933d27bb06
-9ee14575703f8d85fb36fe86f0cc971f2ad5d7e7 06777d2efa6795f815f89764ea77ae7ad54d19a0
-dde65469c896a9aef97e8118b9f9768be694f691 88a860555681f5ccef12fe871f46459f40eb768f
-34c185478b60062fb499e1a5b50453a39a1244fe f44c4635d3bdaeaf5a9b34b407ef0408066280fa
-b23604e66bd6be6c9e937189bf11b5408d1da39b 94c88997b7000c126678163cd56a3592eade1f63
-445268feb5a9231d32be80ec31e1a27df376a6bf 5b749c61d633bc11e834bcb113d5259f7a09de4b
-5a660197819fead85b230a79f34a228c2b857422 ed676b591a42bbfed67c8e1f200ef54b54f7471d
-4c2b55c330a9c05e746f170384faf4db7d885f8f cdbcfd9cda6b70ed96d8e698fd922ba28fe36340
-2d2331ff58668bf95e6521ba6798a2a31f5ed650 e353e510766e441eebbddd67e0f268a8f6229782
-cf022bb97cec7fa91c8e34789b454a0aa18c8451 1bd747cb5ead0d049120b01c99f0b185a5415e82
-943a23cf9fe8de6f92bec9d7bf9f420bc20ea3a8 a0349098d7ca9594648243ce1aae1d1cc4d6fb30
-464856fc4f25f33a3b9529210572ab4d7bc53796 2e084c0a443503702f9ddd97495687e8c8145b59
-227053975ace3cb3c2f8935a2db5844347e9319c cf4f1980208ab270e87bda4b9eef111286d0a926
-b9dbc7055df2329fe6edd1095a3200a6e3e1a2a6 8b77508d3d30bcb87789dca568a0a80edb6702d1
-5fac7ab4cc6c3fa24c86d1a1569834e92fbc4e75 4a315a53c7a08e11740587b9ed22d09558e06837
-93b32cda9f7ac136fb8ecac94dddf8e992f73789 fc6d1ac6de361536e1cd6ebbfcd6234ae5b79441
-71f5fe730b1f973a9c31605e39a19193e2f842dc b5919129823ec5acb2827b9f9415496207b8eba1
-3675d4985344b946137c37c49dd3f2c70ad47702 751cef5ff11cdd41d015925aa1e8c30cdcee165e
-492a9967f8ee147251a95c6b7800e5437d34e6c9 e6df1f4c9047baecb292cfe4a4e3e5d5be025c87
-d13b341e439577179f1195d21187a8f6625383f3 d727ba0e8be2edac4e3acd8e85d683fe49ed8ce0
-1b7c77229215aa0928dc5846ee03ea88a6d4d38b 0a438d3d796724676957a2b201e3f66774f1ea6b
-c2ce454ca67a18cbb868382fc7b3ec9b2c76ced3 8ebe872844631cb2ca5c90a4faaf993921afa225
-f32fffe7c1be61ce2f194cbf18cb852bed8176af 050f43613b2ddc5ad29b2dd2f7a49272cec7f238
-e54a56ac5e21c22da27602f7198dc0311df89327 f34f534604cbdcadd8f2392f1d10f276137082db
-39bbd29aeb65e17c719c41937b43d6ff6ef9e11d 8a081dd2eaa886dbf4efb20dece20901f7e1cbfe
-d0097f9195277c377c2dd358061dcd9e3f655e8f 2b357c958557fcfd5efca697751885a28ae74d12
-014b2be6e5b4ff82e50287057cdc0f3994df5dd6 116db197a95790950d9e142661b59bf10d223b04
-7267738cbac4bc30a19137dc0714d2eb037c525a 7f06f6f735124a0050214fb77169c272aaa85cea
-12fbf2d864d300b9eaf13e902076ddf85b2929d1 b8166361049a7e386c9294c09927c9f55037e010
-b1b8bf935fa32629a7097395eac18b708d4891f0 83ff92236c72bfa0eadcb794fab68ee8aa29ee06
-87b4d0a65b6d5728b0ff91c7e354e2baa2ca4ddf 521be73da6b666f506f118cac944bd1ca0d5c728
-2161920aee760f018f931f91a4027809f0774926 c6c4c12a143c32644c8c37fae7b7814c43d9577b
-d1700a199f88e225235ea113ebad9a632229b544 821149f6709c033946f69315baa224eb8be51168
-d88753df772fa73d79e37b348d21562f3b1b96c8 b80516e8cdf3011f94674a13dfd3379784a642a0
-44e876d738d9f235a72a2e1e6be144d47dd2a74d 9245a1a9313fcd74fbd458d23da582c99d1e542c
-a1a711f1b7994e9f98ec13d0da48f24f174ef249 8b784eab2164322f24848f74c9f43be78fd96160
-298aebf6e6b817d75f52b2dbe68c0f9f959dfef8 f2bef714f96e2749f98de5cdea4b923750ae8ea1
-06d2fb575e1e313022bfcd390fcda4d59558ec4c ba6c95925a14a6ec7052ace66e5abd0855ce1ae8
-c98b4eb529f3f1b436faaf8ad64a8fd5d1ba7574 8f4d248b68e02715b03e011b803caa43e0cd68aa
-a1ec959c0fb049057afbfb6a07ea799aa70ea554 43e6387ef966195e8a35deeaea8c3d72b9b8dff8
-1fde8fd2e038882d00b7e0b7d5d4b5932420c58b 99e663a7fbeeaa9506d242f85bd21c142ff61397
-73f582ae3a11c278e29a7a3190a9444f24eccbaa dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-62f35f4b4eed51a9a4d2feee3fb31da33aed8755 125c356babe39b02bc96fe62cfc4fb01d76b389b
-8a0bc5d840bf31690c576b35a2699c26a252fb8e 125c356babe39b02bc96fe62cfc4fb01d76b389b
-146fe29d25b802fcefb7b59b7cdf8548546f6cb2 698326fe94b982c9cbd1333f658852b50dda1dde
-2bb10eae42bf5d4bf513e09ef5139729a593156a c6969fe44e58c542bfc6f1bd6c0be2fa860929ac
-ec70949eaa77adc9d2dd8eed31233489cc865c7b 2ad4aeed8a3b8ef9785887a348385b97ec7d5b5a
-3901deacca20b5b5d1caf9992b484184abd06cdc 0a438d3d796724676957a2b201e3f66774f1ea6b
-0e09c46fbfa251ce3fd856b86f07aba52aaa5a30 0a438d3d796724676957a2b201e3f66774f1ea6b
-57f8ddbc3aed9155cb77b2fa190e7b0e6e8d17e2 dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-ac2dae6e52b4ffb9619722f01b53ee4c72c642f8 745c159be31d2b3f14d2f5d9b8b42c4354dcdb3c
-cb38fd0138d93accc28135c852331c074714f4bc c763e039a718b512275994581f77af5923e666fd
-a95aa74872f201e1ec09173e397340f2678c6d21 b5729630a258b151de651d337772a239f708360f
-100c3963363760490d3f05d0178bf18f71edf919 5aa358c36e028a972612be73bfe3fb4b200dbd51
-6322b46ba969582570a5ab9a095b2376ed814ff2 8f358b9684582e7711d8972370366bbd34d6e5a4
-5b82638a13cf80fd02be57079e65e583e5fa7d22 e18ddf82f85e1a2a0d2935dad4d027d18305834b
-dda43407b14911f27ca8ad4138c1cc3e71ac7e09 a495c591cc7c649749d57feceeafe355e2e79504
-39cb633321edceb68639bab9b782b1041d43d549 a6334bc346ee1e2b4931954cd70248ed14834fc1
-6ac4b6c867e53df07d5c83a346821ba260d81268 2e3635cc7aefb9a2bb7c2cd021c3aa31d1e7a34b
-591f1bf16408062507cfe51e846872c7bf39c1ec fbbe4dc0906a98ae0873fa7b937498848e26adc1
-2ed2185534d5d7387d8d149d2e41bf474ca0ca31 96d6bea2009b5184def6a7333aa5962340415804
-1d063f132355e35e184981cc73b8c4dfe0d99f15 81b8d3701992a6cb1581a50896a613e0fa8488fd
-16d2340f885dc06acee280fa362b6f30d2b78a05 67ca4643c2b4c4485cd2ec7b3b22b7f88c5860d2
-9dcfa827e9de7f26b872d030c5c3fa72ced687c9 3719213da142548fb7e83c0a78859323b90de089
-a315e53c09a7e97d3876196aabe291b4f4a1de42 fa7faae4eaa9803a35e26761c036dce0ca30b8ed
-75a1d14d6cc5fbb2e82738bab4418b6417a3af1e eca3861a90367c85435cd3fda07cf317b4504b10
-0e7b59823cedc2a896fa477a5749c143bbd3b63d 1d1d9145570a5f8c41af6a374a4ef1a87d6c0aa4
-d7cda354f89b5899c632a08128682a18acd712c8 8f2f8c7a7570f5eb1c844230cf41f2ec2ea876c0
-9f4ee48c8a6c88bf17825a62a512dbf6dd41997d dd559f4e4ddaba1e728c379e34693106c2691780
-3dc0c3d58d4be1325d9a40975dbf7a27c961c36b bea481a654f3607628d1636ca5135a2e9d6749cd
-fa1e68355e4902e201b504e95dcf6d6556b534a1 d5512afa78cd1dda09c16c948b06c753f3151def
-f5dc8b31e43d7d5d5c27a076c8a0dd36148928da d10913d1d06be220f2b5858cd7baa1f7114f2792
-2a6e5d18851ebd8e3cd30c5549a81c5cf22cf3a5 32a275ac68876b3139e576d158455a8da1c2ebbc
-d37da0e285723edfa7ca786cba686ba1931fe135 f6df6961d7d47f166a2374967240ec45796603a1
-69eb8cd9751266de04f4226c23527db55d1bc8ef 85abf2267d20606d8cf68b66b380aa0228dae3ef
-527e49c8555c35b8ee4b68cba1c21451d0c9fa37 a897ca9148affb457846019160825f528268221c
-fbdddf1bb3b915c4322223870f0cb3af7c4d049a 8bce72f0361a813dcf279b1a417093938e8507df
-cd8bcf02df5de13998bf326881c25fe7fdadda81 21d4750ddb60f9a9d8cf9b3a6725dd60e8b18946
-dfc85208fb7587c62235aea2e594bcc7cf5f4770 3230a11c6efef2e6f7011d05df30456991cc5edf
-93e544a6eed0cb456bff441ef79b13caedde6524 857864ddd4d0b48bc80d89fbf706322d47d7e8e3
-0c3877c28efb21668ffd124dd1b7d8a38d7526c4 8f083504c4996136b02a4ee2eea4260fefcf989d
-df8b9a25cdfa2b3a3282cd0b9db40aa43ed863aa a877a31ddff0fd9c00e4cfdee7ff5ce3967037d5
-237d60f643f0337e1ccafacdf7a55436a5418084 fa4c7c0e6a93babd28b98b4ffeb18ef0423451f1
-afe7e7d8a0ce7f9aefcdc942d352c838e4b4a353 3b85ca4605ff48a4f167b98d2fdc58a9cbb0d5a4
-2ceb33bf6e45fb1a0c5998532d09c0c91b102b5f 472ca36d481b350b332cdb7104d42aa75b37f9db
-4d4499adc5c57f5bcbf254f204baebf5ca2724c3 cb2168a9a3da85c3c881ad3974c43fa08cee4054
-34fc413827898605358e8215e8021344798687e5 7f606f8e06d5688350609e01d8740473ff4c9724
-5d05e322968a0d0ae154dc1f77ed50dc892ba5f9 d08b09e15850f2aaa5825117f3975aff5f65ab25
-cf7d4c67820908f12febce28b62500947da36058 a8cafd5014a2021a5e63fe020bdd33e3070ba527
-d525ee1b95e9684919f4cd3951ae96444bfbc8d9 c933271c663ddd5f319068345481a11fbcaa8772
-9437b140391e2dcc74efd69c105c12f367cf2c8b ffcf1d79fe88de717aa211105db90853088394a2
-f27b9cd04d18e5b5f9e00ebb916901df09101270 0c5ee1d69aeed88a3ad8563cf000cbd763a294b2
-6ded966be2dbe58ec6bc35ff5c401cf833ff3145 4a30e8922f2c9eb1151c68b49148a58515f58fcd
-c80765faf3ef0e106e410d0227d08f4ff6ba9be6 64dc0d91c807e6529a9c9293cb2982f7d90b1ec3
-1c93f50b0428cc18903cc3bd50c17f3d0795236c 22a9f55bcaa051742b2653eb1124b0442b18c8d7
-bf6c50ff356121a60d7ed1b5f1ae84a505be5dae d0f83e49226760d63a5b7ebc3ef26c21a6b9ef30
-8a493a46a288a8592c7512df1d459a88449a277c 76232d1f297324a1431b5add6a37324a657f192d
-174bfdea3c6915f9228b7ea87ae729f0cb8207e8 125c356babe39b02bc96fe62cfc4fb01d76b389b
-e529d072eae39e78d9c24df0f84f0b2b3a6fc3d6 dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-9e94536c027eb020f2cf6d9ba7e9c7ef4f7631dd dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-1d7713aaa37adca1e26da823c5cef527a89163cd dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-f48fec72ea00d0f8ac5af2b0ab48960b0a8e8912 c6969fe44e58c542bfc6f1bd6c0be2fa860929ac
-2d7372445f513cc46c5dfe29e529d4f88f6e632c c6969fe44e58c542bfc6f1bd6c0be2fa860929ac
-e1a260fa4014619fbf2c94c8833c9005ef694dd1 c6969fe44e58c542bfc6f1bd6c0be2fa860929ac
-e1ae4d3329e5eb322d207714d09c3153e2320a64 dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-225097c86da4dcf05f0786a4d5d3a41fd17e5bbe 912cbda74442cf3a435516296b14bf1945c18dce
-0d364d4ddd918e6eaf79894847229c47b0f78aaa e7492911883ca2773b38497846c87b3e02c3fdae
-123cbd260bda6e37851535e4c9edb9700e0c62c0 f2a2a7d9172edeef2a6f58fc8493be8a21d207be
-c3107765d8b129334b230730e60a800e3d90923d f35bab751e541c36129c35907c9176d4a8799949
-b38558e76c0e97615257e92d57d8efe89f67878d 9456fac34ea7d61c44d7337d113be3b0418e4e84
-400ea8c0d63c4a10344f33fd3fec5197add9cb7c 0fc419c282b5dd8d055a5498985eec7dafaecfc8
-08718c64044e4f86d53e9b08d7798fee85a919a6 efd53d236e77d7e5d31cddc07c4d3d304b62e203
-c5e55d7425a521cef1f2b9c5f7ac7b90ff373134 7aac771a14a9617578df3be318607a68b2965331
-51a47cc5e428c3d3de606bbbd7771a41ca98fb99 0b8b292b345278f2eb7a8c8cbef427634fc1c071
-47afbf35404e8e3a820abcafe2862fa3ea6583ef 796b403cd474964a04b0243a3930e21919017a38
-22645a7dcb7123e0d1ecb8245516303073965542 01989c1e0496c973dbe60a27ba3f9aaad4214ce8
-fd173b51470da05e594a4e707b1739ad23719241 ff84d8d45db8b08f258b10e9b0495e7d4f9fcf93
-badc9f372ca52783506e6a60a839ee3e89cfca90 e102c95281436afb6786568ce6a771f9cc1f8c82
-cbfe3fbe49c283016c5d8c770ff711376be6174a 2d6c37c7f1eba07d0f3b494edd2a2583a0b2d6b7
-1bfc1ff752805ae6c4c1548ec7a8b7c4f86b7c35 402b3ece8c46fd23fe5849024af5b12fbe9f8b24
-5c0e2ef80792f0a5bed53c3e73b9420a2a7b0c05 c739d1b8bdfd1c68b395f6c7c6a9c59191197a9f
-60df7f88a5cdcd2be4ddc86b74bddca0bd8261c4 e5516634707d12bef7a7a49738c978f4ddb101ae
-2da832aeaaa3e099ef0885e9efdd7c9c92a8aa82 b6d93ff858f599b4635b1519e3c9ab5e6efaf929
-dc687fda37bf19302b823f433f6db6ae64f2c238 aa7b0219c5b9a233051ed26e1b74cc9e07903d62
-7777305893444e5c94a00bacf6890bf0c74c6f62 0fc419c282b5dd8d055a5498985eec7dafaecfc8
-2e699755a177b8b522783865b067a65dadec9c78 1f671937bbe12af144ea6040ac0298a39329177b
-18594f48f85e31147d4bc539e719fe497faaa3ba 33892d16567b7ba7b918f8ed504a1b2643364ad5
-d025e8aa2c020f586a5500a2aadd59c17ea74b75 2f6dfaa9a2bd0da724fdbd1330dbcd4bc94f1bd7
-30244546315c79ef94573b3cda48bdff1cb58c2a 7343400905dfba291802928212587ce9a33681bb
-6c02210e7f11e7cfe2bc2080d9c69a2c31476c95 8893cacfcf8dd453769457fb11f4d8984157d098
-3279874dea874a04af21bffb860d0a1aed7bd400 6f1403ce041e91b6a38ad4cd31a5c0e3d0219a1e
-fa7dbdc8d214319bad86c4023a59300bd4f84368 e1fe8595a536a39b50349759a8a1a62e7882bdd7
-f72484c16d3a00c767cb59373a4b0149d0c39ee9 8fb846dbfb7f57ac9faa164b7f82b9ff1292afa5
-a9d2d6fa5514561c0b688e8abf47d9a5cd428e2d 925b3a1db4a4e3808aef7dc1006a6701d4c82248
-1bfe96715353e36d99bf9c14b654a278e781202f 51d64e943a491ea0f86e00c6ea15fea91da4609a
-8d4a2a39deb392a538de92417a408cebf657673f 3463bdc9bb102474327fd415f01c946f5b235f9a
-c65dbb772c696e77b89f9a8270dec35a13b54cda 6734cafe164f2e94aaeeea892767aa940b14703a
-3730cf8dfb111eca67e35fff2f856beec9d36f63 84945c4b58abe4f6b6b89da4f1e6e7c0a5e123bc
-ac8d4eeecbe7002c823071a1abc0b58ad4252a8a 1a4e33c98764ac76da1c78fe0f4321854b3f79b4
-5ccd9a16ecbd6171d3b91d61689c4edc877fa85c d9105792a804187ca0868d4f9868fe865d5035fb
-7f7cfadef4591091e784a16b6c3ae826f5939c7c 9ee2c9afc56c67acf734eb14d1619d20e3c147c9
-b6d26e9b0066603aa3269f4786bf8d0db83614fa 8de9aaa2828bf3a061bb2e8b826eef7eebee197e
-d1ae7f58a69b7abb7e3fb4a06340e1fee1518007 783c22dc04f1040ef3eb0fcc097cc632c461a641
-88054927cc4752c16c1c730a757858f8ff5f352a 35fa6fce2124c1869e2a58d3f54b4a782b6328ac
-29efe1378d48c81eaf51e92e4d21f026d545f2eb 3cbbd7baa0e266c03cf8b054d5a46c7a6154c404
-19fb28cf17a726547e3ec81ac05f0266a85f15f4 6b9647fcdc86162d0b6c6633db948088a02964e4
-f28edf5649494498e26783a416a1e1a564e99f9a 3e774903cf01beaf55b8621d3c018f3d5d5c083d
-a7f47fa01acb2571e97aa6d7dcd9571409292efa 20b34b0ce83a5d08847be79da399d3000e91aa2b
-8333ec41e55ee48d01263f29f2d85bce743c9612 01f7ee81a27d92888d669bd9bb774de14f213f69
-4c3da29b43f951b16c5c0a66be411e40a8156fc7 752863c493a05ac2c35cef24b5178778f5f8ca68
-8d401ad8a2d2e18fdd8ce1977bdbcf0dd50c18b3 eae08f9373335446a35028858e228800751bbfe0
-6c4cb58def3e0e49dce365feebc49126d93037ec f529b29af65ac7bace957a28a4e93dca23ef0f03
-67394b77dbc86f0f30768dff68692a0a50cea543 2cf824e6bd5aadade27acf170419f91f9848c3ca
-d573c908c4dade43a21a900e8af40eda97732793 ab5bbdef7245b04f63253d8e3bea191cc9e5f791
-720026f79ca34de84bd95b48a62db77b2aee9320 ae43be8a519f7edcc6f3c8d158cc06cf7c7aa907
-c0992edbae68fdcdea07b9e53a11e69441d44162 fdce6811b9a8e8b9b193700112dbe021c38af0f6
-e70a6f2a9ce7eca3aacfae0a4dd95ed2811ef4b7 9f70181792902fd06049678b44cdd33571f6a61f
-00268becc285edd9d86f53d942e6cb4c411fb75a b2cfa7c637b99c7357dc6e0b1845e8e15ab8f126
-a1d88c91f975a519c463a2e021d5347c8b607403 8fc8fe10135f1e39b76f98f1525d31a5d31757a2
-19af46549030f15640b7fc06638b041b6b6ed181 0b2050921951a127da8a3461a6bb21cc3a59959d
-5be549f13b8df364b47774bb0e55cea0fa72d502 4bf43ddec422029dd73f75e3c9f3a491fe24b74d
-673b05fbaacb3ed388c582cd4a59c1224b7b016a f6ec972c2b4def9048f5c06615b12290020ca64a
-16c037c595e0fdb76d3a3d96b05fe37084cf1c72 196d120108c7fa6ecad974e0b75de9a93ed7bd9d
-29dc9a920148be06f198a73c19947ffdfd80983b 56c1baa2dcc765400457c033d9b862d9ff120989
-5188ced9fa363e1f02f0b9562bf34bdd9a4cf4eb 4f794f195968aa29c48665739dd95dc53aaa785d
-d331d6a08282dbed04926983d03db46342b2ceaf 50ec616869938585d4ca3f73cc59422e5635a5dc
-9db2e01d9657d21fbb8f83f72adce7ff2289388b 85389205f941e8d0d1bbf17367bbdb36bb942acc
-af27d64d6bce1a999b11d2bc6e4f458f5f73eb9b 5567e9e7adca19a6847cf96fde1f878e7b3fff8e
-3da4d7718ef7b62577e04a1c7f33b967e6636921 622d85eee3160661eadb24c1634ad3a92a84fd98
-09591a5ce2e368a72a0d5175fd8e03ab05ea77d3 9c53fd9f04670b2176ba36fe9c7dc566a8502f45
-ea627204771673fa3d72ef3be9a1e94758476b37 3254c1bf39f76e57ecce049880921ab1c6d4cc6f
-143aca8696437eb0b304ba0338360efec26ee6ae 2204298cb56f7c8287f6f9edc5606c5a07a3e7d9
-217112dd1a616a2a3542580c60278a4763ff4e5c e98e77e5a80323852aa7a7f836a6fb92845461be
-5c816b358ee2bb9ce3330440984bc35909ec89e3 5bab47043621f2d54dc2dc575bf929bb66ae2028
-c375978dcf436ee643e7ee6c4b390a95a76518d1 d7fedd82b1e0b1c72bea27bce76c6b224aaefe58
-7bc0757b8984c0d5c5e509a05035734b300b094f b14a947b31b9afac23a59028f304d737115f35b5
-fd2d2809bde0d8df0135a035aa0d17ae1b8efebd ba052684870893a8a0621ec75d37d5f932365921
-a2c815d8739752a079693020c30736aa8ebce435 421eaa12ded836c6a33e8535a36400b94f21babd
-17cd3f68c175998766c60e1d9208a3823ba38586 ae9338874c283a16142492aa619741a19b4425a2
-ae6cefd688d5ef54ed2d372089f8256f93839c69 a8f85f0d51f51f23a6b30157eae048724021d2ac
-f381b0bb829658261e5c656f12dc8ab1781f0f45 646fbcdcc148d616dc2c6d2cf1c1f45063e985fb
-e5406d8b1e3d2c5970c04255ad54e381fee62886 823f4e735b0c740f2a9a15446f97eccbb1c3230a
-9d1684bfad5bcc2df7dd732bd1178b064488734e c1b34646bdd07512f1eaa255102b199f9b457e17
-e58416d5f41d51e8a5d93b5f4292835fe56276c7 bc7df787c746c48859f2e4567c3d12975b0d5de2
-9dab51eb906474e321dbeb3b2278b01e36831962 317005f72ceb115bf8ec63c7db3def597d4a7f21
-68e95909faa4e40d6e9746c8c145b2984329a1ff a6d5725ad57029be869ecc5c4cb131ed318928f3
-56b85417417295234f8f94a7099ef9d7f6e48623 8c4cfedc8c545cb0aa9cb51d62cd1eec2e2523a6
-d3e785901da227867435f07981f89fe524e4b121 3b17fdd68c8373dae099baa24fca6f5f0b32509f
-c0e0bc56412776f30089353d6490617130c49b62 71a87e433c68bf0fe278d316fc4dcf7f50b1336b
-908b8164b6a6deb25d2cc7460241d417db816255 9da9cb28966722553d94fd504d938d2e435ce294
-5b242312c32bebd2ab5ec47eb3de8fd665fb7d73 ec25ffde42f64bf18a3900cfb88676916abe051d
-de4a0f4151e0d93e6ac78072b7a8794ce1222a95 3b17fdd68c8373dae099baa24fca6f5f0b32509f
-451d8ea6badffa4a058a87441e251866abc19b22 f727f4dfdaa966074d657149c90ac020d874f966
-da632ddeb4066a4269b2111ae0da4ec81071c724 bc2e412b1df5e26fcc1a963d56880101669d3f4e
-8d6e2313e5f6ae13b70bb70369ab2b4befb27e6a e13f4087af3c926e16f18a0ffc0bfd1785110d05
-b27689dac2a3b1427685fefbec919ce3514c5061 20c93a802122f1ced2a5c6e1e76961e00b7e10d2
-d01d90f985bc663c3c275dfe3cb9fc6b31b8f800 4778ff2280ba812fea5ca3a07398b9c0d7ce281a
-4e1fe5b5cd3e74c192a0594d122e694c5fd22f7a dc4f1c22f67988bdcc842211bee575014f3f3b20
-f226dbc9458b4622fce65f6e5818cdbef7f8cdc0 99ac7077def40917953b5178312fd40be1a33c28
-1f2f99ed42ef54d305ac9a509ad6df29360c939a f3492db4b639b3b930d3b363a320784b6f8a2bbd
-5bcaeb98d913d2e91ed817807f00efcd64e3c9e1 effc465502e70a72631078c873a3f9a2d06fc982
-92ae0b4ad96fbb5e7dcdaca4f96df376d1ab649b dc7d8c0e7643db8782fa22a63845752d1eb28e7c
-7457b0f56649a7e0f389830587e9c6435ed0909f 5b2682c1b187d65ad52dbcbe95db6f5348100bbf
-e06fe58f4c2e9fffee3e32453721c7abe8912a57 51dcb2cb982d5a6c39a1fddf6222e626166ef7fc
-6f78ce22a6c2d66f957c64eea87c961ec6b1be32 51dcb2cb982d5a6c39a1fddf6222e626166ef7fc
-bfa36e86db8ab02767edb212a0b067eabd620a9e 6618cbc3a8f7a189cdf76d6c1db3755d99e13446
-b4c03b57a34fb51aac3288f2aa120d5a326260b3 090a48fe32cc053299148a6c8eadd456d2094827
-61a2e2a8fb75dd07da3cbdfc2623c38a6e5fc0c7 8d595e576838acf3507463673cc0273d3201994f
-8a98c74a739245237042a632459a34e4e7cacdd4 bb0950d8ec2268e036be8f1bcd6cd6c01fa9addf
-f14f3cdfb259ad53fa8503a7a1c40a197259fb9f d515286069858f55cd9f1a31b747d2a99f0ec2d8
-7fd9ef73be05da85080e3db05df237aebcdae070 a2b52f8e04cde2ab09589566118747adcf14b702
-07a9c8306773bc72cf1f3d3b53b47600b9aba844 090a48fe32cc053299148a6c8eadd456d2094827
-a8cb4feafe796d99dbcb53726f5aee9e17626192 466721c3cddd36100696f233f9d88e272839911a
-7452b8048c015f81db55b1dc963719a4e6613e23 8c1d1dc8551bdeb1e2df615324fbd75b68afcb7a
-fd24f2257d6352fb1dbb795a956608e736e53b33 dc40a8dd5f68baaf5a839ba16d028bf061bda63e
-58571b4e704bae6c477e92e39a23d6a888ddb46b f236c4d5919cad550104ed7d2a7d5b1a48b57699
-4e9306d1a91c71299cb85d8099a4c5b3df2a6c05 c6969fe44e58c542bfc6f1bd6c0be2fa860929ac
-2da90fcd69afcb0aefd18dbadd5e045a33817e78 f236c4d5919cad550104ed7d2a7d5b1a48b57699
-cf29f29e6eef7e7dd76a42eb9168597fa0c0275a f236c4d5919cad550104ed7d2a7d5b1a48b57699
-222de041c475f18ecc50f6d6dd9644363ef2c424 0ea80a6ecdb661f8c736b19613ad8e83376e78c6
-41877f53339786c7ffb046c29aec760b6c9835d0 a8e3508d55e794ae3c42757fee79c442d24c7fef
-2c1171c03f3e56a7cf8962c717102ad4d2bc9b65 115ed23e0fc5d348be6865d0a3707bfcc0ed29bb
-97e1bf20d70ae430494e7ecc16a82867bcb51c28 b03065d018b8a2e28b7de85b293a4c992cb4c12d
-094d6bd559f229ab6018aca3042ed2c56bde42c8 7065632a5a4d9d207e29938be74007427ef53d48
-1375b5df6de932333bb57a9f819e950578d2dea5 b03065d018b8a2e28b7de85b293a4c992cb4c12d
-2212561857c69ce53c1938ca93b0f727f1c8d4fa 9e87c01f002787a173fd3006dbfff857ce65b8aa
-879169a9554043373047f95eaf714b6dd5b936d7 b03065d018b8a2e28b7de85b293a4c992cb4c12d
-97eb0194925e0f7e66f368accd64990c9b046fb4 9e87c01f002787a173fd3006dbfff857ce65b8aa
-011925fa0931d9b44d7506e2c71d0504c4081da2 ee6af1f7ac9fc6c584ae9746caf7b2b4d4040df8
-18ee68a04dd3440217d25a57692a0b009d583b1f 2c132fa184749b5c149d9347259810fd1324e0e4
-6bba2f93b094ae11a08135811addaafe07ff531d ba3867a0f3288099651fb4da6d4cd03cf43aaa5e
-bbeaf26970c47b0603bd664271135cd5506600f8 40cd0d8d178e4eea515d62b2ec9ab48534e6e62e
-f1cdf5727687c2286e5dcfcd2e62868371c28ffd c4dae74fcc4e071304fe17b9e172478077d44c2a
-5037b3822895fedd4dfab3fd65a90cb227c2ce75 b0a8e16cc0ba88c9f0bdcf2e366bde6795a2ab96
-30fbc3e61e75da7923be12b2f1ac16cebf5e5473 c358e2fab15fa07ce9b5f547b603e05e26b47ae8
-4ac2bbb44cef4d6ca3a859aaeaccf7f6f67a8100 2b197b949e2e3b0a4b833f4aeb5d78463e49d1f6
-1c95812ba38bf586d882f704dc7f0711ebd14c14 f6cfc13bfc1c86d54a3cdc28955010e1cf0aa1d9
-2026f824953f498f98024895b7b5937483be224b e7024fe2eefe683d0f16bec52987e22596363be6
-a5a93f17d1345a7015c99ad82a46cf6b62a2c7fb 85e23c7d79573ebff2421ab9c89a955ef300f58b
-ace53e48105e06a98f9debc9ec7adcf744d29ce7 19547b909b404552593be5ec7c18241e062a6d65
-209fb5f4bdecdd85464df136c14f8d7d0e03e7cb 19547b909b404552593be5ec7c18241e062a6d65
-c0d07e9de431c7854a20d0048fdc5967528c72a0 45531327b453935d9e3a49cb6cb45880c816e965
-697193865652d61d00ca6a68d889d216bf46274e 481a68db8196cd6ab55f2fd1012fbb701304a2a3
-55d6ce1957d101df0a37d5ccc22dfe5f34e56b94 93e46e7674f720dc62a9197de2b0ab470b0b6d9c
-f26a11a482ebb82dbb42b3c4e0b013936b7a1399 c56395e02f78dad5e0441539b4912dadd5c0ead8
-7136b585fe3dbe16adef1c07fed8ef52a325a0ff 3e2e7177ba2597e91df59516a91e08fb6e4b70c1
-12c0c8e2af17d0f98af207be495c0b7133ac8e9f 49e320c05f4304df0dccfc1b15b70add740f7991
-2dbdc8da640e65cb9ea23dbc31444bca357c53e0 19547b909b404552593be5ec7c18241e062a6d65
-e1a75f9bd0b2e9b4687df598f3c9d096422eda0a d2de8f9cead065c3e93381313551008818e33385
-427b335ff55b4d5bdb6dad949ced2115ce684819 d2de8f9cead065c3e93381313551008818e33385
-8e76aeed1bd4fe5946eece746b91ec82bf5a8f33 e692056602afe2a22001f6cdfe5df0c4b72b9565
-5709bd1aa7078926f215915c6b13d3cf5960c920 46a931094636839da237f87e2ee920222958c511
-bd6cade84ed3ac4a7ecd86f4b167b3b7b12fcb15 c30ac6d2880070992101f0d076eb7aaa5b47d198
-e65229ea42b859726ef553a51743806df396bca9 d3d7fdb6fec205abc1e0ac91ee261d680f9397b6
-5e021ce3f9ac821a911d699b88c7ae86857972f8 98bf3b7f8b31dc9b44840d46c6d7163ba6136831
-302f5dd0bead4b8006ca38c1be5f1c2f5afe15ab b2b56dfb804c7af487bbe87fae32ee6e231d8d5a
-9c7b12fbe3ded82166797c591f5b8c2b369ccd73 4f72c35ebf338acce5425e82e3d257d56c3f15c1
-b9c7ef06953e31f303be52775a9fbaea294dcaff e514b7f565a8357ab9a17ee5f5efb61191f36e29
-dba71f6410b2687c6725825d0133ddf0df629785 19e6a946b1724e3470c0f1c95e150c797258f8e7
-cb1db27c6474132926d9ab3c0b9e73c9c556eee7 3a60566553ef088775c15077535ac0957ea8cc87
-c7be8315ec11416d102f90596a96d44a63fe09d3 3926a222199a11e8660a5cc78e443159fe8b5d6e
-7d4634cfe5198deb13a3acde67ca9fdffbf4ab30 74a864f71c454200b62080d068d52d4ba0aefdf9
-4e8803208ebc356b59cc3daf7e4e8faae23294cd 5eea7c96bfdc80515c081776b3edf9a2cd488674
-44676ad9c64aae5679986aa59d904d3b40dd1b04 6de2bdb789e2e9efcbf4ced9b21bd7845877f2ca
-9eeed552280e92390b2585b40a6dafefc52164d4 287bc304c65d413b926b75946b237e402933b11a
-8dfbb2cb342b079f7881d19cc669448aee8c2389 4d486f482e363c1d0aaceaeff874eacafee3d44f
-9cce9924195712ec9102f5ae98d7068a15b6c9c6 66443d61fdafc7e6d282646c8192926388daf02d
-8a8070d1594d5d726dbfc5072418a45cf99d23a5 65fdcab0ddfae63fb3f5ccdcb382b58d2cd21971
-647b5cf2d0e415e7211b2a0f9470ffd5010c689a 48e46736d838afadf54f2c8482ff390fe7e6ee82
-2db06d61b11130d1db2e1b8acdf7da2932a997ae 5c2540c4454570426d9847586ee40fe46d7ce373
-f39dbb15cea46a5e98f482be5d59ae2280e97b25 d8a8d4fe983c9189c46b2798907ef2299acbbbd2
-91fe5934b57cba98b17ff7863448497cec74153f 54b0619bd7988cf9d22239e5694d1555cd9187ed
-38643d71585961a79e973cd8abd9734177500a46 6321be6f77cf67f1925b00755a8739a463905732
-5d28051fe112bb5f6ec37525b9979a775cb9265c 3926a222199a11e8660a5cc78e443159fe8b5d6e
-af23e3f4e1ae86e0db25682989e1d167a7b08495 49fbb5892822e8106a76adb89b321f17f67e24a2
-c40de150519c427ce29315d7a64678b24ab21245 737390d97222abf0982722c46bd00f50b1b658ac
-00fe0cbcb0af8e2c5fd00fa162c03d6136674ce7 c21423e2ed56ac044eccc30b9661858f6320abee
-3e8e2ade67e346b1bf8c2c848f7e2054876fd12a e8901aecb0c37e8d4baf55434512ab9766f822c7
-e3a8875b06fa589f3cc942be6443f5711ac11d0c 3dc0fddd8ec4e51b732e5f65929a4bec8ca10b93
-b2e9baf431e82c96a91e87682e9fab8b388b91f6 8b7aa2c59a10d30606a54dd385e653ba2391e2c4
-0638982a2eba888d504ca035211ab06e9d7f92c0 3ac68eacd551a7a05f3d9b08f8081920534414c1
-254975ecf54fe57e44df51c72db8a3057c2d1364 7cc69775c441150942df849129434fd0d8cce989
-f2cfbe48b8b26d029881bb183d7f95de43fd597f fab623adfa5953b9c518c486b59bb9c704f6b6fa
-4fd94fa3ce3fd6a52c791ad7e602f0a65f6dbdb6 9dfec2d9574bde86869997b6b20a99d99a14a52c
-238fb6a0438304b2e7ff8452a92f9e214a6a360e a28468b4fd188c207a114f77eccf9f53209e3af0
-68ea9a0ca62562527293011d434499c0c62d0435 823f415f237147b0e86ca7d9f5e1cf3d1a36f622
-396064a76362738943bee95eec114a40d6ad1086 dcecde3f3464d26d7a84d132e0b660ee40b3427b
-6a584b2d735f9b789b9ce1a72e16ea3d1e7c00e5 5a5d1856e378bd386db24dd9feadf16f183fa17b
-7eae44eb2e6279fdf944020c6a296bda367aabb2 22ee154567c2208c616629eeb9005a2c8241b9f6
-2886cc4ecd047f031e1fb41c8ff377743f3bb4c2 0c26e9a2b952d63810f0330dc0d2f9871b5602fb
-73a6ecdf73cb36f550d70d2c1dc69dbe65ba3cf8 3fe02760c682eef4783ec7c63f63f8f78a0781b2
-39ecc682cfee2df668d9b4e00404440595cbbf71 91589a3bd940cf069d913201da87df6e2687180d
-0c7db2520e1aa92e82e5dc9efee0a9d6d330517d 7df4fb8fac001c5a8ca96a8e91e8aba568d6e000
-5a78ccc6dfee9b5dc25571403048bf4a6c02af3c e098ced4465ff12fa6dda9bc9c8229d886990ad9
-9c70697b3f198ddec6866986a36367b393734a53 faef3edf97f6e79828df2b972ab978d845a0499c
-dbddf0db00bd86e858df0a564a2b1b373d281f4f 5e937384b9c99699026ab475855122222a6f2f19
-5df7731e9937b8bbe9eb370bb829a8cdacb7cdb4 44cdd47d73d7a233c5c5b30a9febfc3ee21789ae
-ff2f9380c5c39a02e1eaaf8fe49def7645363e7c 2fbd16a76eb345e08baf5fbe2721ca905541296d
-89121036ea75ee35b22a854e79c867be1a8c03d6 6bcf544f2903823ee553b2ee14edab9c7afe9ff2
-59dd9af3a1be3c1356bc278bb6eb9841ac933ef3 9a9968617fa8b9c977b62edcecbbe7801f0008a0
-89581782be4b3b5c9e835488199c2a7302417dc1 e721a5460baadab6716bda1ef2185c688ad0d5e9
-c4505ff8c3b9a1a7a819c31046daa7bfebb4b1da fd041d0739c339b81d114a10b1fd57f4d0b1a316
-4eebb7fa84fbb99d34d2ff75cb8515af84c190af bafa4e2c85b4bbbfb4b60764a512be71b3569af5
-c27ae182c549c9fb4c561eb770c47a99ef121442 e74a3a1311db74bbad9411bfc80821de745eec8f
-b4a3135ccd0d519aa9a148e14cf74d70cc68ad29 28c3a76165d0f5d3b635812733ce126c05c96e91
-510b369b7da41a36cf68ff6595d8f4824b8c6faf f05a800be824c7bd0b349770b0e3125613decb02
-d3533a3d5b947f050378691c8baf0e8280f965f6 37892532b2da6c8dfe8dbce5d05478e831cef248
-08307d4c5b85b597d7c1d040ad38d2f8a4255ead 02b6ed3c99fa649e56959477de349f4951882648
-261cb55f8a2260d77e62f025f930c75dc1f6cdbc 363ada199e7ea20fc07ab04bf1740f5f82519257
-16e734752a3c6a3570032e0c4f920cfbda959fd1 31941e7711567bafcf075278ae33dd15b2113d69
-2c17b59e5dfbb397c3fba2eb975856ec6847e41e 520ccbb610dfdeea531d2c894756d6286702a78a
-c267182dfcb36f6c0b99b67969a3122c45004f15 520ccbb610dfdeea531d2c894756d6286702a78a
-9729c2201cc8c591795b833b50285a93c721546f a73038360c2939005a9513fdcd796852384e3e41
-07710c4679b285ffab80e83c02c85084aeead0df 2bc5c6bc5ab38bdd6ed182b29d1cd03301de7b05
-35138c9bfae8e85f930e8779aab0483cb8eac623 d32e9b00a5a67db432c162e6beaab23bc50d6936
-35138c9bfae8e85f930e8779aab0483cb8eac623 a6250fa92374d84353e5d80d38bafc0a315a9d71
-5c5ececdd9165d61df64ff8a7cd1ae5d518ba0ed 66bfab0dbb41ba31d535d2ce412d9f7a88c5942e
-a2a5725545a9deb75cc8b612f624358537443330 97ab2604669a6004a1b73d8fe34efa74bd91e81c
-08423454fc4dbf812770d69675badf2f5c89d43d 03c49960563fa19b919becf2602a229e7cf0fcc5
-0b240c3ba999888f964722fee88e70f33e133eab 4d325d4f59e6213d0d85a4f57bfc34801164cc02
-6ea755725c27d76ce1a161ab8262cc59247625a6 8f614d6d4b4a1862df8e0e470e03a7a0b915502b
-7d52d255301639c593b89bd31cfb5f83e72b8c33 07cf6ece7fc735f39a181b88a7dd6e3b1d6e4daa
-371195160372e391c309f6ac1acaf9d0a0a64f93 fc2c560bfc1b6239043a0e56c630889c885c4916
-07089a32bf7c97818b72f87af0f4619420148721 d775dfaf0293308b0a6c95dec63645982d58080a
-7202954103df308dcce7389a626c5615c6a99788 cfd317aa69385f5c50deb00762e517b2fef1d12b
-271ffe664bd2f74e8b5fa2a888edfabe95d1a6c8 801ae59617ee7e1da11a6beb8b0136186e5e693f
-064acd6d3ddf76fb076cf3213906697886800663 ca385c19f1a10e1e9691567ce9d44bcc6d6b3f03
-1890c874ab4876f5407ff589998993ed00cdb059 2858a1b0015137c30da2a5c656ffc0f5e14b9200
-a3e2f33837a7167e1c431fa8e77b35c00808070a 0553ced8b5a0c433ba077c2595315da0cdbbd17d
-3451d53f603add8dcdb6e7a5c084b8725f868e05 507861dac9a4f74b9dedb3b9730e65288dbd7d68
-23885c2527483ccece854095af32498aa5676131 3fe02760c682eef4783ec7c63f63f8f78a0781b2
-c1dc021ae5213233669bb114e8f25bde8d49e8d2 0f02aabb07ac0b63d2552ad75b23199e8043027c
-fdd823276070994ce9546f32ee7387ebeaf7e6ac cfdd65f867be38028944e20f87fb17921ec389ae
-160f8fa616afc2ee686d2ac12e7bf6ddc5379b60 0f7245306ff27c5f036f62471972cc92d42897e2
-1045a61877be4023b40971d942199e1862cdbfb3 36f9b2b6ec061a62ed2a1795563b4bd9903b3bd5
-712c197687c917a5b7bb13b4c9021a455c7425e4 33eeae831cdb68a9552448116780bd21ef95d848
-262a807129e69426e9feac023e634209c817ff64 1c9652fa26a2735f3b7f741169dcb224a9d60faa
-08105fadb71a4cf1a1ed27996f1c9ae18aff754f c16a903b9f32db89aa580ff95baa896620267a1e
-bc2226d86238fc3d04c5a784ceb283ddc1a2d2d3 d11f06558fb3413ed0f044ad1210a2167c3e9c98
-1be7627d95537a843aff4ae0da7d401cc5eb09b6 82d80d2e287926a7b3927ad4cdf822491ac5f292
-2527f4f1621958ee07a5452b210f180e0efe1246 f1a37dc84bfd03c6924e14ed61344dd1d7af2c64
-a9cb81d2a1bb2e0b0b904d1ce22f15aa11d9304d f5c6d4b47e22c804c15d355c1f8084e35c2fa265
-c3a397ebc129c924ff61960c6f0257d3e15f8b02 911ff09337a37348a2a3bc7465482d0955522e75
-dedc484cd0a853bf9c6cd081663108a314859624 2a6e1a7aceced726c68ea2f8b8cd82a3af708072
-6f178d14b411498dcf4aaa1345ca7947182b7753 44eb56b02a8f22fa26d29dabe01a8a14488e1e0e
-54f3510f13b672e1b7cb05ffd71a0c84eaa1f20e bc9a8165f582daa38f7b275b322e6013f368a4f5
-5be7af3d024b33e0ea91f9c2b34f3d4501b5b327 1a852727b8a31a27e72b5964f5bbbf04f5a17215
-64f74b638affde4b12e10bfb62d9ae077b276499 dd041cb6b84bbfd8b8daa69eda2e0d866f9d356c
-aac7a129f76b81f3f329a5ad8dc02d77a9963abe 4ba1f7c837d3e394e22ede6ddeddf38b72b5afb0
-80e9acc23515bcb4c093b94c57bfc080101fb77b 53d36cbc5df209d27d89065d6841cc0856ac673c
-d641ff792d91ddc136fd54c3d73ae9cd10bf2666 c8b3053e72c6b6069a3cc45646fd635740196111
-26a4d505971d128629e9e90b3e0c61badf4299a1 4a29f35ed2215cd029e7511773fcb603e00f0071
-91afc47fe4b97e8883cf10e00b2e91d3d73ec991 db3d121cea5eb21648fc2a8a8da7ac59b3711f14
-4f407b6db81f3e362f0f489cd4ba5b6bfac2a018 7ce66a87da35b91d6bd7a17ab4d43e24d828b0c3
-6fc45df1cdf333f1961414216257a6b209ddc981 09ce018e32b247afaab99d24bd1abbf00388dd37
-1bd45be73d6dc2f0bdbad962c2266d0e82f9f540 8d48ff810f46a68ff157949464dc827bfb8c114c
-8b9b9d5930cb8783790e02318e291027dec1fdb6 d087595ed4c9a912acc7942ce1324ed1fcb6a538
-bd1265f3e43f9bed9a14f065a29712172c325072 93933cfc8a004a16a5eb9f39c9ef5ca769929080
-d9718b616761d0a30018fed104134be724ccabe3 26c9805fea1adc733d5c71290d811486f506b4e3
-1e5af8092bacae80b9bf44c2edb73d5eb65fae0e f3c7e3fb15257e77949562bb6929490319f92d5c
-796d9749e40316ad3d0d9cee8f6921bd925aa766 0986d9abc7ba15a830d340ff6123931e1470015f
-b0a7b75e2720ea724d58ceaea218d38ade1382ce dcbcdd44f064772f41d87f8fe1f4156998226b34
-9c5e7652be42956726013bc332eec3053db1f509 c5acec256d84177a29aa652c8cf69b868af8dbdf
-070cd06ce26c3155229e03a0d44638b168f1bae4 d307025224ed251d6d3e26d322204a75e510e76b
-5942b26b9dfa348c7e59bdcbf072054cf223117a 69b9711df065d4868766ba283fb62ce909f192a1
-c7d1d670121afdf76f8287b62f1faa029b03126d 6916fdddee476a23d33f519ae582185cf1e907e4
-39263ded059d783eae6c2a98b0416afd09e3384c d43661300701213502a5a832c95a3e4bc66e1e5e
-ece3ae004bfd5a69de56d1cdc1bc18cdb629b726 bb285fda0475893e44874eaf37dbac62bad8fe93
-7dac97bbe561323498ddb1d9024498ca4485233b 5548911aa82d30eb980872a33b9fe6a5aae96741
-1770b24a05ed54a7fa494ff8a12cd2e308cf2989 355b35c2b3e2bc69dd86a7c53920cf93c1c50eac
-3ba6621f0fd10daf4e3f3244ec6d83c6b40a2ab4 bf10b61752f7db17d86c0834fc6108f586bf2e2c
-0d585f5f00cafd75f7b839632aa2c73b87e8a8fd 152704ba6f55e1bf62fdd93589dc1dbc5b4e2e3e
-1d45aa7a46674839e6bfebf8ddb1189416470977 442a3e52a7e1468173a548ff73ca03260dcf9d9a
-98652a5b7dd9a4c16256bd510141c5b00b574af0 9126422f87aa3e49e7556955af036f015e29fecf
-49a8c196e8a2aca4b24709d1948990f75b448909 8610a1948a8f639a882700a5a56e638bfdce1bfa
-c494f1110ec8212300c532aac570ca38e0354e08 9878ae16dd1c4df7cbbdd28dcd7b42abf0c86002
-8ed97e82ede90244c9b6d290b922185328b5e252 fd59aa574dd4634f9579dacb47823c1ee5b61c20
-18ada4642cfa110b42273b9c1ae26a3fa72e45aa 140b35158f62ad0cf119e06f2dc3a1d23e8c1c88
-b1656ed1e92cd651d943af80291e27ba9de45d77 02d8d4c951dc3b70248e0bc10c0b4ad109a03d5d
-92818c0f4916b1f16602a396e697f0d8de47ac63 a260b388689d9f5dbc321d04725675ae8abe49f1
-b67cf042fdb9a61dca5f54ed5632c4678e1cfa2c f9af5ba22a49e358bcbe4384f830dc14436f355d
-e1e4b68b2730b215bdc549a032c303d9c8f46510 e23a2156cbcee35989715c5555bed06713c29a96
-48f108599240c372b17af1324364a1ff3698f810 9a20e73f9895562f7b6461f4a48ba2bcf6fa915a
-a27ce616d045df8ef43d4f2479260bf629a73355 fb88396417264c75f4dc7bbe26d55f5ac404f006
-ba582c06809fd6922f7bd753b3ea5e7f8e5f11a9 383871a7f970c0c2a12a6e307e4752bab0d893c2
-11c7ffd26c7e4f2e6309cd164d55e852ae671f04 720df5b82cd396d9d84ea03a93fce66e44a06bb1
-9bfe19c63b517c603c9ee3ec8a5669b6c1ce4af9 8f22b03cdbd3f841c95f84ebc42d56cfa6befa49
-588977a0caeac8f67d8ff6991473bce1fded2646 29f8c1e0f40401c45c179510dde06e891f52c07f
-579ab56ab7e9c673ec0003aa6bd5be9f96bd7301 739486b83c5a3a67727a2ef5fb62f223b526f949
-b509b85889e58e5b13e6029e0c47b7e9cb76c85f 25ff5daed19851a9bac03267b1f6e6f6bf197731
-09baec3ce7c1c27f2557b78cc8ddfb24cf32add5 dd623b1a79f7f0a4a5a7d584c3ee76df184a4f44
-8086c9699c188b609fc08c664db5c050f4b87ea4 61af04dfda03c9ae256d041a752320ff6b596372
-c382e0fab7e66b813ccbe0998f8a6ee86fc4a60b 5fa3e7b9fda29fbc8588e7282363aad8eee0cfbd
-ea9c2733fbf6d22166c213cfaeb1800a30ce90e9 a73724008d6db9e242330ec049143579741d6761
-298b1322a6646a8630b4656a44d1e9e4bdab7d61 7aea8f2008544a169280578fce0107280bd4b1de
-67fa4273bff04278ec9b3e25d0991f8790a2ddc5 2e536e3e594307b6feffb7fcd583ac83c5f2d73e
-78dddb3a1dd300fb727c1855f729442c25d69d93 cc7d5e69827f7f952fc60ca6b5af8f69c11bc67d
-36ea57fc1c67f4e806d35fb15d39f33b400510a6 8277dba809eb5bd7163158ed5b1cb62b41da7ee9
-4e01b259fdd4429fe5e2efe14c3a1266714e0c88 e46a6e6c8176a4f7ff110c244e91596e3efdf567
-5d5e820de3ef131a895b89519753734124f3a74c f95b48b08f5ec2fea03c325a9f26bd21ef20d069
-8d006f07bf22da25db071efaea0804eddb600970 b2d72673aa6c8cbac1c565340994b514ec4cc37d
-788c48f49ba1d9c352be86b1434b458ab66ecd42 41807eb23a357a99c05c2662c02982c38afe1250
-24ced57037101a42fd47d5e53a2ce3e36c6b15a1 d90e0f2abd1fbe193bc8e59b0ac393f4a8a76aed
-99a474b2e33288073af1db395968f3536f8941f5 f2f3a215935bc3a46440ba973c86b13d7295352e
-307ec4b73895fb7d1007f98bf2e5eae731e5c16e 3ca3d3675a55599a68d3bd44a09f8bec14ab8cff
-3195c3a33fe71f43c86c695c01e7ec268a20f54d 0813e932df6243ed0cee958cf37de1fc60b9a518
-9b5c88fea509da6c82ee3ada5aedcf4cd4ab5502 f0825f9b0db7a3080d9cd1ba95b9a2873e14a56c
-0f7e446130a89330e33e0f61edd7e3a4d5f5777a 8f670f3c95706e473316e3929fa07ed123f50572
-df35aedac04be171a7ec10df58636c6bd4fca1ad 0b39f9fcdeb1f8c1a389b079b26dbda208e55479
-d8def9fdd6577ffba808c41b8ecc8f13fa219773 41b1a0393cd5589ff3111af1352378b7dd53d07c
-b16e3e1e5af804db3a817d066f252037dc634a43 b10da9095387d7307ea930f42d104cea881c9b62
-0a39b7f7a08a593afa65aa3f0d88bf66653906b7 7404c0f2c5b6daad3388a928c1e67b75bc513d6c
-c638606d3723fc375139a6c7bac102c830d76cb5 d791304c05565d5fa27fdc47c08635b2ac3b776b
-0e1df71eef189c849d25d82f94bea50a8d08d5ce aac9d5f0238f2c9867ccbde3b71fdc48f0bf5737
-08cd58f0ccc2eb6b5a52081421eaf384c5af06a0 aeb37e55b2c675b8270863711050366561af3d3d
-211aeed4e8f4c9107fd1ed31ea29f08fb1db3bfd c5407844273842488de997b3d3b814e91f1a08ef
-c245b7d852e0f16700bb0ed5c8c92c385935e343 184bf2c188c2444db3fbdf7c09c47a8539e80640
-afa69e8d559a8960fddaee1bb7fdf392e22afa56 f6b44442b32bbe6e25364374ef6aec02d5b16ee7
-5f69724b57df17dbc91ddf14c352e6f8d0f252ce fb25e84af925740394d9a750aeedce0e368bcaf6
-0b6510af17871f151f0bf6a580cf2e7143daa161 962c68da6afc4ae461db63a2a0cc3c67f82960a1
-e86aaf84bf89f1f06f53d21121da907fcef3c168 d47433444112361cf36cdd5b707dee2c4b7fe1b2
-be3899299950211ef9d99b9928e4a69d7ef812b6 7b57d38a9cb17b8b4daa08983308655f79807b49
-e1973f1e374c17a0c4b017e73fc0aa557745fbd4 e23ddad349b6276b39d84d180e0b3597239117f5
-17f4e34f11798eaf77eb33c2375bc06d6e225323 5671c09da75614034528cd18c2b1fa85df596b36
-e644cd567b1161f567876414f67ba45579823f9d 6724449336146ab10baeb1bf441e866fdba94e48
-c002214bcf3af7319199b946b1acd7bb3099c825 abb902ffced26b87f90432bd19ad7e356e6a2069
-491edf15255a1045942751eb65d588a554ff5e0f d450f6647879dc48fd39fe8bbd7b0c380771203a
-e0d28526c117ed483ab2b144bc321925b0dc89e6 cefe1c5f441fd52e2e95df9f8fae695347aea0c1
-e01102fd80903b485c5f3013f72ee34a5d83bb1c 71052e2a41de6ac285e6b0bf1be37b9f83f1bcb1
-18edc4858b28d1126709b1736b95c7afdcb680c8 d53e8fbedf4167e51ab23e88a480140ee28672e9
-c4553aaee0ed4b431867e8a31229e0d4ac600e91 6ceb29625a47627f5f375686490953a6a85965ff
-f95d7cab0fe6daa5fe78f80b6aa16ace6fd98f12 38b081ada4ed0b548cbfb6f12dce7d358fe429b0
-a38b6aee5af99b5f69b82fc6c7ff55e65fa3b45e f65c5827fdad4ec963fb2f9b84157d3bd69aef7d
-7cf3979243401e21c60a01015608d4f09438ed8d 7b61cbb611f25f4291ee5dd91f95532cd76b6d17
-12dd548be46577b74a8e13a39c3e4859fa5a0566 ff9aadff2281b8380b0fa150a0aeb29d57ceccf3
-5789043409bbb90b4950f6b4ae2816cf143e3ad6 35058f073c1f213156bc7d8e7d4e568882a79a0b
-3a59c2729b37a7e35f9380f1d99f0c416d5d1563 2a0dcda815a88afcf74cc1adb9030970fbd043cf
-d06f35fd8c7991183687486193f121b2c504fd1f 99cae3106b625e538993a4a883e1cd85f4012014
-cba9bf2cf5194da14105cc28e792f908ef672864 f71615bb527d8eb95748f60aa28cf8facc83f9d2
-6a68dd0222f940edb6c7785339f88e8e1c6caa0b 60282aec053e2993a496d12c3a70c419a92b7037
-38b1bf7b4f3d94e30d4180ce50eb63e582b9993e d6c4049d4b895a9c034695bd42484df745db83ce
-9a2d88bd2141d388a2e022ef993a78a1420dbe90 12bbb2f87143501e8483a2742be61dc249abd883
-ede2c9f28dd5f684ce288c7b86b16a6b4a4de4a2 dd08632a2331f32b14b80e7825f87799771fa8a5
-706b8df74b3f1185c629b2746648c22f1eb493b8 851dcd14ec99fe88aa373d42f29bcc22e51a0409
-08dc2f58ab784ff76c7920be017e026773d0d100 9344e5f8ae5533e6eb790cc35c7d9e046c8fdeb8
-37e9e67533d7dd65dac910f19b65f777803b3e70 3af4a96e0d6e49c295ff3417e522b1c6ee6e23d4
-04c21166cb45b2ce437ef2dadc78f2305812ec17 f0914de01cc2473df856cea4206e020819216f75
-8499ff40544cecef0edd07934f18baef10af2a2c c233f7ffbacedc74a8933203e119e314482989cf
-9874486f6e056333b1584d390c94f129ce06564a d3d9cb1f4f2fe61af970deb2d7a2b8142e928972
-bd146cb3d857cd628e55e9a92e8d954966a426e4 8316ca7eaec2e7bac565846b49d3075a539f1070
-0b8a8fda5b4f9dfef4b1d6a45fb9113a3fc245c6 32d4d57b3873f41357045112f3f561d0595cc4db
-9a20ba9d3b719fdac1809d4c2946ff3973892789 d5eb635ffa88ef2bde7fb829bdd61fc38bd8582e
-6b5030faf67e5c7590ee6e182602587b1b244f93 576835275497df1c3090d3954949c4a868411022
-e833e7a7121cfa53f6ce45821cce62b360bcea34 e80f3f02d252f972b560db8edbb4b903d7d986cb
-b4fa63a2d907e3c4da775f0d49a3223e88cb1242 d590977ad2eea48c4a74f2afae282c4169b1ad68
-a3bdc91c91b4546e2ade3bb98e0a7f37a198913d aaadecd751332c1e3dee6f66809bd54a4acbce19
-6101755e247c315a14fbd4e41bee057013e099a1 80fc06d522246fb2972e8ac72270fd1813855730
-3c0c0203e7caadc1a3664be2ce861dfd2c98ecc2 00366e122b9b9ac11298ba6f030ede2b620b2039
-dcf3380bf77989c85ebd4146a6e57ef0ce2d2647 2f746808e602d9699563722668835378120440b1
-afe09ef1253675133ee467962633217d9032eaec 1e254e694b81e384cd38909a2f73edca8b9c0ad4
-1cf51e021a62ce22fa37b073979d4d0ee7979281 62943f9f59620bd1b0652cbbb3e63fd593c0c07b
-d4f35361f93d025f2c665bd646a3d76deaebd142 0c7d388fe6522c13fbf31e77da06b6a1ab654233
-47a02f4d6d2715ac797faab85b5eb41cfe99d358 95c665ac8ca9878ff7b5d49ee92b93417be1ff01
-b379d162769e3e6093cf4486dafe14cc589ad693 1ce9ef6b3e7b22de24907b8e8764555941321655
-8badb2274c90d36ecbb0fabdc5a1e8254f102471 8a7f94564b283f31b42af614dfe23d2778abb891
-649103c5f76a84b6b469f866acbd40d76998e1a9 40f6bdf174b5d40ec3c0a41355410fd89bbb319d
-334fc6eba31c9ae731ae4415ba83cf86039eea57 e997bcbdebe457317e60a53b63a27f43da31da02
-d1536931b880dc6709bcbd2abb52d20f1180034c 18af2c7d36549a60adc6ac32aa7d8f4b607b9e7e
-dfe2bf1d14865041730250d9bbf486406736eabf 742c9d8291ff578c3b652515e835a8397e607c8c
-51186a5b40063e7dad6388a99ddaddc6ab89d0bd 9dfbab4714659816a2693e1e1c1d5b83b58e4375
-194106f7443ebac4cdeffe6ce4d883b3f5465111 4366bc2e0603fc0f9d1a3e95bf864b90d321fcaa
-778a5a83ef4e5e70652fbc00f2e1f8375e587afc 65f17fe1430f22b9ef280d1b881a00a7aa419757
-36680184ec50ecf5fff92ee33db711b7512d923a 49b55024b1f7a4cc776d1160b2d1fc95560a0c9a
-57e136beedee9122dbbf46a1d91f6514f058b829 892fccc4064d67e42f48a05ab789eb7b8a131130
-0aaf4b4676f27560cc436d0ff74b7d812a1e6662 a890b4c57ef8f89834de5e2e41da41bc342f9fd0
-7371669945e7f690c9f2f22b04dee0b0b3cf70a6 21fa726e54d490058c975214dd1773699c8ff284
-3196941d73f122f5dbe42aa0ffdc28a2470ea089 c923fb8dae0f6ef4157a2c2a2fa898110ca0505e
-f37fa9b31c9b82b0ca1f13c5b18c024c63bc7598 19eef5d0208e75f2550b63047edce075d4cbe1a1
-6f25e5a4f0e0d7bbe1ed3e14e7da4d371e290c67 42e6a2db92f56af099e3dbdcb5bfe3b4c501aa94
-7afdf5c80c20934ad0c228f41406b3c5df06cdd8 b731415c92d88089a0fe990e57d5f2337f440993
-69e3791e134fc080564d46a71251f15fb1934070 1b249d6f75edcd8ab6647623f017a034d8254c24
-f2365628646e7703ef47e54ea5c3ab877afc465a 9b5c7790d4119991edf02e1e050349e4c0d5bacd
-bde80560117295f6b3e61f9b47f3bdea826945ca c6e688ac453304d2201551c4940b8d52c390fa9e
-42a31ea27be742c452a73e88dda918ea66947a07 c72cb035110ca6007860db68c74c5d0cee4af213
-1d89b85c797bff6ac251999056d54cf46b6c869e bca9dd535f15a4f2232f4b27d82a3cd18e740490
-610181b56d3c39852c7432fefa76ad517fc942fb 4ea0f7b0d13981e6bba59dbf9c54ab492a0832ef
-d58b75f4d0412ba33f1daac52572ab34ad6cbcb2 3fcd22f3552e181871fce5bac6099d34cc843b74
-21fa62ef7038ddb1539e2eba3690e236f4a866c8 2577139c8809ea6cd6c31ea0e3aa770a2b654879
-053ff9dea22d3507ac08c7d671f5f9dceceab0fb baffe5b3c466248beb827452fe978f5cbe427c42
-495a8d490c861c78ddbc68877e4ee593a8770be2 7fb0274c98368fb73bcb0851ddc8a814e9d982a3
-9028be7fec186159dc733b225ed558410aaf03de 0cfe91f9c83c165c25973f6f07c26a629e0f87de
-4b6b655ef6aaf8192b81358a759ba6b02dbcd1df 6117cb9dcefeddaeaca6d2fc3c5fa4e1c39323d9
-1772f8d2575bd717794dfb3624508d5324dbd823 3d65b0698399489ce1e9256a95721755f77532aa
-ea82fcd4589d3cae4e6ef1b6ba826ea2e4b4e846 3823f14efbb9894829b2ff1de6e7c57e0fea1f2c
-e17fb66322f0cf51fc19e17111b38e82d78c50d6 57f355054415ca89296b5bc207bdd0db5c0f9d67
-bf541483d9074c18c6d4f4bd19caf0de82013cbf 369872fa9c5386d2bdc2a37e29355183a7f64b01
-15cac4881bf11eba172556d63416a5d462e5d6d4 f6e9805ebad1c03f66444193a38676cc543e7ab9
-b94be036dcce0c8324d966846dfd2475349a5eda 9bdc7dca3dcab0dcbee0639e8ffeef02ac2559ea
-482aec5c620497a4c242babd135f1898bba271b3 dee119d7a5156c8198d21f595de1ed225aafc647
-9e23eb15550830b5efe1012c8169339931ec5f32 9d45e31e4e39e3736da22ea917623fb2b36f393f
-c336ae03e4b5dc45dcb05e2e9bcf7a7e62f3f6b3 83606bbdc084c962229c671fc2b13d1091e5ff29
-dd081111855a722ccba3f1513a18c54fd875aa1c df8c61ac8ee3e9be12fa7650b9d69a7de2c2f565
-569666ad2d30d83cab0eec1eb206f7e91e89d398 1dd0fe381c0abaf8c434c78052b329d5aa0517dc
-3df270968da72fc7f7143cf778a2148abcf507f6 1253c128500080e53968786bc1c17ce74c62ceda
-edf4f38c846a1e895cdb839bc5c044fe1761d770 a4fe5db599acb138f97aa1b0794ee5e5b44af74d
-4ecbc3c25fc27871654b705fafc7d74ac77a65c2 cd3f5c873321f2cb3d5c73c7eee58d854ef9068c
-1ed421424048a5ae8045ebc1d2b853c3a98b5493 dc9d3795d39ce5f527f434573c93e3a6e3f4e1d7
-ead7b61a6b95fdfb556ffbacdbfef3eaf0d4a168 9d396223cb9f90ae4721ef135ac42462268140a7
-3620b7690b1de428e8bada86124566157ea674a5 43913bc3230819d2f37ee479a5d6899f6397346c
-d7cba3b0a2f4fcb2b729a0422ff70ba730c8b92b 1ae13dc1fed06ac5889ff4b03f7aad90deeb8305
-9524268a86761b4bd5a421af3dae48850d93ca5e 9e3bb1f2469cbb66857b3325f7c833b76c58e9ab
-7aaea473895e09869e5ed26d85be21c122d56788 fa7326e4b22f85c5bb3e68ca474098f6db7dabc4
-fc8ad4823407d51a64464e0d8cdaaade1573a0cc a533f10e2fb8d270fc34e1fa43a82efd2f3f2052
-f805a49439909faee9153212444c1dafce92df7d 1112bb17dad3fef743bd7a1d57ac043bca8ee4d2
-3932458625bd1c4f62a6c88dcef4dadce5b00339 cca85f45d1766be0bf9528f4cb9ef6a62cb1a900
-a260368d321c4c5ad69a965d08c032025be639b0 a6906e163c1bb3426b7ff2621541b715e51ee5e6
-d913eb3b9c4538bda5837732a21cb9413b6a6c60 3a129414a10cb712b62f073f8674be3a7ac40c52
-e1687576d22105db59e68c67ab5f856957d1865d a7cf5992ffabeb2f49532613967abc83d872ac2d
-5fb718e8abbfb59a9fa9c0222a555aee964f4b6c 50530f5c170d602713736b2ed95c356e3320d521
-bc1cf9fc03d2cea7e4ac55df76cb2eb7cd550ef8 1d1cf9052ecdf957721c5bc9d87f63f414059fbc
-d3163a313db90a1699151c8ffd7f2afd66abcf37 9f23cfcf4eecc74142a40a14fdbea93a127acb98
-c63d01d56d0e27db3fa130dd6bb4eec08f2ccfee 532b5d15329c99f380a2ee1c7faf9075d40658b0
-0f112fbae4954a6ebec53306c085ac57b4a91331 e4d4c51515d7a662543a1c3028ed82d685ccb376
-2db202cd64345bd67d757ab8c3175fdbd38a6cc2 f38a76f983d7c6a4c3949ebc5cf5ac2b6ff96ddc
-fafcbd5220c0696f6951c5ce77815d883957ac39 3d097a3b8f52702dda4b754ff92f9b6fedc6a070
-372fb87d85f7d78c6ff285b4789bd868cb000c97 89d61d346af18a20a5049a0fa019624943cbcb06
-8d8239a10bdf8001317553202717277334022b21 51bc8c8bd9bbb3e3f8ceb0a70c2eda8eca3bcf05
-336b16d21b54fbb57d5c6eb0db923df73d16e176 273d510a0a8e823d59810fb8612c648ec7096be0
-997456b101841697cd1b5bb22955ff9e314405f5 7454dfdd5013b216ab1231420a077ce1f87f386c
-8a75298a6965eb35721e63420e7703272d172671 6ff6bed0bdd0d37ffe6594b44d415f3a920dc135
-7143feebabd71312547d647a32a341c07c0f3121 e2276257cf5204c143aa191eeb17c84c719dc2ea
-3f95c322795af28d9b8f8730b9479a8925042039 e735c5ac250ecf0baef7e6988e95ce0d51c070bb
-038a7eab2205921584fed72a75c59d3739f120e4 ad8feaf3c843bdf43fcd344afdf0073c833724ff
-934f757ed10b41413e6b064739cda7146023068e 8c9a849f090287dfd7a0a14ffa4be32187b3950a
-7c0f51ca82fd21389cb7cf833887c63dda79b2fc 335bd0b75c15f898d06e6e1af616293f5f06e96a
-276fdc7b9cfa8a7913f17e0c60a4603ba3181cf8 4e1d1585e8cf218b04a065b6abd834f9d4a586ef
-1c763473a1b5b63c0bbd74afb7befc5522b69d17 91dbf65421f54310b2b64e80761400891c6df89b
-eeff72dbd3f8a43c78070f01cb4054564b3e6aa0 effe24eaf9dfeee69e26048711c174a388b1f1c8
-9ff0560f60433ee3d194006ae0ae36fd6dd1ccfe ae6732309415db5ee7d6cc61d7b7fa9893ed69ea
-28d69f6c7f787230c3569ca07d5c1ad338aeb6a6 69120ea81f5d17f4969263f42c7f0822c00d086b
-2d797b9506cda9cc17310bcaed23b7d27071b941 3d8664a7d2a82e48cff2c168a6e4650075180e62
-bd73296081f8b98c8cce93694e58de8fa4e0452c 5ac16b98a63d250957e69a05ea149b1232ada130
-11bf20602885c3d2d42d8a7f7361d2005a708b5c 7836cc8b93be35d387f8b95b1fb4cfd5f224ff53
-3c79fdb428663a03116f9ce02353e4c41adc1718 ced954b2463d6108db7ba9af4cc2b1806c56dac3
-802b67382e31c31118494570a15e8c1b4ca3749e 65c10fda5684325f147eada48af47afa4eec1848
-e67bf3d79e4341be1ab6eb9a26ab669005736de7 acf8080bdd9b80fe3109a781a063c9257a31ebc6
-dfeef23df3a5eb6d31ff46c17e8ae5bb09ca79fe 475eab0c6e5e296655d7c88fce76b6673feafdee
-2fedbfb21c2e1946d53bd0a1da51ddef77544005 9f9b8a0a763e9b5938835c497a7eb6644ae6b72e
-3daaa4e168b8cd1cb858214f1e42a1c4d95af731 76ef916dff07f053c8592649bef852ef1055b971
-34b7003a5e4a4e8da612d9d62a8cb314d9c56bcb fb2819f74d19363adb5a28c356ca25098ec37196
-cc6c02d43135b77cfb6c11474145248e72fac05b ffb78950143e9beb0f07e3f4bee7e5cb27df2033
-f86ab98adc3d7fd4eaa61d1a4685c5d8a1efdbab 8572c3d700c39de103ae9f96e5dd1417e774eb50
-20c04f6504943d5cd8d45261a69d06cd3b81c56b fa6bd431d8348ab4a2e70eee60d01226f2ade31b
-d70dae59dc5a54322f736e0f1167908d80b8c2bc a835f03814bcf9fc3f8dd8ab14e5db691054257f
-ceee5d13f032c0735c3290cfe7d80dc6dbda0c58 a835f03814bcf9fc3f8dd8ab14e5db691054257f
-624e1473ad34771d003637c8877df9c7a6165d23 ea093af353febe94b8cf48cc19619701e10ab640
-b90515a211a961867d0e46cd46a0aadd4c6963cb ae1e8aae00d878f67fe45fd4fab825b115810606
-a548e35be52c3f668116116e6b628a0cadb11468 ae1e8aae00d878f67fe45fd4fab825b115810606
-f75d1322a1ebf7b541565c2e550f80ef6954c273 4b86718d69137a00ffe2eb22ca9b70f7f6c06468
-87d4633d20b776ac4524145305ba379f7e738610 8a893783ca1ec8b194325d959633e27633f1c6df
-1601b5295e1bc57d7250b693993323ad7d0b3214 8a893783ca1ec8b194325d959633e27633f1c6df
-7f21a122567530338b31d57eb2e83041157797bf 987a9dd5015b7abea3b6ac89bf4f5829cffca14f
-a4e992a26a6734570524a37b581fd1641da3f6a6 681d431ee0080ed4653680c82d749cd2e354290a
-e4e1d3f4fd990a118b9add32c1f3304e1aca4077 e2caa48b35afc85a89b5f1769053ca3c9a51ad5d
-8c05621974f473cc8b68278eb750e045a83942fa 0c799fe0a011467c5216f5b09f62ddee26a6f0e7
-db8ee62ca3519c1488aee09a9e02c9f73d2cbc85 b86eb563a75614a3ec58912ad28207865d631acb
-a3f472952a16d9cbcfc16681447920bde04a6ed2 79b48fd354244c840934eab857defead20011961
-74b62646437e5ead313f5afcc9269aedbe0048be 2750d230b6d3e4a461883db2d0fb03bee98a58f3
-c446b746447692bcfdd65e6b0131b51030e228cd f8df324df0763d2ed51ce40a0760e2a5472c8d12
-9b08c210edcfb3fe36890bfc6171c8a6d4aaa5c9 1e5b43fdf43b85f806d1a6cc93b1fddff8ed3b7d
-3e482e6e28769c3f2f4e5587f0fe4c1b33949a1d d4e3bd2e370fb730236979343f054dc3881cf868
-904809c542f4517806ba794d85f31bbddde2782b d4e3bd2e370fb730236979343f054dc3881cf868
-47df1b3fd94ee76165231899179630770fce72b0 737994fe21b23cf9a0e3c7f541bc43ef16312b2b
-9eb2b70f60540dd159dceb39850bb5a518ffaf19 efe99d0926806a1617b9b3ebf18e4b1cf06b4c6a
-b1c6890eeb989a2cf83d8107aceb4c09e385371c efe99d0926806a1617b9b3ebf18e4b1cf06b4c6a
-0bc66c6c1e73f9f52d244f450d6e9c86de74ba8c 681b1a44b6e90ecd754aba809a76fba2f606946c
-f73b3197fe8ef329ad8a3b88c617361ed126448a b64eaf5e5991a93bf7078d81d3424df8ae5a146c
-00aabe555ea6631277a80781176a33041168f2a5 c7b4cea3ff1de56872a01a1ef72c9c1e258acc73
-34a314297b7f7b3102790088cd867076efa71ec2 822cb176f7e9faf258ef317b8029ecfff326c843
-f1d2229164bbab5c10509913ea392da694a7cd5a 5b30c371718c17d598e84bd040672ab9e129872c
-15f8294dbd52f36cc90fa0f9c85ddb23192ac09a 8d0a189d0d345457e5ff170f000a8e7e16e76fb3
-bb98be9decdf7c43f6dfe1b117d2c67f86345850 5b30c371718c17d598e84bd040672ab9e129872c
-ed019e2607a9040e4e18fffc5f8a13956d8d3722 8d0a189d0d345457e5ff170f000a8e7e16e76fb3
-d90064c9f1ba8c2e8f12e7976035faf8673ae8a5 8b83aa1fcb7bd052713627a46a654005751393e3
-cdc2f8348087e25ed4e2fe0191f5b0019c26a544 8b83aa1fcb7bd052713627a46a654005751393e3
-49dc96bf6cfa6455b99ac5523980df195b8d87c8 8b83aa1fcb7bd052713627a46a654005751393e3
-144df58602c078063cd05d4b4cb7857634db5116 4ab2d0b484e7ec22e13e3f98498c8477fff1570c
-e4f164f0409af48d958c7c85d869aef51d02adc3 4ab2d0b484e7ec22e13e3f98498c8477fff1570c
-d23189d0c67c8236c10750db126b0bef0a9cb50c d34a287f441bdc13f4bcdc00264bccce36cdd665
-5e93b5c5b0d27291e566eeb4ff51edf7386f107a 4985d6a110a1b1a02dd298d4fa309d4410b9976f
-917f8aaed631de48b04cd58608ecf842c9fecdee 0833cb3134257eb203462b4ab9ac8585f98f78b0
-0bcd630eec0af1b93ada21b105ab86fd3195b19b 80f69b2cc7c181f0fcdbf4a9aebec1fa7f811907
-96fff66678ed221a048180cae965419e4fb88385 7f0f4b58b4954085ea80eaa00120779a81479e2c
-3d3ac980fc387e0b4004e8a41bfe7279e4365b87 f130bf0b129b8dc484db22f53db7714e63fac5c1
-e2d0e01fa54f37de3dec3390c82d462c634821db 34984eabb9009e9065add99d98fe2c34ce109d79
-30c46bfa9a50c03ce5d3e614a037b828bde52ff9 6676bd5e8ffb652c302b31f09a0b9e1138666c25
-013dfc16d6ce62aef324499404130c76d5d613ed 30ee90948b63ba6c58e97274ec309f16c9bdfb22
-b369662a4efb68be33e4f0d40e036755e9251e58 b4a06542a9c80970d5d2f35b9269da63a90ce911
-99143cfe3caa98ac07fd05c12fc1105c8f2cc24a e097fd3f7ec58b4ea4544af0c261fd331aca0aac
-cd1e49987aca33ea855927e803ac1eb799ec25c2 a1334903915531f6ea25966382cab06106cddf5b
-aba0c2a6c7e1d1f2499d8a345a1fb73271c8d62c 14cfcbd39b39e7d63969cd2bc694f93a57b0ed77
-2f9e7eb5deaa058718080e70cbdcc19df78a7d1b 4cd29a255848fa5e60024b5d8d68d082bf72860a
-8df381d89e7bd89cc3e6b79cde8fcdfb7c503363 14b7a7cce78f4a5249b0514ee7afc306c6788a93
-1a0b445d095058e40f699d4234827bbba7baeca4 7d6dc4137087a7e3f9d1d3c63b8b2538a26d34f6
-478908e4a5dbbb32ae4d69e2e9ec3f0cc7469c97 878cdae6fb396b995ecf5457793cc1cecff74a6d
-602f64fcb8049d8a1a7db86408ab3d408440b342 51f2a2182d36b21135c74e116449b215c86f4da5
-da0a34c638afb2c2b9b04ce5dd93b4d0dd9c4a5a ce7752b08c9225e8c319836a08ae5d23b4534571
-10bf9966681da0a648baa9329f604ec43f09bf82 07924579dc9ff8bc9987baeca0144ffb6f280699
-28c4eea7bf0e4b47a836d7aea59047851c40701c 116d8c04916dcd8d53de4b8b5911a79aef4b966c
-01a4e51fdeb44cec209b3b089e9f42ef1729f350 ce7752b08c9225e8c319836a08ae5d23b4534571
-541e28cd37875dbb0879525072ee4e4f79c6155b 167ad3960b77f87935ddda6ea0a551752d91c370
-6a12325c1b6b2aec32c3a0e7f8dbbe6b3316db8b 01b0a19860324cea67964a8624433af422c0b626
-ab023b8df2b29a0ba121f12a7a2f126c8db5dff7 504760e3b35629287ddb1c4e6fd19d21a9a4a5a8
-787e2fb7df2d998bcc4e5260d4fd22bd52b7be18 ae64c453ab8c94ac5b44d746b8ef72d3ec2fc0fc
-2553f8b29fae6bb9b83d506e5f6d741180ed1819 1dd47ee15af3516591ede7037cb12ad35832f876
-42fde10ac0f971384a18afb6cefd317389bad461 34792399db3f0d70e95311b9d6f61ee4d31b9cec
-63c4e4aa3b6a35f2d7c4c8434f3873a4d6ec70de 0b60da166f9a0aa867d1dabc558e10a3b225b0eb
-70c1bb674d7e8aef1123d898d01ad823299f4379 c3d47e8a8f1f7f27c7ec538011ec75fbc2c04bc0
-c6a9cc5028ca63dbdc85f21d38e02f64fc996bc0 302db9b20713d9edb468cf26a464219c387a4637
-f7331b5749ed0e239e6ec1252f4553576dc5855a d15f0f88c243e9e34a870faf9eeb0497b13bde0a
-ac638fef69a9afc5c3baf4f0796483dd86fe723e c0b2d37e46c1ccaeb84e111958b28f4bd755127f
-d4a9b50475c8d57a5616cb8efc7b7d700e7ad46e c0b2d37e46c1ccaeb84e111958b28f4bd755127f
-0209ded0df164a65380565cb974ba7b6e6d9f3b7 0cc8c01b31363c04edbacf419843d6c8917f9002
-21e6f0751403d078a76753ddd960dcb1e27c8495 e12d7df770ffbbe9d99bcd0315d1103f7fa28e29
-76bd528035064374446e44af80c71e3016d8d5d1 c6af322c1539d3f718a408725dc1891db415777e
-b1af318cb0ccf1401cf9a86d4854a4503a82260c 3df5051737197142bcdf10ddba56e6e5e0ef6231
-55c0ac7ddab297d009896c4d7d18f74b266e3177 0b85d3c482ad3930676e17f31b5bb30a511c3516
-ef717196763d20a49b5052b0e820e6ed796bb93f 151fd0bd161ebc49338f1c6f68a26d5e2e063d99
-e910539f2f90b70a4718dfd76e7abea441483273 151fd0bd161ebc49338f1c6f68a26d5e2e063d99
-3971e72f8859f3abf19bab10425a09a2b44eec8d 91537be71c5eafbd9f2c43b440cea52abcc225df
-548977cd0c950daad7ed463bc5182ce483976b0e 151fd0bd161ebc49338f1c6f68a26d5e2e063d99
-cc9f9b999d1f819bebc99b9a69576f6de0a8d63a 3fb41ab68b3a2f011680be694a166ef80651e87e
-ef0e94697ec258acc364e1bd67c5fa6b947806bc 91537be71c5eafbd9f2c43b440cea52abcc225df
-dcc45918454b2ade6d9e4acb875725451a37ee82 54ff890a3b5e178b59c0714de88fdf6b0fd1b1d6
-2823d3cd515bc6d768afa2ee3295a53dc78a5ee8 7d02b2cbdf9ae8586b67d7d6b11682d01fd2c6b3
-ecb23d20a9de2bc07e4c8a242183cf062e7c3b8b 92f9c3f4449d6c2312298de62354e20e0115fda4
-29f0c3cf96216006acf309518fb186482a073fa6 92f9c3f4449d6c2312298de62354e20e0115fda4
-07c001727af5e44420ccdd97b7f43376e7c27200 750a52afd817776d587ddf7d016f52bcfb70287d
-1d0d2dd586ab0ac69abf7f9a8d6c00477f85f366 750a52afd817776d587ddf7d016f52bcfb70287d
-0db1c6cb292d4d2faa08fd213127aa0435015ce4 a35fe5e070595c63a8b79ed59e18fdf90619c264
-d616619f563e2af2c3ffad8e7a33a5d029427bcb f7e809c9dcf581adcbb866a7e27f5ddaa05af2fd
-ebd1cec6f138300365e9c480981af45ed25be976 28d8f997062654b45cfec70a41098180fbad4a5a
-f84652107d6c440380745854e4cd45fc3e48c3e6 185bf00dfb7bcf20c7c4dd43029eebdb60f78b13
-b5457b9613fe9b3ab7d3fe8998bd9f8c4e14d682 83c60ba0a4f994c3f7f1573c4462c2cc09cf5117
-0de02c9ec598ccd413b1b85622002e9b2168018d 1c6958c3f658c630019e53175888530a8a98bc57
-10f02c59761cb1d566604e04724d42343e2ddf17 6b3c85c24924065e78f2ed9163e490380f93965c
-0def2820c00c42ff630169f7b37aaa48a15b187c f7e809c9dcf581adcbb866a7e27f5ddaa05af2fd
-8b8cfc69c022fa295007f818c693d1f406894a3f 9abb88dd3f2e541ff34b7130fb02569061183a54
-5b5cc4a8642ddb5f309d01d7f95dca6474001159 4adc9bac2be1668b665d9ec37b15df7487e352fa
-f62c347bb9addda4f4d1882e2364a955a22afb32 78a7646374fe89cd05034ec69cb05152d5f18333
-b1ba14f9725a67ee5c4418ad5ff0a005838d7721 1f3c7a664fb727cb0220cf572cd106a6d2ef80ad
-889f5f2ece3df5663e5e64acddc828fd4ea1f60d 660b709a528c2809ebc9c4506707f84c19726b36
-cf6cf9344aadb69756b76e7f284d4679556f3319 5e744b1f734fa7862e59c8852fdeec632d81b6e5
-6e8606d4b350947ed87a37e8984d597522f0370a 5e744b1f734fa7862e59c8852fdeec632d81b6e5
-babb41195f70f374f8816ecfe6bd59f8f7eccc1e 337d0092d9406bd2b93ea7108513f7d199d45bb5
-8573b48f05c8e1f05ee2e036c2f0715ad5608673 42600ae6c98671c673926eca2fe8b1dad1acc62b
-509b502018f31c344ef5ea4e8f093c82b074c1b8 47f6458850b827282d250d665bcdb51210613390
-6ac2959df48ee440a0677cf735110e3540bab285 0ad7ec87331f128166ffd0b70db70a9ebac771f0
-ead29f1366c3b7155d286f2639f2d8d0190b453e 44abffb397573128fd12ab72e03674098ada0d1b
-7f3e91e29471efc93755bda3003ed12d14ef8a24 86746a951ab9487f058e26cf714bfac71d96df8c
-446bda52c32e2f6d2cf1a60988a739465f6c8576 ab7772ea3c4fdd4f8cb28dd26c2d3ad560c135b4
-269f91445d1ec0e4437b868bc65c7d06a9833f1d 2e7d5443efff3048d463dd91959a1101f27ec9b3
-4306d66df940339e5fbdfee21e2bacf7f0203c87 62c977180863c4b8f16158c2d25b27c2ef00c2ab
-60519de8d194d117df73941037e49f6a55cf6978 7687cd9891ff596c88540786c5df917de2a0a4f2
-a79a7985c87cf4d4e1eab2a5a7be23473eb74cb6 503021167c705d3bf06bb7eda1b7e4535c8462bd
-7ecff5c2e0fbbb6a8e5c04040ddcced0b31d7b00 f82a7eb4127000554810d22616d2aaf673271598
-7ceaef6a240f0971aa106a0f6fc59fc08ec18b9e 51da18b5e7a0a981c47bbb2eb146bd0c4893540e
-b919780567e9dc2f871e75a1095abbb0b3f49040 2febc35ff0c768e77115d605a81209d0e46c099b
-7d4cbdf01e822c8e7deeaf2300727f5a7af73275 0ceff9065d5daf08ac8047b3ab3aef28b429cf6f
-88f75e33832467da599bdb2ad5d068ffd959a092 51da18b5e7a0a981c47bbb2eb146bd0c4893540e
-55e8b3855bc913aa88ec55e555b1e0491589ad90 acf6425ffc002f2f3e56ff8f8906850fbafbf56c
-cea873378e22f332ef6b002790ccdb4225e1348f d4fe9898feacef9847e4a0fd6c5f7c3381800d8a
-02f07dd139d766478b351d00018ce49c3346cfcf e5b584ad46f1919e889b970d8507ddcd89e77ccc
-10d619eae33ee18daaea848695c11bcf67e45195 a7de392ddeff1fee276d4b7c82547053dfed4d07
-e787bf8ad115249d346f2552a03924fce35e4326 9be3d0de3da10e6e97343417767367a98a574da6
-5e9a077df6125835e893578b9904195bc64b1117 ce8a1cb20f6cd2c8525c9e49fabfc4f9be430070
-b2847d0963bdb5b4016fe1798a4322d3f84ff376 710c486d6be25d55cf52bd433e91e676b57b8a86
-f8ef3e55bfbbad2a34972f925adf193d71c2b326 77037bd2892f64358c2826cc2d1a6282f4d296fb
-741b3a355e81536d36687062e27e041229beb630 7e92790d78cb2632ef0992161668e71b7d32bb4a
-b8251fb85d66beb23b2e890ff3208310f588e2c4 c55c24a16cda7bfb1f3480fb46bdaa5acb1d980f
-cbf66ab7bc0fab5c4985d56c5a3e431afd12bd6b f6f99da2a9cb3f74d2867080985065d948c5337f
-a6537781700d0179318aab401b6078566a7a6ed6 5508050eee79df1a0a45f887b66745b90641222d
-3c99501485e04fd5604011d42f5d27b6640c718d 513b5d7cff7a37986684171b9db1aaf6dd68b0e5
-262d2b88dd0b5787137220def659e6c0236b2b0c cb31c25450566fb8d6bde05616b2c57653833033
-c2a3aea06ac54be2578d0873d5d7cbc30570bf93 40d2a6549d49de2983043276a6c2d7dbd3ba1c72
-8e34aa2fe3357d05e6df7b5db587bc727bdc263a 4b88e810bae34a48c4134f82d3e0422e08078ba4
-79cf5549077f4ab53b9d2b09090513bfdebd7693 4a0ce32a5a82891b5b9cb18dec2e10d41020bdad
-53aacb305d5c71ba1dd72cd4cf94738b54b5b48a 6963bff5b92f1d66147489e45109acc2ce0b2b20
-2c0e7faebd3ad47f922ba68fc9b7569a9cddcb70 7358f113974f5bc99c11ef3b35b04ff55e5eaf0a
-21288da813cde8780f5594a86d18a1832660e79f 52be24e74cb0221ecf8b7fd4bd0702b3c27d0325
-661ab870a0ac658e1d637ad730c8c4aa848e7738 cd603122a85d6eadbde6c87a3deff71c2a3d59ce
-4debaca33b41009f58d90f35e90374efaff330ef 47e2b28fafb0ca6c27e7acd0ac1b7fb25a3522a1
-629d52590de23120c658ed425f5f23fee2e4c5f7 c0164233fdb1615f4a59d0ff9833432ed7b3be6d
-6c5dcffad1d57c0b01d5ea89f5bbd929cad0381c 79d01dc9bbe2a067a601e64b733a45d8e0d5eb97
-32ff7e88da92a18a12e00dddf2b509d0c420a8b0 62e9a8a6e811e1a3a27e716a0aa74a4979e3392b
-1e37cdbef38abafa91d172cc835efdeeb204b715 77ee4f85a6c949e2fcd9fc813f6646be1655ec49
-d84cccbed112d9b53fc13dcf14ffc5cdc27630d3 300d3011ef69c46b8dd9087d0b1a8324e1375db6
-fd0d0a7b8eb45e6bb8b253f791dc29ded1fd27d0 ef3584fa7467fda102354a613a424c8ab274e16d
-117d99160683208d2fe9d03263f8b2328b09c872 0aa6ead58b39e1967ffbec97ddcab76d73715554
-98ebbe2bbae83675478aabad54ed5dd637efd876 e1bc442dc95585762bcf4c9786121bd8ba429876
-16f1697699615b526a2a66545f1504714aa707b6 3b6a62557531cc286c50a70c410d21b0f9da2188
-e9d6526dd76f4b8917989dea873ed8b15fa96d81 a1fced514a0cde1f67202387b5c4a473f80c2f1a
-2ed45dc039386bf4d1cf909b6e6a9965ec9f7424 b78a9c14bf69c2095ed80bd20ddd237c8254ae10
-7ade7c63bd78b498f7f7e96afa739a900af3432b 46c7b36793c9cf1e88e2b640d45d057d10e97b70
-915b5f98ab7106cf8ea452a966de6ddf4b18b7b5 f195aaef7e759cd531f7c87351b64382aed9174b
-cd7b26593ee1501a849cf0a3c84fc3ac97a00ad9 3b704b1b36f4722575e3378a7ef29fb0750ccf33
-8b779147696f9957f4317887cb465b86eaf965c2 d000753adf19a9da2eec7a25663705a698c4efe5
-ce5b1e9de361a1e486c502a62a543dbdc42a38f2 e741f630ee4fea1c48d6eaeb46a41222e12dd590
-95d31777466bf60d82361f179c4995ad56a6ece6 28f52b3d2e3d56cb8a97de9be1039f1b03e21f25
-0fd59a0e5634495ffca23f6f7bd9ea6e198c07c4 12c209e46c0d194e1de360131d8c8b285c785e45
-b409c74f5435034cab3677a76eb796406d10052f dda38c3df87c71066cd04c83a4e97ac28ef067b2
-b873a3087aae760785cda9cd1666a3f90b8e9931 d8ed01e11ebd6cf20845de167b32526eeedd01c6
-075978c15314a66699afb6a1c6d5ca9e3326d35a 361b295255b2860d303fd3e9e2ba78bfc3b4deb1
-80c9e173e37930eba713bd631c8fd55cae48f10d 96718051b0b68522be980eb8dd072c7c71738f87
-9abec4ba873cac94c9394ab71d37416fa7479aa3 867704926a0651f10fa1a4a8711325bb6e187055
-49f577dd95d592ec2a8d268d438e034fe5b5bd4f c80ae8904645af82771e4abc7cb818e08405e647
-48a0ab1a6a48198e6f418b2522f04a31a676f5e2 bf52742368c9141340d061aae14cfbff9178a2aa
-986dc1f15bc31c1f72677a2ffae7290c729d9bb1 8f1754d49d6f33a9bbe0c2f2d230d351188863eb
-cf848ea595d9457501f3142ed18267593d00447e 67faf2ffdbd5d3215a13fbf60621b757a690ea8c
-7e459733948f4e49507276df3bcef535d6994d08 da61766d40c1f0dd3b374b81f8765e6dd0e6dfa6
-3f8fb2bed75cfa4e962e13c3a25fcbac39031089 64c5d70a37694e21ca2aa746bc67cc6375bc9a6e
-bc52ea817eaf781b0992ab19ec9b223f91cdd58f 89d3c8bbc122dff9ff057c54d78060ec58182760
-29a134b1936fface0a4875b1f3608bec9288a77d 2743124ba4ec46e862c15f57d5f57fc681d4c05a
-92fd90bd795a18dd6b85e257a3f3de618fd1236d 75641ffd74a153b1dcd7f954a7e0cf7ab4cffd18
-77cc9dbc639ab839d0f9cb144abd20fc0defa50b d15f0cdd434afd38612da4c4b62ff8ee1d8133c1
-20802f9ab6b69760e2e543d7c4eb9f339f78efa4 663cfa5ef2c4dc13c22fc64c5e97de2a207150c3
-ee45c7c252681ff4444bd521200a6ac5febe9d9c 8a4ee67a519122e46bad7e5c2aa06c2c81a47474
-3b4e317dac43174922c8e32a1b7a5bfca438ee9a 6e575c62d2b8bdc3bfaad0ed8809f9fb2ec4fff5
-3aedf19df38454b3b5b56994ccbc7f2e164c226e d8e9ac1a77304f04144f0773675cc584ddb8071a
-efeaee80cc93da038df59ea89079ff148334a17a d8e9ac1a77304f04144f0773675cc584ddb8071a
-e79736fb3ca4d60c0d76249780c1e3c28d412741 399130221cfc789722268c7c63027bfda4be2dec
-94c6c66b0c5911e31944f754fb8087e33986cf17 399130221cfc789722268c7c63027bfda4be2dec
-fb7f4d6fb35ae0c1db608d3c4395befc8dcfcc91 f356344e9076ac7898222f3f8da6accb40c333a4
-609febc12fcfa89c38303c6e493b7d47609b253e 3bc38a50f36cbfccef4c7741659b742c4451fe57
-b31cfeaa78c036d70cea9b653ad702cfeaa8ffa0 8c898fe4407c5f70a4186619df5a8cad87dc7086
-fc414570c9f8d59d4fddce24ca35519c564e4f2c 399130221cfc789722268c7c63027bfda4be2dec
-e073660d4d98f42310f19767894d52093282b133 c6c659b890643b637f41b0f32d3164749d37d783
-6bb5c0b334f9f45a50ca7f379a81f4d756501761 8c898fe4407c5f70a4186619df5a8cad87dc7086
-2b2a13e3383a49fb562f8ba980d07f844e87f9da 6f3399d48f6c88cfc2082286f2806a83e080afcd
-04fc6252f417a4f57c738e4bbbe6f9cb5b509820 38de1292825e0cd5e1d04b6da6e128df155fd828
-cb2ecabea423cb572da19158ff744946e0f8a00c 0cc52f3610e122f2f0ad342c90e64175e8b18c30
-2fb7055dc7a1d4ab0a6b136e643045df45b37a18 80c47006ed9df6117273fa201aa8576a363a7767
-bcd2233fb456033983cbf31f789b850eccbda8fb 452c2201ad495ad862c42bccc7ee7b6c1bf38129
-4b5616619c8c49564f95bfa9508755eca308fdf4 ac07c94732a4b9b651ec1afdcbc836f36ea6222c
-ccfcc17cedf6587b8c51a2df7b505f668b91733e c6c185fffd798db7698eeab25eff5b7b9f5c7096
-a60bdab92cfbebb31912f20dc416b492155360e8 793b67ba2476e7c69b90759859e2c834ffa7ef36
-d1e6fbe666570157b0043aa85052a61808a10f9c 2d614d1db40137add49f4810b34b6bf8a8199007
-e1e225cd1debd7b546c998c05623e43ace8755b0 c5c13d305993cfc79c19b8cd10018c6be9a02b14
-768a87bde2dd5836b6c3102e29b114930148c867 1d4b3099ef26ab587c7fa1424de3a5261bad91eb
-ff2ca1974f91fce24bead30e097ccb14c199f501 a72986c69a84dd8bbb2e816f41594d09094e0077
-9a0d5509de1f6adb6638c0d6b2d328b812861149 9558e4a3307a828e416cdb7a83e8df91a8a7c7d5
-5ab3bea6bd2f7afdec9000fd1ad07a3930c90017 0070d48afbc9a33e3671b8c504e3bb257e9f1027
-13c77a962e494fd8e53463003a6326f21867dc5d b9a66df6018da3d226ce1927c5a1237a5c83c402
-14c0ef02b60f6b757d2655a02ba3562c712701ec 2286c8ce1f0d11e37bc2f422d8a1141abfb1dee3
-b593c868061c8a27afc81ab47b4464333458854b 99a6c121b1fab8d619e4aa461d5842bf05e9c20d
-2237a314ea2035ad84e27606d31a9d8d89a2e852 8ce15d32a6c961f149a04564653467567080742c
-84a9b0dc0dc342020cb5f8aad4b3bb27e6cfe54c a079ff1e5101d35e5e9121b6195fc7e45fff10be
-a61f16432aca3b2c61fe25c62577ec7c767f52e6 d2b7c0a93d36ec4fd5a0ed6995548c9afc5081dc
-5a1938ee06e0e25725601d63dd11eeb50f002d39 c61e1102b4c038c0106996922d475fb1e656cd19
-bb238447d0a48f8920941031cf3c20671529fe28 d159dc34064f38c391afe5422332e9b1a0cd0990
-456245cf2d42e2c5b2ecd506fe63b90077159780 c7706c3afd0b2250de94023601a1c18855185bee
-caef46a3ff91430c1fe40135a040339c1c0af4ad 11171572dbcb020bf986b9fabcea691e11212052
-f603b9d510e1e2a2eb6822ad0e4d88639be57fe8 8238f9a6e48024ceffa65b39bfddf883f6df920a
-f55241f4ac9bb79654b2414b12011c4071e4c047 4cf6634aa839c34e4bea0fb32c9ce11b5d8bfb98
-aad271c813a2da9f534c83503154f366fc07c4d7 96ee127b50dae0c58093541d43f4de6c84e65dfd
-4ecae2701c796dd261e4ed4058f9c5bc65f312c5 aea858a1ce32d588efbb476dd3b26e3ee82c3bf7
-494326d89c966d832e1cc7ecdd6add8e28ccacd5 aea858a1ce32d588efbb476dd3b26e3ee82c3bf7
-11122e1fc5cf981d712b59c37101cde107cc00d2 84d4fa5bfb681f036db78c0b716fdc25f5173538
-0a4e00b26cc516e8678ad7084a00546bb886b6a0 0238de47db9606560f72a89e1623649293251686
-a9c6503c6b27fe267e09de4b49e2bc4a99756160 7c1c392ca1725520d283aa17eee03a5e84cb9ebc
-c6dba3442febb2bf7f43295a7cbde0e268e6ea3c 30c0848cace8d33e17ac3d6df8f1d460ce0e36ce
-18afdf2ff8a277cb73da7a40d6261f8526a6e0a3 7c1c392ca1725520d283aa17eee03a5e84cb9ebc
-1712d2057a9f35092d0857c975c689abe3a71e55 a46dc3270e606968ca02f74844596e7dc2b2122b
-7a839d9c9732984d77f411f7671b20ae848a7186 a0e1429341c65d149f7cf1f686a0fec65227ddbd
-f2ae6cb669e79c060459cbab1d9f2717f16fa527 858c7fe07d3b0785849c92feee46956e8d53beb4
-590fb90646deff979eca2d3476fb537ead158b57 973d67828aa210d4dbf84a13906d6f82021e2a68
-f215e77d9fe8f620fc29f3d2c15dd0ebb3a1a3a0 d18581a5f0cea0678fc02636ecf1c30c7a7d671b
-48747c8890670fe47bed0a72ad9bde3ef0500161 6548aa06e7a9843ec8d591beb327af8c7e5d5d3f
-500050bd86168caae0f78867308808d59bbe01e9 2645476df0b1fb42bd74274f33bebccae1a2ca5f
-cf62b95f4961dd8335063ce9d4bcd121a1ed5604 e2a7a573697e79f799c357c51c4c977756b1ca5c
-bf55323b1d8640190a3f2a6747546286d6a905d5 633a050b3e67fb30104e2de0d99f6b0c9d322956
-005405a7687c2464c8095101e24fbb4eaec748f2 069012ca5b16accc46516294d71c894e5f28eda1
-60b527e8e2dc2e264830150cd6fe586bafb40278 ab0fbe1f093120ce827ce3200577a1ece96df466
-eb5ed016d3dd6b503837a4d228cba26212cb4e6e e8b14e5a78c3a15f629d174723b666f2f1ebb3fa
-2d69536576731329c2748530e8ac156a9b1db6b4 6a1cdabd33311050fd39d1fe1dfcb23e36dd1bb0
-59f88bc08b92050706e9e666fe6dbf2cab7dfa53 6e3b2e13906ba8ff22d3c8490b02d518adb2c907
-70395a799fd1411ea7aeccbdedf2eca6964c7cb2 6e3b2e13906ba8ff22d3c8490b02d518adb2c907
-ef160381948b448c2e691031c33051f5bd2943ea 6e3b2e13906ba8ff22d3c8490b02d518adb2c907
-fd46494f8acb7873e6b32f0a7b55b49d5c5f5a50 6e3b2e13906ba8ff22d3c8490b02d518adb2c907
-ce77c2087cec2a1b85f922013e34f82d545dc2c0 8a906e581c989838b696e500411d27d7a54f8d6a
-ffcc49e25af8b9988350804c2efeca4a9aff0469 bb38ff1a763738609e1b3cada6d15fa61e5e84b9
-2b4a8ff5ef7c8669171195d6051e04bea16872b2 bb38ff1a763738609e1b3cada6d15fa61e5e84b9
-c833ad59f80a5cbbd5ec95c51b24a3eec4dfdb4f 08f6d1ab5da29675da93c9638184910f5e4a3e1d
-88e9170e4412a957b9022a3ed6382a4d4ee0428e b3f9041e389f4e9698268d87fd10d1fc9f471f2a
-6ee7ca7cf60b1dd0ba5e2338b4841dc7ac69d259 09a7024d094d0626b8983921bad79f070af45b51
-b57ef42975d69b964b448e2341028f21f8391911 b3f9041e389f4e9698268d87fd10d1fc9f471f2a
-a779078f6a61c30579fde56a8270ca03fe0353b8 182e2b07b24819a3ba8f6ce31d4d950e48c37a44
-e3e3d4aa6e9889cab293f35a00098623d7050a8c 838cfce97052d5d41980bf0bb8417080e2dc063b
-963827526c5d8a12f460ce1f39381cb1a548c251 dfa1e2e9dab09d15a811e279273bd3f91a3a1764
-a982a7124e0e2aea69d016b0a50ac5c44e99d301 86baa3e4a1eae7166f9b27bd04a79cbf39adb161
-56215d16c5ff2806d338425218c7a38f84d55fa7 0a7edca939cf1f8fdec7415785e430f7074ae9c9
-912b59d3c695fb1a7f6625bf1ee98380050da30e 10ec0c4b79c9cc994b1b16b94e5a9ba722e32ad6
-df63be6effca2930fabd3c5ac90f2f5a6831ee08 511823566054fc995395d7cefd886afe668fc220
-489208e86f4d906c92b45ab75596349c014ee3da 1f9c8403a321783ac1ec810f435c9495f4215651
-e09b1aaefd7496dfa450a0eebc2f5d0123c0aa11 4b487a3e56e9ebfc96a5377b419a84b18ea450ef
-f393601e09def2eca841a17a35e7ac98de0e5c4e 079acb68b85f626bfe4bae9e3f1ddb15894c19e0
-a2bee14815b5a69a78dd85d24b87ba70bf079ef4 f9ae2db50089842ce735f380a8ebce724f9c046f
-bd4d9b4fff8fc4bb5cfc8c2ee107a85cb60123af 948ab51ebb57cecd1ff4f0fd98bd3afe7c247448
-cce574a80120e06a4e5675708a22b1eb01478fb0 a7e82b63c32074feee9122d84ad794b706b6a9e4
-a9a36b3e7442ed7b4fffdee79c605b395fadd3b8 63e8f1935eb487586d5c626200906023e3aa0d4d
-a81b257427c2917d257e0fefd53f36fda1e9ea9f f766a2da51133f2137e882e5b64dc9176d403889
-fc6be9db5185113339f8a8612ad06227cdb37f36 e5944642d55142f7690d1e5ee8f2bf0ddfb5a8dd
-2e82b8d39123c94d6a619e3ec070c33ced9d2fb5 8492baaf5f5843a48adfd0776ed6bf0fb5102368
-fa6edf5db9a5616fcd32c3497fdf9fcb5bdff1d2 839246111082a59eb0fbe12bcd47275f7e876d3e
-a0a8e0eab99ab84fe87bc9933afababad2b9b801 497e9cdb4d4115014feaf108a70b738205ed842a
-2a5858ce7df6f61875285d9024ee30ebb4a9e818 9c405164a8d52ca30f60c4fe36f3275b4176a8b1
-f18a3c2d4d6076a7cafbcc3d4d8b279ce0005a77 497e9cdb4d4115014feaf108a70b738205ed842a
-24056882acb43a3353c5ee4503abf22db96378e9 a13e43fdd9f418a924227da8cbaf73c68a8b4360
-0c837d232fd5cae3486e3396540114223b18aa72 8a8ffcc9a94fd040a87f4a257d93edb745327766
-9210e8678a0c87e6a6f41aae35baf1ee9da1fe24 0fb33d1f4555a958ea6659bd3634e520a6498253
-5e03364217ae748984e9ec32eb68b6df19a91e92 995e84449ac704c65a4ed6447a58767134d9d004
-d7516bf8b7121358cb68372c833946c77d91d023 3eaa3bebef0623b1855de65d9cd2d5e247b6f8f6
-fa6e00805128a7a56dcbfb1dff0239d3e3333615 0d7cd94236b1c370a89eb691f8ab8a4c30c0acde
-e4d996c1c8cab96af14616287b735265e1cd8b67 2e5b328819f586bb270aaeed607b3f47167665cb
-46cd7051ce81cb7b018a54b3f413c5b08587073c 9e7a0ad6fac51751741fa7f0bd59b1073b36dd59
-0aac567995050157959b22c63f894b82079c16e3 01a5315ae5aa26abb73b4f95a184c2a80fba099f
-491e01aab0fb99c8867dac6d851b09c8e4bfa4e6 c2c3fb930fbc0ce6723cf5536594ecc3ac203181
-0e4d02438a4475a3b96a50777c1da394dbdbfb41 c98e3e7b1552c2fa045fe74abacc147c37343a5a
-358e7b7878725078f188d2894c4ba0fdd4c00417 c98e3e7b1552c2fa045fe74abacc147c37343a5a
-1bb50e24c2c07ed1a8843911fdb91269433f4c9e c98e3e7b1552c2fa045fe74abacc147c37343a5a
-daee1cab2a01720cfc6d2688b545b2efb9aeceb5 8bc403b4b4d6e9b1bc70fc31b033729b67acaabd
-586e3a1e9780ca72795efdf2a7c23589856ad5da abe0c8bf8063289dcd63ff321e1d65c28d793abe
-d2f84872f14bcaafd2fbe864bd962a28b3d7b797 b31fc8d8d3b7886dfd656a3c209e6004f95babc0
-32623b58af8f23d7b82cf0f2e380f0cb021c33dc 93cb159ec35a389d7d81bd513fe929f623b848c9
-2d6e3c013c21caf5d991ed6f47d43e9c21a12aa2 686f8b6d6eb36dfed46af06327920edd559d0dfc
-a90a1b77a904f5050bab13e2e7928aa97b55a133 627346fa495ce4a06d779c4efd7497a2e3348de9
-aad35cb693d91a0eee3e57e72cfc4e582158b944 06b44d76135e18c19d8be62537d25a93883335fc
-955c801c5d3c74ebcf5630cac1c9c3ff91615e2a 664ba832510fa56d689fea38b3463d6244258d59
-af2e23b431ee80cd9c86012228da6afed014d59f a043ef5eb84f09452e91e5002e00a342867a3f87
-a6ae40bdf3b943f99974a852c75f79f925ebf11b 24a5773d735af6d418f937ab3060292217113f9d
-8468ae92fc39ca60fb0631aa3cc80edee13446fd ad5a1110f42fb6d352124e1d445d2fc56b0af22e
-2a213ac519f97bd8484d66d59f773a86e5316b78 9db770e6b8b4aecb4c516e8e38135326315ed0b1
-0ebb8bfd909fb5b986efb577d16f9d39ea898dee b4af7adb8934472753dbdbf396774d2db7726d28
-6d771f97b95732498f629fa1b1fae293fb0535dd 24a5773d735af6d418f937ab3060292217113f9d
-57b08b52bf57157dc8539b02fbc24c27593f86c7 d872481b97b278a3f8a79ac85a75172ca8b115ee
-8b1c2cbacd644fa51fcf2a951b11ff8e83c9ba0b d872481b97b278a3f8a79ac85a75172ca8b115ee
-be55d06f477349561d74df85630acc482c37bfb1 24596bc71823cc9711e4a8e463929d54b8e76998
-554f5d5ac7f5f7e0317a2dc2fc78adcb6b0d6962 d90770415fb4dae6a868e26b47649a09cc05e394
-080f903d4f152bec5882f4b6c2fd7b448e1173c8 016050f733f76e95ac9f5c4ccf4429a7110d0c9b
-af03630eb89af97fbfd8d76f6912665cd97b9587 c727731739f9d5b30986c191c5d02a7a8d80bb65
-1aa0d0348a68d07164863431e542061786f98bcf 09f13edf6aa8c1cef43c8ba7f17289e75096a6a4
-ac617ee90acf68794feef501b99ae43ab538a558 09f13edf6aa8c1cef43c8ba7f17289e75096a6a4
-f84f5fca57946f838e79a59be20dffe407e9d3a7 edb3d5536c38643633925215404f2f02350f37d4
-426780dc180359b13f72bb6a259f9c4effe88cf9 fe1a7607de6ce5c3dedf96907e114ca0a208076a
-edef0997a11b5e3bc1c82cce0509e0d57bdde64b 6b93a09d0cdf42d7cee85979de6d7b18e34f6dd1
-b140fb0f294a7cae1181edb342294f0c372a052d a6250fa92374d84353e5d80d38bafc0a315a9d71
-6cf3df8ac3c7712f1a8058e0d6f42761ecc63d58 462b1c235a145dec4b89cdb9f3c107f2dcdd048f
-070724e750c4bdd0eedefdb8fd4554e69e0ad33e ffca5f9c5c2ac2c8b201e1dc262371087f3f116d
-5f627e224ba5a0c8a63044ea91d9cb7e55f485e6 70e4af736964c211ea0e66e154255c0fb9fc4a1f
-de1c17c35aa42c6421c60ebd9102da151d78b1c1 5d67b10edea1f8696886d3d0479c784943fd228c
-e2fe42293f8a5a879b4c9a4206dd43c81f385720 c68776612c1f2895629f8712b7b8293d8f0cd833
-cd7e437979644107c314493e41fb39bc126caf97 80af8db446dfec8baf360c709ef7eb990dafaf74
-6247e22de57b7a78eae29758d816dae4c328c8e7 7d2e13e2bd90397984edd7d6b1de1641c546d3a0
-0a5fa7cb1858f4f87a594c740e49c6029cf61439 4f100e626f2d5b0d68c0cd581a1136404466316d
-1f4097b566c0c9395477219fa921ad24fdc7d252 5ab43707d58a1b9681d1935396aba08144ba96b8
-d2430c126b94dc6bc30eb0676ae4d6aa4bf81ab4 c3852476e859ad0bf2db7739185bb52442ca0498
-16040352ffd3f8d126e6fb5233e219b3840e4baf d13df6d264e1a58187545b5cfc2e83d37fcc0aee
-5ba552b6dd1585e2518b69afc7c6cb01d5bfb5bf 1d78d0e00428c1df177699cde1347c86a6e0da3c
-fba2f283e8847b9eaadcb7c78c220442bc61273a 54f5159608a71a8e6a7c6118e94128be35f5b94c
-f9766c168cb00ce2e293377f3587a0b398c10951 2cd0ffda361c57134f3fe87784d308f208f44340
-82b23a0e487bd95c6b6dbfd47f7724b14d4807cd 2ce97abf67d8e47f378adb352733bbe515f68763
-72651623d96deee014411daeb82d50452261e0b3 0d637cf64f9c61aafb938be19e6b77d0d75d2256
-359f03b1285092f52ca9cd8c1b2653d182568fd8 fed92bc4562639d565716008264fe7357e5e5493
-708e00baf7cd7b47dbfcc0dce45e2eb305fe3b72 bb9243c01e89446d08fd62b4ea874dc870a1e871
-f7714ce278de8b0aa577c7160e8770f0ecf432b2 5bff02eeef4689558df52f72a8f8a82d619f092b
-a8ed6873b6dba8eb5b7cd04ca5182d1c8820ca8a 9624351548184433776f16552da60487e663be08
-ffe8d0aa373cb42df6893b707027f66f3cf6694c 1fcfc45f02a5c3da4d5135167ec350fc916efdce
-6fd0d0bcdb5edc3509d5a810cae5e7a22d0eb82c 1fcfc45f02a5c3da4d5135167ec350fc916efdce
-08dfb2e4ed346ca38b3b59f2450c37f69e1ee671 bd299f8f759355320d1fe2ca19b599b77be0bad7
-5f7a90472c8c317a7531f919188daf506873790c 9d8ac18944420fdb0e9c600ac688d15860a289f6
-d1348e4ef737bc13dd223b62a2e41c38ffe30c72 0420007883104eaf3073c8d750edeccd830e1080
-3fad13218df677671f46c16962658f3ab42c975a 3f804a666358e9ae5af5beb69aad4c7b15f02f5b
-9577c104c8201f5fc18d326a6837db7bf1ad6353 380b963a1f0f87a2c3d5290117518da6e83d83ee
-0deb0a34cff7921b00a8e0c9cf366fa766bb9c34 14e17bde662cadb7835fe8bbcdceb5a83ec1c510
-e72b2aa52f48f786aa1a75ce436e62099665dcf6 d39aac8b222feb2955f3b630438a164ed4528c25
-9cb9aa264a2e231369de9ff9ea752d40ad9fcdd2 9b0a9bf5ce2f04ff3fd6caf8dbd30f7539586985
-a9163992e7050cb01bbdcadb78dbddc77d840488 edb69650e477033a04e25dd7b66b35fce24dc836
-0aac191d03179a59d41163be52860c3c26a37849 3a171f9cdbda0ba8cef60c33a11559273227b416
-b3bb873255af4849703bc17c81dbf755f22dbcf7 8582ab0f137b3e3bf85e931c550e4b0c7ba77ca1
-36e8ba1ae0728814a9f6f771b9380c7624c6af75 73a7e5749b0cc59ea73687dd9223d902e9dfcd80
-9cb4d9eb3d2df7dda2bfa3b9e8f623dff03dedc9 ced75bc3ce177acd84e83d79d6ae9c5f3118d3e2
-e0cd410398f70b7fbea7e04248c308f61dbf4b99 6c711bf31d62fb882dd4acbec5f518904b7b0183
-93bed3d76df0ccd9acb15d2e35dca67b2e9b0dc7 25017ca844f16f7251b7a41450deda304e0a6ba0
-5e8110decca97a55ac9fe68c2625dd36d77ec2a7 c075a1ed884ee002f6e18f564890e1fb17081667
-394d4cad28a28edce20eef31fa80a355559c7875 9c595e435fb3f2bac594c4bca503f47973275ca2
-17459d6abeb5289c6cf4e2e948b0687a2ddb0431 0bc0dcfa8873ca252fa22e2232518db481b6cfb6
-33601045919daf0e1dd3275abc3c59f767c09950 94982effd5cc02216ef6a9f43285749acb60ec1a
-565c110b72319fa973446814e551ad16e10a65ad 78b3304e3ff93810feeda98347aa44a97595e61f
-93190a6f49225ea2e3d2ce69626c9a7533300f53 19f58f962a66fef84261b7b8d9ca29242c566c1d
-ed2c851222c480d2d277c65e16cb193302d3a3e9 8f7ce29375da74dab526e8adb7b54870e145aac2
-9834412a934f93b3bf8aeb036bce0c7992042862 9fe3d3ab9dc7d5cd1fd0ee997248d3c445c99c14
-15267760d50c1aadb7f808d987ebfc6657830841 36949020e376f0a6a071cf64f714a4a54f4b6968
-eec90bdee54a588efe8518426a19a52770e1d1cc 57be583d7b844321a3c792a53ca20c3d7bef27e5
-d9125878d02521ec0ab2a4b974b5a1faaed004c5 653a6c7743f3eb23b853ecc54b703d8a0e36eefd
-934cf4e6d1eaf2707e6239ab80d0c566329f9cb3 32a4ec227b638cb0a4e1c238902bfa3fb99b1b2f
-346bf54e88d566da15ad09f7df78f55ac6d6ced7 461feca8921050c640c07c7e00b72b0aecf4acb2
-10dceeb7dbaf22857e6fdf45b7380238a7bbb869 c50a896787b44164995d4121044129780693ff5f
-f26fbc0cf6ad8ebbecdffba20e575834d135ffa0 3e75204640193b1337295ef3d05b416c131956f8
-d4a428559d3b107c0da7e8adf63970069b36cd35 06a41d63494131ac94990030e30b9525be10ece0
-56c391335a4ec4dc6ce45019fe236f0543f4a7a7 e3d8033c70ad10c0a54b291c195f8764869c6541
-7f8780db973eefb93fff212350abc447b8bc3cbc 8651c7b505d4ca24551954334737e3c6885e255d
-c02a766081eda6cc1d80bd6c19b41787e2541993 3816752a14f68c6b41ea6c9ea8180d80cb9eb3e2
-06a9be592bad3bdb0f843a88ade668b98c293016 3ae24f3a621a6efc2a845f88fe56ac0f8b618beb
-6b93e59e4942e2cb27431b20c243f1ebc5639c29 b2309808b156d54f25c21c68130da5fff16f5352
-0066c8b1620ef553c509a27121ef5d22b877064e 70933bb6ec87f8a251165e41db4c58f33e365c84
-e20a25cb260476adef2c108277ad87a9a2a90873 d17aa37a74bfc9ff7f6a3720f1bf23a8dea6c8f4
-d0ee75b942c5e0858f24c3b7aa0c26b919f1b7d8 b9f2438cc54e059cb0fc6a04c933db5028a148f2
-ec6a34eb37a6b5c7f36ea25752ae235346585ccd 3aafb01f4d8b4da78b0ba748df89c222eef03c86
-00e2b47aff44d0b80ae12a13c27450fea551004d 0704c40eb014577dd5843424d25e7bb73f43940c
-b1d92d7b39d6cb05728f27a9678d1fe08cea87c6 07c8441b1b55e4b9a13a89c5105d2913980cb128
-ec71fe47d2c4cdf16f4972fb743c844a0905ab21 6ac0bc6f805f62bcc579057fd0379f99f7a13c25
-6e9644d49652a6e1953d8bd791fad27942af2f2a 484e32d2b9a8721a4fc46d0f4093aa45a835a2b9
-12f41f9809967be695ccb52b33097452c3b37159 178809a07578142bfbe5ebb4e44a6239a39b2b90
-bc716311be35b0586dabcee225ecce302295e8b5 8dccf0ffabf5fbe36e1b29b66e4a747c4fe5a1e1
-b8873253909069c4750a1ecca80735db762ea92e 52031bc79f08c7d1e4ddfbdd580a15344e02a20f
-b520fb6d3d0f7972f106349e00819726b7cac9bc c9359a4f6ceff438c736e589c2ed35d1a889dae3
-82b4da888fc0d3ceed08988d94505385aea9b4f6 1c1bb9d8880c8cbebf0dae6901cc57a7580fe7a3
-8703b77fd914bce4145c8ba318d3605ae6cbbbf5 390d85cb3d6c8f17843680f6022bf3dbbfb62a67
-919a72408d72e55a219a88959986271926c76dd9 4d11122fa058a801d0f57c8898c0867e55a18035
-89be09c64c7f23b5cb6862b713ba9f43baeab6b1 f8cfde7fd7bd189bbeb93b09c7ea9296d9e059a2
-832c18c5075bfaf4e5dbab56592b628ffc2484f4 855c3cb89918ed1ebf4c724811f94bfa8a5d5aeb
-88bc7aea10a76df348ae9bc271aa74fd7c838b69 aec30358ef4786af41af2f3fc6fa787ea5a85682
-2f176370fedbee5e3fe37b2cf27eb94bc199e2ae df08d42aff5264cea1747d9a0937efef58a2ceda
-c00e7b247ccb1bf600c44203af00c94759c23e59 c2a6a7bd29949b6de93260614a63a2b5135e8d0b
-48cc49a039c39ee92c5a90f0ba155b5a92a408a8 696ad5f3d808e1a2d6b0ebffea0d9c337194c74f
-108cb92a2943ae5b274a43b9912fb97ed71fa9ba a042ece75362ff6b83010f3c66c8c3f5fe8c2a36
-5413225c8797e25fb42d314b172d4abd02f64d25 12351e182354413334fa8d0e1c773501c0d93a90
-1121237696041ebc58933ff0ea9cd1ee8566eb11 ef165d65c72aa68c12ba4503925214dc07a92d8a
-ca6a373ba89b7c74132b324f5ae2964160c01833 cc98bba7c26b2d2c9a65b95bd5618e14be8df8d5
-e90f089fae1224b29e1b047e9be2c1b653e224c4 72cceacad6f470c919f5a52fd4007098715af7c1
-81e8feff93c19164d9319d100a848673b7c76730 252779212dc40b64f9291c1287bd6f7c29f48377
-54e904d0062a98e9aa7f4935aa5671a6eeb647cb 741eb25e921cd0f8f274a660a31169284d47cdad
-84318fea200ddc5b502d51f68f92f31eac939556 f0b8e4748ec61c862d084b9eebe8eb37dfc1ef88
-144e4ef8c73291f488b4aeff55dfb2616571c009 a15dac7cf1f9056702c85c134c21b92fbc7a5849
-200575dbef612f1bd91db72242355519534b9fdd a2e46778a30ee390acfacf8009eec0acca441090
-2bfffe15ff3e4ef98dfc84c6e7303cbb33619154 12659fe5f0852cbbc2b3db4757ec25f525632240
-92443bdeff135c9032b618da17f883c35323e2b0 055fe04592f29645af4452b56cedf68209668b17
-524c1736684dc38ff3b381f968fec709f96f70cd 4105a6fd17b55cc83c332561347dae978edc3ebf
-796dd7513d261c7d3479afc32ecc39dd174965b9 849432193dbf5fe86dde65edc25560a1e9909c16
-6361273ae0f4f8fb876d3c1396d52c630a211460 70fc718d68cd079396863bfbc61e5770984adadf
-adddb5d790b8eb43c52992f730f2ec450731ab16 100999bf3348eef87c917b47c269dd450eed9db9
-5bcf7a83d56a6f26721548c2022462d708131116 1d4dc477ab14450a989fddc92e46f305cb5d2970
-f75c3fb19b8dffabe3510c45ead576a0534a569d d999e6b90aa03e1a97f530da74a5b7fc1df1d2b2
-29a591d8188a8cbc555c5ea9def1d397604ddb1f de9a0847cd5b883d96c4e48ae5866b3563f17309
-23a287269bc1e0cdfa4fdb0abb90fb34fce2f2e2 f68fdc49adf2d06c680b95a9c1c864343ca82882
-23a287269bc1e0cdfa4fdb0abb90fb34fce2f2e2 291d3b2d1d3496c7d02419059be50ecf824b7157
-6f051897d5bdefdfed8b4501813af38d72454fb5 36cbde31518921654643e789ad78f8600b8d25ff
-9f8d0227ab38ff772ff712d4cda7b4a009f0cd59 30505fa0f4e3b7dd221774f03347768f45aff37b
-89b047185845fe5e6059ebc33a2dc62a4aac4b3b 51112c653a6c2eeec620e079f07d24e8cbdf0c90
-fead8f2e1ce1bd01585f65e187e05d4813dafcc2 bb94e4d608052e5e35b8623a684a4f7fdcb1b3cb
-18811ebc0e95ba3ffc9faa20bd9dc96aa1a14ee3 03d700c66cb257b36475ddce6743edeeeb9e59da
-64a1581a24aaa1f79d36a59e590febcba6a0282f 6f7e9e889bb2bfcdc4443ae55e7679d0fcc241e6
-4ec24ab623c0645cde31b76f80adb3a54b388081 c42c64d95a6ed18b8b45bfad477a04337ead43da
-972fa9f777271dbc663b94d76ff8294cc6e544cb 7847b6bc86ace4244aafc82535b90bb19db16260
-10b5411cbab28a31aa5d05132e317cabd2814155 04dfcdfc5342879eba9193c1a1c280871e44cd8d
-727da85430045ab9be950a66aec91e82153fca4b 9ad96d06e05f880c05bea282ab16df3cda269ae7
-181536a8410e24c26d56c56e4e02202830f65d6b 7847ec3dc260169adbc5948d93fc2c9cce6f10e3
-d355215859a86830e1bcad5907429fb3bf5b5377 7e8965721eaec9dbfdc5321fdfbfaf4f14b03f68
-1d16e58572c9f845fb17488a3836d8443967ca11 1868a0d7ce3f18cd2392b88992f106a628a4f973
-c7293fa82ab689e7d977a42f5842572f20a86b94 c8b8c02dce2d4690a212853635f71ceec9d4889f
-52bc038b3f71c2eb07f6e90222517f9837eadb55 c8b8c02dce2d4690a212853635f71ceec9d4889f
-f6c5ec32338599dd974c05eff729b1e0e21f3537 16cd734700bafa489c0079995733949b4f82422e
-fc5e955a11cd6760643cae269a84b9ec9a05c7bc db128831cc9045b5faa791eec9818275939a84c4
-48f050d962b16dcbad7c4133ac2106163c993280 c7e03e72aaa1cec06c77138d4a6a6e8eac16cacb
-0057fb0730ec8e1ea7e6e1b694be16f5f59e94cc 81ff96f535ba8b9002e3afffdeb0321e0079da95
-d061f0c76bc997d97315a5d5e2b4bc171325d5a6 d9a5cf2f9bbdc82ea89f11e1b5c7a970754f8191
-db4e63b381d98839f5b7eef8ed45cc3aec2803bd 205f3060d6654d044a0f8451d60168224125853b
-2ba920c6b890fec0aaec4592484c7c58f0afe05d a0ddcc16136a5f7989f3835b2f0744ab94f974ce
-84a447cf4554b5daf19bef1a34da6926804ac8a6 7e4269176596eb13ef5706e433b35033e3313730
-21f6555c2645ee967a0cf1d373ba73967e4da4ff 47ec383bfb1dfe713a05646a1d14dfe6a695aa99
-2b465b964a501e905bb76c2698d3216d5b8a7e85 c62e77fb255cd22f9bf346e5a0ce69f038c1802a
-242563cbb3e405594bc8d8e6b4cdd3695a3eb116 6855665fbc2736fd6d19423663daf6b612ed873b
-ba2cc5b3feacb1bd427c10df10cd4606a45ce46d 69f98f451fe4e49a8cc95636e936e324b3ba39a5
-57e8deed1754c797d1f4bc3257fc4ecec4f72381 0aae9a9b7d5e56c86d412a1b0bbfabbb394c1e55
-1661b05e868ec2302dd0eeabd374dcf300f55d6c a9ed7fac89f5bd419fd715cf7a3d8af28beaef2e
-e19f7ce8b667a334c95bc87f59ac9029b6b26990 dda04d9470473a690e09d4c24c1a6b4a007e6cf2
-f6127974f8c3ac3ec3c9667c8f4e442df7c26b78 e7628f6e722fcbd655a6e92d3dfc90092aa026ba
-172013ec9966ac57ffe789451d748f1ce268c420 6421b317cef15d54b0bff83c12bfde0e1aebbd90
-29a9f00a4e48d379e3a59ae2bd9ba43eede05337 f3702734ddd035721e5ad4bd7b1ae83d1885bc48
-224b8f9e727f42112dd5952005e730856cffe838 c543349aac02e3b1dbb5af8b3c4680bb7516350d
-36b9804f6b66dc742c11fbefd9e24a57c2cca8d1 8265ffe74fd92d73e85403b6ba583bd335a7642a
-a71012c45228968db36a871d92403bb564462b97 e2d40ed2f82753cef927cba254ebdcaf81b49f8b
-dab4605b1bf0d1a686109f4ed6e78f5fbbf1e9d5 f7a84f3af9a4fe9c06c587235858ca86d49d241a
-f3e52086c5133f7935464191ae022b49d1cd93ea 527133079cd656d6fd90f77daec8a93678962afc
-971d4b0c9f1a0690d076275a716bc02f272ee62f dd60cc12c3039920eb0eff0d2259eff0af25b304
-42e14ac94026769259af54a183850e6eb975dc64 4c2f81f0bd4c5e94d3fc69bc8fec0c193dd3bbe7
-8cad2e5be6325926e0c824069041b2e870bf52bf 1248724a14280b7c48dff9f854cea469a0696bea
-560c3b8785188a77d816e0eb9ed0b87a27ade565 ff353e408c619e6bced6bd74bceea5eaf9070ce4
-a86cb0e7c5cfbce2a1864bef535373884ba0d65c 8ad454ce2d865f80dad857b92506365fd2a3e032
-22cb5cef36f6009b5dac6784d1b1d48af6fbbe25 fb2f44be8d6fd0c0b2a6c3065a99859afdb4d246
-ed2c132bb5b7025dae00e4c76a7650f6f99963ea bd7c5c5f4a1bf02993c6511b07b625406fcd987c
-17a15fe7b21c10d3371b18a8b0f3c1be500f6f60 686808099ed95cbe8cbf6f5cc1afe90d57212fb2
-0a69f7d189bf1576d6c762b784fefc2b3f327876 f4f8ac9826e27469c3811b54fa4d996c573e95f5
-dd583a2279dd27ff6eb3c514787cbf2aeb56f4e8 98f5a275f591735c5d4e8756aadb20fb57bd562f
-c351424acf21410d081ce8de62989f73f85a8c10 9cfb405637fe411aed751293d7797deb5a59d0d1
-c6c87576e743909b387ab09fe802e48ba5e3f0b4 e6f8f82feee38144e80977d395b0966e2a34a6da
-be03e0ebbb964637715f9008d3051ecc743cc3fe 9e35342b486cd7cf3eb6b147a9b3a88d10861a66
-76cb02070c6cb35ad2f1032155b1e883d1531c81 d7a4b984e121aaf61c86f8203189cdd0457f875e
-b5325710ac2a0c6a5f0718d5ba88998c70db4885 8a6676b74d57dbe5da11cb35089aa754549b1d9f
-0a5887ac3c2d719c036a271ba54b1a25a7a91f56 bfc158cd6bccc9c43e19f45c33aac583bac14cd5
-53abe24c9d53677965de02b8de701693ad446f13 bfc158cd6bccc9c43e19f45c33aac583bac14cd5
-baf2b13c06de58e5c5fc6dacaf8d95d4b88f7655 02410f4bb682eabb5d055ae9ff921650b3bd8066
-228546f536f8542bcd3fc03651a941d41fbdbd52 304371397edc16a4e0ed3e68af37a280fc87bdaf
-c001f33dff6b167e220a4afbe471091a5dee6d94 304371397edc16a4e0ed3e68af37a280fc87bdaf
-8d2ad62e42979c64b0a2aaae2b115ed788cd6f5a 3ec1f0a1c22aed15145d5751e0df8ee47e53d2b4
-5c99782b24433479b1780757eac57351c798fb41 7f3287bff4b1c7ac53e13affa29ab9a45818d300
-6544920f2f4429d32b8a87e61ef45009e2b84cac f255405b550f26176bce3a95645d49c5727b1ef2
-701082a8d2be28cc7daa9979c14bc893480c3de9 cb3935e607767584d72cbc893aacd47a285c3838
-9e78eb0e6eb97f32da222e20a0a4411496586412 c3fc5c0e25af262ec1e12d1ca4e8e86c71ad82ee
-e9b7efa29de0f9a1065627eae24dd91b349efa91 730f5bbeb25087b27b7c4ba343709b4f95bbc8c1
-1281ecc85abffca0c02a139dd8fe0b009a2624c2 4f3660701e9a199a7c4238061bd0783ec9097518
-d1922682dd4750be91f40001b13c994e15f81192 5f3e13484f1e7321261f6cbc9c7a9a0379f1f679
-259cafb0f743a870ee33695c0abe3c97c17e79fb 786393962bcec24e434e9df123e06e641c165ed4
-3cfeda894ef67211fb556fd540695865800fc79b dc250e4489c647d552d075319d38d746db065f0e
-74d0b8904ca9264571fbf86e12671fba827a7f3f 36f91bcad175c109bbdbfbcc7a2ff508f1937f66
-8b1c59cd65391782744ec8375f77354723345d78 2eb4f1ac885cb50194ef0867fa97580b85af93a0
-fafede892b43f2474cc57145d7d4e1112c225d30 21ed31a077ffb7e66d78ac2b63f00cab05905b96
-2ef79141b7c548055fa2602f8c759f98a6ffdf92 deccc38fda47fb3fd5fe93eeb86d6971f6f944e8
-f60486fb33a46f1129926acb87bd8db2fb092ac3 0dbda301dd0ec4e7713d3da3d32d4eb33b811b6f
-6b520fd4520fad57a6afe027908c2d025d2036c4 a98a934ef3adffd0c921a684ffa6564166d715b0
-0abe1bc81a96c95b07e18e40c1dcdb2198db669a a98a934ef3adffd0c921a684ffa6564166d715b0
-a5b2e3bf5aaf613fcdf6472c42b24893040e0653 a98a934ef3adffd0c921a684ffa6564166d715b0
-9270d7600d44686cc937680cfc06363232ffdb23 b5b3111011549114f1c914cc399b65fceb73740a
-bb51c2d339673a3cb4070559c7260865f1f5f0ea 9a8a8848cb30c33a134fcd9f67a915ef67896367
-a64bc47252b634a3e164d79b8536f9af298bbd37 a698d3c4f6fb233b07454a2819bc5c735d0e53de
-7518242ba2ef9b9ef67ff990f865e1c978278703 976d6aec4956fb9a0fa03b7c5a4dfd28ba9cac00
-2625103cb2e688dbcc2a2fc2ca73a00dc6d42336 9c2257478178a6e1eb30d0633f2c2b7d73f79471
-7030896c7d94e648372cd2748fdca92f08b4646a da63c2cc6f59a05c71f926b5f82adfe5f5e17428
-616752407247c0511e1f5d9ba325d8570b542ac3 f2e64d606dad48fdd494322d6040f6714723bfdb
-b5f5609af16a5bb18254e2e6cd2048d654a0492a ed1ea8be0ad51f6cc1c15a6c58449ffaeb57959f
-37e77bb4a9d58eb1ca444e79d83f5361ec4735cd 8b732c44c517e5c2c87c1e612b46769e7bfd3193
-327f071afc26ea9b89607d2264a74ec5832dd4f4 07e1e48457d4ef73bea8ab5befcbbe469f9b3749
-031bfa823714aeafa2dc479caa95984c0e9e9f9a 3fd3f47b750c8bfc06df9b35db21bd5f61862c8d
-ae9b8dad12e34919f8523a311a46acb93ee729eb 54f1a1738d5b2c86b10364ecaea7526871d1db0c
-e80e32b160e2ef65391bf9458c567cdf04eee0b2 69718305767139bf0989cda6e95186c3da99e4ec
-1e58888b0641c37ccaa5bdd8fb239d7fca3f2904 09a51a69232c85a1e6d28450642304eea1bfc10f
-ad9f74c0ec3cb79a332f0f380b66c961c476c8d2 9b61860449952c40c5aa26406c502706ba602a60
-32b5f244d110d5f33c7609db74451cb2954db4f2 5701d5fe36e5e6ffcd75322f8b6437b3c816afd0
-e965cbc8f4283e7e0b0e71ac8d8e1c6d66ce11e0 1b5c26a1b7a8ce0c9920dc27b9f858de710acacd
-ef5c156e6d834b994d03c491b345b4998f73f222 cbbdf0cb7959d9b19d2f0e569c3b8a89c13b5a3c
-3c6858f04b8587cb9ad2c3e4458384a67aff84b7 91a3f9dd8fdaf5dcabdafc31d769a8d179a09db2
-cf53ad9b489b705aa7469c867d645f00bb0db572 48a2ea489aa39f4693ffc7d4f8f2ed1c2b19f547
-3d49a941920272516cf986fdf8442f9bb1ca1ce4 06541e114a3014c8dae724f19ed0176a4e665b78
-6e8f28a229147ff3b4942310621f3846cf1e9849 9f4e73c21d9b97a56effae1e23cb1b12121bf719
-52aa65fdd414ab47390e2e0b38b296b190cb9e15 77367f92422d60468c58fbf9fef07a7b08baa035
-629e40b26146c0fa9d65a247c5cf820cea70d6f4 fe44dd618834af6971b8bc832aecd0603a4be5d0
-d6d0e691e72062cf1bacb21f0a116146d520495d 81cd45e1291c22801b7623dd6e8ccbf1b1713f05
-04108417b64f46c00eeff9b4ca91da3d479e12f1 d2be38fdba130a1a40e9e2bd5ebbe164c931b86c
-ffcdc7b40b0e2c033c2dfe7b6152dbe9e45d9642 ee3952cbaf190b696e871f0afde8f94a2ac86338
-0904b87ceb0c1f1baa7a8202fc7d26214abd160d e139292ee5efd985f6d0d4ca8f81b4e7de70ff01
-866ed854411b23420915a80579587f4cffb4df0e d4489559a88cbba824e80ebd579fd8c6c800f5d4
-929ade1d0619e798aab5461195ed49d0401e5243 a699382fdafd6a6b0ea887408bb77a5ab143e341
-e9e2186f808e5908a1e93ef7955c50aad9190f56 7e43225b378de143f729552032505a82084efd54
-ca3e6e2efe4b6feb575d487fa951f3219a33e246 9a4741ebafcab25360084c9bf9ef5ec6f7cefa2c
-d814e6735dacf5f261afc770497fbdd09c346444 996434fdeda7f22fcac86eafc067c90ffa24c5c2
-e51510803ee3651aad11bf57489f377b7a794dd8 d484945c2d2e9680064ed5fdd1c8297c3446eb94
-6db32c1a6ccecefbe9607ea77ed2f52bf0e459b8 91480ea9e0526fed7db57393c1bf6624113e1ac6
-44b20c17758c302619954f8fc276c0f154f546bb d453b6faccd7da86be8bc3b0a044373af20f7a9e
-81a71a96647fcd450d729dd35fcc3bbe36a35271 2effbde08719985e336f316ea8a9781003d962a9
-3e0cf194c4fbcfa15ed4b8507c1f55f198246e79 3ec2608589cfecb0c1cec8e26141d0c2625c2ceb
-510dd7642a0d36a2446ac78d9934ea67da8aaa0d bbb272c8379fc8812b37bacedf9b643ff88d2718
-8a3e7705787537eddbf8bab929c9e6314f188380 e291b919ad6f748e320a99ba90d6dbb93a103672
-93d662b4fe6b36122e15aeb3afa7dc775c1e7133 996480dd0fe7fc7d9307559b20cbbf965224b4e3
-c978c8f17d41ce4657aef6b38392afd8a874cc4e 714c0c0e325bd48471c5211750b26e8f7fe46eb4
-943fb6a1c19e9f0bdc00caa0dc3a15ca4017368e d48e2b8c4b41122d0702d00dd09e0f20293d298c
-d151831aa0ba06fa0881a7c708908b08ce83d333 aa21e1b0d6ef672c84018d522b42f9a1c13a4f3a
-8f1e31afedfe5012b549583bd44cb1ec72477745 1f0f7bdc489dbadfb76e7476ead4bcd74cf65249
-1432a234e29cba17dac71d2bb85542e6059b5d08 5577554418a91890133c83c42f2707b57085b217
-246f21f4f48f0cb0bbada7266cbc219c34162a51 2769faacf41872735de41fbefbd13e252a08bc2e
-8ff7edb70fb6090bca458540d681a7032a48fb82 1b3190cc3363b9a24a44ccd04867c361fd54a39c
-0c23687b000260423026e694250d0b39abafe762 34bb555b900b22e8ad4e30f21fe340854c69669c
-7683b50d300fb35f042a80b46ceba0b32dc4241c 75ef0db627f8afde1e80c62a49a1a77938f1a3fb
-0430242156ced9f76b4ce47cfc8e5db2a0215a70 ca5ccde213d6744fa4a029ce8ed15fab3d9d27b9
-7fe732dd446923cc24d5bee656defb9b94adeb4d f94894f92e354fed31f215b9bcef13bed2f26a47
-cba6f7ec58e4bdd599a2df39eac15f729c879eeb e2a66892d1a6dcbdda8f9d6da6e2299972618e27
-b7c66289dcd0f9c1085eec4aa9b7331acc8ac75f bd140577b0fe56179ea38e1f378f7a2b59849f27
-fe15771f8d179c15c7992cc6647c15707aae6bc9 2a6e219adbd64270285f2c65bbfe697b59cd5901
-55f978cf7da82f1e4ec7fe4619b8829f91154e5d 049b41eb6951536ddf6416d40c307c0fd3a0a7a4
-dfef76b0de4b9146017cc97fa1795d18461b6469 f920a151780198f611eb417f350c0f27b67a8934
-22d473ed191d613a1cefe9c107630b058aebf9f2 d8b9d74aae5e4ac41953cf7e10639a54a6d01081
-1284c4b409000e23c4616b23247deabe95328f04 382eb9d13d8e793cdac35c9c560b3570e719ad24
-92bf7410a6ebd7f226e1787d28b5cc7d38360566 9c3d03ccc0814827e974b435ba3fff8f69652792
-8192473845912f21a48127f5f121bce6c43a5031 4ccb03c83c23aea10a924492a9ac04cebf7860b2
-8d05c834e3776caefea1f41ee96fc7266d5477b1 de3342d3a31d3286fed6bb49bd34b8f40f925c61
-efe26699180d0ec25fa3247999e18afe3b6ca223 5f07335f2ba560a1346c664ef63ac8af12f13d61
-bf6940aeed99a6dabf5ff126b42eefac8f1c030b 5d60fd16315e89b3f223b10fe23b21cc8a461e63
-39c5579bc870db6708a28934bc32ea6448d54ee0 9dad37bbc5f254e3a20e6b04bc212ea41cc9ffcc
-2c84cf07ae8d8da36cea54a22089a52bf39d0a85 ab4af8a7c257130bfe842d99836053847b941c3f
-f00c996e4ea680a3094bf5b9ac41fee6584c73c7 8566d4a80f5bdbaf7bfaeb985dd792302b57b6c2
-24e43a0644f76cc8d32845213a7cbebbc23e425d 828b4c34e19fa4947345798653ae11f07a5b5351
-c394f4e78595401f114c871f61de997c7cb2c6b3 c11fc04406f6763f190684e350a210394ac6e30e
-537d09b50f7a8e5c73216f9e68927128acdcf54b fbb6ead7cabc056201129a7ba9391046668adb15
-f76dd253ca4ca1c164c8228bfdeffa238b53a429 37e3c80d82977f9de019a46af06f31ff10b0b432
-1fab965fd81accd9801ad44455b0bf969486a9b0 0e3d77359b543b19532b6518c6a0805a32419dbb
-a44f290722ce4b88cb9de7337ab0256cf0b41d68 59e81b029c15032bb2bf4c31a6cf11dc6a264f0e
-3610fabe2a2b969adc8e8b3cb95f1f609b3b7533 80bf8b15d97e12a737c315de9e4de54d31e689fc
-27f664400117387a6af70e274b20c06f6ef8df79 40b888d1800edd11db7362ac3844d79f6ab3d7c7
-af8b804cdb9238beb2ac2fe9e27aea1e7f1734f2 0300446b133e9a5c51470641062bed806789de1f
-4eae07797fa7ddf59b091e664a76e77b6dd0ef86 1444fee60b3136abc0d7b1d6a3625d09e7615c5d
-dc1aca5bf7c62d2bd1200722fc216f95dcdf152c e3ff4cc9bd0038b9c139a5e0385096957b339638
-f588d547cfc955fec521dd8d78ecc93c0e196cf3 6e2c0cccad2670f9fa469802190318c8de506415
-384317b9a4232a0df7c2950bfd718821615cf0c2 615666b34e3208724dbda301d33c461880843d70
-2f307dc5af8f8f9f93f8618c5216b12f9a73b81a c9752733b14d75046c32034d59eff43272a18b13
-7b50a80f413588fa7b39c777e507d7cc87ef284e 94f9472fd0c4b9a89d072f37cdd81c5ae5370a2e
-65ffd5a5db3a39d7449ad04b5e811c719944ea78 d57597c3a10f7d2bdd285ff46a57c13032455fc9
-a1ac1a90dda50ad4522d58a692b7d38182b81248 8f840381ada3481335008fe82c6f95930a7caf76
-23aa79bd72afe47b304a58ab1059b8d882d74767 cf7444a23d179cb06813f0fac1d5c1731ccde305
-903688af107c5f9c4cf6263fb80ec733c4444c3d 8853ae84bdf7c565209a510bdeb495781e48fbc8
-09905c5d4a471783e05bd69741f58cda2f0bbd7f 67af7c8a570db6a2d2c9248aad6c69f134adb497
-28a470ad71d1a31e6c3c46e84207e471a3ea6020 2ac43e29c08ab54a7a2923c126164a997e331af8
-ff8a3a11ca26ba30ccee6c50d8c2bcf6fab724f0 c40c37b5d46c759b2f11992bbb414ee905e3d245
-fa565fbd994edbaad72d947f2517907c77e0ea89 e621f4c28dbb352b9f567c32565857f0f86bd07e
-65e7feeef7fe73ff06e387d845a985471c930c1a a0a4ff52dcccb831729061c5e7153f24c7e76418
-6f9c26f707d72cb6d74277669b6ea4a15c192d68 fee586e78f33304675053841639ba85de054645e
-0d7b0166e40c5f95c31972e9311c129615c7b1ee daae08036a5e84e31e775a0d3c4a87d9759cf8b0
-4fcb500a2aa588a47937500f32ecd3c9fb87ef59 3bd22a45d28138b026ed35e34a851e898a09bf07
-a8e57e05d9ed058d918a3ccceaba1814c5e56f81 9a1ec4eb469f4a91227eff08dc3e775f3411f3a0
-60e120f0e278713dfe1f7e7ad4724545c9d6990c 5acad4093229acf26af312e26a73cd1e4c65f788
-5ecd01fe91da59cce4c645a1365c9fd692fe9f9d c0ae3c411f4a2bb75166df6e6c284c117501f7ab
-8af4dc094c80909917da5d2881a7a27e859ed9e0 06fb8916d2d7be6c52f1a3585540e340b447689c
-8eab64c08f34c86372e7b514bcb86da534ae1beb 8c9d711a3e2d374bd1a65b6a41e9b0a852db9fed
-6573a5a8a192b7f1bca527e6251ba6a33b99e9bd 8cf47d25d93bbc11bf86d70129aba84e015436d4
-020f85e2747dfb604b7a3a68b3b55bb2db53045b 39a3cdc698ddef8643eb489e088ca7b5361dd74f
-849511cf6f1eaac930b841392598a6b0cb424844 dfb4659b960352065bf79bf1d1b958b36c8725e5
-553604c238ef656871da2e826f99a2b2387dbfd4 994d1a11f7e387cd079a3ae88a805c7f186a7728
-7d9e7588da4b2713ae9fe92a66d6cf4eb23a93bb 8d0115ef58ffbe94f9dd61b4459b64490254c90c
-10e2a288304a10821d5179e413427b99e37c11e4 1cd0f032f262e27a4a5c82e1830b7d1e5934c4b5
-466948a7a6757783171fadadb5abedb160e3e649 835e6cbae7115acb825fc4f1edc7cc458ed96525
-dad8eed55bd0b981ed0a339139a0c73cd09b4ee4 39c249630afe0d5641da4f073ec87e6b506712ac
-880096665e91644e46e578fcab87e7106a0774ae a93dc1c879efe08c5825a7fbd6ec5504d2285479
-7e16444d4f5efaef5837e92a16a28d6759716b7e 68c8448cb6602e37d77eb0a0aa8fe13996d64700
-ea8b903b110b16b1b5ca5e0a2ced7bf493d92a64 76a6f0bf5aef1a4272292cd5c623c4d3dcb8630c
-4fec39876ab5fd680993215389bcd89e0474823d 51bd2fa52d837a905120b95316f424d95b6de85d
-ca06291fd20689e803a19166c3b9c5dd6afb77ae 7a9df79c496686f5ea99aa8242e2a4b5f1ae7ca0
-1cb42a748ff4c67b70be557fb9ab6e48e1bb4c51 39ef85cb5945bd35b9148479d8337a154644d3e2
-7eeb068bc71a5d75043e1359290ddfd2b6ec6428 c09a5450bebba3c8841c6da3f575fc8a33993ee9
-c24608f25b3e2b1dabb659511117c475e7040d75 90f5b0301d613bc234faa4340746f8226e57e349
-cf0657b3d632793cb0725766ba7f7ba4a9d56d73 23031b5065fd603f31f175dad5d1f68ebe66465c
-fdcada2a654a852e162c7cd05f4957b33cbc8ee2 dc73cdd6eb49c9584e5f1420a6a31036b2f93966
-4503d100f8de74ab5d82e69d99eb88a276c18b66 cb223ea24f72f9dbbe30a8e0f9a9238202ea24bf
-cfe9cd208c53e35b54e5dcb3bbab70480e053f0a 5edf0b2d6e081da9cf0691ebd5ceed14308075ec
-a174edc8c89bcf84fdefa91a74d55d874855c13d d6cbf8c6abf016ab652054460d2ec54ab2eee6f7
-5b7bc0c2f3238a2ba18db03500d5c6c2f35b0e9f 1a08649c45b58a66b6862e5a6349a22ac3baad92
-2a7ab1414551ef9b35fa94495a522bd031e1313f ccbcfe82c451165a37b2991c5c8db200a6c14f7b
-aa159d98c8d7d89894bbed12b893bb8286df980c 416454f288976dae527bd278262996cff99f65d6
-90296aeccab8a4acc6428e34138ad6856034748a 1fc21a434ac4bd787ddc9c38d9f298564a106d4f
-b953bf8192ce452f4d7fb73348307c89958457b2 f5679f1293197d5673a5d005a25303dea9dcba69
-46b1b76724579b86b4b3b098b12c135f875a3123 cd8f6a9c573aff38898049614bfb157510fd5c67
-2c12ed68531423f8f5160dd8370ece15b12ef6e1 b259df1ff62208b50042fdc614dd71ea3d4a3e1b
-ef81822d8452633f5c0df4fe69a9a37b81b12306 42f02d7eb73a2b902ec6b440610a1309768ba8f2
-e9f0c71c026a1bee9a590eeec164cf22f6001712 8822fb96fda54e33a75f2e9f6ca799ef78790dee
-4bb60687c0826bb52c53cceba3f0989fc0430218 6fb928d035faa3b6fbd87c4b181be5d9045597f1
-c885afa42b50c8aae7a77aa2855f11ce0dad816c 26852eb945c51ce9435e6fa03d8ba931a5c5b389
-858419c0784b8d7196c2be79672969726213b97e 41cd56a1ff85212573719b08828bd9e21e381d3a
-02f63e300c52c70794da39e1cd4892d79a7e2277 aa8d23ec2c63d453bca02a9f096a64fbf4c99b9b
-2d062ddad0209d881f2e02dd46770d039ef36a6c 590988fed11d328889202434762ec2558fb2e8a0
-a4e50af6dc20621bd9e4b1d922e8e3dba19b10af 4100ccf099c7eb967f23bbac547f6fb424d5593c
-dcb7a730e8911953a29b70a611a1a55976036c87 b13d1d8dc224be84eedd234c00683d451fbd992e
-3473a7b27a7e4691f57a10a36de783803ce89c10 b54de647be7828787b1e0d6527339fe7620b9efe
-039fba4db247c021e18b080cf39d5448023240f7 69effa42fb5101007364c3aa92be9976864fe399
-864b803a21e8d05bcf8769fa4515e2be625e08fc da63507e9eadceda53a19f134f83e198bfc788b4
-75d6f66ba26c1883d20ffd8d2a5fcf7c30b56987 32f69511735924378e079e8cbce95853d55218ca
-323b74e803cfad1b0d4dcb752cb871cb359c783c 8f6fabd3519a99876358fec217a3981167ff2c48
-09b8c9f75f5a0e12d732ac2263c78be3ce8d1a67 675a14d18f75d3f7a75871ffd4ac7709db12ccc1
-06a3255dd5634406ddff42bc8e4dfcf88aa99147 70f6d5bd211c7818626c0b1b7469c5253fc61229
-9d248f7841180144b6c59483d165f2e220d85266 8aa27a2f5a943f876a17c69d9b9abfe07ffd23d5
-806f968dd79658f10b62629fe10dce5fd063c4df 6b7e58b232ea33ce3eba0cb359495f6552c09ef7
-6dfa525cc4df8d1bf209bf766ec4b592edb71aab add69d9d4892fffda7d908dfab4b7b6be756a51b
-4797a1ddab66b83c4a06e43d2ab646743590572e e20e4cfb58054352cd9f5ca27cff39a7865f827d
-9e539c23fdef67d6106c17f06cb89c66383a1552 97eb5f91ff238fcdf0630683ff87c39412789275
-6c519ce9907281cadd261ebcd9d9824acb76c26c 6529d7953b09cc9b27a312d7af79c2c85a04e354
-e6fe3e4822450f4bacc95696ca999afd5ffc7c2d 7474a1f7dadbcfdf87eedbf12c109141776191b4
-661e085a077a2cd9545c70d6321189c4e1935395 c189de52738974a12f0408333d7d3775f8bb49e7
-d8fb90bcaee5bebd9b894cfe97aa8f32f1277fb8 7dc5c9299f8bb9972000b8d10b73e3c40502e788
-7f5e4d3ea40b1fe2cd65c3d08341b76464591b51 2de1d5b61694c2a065632fcc48b6d4ca9c02a4d0
-77d5a678e9a4138a93cbbcbafa95a2638d3f0970 c6c03f447890ec203ff59420c4fe029bb1d22f18
-290dee064c1878668b25bb465ba90b36122eeef8 4076fa8d9101f0276bb2ff92253229baf7c370f3
-cc79d68db784d2953301c75ff40e649b67caf326 5ea3600258e631ea5cf492510495f5f08c5b163f
-96466504c293eab0753c9759ebc32410f54e38d6 6047d55343eea2927520f12293f7974bf8942a40
-0f866e8f6c90498eff4adc64cba52b33589e5459 d0cf303414d1ad9e3d6194ebb3d241fe32302c2c
-7f5967793458bb7cc3fe2759bfb8cc83bcd40e68 2153613214e476a6747d170fec90ef6c06a35cfc
-91e67e85420bd86b5e4cca72879755203c0614d0 8b2f7563400f8b8bbac0dfac18f6fd796d6157ce
-107fe46e77b1cbceee0550d5de89e9ef9e2f7789 9a554c894296e42a0dd6ffa86f4ada032d54353a
-ffbf120ea16d2754f5a0bcd997e4ad6c35d192ac 3cab9256a1f1c1ff2a768bfb99a8e0ca763d384b
-6de333be7616cc46e61491270e75cef4da52c70b d6b7d08f715f205cb38f767905f483a5609c6225
-cb89b8a70c46c53b70fef93dc699640f5368d0eb c95a8641fbc8e87f9fec17703b5101841909797b
-7df432f17574663ce7229ff3698d89de54f60bc0 e00653516de339059991c3248c4402f236f096fe
-2e2891df6476e64c705be28778a2ddb86c178518 b99723b3d0819d525c2b656bdb48754e21671a19
-f5894a9c0eb0112d7ecf765b7243052df8f73f5c 6dd0381a578564c5fb7d5a5c214737cf932cf243
-e8c58b6655a52762a07adc950ca3b9976650f864 bb94cf81b3edc23a49616b1b7110be3353051ee4
-2e645246e4708ddf6039c4e469b3f3cf40c4ae7e a377dd0842d72dfe90f43109e192a31bb6318fb0
-5e9baf57e6a36891a43a1d647f209fdb14d16587 8bbf44d6314f37560922c7c6d2b67b59d5d1b496
-53666a605f9b8f1f266a9bf3bd38664542f8e63a 6cd2f6bdac93b3205ceb2e0443ba354b4fc1f63f
-5ff52235796997bcf1d79ee04d3973e3e3a9a355 e376d6b35ac92cbcf30c742fca298e55899ab137
-e7fd284735a7a5eda25467017d9083e4edfe7edf be1ab370e57e7c544b7b9fdc567cd51ae74bfbbf
-da3545be15a096c18f6eb3f5b5ab43c69cbc0690 7c5e45780b196a042c1ac56c6c39ba37fdd140e3
-a986554af6a67340bd25fa3fca0848d07745ed2f c5a8e611aaaa8ea792192a58085aad098fe65448
-fe4076c7c05ac31d239a3304a8e7afd8c09b3289 10dc6474871cf59eec6128e2f1cc6d2d6fc45ce1
-b887a4a41dabcb0d5cd46c33bfa992519a3c52bc bc657a3304da0afab91fd9723be78f9fc14f2b01
-4fd00b3d25604d6b5746f9dae0db78ceecc8a4a9 f3d29f365ae4fbbe6082aaf636aa463bdefd769d
-ad14aa1d94a92e570d4e2d28b5a174488ee6ac83 2a17e7293c6819adfbd65d7a918321c90f6630cf
-5c6de8c98f366336b612ea1fae299cf8ac6a3458 957c8d5dce7238673db0ac6f7693e4372a7d199b
-6fd7200401f02e63f110c08c7ee8c47f1e624650 43165cedd36f0df30bd0ce34cdc8938dfc791562
-e4e1ffa7c08d80a53f977d66be18b49aa796700f 0276c9cd2202c63cfc9cd78449c98729b22c5cab
-3f6da1c3b36eec3504cf646b44d63ab69b4552a3 441ae273be41239b63198e5b7de98c5bdd498d15
-572fc7ad1b854e0743e39b5487a378733acd6275 b9279f8d94cfceaecb1137de098c0816299d17f7
-685e4d07438a09b2d494378a7660e3d0fbe7c51c 28ecbea20bad3dcf671c368cde6fe0090d2c0f9b
-0b0e3c1d3c6f6b4d941d6ddb2683a1bcf01ceaf8 69463ad570a0a69879d8bf613ea8c4a36b610c15
-d1ec40d311c7c0d21ce0199959a5c4a7016fb389 bb93876525916e7116b54e7af23334c1e1b62e29
-1afbd58ce07c1e59100c20dec3238878a07c8128 f10444f1a5fb3b19d4e6b353ce7e2251d5387a56
-2fe42b058aa75a6a5157500b906859146e689c4d b8e5b1ba6ac6182a5efd283eb62e3d3846e3cfa1
-0f6fc32adcf2154532970e7277f45267891ed321 1825eb47fbfd270c1b25f62c90c58ed8e485cfc5
-cb5b63acba38dbf3f38b8826aca7aded0b3d2d4d 64ea46825b6e1ae4d28b191e5e4c13260c2f1586
-5bb9f8487e2e804352c21484839b65a57c2dff7a ba4bdedaa46844de1d30a6674f22538048fa329a
-cd66ed79630f512fe005e8ada37bfcc1e00d53a1 7dae50aeadebd52c51222f7c6d15ea85e46ef119
-cd66ed79630f512fe005e8ada37bfcc1e00d53a1 10206014e497abfeec9cd22327d715f16ec0c5f4