Browse Source

Merge remote-tracking branch 'remotes/upstream/development' into development

Conflicts:
	modules/TropicalAssets/1/assets/particles/caustics.asset.taml
Charlie Patterson 12 years ago
parent
commit
ce39f3b0b6
100 changed files with 9231 additions and 572 deletions
  1. 6 0
      README.md
  2. 36 15
      engine/compilers/VisualStudio 2010/Torque 2D.vcxproj
  3. 114 36
      engine/compilers/VisualStudio 2010/Torque 2D.vcxproj.filters
  4. 36 15
      engine/compilers/VisualStudio 2012/Torque 2D.vcxproj
  5. 114 36
      engine/compilers/VisualStudio 2012/Torque 2D.vcxproj.filters
  6. 129 38
      engine/compilers/Xcode/Torque2D.xcodeproj/project.pbxproj
  7. 124 32
      engine/compilers/Xcode_iOS/Torque2D.xcodeproj/project.pbxproj
  8. 1 1
      engine/source/2d/core/SpriteBatchItem.cc
  9. 43 4
      engine/source/2d/experimental/composites/WaveComposite.cc
  10. 8 3
      engine/source/2d/experimental/composites/WaveComposite.h
  11. 63 8
      engine/source/2d/scene/Scene.cc
  12. 4 0
      engine/source/2d/scene/Scene.h
  13. 3 3
      engine/source/2d/scene/SceneRenderState.h
  14. 29 3
      engine/source/2d/scene/Scene_ScriptBinding.h
  15. 4 4
      engine/source/2d/sceneobject/ShapeVector.cc
  16. 0 1
      engine/source/2d/sceneobject/Sprite.h
  17. 15 6
      engine/source/assets/assetBase.cc
  18. 13 6
      engine/source/assets/assetBase.h
  19. 5 0
      engine/source/assets/assetFieldTypes.cc
  20. 5 0
      engine/source/assets/assetFieldTypes.h
  21. 6 6
      engine/source/assets/assetManager.cc
  22. 39 65
      engine/source/assets/tamlAssetDeclaredUpdateVisitor.h
  23. 78 130
      engine/source/assets/tamlAssetDeclaredVisitor.h
  24. 48 50
      engine/source/assets/tamlAssetReferencedUpdateVisitor.h
  25. 35 36
      engine/source/assets/tamlAssetReferencedVisitor.h
  26. 6 6
      engine/source/io/fileStream.cc
  27. 2 1
      engine/source/io/fileStream.h
  28. 3 0
      engine/source/io/stream.h
  29. 2 2
      engine/source/module/moduleManager.cc
  30. 57 65
      engine/source/module/tamlModuleIdUpdateVisitor.h
  31. 199 0
      engine/source/persistence/rapidjson/.gitattributes
  32. 22 0
      engine/source/persistence/rapidjson/bin/data/glossary.json
  33. 27 0
      engine/source/persistence/rapidjson/bin/data/menu.json
  34. 1 0
      engine/source/persistence/rapidjson/bin/data/readme.txt
  35. 3315 0
      engine/source/persistence/rapidjson/bin/data/sample.json
  36. 88 0
      engine/source/persistence/rapidjson/bin/data/webapp.json
  37. 26 0
      engine/source/persistence/rapidjson/bin/data/widget.json
  38. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16be.json
  39. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16bebom.json
  40. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16le.json
  41. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf16lebom.json
  42. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32be.json
  43. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32bebom.json
  44. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32le.json
  45. BIN
      engine/source/persistence/rapidjson/bin/encodings/utf32lebom.json
  46. 7 0
      engine/source/persistence/rapidjson/bin/encodings/utf8.json
  47. 7 0
      engine/source/persistence/rapidjson/bin/encodings/utf8bom.json
  48. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail1.json
  49. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail10.json
  50. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail11.json
  51. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail12.json
  52. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail13.json
  53. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail14.json
  54. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail15.json
  55. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail16.json
  56. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail17.json
  57. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail18.json
  58. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail19.json
  59. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail2.json
  60. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail20.json
  61. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail21.json
  62. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail22.json
  63. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail23.json
  64. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail24.json
  65. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail25.json
  66. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail26.json
  67. 2 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail27.json
  68. 2 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail28.json
  69. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail29.json
  70. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail3.json
  71. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail30.json
  72. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail31.json
  73. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail32.json
  74. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail33.json
  75. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail4.json
  76. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail5.json
  77. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail6.json
  78. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail7.json
  79. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail8.json
  80. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/fail9.json
  81. 58 0
      engine/source/persistence/rapidjson/bin/jsonchecker/pass1.json
  82. 1 0
      engine/source/persistence/rapidjson/bin/jsonchecker/pass2.json
  83. 6 0
      engine/source/persistence/rapidjson/bin/jsonchecker/pass3.json
  84. 3 0
      engine/source/persistence/rapidjson/bin/jsonchecker/readme.txt
  85. 1789 0
      engine/source/persistence/rapidjson/build/Doxyfile
  86. 4 0
      engine/source/persistence/rapidjson/build/premake
  87. 5 0
      engine/source/persistence/rapidjson/build/premake.bat
  88. 175 0
      engine/source/persistence/rapidjson/build/premake4.lua
  89. 31 0
      engine/source/persistence/rapidjson/example/condense/condense.cpp
  90. 29 0
      engine/source/persistence/rapidjson/example/pretty/pretty.cpp
  91. 55 0
      engine/source/persistence/rapidjson/example/prettyauto/prettyauto.cpp
  92. 129 0
      engine/source/persistence/rapidjson/example/serialize/serialize.cpp
  93. 154 0
      engine/source/persistence/rapidjson/example/tutorial/tutorial.cpp
  94. 221 0
      engine/source/persistence/rapidjson/include/rapidjson/allocators.h
  95. 843 0
      engine/source/persistence/rapidjson/include/rapidjson/document.h
  96. 250 0
      engine/source/persistence/rapidjson/include/rapidjson/encodedstream.h
  97. 527 0
      engine/source/persistence/rapidjson/include/rapidjson/encodings.h
  98. 74 0
      engine/source/persistence/rapidjson/include/rapidjson/filereadstream.h
  99. 49 0
      engine/source/persistence/rapidjson/include/rapidjson/filestream.h
  100. 73 0
      engine/source/persistence/rapidjson/include/rapidjson/filewritestream.h

+ 6 - 0
README.md

@@ -0,0 +1,6 @@
+Torque2D
+========
+
+MIT Licensed Open Source version of Torque 2D from GarageGames.
+
+You can find the main Wiki page [here](https://github.com/GarageGames/Torque2D/wiki)

+ 36 - 15
engine/compilers/VisualStudio 2010/Torque 2D.vcxproj

@@ -72,7 +72,7 @@
     </Midl>
     </Midl>
     <ClCompile>
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -119,7 +119,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -178,7 +178,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -451,14 +451,17 @@
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONParser.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
@@ -712,7 +715,6 @@
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedUpdateVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedUpdateVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedVisitor.h" />
-    <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h" />
     <ClInclude Include="..\..\source\audio\AudioAsset.h" />
     <ClInclude Include="..\..\source\audio\AudioAsset.h" />
     <ClInclude Include="..\..\source\box2d\Box2D.h" />
     <ClInclude Include="..\..\source\box2d\Box2D.h" />
     <ClInclude Include="..\..\source\box2d\Collision\b2BroadPhase.h" />
     <ClInclude Include="..\..\source\box2d\Collision\b2BroadPhase.h" />
@@ -897,18 +899,37 @@
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
+    <ClInclude Include="..\..\source\persistence\taml\tamlParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\tamlVisitor.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />

+ 114 - 36
engine/compilers/VisualStudio 2010/Torque 2D.vcxproj.filters

@@ -178,6 +178,21 @@
     <Filter Include="2d\experimental\composites">
     <Filter Include="2d\experimental\composites">
       <UniqueIdentifier>{b250a30d-b6a9-48b5-9193-2b9bedf765ee}</UniqueIdentifier>
       <UniqueIdentifier>{b250a30d-b6a9-48b5-9193-2b9bedf765ee}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="persistence\rapidjson">
+      <UniqueIdentifier>{3b65e104-5a90-41e6-94d5-8449f4820a4f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\rapidjson\internal">
+      <UniqueIdentifier>{96dd2ca7-b93e-4b3d-8fc2-1b3b96f7df40}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\binary">
+      <UniqueIdentifier>{ef91bcc8-f098-453d-b2ad-a16d85c7c07b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\json">
+      <UniqueIdentifier>{4f1fa44b-dc63-45b7-8aef-37714133ac71}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\xml">
+      <UniqueIdentifier>{e8f11d4b-6a54-4467-ae13-794ed56063f9}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\audio\audio.cc">
     <ClCompile Include="..\..\source\audio\audio.cc">
@@ -669,12 +684,6 @@
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -693,12 +702,6 @@
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -708,9 +711,6 @@
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
@@ -1305,6 +1305,30 @@
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONParser.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\audio\audio.h">
     <ClInclude Include="..\..\source\audio\audio.h">
@@ -1829,12 +1853,6 @@
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1850,12 +1868,6 @@
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1874,15 +1886,6 @@
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h">
-      <Filter>assets</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h">
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
@@ -2676,6 +2679,81 @@
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\tamlParser.h">
+      <Filter>persistence\taml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\tamlVisitor.h">
+      <Filter>persistence\taml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONParser.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">

+ 36 - 15
engine/compilers/VisualStudio 2012/Torque 2D.vcxproj

@@ -75,7 +75,7 @@
     </Midl>
     </Midl>
     <ClCompile>
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../Source/persistence/libjson;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -124,7 +124,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../Source/persistence/libjson;../../source/testing/googleTest;../../source/testing/googleTest/include;../../source/testing/googleTest;../../source/testing/googleTest/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -184,7 +184,7 @@
     <ClCompile>
     <ClCompile>
       <Optimization>MinSpace</Optimization>
       <Optimization>MinSpace</Optimization>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../Lib/zlib;../../Lib/lpng;../../Lib/ljpeg;../../Lib/openal/win32;../../Source;../../Source/persistence/rapidjson/include;../../Source/persistence/libjson;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PreprocessorDefinitions>TORQUE_SHIPPING;UNICODE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -458,14 +458,17 @@
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\serverQuery.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\tcpObject.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
     <ClCompile Include="..\..\source\network\telnetConsole.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONParser.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
     <ClCompile Include="..\..\source\persistence\taml\taml.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlCustom.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
     <ClCompile Include="..\..\source\persistence\taml\tamlWriteNode.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc" />
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc" />
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinystr.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxml.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlerror.cpp" />
@@ -718,7 +721,6 @@
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedUpdateVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedUpdateVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedVisitor.h" />
-    <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h" />
     <ClInclude Include="..\..\source\audio\AudioAsset.h" />
     <ClInclude Include="..\..\source\audio\AudioAsset.h" />
     <ClInclude Include="..\..\source\box2d\Box2D.h" />
     <ClInclude Include="..\..\source\box2d\Box2D.h" />
     <ClInclude Include="..\..\source\box2d\Collision\b2BroadPhase.h" />
     <ClInclude Include="..\..\source\box2d\Collision\b2BroadPhase.h" />
@@ -903,18 +905,37 @@
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\serverQuery.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\tcpObject.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
     <ClInclude Include="..\..\source\network\telnetConsole.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h" />
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCallbacks.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlChildren.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlCustom.h" />
+    <ClInclude Include="..\..\source\persistence\taml\tamlParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\tamlVisitor.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
     <ClInclude Include="..\..\source\persistence\taml\tamlWriteNode.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h" />
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h" />
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinystr.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />
     <ClInclude Include="..\..\source\audio\audio.h" />

+ 114 - 36
engine/compilers/VisualStudio 2012/Torque 2D.vcxproj.filters

@@ -178,6 +178,21 @@
     <Filter Include="2d\experimental\composites">
     <Filter Include="2d\experimental\composites">
       <UniqueIdentifier>{30e1ec13-118b-4d50-8e04-76e76fcfdc01}</UniqueIdentifier>
       <UniqueIdentifier>{30e1ec13-118b-4d50-8e04-76e76fcfdc01}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="persistence\rapidjson">
+      <UniqueIdentifier>{4d0b6ff3-58d2-4952-bd14-915a50a3b568}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\rapidjson\internal">
+      <UniqueIdentifier>{9cbec746-dd4c-4b4c-b11f-37a126ea2c38}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\binary">
+      <UniqueIdentifier>{427672e0-f4a2-45a9-b44c-92d190e961aa}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\json">
+      <UniqueIdentifier>{e1ff3412-7343-4dfb-bc99-bce90655557b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="persistence\taml\xml">
+      <UniqueIdentifier>{cc1c1416-376b-4686-a4ac-21d1a35c9390}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\audio\audio.cc">
     <ClCompile Include="..\..\source\audio\audio.cc">
@@ -669,12 +684,6 @@
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
     <ClCompile Include="..\..\source\persistence\taml\taml.cc">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -693,12 +702,6 @@
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
     <ClCompile Include="..\..\source\persistence\tinyXML\tinyxmlparser.cpp">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryWriter.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlBinaryReader.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
     <ClCompile Include="..\..\source\module\moduleMergeDefinition.cc">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClCompile>
     </ClCompile>
@@ -708,9 +711,6 @@
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
     <ClCompile Include="..\..\source\assets\assetFieldTypes.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="..\..\source\persistence\taml\tamlXmlParser.cc">
-      <Filter>persistence\taml</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
     <ClCompile Include="..\..\source\assets\assetQuery.cc">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClCompile>
     </ClCompile>
@@ -1305,6 +1305,30 @@
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
     <ClCompile Include="..\..\source\2d\core\ImageFrameProviderCore.cc">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryReader.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.cc">
+      <Filter>persistence\taml\binary</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONReader.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONWriter.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlParser.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlReader.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\xml\tamlXmlWriter.cc">
+      <Filter>persistence\taml\xml</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\persistence\taml\json\tamlJSONParser.cc">
+      <Filter>persistence\taml\json</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\audio\audio.h">
     <ClInclude Include="..\..\source\audio\audio.h">
@@ -1829,12 +1853,6 @@
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
     <ClInclude Include="..\..\source\persistence\taml\taml_ScriptBinding.h">
       <Filter>persistence\taml</Filter>
       <Filter>persistence\taml</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
     <ClInclude Include="..\..\source\module\moduleDefinition.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1850,12 +1868,6 @@
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
     <ClInclude Include="..\..\source\persistence\tinyXML\tinyxml.h">
       <Filter>persistence\tinyXML</Filter>
       <Filter>persistence\tinyXML</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryWriter.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlBinaryReader.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
     <ClInclude Include="..\..\source\module\moduleDefinition_ScriptBinding.h">
       <Filter>module</Filter>
       <Filter>module</Filter>
     </ClInclude>
     </ClInclude>
@@ -1874,15 +1886,6 @@
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
     <ClInclude Include="..\..\source\assets\assetFieldTypes.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlParser.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\persistence\taml\tamlXmlVisitor.h">
-      <Filter>persistence\taml</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\source\assets\tamlAssetUpdateVisitor.h">
-      <Filter>assets</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h">
     <ClInclude Include="..\..\source\assets\tamlAssetDeclaredVisitor.h">
       <Filter>assets</Filter>
       <Filter>assets</Filter>
     </ClInclude>
     </ClInclude>
@@ -2673,6 +2676,81 @@
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
     <ClInclude Include="..\..\source\2d\core\ImageFrameProviderCore.h">
       <Filter>2d\core</Filter>
       <Filter>2d\core</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\allocators.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\document.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodedstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\encodings.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filereadstream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\filewritestream.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\prettywriter.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\rapidjson.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\reader.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\stringbuffer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\writer.h">
+      <Filter>persistence\rapidjson</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\pow10.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\stack.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\rapidjson\include\rapidjson\internal\strfunc.h">
+      <Filter>persistence\rapidjson\internal</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryReader.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\binary\tamlBinaryWriter.h">
+      <Filter>persistence\taml\binary</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONReader.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONWriter.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlParser.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlReader.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\xml\tamlXmlWriter.h">
+      <Filter>persistence\taml\xml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\tamlVisitor.h">
+      <Filter>persistence\taml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\tamlParser.h">
+      <Filter>persistence\taml</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\persistence\taml\json\tamlJSONParser.h">
+      <Filter>persistence\taml\json</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">

+ 129 - 38
engine/compilers/Xcode/Torque2D.xcodeproj/project.pbxproj

@@ -23,8 +23,16 @@
 		2ABF5C8F16569A0C00BBBF1D /* osxMutex.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2ABF5C8E16569A0C00BBBF1D /* osxMutex.mm */; };
 		2ABF5C8F16569A0C00BBBF1D /* osxMutex.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2ABF5C8E16569A0C00BBBF1D /* osxMutex.mm */; };
 		2AC4404516B0142B00FC4091 /* ImageFont.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4404316B0142B00FC4091 /* ImageFont.cc */; };
 		2AC4404516B0142B00FC4091 /* ImageFont.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4404316B0142B00FC4091 /* ImageFont.cc */; };
 		2AC5C7E81667C85700A0D046 /* platformStringTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC5C7E71667C85700A0D046 /* platformStringTests.cc */; };
 		2AC5C7E81667C85700A0D046 /* platformStringTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC5C7E71667C85700A0D046 /* platformStringTests.cc */; };
+		2ACAFD4A1705CF4A0022601C /* tamlJSONParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACAFD481705CF4A0022601C /* tamlJSONParser.cc */; };
 		2ACF5A2816E52D4B00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2516E52D4B00F838D9 /* SpriteBatchQuery.cc */; };
 		2ACF5A2816E52D4B00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2516E52D4B00F838D9 /* SpriteBatchQuery.cc */; };
 		2ACFC0A8166CE1AB00FE7370 /* platformMemoryTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */; };
 		2ACFC0A8166CE1AB00FE7370 /* platformMemoryTests.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */; };
+		2AD42140170433FE005BB8AD /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42139170433FE005BB8AD /* tamlXmlParser.cc */; };
+		2AD42141170433FE005BB8AD /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4213B170433FE005BB8AD /* tamlXmlReader.cc */; };
+		2AD42142170433FE005BB8AD /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4213E170433FE005BB8AD /* tamlXmlWriter.cc */; };
+		2AD4214717043408005BB8AD /* tamlJSONReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214317043408005BB8AD /* tamlJSONReader.cc */; };
+		2AD4214817043408005BB8AD /* tamlJSONWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214517043408005BB8AD /* tamlJSONWriter.cc */; };
+		2AD4214D17043413005BB8AD /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214917043413005BB8AD /* tamlBinaryReader.cc */; };
+		2AD4214E17043413005BB8AD /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4214B17043413005BB8AD /* tamlBinaryWriter.cc */; };
 		2ADCAC1516A41E5500E07619 /* ParticleAsset.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */; };
 		2ADCAC1516A41E5500E07619 /* ParticleAsset.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */; };
 		2ADCAC1716A41E5500E07619 /* ParticleAssetField.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1316A41E5500E07619 /* ParticleAssetField.cc */; };
 		2ADCAC1716A41E5500E07619 /* ParticleAssetField.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ADCAC1316A41E5500E07619 /* ParticleAssetField.cc */; };
 		2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938316EF4C220015E200 /* WaveComposite.cc */; };
 		2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938316EF4C220015E200 /* WaveComposite.cc */; };
@@ -401,12 +409,7 @@
 		86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80ED16518D4600D96ADF /* telnetConsole.cc */; };
 		86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80ED16518D4600D96ADF /* telnetConsole.cc */; };
 		86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */; };
 		86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */; };
 		86D770801656873C0046D71F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F316518D4600D96ADF /* taml.cc */; };
 		86D770801656873C0046D71F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F316518D4600D96ADF /* taml.cc */; };
-		86D770811656873C0046D71F /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F616518D4600D96ADF /* tamlBinaryReader.cc */; };
-		86D770821656873C0046D71F /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80F816518D4600D96ADF /* tamlBinaryWriter.cc */; };
 		86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */; };
 		86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */; };
-		86D770851656873C0046D71F /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC80FF16518D4600D96ADF /* tamlXmlParser.cc */; };
-		86D770861656873C0046D71F /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810116518D4600D96ADF /* tamlXmlReader.cc */; };
-		86D770871656873C0046D71F /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810416518D4600D96ADF /* tamlXmlWriter.cc */; };
 		86D770881656873C0046D71F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810716518D4600D96ADF /* tinystr.cpp */; };
 		86D770881656873C0046D71F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810716518D4600D96ADF /* tinystr.cpp */; };
 		86D770891656873C0046D71F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810916518D4600D96ADF /* tinyxml.cpp */; };
 		86D770891656873C0046D71F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810916518D4600D96ADF /* tinyxml.cpp */; };
 		86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810B16518D4600D96ADF /* tinyxmlerror.cpp */; };
 		86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86BC810B16518D4600D96ADF /* tinyxmlerror.cpp */; };
@@ -471,6 +474,8 @@
 		2AB14A0216D7CDC200EABBF2 /* PointForceController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController_ScriptBinding.h; path = controllers/PointForceController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB14A0216D7CDC200EABBF2 /* PointForceController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController_ScriptBinding.h; path = controllers/PointForceController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB14A0316D7CDC200EABBF2 /* PointForceController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointForceController.cc; path = controllers/PointForceController.cc; sourceTree = "<group>"; };
 		2AB14A0316D7CDC200EABBF2 /* PointForceController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointForceController.cc; path = controllers/PointForceController.cc; sourceTree = "<group>"; };
 		2AB14A0416D7CDC300EABBF2 /* PointForceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController.h; path = controllers/PointForceController.h; sourceTree = "<group>"; };
 		2AB14A0416D7CDC300EABBF2 /* PointForceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController.h; path = controllers/PointForceController.h; sourceTree = "<group>"; };
+		2AB4A5221705A84D0043CBAA /* tamlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlParser.h; sourceTree = "<group>"; };
+		2AB4A5231705A84D0043CBAA /* tamlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlVisitor.h; sourceTree = "<group>"; };
 		2AB4C19716DE9F0600B02479 /* GroupedSceneController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GroupedSceneController_ScriptBinding.h; path = controllers/core/GroupedSceneController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB4C19716DE9F0600B02479 /* GroupedSceneController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GroupedSceneController_ScriptBinding.h; path = controllers/core/GroupedSceneController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB4C19816DE9F0600B02479 /* GroupedSceneController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GroupedSceneController.cc; path = controllers/core/GroupedSceneController.cc; sourceTree = "<group>"; };
 		2AB4C19816DE9F0600B02479 /* GroupedSceneController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GroupedSceneController.cc; path = controllers/core/GroupedSceneController.cc; sourceTree = "<group>"; };
 		2AB4C19916DE9F0600B02479 /* GroupedSceneController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GroupedSceneController.h; path = controllers/core/GroupedSceneController.h; sourceTree = "<group>"; };
 		2AB4C19916DE9F0600B02479 /* GroupedSceneController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GroupedSceneController.h; path = controllers/core/GroupedSceneController.h; sourceTree = "<group>"; };
@@ -488,12 +493,43 @@
 		2AC4404316B0142B00FC4091 /* ImageFont.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageFont.cc; sourceTree = "<group>"; };
 		2AC4404316B0142B00FC4091 /* ImageFont.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageFont.cc; sourceTree = "<group>"; };
 		2AC4404416B0142B00FC4091 /* ImageFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageFont.h; sourceTree = "<group>"; };
 		2AC4404416B0142B00FC4091 /* ImageFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageFont.h; sourceTree = "<group>"; };
 		2AC5C7E71667C85700A0D046 /* platformStringTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platformStringTests.cc; path = ../../../source/testing/tests/platformStringTests.cc; sourceTree = "<group>"; };
 		2AC5C7E71667C85700A0D046 /* platformStringTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platformStringTests.cc; path = ../../../source/testing/tests/platformStringTests.cc; sourceTree = "<group>"; };
+		2ACAFD481705CF4A0022601C /* tamlJSONParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONParser.cc; path = json/tamlJSONParser.cc; sourceTree = "<group>"; };
+		2ACAFD491705CF4A0022601C /* tamlJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONParser.h; path = json/tamlJSONParser.h; sourceTree = "<group>"; };
 		2ACF5A2516E52D4B00F838D9 /* SpriteBatchQuery.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatchQuery.cc; sourceTree = "<group>"; };
 		2ACF5A2516E52D4B00F838D9 /* SpriteBatchQuery.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatchQuery.cc; sourceTree = "<group>"; };
 		2ACF5A2616E52D4B00F838D9 /* SpriteBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQuery.h; sourceTree = "<group>"; };
 		2ACF5A2616E52D4B00F838D9 /* SpriteBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQuery.h; sourceTree = "<group>"; };
 		2ACF5A2716E52D4B00F838D9 /* SpriteBatchQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQueryResult.h; sourceTree = "<group>"; };
 		2ACF5A2716E52D4B00F838D9 /* SpriteBatchQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQueryResult.h; sourceTree = "<group>"; };
 		2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platformMemoryTests.cc; path = ../../../source/testing/tests/platformMemoryTests.cc; sourceTree = "<group>"; };
 		2ACFC0A7166CE1AB00FE7370 /* platformMemoryTests.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platformMemoryTests.cc; path = ../../../source/testing/tests/platformMemoryTests.cc; sourceTree = "<group>"; };
 		2AD07B2616D15F5A0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
 		2AD07B2616D15F5A0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
 		2AD35A541663608E00C75F30 /* platformFileIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platformFileIO.h; sourceTree = "<group>"; };
 		2AD35A541663608E00C75F30 /* platformFileIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = platformFileIO.h; sourceTree = "<group>"; };
+		2AD42126170433B3005BB8AD /* allocators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = allocators.h; path = rapidjson/include/rapidjson/allocators.h; sourceTree = "<group>"; };
+		2AD42127170433B3005BB8AD /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = document.h; path = rapidjson/include/rapidjson/document.h; sourceTree = "<group>"; };
+		2AD42128170433B3005BB8AD /* encodedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodedstream.h; path = rapidjson/include/rapidjson/encodedstream.h; sourceTree = "<group>"; };
+		2AD42129170433B3005BB8AD /* encodings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodings.h; path = rapidjson/include/rapidjson/encodings.h; sourceTree = "<group>"; };
+		2AD4212A170433B3005BB8AD /* filereadstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filereadstream.h; path = rapidjson/include/rapidjson/filereadstream.h; sourceTree = "<group>"; };
+		2AD4212B170433B3005BB8AD /* filestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filestream.h; path = rapidjson/include/rapidjson/filestream.h; sourceTree = "<group>"; };
+		2AD4212C170433B3005BB8AD /* filewritestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filewritestream.h; path = rapidjson/include/rapidjson/filewritestream.h; sourceTree = "<group>"; };
+		2AD4212D170433B3005BB8AD /* prettywriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prettywriter.h; path = rapidjson/include/rapidjson/prettywriter.h; sourceTree = "<group>"; };
+		2AD4212E170433B3005BB8AD /* rapidjson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidjson.h; path = rapidjson/include/rapidjson/rapidjson.h; sourceTree = "<group>"; };
+		2AD4212F170433B3005BB8AD /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reader.h; path = rapidjson/include/rapidjson/reader.h; sourceTree = "<group>"; };
+		2AD42130170433B3005BB8AD /* stringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stringbuffer.h; path = rapidjson/include/rapidjson/stringbuffer.h; sourceTree = "<group>"; };
+		2AD42131170433B3005BB8AD /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = writer.h; path = rapidjson/include/rapidjson/writer.h; sourceTree = "<group>"; };
+		2AD42133170433C7005BB8AD /* pow10.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pow10.h; path = rapidjson/include/rapidjson/internal/pow10.h; sourceTree = "<group>"; };
+		2AD42134170433C7005BB8AD /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stack.h; path = rapidjson/include/rapidjson/internal/stack.h; sourceTree = "<group>"; };
+		2AD42135170433C7005BB8AD /* strfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strfunc.h; path = rapidjson/include/rapidjson/internal/strfunc.h; sourceTree = "<group>"; };
+		2AD42139170433FE005BB8AD /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlParser.cc; path = xml/tamlXmlParser.cc; sourceTree = "<group>"; };
+		2AD4213A170433FE005BB8AD /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlParser.h; path = xml/tamlXmlParser.h; sourceTree = "<group>"; };
+		2AD4213B170433FE005BB8AD /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlReader.cc; path = xml/tamlXmlReader.cc; sourceTree = "<group>"; };
+		2AD4213C170433FE005BB8AD /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlReader.h; path = xml/tamlXmlReader.h; sourceTree = "<group>"; };
+		2AD4213E170433FE005BB8AD /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlWriter.cc; path = xml/tamlXmlWriter.cc; sourceTree = "<group>"; };
+		2AD4213F170433FE005BB8AD /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlWriter.h; path = xml/tamlXmlWriter.h; sourceTree = "<group>"; };
+		2AD4214317043408005BB8AD /* tamlJSONReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONReader.cc; path = json/tamlJSONReader.cc; sourceTree = "<group>"; };
+		2AD4214417043408005BB8AD /* tamlJSONReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONReader.h; path = json/tamlJSONReader.h; sourceTree = "<group>"; };
+		2AD4214517043408005BB8AD /* tamlJSONWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONWriter.cc; path = json/tamlJSONWriter.cc; sourceTree = "<group>"; };
+		2AD4214617043408005BB8AD /* tamlJSONWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONWriter.h; path = json/tamlJSONWriter.h; sourceTree = "<group>"; };
+		2AD4214917043413005BB8AD /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryReader.cc; path = binary/tamlBinaryReader.cc; sourceTree = "<group>"; };
+		2AD4214A17043413005BB8AD /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryReader.h; path = binary/tamlBinaryReader.h; sourceTree = "<group>"; };
+		2AD4214B17043413005BB8AD /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryWriter.cc; path = binary/tamlBinaryWriter.cc; sourceTree = "<group>"; };
+		2AD4214C17043413005BB8AD /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryWriter.h; path = binary/tamlBinaryWriter.h; sourceTree = "<group>"; };
 		2ADCAC0E16A41E4400E07619 /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		2ADCAC0E16A41E4400E07619 /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		2ADCAC1016A41E5500E07619 /* ParticleAsset_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleAsset_ScriptBinding.h; sourceTree = "<group>"; };
 		2ADCAC1016A41E5500E07619 /* ParticleAsset_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleAsset_ScriptBinding.h; sourceTree = "<group>"; };
 		2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleAsset.cc; sourceTree = "<group>"; };
 		2ADCAC1116A41E5500E07619 /* ParticleAsset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleAsset.cc; sourceTree = "<group>"; };
@@ -1183,20 +1219,9 @@
 		86BC80F316518D4600D96ADF /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		86BC80F316518D4600D96ADF /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		86BC80F416518D4600D96ADF /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		86BC80F416518D4600D96ADF /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
 		86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
-		86BC80F616518D4600D96ADF /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryReader.cc; sourceTree = "<group>"; };
-		86BC80F716518D4600D96ADF /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryReader.h; sourceTree = "<group>"; };
-		86BC80F816518D4600D96ADF /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryWriter.cc; sourceTree = "<group>"; };
-		86BC80F916518D4600D96ADF /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryWriter.h; sourceTree = "<group>"; };
 		86BC80FA16518D4600D96ADF /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		86BC80FA16518D4600D96ADF /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		86BC80FE16518D4600D96ADF /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
 		86BC80FE16518D4600D96ADF /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
-		86BC80FF16518D4600D96ADF /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlParser.cc; sourceTree = "<group>"; };
-		86BC810016518D4600D96ADF /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlParser.h; sourceTree = "<group>"; };
-		86BC810116518D4600D96ADF /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlReader.cc; sourceTree = "<group>"; };
-		86BC810216518D4600D96ADF /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlReader.h; sourceTree = "<group>"; };
-		86BC810316518D4600D96ADF /* tamlXmlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlVisitor.h; sourceTree = "<group>"; };
-		86BC810416518D4600D96ADF /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlWriter.cc; sourceTree = "<group>"; };
-		86BC810516518D4600D96ADF /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlWriter.h; sourceTree = "<group>"; };
 		86BC810716518D4600D96ADF /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		86BC810716518D4600D96ADF /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		86BC810816518D4600D96ADF /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		86BC810816518D4600D96ADF /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		86BC810916518D4600D96ADF /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
 		86BC810916518D4600D96ADF /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
@@ -1408,6 +1433,73 @@
 			name = controllers;
 			name = controllers;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
+		2AD4212517043387005BB8AD /* rapidjson */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42132170433B7005BB8AD /* internal */,
+				2AD42126170433B3005BB8AD /* allocators.h */,
+				2AD42127170433B3005BB8AD /* document.h */,
+				2AD42128170433B3005BB8AD /* encodedstream.h */,
+				2AD42129170433B3005BB8AD /* encodings.h */,
+				2AD4212A170433B3005BB8AD /* filereadstream.h */,
+				2AD4212B170433B3005BB8AD /* filestream.h */,
+				2AD4212C170433B3005BB8AD /* filewritestream.h */,
+				2AD4212D170433B3005BB8AD /* prettywriter.h */,
+				2AD4212E170433B3005BB8AD /* rapidjson.h */,
+				2AD4212F170433B3005BB8AD /* reader.h */,
+				2AD42130170433B3005BB8AD /* stringbuffer.h */,
+				2AD42131170433B3005BB8AD /* writer.h */,
+			);
+			name = rapidjson;
+			sourceTree = "<group>";
+		};
+		2AD42132170433B7005BB8AD /* internal */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42133170433C7005BB8AD /* pow10.h */,
+				2AD42134170433C7005BB8AD /* stack.h */,
+				2AD42135170433C7005BB8AD /* strfunc.h */,
+			);
+			name = internal;
+			sourceTree = "<group>";
+		};
+		2AD42136170433E4005BB8AD /* binary */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4214917043413005BB8AD /* tamlBinaryReader.cc */,
+				2AD4214A17043413005BB8AD /* tamlBinaryReader.h */,
+				2AD4214B17043413005BB8AD /* tamlBinaryWriter.cc */,
+				2AD4214C17043413005BB8AD /* tamlBinaryWriter.h */,
+			);
+			name = binary;
+			sourceTree = "<group>";
+		};
+		2AD42137170433EA005BB8AD /* json */ = {
+			isa = PBXGroup;
+			children = (
+				2ACAFD481705CF4A0022601C /* tamlJSONParser.cc */,
+				2ACAFD491705CF4A0022601C /* tamlJSONParser.h */,
+				2AD4214317043408005BB8AD /* tamlJSONReader.cc */,
+				2AD4214417043408005BB8AD /* tamlJSONReader.h */,
+				2AD4214517043408005BB8AD /* tamlJSONWriter.cc */,
+				2AD4214617043408005BB8AD /* tamlJSONWriter.h */,
+			);
+			name = json;
+			sourceTree = "<group>";
+		};
+		2AD42138170433F3005BB8AD /* xml */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42139170433FE005BB8AD /* tamlXmlParser.cc */,
+				2AD4213A170433FE005BB8AD /* tamlXmlParser.h */,
+				2AD4213B170433FE005BB8AD /* tamlXmlReader.cc */,
+				2AD4213C170433FE005BB8AD /* tamlXmlReader.h */,
+				2AD4213E170433FE005BB8AD /* tamlXmlWriter.cc */,
+				2AD4213F170433FE005BB8AD /* tamlXmlWriter.h */,
+			);
+			name = xml;
+			sourceTree = "<group>";
+		};
 		2AE2938016EF4BFA0015E200 /* experimental */ = {
 		2AE2938016EF4BFA0015E200 /* experimental */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -2617,6 +2709,7 @@
 		86BC80EF16518D4600D96ADF /* persistence */ = {
 		86BC80EF16518D4600D96ADF /* persistence */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AD4212517043387005BB8AD /* rapidjson */,
 				86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */,
 				86BC80F016518D4600D96ADF /* SimXMLDocument.cpp */,
 				86BC80F116518D4600D96ADF /* SimXMLDocument.h */,
 				86BC80F116518D4600D96ADF /* SimXMLDocument.h */,
 				86BC80F216518D4600D96ADF /* taml */,
 				86BC80F216518D4600D96ADF /* taml */,
@@ -2629,26 +2722,20 @@
 		86BC80F216518D4600D96ADF /* taml */ = {
 		86BC80F216518D4600D96ADF /* taml */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AB4A5221705A84D0043CBAA /* tamlParser.h */,
+				2AB4A5231705A84D0043CBAA /* tamlVisitor.h */,
+				2AD42138170433F3005BB8AD /* xml */,
+				2AD42137170433EA005BB8AD /* json */,
+				2AD42136170433E4005BB8AD /* binary */,
 				2AB97A1B16B66BC70080F940 /* tamlCustom.cc */,
 				2AB97A1B16B66BC70080F940 /* tamlCustom.cc */,
 				2AB97A1C16B66BC70080F940 /* tamlCustom.h */,
 				2AB97A1C16B66BC70080F940 /* tamlCustom.h */,
 				2ADCAC0E16A41E4400E07619 /* tamlChildren.h */,
 				2ADCAC0E16A41E4400E07619 /* tamlChildren.h */,
 				86BC80F316518D4600D96ADF /* taml.cc */,
 				86BC80F316518D4600D96ADF /* taml.cc */,
 				86BC80F416518D4600D96ADF /* taml.h */,
 				86BC80F416518D4600D96ADF /* taml.h */,
 				86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */,
 				86BC80F516518D4600D96ADF /* taml_ScriptBinding.h */,
-				86BC80F616518D4600D96ADF /* tamlBinaryReader.cc */,
-				86BC80F716518D4600D96ADF /* tamlBinaryReader.h */,
-				86BC80F816518D4600D96ADF /* tamlBinaryWriter.cc */,
-				86BC80F916518D4600D96ADF /* tamlBinaryWriter.h */,
 				86BC80FA16518D4600D96ADF /* tamlCallbacks.h */,
 				86BC80FA16518D4600D96ADF /* tamlCallbacks.h */,
 				86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */,
 				86BC80FD16518D4600D96ADF /* tamlWriteNode.cc */,
 				86BC80FE16518D4600D96ADF /* tamlWriteNode.h */,
 				86BC80FE16518D4600D96ADF /* tamlWriteNode.h */,
-				86BC80FF16518D4600D96ADF /* tamlXmlParser.cc */,
-				86BC810016518D4600D96ADF /* tamlXmlParser.h */,
-				86BC810116518D4600D96ADF /* tamlXmlReader.cc */,
-				86BC810216518D4600D96ADF /* tamlXmlReader.h */,
-				86BC810316518D4600D96ADF /* tamlXmlVisitor.h */,
-				86BC810416518D4600D96ADF /* tamlXmlWriter.cc */,
-				86BC810516518D4600D96ADF /* tamlXmlWriter.h */,
 			);
 			);
 			path = taml;
 			path = taml;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -2909,12 +2996,7 @@
 				86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */,
 				86D7707E1656873C0046D71F /* telnetConsole.cc in Sources */,
 				86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */,
 				86D7707F1656873C0046D71F /* SimXMLDocument.cpp in Sources */,
 				86D770801656873C0046D71F /* taml.cc in Sources */,
 				86D770801656873C0046D71F /* taml.cc in Sources */,
-				86D770811656873C0046D71F /* tamlBinaryReader.cc in Sources */,
-				86D770821656873C0046D71F /* tamlBinaryWriter.cc in Sources */,
 				86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */,
 				86D770841656873C0046D71F /* tamlWriteNode.cc in Sources */,
-				86D770851656873C0046D71F /* tamlXmlParser.cc in Sources */,
-				86D770861656873C0046D71F /* tamlXmlReader.cc in Sources */,
-				86D770871656873C0046D71F /* tamlXmlWriter.cc in Sources */,
 				86D770881656873C0046D71F /* tinystr.cpp in Sources */,
 				86D770881656873C0046D71F /* tinystr.cpp in Sources */,
 				86D770891656873C0046D71F /* tinyxml.cpp in Sources */,
 				86D770891656873C0046D71F /* tinyxml.cpp in Sources */,
 				86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */,
 				86D7708A1656873C0046D71F /* tinyxmlerror.cpp in Sources */,
@@ -3296,6 +3378,14 @@
 				2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */,
 				2AE2938516EF4C220015E200 /* WaveComposite.cc in Sources */,
 				2AA3655916F3552200E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3655916F3552200E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3655A16F3552200E7A900 /* ImageFrameProviderCore.cc in Sources */,
 				2AA3655A16F3552200E7A900 /* ImageFrameProviderCore.cc in Sources */,
+				2AD42140170433FE005BB8AD /* tamlXmlParser.cc in Sources */,
+				2AD42141170433FE005BB8AD /* tamlXmlReader.cc in Sources */,
+				2AD42142170433FE005BB8AD /* tamlXmlWriter.cc in Sources */,
+				2AD4214717043408005BB8AD /* tamlJSONReader.cc in Sources */,
+				2AD4214817043408005BB8AD /* tamlJSONWriter.cc in Sources */,
+				2AD4214D17043413005BB8AD /* tamlBinaryReader.cc in Sources */,
+				2AD4214E17043413005BB8AD /* tamlBinaryWriter.cc in Sources */,
+				2ACAFD4A1705CF4A0022601C /* tamlJSONParser.cc in Sources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
@@ -3358,10 +3448,9 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
+					../../source/persistence/rapidjson/include,
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
-					../../source/testing/googleTest,
-					../../source/testing/googleTest/include,
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
@@ -3454,10 +3543,11 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
+					../../source/persistence/rapidjson,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest/include,
 					../../source/testing/googleTest/include,
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
@@ -3487,10 +3577,11 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
-					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
+					../../source/persistence/rapidjson/include,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest,
 					../../source/testing/googleTest/include,
 					../../source/testing/googleTest/include,
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/ApplicationServices.framework/Versions/Current/Frameworks/QD.framework/Headers",
+					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";
 				LIBRARY_SEARCH_PATHS = "$(inherited)";

+ 124 - 32
engine/compilers/Xcode_iOS/Torque2D.xcodeproj/project.pbxproj

@@ -17,7 +17,15 @@
 		2AB4C1B116DE9F6700B02479 /* PickingSceneController.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AB4C1AD16DE9F6700B02479 /* PickingSceneController.cc */; };
 		2AB4C1B116DE9F6700B02479 /* PickingSceneController.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AB4C1AD16DE9F6700B02479 /* PickingSceneController.cc */; };
 		2AB97A2116B66BE50080F940 /* tamlCustom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AB97A1F16B66BE50080F940 /* tamlCustom.cc */; };
 		2AB97A2116B66BE50080F940 /* tamlCustom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AB97A1F16B66BE50080F940 /* tamlCustom.cc */; };
 		2AC4404E16B0144500FC4091 /* ImageFont.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4404C16B0144500FC4091 /* ImageFont.cc */; };
 		2AC4404E16B0144500FC4091 /* ImageFont.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4404C16B0144500FC4091 /* ImageFont.cc */; };
+		2ACAFD471705CF340022601C /* tamlJSONParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACAFD451705CF340022601C /* tamlJSONParser.cc */; };
 		2ACF5A2C16E52D6A00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2916E52D6A00F838D9 /* SpriteBatchQuery.cc */; };
 		2ACF5A2C16E52D6A00F838D9 /* SpriteBatchQuery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF5A2916E52D6A00F838D9 /* SpriteBatchQuery.cc */; };
+		2AD42156170434C2005BB8AD /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42152170434C2005BB8AD /* tamlBinaryReader.cc */; };
+		2AD42157170434C2005BB8AD /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42154170434C2005BB8AD /* tamlBinaryWriter.cc */; };
+		2AD4215F170434E1005BB8AD /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42158170434E1005BB8AD /* tamlXmlParser.cc */; };
+		2AD42160170434E1005BB8AD /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4215A170434E1005BB8AD /* tamlXmlReader.cc */; };
+		2AD42161170434E1005BB8AD /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD4215D170434E1005BB8AD /* tamlXmlWriter.cc */; };
+		2AD42166170434F0005BB8AD /* tamlJSONReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42162170434F0005BB8AD /* tamlJSONReader.cc */; };
+		2AD42167170434F0005BB8AD /* tamlJSONWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AD42164170434F0005BB8AD /* tamlJSONWriter.cc */; };
 		2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938916EF4C480015E200 /* WaveComposite.cc */; };
 		2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2938916EF4C480015E200 /* WaveComposite.cc */; };
 		2AE2F55916D6B07200B6A058 /* BuoyancyController.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2F55716D6B07200B6A058 /* BuoyancyController.cc */; };
 		2AE2F55916D6B07200B6A058 /* BuoyancyController.cc in Sources */ = {isa = PBXBuildFile; fileRef = 2AE2F55716D6B07200B6A058 /* BuoyancyController.cc */; };
 		2AED7D9316B70102003482CF /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AED7D9216B70102003482CF /* CoreText.framework */; };
 		2AED7D9316B70102003482CF /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AED7D9216B70102003482CF /* CoreText.framework */; };
@@ -302,12 +310,7 @@
 		867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5116AEC9050033868F /* telnetConsole.cc */; };
 		867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5116AEC9050033868F /* telnetConsole.cc */; };
 		867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5416AEC9050033868F /* SimXMLDocument.cpp */; };
 		867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5416AEC9050033868F /* SimXMLDocument.cpp */; };
 		867BB0E516AEC9050033868F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5716AEC9050033868F /* taml.cc */; };
 		867BB0E516AEC9050033868F /* taml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5716AEC9050033868F /* taml.cc */; };
-		867BB0E616AEC9050033868F /* tamlBinaryReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5A16AEC9050033868F /* tamlBinaryReader.cc */; };
-		867BB0E716AEC9050033868F /* tamlBinaryWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF5C16AEC9050033868F /* tamlBinaryWriter.cc */; };
 		867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6216AEC9050033868F /* tamlWriteNode.cc */; };
 		867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6216AEC9050033868F /* tamlWriteNode.cc */; };
-		867BB0EA16AEC9050033868F /* tamlXmlParser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6416AEC9050033868F /* tamlXmlParser.cc */; };
-		867BB0EB16AEC9050033868F /* tamlXmlReader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6616AEC9050033868F /* tamlXmlReader.cc */; };
-		867BB0EC16AEC9050033868F /* tamlXmlWriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6916AEC9050033868F /* tamlXmlWriter.cc */; };
 		867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6C16AEC9050033868F /* tinystr.cpp */; };
 		867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6C16AEC9050033868F /* tinystr.cpp */; };
 		867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6E16AEC9050033868F /* tinyxml.cpp */; };
 		867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF6E16AEC9050033868F /* tinyxml.cpp */; };
 		867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF7016AEC9050033868F /* tinyxmlerror.cpp */; };
 		867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 867BAF7016AEC9050033868F /* tinyxmlerror.cpp */; };
@@ -493,6 +496,8 @@
 		2AB14A0616D7CDCE00EABBF2 /* PointForceController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController_ScriptBinding.h; path = controllers/PointForceController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB14A0616D7CDCE00EABBF2 /* PointForceController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController_ScriptBinding.h; path = controllers/PointForceController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB14A0716D7CDCE00EABBF2 /* PointForceController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointForceController.cc; path = controllers/PointForceController.cc; sourceTree = "<group>"; };
 		2AB14A0716D7CDCE00EABBF2 /* PointForceController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointForceController.cc; path = controllers/PointForceController.cc; sourceTree = "<group>"; };
 		2AB14A0816D7CDCE00EABBF2 /* PointForceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController.h; path = controllers/PointForceController.h; sourceTree = "<group>"; };
 		2AB14A0816D7CDCE00EABBF2 /* PointForceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PointForceController.h; path = controllers/PointForceController.h; sourceTree = "<group>"; };
+		2AB4A5241705A88F0043CBAA /* tamlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlParser.h; sourceTree = "<group>"; };
+		2AB4A5251705A88F0043CBAA /* tamlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlVisitor.h; sourceTree = "<group>"; };
 		2AB4C1A416DE9F4B00B02479 /* AmbientForceController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AmbientForceController_ScriptBinding.h; path = controllers/AmbientForceController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB4C1A416DE9F4B00B02479 /* AmbientForceController_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AmbientForceController_ScriptBinding.h; path = controllers/AmbientForceController_ScriptBinding.h; sourceTree = "<group>"; };
 		2AB4C1A516DE9F4B00B02479 /* AmbientForceController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AmbientForceController.cc; path = controllers/AmbientForceController.cc; sourceTree = "<group>"; };
 		2AB4C1A516DE9F4B00B02479 /* AmbientForceController.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AmbientForceController.cc; path = controllers/AmbientForceController.cc; sourceTree = "<group>"; };
 		2AB4C1A616DE9F4B00B02479 /* AmbientForceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AmbientForceController.h; path = controllers/AmbientForceController.h; sourceTree = "<group>"; };
 		2AB4C1A616DE9F4B00B02479 /* AmbientForceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AmbientForceController.h; path = controllers/AmbientForceController.h; sourceTree = "<group>"; };
@@ -508,10 +513,41 @@
 		2AC4404B16B0144500FC4091 /* ImageFont_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageFont_ScriptBinding.h; sourceTree = "<group>"; };
 		2AC4404B16B0144500FC4091 /* ImageFont_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageFont_ScriptBinding.h; sourceTree = "<group>"; };
 		2AC4404C16B0144500FC4091 /* ImageFont.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageFont.cc; sourceTree = "<group>"; };
 		2AC4404C16B0144500FC4091 /* ImageFont.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageFont.cc; sourceTree = "<group>"; };
 		2AC4404D16B0144500FC4091 /* ImageFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageFont.h; sourceTree = "<group>"; };
 		2AC4404D16B0144500FC4091 /* ImageFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageFont.h; sourceTree = "<group>"; };
+		2ACAFD451705CF340022601C /* tamlJSONParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONParser.cc; path = json/tamlJSONParser.cc; sourceTree = "<group>"; };
+		2ACAFD461705CF340022601C /* tamlJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONParser.h; path = json/tamlJSONParser.h; sourceTree = "<group>"; };
 		2ACF5A2916E52D6A00F838D9 /* SpriteBatchQuery.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatchQuery.cc; sourceTree = "<group>"; };
 		2ACF5A2916E52D6A00F838D9 /* SpriteBatchQuery.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatchQuery.cc; sourceTree = "<group>"; };
 		2ACF5A2A16E52D6A00F838D9 /* SpriteBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQuery.h; sourceTree = "<group>"; };
 		2ACF5A2A16E52D6A00F838D9 /* SpriteBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQuery.h; sourceTree = "<group>"; };
 		2ACF5A2B16E52D6A00F838D9 /* SpriteBatchQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQueryResult.h; sourceTree = "<group>"; };
 		2ACF5A2B16E52D6A00F838D9 /* SpriteBatchQueryResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatchQueryResult.h; sourceTree = "<group>"; };
 		2AD07B2716D15F8E0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
 		2AD07B2716D15F8E0070DC79 /* simObjectTimerEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simObjectTimerEvent.h; sourceTree = "<group>"; };
+		2AD42152170434C2005BB8AD /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryReader.cc; path = binary/tamlBinaryReader.cc; sourceTree = "<group>"; };
+		2AD42153170434C2005BB8AD /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryReader.h; path = binary/tamlBinaryReader.h; sourceTree = "<group>"; };
+		2AD42154170434C2005BB8AD /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlBinaryWriter.cc; path = binary/tamlBinaryWriter.cc; sourceTree = "<group>"; };
+		2AD42155170434C2005BB8AD /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlBinaryWriter.h; path = binary/tamlBinaryWriter.h; sourceTree = "<group>"; };
+		2AD42158170434E1005BB8AD /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlParser.cc; path = xml/tamlXmlParser.cc; sourceTree = "<group>"; };
+		2AD42159170434E1005BB8AD /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlParser.h; path = xml/tamlXmlParser.h; sourceTree = "<group>"; };
+		2AD4215A170434E1005BB8AD /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlReader.cc; path = xml/tamlXmlReader.cc; sourceTree = "<group>"; };
+		2AD4215B170434E1005BB8AD /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlReader.h; path = xml/tamlXmlReader.h; sourceTree = "<group>"; };
+		2AD4215D170434E1005BB8AD /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlXmlWriter.cc; path = xml/tamlXmlWriter.cc; sourceTree = "<group>"; };
+		2AD4215E170434E1005BB8AD /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlXmlWriter.h; path = xml/tamlXmlWriter.h; sourceTree = "<group>"; };
+		2AD42162170434F0005BB8AD /* tamlJSONReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONReader.cc; path = json/tamlJSONReader.cc; sourceTree = "<group>"; };
+		2AD42163170434F0005BB8AD /* tamlJSONReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONReader.h; path = json/tamlJSONReader.h; sourceTree = "<group>"; };
+		2AD42164170434F0005BB8AD /* tamlJSONWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tamlJSONWriter.cc; path = json/tamlJSONWriter.cc; sourceTree = "<group>"; };
+		2AD42165170434F0005BB8AD /* tamlJSONWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tamlJSONWriter.h; path = json/tamlJSONWriter.h; sourceTree = "<group>"; };
+		2AD4216A17043513005BB8AD /* allocators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = allocators.h; path = rapidjson/include/rapidjson/allocators.h; sourceTree = "<group>"; };
+		2AD4216B17043513005BB8AD /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = document.h; path = rapidjson/include/rapidjson/document.h; sourceTree = "<group>"; };
+		2AD4216C17043513005BB8AD /* encodedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodedstream.h; path = rapidjson/include/rapidjson/encodedstream.h; sourceTree = "<group>"; };
+		2AD4216D17043513005BB8AD /* encodings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = encodings.h; path = rapidjson/include/rapidjson/encodings.h; sourceTree = "<group>"; };
+		2AD4216E17043513005BB8AD /* filereadstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filereadstream.h; path = rapidjson/include/rapidjson/filereadstream.h; sourceTree = "<group>"; };
+		2AD4216F17043513005BB8AD /* filestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filestream.h; path = rapidjson/include/rapidjson/filestream.h; sourceTree = "<group>"; };
+		2AD4217017043513005BB8AD /* filewritestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filewritestream.h; path = rapidjson/include/rapidjson/filewritestream.h; sourceTree = "<group>"; };
+		2AD4217117043513005BB8AD /* prettywriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prettywriter.h; path = rapidjson/include/rapidjson/prettywriter.h; sourceTree = "<group>"; };
+		2AD4217217043513005BB8AD /* rapidjson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rapidjson.h; path = rapidjson/include/rapidjson/rapidjson.h; sourceTree = "<group>"; };
+		2AD4217317043513005BB8AD /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reader.h; path = rapidjson/include/rapidjson/reader.h; sourceTree = "<group>"; };
+		2AD4217417043513005BB8AD /* stringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stringbuffer.h; path = rapidjson/include/rapidjson/stringbuffer.h; sourceTree = "<group>"; };
+		2AD4217517043513005BB8AD /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = writer.h; path = rapidjson/include/rapidjson/writer.h; sourceTree = "<group>"; };
+		2AD4217617043524005BB8AD /* pow10.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pow10.h; path = rapidjson/include/rapidjson/internal/pow10.h; sourceTree = "<group>"; };
+		2AD4217717043524005BB8AD /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stack.h; path = rapidjson/include/rapidjson/internal/stack.h; sourceTree = "<group>"; };
+		2AD4217817043524005BB8AD /* strfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strfunc.h; path = rapidjson/include/rapidjson/internal/strfunc.h; sourceTree = "<group>"; };
 		2AE2938816EF4C480015E200 /* WaveComposite_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite_ScriptBinding.h; path = experimental/composites/WaveComposite_ScriptBinding.h; sourceTree = "<group>"; };
 		2AE2938816EF4C480015E200 /* WaveComposite_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite_ScriptBinding.h; path = experimental/composites/WaveComposite_ScriptBinding.h; sourceTree = "<group>"; };
 		2AE2938916EF4C480015E200 /* WaveComposite.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WaveComposite.cc; path = experimental/composites/WaveComposite.cc; sourceTree = "<group>"; };
 		2AE2938916EF4C480015E200 /* WaveComposite.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WaveComposite.cc; path = experimental/composites/WaveComposite.cc; sourceTree = "<group>"; };
 		2AE2938A16EF4C480015E200 /* WaveComposite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite.h; path = experimental/composites/WaveComposite.h; sourceTree = "<group>"; };
 		2AE2938A16EF4C480015E200 /* WaveComposite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WaveComposite.h; path = experimental/composites/WaveComposite.h; sourceTree = "<group>"; };
@@ -1110,21 +1146,10 @@
 		867BAF5716AEC9050033868F /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		867BAF5716AEC9050033868F /* taml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = taml.cc; sourceTree = "<group>"; };
 		867BAF5816AEC9050033868F /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		867BAF5816AEC9050033868F /* taml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml.h; sourceTree = "<group>"; };
 		867BAF5916AEC9050033868F /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
 		867BAF5916AEC9050033868F /* taml_ScriptBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = taml_ScriptBinding.h; sourceTree = "<group>"; };
-		867BAF5A16AEC9050033868F /* tamlBinaryReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryReader.cc; sourceTree = "<group>"; };
-		867BAF5B16AEC9050033868F /* tamlBinaryReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryReader.h; sourceTree = "<group>"; };
-		867BAF5C16AEC9050033868F /* tamlBinaryWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlBinaryWriter.cc; sourceTree = "<group>"; };
-		867BAF5D16AEC9050033868F /* tamlBinaryWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlBinaryWriter.h; sourceTree = "<group>"; };
 		867BAF5E16AEC9050033868F /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		867BAF5E16AEC9050033868F /* tamlCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlCallbacks.h; sourceTree = "<group>"; };
 		867BAF5F16AEC9050033868F /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		867BAF5F16AEC9050033868F /* tamlChildren.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlChildren.h; sourceTree = "<group>"; };
 		867BAF6216AEC9050033868F /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		867BAF6216AEC9050033868F /* tamlWriteNode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlWriteNode.cc; sourceTree = "<group>"; };
 		867BAF6316AEC9050033868F /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
 		867BAF6316AEC9050033868F /* tamlWriteNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlWriteNode.h; sourceTree = "<group>"; };
-		867BAF6416AEC9050033868F /* tamlXmlParser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlParser.cc; sourceTree = "<group>"; };
-		867BAF6516AEC9050033868F /* tamlXmlParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlParser.h; sourceTree = "<group>"; };
-		867BAF6616AEC9050033868F /* tamlXmlReader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlReader.cc; sourceTree = "<group>"; };
-		867BAF6716AEC9050033868F /* tamlXmlReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlReader.h; sourceTree = "<group>"; };
-		867BAF6816AEC9050033868F /* tamlXmlVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlVisitor.h; sourceTree = "<group>"; };
-		867BAF6916AEC9050033868F /* tamlXmlWriter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tamlXmlWriter.cc; sourceTree = "<group>"; };
-		867BAF6A16AEC9050033868F /* tamlXmlWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tamlXmlWriter.h; sourceTree = "<group>"; };
 		867BAF6C16AEC9050033868F /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		867BAF6C16AEC9050033868F /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
 		867BAF6D16AEC9050033868F /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		867BAF6D16AEC9050033868F /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
 		867BAF6E16AEC9050033868F /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
 		867BAF6E16AEC9050033868F /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
@@ -1478,6 +1503,73 @@
 			name = controllers;
 			name = controllers;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
+		2AD4214F170434A9005BB8AD /* binary */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42152170434C2005BB8AD /* tamlBinaryReader.cc */,
+				2AD42153170434C2005BB8AD /* tamlBinaryReader.h */,
+				2AD42154170434C2005BB8AD /* tamlBinaryWriter.cc */,
+				2AD42155170434C2005BB8AD /* tamlBinaryWriter.h */,
+			);
+			name = binary;
+			sourceTree = "<group>";
+		};
+		2AD42150170434AF005BB8AD /* json */ = {
+			isa = PBXGroup;
+			children = (
+				2ACAFD451705CF340022601C /* tamlJSONParser.cc */,
+				2ACAFD461705CF340022601C /* tamlJSONParser.h */,
+				2AD42162170434F0005BB8AD /* tamlJSONReader.cc */,
+				2AD42163170434F0005BB8AD /* tamlJSONReader.h */,
+				2AD42164170434F0005BB8AD /* tamlJSONWriter.cc */,
+				2AD42165170434F0005BB8AD /* tamlJSONWriter.h */,
+			);
+			name = json;
+			sourceTree = "<group>";
+		};
+		2AD42151170434B5005BB8AD /* xml */ = {
+			isa = PBXGroup;
+			children = (
+				2AD42158170434E1005BB8AD /* tamlXmlParser.cc */,
+				2AD42159170434E1005BB8AD /* tamlXmlParser.h */,
+				2AD4215A170434E1005BB8AD /* tamlXmlReader.cc */,
+				2AD4215B170434E1005BB8AD /* tamlXmlReader.h */,
+				2AD4215D170434E1005BB8AD /* tamlXmlWriter.cc */,
+				2AD4215E170434E1005BB8AD /* tamlXmlWriter.h */,
+			);
+			name = xml;
+			sourceTree = "<group>";
+		};
+		2AD42168170434F9005BB8AD /* rapidjson */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4216A17043513005BB8AD /* allocators.h */,
+				2AD4216B17043513005BB8AD /* document.h */,
+				2AD4216C17043513005BB8AD /* encodedstream.h */,
+				2AD4216D17043513005BB8AD /* encodings.h */,
+				2AD4216E17043513005BB8AD /* filereadstream.h */,
+				2AD4216F17043513005BB8AD /* filestream.h */,
+				2AD4217017043513005BB8AD /* filewritestream.h */,
+				2AD4217117043513005BB8AD /* prettywriter.h */,
+				2AD4217217043513005BB8AD /* rapidjson.h */,
+				2AD4217317043513005BB8AD /* reader.h */,
+				2AD4217417043513005BB8AD /* stringbuffer.h */,
+				2AD4217517043513005BB8AD /* writer.h */,
+				2AD4216917043501005BB8AD /* internal */,
+			);
+			name = rapidjson;
+			sourceTree = "<group>";
+		};
+		2AD4216917043501005BB8AD /* internal */ = {
+			isa = PBXGroup;
+			children = (
+				2AD4217617043524005BB8AD /* pow10.h */,
+				2AD4217717043524005BB8AD /* stack.h */,
+				2AD4217817043524005BB8AD /* strfunc.h */,
+			);
+			name = internal;
+			sourceTree = "<group>";
+		};
 		2AE2938616EF4C310015E200 /* experimental */ = {
 		2AE2938616EF4C310015E200 /* experimental */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -2368,6 +2460,7 @@
 		867BAF5316AEC9050033868F /* persistence */ = {
 		867BAF5316AEC9050033868F /* persistence */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AD42168170434F9005BB8AD /* rapidjson */,
 				867BAF5416AEC9050033868F /* SimXMLDocument.cpp */,
 				867BAF5416AEC9050033868F /* SimXMLDocument.cpp */,
 				867BAF5516AEC9050033868F /* SimXMLDocument.h */,
 				867BAF5516AEC9050033868F /* SimXMLDocument.h */,
 				867BAF5616AEC9050033868F /* taml */,
 				867BAF5616AEC9050033868F /* taml */,
@@ -2380,26 +2473,20 @@
 		867BAF5616AEC9050033868F /* taml */ = {
 		867BAF5616AEC9050033868F /* taml */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				2AB4A5241705A88F0043CBAA /* tamlParser.h */,
+				2AB4A5251705A88F0043CBAA /* tamlVisitor.h */,
+				2AD42151170434B5005BB8AD /* xml */,
+				2AD42150170434AF005BB8AD /* json */,
+				2AD4214F170434A9005BB8AD /* binary */,
 				2AB97A1F16B66BE50080F940 /* tamlCustom.cc */,
 				2AB97A1F16B66BE50080F940 /* tamlCustom.cc */,
 				2AB97A2016B66BE50080F940 /* tamlCustom.h */,
 				2AB97A2016B66BE50080F940 /* tamlCustom.h */,
 				867BAF5716AEC9050033868F /* taml.cc */,
 				867BAF5716AEC9050033868F /* taml.cc */,
 				867BAF5816AEC9050033868F /* taml.h */,
 				867BAF5816AEC9050033868F /* taml.h */,
 				867BAF5916AEC9050033868F /* taml_ScriptBinding.h */,
 				867BAF5916AEC9050033868F /* taml_ScriptBinding.h */,
-				867BAF5A16AEC9050033868F /* tamlBinaryReader.cc */,
-				867BAF5B16AEC9050033868F /* tamlBinaryReader.h */,
-				867BAF5C16AEC9050033868F /* tamlBinaryWriter.cc */,
-				867BAF5D16AEC9050033868F /* tamlBinaryWriter.h */,
 				867BAF5E16AEC9050033868F /* tamlCallbacks.h */,
 				867BAF5E16AEC9050033868F /* tamlCallbacks.h */,
 				867BAF5F16AEC9050033868F /* tamlChildren.h */,
 				867BAF5F16AEC9050033868F /* tamlChildren.h */,
 				867BAF6216AEC9050033868F /* tamlWriteNode.cc */,
 				867BAF6216AEC9050033868F /* tamlWriteNode.cc */,
 				867BAF6316AEC9050033868F /* tamlWriteNode.h */,
 				867BAF6316AEC9050033868F /* tamlWriteNode.h */,
-				867BAF6416AEC9050033868F /* tamlXmlParser.cc */,
-				867BAF6516AEC9050033868F /* tamlXmlParser.h */,
-				867BAF6616AEC9050033868F /* tamlXmlReader.cc */,
-				867BAF6716AEC9050033868F /* tamlXmlReader.h */,
-				867BAF6816AEC9050033868F /* tamlXmlVisitor.h */,
-				867BAF6916AEC9050033868F /* tamlXmlWriter.cc */,
-				867BAF6A16AEC9050033868F /* tamlXmlWriter.h */,
 			);
 			);
 			path = taml;
 			path = taml;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -3261,12 +3348,7 @@
 				867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */,
 				867BB0E316AEC9050033868F /* telnetConsole.cc in Sources */,
 				867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */,
 				867BB0E416AEC9050033868F /* SimXMLDocument.cpp in Sources */,
 				867BB0E516AEC9050033868F /* taml.cc in Sources */,
 				867BB0E516AEC9050033868F /* taml.cc in Sources */,
-				867BB0E616AEC9050033868F /* tamlBinaryReader.cc in Sources */,
-				867BB0E716AEC9050033868F /* tamlBinaryWriter.cc in Sources */,
 				867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */,
 				867BB0E916AEC9050033868F /* tamlWriteNode.cc in Sources */,
-				867BB0EA16AEC9050033868F /* tamlXmlParser.cc in Sources */,
-				867BB0EB16AEC9050033868F /* tamlXmlReader.cc in Sources */,
-				867BB0EC16AEC9050033868F /* tamlXmlWriter.cc in Sources */,
 				867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */,
 				867BB0ED16AEC9050033868F /* tinystr.cpp in Sources */,
 				867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */,
 				867BB0EE16AEC9050033868F /* tinyxml.cpp in Sources */,
 				867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */,
 				867BB0EF16AEC9050033868F /* tinyxmlerror.cpp in Sources */,
@@ -3432,6 +3514,14 @@
 				2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */,
 				2AE2938B16EF4C480015E200 /* WaveComposite.cc in Sources */,
 				2AA3655F16F3553E00E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3655F16F3553E00E7A900 /* ImageFrameProvider.cc in Sources */,
 				2AA3656016F3553E00E7A900 /* ImageFrameProviderCore.cc in Sources */,
 				2AA3656016F3553E00E7A900 /* ImageFrameProviderCore.cc in Sources */,
+				2AD42156170434C2005BB8AD /* tamlBinaryReader.cc in Sources */,
+				2AD42157170434C2005BB8AD /* tamlBinaryWriter.cc in Sources */,
+				2AD4215F170434E1005BB8AD /* tamlXmlParser.cc in Sources */,
+				2AD42160170434E1005BB8AD /* tamlXmlReader.cc in Sources */,
+				2AD42161170434E1005BB8AD /* tamlXmlWriter.cc in Sources */,
+				2AD42166170434F0005BB8AD /* tamlJSONReader.cc in Sources */,
+				2AD42167170434F0005BB8AD /* tamlJSONWriter.cc in Sources */,
+				2ACAFD471705CF340022601C /* tamlJSONParser.cc in Sources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
@@ -3533,6 +3623,7 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
+					../../source/persistence/rapidjson/include,
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
@@ -3556,6 +3647,7 @@
 					../../lib/lpng,
 					../../lib/lpng,
 					../../lib/ljpeg,
 					../../lib/ljpeg,
 					../../lib/lungif,
 					../../lib/lungif,
+					../../source/persistence/rapidjson/include,
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 					"$(SYSTEM_LIBRARY_DIR)/Frameworks/OpenGL.framework/Headers",
 				);
 				);
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";
 				INFOPLIST_FILE = "Torque2D/Torque2D-Info.plist";

+ 1 - 1
engine/source/2d/core/SpriteBatchItem.cc

@@ -713,4 +713,4 @@ void SpriteBatchItem::WriteCustomTamlSchema( const AbstractClassRep* pClassRep,
     pBatchItemLogicalPosition->SetAttribute( "name", spriteLogicalPositionName );
     pBatchItemLogicalPosition->SetAttribute( "name", spriteLogicalPositionName );
     pBatchItemLogicalPosition->SetAttribute( "type", "xs:string" );
     pBatchItemLogicalPosition->SetAttribute( "type", "xs:string" );
     pBatchItemComplexTypeElement->LinkEndChild( pBatchItemLogicalPosition );
     pBatchItemComplexTypeElement->LinkEndChild( pBatchItemLogicalPosition );
-}
+}

+ 43 - 4
engine/source/2d/experimental/composites/WaveComposite.cc

@@ -47,9 +47,6 @@ WaveComposite::WaveComposite() :
     //          For smaller scale composites, this is more efficient and saves memory.
     //          For smaller scale composites, this is more efficient and saves memory.
     //          Do not turn this off for larger scale composites like tile-maps.
     //          Do not turn this off for larger scale composites like tile-maps.
     SpriteBatch::setBatchCulling( false );
     SpriteBatch::setBatchCulling( false );
-
-    // Turn-off layout.
-    setBatchLayout( NO_LAYOUT );
 }
 }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -84,6 +81,20 @@ void WaveComposite::preIntegrate( const F32 totalTime, const F32 elapsedTime, De
     // Update composition at pre-tick time.
     // Update composition at pre-tick time.
     updateComposition( mPreTickTime );
     updateComposition( mPreTickTime );
 
 
+    // Are the spatials dirty?
+    if ( getSpatialDirty() )
+    {
+        // Yes, so update the world transform.
+        setBatchTransform( getRenderTransform() );
+    }
+
+    // Are the render extents dirty?
+    if ( getLocalExtentsDirty() )
+    {
+        // Yes, so set size as local extents.
+        setSize( getLocalExtents() );
+    }
+
     // Call parent.
     // Call parent.
     Parent::preIntegrate( totalTime, elapsedTime, pDebugStats );
     Parent::preIntegrate( totalTime, elapsedTime, pDebugStats );
 }
 }
@@ -95,8 +106,13 @@ void WaveComposite::integrateObject( const F32 totalTime, const F32 elapsedTime,
     // Call Parent.
     // Call Parent.
     Parent::integrateObject( totalTime, elapsedTime, pDebugStats );
     Parent::integrateObject( totalTime, elapsedTime, pDebugStats );
 
 
-}
+    // Finish if the spatials are NOT dirty.
+    if ( !getSpatialDirty() )
+        return;
 
 
+    // Update the batch world transform.
+    setBatchTransform( getRenderTransform() );
+}
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
 void WaveComposite::interpolateObject( const F32 timeDelta )
 void WaveComposite::interpolateObject( const F32 timeDelta )
@@ -106,6 +122,13 @@ void WaveComposite::interpolateObject( const F32 timeDelta )
 
 
     // Update composition time (interpolated).
     // Update composition time (interpolated).
     updateComposition( (timeDelta * mPreTickTime) + ((1.0f-timeDelta) * mPostTickTime) );
     updateComposition( (timeDelta * mPreTickTime) + ((1.0f-timeDelta) * mPostTickTime) );
+
+    // Finish if the spatials are NOT dirty.
+    if ( !getSpatialDirty() )
+        return;
+
+    // Update the batch world transform.
+    setBatchTransform( getRenderTransform() );
 }
 }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -131,6 +154,22 @@ void WaveComposite::copyTo(SimObject* object)
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
+void WaveComposite::scenePrepareRender( const SceneRenderState* pSceneRenderState, SceneRenderQueue* pSceneRenderQueue )
+{
+    // Prepare render.
+    SpriteBatch::prepareRender( this, pSceneRenderState, pSceneRenderQueue );
+}
+
+//-----------------------------------------------------------------------------
+
+void WaveComposite::sceneRender( const SceneRenderState* pSceneRenderState, const SceneRenderRequest* pSceneRenderRequest, BatchRender* pBatchRenderer )
+{
+    // Render.
+    SpriteBatch::render( pSceneRenderState, pSceneRenderRequest, pBatchRenderer );
+}
+
+//-----------------------------------------------------------------------------
+
 bool WaveComposite::setImage( const char* pImageAssetId )
 bool WaveComposite::setImage( const char* pImageAssetId )
 {
 {
     // Sanity!
     // Sanity!

+ 8 - 3
engine/source/2d/experimental/composites/WaveComposite.h

@@ -29,10 +29,10 @@
 
 
 //------------------------------------------------------------------------------  
 //------------------------------------------------------------------------------  
 
 
-class WaveComposite : public CompositeSprite
+class WaveComposite : public SceneObject, public SpriteBatch
 {
 {
 protected:
 protected:
-    typedef CompositeSprite Parent;
+    typedef SceneObject Parent;
 
 
 private:
 private:
     AssetPtr<ImageAsset>        mImageAsset;
     AssetPtr<ImageAsset>        mImageAsset;
@@ -53,13 +53,18 @@ public:
 
 
     static void initPersistFields();
     static void initPersistFields();
 
 
-    virtual bool validRender( void ) const { return mImageAsset.notNull(); }
     virtual void preIntegrate( const F32 totalTime, const F32 elapsedTime, DebugStats* pDebugStats );
     virtual void preIntegrate( const F32 totalTime, const F32 elapsedTime, DebugStats* pDebugStats );
     virtual void integrateObject( const F32 totalTime, const F32 elapsedTime, DebugStats* pDebugStats );
     virtual void integrateObject( const F32 totalTime, const F32 elapsedTime, DebugStats* pDebugStats );
     virtual void interpolateObject( const F32 timeDelta );
     virtual void interpolateObject( const F32 timeDelta );
 
 
     virtual void copyTo( SimObject* object );
     virtual void copyTo( SimObject* object );
 
 
+    virtual bool canPrepareRender( void ) const { return true; }
+    virtual bool validRender( void ) const { return mImageAsset.notNull(); }
+    virtual bool shouldRender( void ) const { return true; }
+    virtual void scenePrepareRender( const SceneRenderState* pSceneRenderState, SceneRenderQueue* pSceneRenderQueue );    
+    virtual void sceneRender( const SceneRenderState* pSceneRenderState, const SceneRenderRequest* pSceneRenderRequest, BatchRender* pBatchRenderer );
+
     bool setImage( const char* pImageAssetId );
     bool setImage( const char* pImageAssetId );
     inline StringTableEntry getImage( void ) const { return mImageAsset.getAssetId(); }
     inline StringTableEntry getImage( void ) const { return mImageAsset.getAssetId(); }
     bool setImageFrame( const U32 frame );
     bool setImageFrame( const U32 frame );

+ 63 - 8
engine/source/2d/scene/Scene.cc

@@ -132,6 +132,7 @@ static StringTableEntry jointTargetDampingRatioName       = jointDistanceDamping
 static StringTableEntry jointMotorNodeName                = StringTable->insert( "Motor" );
 static StringTableEntry jointMotorNodeName                = StringTable->insert( "Motor" );
 static StringTableEntry jointMotorLinearOffsetName        = StringTable->insert( "LinearOffset" );
 static StringTableEntry jointMotorLinearOffsetName        = StringTable->insert( "LinearOffset" );
 static StringTableEntry jointMotorAngularOffsetName       = StringTable->insert( "AngularOffset" );
 static StringTableEntry jointMotorAngularOffsetName       = StringTable->insert( "AngularOffset" );
+
 static StringTableEntry jointMotorMaxForceName            = jointFrictionMaxForceName;
 static StringTableEntry jointMotorMaxForceName            = jointFrictionMaxForceName;
 static StringTableEntry jointMotorMaxTorqueName           = jointRevoluteMotorMaxTorqueName;
 static StringTableEntry jointMotorMaxTorqueName           = jointRevoluteMotorMaxTorqueName;
 static StringTableEntry jointMotorCorrectionFactorName    = StringTable->insert( "CorrectionFactor" );
 static StringTableEntry jointMotorCorrectionFactorName    = StringTable->insert( "CorrectionFactor" );
@@ -566,8 +567,8 @@ void Scene::dispatchBeginContactCallbacks( void )
             else
             else
             {
             {
                 // No, so call it on its behaviors.
                 // No, so call it on its behaviors.
-                const char* args[5] = { "onCollision", "", sceneObjectABuffer, sceneObjectBBuffer, miscInfoBuffer };
-                pSceneObjectA->callOnBehaviors( 5, args );
+                const char* args[4] = { "onCollision", "", sceneObjectBBuffer, miscInfoBuffer };
+                pSceneObjectA->callOnBehaviors( 4, args );
             }
             }
         }
         }
 
 
@@ -586,8 +587,8 @@ void Scene::dispatchBeginContactCallbacks( void )
             else
             else
             {
             {
                 // No, so call it on its behaviors.
                 // No, so call it on its behaviors.
-                const char* args[5] = { "onCollision", "", sceneObjectBBuffer, sceneObjectABuffer, miscInfoBuffer };
-                pSceneObjectB->callOnBehaviors( 5, args );
+                const char* args[4] = { "onCollision", "", sceneObjectABuffer, miscInfoBuffer };
+                pSceneObjectB->callOnBehaviors( 4, args );
             }
             }
         }
         }
     }
     }
@@ -678,8 +679,8 @@ void Scene::dispatchEndContactCallbacks( void )
             else
             else
             {
             {
                 // No, so call it on its behaviors.
                 // No, so call it on its behaviors.
-                const char* args[5] = { "onEndCollision", "", sceneObjectABuffer, sceneObjectBBuffer, miscInfoBuffer };
-                pSceneObjectA->callOnBehaviors( 5, args );
+                const char* args[4] = { "onEndCollision", "", sceneObjectBBuffer, miscInfoBuffer };
+                pSceneObjectA->callOnBehaviors( 4, args );
             }
             }
         }
         }
 
 
@@ -698,8 +699,8 @@ void Scene::dispatchEndContactCallbacks( void )
             else
             else
             {
             {
                 // No, so call it on its behaviors.
                 // No, so call it on its behaviors.
-                const char* args[5] = { "onEndCollision", "", sceneObjectBBuffer, sceneObjectABuffer, miscInfoBuffer };
-                pSceneObjectB->callOnBehaviors( 5, args );
+                const char* args[4] = { "onEndCollision", "", sceneObjectABuffer, miscInfoBuffer };
+                pSceneObjectB->callOnBehaviors( 4, args );
             }
             }
         }
         }
     }
     }
@@ -2156,6 +2157,60 @@ bool Scene::getRevoluteJointMotor(
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
+F32 Scene::getRevoluteJointAngle( const U32 jointId )
+{
+    // Fetch joint.
+    b2Joint* pJoint = findJoint( jointId );
+
+    // Ignore invalid joint.
+    if ( !pJoint )
+        return 0.0f;
+
+    // Fetch joint type.
+    const b2JointType jointType = pJoint->GetType();
+
+    if ( jointType != e_revoluteJoint )
+    {
+        Con::warnf( "Invalid joint type of %s.", getJointTypeDescription(jointType) );
+        return 0.0f;
+    }
+
+    // Cast joint.
+    b2RevoluteJoint* pRealJoint = static_cast<b2RevoluteJoint*>( pJoint );
+
+    // Access joint.
+    return pRealJoint->GetJointAngle();
+}
+
+//-----------------------------------------------------------------------------
+
+F32	Scene::getRevoluteJointSpeed( const U32 jointId )
+{
+    // Fetch joint.
+    b2Joint* pJoint = findJoint( jointId );
+
+    // Ignore invalid joint.
+    if ( !pJoint )
+        return 0.0f;
+
+    // Fetch joint type.
+    const b2JointType jointType = pJoint->GetType();
+
+    if ( jointType != e_revoluteJoint )
+    {
+        Con::warnf( "Invalid joint type of %s.", getJointTypeDescription(jointType) );
+        return 0.0f;
+    }
+
+    // Cast joint.
+    b2RevoluteJoint* pRealJoint = static_cast<b2RevoluteJoint*>( pJoint );
+
+    // Access joint.
+    return pRealJoint->GetJointSpeed();
+}
+
+//-----------------------------------------------------------------------------
+
 S32 Scene::createWeldJoint(
 S32 Scene::createWeldJoint(
         const SceneObject* pSceneObjectA, const SceneObject* pSceneObjectB,
         const SceneObject* pSceneObjectA, const SceneObject* pSceneObjectB,
         const b2Vec2& localAnchorA, const b2Vec2& localAnchorB,
         const b2Vec2& localAnchorA, const b2Vec2& localAnchorB,

+ 4 - 0
engine/source/2d/scene/Scene.h

@@ -442,6 +442,10 @@ public:
                                 bool& enableMotor,
                                 bool& enableMotor,
                                 F32& motorSpeed,
                                 F32& motorSpeed,
                                 F32& maxMotorTorque );
                                 F32& maxMotorTorque );
+
+	F32                     getRevoluteJointAngle( const U32 jointId );
+	F32						getRevoluteJointSpeed( const U32 jointId );
+
     /// Weld joint.
     /// Weld joint.
     S32                     createWeldJoint(
     S32                     createWeldJoint(
                                 const SceneObject* pSceneObjectA, const SceneObject* pSceneObjectB,
                                 const SceneObject* pSceneObjectA, const SceneObject* pSceneObjectB,

+ 3 - 3
engine/source/2d/scene/SceneRenderState.h

@@ -46,7 +46,7 @@ struct SceneRenderState
         U32 renderGroupMask,
         U32 renderGroupMask,
         const Vector2& renderScale,
         const Vector2& renderScale,
         DebugStats* pDebugStats,
         DebugStats* pDebugStats,
-        GuiControl* pGuiControl )
+        SimObject* pRenderHost )
     {
     {
         mRenderArea       = renderArea;
         mRenderArea       = renderArea;
         mRenderAABB       = CoreMath::mRectFtoAABB( renderArea );
         mRenderAABB       = CoreMath::mRectFtoAABB( renderArea );
@@ -56,7 +56,7 @@ struct SceneRenderState
         mRenderLayerMask  = renderLayerMask;
         mRenderLayerMask  = renderLayerMask;
         mRenderGroupMask  = renderGroupMask;
         mRenderGroupMask  = renderGroupMask;
         mpDebugStats      = pDebugStats;
         mpDebugStats      = pDebugStats;
-        mpGuiControl      = pGuiControl;
+        mpRenderHost      = pRenderHost;
     }
     }
 
 
     RectF           mRenderArea;
     RectF           mRenderArea;
@@ -67,7 +67,7 @@ struct SceneRenderState
     U32             mRenderGroupMask;
     U32             mRenderGroupMask;
     Vector2         mRenderScale;
     Vector2         mRenderScale;
     DebugStats*     mpDebugStats;
     DebugStats*     mpDebugStats;
-    GuiControl*     mpGuiControl;
+    SimObject*      mpRenderHost;
 
 
 
 
 };
 };

+ 29 - 3
engine/source/2d/scene/Scene_ScriptBinding.h

@@ -965,6 +965,32 @@ ConsoleMethod(Scene, getRevoluteJointMotor, const char*, 3, 3,  "(jointId) Gets
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
+ConsoleMethod(Scene, getRevoluteJointAngle, F32, 3, 3,      "(jointId) Gets the current angle of a revolute joint.\n"
+                                                            "@param jointId The Id of the joint to use.\n"
+                                                            "@return Returns the joint angle." )
+{
+    // Fetch joint Id.
+    const S32 jointId = dAtoi(argv[2]);
+
+    // Access joint.
+	return object->getRevoluteJointAngle( jointId );
+}
+
+//-----------------------------------------------------------------------------
+
+ConsoleMethod(Scene, getRevoluteJointSpeed, F32, 3, 3,  "(jointId) Gets the current speed of a revolute joint.\n"
+                                                        "@param jointId The Id of the joint to use.\n"
+                                                        "@return Returns the joint speed as Angular Velocity" )
+{
+    // Fetch joint Id.
+    const S32 jointId = dAtoi(argv[2]);
+
+    // Access joint.
+	return object->getRevoluteJointSpeed( jointId );
+}
+
+//-----------------------------------------------------------------------------
+
 ConsoleMethod(Scene, createWeldJoint, S32, 4, 11,       "(sceneObjectA, sceneObjectB, [localAnchorA X/Y], [localAnchorB X/Y], [frequency], [dampingRatio], [collideConnected]) Creates a weld joint.\n"
 ConsoleMethod(Scene, createWeldJoint, S32, 4, 11,       "(sceneObjectA, sceneObjectB, [localAnchorA X/Y], [localAnchorB X/Y], [frequency], [dampingRatio], [collideConnected]) Creates a weld joint.\n"
                                                                 "@param sceneObjectA The first scene object to connect to the joint.  Use an empty string to indicate the Scene ground body.\n"
                                                                 "@param sceneObjectA The first scene object to connect to the joint.  Use an empty string to indicate the Scene ground body.\n"
                                                                 "@param sceneObjectB The second scene object to connect to the joint.  Use an empty string to indicate the Scene ground body.\n"
                                                                 "@param sceneObjectB The second scene object to connect to the joint.  Use an empty string to indicate the Scene ground body.\n"
@@ -1937,7 +1963,7 @@ ConsoleMethod(Scene, createTargetJoint, S32, 5, 10,     "(sceneObject, worldTarg
 
 
     if ( argc <= nextArg )
     if ( argc <= nextArg )
     {
     {
-        return object->createTargetJoint( pSceneObject, worldTarget, maxForce, frequency );
+        return object->createTargetJoint( pSceneObject, worldTarget, maxForce, centerOfMass, frequency );
     }
     }
 
 
     // Fetch damping ratio.
     // Fetch damping ratio.
@@ -1945,13 +1971,13 @@ ConsoleMethod(Scene, createTargetJoint, S32, 5, 10,     "(sceneObject, worldTarg
 
 
     if ( argc <= nextArg )
     if ( argc <= nextArg )
     {
     {
-        return object->createTargetJoint( pSceneObject, worldTarget, maxForce, frequency, dampingRatio );
+        return object->createTargetJoint( pSceneObject, worldTarget, maxForce, centerOfMass, frequency, dampingRatio );
     }
     }
 
 
     // Fetch collide connected.
     // Fetch collide connected.
     const bool collideConnected = dAtob(argv[nextArg++]);
     const bool collideConnected = dAtob(argv[nextArg++]);
 
 
-    return object->createTargetJoint( pSceneObject, worldTarget, maxForce, frequency, dampingRatio, collideConnected );
+    return object->createTargetJoint( pSceneObject, worldTarget, maxForce, centerOfMass, frequency, dampingRatio, collideConnected );
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

+ 4 - 4
engine/source/2d/sceneobject/ShapeVector.cc

@@ -374,10 +374,10 @@ void ShapeVector::setPolyPrimitive( const U32 polyVertexCount )
     else if ( polyVertexCount == 4 )
     else if ( polyVertexCount == 4 )
     {
     {
         // Yes, so set Quad.
         // Yes, so set Quad.
-        mPolygonBasisList[0].Set(-1.0f, -1.0f);
-        mPolygonBasisList[1].Set(+1.0f, -1.0f);
-        mPolygonBasisList[2].Set(+1.0f, +1.0f);
-        mPolygonBasisList[3].Set(-1.0f, +1.0f);
+        mPolygonBasisList[0].Set(-0.5f, -0.5f);
+        mPolygonBasisList[1].Set(+0.5f, -0.5f);
+        mPolygonBasisList[2].Set(+0.5f, +0.5f);
+        mPolygonBasisList[3].Set(-0.5f, +0.5f);
     }
     }
     else
     else
     {
     {

+ 0 - 1
engine/source/2d/sceneobject/Sprite.h

@@ -60,7 +60,6 @@ public:
 protected:
 protected:
     static bool writeFlipX( void* obj, StringTableEntry pFieldName )        { return static_cast<Sprite*>(obj)->getFlipX() == true; }
     static bool writeFlipX( void* obj, StringTableEntry pFieldName )        { return static_cast<Sprite*>(obj)->getFlipX() == true; }
     static bool writeFlipY( void* obj, StringTableEntry pFieldName )        { return static_cast<Sprite*>(obj)->getFlipY() == true; }
     static bool writeFlipY( void* obj, StringTableEntry pFieldName )        { return static_cast<Sprite*>(obj)->getFlipY() == true; }
-
 };
 };
 
 
 #endif // _SPRITE_H_
 #endif // _SPRITE_H_

+ 15 - 6
engine/source/assets/assetBase.cc

@@ -44,6 +44,15 @@ IMPLEMENT_CONOBJECT( AssetBase );
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
+StringTableEntry assetNameField = StringTable->insert( "AssetName" );
+StringTableEntry assetDescriptionField = StringTable->insert( "AssetDescription" );
+StringTableEntry assetCategoryField = StringTable->insert( "AssetCategory" );
+StringTableEntry assetInternalField = StringTable->insert( "AssetInternal" );
+StringTableEntry assetPrivateField = StringTable->insert( "AssetPrivate" );
+StringTableEntry assetAutoUnloadField = StringTable->insert( "AssetAutoUnload" );
+
+//-----------------------------------------------------------------------------
+
 AssetBase::AssetBase() :
 AssetBase::AssetBase() :
     mAcquireReferenceCount( 0 ),
     mAcquireReferenceCount( 0 ),
     mpOwningAssetManager( NULL ),
     mpOwningAssetManager( NULL ),
@@ -71,12 +80,12 @@ void AssetBase::initPersistFields()
     Parent::initPersistFields();
     Parent::initPersistFields();
 
 
     // Asset configuration.
     // Asset configuration.
-    addProtectedField( ASSET_BASE_ASSETNAME_FIELD, TypeString, 0, &setAssetName, &getAssetName, &writeAssetName, "The name of the asset.  The is not a unique identification like an asset Id." );
-    addProtectedField( ASSET_BASE_ASSETDESCRIPTION_FIELD, TypeString, 0, &setAssetDescription, &getAssetDescription, &writeAssetDescription, "The simple description of the asset contents." );
-    addProtectedField( ASSET_BASE_CATEGORY_FIELD, TypeString, 0, &setAssetCategory, &getAssetCategory, &writeAssetCategory, "An arbitrary category that can be used to categorized assets." );
-    addProtectedField( ASSET_BASE_AUTOUNLOAD_FIELD, TypeBool, 0, &setAssetAutoUnload, &getAssetAutoUnload, &writeAssetAutoUnload, "Whether the asset is automatically unloaded when an asset is released and has no other acquisitions or not." );
-    addProtectedField( ASSET_BASE_ASSETINTERNAL_FIELD, TypeBool, 0, &setAssetInternal, &getAssetInternal, &writeAssetInternal, "Whether the asset is used internally only or not." );
-    addProtectedField( ASSET_BASE_ASSETPRIVATE_FIELD, TypeBool, 0, &defaultProtectedNotSetFn, &getAssetPrivate, &defaultProtectedNotWriteFn, "Whether the asset is private or not." );
+    addProtectedField( assetNameField, TypeString, 0, &setAssetName, &getAssetName, &writeAssetName, "The name of the asset.  The is not a unique identification like an asset Id." );
+    addProtectedField( assetDescriptionField, TypeString, 0, &setAssetDescription, &getAssetDescription, &writeAssetDescription, "The simple description of the asset contents." );
+    addProtectedField( assetCategoryField, TypeString, 0, &setAssetCategory, &getAssetCategory, &writeAssetCategory, "An arbitrary category that can be used to categorized assets." );
+    addProtectedField( assetInternalField, TypeBool, 0, &setAssetAutoUnload, &getAssetAutoUnload, &writeAssetAutoUnload, "Whether the asset is automatically unloaded when an asset is released and has no other acquisitions or not." );
+    addProtectedField( assetPrivateField, TypeBool, 0, &setAssetInternal, &getAssetInternal, &writeAssetInternal, "Whether the asset is used internally only or not." );
+    addProtectedField( assetAutoUnloadField, TypeBool, 0, &defaultProtectedNotSetFn, &getAssetPrivate, &defaultProtectedNotWriteFn, "Whether the asset is private or not." );
 }
 }
 
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------

+ 13 - 6
engine/source/assets/assetBase.h

@@ -41,12 +41,19 @@ class AssetManager;
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-#define ASSET_BASE_ASSETNAME_FIELD         "AssetName"
-#define ASSET_BASE_ASSETDESCRIPTION_FIELD  "AssetDescription"
-#define ASSET_BASE_CATEGORY_FIELD          "AssetCategory"
-#define ASSET_BASE_ASSETINTERNAL_FIELD     "AssetInternal"
-#define ASSET_BASE_ASSETPRIVATE_FIELD      "AssetPrivate"
-#define ASSET_BASE_AUTOUNLOAD_FIELD        "AssetAutoUnload"
+extern StringTableEntry assetNameField;
+extern StringTableEntry assetDescriptionField;
+extern StringTableEntry assetCategoryField;
+extern StringTableEntry assetInternalField;
+extern StringTableEntry assetPrivateField;
+extern StringTableEntry assetAutoUnloadField;
+
+//#define ASSET_BASE_ASSETNAME_FIELD         "AssetName"
+//#define ASSET_BASE_ASSETDESCRIPTION_FIELD  "AssetDescription"
+//#define ASSET_BASE_ASSETCATEGORY_FIELD     "AssetCategory"
+//#define ASSET_BASE_ASSETINTERNAL_FIELD     "AssetInternal"
+//#define ASSET_BASE_ASSETPRIVATE_FIELD      "AssetPrivate"
+//#define ASSET_BASE_AUTOUNLOAD_FIELD        "AssetAutoUnload"
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 

+ 5 - 0
engine/source/assets/assetFieldTypes.cc

@@ -50,6 +50,11 @@
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
+StringTableEntry assetLooseIdSignature = StringTable->insert( ASSET_ID_SIGNATURE );
+StringTableEntry assetLooseFileSignature = StringTable->insert( ASSET_LOOSEFILE_SIGNATURE );
+
+//-----------------------------------------------------------------------------
+
 ConsoleType( assetLooseFilePath, TypeAssetLooseFilePath, sizeof(StringTableEntry), ASSET_LOOSE_FILE_FIELD_PREFIX )
 ConsoleType( assetLooseFilePath, TypeAssetLooseFilePath, sizeof(StringTableEntry), ASSET_LOOSE_FILE_FIELD_PREFIX )
 ConsoleType( assetIdString, TypeAssetId, sizeof(StringTableEntry), ASSET_ID_FIELD_PREFIX )
 ConsoleType( assetIdString, TypeAssetId, sizeof(StringTableEntry), ASSET_ID_FIELD_PREFIX )
 
 

+ 5 - 0
engine/source/assets/assetFieldTypes.h

@@ -48,4 +48,9 @@ DefineConsoleType( TypeAssetLooseFilePath )
 #define ASSET_LOOSEFILE_SIGNATURE       "@assetFile"
 #define ASSET_LOOSEFILE_SIGNATURE       "@assetFile"
 #define ASSET_LOOSE_FILE_FIELD_PREFIX   "@assetFile="
 #define ASSET_LOOSE_FILE_FIELD_PREFIX   "@assetFile="
 
 
+//-----------------------------------------------------------------------------
+
+extern StringTableEntry assetLooseIdSignature;
+extern StringTableEntry assetLooseFileSignature;
+
 #endif // _ASSET_FIELD_TYPES_H_
 #endif // _ASSET_FIELD_TYPES_H_

+ 6 - 6
engine/source/assets/assetManager.cc

@@ -795,7 +795,7 @@ bool AssetManager::renameDeclaredAsset( const char* pAssetIdFrom, const char* pA
     assetDeclaredUpdateVisitor.setAssetIdTo( assetIdTo );
     assetDeclaredUpdateVisitor.setAssetIdTo( assetIdTo );
 
 
     // Update asset file declaration.
     // Update asset file declaration.
-    if ( !assetDeclaredUpdateVisitor.parse( pAssetDefinition->mAssetBaseFilePath ) )
+    if ( !mTaml.parse( pAssetDefinition->mAssetBaseFilePath, assetDeclaredUpdateVisitor ) )
     {
     {
         // No, so warn.
         // No, so warn.
         Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the declared asset file could not be parsed: %s",
         Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the declared asset file could not be parsed: %s",
@@ -1192,7 +1192,7 @@ bool AssetManager::refreshAsset( const char* pAssetId )
             TamlAssetDeclaredVisitor assetDeclaredVisitor;
             TamlAssetDeclaredVisitor assetDeclaredVisitor;
 
 
             // Parse the filename.
             // Parse the filename.
-            if ( !assetDeclaredVisitor.parse( pAssetDefinition->mAssetBaseFilePath ) )
+            if ( !mTaml.parse( pAssetDefinition->mAssetBaseFilePath, assetDeclaredVisitor ) )
             {
             {
                 // Warn.
                 // Warn.
                 Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.\nDependencies are now incorrect!", pAssetDefinition->mAssetBaseFilePath );
                 Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.\nDependencies are now incorrect!", pAssetDefinition->mAssetBaseFilePath );
@@ -2381,7 +2381,7 @@ bool AssetManager::scanDeclaredAssets( const char* pPath, const char* pExtension
         dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", fileInfo.pFullPath, fileInfo.pFileName );
         dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", fileInfo.pFullPath, fileInfo.pFileName );
 
 
         // Parse the filename.
         // Parse the filename.
-        if ( !assetDeclaredVisitor.parse( assetFileBuffer ) )
+        if ( !mTaml.parse( assetFileBuffer, assetDeclaredVisitor ) )
         {
         {
             // Warn.
             // Warn.
             Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.", assetFileBuffer );
             Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.", assetFileBuffer );
@@ -2575,7 +2575,7 @@ bool AssetManager::scanReferencedAssets( const char* pPath, const char* pExtensi
         typeReferenceFilePath referenceFilePath = StringTable->insert( assetFileBuffer );
         typeReferenceFilePath referenceFilePath = StringTable->insert( assetFileBuffer );
 
 
         // Parse the filename.
         // Parse the filename.
-        if ( !assetReferencedVisitor.parse( referenceFilePath ) )
+        if ( !mTaml.parse( referenceFilePath, assetReferencedVisitor ) )
         {
         {
             // Warn.
             // Warn.
             Con::warnf( "Asset Manager: Failed to parse file containing asset references: '%s'.", referenceFilePath );
             Con::warnf( "Asset Manager: Failed to parse file containing asset references: '%s'.", referenceFilePath );
@@ -2730,7 +2730,7 @@ void AssetManager::renameAssetReferences( StringTableEntry assetIdFrom, StringTa
         }
         }
 
 
         // Update asset file declaration.
         // Update asset file declaration.
-        if ( !assetReferencedUpdateVisitor.parse( referencedAssetItr->value ) )
+        if ( !mTaml.parse( referencedAssetItr->value, assetReferencedUpdateVisitor ) )
         {
         {
             // No, so warn.
             // No, so warn.
             Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as the referenced asset file could not be parsed: %s",
             Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as the referenced asset file could not be parsed: %s",
@@ -2780,7 +2780,7 @@ void AssetManager::removeAssetReferences( StringTableEntry assetId )
         }
         }
 
 
         // Update asset file declaration.
         // Update asset file declaration.
-        if ( !assetReferencedUpdateVisitor.parse( referencedAssetItr->value ) )
+        if ( !mTaml.parse( referencedAssetItr->value, assetReferencedUpdateVisitor ) )
         {
         {
             // No, so warn.
             // No, so warn.
             Con::warnf("Asset Manager: Cannot remove referenced asset Id '%s' as the referenced asset file could not be parsed: %s",
             Con::warnf("Asset Manager: Cannot remove referenced asset Id '%s' as the referenced asset file could not be parsed: %s",

+ 39 - 65
engine/source/assets/tamlAssetDeclaredUpdateVisitor.h

@@ -23,16 +23,12 @@
 #ifndef _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_
 #ifndef _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_
 #define _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_
 #define _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_
 
 
-#ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#ifndef _TAML_VISITOR_H_
+#include "persistence/taml/tamlVisitor.h"
 #endif
 #endif
 
 
-#ifndef _STRINGUNIT_H_
-#include "string/stringUnit.h"
-#endif
-
-#ifndef _STRINGTABLE_H_
-#include "string/stringTable.h"
+#ifndef _TAML_PARSER_H_
+#include "persistence\/taml/tamlParser.h"
 #endif
 #endif
 
 
 #ifndef _ASSET_FIELD_TYPES_H_
 #ifndef _ASSET_FIELD_TYPES_H_
@@ -44,64 +40,18 @@
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-class TamlAssetDeclaredUpdateVisitor : public TamlXmlVisitor
+class TamlAssetDeclaredUpdateVisitor : public TamlVisitor
 {
 {
-protected:
-    virtual bool visit( TiXmlElement* pXmlElement, TamlXmlParser& xmlParser )
-    {
-        // Debug Profiling.
-        PROFILE_SCOPE(TamlAssetDeclaredUpdateVisitor_VisitElement);
-
-        // Finish if this is not the root element.
-        if ( pXmlElement != pXmlElement->GetDocument()->RootElement() )
-            return true;
-
-        // Fetch asset field names.
-        StringTableEntry assetNameField = StringTable->insert( ASSET_BASE_ASSETNAME_FIELD );
-
-        // Iterate attributes.
-        for ( TiXmlAttribute* pAttribute = pXmlElement->FirstAttribute(); pAttribute; pAttribute = pAttribute->Next() )
-        {
-            // Insert attribute name.
-            StringTableEntry attributeName = StringTable->insert( pAttribute->Name() );
-
-            // Asset name?
-            if ( attributeName != assetNameField )
-                continue;
-
-            // Is this the asset Id we're looking for?
-            if ( dStricmp( pAttribute->Value(), mAssetNameFrom ) != 0 )
-            {
-                // No, so warn.
-                Con::warnf("Cannot rename asset Name '%s' to asset Name '%s' as the declared asset Name was %s",
-                    mAssetNameFrom, mAssetNameTo, pAttribute->Value() );
-
-                // Stop processing!
-                return false;
-            }
-
-            // Assign new value.
-            pAttribute->SetValue( mAssetNameTo );
-
-            // Stop processing!
-            return false;
-        }
-
-        return true;
-    }
-
-    virtual bool visit( TiXmlAttribute* pAttribute, TamlXmlParser& xmlParser ) { return true; }
+private:    
+    StringTableEntry mAssetIdFrom;
+    StringTableEntry mAssetIdTo;
+    StringTableEntry mAssetNameFrom;
+    StringTableEntry mAssetNameTo;
 
 
 public:
 public:
     TamlAssetDeclaredUpdateVisitor() {}
     TamlAssetDeclaredUpdateVisitor() {}
     virtual ~TamlAssetDeclaredUpdateVisitor() {}
     virtual ~TamlAssetDeclaredUpdateVisitor() {}
 
 
-    bool parse( const char* pFilename )
-    {
-        TamlXmlParser parser;
-        return parser.parse( pFilename, *this, true );
-    }
-
     void setAssetIdFrom( const char* pAssetIdFrom )
     void setAssetIdFrom( const char* pAssetIdFrom )
     {
     {
         // Sanity!
         // Sanity!
@@ -148,11 +98,35 @@ public:
     }
     }
     const char* getAssetIdTo( void ) const { return mAssetIdTo; }
     const char* getAssetIdTo( void ) const { return mAssetIdTo; }
 
 
-private:    
-    StringTableEntry mAssetIdFrom;
-    StringTableEntry mAssetIdTo;
-    StringTableEntry mAssetNameFrom;
-    StringTableEntry mAssetNameTo;
+    virtual bool wantsPropertyChanges( void ) { return true; }
+    virtual bool wantsRootOnly( void ) { return true; }
+
+    virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState )
+    {
+        // Debug Profiling.
+        PROFILE_SCOPE(TamlAssetDeclaredUpdateVisitor_Visit);
+
+        // Finish if not the asset name field.
+        if ( propertyState.getPropertyName() != assetNameField )
+            return true;
+
+        // Is this the asset Id we're looking for?
+        if ( dStricmp( propertyState.getPropertyValue(), mAssetNameFrom ) != 0 )
+        {
+            // No, so warn.
+            Con::warnf("Cannot rename asset Name '%s' to asset Name '%s' as the declared asset Name was %s",
+                mAssetNameFrom, mAssetNameTo, propertyState.getPropertyValue() );
+
+            // Stop processing!
+            return false;
+        }
+
+        // Assign new value.
+        propertyState.updatePropertyValue( mAssetNameTo );
+
+        // Stop processing!
+        return false;
+    }
 };
 };
 
 
 #endif // _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_
 #endif // _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_

+ 78 - 130
engine/source/assets/tamlAssetDeclaredVisitor.h

@@ -23,8 +23,12 @@
 #ifndef _TAML_ASSET_DECLARED_VISITOR_H_
 #ifndef _TAML_ASSET_DECLARED_VISITOR_H_
 #define _TAML_ASSET_DECLARED_VISITOR_H_
 #define _TAML_ASSET_DECLARED_VISITOR_H_
 
 
-#ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#ifndef _TAML_VISITOR_H_
+#include "persistence/taml/tamlVisitor.h"
+#endif
+
+#ifndef _TAML_PARSER_H_
+#include "persistence\/taml/tamlParser.h"
 #endif
 #endif
 
 
 #ifndef _ASSET_FIELD_TYPES_H_
 #ifndef _ASSET_FIELD_TYPES_H_
@@ -44,113 +48,104 @@
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-class TamlAssetDeclaredVisitor : public TamlXmlVisitor
+class TamlAssetDeclaredVisitor : public TamlVisitor
 {
 {
-protected:
-    virtual bool visit( TiXmlElement* pXmlElement, TamlXmlParser& xmlParser )
-    {
-        // Debug Profiling.
-        PROFILE_SCOPE(TamlAssetDeclaredVisitor_VisitElement);
+public:
+    typedef StringTableEntry typeAssetId;
+    typedef Vector<typeAssetId> typeAssetIdVector;
+    typedef Vector<StringTableEntry> typeLooseFileVector;
 
 
-        // Finish if this is not the root element.
-        if ( pXmlElement != pXmlElement->GetDocument()->RootElement() )
-            return true;
+private:
+    AssetDefinition         mAssetDefinition;
+    typeAssetIdVector       mAssetDependencies;
+    typeLooseFileVector     mAssetLooseFiles;
+
+public:
+    TamlAssetDeclaredVisitor() { mAssetDefinition.reset(); }
+    virtual ~TamlAssetDeclaredVisitor() {}
+
+
+    inline AssetDefinition& getAssetDefinition( void ) { return mAssetDefinition; }
+    inline typeAssetIdVector& getAssetDependencies( void ) { return mAssetDependencies; }
+    inline typeLooseFileVector& getAssetLooseFiles( void ) { return mAssetLooseFiles; }
+
+    void clear( void ) { mAssetDefinition.reset(); mAssetDependencies.clear(); mAssetLooseFiles.clear(); }
+
+    virtual bool wantsPropertyChanges( void ) { return false; }
+    virtual bool wantsRootOnly( void ) { return false; }
 
 
-        // Fetch asset field names.
-        StringTableEntry assetNameField = StringTable->insert( ASSET_BASE_ASSETNAME_FIELD );
-        StringTableEntry assetDescriptionField = StringTable->insert( ASSET_BASE_ASSETDESCRIPTION_FIELD );
-        StringTableEntry assetCategoryField = StringTable->insert( ASSET_BASE_CATEGORY_FIELD );
-        StringTableEntry assetAutoUnloadField = StringTable->insert( ASSET_BASE_AUTOUNLOAD_FIELD );
-        StringTableEntry assetInternalField = StringTable->insert( ASSET_BASE_ASSETINTERNAL_FIELD );
+    virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState )
+    {    
+        // Debug Profiling.
+        PROFILE_SCOPE(TamlAssetDeclaredVisitor_Visit);
+
+        // Fetch property name and value.
+        StringTableEntry propertyName = propertyState.getPropertyName();
+        const char* pPropertyValue = propertyState.getPropertyValue();
 
 
-        // Iterate attributes.
-        for ( TiXmlAttribute* pAttribute = pXmlElement->FirstAttribute(); pAttribute; pAttribute = pAttribute->Next() )
+        // Is this the root object?
+        if ( propertyState.isRootObject() )
         {
         {
-            // Insert attribute name.
-            StringTableEntry attributeName = StringTable->insert( pAttribute->Name() );
+            // Yes, so is the asset type set yet?
+            if ( mAssetDefinition.mAssetType == StringTable->EmptyString )
+            {
+                // No, set set asset type and base file-path.
+                mAssetDefinition.mAssetType = propertyState.getObjectName();
+                mAssetDefinition.mAssetBaseFilePath = parser.getParsingFilename();
+            }
 
 
             // Asset name?
             // Asset name?
-            if ( attributeName == assetNameField )
+            if ( propertyName == assetNameField )
             {
             {
                 // Yes, so assign it.
                 // Yes, so assign it.
-                mAssetDefinition.mAssetName = StringTable->insert( pAttribute->Value() );
-                continue;
+                mAssetDefinition.mAssetName = StringTable->insert( pPropertyValue );
+                return true;
             }
             }
             // Asset description?
             // Asset description?
-            else if ( attributeName == assetDescriptionField )
+            else if ( propertyName == assetDescriptionField )
             {
             {
                 // Yes, so assign it.
                 // Yes, so assign it.
-                mAssetDefinition.mAssetDescription = StringTable->insert( pAttribute->Value() );
-                continue;
+                mAssetDefinition.mAssetDescription = StringTable->insert( pPropertyValue );
+                return true;
             }
             }
             // Asset description?
             // Asset description?
-            else if ( attributeName == assetCategoryField )
+            else if ( propertyName == assetCategoryField )
             {
             {
                 // Yes, so assign it.
                 // Yes, so assign it.
-                mAssetDefinition.mAssetCategory = StringTable->insert( pAttribute->Value() );
-                continue;
+                mAssetDefinition.mAssetCategory = StringTable->insert( pPropertyValue );
+                return true;
             }
             }
             // Asset auto-unload?
             // Asset auto-unload?
-            else if ( attributeName == assetAutoUnloadField )
+            else if ( propertyName == assetAutoUnloadField )
             {
             {
                 // Yes, so assign it.
                 // Yes, so assign it.
-                mAssetDefinition.mAssetAutoUnload = dAtob( pAttribute->Value() );
-                continue;
+                mAssetDefinition.mAssetAutoUnload = dAtob( pPropertyValue );
+                return true;
             }
             }
             // Asset internal?
             // Asset internal?
-            else if ( attributeName == assetInternalField )
+            else if ( propertyName == assetInternalField )
             {
             {
                 // Yes, so assign it.
                 // Yes, so assign it.
-                mAssetDefinition.mAssetInternal = dAtob( pAttribute->Value() );
-                continue;
+                mAssetDefinition.mAssetInternal = dAtob( pPropertyValue );
+                return true;
             }
             }
         }
         }
 
 
-        // Did we get an asset name?
-        if ( mAssetDefinition.mAssetName == StringTable->EmptyString )
-        {
-            // No, so reset everything.
-            clear();
-
-            // Stop processing!
-            return false;
-        }
-
-        // Set asset file-path.
-        mAssetDefinition.mAssetBaseFilePath = StringTable->insert( xmlParser.getParsingFilename() );
-
-        // Set asset type.
-        mAssetDefinition.mAssetType = StringTable->insert( pXmlElement->Value() );
+        // Fetch property word count.
+        const U32 propertyWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN );
 
 
-        return true;
-    }
-
-    virtual bool visit( TiXmlAttribute* pAttribute, TamlXmlParser& xmlParser )
-    {
-        // Debug Profiling.
-        PROFILE_SCOPE(TamlAssetDeclaredVisitor_VisitAttribute);
-
-        // Sanity!
-        AssertFatal( mAssetDefinition.mAssetName != StringTable->EmptyString, "Cannot generate asset dependencies without asset name." );
-
-        // Fetch asset reference.
-        const char* pAssetReference = pAttribute->Value();
-
-        // Fetch field word count.
-        const U32 fieldWordCount = StringUnit::getUnitCount( pAssetReference, ASSET_ASSIGNMENT_TOKEN );
-
-        // Finish if there are not two words.
-        if ( fieldWordCount != 2 )
+        // Finish if there's not two words.
+        if ( propertyWordCount != 2 )
             return true;
             return true;
 
 
         // Fetch the asset signature.
         // Fetch the asset signature.
-        StringTableEntry assetSignature = StringTable->insert( StringUnit::getUnit( pAssetReference, 0, ASSET_ASSIGNMENT_TOKEN ) );
+        StringTableEntry assetSignature = StringTable->insert( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN ) );
 
 
         // Is this an asset Id signature?
         // Is this an asset Id signature?
-        if ( assetSignature == StringTable->insert(ASSET_ID_SIGNATURE) )
+        if ( assetSignature == assetLooseIdSignature )
         {
         {
             // Yes, so get asset Id.
             // Yes, so get asset Id.
-            typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pAssetReference, 1, ASSET_ASSIGNMENT_TOKEN ) );
+            typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ) );
 
 
             // Finish if the dependency is itself!
             // Finish if the dependency is itself!
             if ( mAssetDefinition.mAssetId == assetId )
             if ( mAssetDefinition.mAssetId == assetId )
@@ -168,42 +163,20 @@ protected:
             mAssetDependencies.push_back( assetId );
             mAssetDependencies.push_back( assetId );
         }
         }
         // Is this a loose-file signature?
         // Is this a loose-file signature?
-        else if ( assetSignature == StringTable->insert(ASSET_LOOSEFILE_SIGNATURE) )
+        else if ( assetSignature == assetLooseFileSignature )
         {
         {
             // Yes, so get loose-file reference.
             // Yes, so get loose-file reference.
-            const char* pAssetLooseFile = StringUnit::getUnit( pAssetReference, 1, ASSET_ASSIGNMENT_TOKEN );
+            const char* pAssetLooseFile = StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN );
 
 
-            char assetFilePathBuffer[1024];
+            // Fetch asset path only.
+            char assetBasePathBuffer[1024];
+            dSprintf( assetBasePathBuffer, sizeof(assetBasePathBuffer), "%s", mAssetDefinition.mAssetBaseFilePath );
+            char* pFinalSlash = dStrrchr( assetBasePathBuffer, '/' );
+            if ( pFinalSlash != NULL ) *pFinalSlash = 0;
 
 
-            // Is the asset loose-file expando specified?
-            if ( *pAssetLooseFile == '#' )
-            {
-                // Yes, so fetch relative path.
-                char parsingFileBuffer[1024];
-                dStrcpy( parsingFileBuffer, xmlParser.getParsingFilename() );
-                
-                // Find the final slash.
-                char* pLastSlash = dStrrchr( parsingFileBuffer, '/' );
-
-                // Is this the last slash?
-                if ( pLastSlash == NULL )
-                {
-                    // No, so warn.
-                    Con::warnf( "Failed to parse the loose-file path '%s' in asset file '%s'.", pAssetLooseFile, parsingFileBuffer );
-                    return true;
-                }
-
-                // Remove parsing file.
-                *pLastSlash = 0;
-
-                // Format expanded path taking into account any missing slash.
-                dSprintf( assetFilePathBuffer, sizeof(assetFilePathBuffer), "%s/%s", parsingFileBuffer, pAssetLooseFile + (pAssetLooseFile[1] == '/' ? 2 : 1 ) );               
-            }
-            else
-            {
-                // No, so expand the path in the usual way.
-                Con::expandPath( assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetLooseFile );
-            }
+            // Expand the path in the usual way.
+            char assetFilePathBuffer[1024];
+            Con::expandPath( assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetLooseFile, assetBasePathBuffer );
 
 
             // Insert asset loose-file.
             // Insert asset loose-file.
             mAssetLooseFiles.push_back( StringTable->insert( assetFilePathBuffer ) );
             mAssetLooseFiles.push_back( StringTable->insert( assetFilePathBuffer ) );
@@ -211,31 +184,6 @@ protected:
 
 
         return true;
         return true;
     }
     }
-
-public:
-    TamlAssetDeclaredVisitor() { mAssetDefinition.reset(); }
-    virtual ~TamlAssetDeclaredVisitor() {}
-
-    bool parse( const char* pFilename )
-    {
-        TamlXmlParser parser;
-        return parser.parse( pFilename, *this, false );
-    }
-
-    typedef StringTableEntry typeAssetId;
-    typedef Vector<typeAssetId> typeAssetIdVector;
-    typedef Vector<StringTableEntry> typeLooseFileVector;
-
-    inline AssetDefinition& getAssetDefinition( void ) { return mAssetDefinition; }
-    inline typeAssetIdVector& getAssetDependencies( void ) { return mAssetDependencies; }
-    inline typeLooseFileVector& getAssetLooseFiles( void ) { return mAssetLooseFiles; }
-
-    void clear( void ) { mAssetDefinition.reset(); mAssetDependencies.clear(); mAssetLooseFiles.clear(); }
-
-private:
-    AssetDefinition         mAssetDefinition;
-    typeAssetIdVector       mAssetDependencies;
-    typeLooseFileVector     mAssetLooseFiles;
 };
 };
 
 
 #endif // _TAML_ASSET_DECLARED_VISITOR_H_
 #endif // _TAML_ASSET_DECLARED_VISITOR_H_

+ 48 - 50
engine/source/assets/tamlAssetReferencedUpdateVisitor.h

@@ -23,8 +23,12 @@
 #ifndef _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 #ifndef _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 #define _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 #define _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 
 
-#ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#ifndef _TAML_VISITOR_H_
+#include "persistence/taml/tamlVisitor.h"
+#endif
+
+#ifndef _TAML_PARSER_H_
+#include "persistence\/taml/tamlParser.h"
 #endif
 #endif
 
 
 #ifndef _STRINGUNIT_H_
 #ifndef _STRINGUNIT_H_
@@ -44,32 +48,58 @@
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-class TamlAssetReferencedUpdateVisitor : public TamlXmlVisitor
+class TamlAssetReferencedUpdateVisitor : public TamlVisitor
 {
 {
-protected:
-    virtual bool visit( TiXmlElement* pXmlElement, TamlXmlParser& xmlParser ) { return true; }
+private:    
+    StringTableEntry mAssetIdFrom;
+    StringTableEntry mAssetIdTo;
 
 
-    virtual bool visit( TiXmlAttribute* pAttribute, TamlXmlParser& xmlParser )
+public:
+    TamlAssetReferencedUpdateVisitor() {}
+    virtual ~TamlAssetReferencedUpdateVisitor() {}
+
+    void setAssetIdFrom( const char* pAssetIdFrom )
+    {
+        // Sanity!
+        AssertFatal( pAssetIdFrom != NULL, "Asset Id from cannot be NULL." );
+
+        mAssetIdFrom = StringTable->insert( pAssetIdFrom );
+    }
+    StringTableEntry getAssetIdFrom( void ) const { return mAssetIdFrom; }
+
+    void setAssetIdTo( const char* pAssetIdTo )
+    {
+        // Sanity!
+        AssertFatal( pAssetIdTo != NULL, "Asset Id to cannot be NULL." );
+
+        mAssetIdTo = StringTable->insert( pAssetIdTo );
+    }
+    const char* getAssetIdTo( void ) const { return mAssetIdTo; }
+
+    virtual bool wantsPropertyChanges( void ) { return true; }
+    virtual bool wantsRootOnly( void ) { return false; }
+
+    virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState )
     {
     {
         // Debug Profiling.
         // Debug Profiling.
-        PROFILE_SCOPE(TamlAssetReferencedUpdateVisitor_VisitAttribute);
+        PROFILE_SCOPE(TamlAssetReferencedUpdateVisitor_Visit);
 
 
-        // Fetch attribute value.
-        const char* pAttributeValue = pAttribute->Value();
+        // Fetch the property value.
+        const char* pPropertyValue = propertyState.getPropertyValue();
 
 
-        // Fetch attribute value word count.
-        const U32 valueWordCount = StringUnit::getUnitCount( pAttributeValue, ASSET_ASSIGNMENT_TOKEN );
+        // Fetch property value word count.
+        const U32 valueWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN );
 
 
         // Finish if not two words.
         // Finish if not two words.
         if ( valueWordCount != 2 )
         if ( valueWordCount != 2 )
             return true;
             return true;
 
 
-        // Skip if this is not an asset signature.
-        if ( dStricmp( StringUnit::getUnit( pAttributeValue, 0, ASSET_ASSIGNMENT_TOKEN), ASSET_ID_SIGNATURE ) != 0 )
+        // Finish if this is not an asset signature.
+        if ( dStricmp( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN), assetLooseIdSignature ) != 0 )
             return true;
             return true;
 
 
         // Get the asset value.
         // Get the asset value.
-        const char* pAssetValue = StringUnit::getUnit( pAttributeValue, 1, ASSET_ASSIGNMENT_TOKEN );
+        const char* pAssetValue = StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN );
 
 
         // Finish if not the asset Id we're looking for.
         // Finish if not the asset Id we're looking for.
         if ( dStricmp( pAssetValue, mAssetIdFrom ) != 0 )
         if ( dStricmp( pAssetValue, mAssetIdFrom ) != 0 )
@@ -78,52 +108,20 @@ protected:
         // Is the target asset empty?
         // Is the target asset empty?
         if ( mAssetIdTo == StringTable->EmptyString )
         if ( mAssetIdTo == StringTable->EmptyString )
         {
         {
-            // Yes, so set the attribute as empty.
-            pAttribute->SetValue( StringTable->EmptyString );
+            // Yes, so update the property as empty.
+            propertyState.updatePropertyValue( StringTable->EmptyString );
             return true;
             return true;
         }
         }
 
 
         // Format asset.
         // Format asset.
         char assetBuffer[1024];
         char assetBuffer[1024];
-        dSprintf( assetBuffer, sizeof(assetBuffer), "%s%s%s", ASSET_ID_SIGNATURE, ASSET_ASSIGNMENT_TOKEN, mAssetIdTo );
+        dSprintf( assetBuffer, sizeof(assetBuffer), "%s%s%s", assetLooseIdSignature, ASSET_ASSIGNMENT_TOKEN, mAssetIdTo );
 
 
         // Assign new value.
         // Assign new value.
-        pAttribute->SetValue( assetBuffer );
+        propertyState.updatePropertyValue( assetBuffer );
 
 
         return true;
         return true;
     }
     }
-
-public:
-    TamlAssetReferencedUpdateVisitor() {}
-    virtual ~TamlAssetReferencedUpdateVisitor() {}
-
-    bool parse( const char* pFilename )
-    {
-        TamlXmlParser parser;
-        return parser.parse( pFilename, *this, true );
-    }
-
-    void setAssetIdFrom( const char* pAssetIdFrom )
-    {
-        // Sanity!
-        AssertFatal( pAssetIdFrom != NULL, "Asset Id from cannot be NULL." );
-
-        mAssetIdFrom = StringTable->insert( pAssetIdFrom );
-    }
-    StringTableEntry getAssetIdFrom( void ) const { return mAssetIdFrom; }
-
-    void setAssetIdTo( const char* pAssetIdTo )
-    {
-        // Sanity!
-        AssertFatal( pAssetIdTo != NULL, "Asset Id to cannot be NULL." );
-
-        mAssetIdTo = StringTable->insert( pAssetIdTo );
-    }
-    const char* getAssetIdTo( void ) const { return mAssetIdTo; }
-
-private:    
-    StringTableEntry mAssetIdFrom;
-    StringTableEntry mAssetIdTo;
 };
 };
 
 
 #endif // _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_
 #endif // _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_

+ 35 - 36
engine/source/assets/tamlAssetReferencedVisitor.h

@@ -23,8 +23,12 @@
 #ifndef _TAML_ASSET_REFERENCED_VISITOR_H_
 #ifndef _TAML_ASSET_REFERENCED_VISITOR_H_
 #define _TAML_ASSET_REFERENCED_VISITOR_H_
 #define _TAML_ASSET_REFERENCED_VISITOR_H_
 
 
-#ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#ifndef _TAML_VISITOR_H_
+#include "persistence/taml/tamlVisitor.h"
+#endif
+
+#ifndef _TAML_PARSER_H_
+#include "persistence/taml/tamlParser.h"
 #endif
 #endif
 
 
 #ifndef _ASSET_FIELD_TYPES_H_
 #ifndef _ASSET_FIELD_TYPES_H_
@@ -36,32 +40,47 @@
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-class TamlAssetReferencedVisitor : public TamlXmlVisitor
+class TamlAssetReferencedVisitor : public TamlVisitor
 {
 {
-protected:
-    virtual bool visit( TiXmlElement* pXmlElement, TamlXmlParser& xmlParser ) { return true; }
+public:
+    typedef StringTableEntry typeAssetId;
+    typedef HashMap<typeAssetId, StringTableEntry> typeAssetReferencedHash;
+
+private:
+    typeAssetReferencedHash mAssetReferenced;
+
+public:
+    TamlAssetReferencedVisitor() {}
+    virtual ~TamlAssetReferencedVisitor() {}
+
+    const typeAssetReferencedHash& getAssetReferencedMap( void ) const { return mAssetReferenced; }
+
+    void clear( void ) { mAssetReferenced.clear(); }
+
+    virtual bool wantsPropertyChanges( void ) { return false; }
+    virtual bool wantsRootOnly( void ) { return false; }
 
 
-    virtual bool visit( TiXmlAttribute* pAttribute, TamlXmlParser& xmlParser )
-    {
+    virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState )
+    {    
         // Debug Profiling.
         // Debug Profiling.
-        PROFILE_SCOPE(TamlAssetReferencedVisitor_VisitAttribute);
+        PROFILE_SCOPE(TamlAssetReferencedVisitor_Visit);
 
 
-        // Fetch asset reference.
-        const char* pAssetReference = pAttribute->Value();
+        // Fetch property value.
+        const char* pPropertyValue = propertyState.getPropertyValue();
 
 
-        // Fetch field word count.
-        const U32 fieldWordCount = StringUnit::getUnitCount( pAssetReference, ASSET_ASSIGNMENT_TOKEN );
+        // Fetch property word count.
+        const U32 propertyWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN );
 
 
-        // Finish if there are not two words.
-        if ( fieldWordCount != 2 )
+        // Finish if there's not two words.
+        if ( propertyWordCount != 2 )
             return true;
             return true;
 
 
         // Finish if the first word is not an asset signature.
         // Finish if the first word is not an asset signature.
-        if ( StringTable->insert( StringUnit::getUnit( pAssetReference, 0, ASSET_ASSIGNMENT_TOKEN ) ) != StringTable->insert(ASSET_ID_SIGNATURE) )
+        if ( StringTable->insert( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN ) ) != assetLooseIdSignature )
             return true;
             return true;
 
 
         // Get asset Id.
         // Get asset Id.
-        typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pAssetReference, 1, ASSET_ASSIGNMENT_TOKEN ) );
+        typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ) );
 
 
         // Finish if we already have this asset Id.
         // Finish if we already have this asset Id.
         if ( mAssetReferenced.contains( assetId ) )
         if ( mAssetReferenced.contains( assetId ) )
@@ -72,26 +91,6 @@ protected:
 
 
         return true;
         return true;
     }
     }
-
-public:
-    TamlAssetReferencedVisitor() {}
-    virtual ~TamlAssetReferencedVisitor() {}
-
-    bool parse( const char* pFilename )
-    {
-        TamlXmlParser parser;
-        return parser.parse( pFilename, *this, false );
-    }
-
-    typedef StringTableEntry typeAssetId;
-    typedef HashMap<typeAssetId, StringTableEntry> typeAssetReferencedHash;
-
-    const typeAssetReferencedHash& getAssetReferencedMap( void ) const { return mAssetReferenced; }
-
-    void clear( void ) { mAssetReferenced.clear(); }
-
-private:
-    typeAssetReferencedHash mAssetReferenced;
 };
 };
 
 
 #endif // _TAML_ASSET_REFERENCED_VISITOR_H_
 #endif // _TAML_ASSET_REFERENCED_VISITOR_H_

+ 6 - 6
engine/source/io/fileStream.cc

@@ -85,7 +85,7 @@ bool FileStream::setPosition(const U32 i_newPosition)
    {
    {
       // flush the buffer if its dirty
       // flush the buffer if its dirty
       if (true == mDirty)
       if (true == mDirty)
-         flush();
+         Flush();
       // and clear out the state of the file stream
       // and clear out the state of the file stream
       clearBuffer();
       clearBuffer();
 
 
@@ -165,7 +165,7 @@ void FileStream::close()
 
 
    // make sure nothing in the buffer differs from what is on disk
    // make sure nothing in the buffer differs from what is on disk
    if (true == mDirty)
    if (true == mDirty)
-      flush();
+      Flush();
     
     
    // and close the file
    // and close the file
    File::Status closeResult;
    File::Status closeResult;
@@ -178,7 +178,7 @@ void FileStream::close()
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-bool FileStream::flush()
+bool FileStream::Flush()
 {
 {
    AssertWarn(0 != mStreamCaps, "FileStream::flush: the stream isn't open");
    AssertWarn(0 != mStreamCaps, "FileStream::flush: the stream isn't open");
    AssertFatal(false == mDirty || BUFFER_INVALID != mBuffHead, "FileStream::flush: buffer must be valid if its dirty");
    AssertFatal(false == mDirty || BUFFER_INVALID != mBuffHead, "FileStream::flush: buffer must be valid if its dirty");
@@ -255,7 +255,7 @@ bool FileStream::_read(const U32 i_numBytes, void *o_pBuffer)
 
 
          if (mBuffPos > mBuffTail && remaining != 0)
          if (mBuffPos > mBuffTail && remaining != 0)
          {
          {
-            flush();
+            Flush();
             mBuffHead = BUFFER_INVALID;
             mBuffHead = BUFFER_INVALID;
             if (mEOF == true)
             if (mEOF == true)
                Stream::setStatus(EOS);
                Stream::setStatus(EOS);
@@ -267,7 +267,7 @@ bool FileStream::_read(const U32 i_numBytes, void *o_pBuffer)
       {
       {
          // flush the buffer if its dirty, since we now need to go to disk
          // flush the buffer if its dirty, since we now need to go to disk
          if (true == mDirty)
          if (true == mDirty)
-            flush();
+            Flush();
 
 
          // make sure we know the current read location in the underlying file
          // make sure we know the current read location in the underlying file
          mBuffPos = mFile.getPosition();
          mBuffPos = mFile.getPosition();
@@ -366,7 +366,7 @@ bool FileStream::_write(const U32 i_numBytes, const void *i_pBuffer)
       {
       {
          // flush the buffer if its dirty, since we now need to go to disk
          // flush the buffer if its dirty, since we now need to go to disk
          if (true == mDirty)
          if (true == mDirty)
-            flush();
+            Flush();
 
 
          // make sure we know the current write location in the underlying file
          // make sure we know the current write location in the underlying file
          mBuffPos = mFile.getPosition();
          mBuffPos = mFile.getPosition();

+ 2 - 1
engine/source/io/fileStream.h

@@ -75,7 +75,8 @@ public:
    virtual bool open(const char *i_pFilename, AccessMode i_openMode);
    virtual bool open(const char *i_pFilename, AccessMode i_openMode);
    virtual void close();
    virtual void close();
 
 
-   bool flush();
+   bool Flush();
+
 
 
 protected:
 protected:
    // more mandatory methods from Stream base class...
    // more mandatory methods from Stream base class...

+ 3 - 0
engine/source/io/stream.h

@@ -137,6 +137,8 @@ class Stream {
    /// writeString is safer.
    /// writeString is safer.
    void writeLongString(U32 maxStringLen, const char *string);
    void writeLongString(U32 maxStringLen, const char *string);
 
 
+   inline bool Put( char character ) { return write( character ); }
+
    /// Writes a string to the stream.
    /// Writes a string to the stream.
    virtual void writeString(const char *stringBuf, S32 maxLen=255);
    virtual void writeString(const char *stringBuf, S32 maxLen=255);
 
 
@@ -167,6 +169,7 @@ class Stream {
    }
    }
    DECLARE_OVERLOADED_WRITE(S8)
    DECLARE_OVERLOADED_WRITE(S8)
    DECLARE_OVERLOADED_WRITE(U8)
    DECLARE_OVERLOADED_WRITE(U8)
+   DECLARE_OVERLOADED_WRITE(char)
 
 
    DECLARE_ENDIAN_OVERLOADED_WRITE(S16)
    DECLARE_ENDIAN_OVERLOADED_WRITE(S16)
    DECLARE_ENDIAN_OVERLOADED_WRITE(S32)
    DECLARE_ENDIAN_OVERLOADED_WRITE(S32)

+ 2 - 2
engine/source/module/moduleManager.cc

@@ -1263,8 +1263,8 @@ StringTableEntry ModuleManager::copyModule( ModuleDefinition* pSourceModuleDefin
             char parseFileBuffer[1024];
             char parseFileBuffer[1024];
             dSprintf( parseFileBuffer, sizeof(parseFileBuffer), "%s/%s", pFileInfo->pFullPath, pFilename );
             dSprintf( parseFileBuffer, sizeof(parseFileBuffer), "%s/%s", pFileInfo->pFullPath, pFilename );
 
 
-            // Parse file.
-            if ( !moduleIdUpdateVisitor.parse( parseFileBuffer ) )
+            // Parse file.            
+            if ( !mTaml.parse( parseFileBuffer, moduleIdUpdateVisitor ) )
             {
             {
                 // Warn.
                 // Warn.
                 Con::warnf("Module Manager: Failed to parse file '%s' whilst copying module Id '%s' using target directory '%s'.",
                 Con::warnf("Module Manager: Failed to parse file '%s' whilst copying module Id '%s' using target directory '%s'.",

+ 57 - 65
engine/source/module/tamlModuleIdUpdateVisitor.h

@@ -23,12 +23,12 @@
 #ifndef _TAML_MODULE_ID_UPDATE_VISITOR_H_
 #ifndef _TAML_MODULE_ID_UPDATE_VISITOR_H_
 #define _TAML_MODULE_ID_UPDATE_VISITOR_H_
 #define _TAML_MODULE_ID_UPDATE_VISITOR_H_
 
 
-#ifndef _TAML_XMLPARSER_H_
-#include "persistence//taml/tamlXmlParser.h"
+#ifndef _TAML_VISITOR_H_
+#include "persistence/taml/tamlVisitor.h"
 #endif
 #endif
 
 
-#ifndef _STRINGTABLE_H_
-#include "string/stringTable.h"
+#ifndef _TAML_PARSER_H_
+#include "persistence/taml/tamlParser.h"
 #endif
 #endif
 
 
 #ifndef _ASSET_FIELD_TYPES_H_
 #ifndef _ASSET_FIELD_TYPES_H_
@@ -37,74 +37,72 @@
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-class TamlModuleIdUpdateVisitor : public TamlXmlVisitor
+class TamlModuleIdUpdateVisitor : public TamlVisitor
 {
 {
-protected:
-    virtual bool visit( TiXmlElement* pXmlElement, TamlXmlParser& xmlParser )
+private:    
+    StringTableEntry mModuleIdFrom;
+    StringTableEntry mModuleIdTo;
+    U32 mModuleIdFromLength;
+    U32 mModuleIdToLength;
+
+public:
+    TamlModuleIdUpdateVisitor() :
+        mModuleIdFrom( StringTable->EmptyString ),
+        mModuleIdTo( StringTable->EmptyString ),
+        mModuleIdFromLength( 0 ),
+        mModuleIdToLength( 0 )      
+        {}
+    virtual ~TamlModuleIdUpdateVisitor() {}
+
+    virtual bool wantsPropertyChanges( void ) { return true; }
+    virtual bool wantsRootOnly( void ) { return true; }
+
+    virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState )
     {
     {
-        // Iterate attributes.
-        for ( TiXmlAttribute* pAttribute = pXmlElement->FirstAttribute(); pAttribute; pAttribute = pAttribute->Next() )
-        {
-            // Fetch attribute value.
-            const char* pAttributeValue = pAttribute->Value();
+        // Debug Profiling.
+        PROFILE_SCOPE(TamlModuleIdUpdateVisitor_Visit);
 
 
-            // Fetch value length.
-            const U32 valueLenth = dStrlen(pAttributeValue);
+        // Fetch property value.
+        const char* pPropertyValue = propertyState.getPropertyValue();
 
 
-            char newAttributeValueBuffer[1024];
+        // Fetch value length.
+        const U32 valueLenth = dStrlen(pPropertyValue);
 
 
-            // Is this an expando?
-            if ( *pAttributeValue == '^' )
-            {
-                // Yes, so skip if it's not the correct length.
-                if ( valueLenth < mModuleIdLengthFrom+1 )
-                    continue;
-
-                // Is this the module Id?
-                if ( dStrnicmp( pAttributeValue+1, mModuleIdFrom, mModuleIdLengthFrom ) == 0 )
-                {
-                    // Yes, so format a new value.
-                    dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "^%s%s",
-                        mModuleIdTo, pAttributeValue+1+mModuleIdLengthFrom );
-
-                    // Assign new value.
-                    pAttribute->SetValue( newAttributeValueBuffer );
-                }
-
-                // Skip to next attribute.
-                continue;
-            }
+        char newAttributeValueBuffer[1024];
+
+        // Is this an expando?
+        if ( *pPropertyValue == '^' )
+        {
+            // Yes, so finish if it's not the correct length.
+            if ( valueLenth < mModuleIdFromLength+1 )
+                return true;
 
 
-            // Does the field start with the module Id?
-            if ( dStrnicmp( pAttributeValue, mModuleIdFrom, mModuleIdLengthFrom ) == 0 )
+            // Is this the module Id?
+            if ( dStrnicmp( pPropertyValue+1, mModuleIdFrom, mModuleIdFromLength ) == 0 )
             {
             {
                 // Yes, so format a new value.
                 // Yes, so format a new value.
-                dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "%s%s",
-                    mModuleIdTo, pAttributeValue+mModuleIdLengthFrom );
+                dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "^%s%s",
+                    mModuleIdTo, pPropertyValue+1+mModuleIdFromLength );
 
 
                 // Assign new value.
                 // Assign new value.
-                pAttribute->SetValue( newAttributeValueBuffer );
+                propertyState.updatePropertyValue( newAttributeValueBuffer );
             }
             }
-        }
 
 
-        return true;
-    }
+            return true;
+        }
 
 
-    virtual bool visit( TiXmlAttribute* pAttribute, TamlXmlParser& xmlParser ) { return true; }
+        // Does the field start with the module Id?
+        if ( dStrnicmp( pPropertyValue, mModuleIdFrom, mModuleIdFromLength ) == 0 )
+        {
+            // Yes, so format a new value.
+            dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "%s%s",
+                mModuleIdTo, pPropertyValue+mModuleIdFromLength );
 
 
-public:
-    TamlModuleIdUpdateVisitor() :
-        mModuleIdFrom( StringTable->EmptyString ),
-        mModuleIdTo( StringTable->EmptyString ),
-        mModuleIdLengthFrom( 0 ),
-        mModuleIdLengthTo( 0 )      
-        {}
-    virtual ~TamlModuleIdUpdateVisitor() {}
+            // Assign new value.
+            propertyState.updatePropertyValue( newAttributeValueBuffer );
+        }
 
 
-    bool parse( const char* pFilename )
-    {
-        TamlXmlParser parser;
-        return parser.parse( pFilename, *this, true );
+        return true;
     }
     }
 
 
     void setModuleIdFrom( const char* pModuleIdFrom )
     void setModuleIdFrom( const char* pModuleIdFrom )
@@ -114,7 +112,7 @@ public:
 
 
         // Set module Id.
         // Set module Id.
         mModuleIdFrom = StringTable->insert( pModuleIdFrom );
         mModuleIdFrom = StringTable->insert( pModuleIdFrom );
-        mModuleIdLengthFrom = dStrlen(mModuleIdFrom);
+        mModuleIdFromLength = dStrlen(mModuleIdFrom);
     }
     }
     StringTableEntry getModuleIdFrom( void ) const { return mModuleIdFrom; }
     StringTableEntry getModuleIdFrom( void ) const { return mModuleIdFrom; }
 
 
@@ -125,15 +123,9 @@ public:
 
 
         // Set module Id.
         // Set module Id.
         mModuleIdTo = StringTable->insert( pModuleIdTo );
         mModuleIdTo = StringTable->insert( pModuleIdTo );
-        mModuleIdLengthTo = dStrlen(mModuleIdTo);
+        mModuleIdToLength = dStrlen(mModuleIdTo);
     }
     }
     const char* getModuleIdTo( void ) const { return mModuleIdTo; }
     const char* getModuleIdTo( void ) const { return mModuleIdTo; }
-
-private:    
-    StringTableEntry mModuleIdFrom;
-    StringTableEntry mModuleIdTo;
-    U32 mModuleIdLengthFrom;
-    U32 mModuleIdLengthTo;
 };
 };
 
 
 #endif // _TAML_MODULE_ID_UPDATE_VISITOR_H_
 #endif // _TAML_MODULE_ID_UPDATE_VISITOR_H_

+ 199 - 0
engine/source/persistence/rapidjson/.gitattributes

@@ -0,0 +1,199 @@
+* text=auto !eol
+bin/data/glossary.json -text
+bin/data/menu.json -text
+bin/data/readme.txt -text
+bin/data/sample.json -text
+bin/data/webapp.json -text
+bin/data/widget.json -text
+bin/encodings/utf16be.json -text
+bin/encodings/utf16bebom.json -text
+bin/encodings/utf16le.json -text
+bin/encodings/utf16lebom.json -text
+bin/encodings/utf32be.json -text
+bin/encodings/utf32bebom.json -text
+bin/encodings/utf32le.json -text
+bin/encodings/utf32lebom.json -text
+bin/encodings/utf8.json -text
+bin/encodings/utf8bom.json -text
+bin/jsonchecker/fail1.json -text
+bin/jsonchecker/fail10.json -text
+bin/jsonchecker/fail11.json -text
+bin/jsonchecker/fail12.json -text
+bin/jsonchecker/fail13.json -text
+bin/jsonchecker/fail14.json -text
+bin/jsonchecker/fail15.json -text
+bin/jsonchecker/fail16.json -text
+bin/jsonchecker/fail17.json -text
+bin/jsonchecker/fail18.json -text
+bin/jsonchecker/fail19.json -text
+bin/jsonchecker/fail2.json -text
+bin/jsonchecker/fail20.json -text
+bin/jsonchecker/fail21.json -text
+bin/jsonchecker/fail22.json -text
+bin/jsonchecker/fail23.json -text
+bin/jsonchecker/fail24.json -text
+bin/jsonchecker/fail25.json -text
+bin/jsonchecker/fail26.json -text
+bin/jsonchecker/fail27.json -text
+bin/jsonchecker/fail28.json -text
+bin/jsonchecker/fail29.json -text
+bin/jsonchecker/fail3.json -text
+bin/jsonchecker/fail30.json -text
+bin/jsonchecker/fail31.json -text
+bin/jsonchecker/fail32.json -text
+bin/jsonchecker/fail33.json -text
+bin/jsonchecker/fail4.json -text
+bin/jsonchecker/fail5.json -text
+bin/jsonchecker/fail6.json -text
+bin/jsonchecker/fail7.json -text
+bin/jsonchecker/fail8.json -text
+bin/jsonchecker/fail9.json -text
+bin/jsonchecker/pass1.json -text
+bin/jsonchecker/pass2.json -text
+bin/jsonchecker/pass3.json -text
+bin/jsonchecker/readme.txt -text
+build/Doxyfile -text
+build/premake -text
+build/premake.bat -text
+build/premake4.lua -text
+example/condense/condense.cpp -text
+example/pretty/pretty.cpp -text
+example/prettyauto/prettyauto.cpp -text
+example/serialize/serialize.cpp -text
+example/tutorial/tutorial.cpp -text
+include/rapidjson/allocators.h -text
+include/rapidjson/document.h -text
+include/rapidjson/encodedstream.h -text
+include/rapidjson/encodings.h -text
+include/rapidjson/filereadstream.h -text
+include/rapidjson/filestream.h -text
+include/rapidjson/filewritestream.h -text
+include/rapidjson/internal/pow10.h -text
+include/rapidjson/internal/stack.h -text
+include/rapidjson/internal/strfunc.h -text
+include/rapidjson/prettywriter.h -text
+include/rapidjson/rapidjson.h -text
+include/rapidjson/reader.h -text
+include/rapidjson/stringbuffer.h -text
+include/rapidjson/writer.h -text
+/license.txt -text
+/readme.txt -text
+test/perftest/jsoncpptest.cpp -text
+test/perftest/misctest.cpp -text
+test/perftest/perftest.cpp -text
+test/perftest/perftest.h -text
+test/perftest/platformtest.cpp -text
+test/perftest/rapidjsontest.cpp -text
+test/perftest/ultrajsontest.cpp -text
+test/perftest/yajl_all.c -text
+test/perftest/yajltest.cpp -text
+test/unittest/documenttest.cpp -text
+test/unittest/encodedstreamtest.cpp -text
+test/unittest/encodingstest.cpp -text
+test/unittest/filestreamtest.cpp -text
+test/unittest/jsoncheckertest.cpp -text
+test/unittest/readertest.cpp -text
+test/unittest/unittest.cpp -text
+test/unittest/unittest.h -text
+test/unittest/valuetest.cpp -text
+test/unittest/writertest.cpp -text
+thirdparty/gtest/CHANGES -text
+thirdparty/gtest/CONTRIBUTORS -text
+thirdparty/gtest/COPYING -text
+thirdparty/gtest/README -text
+thirdparty/gtest/include/gtest/gtest-death-test.h -text
+thirdparty/gtest/include/gtest/gtest-message.h -text
+thirdparty/gtest/include/gtest/gtest-param-test.h -text
+thirdparty/gtest/include/gtest/gtest-param-test.h.pump -text
+thirdparty/gtest/include/gtest/gtest-printers.h -text
+thirdparty/gtest/include/gtest/gtest-spi.h -text
+thirdparty/gtest/include/gtest/gtest-test-part.h -text
+thirdparty/gtest/include/gtest/gtest-typed-test.h -text
+thirdparty/gtest/include/gtest/gtest.h -text
+thirdparty/gtest/include/gtest/gtest_pred_impl.h -text
+thirdparty/gtest/include/gtest/gtest_prod.h -text
+thirdparty/gtest/include/gtest/internal/gtest-death-test-internal.h -text
+thirdparty/gtest/include/gtest/internal/gtest-filepath.h -text
+thirdparty/gtest/include/gtest/internal/gtest-internal.h -text
+thirdparty/gtest/include/gtest/internal/gtest-linked_ptr.h -text
+thirdparty/gtest/include/gtest/internal/gtest-param-util-generated.h -text
+thirdparty/gtest/include/gtest/internal/gtest-param-util-generated.h.pump -text
+thirdparty/gtest/include/gtest/internal/gtest-param-util.h -text
+thirdparty/gtest/include/gtest/internal/gtest-port.h -text
+thirdparty/gtest/include/gtest/internal/gtest-string.h -text
+thirdparty/gtest/include/gtest/internal/gtest-tuple.h -text
+thirdparty/gtest/include/gtest/internal/gtest-tuple.h.pump -text
+thirdparty/gtest/include/gtest/internal/gtest-type-util.h -text
+thirdparty/gtest/include/gtest/internal/gtest-type-util.h.pump -text
+thirdparty/gtest/src/gtest-all.cc -text
+thirdparty/gtest/src/gtest-death-test.cc -text
+thirdparty/gtest/src/gtest-filepath.cc -text
+thirdparty/gtest/src/gtest-internal-inl.h -text
+thirdparty/gtest/src/gtest-port.cc -text
+thirdparty/gtest/src/gtest-printers.cc -text
+thirdparty/gtest/src/gtest-test-part.cc -text
+thirdparty/gtest/src/gtest-typed-test.cc -text
+thirdparty/gtest/src/gtest.cc -text
+thirdparty/gtest/src/gtest_main.cc -text
+thirdparty/jsoncpp/AUTHORS -text
+thirdparty/jsoncpp/LICENSE -text
+thirdparty/jsoncpp/README.txt -text
+thirdparty/jsoncpp/include/json/autolink.h -text
+thirdparty/jsoncpp/include/json/config.h -text
+thirdparty/jsoncpp/include/json/features.h -text
+thirdparty/jsoncpp/include/json/forwards.h -text
+thirdparty/jsoncpp/include/json/json.h -text
+thirdparty/jsoncpp/include/json/reader.h -text
+thirdparty/jsoncpp/include/json/value.h -text
+thirdparty/jsoncpp/include/json/writer.h -text
+thirdparty/jsoncpp/src/jsontestrunner/main.cpp -text
+thirdparty/jsoncpp/src/jsontestrunner/sconscript -text
+thirdparty/jsoncpp/src/lib_json/json_batchallocator.h -text
+thirdparty/jsoncpp/src/lib_json/json_internalarray.inl -text
+thirdparty/jsoncpp/src/lib_json/json_internalmap.inl -text
+thirdparty/jsoncpp/src/lib_json/json_reader.cpp -text
+thirdparty/jsoncpp/src/lib_json/json_value.cpp -text
+thirdparty/jsoncpp/src/lib_json/json_valueiterator.inl -text
+thirdparty/jsoncpp/src/lib_json/json_writer.cpp -text
+thirdparty/jsoncpp/src/lib_json/sconscript -text
+thirdparty/jsoncpp/src/test_lib_json/jsontest.cpp -text
+thirdparty/jsoncpp/src/test_lib_json/jsontest.h -text
+thirdparty/jsoncpp/src/test_lib_json/main.cpp -text
+thirdparty/jsoncpp/src/test_lib_json/sconscript -text
+thirdparty/jsoncpp/version -text
+thirdparty/ultrajson/README -text
+thirdparty/ultrajson/ultrajson.h -text
+thirdparty/ultrajson/ultrajsondec.c -text
+thirdparty/ultrajson/ultrajsonenc.c -text
+thirdparty/yajl/COPYING -text
+thirdparty/yajl/ChangeLog -text
+thirdparty/yajl/README -text
+thirdparty/yajl/TODO -text
+thirdparty/yajl/include/yajl/yajl_common.h -text
+thirdparty/yajl/include/yajl/yajl_gen.h -text
+thirdparty/yajl/include/yajl/yajl_parse.h -text
+thirdparty/yajl/include/yajl/yajl_tree.h -text
+thirdparty/yajl/include/yajl/yajl_version.h -text
+thirdparty/yajl/src/CMakeLists.txt -text
+thirdparty/yajl/src/YAJL.dxy -text
+thirdparty/yajl/src/api/yajl_common.h -text
+thirdparty/yajl/src/api/yajl_gen.h -text
+thirdparty/yajl/src/api/yajl_parse.h -text
+thirdparty/yajl/src/api/yajl_tree.h -text
+thirdparty/yajl/src/api/yajl_version.h.cmake -text
+thirdparty/yajl/src/yajl -text
+thirdparty/yajl/src/yajl.c -text
+thirdparty/yajl/src/yajl_alloc.c -text
+thirdparty/yajl/src/yajl_alloc.h -text
+thirdparty/yajl/src/yajl_buf.c -text
+thirdparty/yajl/src/yajl_buf.h -text
+thirdparty/yajl/src/yajl_bytestack.h -text
+thirdparty/yajl/src/yajl_encode.c -text
+thirdparty/yajl/src/yajl_encode.h -text
+thirdparty/yajl/src/yajl_gen.c -text
+thirdparty/yajl/src/yajl_lex.c -text
+thirdparty/yajl/src/yajl_lex.h -text
+thirdparty/yajl/src/yajl_parser.c -text
+thirdparty/yajl/src/yajl_parser.h -text
+thirdparty/yajl/src/yajl_tree.c -text
+thirdparty/yajl/src/yajl_version.c -text

+ 22 - 0
engine/source/persistence/rapidjson/bin/data/glossary.json

@@ -0,0 +1,22 @@
+{
+    "glossary": {
+        "title": "example glossary",
+		"GlossDiv": {
+            "title": "S",
+			"GlossList": {
+                "GlossEntry": {
+                    "ID": "SGML",
+					"SortAs": "SGML",
+					"GlossTerm": "Standard Generalized Markup Language",
+					"Acronym": "SGML",
+					"Abbrev": "ISO 8879:1986",
+					"GlossDef": {
+                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
+						"GlossSeeAlso": ["GML", "XML"]
+                    },
+					"GlossSee": "markup"
+                }
+            }
+        }
+    }
+}

+ 27 - 0
engine/source/persistence/rapidjson/bin/data/menu.json

@@ -0,0 +1,27 @@
+{"menu": {
+    "header": "SVG Viewer",
+    "items": [
+        {"id": "Open"},
+        {"id": "OpenNew", "label": "Open New"},
+        null,
+        {"id": "ZoomIn", "label": "Zoom In"},
+        {"id": "ZoomOut", "label": "Zoom Out"},
+        {"id": "OriginalView", "label": "Original View"},
+        null,
+        {"id": "Quality"},
+        {"id": "Pause"},
+        {"id": "Mute"},
+        null,
+        {"id": "Find", "label": "Find..."},
+        {"id": "FindAgain", "label": "Find Again"},
+        {"id": "Copy"},
+        {"id": "CopyAgain", "label": "Copy Again"},
+        {"id": "CopySVG", "label": "Copy SVG"},
+        {"id": "ViewSVG", "label": "View SVG"},
+        {"id": "ViewSource", "label": "View Source"},
+        {"id": "SaveAs", "label": "Save As"},
+        null,
+        {"id": "Help"},
+        {"id": "About", "label": "About Adobe CVG Viewer..."}
+    ]
+}}

+ 1 - 0
engine/source/persistence/rapidjson/bin/data/readme.txt

@@ -0,0 +1 @@
+sample.json is obtained from http://code.google.com/p/json-test-suite/downloads/detail?name=sample.zip

+ 3315 - 0
engine/source/persistence/rapidjson/bin/data/sample.json

@@ -0,0 +1,3315 @@
+{
+ "a": {
+  "6U閆崬밺뀫颒myj츥휘:$薈mY햚#rz飏+玭V㭢뾿愴YꖚX亥ᮉ푊\u0006垡㐭룝\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+  "b茤z\\.N": [[
+   "ZL:ᅣዎ*Y|猫劁櫕荾Oj为1糕쪥泏S룂w࡛Ᏺ⸥蚙)",
+   {
+    "\"䬰ỐwD捾V`邀⠕VD㺝sH6[칑.:醥葹*뻵倻aD\"": true,
+    "e浱up蔽Cr෠JK軵xCʨ<뜡癙Y獩ケ齈X/螗唻?<蘡+뷄㩤쳖3偑犾&\\첊xz坍崦ݻ鍴\"嵥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+    "l?Ǩ喳e6㔡$M꼄I,(3᝝縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+    "o㮚?\"춛㵉<\/﬊ࠃ䃪䝣wp6ἀ䱄[s*S嬈貒pᛥ㰉'돀": [{
+     "(QP윤懊FI<ꃣ『䕷[\"珒嶮?%Ḭ壍಻䇟0荤!藲끹bd浶tl\u2049#쯀@僞": {"i妾8홫": {
+      ",M맃䞛K5nAㆴVN㒊햬$n꩑&ꎝ椞阫?/ṏ세뉪1x쥼㻤㪙`\"$쟒薟B煌܀쨝ଢ଼2掳7㙟鴙X婢\u0002": "Vዉ菈᧷⦌kﮞఈnz*<?੃'ahhCFX(\u0007⮊E㭍䱾Gxꥩr❣.洎",
+      "뻴5bDD큯O傆盓왻U?ꞅꐊN鐭᧢τ\"迳豲8\u001b䃥ꂻ䴺ྸH筴,": {
+       "\"L鸔SE㬡XV&~͎'놅蔞눶l匛?'.K氁\\ƢẨ疇mΊ'꽳&!鹠m'|{P痊 秄쒿u\u00111䋧gϩx7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+       "8鋂뛷?첒B☚>﷜FM\"荭7ꍀ-VR<\/';䁙E9$䩉\f @s?퍪o3^衴cඎ䧪aK鼟q䆨c{䳠5mᒲՙ蘹ᮩ": {
+        "F㲷JGo⯍P덵x뒳p䘧☔\"+ꨲ吿JfR㔹)4n紬G练Q፞!C|": true,
+        "p^㫮솎oc.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\፾@Fᭌ\\K": false,
+        "蟌Tk愙潦伩": {
+         "a<\/@ᾛ慂侇瘎": -7271305752851720826,
+         "艓藬/>၄ṯ,XW~㲆w": {"E痧郶)㜓ha朗!N赻瞉駠uC\u20ad辠<Ve?폱!Im䁎搄:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+          false,
+          {
+           "\u000b=>x퓮⣫P1ࠫLMMX'M刼唳됤": null,
+           "P쓫晥%k覛ዩIUᇸ滨:噐혲lMR5䋈V梗>%幽u頖\\)쟟": null,
+           "eg+昉~矠䧞难\b?gQ쭷筝\\eꮠNl{ಢ哭|]Mn銌╥zꖘzⱷ⭤ᮜ^": [
+            -1.30142114406914976E17,
+            -1.7555215491128452E-19,
+            null,
+            "渾㨝ߏ牄귛r?돌?w[⚞ӻ~廩輫㼧/",
+            -4.5737191805302129E18,
+            null,
+            "xy࿑M[oc셒竓Ⓔx?뜓y䊦>-D켍(&&?XKkc꩖ﺸᏋ뵞K伕6ী)딀P朁yW揙?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+            3808159498143417627,
+            null,
+            {"m試\u20df1{G8&뚈h홯J<\/": {
+             "3ஸ厠zs#1K7:rᥞoꅔꯧ&띇鵼鞫6跜#赿5l'8{7㕳(b/j\"厢aq籀ꏚ\u0015厼稥": [
+              -2226135764510113982,
+              true,
+              null,
+              {
+               "h%'맞S싅Hs&dl슾W0j鿏MםD놯L~S-㇡R쭬%": null,
+               "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+               "恇I転;￸B2Y`z\\獓w,놏濐撐埵䂄)!䶢D=ഭ㴟jyY": {
+                "$ࡘt厛毣ൢI芁<겿骫⫦6tr惺a": [
+                 6.385779736989334E-20,
+                 false,
+                 true,
+                 true,
+                 [
+                  -6.891946211462334E-19,
+                  null,
+                  {
+                   "]-\\Ꟑ1/薓❧Ὂ\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+                    "\"◉B\"pᶉt骔J꩸ᄇᛐi╰栛K쉷㉯鐩!㈐n칍䟅難>盥y铿e୔蒏M貹ヅ8嘋퀯䉶ጥ㏢殊뻳\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+                    "6.瀫cN䇮F㧺?\\椯=ڈT䘆4␘8qv": -3.5687501019676885E-19,
+                    "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTs1c-7(䵢\u2069匏絘ꯉ:l毴汞t戀oෟᵶ뮱፣-醇Jx䙬䐁햢0࣫ᡁgrㄛ": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦi뵲M",
+                    "⏑[\"ugoy^儣횎~U\\섯겜論l2jw஌yD腅̂\u0019": true,
+                    "ⵯɇ䐲᫿࢚!㯢l샅笶戮1꣖0Xe": null,
+                    "劅f넀識b宁焊E찓橵G!ʱ獓뭔雩괛": [{"p⹣켙[q>燣䍃㞽ᩲx:쓤삘7玑퇼0<\/q璂ᑁ[Z\\3䅵䧳\u0011㤧|妱緒C['췓Yꞟ3Z鳱雼P錻BU씧U`ᢶg蓱>.1ӧ譫'L_5V䏵Ц": [
+                     false,
+                     false,
+                     {"22䂍盥N霂얢<F8꼵7Gసyh뀍g᦭ꄢx硴嬢\u001a?E괆T|;7犟\"Wt%䐩O⨵t&#ᬋK'蜍Ძ揔⾠鲂T멷靃\u0018䓞cE": {"f=䏏츜瞾zw?孡鏣\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+                      "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿䐊s<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹i젨ꚁ<8?s볕蝡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑r쁕툄嵵?⾥O",
+                      "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+                      "sሣ%娌暡clr蟜㑓2\u000bS❟_X㨔⚴5~蔷ꀇ|Xu㬖,꤭卹r(g믇쩍%췸앙|栣U\\2]䤉+啠菡ꯎT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+                      "u톇=黚\\ ꂮ췵L>躰e9⑩_뵜斌n@B}$괻Yᐱ@䧋V\"☒-諯cV돯ʠ": true,
+                      "Ű螧ᔼ檍鍎땒딜qꄃH뜣<獧ूCY吓⸏>XQ㵡趌o끬k픀빯a(ܵ甏끆୯/6Nᪧ}搚ᆚ짌P牰泱鈷^d꣟#L삀\"㕹襻;k㸊\\f+": true,
+                      "쎣\",|⫝̸阊x庿k잣v庅$鈏괎炔k쬪O_": [
+                       "잩AzZGz3v愠ꉈⵎ?㊱}S尳௏p\r2>췝IP䘈M)w|\u000eE",
+                       -9222726055990423201,
+                       null,
+                       [
+                        false,
+                        {"´킮'뮤쯽Wx讐V,6ᩪ1紲aႈ\u205czD": [
+                         -930994432421097536,
+                         3157232031581030121,
+                         "l貚PY䃛5@䭄<nW\u001e",
+                         [
+                          3.801747732605161E18,
+                          [
+                           null,
+                           false,
+                           {
+                            "": 4.0442013775147072E16,
+                            "2J[sᡪ㞿|n'#廲꯬乞": true,
+                            "B[繰`\\㏏a̼㨀偛㽓<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜o玐ꉟぢC珵὆ᓞ쇓Qs氯였9駵q혃Ljꂔ<\/昺+t䐋༻猙c沪~櫆bpJ9UᏐ:칣妙!皗F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+                            "H磵ai委曷n柋T<\/勿F&:ꣴfU@㿗榻Lb+?퍄sp\"᪟~>귻m㎮琸f": 1.0318894506812084E-19,
+                            "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶq腽xc(៯夐J5굄䕁Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uญ<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+                            "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+                            "䔤䣈?汝.p襟&d㱅\\Jᚠ@?O첁ࢽ휔VR蔩|㒢柺": [[
+                             "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\᝸MlE쵠Q+",
+                             null,
+                             false,
+                             3346674396990536343,
+                             null,
+                             {
+                              "": null,
+                              "/䏨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအ꽡[hᕱᗅ㦋쭞Mユ茍?L槽암V#성唐%㣕嘵\\ڹ(嘏躿&q": [
+                               -1364715155337673920,
+                               false,
+                               -8197733031775379251,
+                               "E팗鮲JwH\\觡܈᜝\"+뉞娂N휗v噙၂깼\u001dD帒l%-斔N",
+                               -3.844267973858711E-20,
+                               [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1x?鯔V尠8Em<": [[[
+                                null,
+                                [
+                                 null,
+                                 -5841406347577698873,
+                                 "킷\"S⋄籞繗솸ᵣ浵w쑿ퟗ7nᎏx3앙z㘌쿸I葥覯㬏0ᆝb汆狺뷘ႀnꋋ",
+                                 -1227911573141158702,
+                                 {
+                                  "u㉮PᾺV鵸A\\g*ࡗ9슟晭+ͧↀ쿅H\u001c꾣犓}癇恛ᗬ黩䟘X梑鐆e>r䰂f矩'-7䡭桥Dz兔V9谶居㺍ᔊ䩯덲.\u001eL0ὅㅷ釣": [{
+                                   "<쯬J卷^숞u࠯䌗艞R9닪g㐾볎a䂈歖意:%鐔|ﵤ|y}>;2,覂⶚啵tb*仛8乒㓶B࿠㯉戩oX 貘5V嗆렽낁߼4h䧛ꍺM空\\b꿋貼": 8478577078537189402,
+                                   "VD*|吝z~h譺aᯒ": {
+                                    "YI췢K<\/濳xNne玗rJo쾘3핰鴊\"↱AR:ࢷ\"9?\"臁說)?誚ꊏe)_D翾W?&F6J@뺾ꍰNZ醊Z쾈വH嶿?炫㷱鬰M겈<bS}㎥l|刖k": {"H7鷮퇢_k": [
+                                     true,
+                                     "s㟑瀭좾쮀⑁Y찺k맢戲쀸俻ກ6儮끗扖puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <ᚶ5",
+                                     7950276470944656796,
+                                     4.9392301536234746E17,
+                                     -4796050478201554639,
+                                     "yꬴc<3㻚",
+                                     "o塁\u20a4蒵鮬裢CᴧnB㭱f.",
+                                     false,
+                                     [
+                                      false,
+                                      "㡐弑V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂q萾⚇懋⦕둡v",
+                                      1862560050083946970,
+                                      "\u20b6[|(뭹gꍒ펉O轄Dl묽]ﯨ髯QEbA㒾m@롴礠㕓2땫n6ْ엘঵篳R잷꙲m색摪|@㿫5aK设f胭r8/NI4춫栵\\꯬2]",
+                                      false,
+                                      {
+                                       "\u000b7*㙛燏.~?䔊p搕e_拺艿뷍f{ꔻ1s驙`$Ė戧?q⋬沭?塷᭚蹀unoa5": {
+                                        "S귯o紞㾕ᅶ侏銇12|ʟ畴iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+                                        "㭚0?xB疱敻ேBPwv뾃熉(ӠpJ]갢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ﴦ?LḨ": "Si B%~㬒E",
+                                        "핇㉊살㍢숨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~㞐?쯟퍸宒뉆U|}㉓郾ࣻ*櫎꼪䁗s?~7\u001e㘔h9{aឋ}:㶒P8": [{"\\R囡쐬nN柋琍؛7칾 :㶃衇徜V 深f1淍♠i?3S角폞^ᆞ\u20e8ṰD\u0007秡+躒臔&-6": {
+                                         "䨑g.fh㔗=8!\"狿ൻLU^뻱g䲚㻐'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+                                         "外頮詋~텡竆繃䏩苨뾺朁꼃瘹f*㉀枙NH/\u2027ꢁ}j묎vペq︉식뜡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;맧?嶰㩼츱獡?-": {
+                                          "e݆㍡⬬'2㻒?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺[刯5곑Na램ﴦ዆]㝓qw钄\u001b\"Y洊䗿祏塥迵[⼞⠳P$꠱5먃0轢`": [{"獰E賝﫚b먭N긆Ⰹ史2逶ꜛ?H짉~?P}jj}侷珿_T>᭨b,⻁鈵P䕡䀠८ⱄ홎鄣": {
+                                           "@?k2鶖㋮\"Oರ K㨇廪儲\u0017䍾J?);\b*묀㗠섳햭1MC V": null,
+                                           "UIICP!BUA`ᢈ㋸~袩㗪⾒=fB﮴l1ꡛ죘R辂여ҳ7쮡<䩲`熕8頁": 4481809488267626463,
+                                           "Y?+8먙ᚔ鋳蜩럶1㥔y璜౩`": [
+                                            null,
+                                            1.2850335807501874E-19,
+                                            "~V2",
+                                            2035406654801997866,
+                                            {
+                                             "<숻1>\"": -8062468865199390827,
+                                             "M㿣E]}qwG莎Gn᝶(ꔙ\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+                                             "pꝤ㎏9W%>M;-U璏f(^j1?&RB隧 忓b똊E": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}鷧XﻘMツb䕖;㪻",
+                                             "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yᰟ<Fɋ잣緂頒⺏䉲瑑䅂,C~ޅG!f熢-B7~9Pqࡢ[츑#3ꕎ,Öඳ聁⩅㵧춀뿍xy䌏͂tdj!箧᳆|9蚡돬": -2.54467378964089632E17,
+                                             "䵈䅦5빖,궆-:໿댾仫0ᙚyᦝhqᚄ": null,
+                                             "侯Y\"湛졯劇U셎YX灍ⅸ2伴|筧\\䁒㶶᷏쁑Waᦵᗱ㜏늾膠<Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+                                             "姪y$#s漴JH璌Ӊ脛J㝾펔ﹴoꈶ㚸PD:薠쏖%說ថ蹂1]⾕5튄": {
+                                              "᝾Huw3䮅如쿺䍟嫝]<鰨ݷ?꯯䫓傩|ᐶස媽\\澒≡闢": "Mm\"쏇ᯄ졽\"楇<\/ꥆ흭局n隴@鿣w⠊4P贈徎W㊋;䤞'.팇蒁䡴egpx嗎wஅ獗堮ᛐnˁ︖䀤4噙?໚郝᱋ޘॎt恑姫籕殥陃\"4[ꝬqL4Wꠎx",
+                                              "ℇj遌5B뒚\" U": "硄ꏘ{憠굏:&t䌨m Cઌ쿣鞛XFꠟs䝭ﶃ\"格a0x闊昵吲L\\杚聈aꁸj싹獅\"灟ﱡ馆*굖糠<ꔏ躎",
+                                              "톌賠弳ꟍb\"螖X50sĶ晠3f秂坯Iⓟ:萘": 5.573183333596288E18,
+                                              "%䴺": [[[[
+                                               -6957233336860166165,
+                                               false,
+                                               null,
+                                               {
+                                                "\"\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉㏞L+ᵡ艱hL콇붆@": null,
+                                                "%螥9ꭌ<\/-t": true,
+                                                ",9|耢椸䁓Xk죱\u0015$Ώ鲞[?엢ᝲ혪즈ⴂ▂ℴ㗯\"g뺘\\ꍜ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+                                                "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\鏑r*2橱G⼔F/.j": true,
+                                                "RK좬뎂a홠f*f㱉ᮍ⦋潙㨋Gu곌SGI3I뿐\\F',)t`荁蘯囯ﮉ裲뇟쥼_ገ驪▵撏ᕤV": 1.52738225997956557E18,
+                                                "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤閍銤唫ၕb<\/w踲䔼u솆맚,䝒ᝳ'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿0\\<=(uL䷍刨쑪>俆揓Cy襸Q힆䆭涷<\/ᐱ0ɧ䗾䚹\\ኜ?ꄢᇘ`䴢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+g騍X",
+                                                "GgG꽬[(嫓몍6\u0004궍宩㙻/>\u0011^辍dT腪hxǑ%ꊇk,8(W⧂結P鬜O": [{
+                                                 "M㴾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓⍵/徯O.M㏥ʷD囎⧔쁳휤T??鉬뇙=#ꢫ숣BX䭼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+                                                 "Z17縬z]愀䖌 ᾋBCg5딒국憍꾓aⲷ턷u:U촳驿?雺楶\u0001\u001c{q*ᰗ苑B@k揰z.*蓗7ረIm\"Oᱍ@7?_": true,
+                                                 "㺃Z<": -4349275766673120695,
+                                                 "휃䠂fa塆ffixKe'덬鏗੄뺾w࠾鑎k땢m*႑햞鐮6攊&虜h黚,Y䱳Sﭼ둺pN6": [
+                                                  false,
+                                                  "IΎ䣲,\"ᬮ˪癘P~Qlnx喁Sᮔ༬˨I珌m䜛酛\u0003iꐸ㦧cQ帲晼D' \\(粋wQcN\\뵰跈",
+                                                  [
+                                                   "D0\\L?M1쥍Kaꏌsd+盌귤憊tz䌣댐בO坂wϢ%ὒgp,Ai⎧ᶆI餾ꦍ棩嘅᳉怴%m]ၶis纖D凜镧o심b U",
+                                                   {
+                                                    "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+                                                    "c/擯X5~JmK䵶^쐎ച|B|u[솝(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!﯏⊚ᇨ<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vꍋ\"$)v": "e&sFF쬘OBd슊寮f蠛জ봞mn~锆竒G脁\"趵G刕䕳&L唽붵<\/I,X팚B⍥X,kԇҗ眄_慡:U附ᓚA蕧>\u001a\u0011\";~쓆BH4坋攊7힪",
+                                                    "iT:L闞椕윚*滛gI≀Wਟඊ'ꢆ縺뱹鮚Nꩁ᧬蕼21줧\\䋯``⍐\\㏱鳨": 1927052677739832894,
+                                                    "쮁缦腃g]礿Y㬙 fヺSɪ꾾N㞈": [
+                                                     null,
+                                                     null,
+                                                     {
+                                                      "!t,灝Y 1䗉罵?c饃호䉂Cᐭ쒘z(즽sZG㬣sഖE4뢜㓕䏞丮Qp簍6EZឪ겛fx'ꩱQ0罣i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+                                                       -3.3325685522591933E18,
+                                                       [{"㓁5]A䢕1룥BC?Ꙍ`r룔Ⳛ䙡u伲+\u0001്o": [
+                                                        null,
+                                                        4975309147809803991,
+                                                        null,
+                                                        null,
+                                                        {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fS෉놁뮔/ꕼ䓈쁺4\\霶䠴ᩢ<\/t4?죵>uD5➶༆쉌럮⢀秙䘥\u20972ETR3濡恆vB? ~鸆\u0005": {
+                                                         "`閖m璝㥉b뜴?Wf;?DV콜\u2020퍉౓擝宏ZMj3mJ먡-傷뱙yח㸷꥿ ໘u=M읝!5吭L4v\\?ǎ7C홫": null,
+                                                         "|": false,
+                                                         "~Ztᛋ䚘\\擭㗝傪W陖+㗶qᵿ蘥ᙄp%䫎)}=⠔6ᮢS湟-螾-mXH?cp": 448751162044282216,
+                                                         "\u209fad놹j檋䇌ᶾ梕㉝bוּ<d䗱:줰M酄\u0000X#_r獢A饓ꍗُKo_跔?ᪧ嵜鼲<": null,
+                                                         "ꆘ)ubI@h@洭Ai㜎䏱k\u0003?T䉐3间%j6j棍j=❁\\U毮ᬹ*8䀔v6cpj⭬~Q꿾뺶펵悡!쩭厝l六㽫6퇓ޭ2>": {"?苴ꩠD䋓帘5騱qﱖPF?☸珗顒yU ᡫcb䫎 S@㥚gꮒ쎘泴멖\\:I鮱TZ듒ᶨQ3+f7캙\"?\f풾\\o杞紟﻽M.⏎靑OP": [
+                                                          -2.6990368911551596E18,
+                                                          [{"䒖@<᰿<\/⽬tTr腞&G%᳊秩蜰擻f㎳?S㵧\r*k뎾-乢겹隷j軛겷0룁鮁": {")DO0腦:춍逿:1㥨่!蛍樋2": [{
+                                                           ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+                                                            "x捗甠nVq䅦w`CD⦂惺嘴0I#vỵ} \\귂S끴D얾?Ԓj溯\"v餄a": {
+                                                             "@翙c⢃趚痋i\u0015OQ⍝lq돆Y0pࢥ3쉨䜩^<8g懥0w)]䊑n洺o5쭝QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸XޔFtj;iC": false,
+                                                             "I&뱋゘|蓔䔕측瓯%6ᗻHW\\N1貇#?僐ᗜgh᭪o'䗈꽹Rc욏/蔳迄༝!0邔䨷푪8疩)[쭶緄㇈୧ፐ": {
+                                                              "B+:ꉰ`s쾭)빼C羍A䫊pMgjdx䐝Hf9᥸W0!C樃'蘿f䫤סи\u0017Jve? 覝f둀⬣퓉Whk\"஼=չﳐ皆笁BIW虨쫓F廰饞": -642906201042308791,
+                                                              "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+                                                               "RK鳗z=袤Pf|[,u욺",
+                                                               "Ẏᏻ罯뉋⺖锅젯㷻{H䰞쬙-쩓D]~\u0013O㳢gb@揶蔉|kᦂ❗!\u001ebM褐sca쨜襒y⺉룓",
+                                                               null,
+                                                               null,
+                                                               true,
+                                                               -1.650777344339075E-19,
+                                                               false,
+                                                               "☑lꄆs힨꤇]'uTന⌳농].1⋔괁沰\"IWഩ\u0019氜8쟇䔻;3衲恋,窌z펏喁횗?4?C넁问?ᥙ橭{稻Ⴗ_썔",
+                                                               "n?]讇빽嗁}1孅9#ꭨ靶v\u0014喈)vw祔}룼쮿I",
+                                                               -2.7033457331882025E18,
+                                                               {
+                                                                ";⚃^㱋x:饬ኡj'꧵T☽O㔬RO婎?향ᒭ搩$渣y4i;(Q>꿘e8q": "j~錘}0g;L萺*;ᕭꄮ0l潛烢5H▄쳂ꏒוֹꙶT犘≫x閦웧v",
+                                                                "~揯\u2018c4職렁E~ᑅቚꈂ?nq뎤.:慹`F햘+%鉎O瀜쟏敛菮⍌浢<\/㮺紿P鳆ࠉ8I-o?#jﮨ7v3Dt赻J9": null,
+                                                                "ࣝW䌈0ꍎqC逖,횅c၃swj;jJS櫍5槗OaB>D踾Y": {"㒰䵝F%?59.㍈cᕨ흕틎ḏ㋩B=9IېⓌ{:9.yw}呰ㆮ肒᎒tI㾴62\"ዃ抡C﹬B<\/<EO꽓ᇕu&鋫\\禞퐹u꒍.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+                                                                 5.5099570884646902E18,
+                                                                 "uQN濿m臇<%?谣鮢s]]x0躩慌闋<;( 鋤.0ᠵd1#벘a:Gs?햷'.)ㅴ䞟琯崈FS@O㌛ᓬ抢큌ើ냷쿟툥IZn[惵ꐧ3뙍[&v憙J>촋jo朣",
+                                                                 [
+                                                                  -7675533242647793366,
+                                                                  {"ᙧ呃:[㒺쳀쌡쏂H稈㢤\u001dᶗGG-{GHྻຊꡃ哸䵬;$?&d\\⥬こN圴됤挨-'ꕮ$PU%?冕눖i魁q騎Q": [
+                                                                   false,
+                                                                   [[
+                                                                    7929823049157504248,
+                                                                    [[
+                                                                     true,
+                                                                     "Z菙\u0017'eꕤ᱕l,0\\X\u001c[=雿8蠬L<\/낲긯W99g톉4ퟋb㝺\u0007劁'!麕Q궈oW:@X၎z蘻m絙璩귓죉+3柚怫tS捇蒣䝠-擶D[0=퉿8)q0ٟ",
+                                                                     "唉\nFA椭穒巯\\䥴䅺鿤S#b迅獘 ﶗ꬘\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡ틍\"㙙Eh@oA賑㗠y必Nꊑᗘ",
+                                                                     -2154220236962890773,
+                                                                     -3.2442003245397908E18,
+                                                                     "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+                                                                     -7857990034281549164,
+                                                                     1.44283696979059942E18,
+                                                                     null,
+                                                                     {"ꫯAw跭喀 ?_9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rỏ": [
+                                                                      7.393662029337442E15,
+                                                                      3564680942654233068,
+                                                                      [
+                                                                       false,
+                                                                       -5253931502642112194,
+                                                                       "煉\\辎ೆ罍5⒭1䪁䃑s䎢:[e5}峳ﴱn騎3?腳Hyꏃ膼N潭錖,Yᝋ˜YAၓ㬠bG렣䰣:",
+                                                                       true,
+                                                                       null,
+                                                                       {
+                                                                        "⒛'P&%죮|:⫶춞": -3818336746965687085,
+                                                                        "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+                                                                         -8757574841556350607,
+                                                                         -3045234949333270161,
+                                                                         null,
+                                                                         {
+                                                                          "Ꮬr輳>⫇9hU##w@귪A\\C 鋺㘓ꖐ梒뒬묹㹻+郸嬏윤'+g<\/碴,}ꙫ>손;情d齆J䬁ຩ撛챝탹/R澡7剌tꤼ?ặ!`⏲睤\u00002똥଴⟏": null,
+                                                                          "\u20f2ܹe\\tAꥍư\\x当뿖렉禛;G檳ﯪS૰3~㘠#[J<}{奲 5箉⨔{놁<\/釿抋,嚠/曳m&WaOvT赋皺璑텁": [[
+                                                                           false,
+                                                                           null,
+                                                                           true,
+                                                                           -5.7131445659795661E18,
+                                                                           "萭m䓪D5|3婁ఞ>蠇晼6nﴺPp禽羱DS<睓닫屚삏姿",
+                                                                           true,
+                                                                           [
+                                                                            -8759747687917306831,
+                                                                            {
+                                                                             ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬ@ᴔ쨺芛髿UT퓻春<\/yꏸ>豚W釺N뜨^?꽴﨟5殺ᗃ翐%>퍂ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013P汴G5썓揘": 4.342729067882445E-18,
+                                                                             "Q^즾眆@AN\u0011Kb榰냎Y#䝀ꀒᳺ'q暇睵s\"!3#I⊆畼寤@HxJ9": false,
+                                                                             "⿾D[)袨㇩i]웪䀤ᛰMvR<蟏㣨": {"v퇓L㪱ꖣ豛톤\\곱#kDTN": [{
+                                                                              "(쾴䡣,寴ph(C\"㳶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qd鵔": {"娇堰孹L錮h嵅⛤躏顒?CglN束+쨣ﺜ\\MrH": {"獞䎇둃ቲ弭팭^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{ڒ䭷ᶼ靜pI荗虶K$": [{"◖S~躘蒉꫿輜譝Q㽙闐@ᢗ¥E榁iء5┄^B[絮跉ᰥ遙PWi3wㄾⵀDJ9!w㞣ᄎ{듒ꓓb6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+                                                                               654120831325413520,
+                                                                               -1.9562073916357608E-19,
+                                                                               {
+                                                                                "DC(昐衵ἡ긙갵姭|֛[t": 7.6979110359897907E18,
+                                                                                "J␅))嫼❳9Xfd飉j7猬ᩉ+⤻眗벎E鰉Zᄊ63zၝ69}ZᶐL崭ᦥ⡦靚⋛ꎨ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+                                                                                "p꣑팱쒬ꎑ뛡Ꙩ挴恍胔&7ᔈ묒4Hd硶훐㎖zꢼ豍㿢aሃ=<\/湉鵲EӅ%$F!퍶棌孼{O駍਺geu+": ")\u001b잓kŀX쩫A밁®ڣ癦狢)扔弒p}k縕ꩋ,䃉tࣼi",
+                                                                                "ァF肿輸<솄G-䢹䛸ꊏl`Tqꕗ蒞a氷⸅ᴉ蠰]S/{J왲m5{9.uέ~㕚㣹u>x8U讁B덺襪盎QhVS맅킃i识{벂磄Iහ䙅xZy/抍૭Z鲁-霳V据挦ℒ": null,
+                                                                                "㯛|Nꐸb7ⵐb?拠O\u0014ކ?-(EꞨ4ꕷᄤYᯕOW瞺~螸\"욿ќ<u鵵઎⸊倾쑷෻rT⪄牤銱;W殆͢芄ਰ嚝훚샢⊿+㲽": null,
+                                                                                "単逆ົ%_맛d)zJ%3칧_릟#95䌨怡\u001ci턠ॣi冘4赖'ਐ䧐_栔!": {
+                                                                                 "*?2~4㲌᭳쯁ftႷ1#oJ\b䊇镇됔 \u2079x䛁㊝ᮂN;穽跖s휇ᣄ홄傷z⸷(霸!3y뺏M쒿햏۽v㳉tở心3黎v쭻 Rp཮Vr~T?&˴k糒븥쩩r*D": null,
+                                                                                 "8@~홟ꔘk1[": -5570970366240640754,
+                                                                                 "BZt鏦ꡬc餖  s(mᛴ\u0000◄d腑t84C⟐坯VṊ뉙'噱Ꝕ珽GC顀?허0ꞹ&돇䛭C䷫](": 2.4303828213012387E-20,
+                                                                                 "y撔Z외放+}ḑ骈ᙝ&\u0016`G便2|-e]঳?QF㜹YF\"㿒緄햷㈟塚䷦ୀጤlM蘸N㾆▛럪㞂tᕬ镈쇝喠l amcxPnm\u001a᱋<\/]_]ﻹ瞧?H": false,
+                                                                                 "ፏ氏묢뜚I[♺뽛x?0H봬Wpn꨹Ra䝿쌑{㴂ni祻윸A'y|⺴ᚘ庌9{$恲{톽=m#@6ᨧfgs44陎J#<Ễ쨓瀵❩a୛㷉㙉ܸ◠냔嬯~呄籁羥镳": false,
+                                                                                 "㘱{<頬22?IF@곊I겂嶻L᝛D{@r쒂?IAᣧ洪惒誸b徂z췺꾍㠭\\刊%禨쌐ⶣ仵\\P[:47;<ᇅ<\/": {
+                                                                                  "^U釳-v㢈ꗝ◄菘rᜨi;起kR犺䵫\u0000锍쁙m-ԙ!lḃ꛸뻾F(W귛y": "#ᠺH㸢5v8_洑C",
+                                                                                  "䔵໳$ᙠ6菞\u206e摎q圩P|慍sV4:㜾(I溞I?": -6569206717947549676,
+                                                                                  "透Ꞃ緵퇝8 >e㺰\"'㌢ƐW\u0004瞕>0?V鷵엳": true,
+                                                                                  "뤥G\\迋䠿[庩'꼡\u001aiᩮV쯁ᳪ䦪Ô;倱ନ뛁誈": null,
+                                                                                  "쥹䄆䚟Q榁䎐᢭<\/2㕣p}HW蟔|䃏꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+                                                                                   "Y?֭$>#cVBꩨ:>eL蒁務": {
+                                                                                    "86柡0po 䏚&-捑Ћ祌<\/휃-G*㶢הּ쩍s㶟餇c걺yu꽎還5*턧簕Og婥SꝐ": null,
+                                                                                    "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+                                                                                     ";⯭ﱢ!买F⽍柤鶂n䵣V㫚墱2렾ELEl⣆": [
+                                                                                      true,
+                                                                                      -3.6479311868339015E-18,
+                                                                                      -7270785619461995400,
+                                                                                      3.334081886177621E18,
+                                                                                      2.581457786298155E18,
+                                                                                      -6.605252412954115E-20,
+                                                                                      -3.9232347037744167E-20,
+                                                                                      {
+                                                                                       "B6㊕.k1": null,
+                                                                                       "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+                                                                                        "ᕅ}럡}.@y陪鶁r業'援퀉x䉴ﵴl퍘):씭脴ᥞhiꃰblﲂ䡲엕8߇M㶭0燋標挝-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"a췩v礗X⋈耓ፊf罅靮!㔽YYᣓw澍33⎔芲F|\"䜏T↮輦挑6ᓘL侘?ᅥ]덆1R௯✎餘6ꏽ<\/௨\\?q喷ꁫj~@ulq": {"嗫欆뾔Xꆹ4H㌋F嵧]ࠎ]㠖1ꞤT<$m뫏O i댳0䲝i": {"?෩?\u20cd슮|ꯆjs{?d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:뼣v䊭諱Yj択cVmR䩃㘬T\"N홝*ै%x^F\\_s9보zz4淗?q": [
+                                                                                         null,
+                                                                                         "?",
+                                                                                         2941869570821073737,
+                                                                                         "{5{殇0䝾g6밖퍋臩綹R$䖭j紋釰7sXI繳漪행y",
+                                                                                         false,
+                                                                                         "aH磂?뛡#惇d婅?Fe,쐘+늵䍘\"3r瘆唊勐j⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴᝔M2㳗必꧂淲?ゥ젯檢<8끒MidX䏒3᳻Q▮佐UT|⤪봦靏⊏",
+                                                                                         [[{
+                                                                                          "颉(&뜸귙{y^\"P퟉춝Ჟ䮭D顡9=?}Y誱<$b뱣RvO8cH煉@tk~4ǂ⤧⩝屋SS;J{vV#剤餓ᯅc?#a6D,s": [
+                                                                                           -7.8781018564821536E16,
+                                                                                           true,
+                                                                                           [
+                                                                                            -2.28770899315832371E18,
+                                                                                            false,
+                                                                                            -1.0863912140143876E-20,
+                                                                                            -6282721572097446995,
+                                                                                            6767121921199223078,
+                                                                                            -2545487755405567831,
+                                                                                            false,
+                                                                                            null,
+                                                                                            -9065970397975641765,
+                                                                                            [
+                                                                                             -5.928721243413937E-20,
+                                                                                             {"6촊\u001a홯kB0w撨燠룉{绎6⳹!턍贑y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"r䝐7毟ᝰr惃3ꉭE+>僒澐": [
+                                                                                              "Ta쎩aƝt쵯ⰪVb",
+                                                                                              [
+                                                                                               -5222472249213580702,
+                                                                                               null,
+                                                                                               -2851641861541559595,
+                                                                                               null,
+                                                                                               4808804630502809099,
+                                                                                               5657671602244269874,
+                                                                                               "5犲﨣4mᥣ?yf젫꾯|䋬잁$`Iⳉﴷ扳兝,'c",
+                                                                                               false,
+                                                                                               [
+                                                                                                null,
+                                                                                                {
+                                                                                                 "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4c5S熯A<\/\6U윲蹴Q=%푫汹\\\u20614b[௒C⒥Xe⊇囙b,服3ss땊뢍i~逇PA쇸1": -2.63273619193485312E17,
+                                                                                                 "Mq꺋貘k휕=nK硍뫞輩>㾆~἞ࡹ긐榵l⋙Hw뮢帋M엳뢯v⅃^": 1877913476688465125,
+                                                                                                 "ᶴ뻗`~筗免⚽টW˃⽝b犳䓺Iz篤p;乨A\u20ef쩏?疊m㝀컩뫡b탔鄃ᾈV(遢珳=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄፷Ed&c﯄伮1p": null,
+                                                                                                 "⯁w4曢\"(欷輡": "\"M᭫]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+                                                                                                 "㣡Oᄦ昵⫮Y祎S쐐級㭻撥>{I$": -378474210562741663,
+                                                                                                 "䛒掷留Q%쓗1*1J*끓헩ᦢ﫫哉쩧EↅIcꅡ\\?ⴊl귛顮4": false,
+                                                                                                 "寔愆샠5]䗄IH贈=d﯊/偶?ॊn%晥D視N򗘈'᫂⚦|X쵩넽z질tskxDQ莮Aoﱻ뛓": true,
+                                                                                                 "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚?Q绊": -3034854258736382234,
+                                                                                                 "꺲໣眀)⿷J暘pИfAV삕쳭Nꯗ4々'唄ⶑ伻㷯騑倭D*Ok꧁3b␽_<\/챣Xm톰ၕ䆄`*fl㭀暮滠毡?": [
+                                                                                                  "D男p`V뙸擨忝븪9c麺`淂⢦Yw⡢+kzܖ\fY1䬡H歁)벾Z♤溊-혰셢?1<-\u0005;搢Tᐁle\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+                                                                                                  [
+                                                                                                   null,
+                                                                                                   [{"-췫揲ᬨ墊臸<ࠒH跥 㔭쥃㫯W=z[wধ╌<~yW楄S!⑻h즓lĖN￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄r擁鐬y6VF<\/6랿p)麡ꁠ㪁\"pழe": [
+                                                                                                    "#幎杴颒嶈)ㄛJ.嶤26_⋌东챯ꠉ⤋ؚ/⏚%秼Q룠QGztᄎ㎷អI翰Xp睔鍜ꨍ",
+                                                                                                    {",T?": [
+                                                                                                     false,
+                                                                                                     [[
+                                                                                                      true,
+                                                                                                      7974824014498027996,
+                                                                                                      false,
+                                                                                                      [
+                                                                                                       4.3305464880956252E18,
+                                                                                                       {
+                                                                                                        "᱿W^A]'rᮢ)鏥z餝;Hu\\Fk?ﴺ?IG浅-䙧>訝-xJ;巡8깊蠝ﻓU$K": {
+                                                                                                         "Vꕡ諅搓W=斸s︪vﲜ츧$)iꡟ싉e寳?ጭムVથ嵬i楝Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤t糳]罛逇dṌ֣XHiͦ{": true,
+                                                                                                         "Ya矲C멗Q9膲墅携휻c\\딶G甔<\/.齵휴": -1.1456247877031811E-19,
+                                                                                                         "z#.OO￝J": -8263224695871959017,
+                                                                                                         "崍_3夼ᮟ1F븍뽯ᦓ鴭V豈Ь": [{
+                                                                                                          "N蒬74": null,
+                                                                                                          "yuB?厅vK笗!ᔸcXQ旦컶P-녫mᄉ麟_": "1R@ 톘xa_|﩯遘s槞d!d껀筤⬫薐焵먑D{\\6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMܭ8nX㩴䕅檹E\u0007ﭨN 2 ℆涐ꥏ꠵3▙玽|됨_\u2048",
+                                                                                                          "恐A C䧩G": {":M큣5e들\\ꍀ恼ᔄ靸|I﨏$)n": {
+                                                                                                           "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/ೢC쳖?2浓uO.䰴": "ཐ꼋e?``,ᚇ慐^8ꜙNM䂱\u0001IᖙꝧM'vKdꌊH牮r\\O@䊷ᓵ쀆(fy聻i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072l慪y꺜ﲖTj+u",
+                                                                                                           "뽫<G;稳UL⸙q2n쵿C396炿J蓡z⣁zဩSOU?<\/뙍oE큸O鿅෴ꍈEm#\"[瑦⤫ᝆgl⡗q8\"큘덥係@ᆤ=\u0001爖羝췀㸩b9\\jeqt㟿㮸龾m㳳긄": {
+                                                                                                            "9\"V霟釜{/o0嫲C咀-饷䈍[녩)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)萨ꖤ誥煽:14⫻57U$擒䲐薡Qvↇ櫲현誧?nஷ6": {"l웾䌵.䅋䦝ic碳g[糲Ƿ-ឈᚱ4쑧\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉m揈W儅톳뗳䓆7㭽諤T煠Ney?0᪵鈑&": [
+                                                                                                             false,
+                                                                                                             null,
+                                                                                                             {
+                                                                                                              "\r;鼶j᠂꼍RLz~♔9gf?ӡ浐": -1.4843072575250897E-19,
+                                                                                                              "&ꊒ\"ꋟ䝭E诮ﯚO?SW뒁훪mb旙⎕ᗕ⶙|ᷤ5y4甥": "j5|庠t铱?v 횋0\"'rxz䃢杺Ɜ!\u0002",
+                                                                                                              "Q ၩ㟧": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6呠Z솋R.࿶g8": [
+                                                                                                               -8762672252886298799,
+                                                                                                               -1.9486830507000208E17,
+                                                                                                               null,
+                                                                                                               -7157359405410123024,
+                                                                                                               null,
+                                                                                                               null,
+                                                                                                               -995856734219489233,
+                                                                                                               "呧㫹A4!",
+                                                                                                               null,
+                                                                                                               -1.9105609358624648E-19,
+                                                                                                               5888184370445333848,
+                                                                                                               2.25460605078245E-19,
+                                                                                                               2.5302739297121987E18,
+                                                                                                               "뢹sbEf捵2丯?뗾耸(Wd띙SବꭖrtU?筤P똙QpbbKqaE$来V웰3i/lK퉜,8︸e= g螓t竦컼?.寋8鵗",
+                                                                                                               7377742975895263424,
+                                                                                                               2.4218442017790503E-19,
+                                                                                                               {
+                                                                                                                "y꒚ཫ쨘醬킃糟}yTSt䡀⇂뿽4ൢ戰U": [[
+                                                                                                                 3600537227234741875,
+                                                                                                                 4435474101760273035,
+                                                                                                                 -1.42274517007951795E18,
+                                                                                                                 -5567915915496026866,
+                                                                                                                 null,
+                                                                                                                 null,
+                                                                                                                 [
+                                                                                                                  -3204084299154861161,
+                                                                                                                  {
+                                                                                                                   "7梧慸憏.a瘎\u00041U鵮Ck֨d惥耍ⳡY,⭏써E垁FFI鱑ⳬ줢7⧵Bﴠ耘줕햸q컴~*瑍W.떛ࡆ@'᐀+轳": -961121410259132975,
+                                                                                                                   "⥅]l黭㣓绶;!!⎃=朼㐿e&ἂ繤C﯀l䝣㌀6TM쑮w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫脐\\\"쎪ὴ砇宖^M泼큥➅鈫@ᄟ༩\u2008⥼": true,
+                                                                                                                   "⩐\"籽汎P싯鲘蟼sRᐯ䅩\u0019R(kRᖁ&ಌ 0\"鳶!馼YH": null,
+                                                                                                                   "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+                                                                                                                    -6806235313106257498,
+                                                                                                                    null,
+                                                                                                                    "}N⸿讽sꚪ;\\p繇j苄䫨\u20e7%5x?t#",
+                                                                                                                    {
+                                                                                                                     "O〗k<墻yV$ఁrs-c1ఌ唪.C7_Yobᦜ褷'b帰mㄑl⌅": {"qB뗗擄3隂5뺍櫂䱟e촸P/鏩,3掁ꗩ=冉棓㑉|˞F襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2I㽝勒*I홱鍧粿~曟㤙2绥Ly6+썃uu鿜בf큘|歍ࣖÉ": [
+                                                                                                                      ">hh䈵w>1ⲏ쐭V[ⅎ\\헑벑F_㖝⠗㫇h恽;῝汰ᱼ瀖J옆9RR셏vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+                                                                                                                      null,
+                                                                                                                      2.0150326776036215E-19,
+                                                                                                                      null,
+                                                                                                                      true,
+                                                                                                                      false,
+                                                                                                                      true,
+                                                                                                                      {"\fa᭶P捤WWc᠟f뚉ᬏ퓗ⳀW睹5:HXH=q7x찙X$)모r뚥ᆟ!Jﳸf": [
+                                                                                                                       -2995806398034583407,
+                                                                                                                       [
+                                                                                                                        6441377066589744683,
+                                                                                                                        "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{谥'꡾뱻:.ꘘ굄奉攼Di᷑K鶲y繈욊阓v㻘}枭캗e矮1c?휐\"4\u0005厑莔뀾墓낝⽴洗ṹ䇃糞@b1\u0016즽Y轹",
+                                                                                                                        {
+                                                                                                                         "1⽕⌰鉟픏M㤭n⧴ỼD#%鐘⊯쿼稁븣몐紧ᅇ㓕ᛖcw嬀~ഌ㖓(0r⧦Q䑕髍ര铂㓻R儮\"@ꇱm❈௿᦯頌8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+                                                                                                                         "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮荋벲TLP预庰܈G\\O@VD'鱃#乖끺*鑪ꬳ?Mޞdﭹ{␇圯쇜㼞顄︖Y홡g": [{
+                                                                                                                          "0a,FZ": true,
+                                                                                                                          "2z̬蝣ꧦ驸\u0006L↛Ḣ4๚뿀'?lcwᄧ㐮!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:똍!FBe?鰴㨗0O财I藻ʔWA᫓G쳛u`<\/I": [{
+                                                                                                                           "$τ5V鴐a뾆両環iZp頻යn븃v": -4869131188151215571,
+                                                                                                                           "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+                                                                                                                            "洤湌鲒)⟻\\䥳va}PeAMnN[": "㐳ɪ/(軆lZR,Cp殍ȮN啷\"3B婴?i=r$펽ᤐ쀸",
+                                                                                                                            "阄R4㒿㯔ڀ69ZᲦ2癁핌噗P崜#\\-쭍袛&鐑/$4童V꩑_ZHA澢fZ3": {"x;P{긳:G閉:9?活H": [
+                                                                                                                             "繺漮6?z犞焃슳\">ỏ[Ⳛ䌜녏䂹>聵⼶煜Y桥[泥뚩MvK$4jtロ",
+                                                                                                                             "E#갶霠좭㦻ୗ먵F+䪀o蝒ba쮎4X㣵 h",
+                                                                                                                             -335836610224228782,
+                                                                                                                             null,
+                                                                                                                             null,
+                                                                                                                             [
+                                                                                                                              "r1᫩0>danjY짿bs{",
+                                                                                                                              [
+                                                                                                                               -9.594464059325631E-23,
+                                                                                                                               1.0456894622831624E-20,
+                                                                                                                               null,
+                                                                                                                               5.803973284253454E-20,
+                                                                                                                               -8141787905188892123,
+                                                                                                                               true,
+                                                                                                                               -4735305442504973382,
+                                                                                                                               9.513150514479281E-20,
+                                                                                                                               "7넳$螔忷㶪}䪪l짴\u0007鹁P鰚HF銏ZJﳴ/⍎1ᷓ忉睇ᜋ쓈x뵠m䷐窥Ꮤ^\u0019ᶌ偭#ヂt☆၃pᎍ臶䟱5$䰵&๵分숝]䝈뉍♂坎\u0011<>",
+                                                                                                                               "C蒑貑藁lﰰ}X喇몛;t밿O7/᯹f\u0015kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??R校s脚",
+                                                                                                                               {
+                                                                                                                                "9珵戬+AU^洘拻ቒy柭床'粙XG鞕᠜繀伪%]hC,$輙?Ut乖Qm떚W8઼}~q⠪rU䤶CQ痗ig@#≲t샌f㈥酧l;y闥ZH斦e⸬]j⸗?ঢ拻퀆滌": null,
+                                                                                                                                "畯}㧢J罚帐VX㨑>1ꢶkT⿄蘥㝑o|<嗸層沈挄GEOM@-䞚䧰$만峬輏䠱V✩5宸-揂D'㗪yP掶7b⠟J㕻SfP?d}v㼂Ꮕ'猘": {
+                                                                                                                                 "陓y잀v>╪": null,
+                                                                                                                                 "鬿L+7:됑Y=焠U;킻䯌잫!韎ஔ\f": {
+                                                                                                                                  "駫WmGጶ": {
+                                                                                                                                   "\\~m6狩K": -2586304199791962143,
+                                                                                                                                   "ႜࠀ%͑l⿅D.瑢Dk%0紪dḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲鐜6C": {
+                                                                                                                                    "_췤a圷1\u000eB-XOy缿請∎$`쳌eZ~杁튻/蜞`塣৙\"⪰\"沒l}蕌\\롃荫氌.望wZ|o!)Hn獝qg}": null,
+                                                                                                                                    "kOSܧ䖨钨:಼鉝ꭝO醧S`십`ꓭ쭁ﯢN&Et㺪馻㍢ⅳ㢺崡ຊ蜚锫\\%ahx켨|ż劻ꎄ㢄쐟A躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*b㕷63z": {
+                                                                                                                                     ":L5r+T㡲": [{
+                                                                                                                                      "VK泓돲ᮙRy㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇枝7G藯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+                                                                                                                                      "`⛝ᘑ$(खꊲ⤖ᄁꤒ䦦3=)]Y㢌跨NĴ驳줟秠++d孳>8ᎊ떩EꡣSv룃 쯫أ?#E|᭙㎐?zv:5祉^⋑V": [
+                                                                                                                                       -1.4691944435285607E-19,
+                                                                                                                                       3.4128661569395795E17,
+                                                                                                                                       "㐃촗^G9佭龶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ꩵᛅⳍ搿L팹Lවn=\"慉념ᛮy>!`g!풲晴[/;?[v겁軇}⤳⤁핏∌T㽲R홓遉㓥",
+                                                                                                                                       "愰_⮹T䓒妒閤둥?0aB@㈧g焻-#~跬x<\/舁P݄ꐡ=\\׳P\u0015jᳪᢁq;㯏l%᭗;砢觨▝,謁ꍰGy?躤O黩퍋Y㒝a擯\n7覌똟_䔡]fJ晋IAS",
+                                                                                                                                       4367930106786121250,
+                                                                                                                                       -4.9421193149720582E17,
+                                                                                                                                       null,
+                                                                                                                                       {
+                                                                                                                                        ";ᄌ똾柉곟ⰺKpፇ䱻ฺ䖝{o~h!eꁿ઻욄ښ\u0002y?xUd\u207c悜ꌭ": [
+                                                                                                                                         1.6010824122815255E-19,
+                                                                                                                                         [
+                                                                                                                                          "宨︩9앉檥pr쇷?WxLb",
+                                                                                                                                          "氇9】J玚\u000f옛呲~ 輠1D嬛,*mW3?n휂糊γ虻*ᴫ꾠?q凐趗Ko↦GT铮",
+                                                                                                                                          "㶢ថmO㍔k'诔栀Z蛟}GZ钹D",
+                                                                                                                                          false,
+                                                                                                                                          -6.366995517736813E-20,
+                                                                                                                                          -4894479530745302899,
+                                                                                                                                          null,
+                                                                                                                                          "V%᫡II璅䅛䓎풹ﱢ/pU9se되뛞x梔~C)䨧䩻蜺(g㘚R?/Ự[忓C뾠ࢤc왈邠买?嫥挤풜隊枕",
+                                                                                                                                          ",v碍喔㌲쟚蔚톬៓ꭶ",
+                                                                                                                                          3.9625444752577524E-19,
+                                                                                                                                          null,
+                                                                                                                                          [
+                                                                                                                                           "kO8란뿒䱕馔b臻⍟隨\"㜮鲣Yq5m퐔<u뷆c譆\u001bN?<",
+                                                                                                                                           [{
+                                                                                                                                            ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈ᝦ=P^6탲@䧔%$CqSw铜랊0&m⟭<\/a逎ym\u0013vᯗ": true,
+                                                                                                                                            "洫`|XN뤮\u0018詞=紩鴘_sX)㯅鿻Ố싹": 7.168252736947373E-20,
+                                                                                                                                            "ꛊ饤ﴏ袁(逊+~⽫얢鈮艬O힉7D筗S곯w操I斞᠈븘蓷x": [[[[
+                                                                                                                                             -7.3136069426336952E18,
+                                                                                                                                             -2.13572396712722688E18,
+                                                                                                                                             {
+                                                                                                                                              "硢3㇩R:o칢行E<=\u0018ၬYuH!\u00044U%卝炼2>\u001eSi$⓷ꒈ'렢gᙫ番ꯒ㛹럥嶀澈v;葷鄕x蓎\\惩+稘UEᖸﳊ㊈壋N嫿⏾挎,袯苷ኢ\\x|3c": 7540762493381776411,
+                                                                                                                                              "?!*^ᢏ窯?\u0001ڔꙃw虜돳FgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹㔏똩Ԛ耦Wt轁\\枒^\\ꩵ}}}ꀣD\\]6M_⌫)H豣:36섘㑜": {
+                                                                                                                                               ";홗ᰰU஋㙛`D왔ཿЃS회爁\u001b-㢈`봆?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=Rɠ峭q\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+                                                                                                                                                true,
+                                                                                                                                                true,
+                                                                                                                                                {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+                                                                                                                                                 "폆介fM暪$9K[ㄇ샍큳撦g撟恸jҐF㹹aj bHᘀ踉ꎐC粄 a?\u000fK즉郝 幨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆k멀{䢹~?D<\/꼢XR\u001b〱䝽꼨i㘀ḟ㚺A-挸",
+                                                                                                                                                 false,
+                                                                                                                                                 null,
+                                                                                                                                                 -1.1710758021294953E-20,
+                                                                                                                                                 3996737830256461142,
+                                                                                                                                                 true,
+                                                                                                                                                 null,
+                                                                                                                                                 -8271596984134071193,
+                                                                                                                                                 "_1G퉁텑m䮔鰼6멲Nmꇩſt쓟튍N许FDj+3^ﶜ⎸\u0019⤕橥!\"s-뾞lz北׸ꍚ랬)?l⻮고i䑰\u001f䪬",
+                                                                                                                                                 4.459124464204517E-19,
+                                                                                                                                                 -4.0967172848578447E18,
+                                                                                                                                                 5643211135841796287,
+                                                                                                                                                 -9.482336221192844E-19,
+                                                                                                                                                 "౪冏釶9D?s螭X榈枸j2秀v]泌鰚岒聵轀쌶i텽qMbL]R,",
+                                                                                                                                                 null,
+                                                                                                                                                 [
+                                                                                                                                                  null,
+                                                                                                                                                  {"M쪊ꯪ@;\u0011罙ꕅ<e᝺|爑Yⵝ<\/&ᩎ<腊ሑᮔ੃F豭": [
+                                                                                                                                                   "^0࡟1볏P폋ፏ杈F⨥Iꂴ\"z磣VⅡ=8퀝2]䢹h1\u0017{jT<I煛5%D셍S⑙⅏J*샐 巙ດ;᧡䙞",
+                                                                                                                                                   [{
+                                                                                                                                                    "'㶡큾鄧`跊\"gV[?u᭒Ʊ髷%葉굵a띦N켧Qﯳy%y䩟髒L䯜S䵳r絅肾킂ၐ'ꔦg긓a'@혔যW谁ᝬF栩ŷ+7w鞚": 6.3544416675584832E17,
+                                                                                                                                                    "苎脷v改hm쏵|㋊g_ᔐ 뒨蹨峟썎㷸|Ο刢?Gͨ옛-?GꦱIEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+                                                                                                                                                    "誰?(H]N맘]k洳\"q蒧蘞!R퐫\\(Q$T5N堍⫣윿6|럦속︅ﭗ(": [
+                                                                                                                                                     "峩_\u0003A瘘?✓[硫䎯ၽuጭ\"@Y綅첞m榾=贮9R벿῜Z",
+                                                                                                                                                     null,
+                                                                                                                                                     "䰉㗹㷾Iaᝃqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_칍樖庫9꩝쪹ᘹ䑖瀍aK ?*趤f뭓廝p=磕",
+                                                                                                                                                     "哑z懅ᤏ-ꍹux쀭",
+                                                                                                                                                     [
+                                                                                                                                                      true,
+                                                                                                                                                      3998739591332339511,
+                                                                                                                                                      "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/k鏔䍧2l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ꮧ,O嫚m ࡭`KH葦:粘i]aSU쓙$쐂f+詛頖b",
+                                                                                                                                                      [{"^<9<箝&絡;%i﫡2攑紴\\켉h쓙-柂䚝ven\u20f7浯-Ꮏ\r^훁䓚헬\u000e?\\ㅡֺJ떷VOt": [{
+                                                                                                                                                       "-௄卶k㘆혐஽y⎱㢬sS઄+^瞥h;ᾷj;抭\u0003밫f<\/5Ⱗ裏_朻%*[-撵䷮彈-芈": {
+                                                                                                                                                        "㩩p3篊G|宮hz䑊o곥j^Co0": [
+                                                                                                                                                         653239109285256503,
+                                                                                                                                                         {"궲?|\":N1ۿ氃NZ#깩:쇡o8킗ࡊ[\"됸Po핇1(6鰏$膓}⽐*)渽J'DN<썙긘毦끲Ys칖": {
+                                                                                                                                                          "2Pr?Xjㆠ?搮/?㓦柖馃5뚣Nᦼ|铢r衴㩖\"甝湗ܝ憍": "\"뾯i띇筝牻$珲/4ka $匝휴译zbAᩁꇸ瑅&뵲衯ꎀᆿ7@ꈋ'ᶨH@ᠴl+",
+                                                                                                                                                          "7뢽뚐v?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dv祴X⼹\\a8y5坆": true,
+                                                                                                                                                          "o뼄B욞羁hr﷔폘뒚⿛U5pꪴfg!6\\\"爑쏍䢱W<ﶕ\\텣珇oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺翁艩nl F⤿蠜": 1695826030502619742,
+                                                                                                                                                          "ۊ깖>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]찠?ݾ2饺蹳ぶꌭ訍\"◹ᬁD鯎4e滨T輀ﵣ੃3\u20f3킙D瘮g\\擦+泙ၧ 鬹ﯨַ肋7놷郟lP冝{ߒhড়r5,꓋": null,
+                                                                                                                                                          "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+                                                                                                                                                          "䎥eᾆᝦ읉,Jުn岪㥐s搖謽䚔5t㯏㰳㱊ZhD䃭f絕s鋡篟a`Q鬃┦鸳n_靂(E4迠_觅뷝_宪D(NL疶hL追V熑%]v肫=惂!㇫5⬒\u001f喺4랪옑": {
+                                                                                                                                                           "2a輍85먙R㮧㚪Sm}E2yꆣꫨrRym㐱膶ᔨ\\t綾A☰.焄뙗9<쫷챻䒵셴᭛䮜.<\/慌꽒9叻Ok䰊Z㥪幸k": [
+                                                                                                                                                            null,
+                                                                                                                                                            true,
+                                                                                                                                                            {"쌞쐍": {
+                                                                                                                                                             "▟GL K2i뛱iQ\"̠.옛1X$}涺]靎懠ڦ늷?tf灟ݞゟ{": 1.227740268699265E-19,
+                                                                                                                                                             "꒶]퓚%ฬK❅": [{
+                                                                                                                                                              "(ෛ@Ǯっ䧼䵤[aテൖvEnAdU렖뗈@볓yꈪ,mԴ|꟢캁(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2襏B箹)俣eỻw䇄",
+                                                                                                                                                              "75༂f詳䅫ꐧ鏿 }3\u20b5'∓䝱虀f菼Iq鈆﨤g퍩)BFa왢d0뮪痮M鋡nw∵謊;ꝧf美箈ḋ*\u001c`퇚퐋䳫$!V#N㹲抗ⱉ珎(V嵟鬒_b㳅\u0019": null,
+                                                                                                                                                              "e_m@(i㜀3ꦗ䕯䭰Oc+-련0뭦⢹苿蟰ꂏSV䰭勢덥.ྈ爑Vd,ᕥ=퀍)vz뱊ꈊB_6듯\"?{㒲&㵞뵫疝돡믈%Qw限,?\r枮\"? N~癃ruࡗdn&": null,
+                                                                                                                                                              "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXᭁ 9᪘": -2.423073789014103E18,
+                                                                                                                                                              "䝄瑄䢸穊f盈᥸,B뾧푗횵B1쟢f\u001f凄": "魖⚝2儉j꼂긾껢嗎0ࢇ纬xI4](੓`蕞;픬\fC\"斒\")2櫷I﹥迧",
+                                                                                                                                                              "ퟯ詔x悝령+T?Bg⥄섅kOeQ큼㻴*{E靼6氿L缋\u001c둌๶-㥂2==-츫I즃㠐Lg踞ꙂEG貨鞠\"\u0014d'.缗gI-lIb䋱ᎂDy缦?": null,
+                                                                                                                                                              "紝M㦁犿w浴詟棓쵫G:䜁?V2ힽ7N*n&㖊Nd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹ푍阉~ꅐ쵃#R^\u000bB䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-ま帳あ.j)qgu扐徣ਁZ鼗A9A鸦甈!k蔁喙:3T%&㠘+,䷞|챽v䚞문H<\/醯r셓㶾\\a볜卺zE䝷_죤ဵ뿰᎟CB": [
+                                                                                                                                                               6233512720017661219,
+                                                                                                                                                               null,
+                                                                                                                                                               -1638543730522713294,
+                                                                                                                                                               false,
+                                                                                                                                                               -8901187771615024724,
+                                                                                                                                                               [
+                                                                                                                                                                3891351109509829590,
+                                                                                                                                                                true,
+                                                                                                                                                                false,
+                                                                                                                                                                -1.03836679125188032E18,
+                                                                                                                                                                {
+                                                                                                                                                                 "<?起HCᷭ죎劐莇逰/{gs\u0014⽛㰾愫tᅱ<솞ڢ됌煲膺਻9x닳x࡭Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:ᭈh4緞痐䤴c뫚떩త<?ᕢ謚6]폛O鰐鋛镠贩赟\"<G♷1'": true,
+                                                                                                                                                                 "቙ht4ߝBqꦤ+\u0006멲趫灔)椾": -1100102890585798710,
+                                                                                                                                                                 "総兎곇뇸粟F醇;朠?厱楛㶆ⶏ7r⾛o꯬᳡F\\머幖 㜦\f[搦᥽㮣0䕊?J㊳뀄e㔔+?<n↴复": [
+                                                                                                                                                                  "4~ꉍ羁\\偮(泤叕빜\u0014>j랎:g曞ѕᘼ}链N",
+                                                                                                                                                                  -1.1103819473845426E-19,
+                                                                                                                                                                  true,
+                                                                                                                                                                  [
+                                                                                                                                                                   true,
+                                                                                                                                                                   null,
+                                                                                                                                                                   -7.9091791735309888E17,
+                                                                                                                                                                   true,
+                                                                                                                                                                   {"}蔰鋈+ꐨ啵0?g*사%`J?*": [{
+                                                                                                                                                                    "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+                                                                                                                                                                    ";饹়❀)皋`噿焒j(3⿏w>偍5X<np?<줯<Y]捘!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿K鷚눁'⭲m捠(䚻": [
+                                                                                                                                                                     "蹕 淜੃b\"+몾ⴕ",
+                                                                                                                                                                     null,
+                                                                                                                                                                     35892237756161615,
+                                                                                                                                                                     {
+                                                                                                                                                                      " 듹㏝)5慁箱&$~:遰쮐<\/堋?% \\勽唅z손帋䘺H髀麡M퇖uz\u0012m諦d᳤콌樝\rX싹̡Ო": -433791617729505482,
+                                                                                                                                                                      "-j溗ࢵcz!:}✽5ഇ,욨ݏs#덫=南浺^}E\\Y\\T*뼈cd꺐cۘ뎁䨸됱K䠴㉿恿逳@wf쏢<\/[L[": -9.3228549642908109E17,
+                                                                                                                                                                      "Ms킭u஗%\\u⍎/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬荤ᾞ৳.Gw\u000b": [
+                                                                                                                                                                       "0宜塙I@䏴蝉\\Uy뒅=2<h暒K._贡璐Yi檻_⮵uᐝ㘗聠[f\u0015힢Hꔮ}጑;誏yf0\"\u20cc?(=q斠➽5ꎾ鞘kⲃ",
+                                                                                                                                                                       -2.9234211354411E-19,
+                                                                                                                                                                       false,
+                                                                                                                                                                       true,
+                                                                                                                                                                       {
+                                                                                                                                                                        "\u0011⟴GH_;#怵:\u001c\u0002n1U\\p/왔(┫]hꐚ7\r0䵷첗岷O௷?㝎[殇|J=?韷pᶟ儜犆?5კ1kꍖiH竧뛈ପdmk游y(콪팱꾍k慧 y辣": [
+                                                                                                                                                                         false,
+                                                                                                                                                                         "O\"끍p覈ykv磂㢠㝵~뀬튍lC&4솎䇃:Mj",
+                                                                                                                                                                         -7.009964654003924E-20,
+                                                                                                                                                                         false,
+                                                                                                                                                                         -49306078522414046,
+                                                                                                                                                                         null,
+                                                                                                                                                                         null,
+                                                                                                                                                                         2160432477732354319,
+                                                                                                                                                                         true,
+                                                                                                                                                                         "4횡h+!踹ꐬP鮄{0&뱥M?샍鞅n㮞ᨹ?쒆毪l'箅^ꚥ頛`e㻨52柳⮙嫪࡟딯a.~䵮1f吘N&zȭL榓ۃ鳠5d㟆M@㣥ӋA΍q0縶$",
+                                                                                                                                                                         -3.848996532974368E16,
+                                                                                                                                                                         true,
+                                                                                                                                                                         null,
+                                                                                                                                                                         -3.5240055580952525E18,
+                                                                                                                                                                         {
+                                                                                                                                                                          " vﭷၵ#ce乃5僞?Z D`묨粇ᐔ绠vWL譢u뽀\\J|tⓙt№\"ꨋnT凮ᒩ蝂篝b騩:䢭Hbv읻峨z㹚T趗햆귣학津XiY@ᖥK": true,
+                                                                                                                                                                          "!F 醌y䉸W2ꇬ\u0006/䒏7~%9擛햀徉9⛰+?㌘;ꠓX䇻Dfi뼧쒒\u0012F謞՝絺+臕kऍLSQ쌁X쎬幦HZ98蒊枳": "澤令#\u001d抍⛳@N搕퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪聡x\u0007쌇MiX/|ミ뚁K8䁡W)銀q僞綂蔕E",
+                                                                                                                                                                          "6␲䣖R৞@ငg?<\/೴x陙Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿゝF\\쑞\u0012懦(Aᯕ灭~\u0001껮X?逊": 5.7566819207732864E17,
+                                                                                                                                                                          "[c?椓": false,
+                                                                                                                                                                          "k䒇": 2583824107104166717,
+                                                                                                                                                                          "꙯N훙㏅ﮒ燣㨊瞯咽jMxby뻭뵫װ[\"1畈?ৱL": "띣ᔂ魠羓犴ꚃ+|rY",
+                                                                                                                                                                          "녺Z?䬝鉉:?ⳙ瘏Cኯ.Vs[釿䨉쐧\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+                                                                                                                                                                           "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓p뭻\\ᇷ\f퇶_䰸h๐Q嵃訾㘑従ꯦ䞶jL틊r澵Omᾫ!H䱤팼/;|᭺I7슎YhuXi⚼": -1.352716906472438E-19,
+                                                                                                                                                                           "M⽇倻5J䂫औ᝔楸#J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿획땣T凊(m灦呜ﻝR㿎艴䂵h",
+                                                                                                                                                                           "R띾k힪CH钙_i苮ⰵoᾨ紑퉎7h؉\"柀蝽z0့\"<?嘭$蜝?礲7岇槀묡?V钿T⣜v+솒灚ԛ2米mH?>薙婏聿3aFÆÝ": "2,ꓴg?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$珧`m雁瑊ඖ鯬cꙉ梢f묛bB",
+                                                                                                                                                                           "♽n$YjKiXX*GO贩鏃豮祴遞K醞眡}ꗨv嵎꼷0୸+M菋eH徸J꣆:⼐悥B켽迚㯃b諂\u000bjꠜ碱逮m8": [
+                                                                                                                                                                            "푷᣺ﻯd8ﱖ嬇ភH鹎⡱᱅0g:果6$GQ췎{vᷧYy-脕x偹砡館⮸C蓼ꏚ=軄H犠G谖ES詤Z蠂3l봟hᅭ7䦹1GPQG癸숟~[#駥8zQ뛣J소obg,",
+                                                                                                                                                                            null,
+                                                                                                                                                                            1513751096373485652,
+                                                                                                                                                                            null,
+                                                                                                                                                                            -6.851466660824754E-19,
+                                                                                                                                                                            {"䩂-⴮2ٰK솖풄꾚ႻP앳1H鷛wmR䗂皎칄?醜<\/&ࠧ㬍X濬䵈K`vJ륒Q/IC묛!;$vϑ": {
+                                                                                                                                                                             "@-ꚗxྐྵ@m瘬\u0010U絨ﮌ驐\\켑寛넆T=tQ㭤L연@脸삯e-:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾萅Pq鐳话T䄐I": -1.80683891195530061E18,
+                                                                                                                                                                             "ᷭዻU~ཷsgSJ`᪅'%㖔n5픆桪砳峣3獮枾䌷⊰呀": {
+                                                                                                                                                                              "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥᐀nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆话〾희紐G'E?飕1f❼텬悚泬먐U睬훶Qs": false,
+                                                                                                                                                                              "(\u20dag8큽튣>^Y{뤋.袊䂓;_g]S\u202a꽬L;^'#땏bႌ?C緡<䝲䲝断ꏏ6\u001asD7IK5Wxo8\u0006p弊⼂ꯍ扵\u0003`뵂픋%ꄰ⫙됶l囏尛+䗅E쟇\\": [
+                                                                                                                                                                               true,
+                                                                                                                                                                               {
+                                                                                                                                                                                "\n鱿aK㝡␒㼙2촹f;`쾏qIࡔG}㝷䐍瓰w늮*粅9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{㖥0딿벑逦⥻0h薓쯴Ꝼ": [
+                                                                                                                                                                                 5188716534221998369,
+                                                                                                                                                                                 2579413015347802508,
+                                                                                                                                                                                 9.010794400256652E-21,
+                                                                                                                                                                                 -6.5327297761238093E17,
+                                                                                                                                                                                 1.11635352494065523E18,
+                                                                                                                                                                                 -6656281618760253655,
+                                                                                                                                                                                 {
+                                                                                                                                                                                  "": ")?",
+                                                                                                                                                                                  "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-o\"徚#": {"M/癟6!oI51ni퐚=댡>xꍨ\u0004 ?": {
+                                                                                                                                                                                   "皭": {"⢫䋖>u%w잼<䕏꘍P䋵$魋拝U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼O歵F\\l醴o_欬6籏=D": [
+                                                                                                                                                                                    false,
+                                                                                                                                                                                    true,
+                                                                                                                                                                                    {"Mt|ꏞD|F궣MQ뵕T,띺k+?㍵i": [
+                                                                                                                                                                                     7828094884540988137,
+                                                                                                                                                                                     false,
+                                                                                                                                                                                     {
+                                                                                                                                                                                      "!༦鯠,&aﳑ>[euJꏽ綷搐B.h": -7648546591767075632,
+                                                                                                                                                                                      "-n켧嘰{7挐毄Y,>❏螵煫乌pv醑Q嶚!|⌝責0왾덢ꏅ蛨S\\)竰'舓Q}A釡5#v": 3344849660672723988,
+                                                                                                                                                                                      "8閪麁V=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉惏ै|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\槳W븧J檀C,ᘉ의0俯퀉M;筷ࣴ瓿{늊埂鄧_4揸Nn阼Jੵ˥(社": true,
+                                                                                                                                                                                      "o뼀vw)4A뢵(a䵢)p姃뛸\u000fK#KiQp\u0005ꅍ芅쏅": null,
+                                                                                                                                                                                      "砥$ꥸ┇耽u斮Gc{z빔깎밇\\숰\u001e괷各㶇쵿_ᴄ+h穢p촀Ნ䃬z䝁酳ӂ31xꔄ1_砚W렘G#2葊P ": [
+                                                                                                                                                                                       -3709692921720865059,
+                                                                                                                                                                                       null,
+                                                                                                                                                                                       [
+                                                                                                                                                                                        6669892810652602379,
+                                                                                                                                                                                        -135535375466621127,
+                                                                                                                                                                                        "뎴iO}Z? 馢녱稹ᄾ䐩rSt帤넆&7i騏멗畖9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+                                                                                                                                                                                        1.10439588726055846E18,
+                                                                                                                                                                                        false,
+                                                                                                                                                                                        -4349729830749729097,
+                                                                                                                                                                                        null,
+                                                                                                                                                                                        [
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         "_蠢㠝^䟪/D녒㡋ỎC䒈판\u0006એq@O펢%;鹐쏌o戥~A[ꡉ濽ỳ&虃᩾荣唙藍茨Ig楡꒻M窓冉?",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         2.17220752996421728E17,
+                                                                                                                                                                                         -5079714907315156164,
+                                                                                                                                                                                         -9.960375974658589E-20,
+                                                                                                                                                                                         "ᾎ戞༒",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         [[
+                                                                                                                                                                                          "ⶉᖌX⧕홇)g엃⹪x뚐癟\u0002",
+                                                                                                                                                                                          -5185853871623955469,
+                                                                                                                                                                                          {
+                                                                                                                                                                                           "L㜤9ợㇶK鐰⋓V뽋˖!斫as|9"፬䆪?7胜&n薑~": -2.11545634977136992E17,
+                                                                                                                                                                                           "O8뀩D}캖q萂6༣㏗䈓煮吽ਆᎼDᣘ폛;": false,
+                                                                                                                                                                                           "YTᡅ^L㗎cbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$䁗鼒몁~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱B酂?C뇞<5Iޚ讳騕S瞦z": null,
+                                                                                                                                                                                           "\\RB?`mG댵鉡幐物䵎有5*e骄T㌓ᛪ琾駒Ku\u001a[柆jUq8⋈5鿋츿myﻗ?雍ux঴?": 5828963951918205428,
+                                                                                                                                                                                           "n0晅:黯 xu씪^퓞cB㎊ᬍ⺘٤փ~B岚3㥕擄vᲂ~F?C䶖@$m~忔S왖㲚?챴⊟W#벌{'㰝I䝠縁s樘\\X뢻9핡I6菍ㄛ8쯶]wॽ0L\"q": null,
+                                                                                                                                                                                           "x增줖j⦦t䏢᎙㛿Yf鼘~꫓恄4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oŁ쨅孥멁ຖacA㖫借㞝vg싰샂㐜#譞⢤@k]鋰嘘䜾L熶塥_<\/⍾屈ﮊ_mY菹t뙺}Ox=w鮮4S1ꐩמּ'巑",
+                                                                                                                                                                                           "㗓蟵ꂾe蠅匳(JP䗏෸\u0089耀왲": [{
+                                                                                                                                                                                            "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3伖\u0005P⋪\"D궣QLn(⚘罩䩢Ŏv䤘尗뼤됛O淽鋋闚r崩a{4箙{煷m6〈": {
+                                                                                                                                                                                             "l곺1L": {
+                                                                                                                                                                                              "T'ਤ?砅|੬Km]䄩\"(࿶<\/6U爢䫈倔郴l2㴱^줣k'L浖L鰄Rp今鎗⒗C얨M훁㡧ΘX粜뫈N꤇輊㌻켑#㮮샶-䍗룲蠝癜㱐V>=\\I尬癤t=": 7648082845323511446,
+                                                                                                                                                                                              "鋞EP:<\/_`ၧe混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿렏㗑yK毢宸p謹h䦹乕U媣\\炤": [[
+                                                                                                                                                                                               "3",
+                                                                                                                                                                                               [
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                3.4058271399411134E-20,
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                "揀+憱f逮@먻BpW曉\u001a㣐⎊$n劈D枤㡞좾\u001aᛁ苔౩闝1B䷒Ṋ݋➐ꀞꐃ磍$t੤_:蘺⮼(#N",
+                                                                                                                                                                                                697483894874368636,
+                                                                                                                                                                                                [
+                                                                                                                                                                                                 "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*U鍾䏖=䧉뽑单휻ID쿇嘗?ꌸῬ07",
+                                                                                                                                                                                                 -5.4858784319382006E18,
+                                                                                                                                                                                                 7.5467775182251151E18,
+                                                                                                                                                                                                 -8911128589670029195,
+                                                                                                                                                                                                 -7531052386005780140,
+                                                                                                                                                                                                 null,
+                                                                                                                                                                                                 [
+                                                                                                                                                                                                  null,
+                                                                                                                                                                                                  true,
+                                                                                                                                                                                                  [[{
+                                                                                                                                                                                                   "1欯twG<u䝮␽ꇣ_ჟﱴଶ-쪋\"?홺k:莝Ꜫ*⺵꽹댅釔좵}P?=9렿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+                                                                                                                                                                                                   "TҫJYxڪ\\鰔℮혡)m_WVi眪1[71><\/Q:0怯押殃탷聫사<ỗꕧ蚨䡁nDꌕ\u001c녬~蓩<N蹑\"{䫥lKc혁뫖앺:vⵑ": "g槵?",
+                                                                                                                                                                                                   "aꨩ뻃싥렌1`롗}Yg>鲃g儊>ꏡl㻿/⑷*챳6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?恪&{L掾p+꬜M䏊d娘6": {
+                                                                                                                                                                                                    "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&ǝ{O*य़iH`U큅ࡓr䩕5ꄸ?`\\᧫?ᮼ?t〟崾훈k薐ì/iy꤃뵰z1<\/AQ#뿩8jJ1z@u䕥": 1.82135747285215155E18,
+                                                                                                                                                                                                    "ZdN &=d년ᅆ'쑏ⅉ:烋5&៏ᄂ汎来L㯄固{钧u\\㊏튚e摑&t嗄ꖄUb❌?m䴘熚9EW": [{
+                                                                                                                                                                                                     "ଛ{i*a(": -8.0314147546006822E17,
+                                                                                                                                                                                                     "⫾ꃆY\u000e+W`௸ \"M뒶+\\뷐lKE}(NT킶Yj選篒쁶'jNQ硾(똡\\\"逌ⴍy? IRꜘ὞鄬﨧:M\\f⠋Cꚜ쫊ᚴNV^D䕗ㅖἔIao꿬C⍏8": [
+                                                                                                                                                                                                      287156137829026547,
+                                                                                                                                                                                                      {
+                                                                                                                                                                                                       "H丞N逕<rO䎗:텕<\/䶩샌Sd%^ᵯ눐엑者g䖩똭蕮1U驣?Pⰰ\u001fp(W]67\u0015﫣6굺OR羸#촐F蒈;嘙i✵@_撶y㤏⤍(:᧗뼢༌朆@⏰㤨ꭲ?-n>⯲": {"": {
+                                                                                                                                                                                                        "7-;枮阕梒9ᑄZ": [[[[
+                                                                                                                                                                                                         null,
+                                                                                                                                                                                                         {
+                                                                                                                                                                                                          "": [[[[
+                                                                                                                                                                                                           -7.365909561486078E-19,
+                                                                                                                                                                                                           2948694324944243408,
+                                                                                                                                                                                                           null,
+                                                                                                                                                                                                           [
+                                                                                                                                                                                                            true,
+                                                                                                                                                                                                            "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦됾g뒠䤈q딄㺿$쮸tᶎ릑弣^鏎<\/Y鷇驜L鿽<\/춋9Mᲆឨ^<\/庲3'l낢",
+                                                                                                                                                                                                            "c鮦\u001b두\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/ⴃcpkDt誩܅\"Y",
+                                                                                                                                                                                                            [[
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             [
+                                                                                                                                                                                                              3113744396744005402,
+                                                                                                                                                                                                              true,
+                                                                                                                                                                                                              "v(y",
+                                                                                                                                                                                                              {
+                                                                                                                                                                                                               "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔j㌍3꽂楎䥯뎸먩?": null,
+                                                                                                                                                                                                               "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+                                                                                                                                                                                                               "튷|䀭n*曎b✿~杤U]Gz鄭kW|㴚#㟗ഠ8u擨": [[
+                                                                                                                                                                                                                true,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                {"⾪壯톽g7?㥜ώQꑐ㦀恃㧽伓\\*᧰閖樧뢇赸N휶䎈pI氇镊maᬠ탷#X?A+kНM ༑᩟؝?5꧎鰜ṚY즫궔 =ঈ;ﳈ?*s|켦蜌wM笙莔": [
+                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                 -3808207793125626469,
+                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                  -469910450345251234,
+                                                                                                                                                                                                                  7852761921290328872,
+                                                                                                                                                                                                                  -2.7979740127017492E18,
+                                                                                                                                                                                                                  1.4458504352519893E-20,
+                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                  "㽙깹?먏䆢:䴎ۻg殠JBTU⇞}ꄹꗣi#I뵣鉍r혯~脀쏃#釯:场:䔁>䰮o'㼽HZ擓௧nd",
+                                                                                                                                                                                                                  [
+                                                                                                                                                                                                                   974441101787238751,
+                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                   -2.1647718292441327E-19,
+                                                                                                                                                                                                                   1.03602824249831488E18,
+                                                                                                                                                                                                                   [
+                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                    1.0311977941822604E-17,
+                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                     "": -3.7019778830816707E18,
+                                                                                                                                                                                                                     "E峾恆茍6xLIm縂0n2视֯J-ᤜz+ᨣ跐mYD豍繹⹺䊓몓ﴀE(@詮(!Y膽#᎙2䟓섣A䈀㟎,囪QbK插wcG湎ꤧtG엝x⥏俎j'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+                                                                                                                                                                                                                     "よ殳\\zD⧅%Y泥簳Uꈩ*wRL{3#3FYHା[d岀䉯T稉駅䞘礄P:闈W怏ElB㤍喬赔bG䠼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+                                                                                                                                                                                                                      6.77723657904486E-20,
+                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                       "ཚ_뷎꾑蹝q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3a㠕i,錃L$氰텰@7녫W㸮?羧W뇧ꃞ,N鋮숪2ɼ콏┍䁲6",
+                                                                                                                                                                                                                       "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ET9j䡡",
+                                                                                                                                                                                                                       "im珊Ճb칧<D-諂*u2ꡜ췛~䬢(텸ﵦ>校\\뼾쯀",
+                                                                                                                                                                                                                       9.555715121193197E-20,
+                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                        "<㫚v6腓㨭e1㕔&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMΉ㕨␰櫈ᱷ5풔蟹&L.첽e鰷쯃劼﫭b#ﭶ퓀7뷄Wr㢈๧Tʴશ㶑澕鍍%": -1810142373373748101,
+                                                                                                                                                                                                                        "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+                                                                                                                                                                                                                        "䫡蓺ꑷ]C蒹㦘\"1ః@呫\u0014NL䏾eg呮፳,r$裢k>/\\<z": [[
+                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                         "C䡏>?ㄤᇰﻛ쉕1஥'Ċ\" \\_?쨔\"ʾr: 9S䘏禺ᪧꄂ㲄",
+                                                                                                                                                                                                                         [[{
+                                                                                                                                                                                                                          "*硙^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺띜hꏘ\u001f銿<棔햳▨(궆*=乥b8\\媦䷀뫝}닶ꇭ(Kej䤑M": [{
+                                                                                                                                                                                                                           "1Ꮼ?>옿I╅C<ގ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌o嶔f9-庒茪珓뷳4": null,
+                                                                                                                                                                                                                           ";lᰳ": "CbB+肻a䄷苝*/볳+/4fq=㰁h6瘉샴4铢Y骐.⌖@哼猎㦞+'gꋸ㒕ߤ㞑(䶒跲ti⑴a硂#No볔",
+                                                                                                                                                                                                                           "t?/jE幸YHT셵⩎K!Eq糦ꗣv刴w\"l$ο:=6:移": {
+                                                                                                                                                                                                                            "z]鑪醊嫗J-Xm銌翁絨c里됏炙Ep㣋鏣똼嚌䀓GP﹖cmf4鹭T䅿꣭姧␸wy6ꦶ;S&(}ᎧKxᾂQ|t뻳k\"d6\"|Ml췆hwLt꼼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'd᧫䳳#NXe3-붋鸿ଢ떓%dK\u0013䲎ꖍYV.裸R⍉rR3蟛\\:젯:南ĺLʆ넕>|텩鴷矔ꋅⒹ{t孶㓑4_": [
+                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                             null,
+                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                              "l怨콈lᏒ",
+                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                               "0w䲏嬧-:`䉅쉇漧\\܂yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+                                                                                                                                                                                                                               "ꯛTẀq纤q嶏V⿣?\"g}ი艹(쥯B T騠I=仵및X": {"KX6颠+&ᅃ^f畒y[": {
+                                                                                                                                                                                                                                "H?뱜^?꤂-⦲1a㋞&ꍃ精Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ KⴙD秼F氮[{'좴:례晰Iq+I쭥_T綺砸GO煝䟪ᚪ`↹l羉q쐼D꽁ᜅ훦: vUV": true,
+                                                                                                                                                                                                                                "u^yﳍ0㱓#[y뜌앸ꊬL㷩?蕶蘾⻍KӼ": -7931695755102841701,
+                                                                                                                                                                                                                                "䤬轉車>\u001c鴵惋\"$쯃྆⇻n뽀G氠S坪]ಲꨍ捇Qxኻ椕駔\\9ࣼ﫻읜磡煮뺪ᶚ볝l㕆t+sζ": [[[
+                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                  3363739578828074923,
+                                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                   "\"鸣詩 볰㑵gL㯦῅춝旫}ED辗ﮈI쀤-ꧤ|㠦Z\"娑ᕸ4爏騍㣐\"]쳝Af]茛⬻싦o蚁k䢯䩐菽3廇喑ޅ": 4.5017999150704666E17,
+                                                                                                                                                                                                                                   "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+                                                                                                                                                                                                                                   "`塄J袛㭆끺㳀N㺣`꽐嶥KﯝSVᶔ∲퀠獾N딂X\"ᤏhNﬨvI": {"\u20bb㭘I䖵䰼?sw䂷쇪](泒f\"~;꼪Fԝsᝦ": {"p,'ꉂ軿=A蚶?bƉ㏵䅰諬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;䄝䚔cd<情@䞂3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXW욕^x芜堏Ῑ爂뛷꒻t✘Q\b": [[
+                                                                                                                                                                                                                                    "籛&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅岃ᙴ鵣",
+                                                                                                                                                                                                                                    4.317829988264744E15,
+                                                                                                                                                                                                                                    6.013585322002147E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    -3.084633632357326E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                     "\"짫愔昻  X\"藣j\"\"먁ཅѻ㘤㬯0晲DU꟒㸃d벀윒l䦾c੻*3": null,
+                                                                                                                                                                                                                                     "谈Wm陧阦咟ฯ歖擓N喴㋐銭rCCnVࢥ^♼Ⅾ젲씗刊S༝+_t赔\\b䚍뉨ꬫ6펛cL䊘᜼<\/澤pF懽&H": [
+                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                       "W\"HDUuΌ퀟M'P4࿰H똆ⰱﮯ<\/凐蘲\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡ퍉ⴰ@?氐醳rj4I6Qt": 6.9090159359219891E17,
+                                                                                                                                                                                                                                       "絛ﳛ⺂": {"諰P㗮聦`ZQ?ꫦh*റcb⧱}埌茥h{棩렛툽o3钛5鮁l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0T썗嫷$?\\\"봅늆'%": [
+                                                                                                                                                                                                                                        -2.348150870600346E-19,
+                                                                                                                                                                                                                                        [[
+                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                         -6619392047819511778,
+                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                          -1.2929189982356161E-20,
+                                                                                                                                                                                                                                          1.7417192219309838E-19,
+                                                                                                                                                                                                                                          {"?嵲2࿐2\u0001啑㷳c縯": [
+                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                            false,
+                                                                                                                                                                                                                                            true,
+                                                                                                                                                                                                                                            2578060295690793218,
+                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                             "?\"殃呎#㑑F": true,
+                                                                                                                                                                                                                                             "}F炊_殛oU헢兔Ꝉ,赭9703.B数gTz3⏬": {
+                                                                                                                                                                                                                                              "5&t3,햓Mݸᵣ㴵;꣫䩍↳#@뫷䠅+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bB讍:왳둛lEh=숾鱠p咐$짏#?g⹷ᗊv㷵.斈u頻\u0018-G.": "뽙m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvC堈\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xg巤9;芔cጐ/ax䊨♢큓r吓㸫೼䢗da᩾\"]屣`",
+                                                                                                                                                                                                                                              ":M딪<䢥喠\u0013㖅x9蕐㑂XO]f*Q呰瞊吭VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/섩o渀\"u0y&룣": ">氍緩L/䕑돯Ꟙ蕞^aB뒣+0jK⪄瑨痜LXK^힦1qK{淚t츔X:Vm{2r獁B뾄H첚7氥?쉟䨗ꠂv팳圎踁齀\\",
+                                                                                                                                                                                                                                              "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃ獽쮹☒[*0ꑚ㜳": 9022717159376231865,
+                                                                                                                                                                                                                                              "ҖaV銣tW+$魿\u20c3亜~뫡ᙰ禿쨽㏡fṼzE/h": "5臐㋇Ჯ쮺? 昨탰Wム밎#'\"崲钅U?幫뺀⍾@4kh>騧\\0ҾEV=爐͌U捀%ꉼ 㮋<{j]{R>:gԩL\u001c瀈锌ﯲﳡꚒ'⫿E4暍㌗뵉X\"H᝜",
+                                                                                                                                                                                                                                              "ᱚגּ;s醒}犍SἿ㦣&{T$jkB\\\tḮ앾䤹o<避(tW": "vb⯽䴪䮢@|)",
+                                                                                                                                                                                                                                              "⥒퐁껉%惀뗌+녣迺顀q條g⚯i⤭룐M琹j̈́⽜A": -8385214638503106917,
+                                                                                                                                                                                                                                              "逨ꊶZ<\/W⫟솪㎮ᘇb?ꠔi\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Mᶖa<rఄ4Ů䢤슲Axģe곖㴤x竾郍B謉鸵k薽M)\"芣眜`菉ꉛ䴺": "鹏^ె캫?3耲]|Ü1䡒㝮]8e?䶍^",
+                                                                                                                                                                                                                                              "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^є|3袄ㅐ7⨆銦y睝⋷仴ct?[,<\/ㅬ`?갔髞%揁A೚C": {
+                                                                                                                                                                                                                                               " 䇞3갫䅪": [{
+                                                                                                                                                                                                                                                "0|⩁㑂砕ㅻ": null,
+                                                                                                                                                                                                                                                "D箳᠉`|=⼭)\"*࣊㦏LjO誋": "",
+                                                                                                                                                                                                                                                "ࠚDZmꗥ}ᷴ╈r7헴ȥ4Kp5a)o}鎘门L搰䆓'✎k俎c#T68ӏ⩶6L鎴<r൦$黊BQY㼳\\跿F慮⡨拵贀!甶V喅/": null,
+                                                                                                                                                                                                                                                "ⵣq⳹ﻨLk]晩1*y\\$%}䖶P煑㇆䈦E嫁櫕Y࣓嫨䓏OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"Ⱓ<\/婽*Y䔸ᓰ_ﳍt슲坩隥&S糧䛮闵诌豐sh쯽邴*섴؏͎=㯨\"RVힳ,^t\"ac?䤒ꉀxHa=Uꛕ㐙TkF껾",
+                                                                                                                                                                                                                                                "弾cUAF?暤c덽.欀nK앭]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "૓鏨?^䆏{\u0006`X䧵儱&롡尙砡\u0006뻝쑬sj▻XfᬶgcㄢV >9韲4$3Ỵ^=쏍煤ፐ돷2䣃%鷠/eQ9頸쥎",
+                                                                                                                                                                                                                                                 2398360204813891033,
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 3.2658897259932633E-19,
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "?ꚃ8Nn㞷幵d䲳䱲뀙ꪛQ瑓鎴]䩋-鰾捡䳡??掊",
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 -1309779089385483661,
+                                                                                                                                                                                                                                                 "ᦲxu_/yecR.6芏.ᜇ過 ~",
+                                                                                                                                                                                                                                                 -5658779764160586501,
+                                                                                                                                                                                                                                                 "쒌:曠=l썜䢜wk#s蕚\"互㮉m䉤~0듐䋙#G;h숄옥顇෤勹(C7㢅雚㐯L⠅VV簅<",
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 -4.664877097240962E18,
+                                                                                                                                                                                                                                                 -4.1931322262828017E18,
+                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                  ",": {
+                                                                                                                                                                                                                                                   "v㮟麑䄠뤵g{M띮.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂U㏠⾕e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉쁊;%0鎻V(o\f,N鏊%nk郼螺": -1.73631993428376141E18,
+                                                                                                                                                                                                                                                   "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+                                                                                                                                                                                                                                                    4971487283312058201,
+                                                                                                                                                                                                                                                    8973067552274458613,
+                                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                                     "`a揙ᣗ\u0015i<S幼訃锭B0&槩✨[Wp皩[g≊k葾x2ᡆ橲䲢W": true,
+                                                                                                                                                                                                                                                     "kH皈Sꁱq傑u?솹풑~o^F=劣N*reJ沤wW苯7p㼹䎐a=ꮧL㷩냴nWꌑ㞱uu谁lVN珿᤻(e豶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+                                                                                                                                                                                                                                                     "䫯דּ〖Sc䛭점L뵾pCꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\W┏t䖰軅y\u0014~ᇰ렢E7*俜䥪W䀩䷐h봆vjஉ묣༏G39.뼳輼:㮿ᐦA饕TUL}~": [
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      8.8648298810470003E17,
+                                                                                                                                                                                                                                                      5.735561205600924E-20,
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      -102555823658171644,
+                                                                                                                                                                                                                                                      1.2674932032973067E-19,
+                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                       "D胣O㯨\u0017Ku눓㒏텁nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+                                                                                                                                                                                                                                                       "HW&퉡ぁ圍<W)6悰ꠑHEp14xy峑ft\u0005s亘V튉䢮ꦈX嵐꬝?lI_덝춇-6Ss噺Nk-ﮥ큃܁郪*PR(S6╋@仙V懸뺵ﯜV粹": "9䗌斀4㐈^Qs隄硏j\u0003",
+                                                                                                                                                                                                                                                       "Vk鶅C泹筁HX훉朗*r\\z顊誌儖4?n7᏾6몋䎡ﳈ],H頢p蚐㑄P4满E䏩V䬕ญL廂쒬쑨ꆷh迡ꍰ譖墎 ]鹿ฌ7ﶽ冭༽<ꈓS\\l䋮?_ユ檒?": -8598528325153980065,
+                                                                                                                                                                                                                                                       "t=q퍣疻тZ\\錅J.镎|nfḷ鴒1厰L灯纜E]୦⥪]Ꮾ'羝p/咩0닳ﳁqﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+                                                                                                                                                                                                                                                        5.0824756359232045E-19,
+                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                         7.268480839079619E-19,
+                                                                                                                                                                                                                                                         {"탿^굞⧕iј덊ꀛw껩6ꟳXs酚\\>Y?瑡Qy훍q!帰敏s舠㫸zꚗaS歲v`G株巷Jp6킼 (귶鍔⾏⡈>M汐㞍ቴ꙲dv@i㳓ᇆ?黍": [
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          4997607199327183467,
+                                                                                                                                                                                                                                                          "E㻎蠫ᐾ高䙟蘬洼旾﫠텛㇛?'M$㣒蔸=A_亀绉앭rN帮",
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          [{
+                                                                                                                                                                                                                                                           "Eᑞ)8<Z㡿W镀䛒C생V?0ꯦ+tL)`齳AjB姀XೳD빠㻲ƙgn9⑰ྍ῜&\"㚹>餧A5u&㗾q?": [
+                                                                                                                                                                                                                                                            -1.969987519306507E-19,
+                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                             3.42437673373841E-20,
+                                                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                                                             "e걷M墁\"割P␛퍧厀R䱜3ﻴO퓫r﹉⹊",
+                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                              -8164221302779285367,
+                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                               null,
+                                                                                                                                                                                                                                                               "爘y^-?蘞Ⲽꪓa␅ꍨ}I",
+                                                                                                                                                                                                                                                               1.4645984996724427E-19,
+                                                                                                                                                                                                                                                               [{
+                                                                                                                                                                                                                                                                "tY좗⧑mrzﺝ㿥ⴖ᥷j諅\u0000q賋譁Ꞅ⮱S\nࡣB/큃굪3Zɑ复o<\/;롋": null,
+                                                                                                                                                                                                                                                                "彟h浠_|V4䦭Dᙣ♞u쿻=삮㍦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]㱭R굋鈌%栲j分僅ペ䇰w폦p蛃N溈ꡐꏀ?@(GI뉬$ﮄ9誁ꓚ2e甸ڋ[䁺,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+                                                                                                                                                                                                                                                                 "ㅩ拏鈩勥\u000etgWVXs陂規p狵w퓼{뮵_i\u0002ퟑႢ⬐d6鋫F~챿搟\u0096䚼1ۼ칥0꣯儏=鋷牋ⅈꍞ龐",
+                                                                                                                                                                                                                                                                 -7283717290969427831,
+                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                                                  4911644391234541055,
+                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                   "I鈒첽P릜朸W徨觘-Hᎄ퐟⓺>8kr1{겵䍃〛ᬡ̨O귑o䝕'쿡鉕p5": "fv粖RN瞖蛐a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴덋䡫s矷̄?ඣ/;괱絢oWfV<\/\u202cC,㖦0䑾%n賹g&T;|lj_欂N4w",
+                                                                                                                                                                                                                                                                   "짨䠗;䌕u i+r๏0": [{"9䥁\\఩8\"馇z䇔<\/ႡY3e狚쐡\"ุ6ﰆZ遖c\"Ll:ꮾ疣<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;䧐儂䗷ୗ>@e톬": {
+                                                                                                                                                                                                                                                                    "a⑂F鋻Q螰'<퇽Q贝瀧{ᘪ,cP&~䮃Z?gI彃": [
+                                                                                                                                                                                                                                                                     -1.69158726118025933E18,
+                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                      "궂z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08Sn昞ꘔ캻禀鴚P謦b{ꓮmN靐Mᥙ5\"睏2냑I\u0011.L&=?6ᄠ뻷X鸌t刑\"#z)o꫚n쳟줋",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      7517598198523963704,
+                                                                                                                                                                                                                                                                      "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      6645782462773449868,
+                                                                                                                                                                                                                                                                      1219168146640438184,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                       ")ယ넌竀Sd䰾zq⫣⏌ʥ\u0010ΐ' |磪&p牢蔑mV蘸૰짬꺵;K": [
+                                                                                                                                                                                                                                                                        -7.539062290108008E-20,
+                                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         6574577753576444630,
+                                                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                                                          1.2760162530699766E-19,
+                                                                                                                                                                                                                                                                          [
+                                                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                                                            "顊\\憎zXB,",
+                                                                                                                                                                                                                                                                            [{
+                                                                                                                                                                                                                                                                             "㇆{CVC9-MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017ᝣ=cS+梽៲綆16s덽휐y屬?ᇳG2ᴭ\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010홠P>j": false,
+                                                                                                                                                                                                                                                                             "箴": [
+                                                                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                                                                              "鍞j\"ꮾ*엇칬瘫xṬ⭽쩁䃳\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"῝ᬑV绩킯愌ṱv@GꝾ跶Ꚇ(?䖃vI᧊xV\r哦j㠒?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                               ".}S㸼L?t\u000fK⑤s~hU鱜꘦}쪍C滈4ꓗ蛌):ྦ\"顥이⢷ῳYLn\"?fꘌ>댎Ĝ": true,
+                                                                                                                                                                                                                                                                               "Pg帯佃籛n㔠⭹࠳뷏≻࿟3㞱!-쒾!}쭪䃕!籿n涻J5ਲ਼yvy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+                                                                                                                                                                                                                                                                               "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓ق쨐ק\\": [
+                                                                                                                                                                                                                                                                                7706977185172797197,
+                                                                                                                                                                                                                                                                                {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+                                                                                                                                                                                                                                                                                 "♘k6?଱癫d68?㽚乳䬳-V顷\u0005蝕?\u0018䞊V{邾zじl]雏k臤~ൖH뒐iꢥ]g?.G碄懺䔛p<q꜉S岗_.%": 7688630934772863849,
+                                                                                                                                                                                                                                                                                 "溗摽嗙O㧀,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑觝ᖜ\\鮭\u0014엙㥀᧺@浹W2꛵{W률G溮킀轡䬆g㨑'Q聨៪网Hd\"Q늴ᱢﶨ邮昕纚枑?▰hr羌驀[痹<\/": [
+                                                                                                                                                                                                                                                                                  -1.0189902027934687E-19,
+                                                                                                                                                                                                                                                                                  {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-慜x櫹XY-澐ܨ⣷ઢ鯙%Fu\u0000迋▒}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱㐧蓤䒏8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵㲐:URON&oU8": [
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   true,
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   -2.8907335031148883E17,
+                                                                                                                                                                                                                                                                                   -3864019407187144121,
+                                                                                                                                                                                                                                                                                   {
+                                                                                                                                                                                                                                                                                    "`빬d⵺4H뜳⧈쓑ohஸ*㶐ﻇ⸕䠵!i䝬﹑h夘▥ꗐ푹갇㵳TA鳠嚵\\B<X}3訒c⋝{*﫢w]璨-g捭\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+                                                                                                                                                                                                                                                                                    "䄘ﮐ)Y놞씃㾱陰큁:{\u2059/S⓴": [[
+                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                     [[
+                                                                                                                                                                                                                                                                                      -3.8256602120220546E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      7202317607724472882,
+                                                                                                                                                                                                                                                                                      "CWQ뚿",
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      false,
+                                                                                                                                                                                                                                                                                      true,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      2857038485417498625,
+                                                                                                                                                                                                                                                                                      6.191302233218633E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      -6795250594296208046,
+                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                        "%ዧ遰Yᚯ⚀x莰愒Vᔈ턗BN洝ꤟA1⍌l콹풪H;OX๫륞쪐ᰚц@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+                                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                                         "耲?䙧㘓F6Xs틭멢.v뚌?鄟恠▽'묺競?WvᆾCtxo?dZ;䨸疎",
+                                                                                                                                                                                                                                                                                         {
+                                                                                                                                                                                                                                                                                          "@hWꉁ&\"빜4礚UO~C;う殩_ꀥ蘁奢^챟k→ᡱKMⵉ<\/Jㅲ붉L͟Q": false,
+                                                                                                                                                                                                                                                                                          "tU뢂8龰I먽7,.Y搽Z툼=&⨥覽K乫햶㠸%#@Z끖愓^⍊⾂몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+                                                                                                                                                                                                                                                                                           "tK*ꔵ銂u艗ԃ쿏∳ꄂ霫X3♢9y?=ⲭdЊb&xy}": [
+                                                                                                                                                                                                                                                                                            -4.097346784534325E-20,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            6016848468610144624,
+                                                                                                                                                                                                                                                                                            -8194387253692332861,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                                                                             "(祬诀譕쯠娣c봝r?畄kT뼾⌘⎨?noV䏘쥝硎n?": [
+                                                                                                                                                                                                                                                                                              1.82679422844617293E18,
+                                                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                                                               false,
+                                                                                                                                                                                                                                                                                               2.6849944122427694E18,
+                                                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                                                               [
+                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                {
+                                                                                                                                                                                                                                                                                                 ";0z⭆;화$bਔ瀓\"衱^?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥၼ꒥筙꬜긨?X": -3536753685245791530,
+                                                                                                                                                                                                                                                                                                 "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$䅒X觨l봜A刊8R梒',}u邩퉕?;91Ea䈈믁G⊶芔h袪&廣㺄j;㡏綽\u001bN頸쳘橆": -2272208444812560733,
+                                                                                                                                                                                                                                                                                                 "拑Wﵚj鵼駳Oࣿ)#㾅顂N傓纝y僱栜'Bꐍ-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1ۏ@霄F$ě꧘푫O䤕퀐Pq52憬ꀜ兴㑗ᡚ?L鷝ퟐ뭐zJꑙ}╆ᅨJB]\"袌㺲u8䯆f",
+                                                                                                                                                                                                                                                                                                 "꿽၅㔂긱Ǧ?SI": -1669030251960539193,
+                                                                                                                                                                                                                                                                                                 "쇝ɨ`!葎>瞺瘡驷錶❤ﻮ酜=": -6961311505642101651,
+                                                                                                                                                                                                                                                                                                 "?f7♄꫄Jᡔ훮e읇퍾፣䭴KhखT;Qty}O\\|뫁IῒNe(5惁ꥶㆷY9ﮡ\\ oy⭖-䆩婁m#x봉>Y鈕E疣s驇↙ᙰm<": {"퉻:dꂁ&efᅫ쫢[\"돈늖꺙|Ô剐1͖-K:ʚ᭕/;쏖㷛]I痐职4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?苅o궓vO侃沲⍩嚅沗 E%⿰얦wi\\*趫": [
+                                                                                                                                                                                                                                                                                                  3504362220185634767,
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  "qzX朝qT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fୗ䲁缿ꝁ蒇潇Ltᆄ钯蜀W欥ሺ",
+                                                                                                                                                                                                                                                                                                  "볰ɐ霬)젝鶼kwoc엷荁r \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3偛twὡgj䁠흪5⭉⨺役&놎cﺉ㺡N5",
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  "D0st[ni锹r*0k6ꀎ덇UX2⽼৞䃚粭#)Z桷36P]<\/`",
+                                                                                                                                                                                                                                                                                                  4281410120849816730,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  -3256922126984394461,
+                                                                                                                                                                                                                                                                                                  1.16174580369801549E18,
+                                                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                                                   " ᆼꤗ~*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡet쾣䐇m*㸏y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+                                                                                                                                                                                                                                                                                                   "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)鴑B(I$<\/轴퉯揷⋏⏺*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂遳V\\땒\"캘c:G": null,
+                                                                                                                                                                                                                                                                                                   "?﵁_곢翸폈8㿠h열Q2㭛}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰W㴚搦ᅉe[w䋺?藂翙Ⲱ芮䍘╢囥lpdu7r볺I 近qFyᗊ": [
+                                                                                                                                                                                                                                                                                                    "$b脬aᅠ襬育Bگ嵺Pw+'M<\/כֿn䚚v螁bN⒂}褺%lቦ阤\"ꓺᏗM牏,۞Ҷ!矬?ke9銊X괦)䈽틁脽ṫ䈞ᴆ^=Yᗿ遛4I귺⋥%",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    2.9444482723232051E18,
+                                                                                                                                                                                                                                                                                                    2072621064799640026,
+                                                                                                                                                                                                                                                                                                    "/_뇴뫢j㍒=Nꡦ↍Ժ赒❬톥䨞珯su*媸瀳鷔抡o흺-៳辏勷f绔:䵢搢2",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    "쒜 E䌐/큁\u0018懺_<\\隺&{wF⤊谼(<죽遠8?@*rᶊGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬C᧧Kꩠ풤9눙醅됞}竸rw?滨ӽK⥿ཊG魲']`๖5㄰",
+                                                                                                                                                                                                                                                                                                    -2375253967958699084,
+                                                                                                                                                                                                                                                                                                    {"嗱⿲\"f億ᝬ": {"v?䚑킡`◤k3,骥曘뒤Oᒱ㲹^圮᠀YT껛&촮P:G/T⣝#튣k3炩蠏k@橈䏷S䧕,熜晬k1鮥玸먚7䤡f绝嗚샴ᥒ~0q拮垑a뻱LⰖ_": [{
+                                                                                                                                                                                                                                                                                                     ":p尢": -6.688985172863383E17,
+                                                                                                                                                                                                                                                                                                     "A0\u0001疠ﻵ爻鼀湶I~W^岀mZx#㍈7r拣$Ꜷ疕≛⦒痋盩Vꬷ᭝ΩQꍪ療鈑A(劽詗ꭅo-獶鑺\"Ⓠ@$j탥;": [
+                                                                                                                                                                                                                                                                                                      8565614620787930994,
+                                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                                       "嶗PC?උQ㪣$&j幾㾷h慑 즊慧⪉霄M窊ꁷ'鮕)䊏铨m趦䗲(g罣ЮKVﯦ鏮5囗ﰼ鿦",
+                                                                                                                                                                                                                                                                                                       -7168038789747526632,
+                                                                                                                                                                                                                                                                                                       null,
+                                                                                                                                                                                                                                                                                                       -7.8069738975270288E16,
+                                                                                                                                                                                                                                                                                                       2.25819579241348352E17,
+                                                                                                                                                                                                                                                                                                       -6.5597416611655936E18,
+                                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                                        "瘕멦핓+?フZ귢z鍛V": {
+                                                                                                                                                                                                                                                                                                         "ᕾ": 1.7363275204701887E-19,
+                                                                                                                                                                                                                                                                                                         "㭌s뎹㳉": {"\u00187FI6Yf靺+UC쬸麁␲䂿긕R\\ᆮC?Φ耭\rOத际핅홦*베W㸫㯼᡹cㅜ|G㮗\u0013[o`?jHV앝?蒪꩚!퍫ᜦ㌇䚇鿘:@": [
+                                                                                                                                                                                                                                                                                                          "}푛Г콲<䟏C藐呈#2㓋#ྕ፟尿9q竓gI%랙mꍬoa睕贿J咿D_熏Zz皳験I豼B扳ḢQ≖㻹㱣D䝦練2'ᗍ㗣▌砲8罿%హF姦;0悇<\/\"p嚧",
+                                                                                                                                                                                                                                                                                                          -710184373154164247,
+                                                                                                                                                                                                                                                                                                          "Vo쫬⬾ꝫⴷŻ\u0004靎HBꅸ_aVBHbN>Z4⍜kเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+                                                                                                                                                                                                                                                                                                          -9006004849098116748,
+                                                                                                                                                                                                                                                                                                          -3118404930403695681,
+                                                                                                                                                                                                                                                                                                          {
+                                                                                                                                                                                                                                                                                                           "_彃Y艘-\"Xx㤩㳷瑃?%2䐡鵛o<A?\"顜ᘌΈ;ⷅC洺L蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+                                                                                                                                                                                                                                                                                                           "l륪맽耞塻論倐E㗑/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟Fsf윔䐚찤i腳": {"ꢪ'a䣊糈": {"밑/♋S8s㼴5瓹O{댞\"9XﰇlJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',g鑠(樴턇?": [
+                                                                                                                                                                                                                                                                                                            2.5879275511391145E18,
+                                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                                                                             "3㼮ꔌ1Gẃ2W龙j͊{1囐㦭9x宠㑝oR䐕犽",
+                                                                                                                                                                                                                                                                                                             1268729930083267852,
+                                                                                                                                                                                                                                                                                                             "땕軚⿦7C",
+                                                                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                                                                              -3.757935946502082E18,
+                                                                                                                                                                                                                                                                                                              "\"赌'糬_2뭾᝝b",
+                                                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                                                               "(a䕎ጽjҰD4.ᴡ66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;焓q淞뮕ٹ趴r蔞ꯔ䟩v粏u5<\/pZ埖Skrvj帛=\u0005aa": null,
+                                                                                                                                                                                                                                                                                                               "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+                                                                                                                                                                                                                                                                                                                "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'㾵 L蹦qjYIYណԠW냁剫<\/W嗂0,}",
+                                                                                                                                                                                                                                                                                                                2.4817616702666762E18,
+                                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -8.6036958071260979E17,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -1.2744078022652468E-19,
+                                                                                                                                                                                                                                                                                                                -4.4752020268429594E17,
+                                                                                                                                                                                                                                                                                                                1.13672865156637872E17,
+                                                                                                                                                                                                                                                                                                                [
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                                                                                 -4.178004168554046E-20,
+                                                                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                                                                 2927542512798605527,
+                                                                                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                                                                                  ".ꔓ뉤1䵬cHy汼䊆賓ᐇƩ|樷❇醎㬅4\u0003赵}#yD5膏晹뱓9ꖁ虛J㺕 t䊛膎ؤ": {
+                                                                                                                                                                                                                                                                                                                   "rVtᓸ5^`েN⹻Yv᥋lꌫt拘?<鮰넿ZC?㒽^": {"␪k_:>귵옔夘v*탋职&㳈챗|O钧": [
+                                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                                    "daꧺdᗹ羞쯧H㍤鄳頳<型孒ン냆㹀f4㹰\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*y೧4VQ蔔hV淬{?ᵌEfrI_",
+                                                                                                                                                                                                                                                                                                                    "j;ꗣ밷邍副]ᗓ",
+                                                                                                                                                                                                                                                                                                                    -4299029053086432759,
+                                                                                                                                                                                                                                                                                                                    -5610837526958786727,
+                                                                                                                                                                                                                                                                                                                    [
+                                                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                                                                      -1.3958390678662759E-19,
+                                                                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                                                                       "lh좈T_믝Y\"伨\u001cꔌG爔겕ꫳ晚踍⿻읐T䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/t筑,榄&5懶뎫狝(": [{
+                                                                                                                                                                                                                                                                                                                        "2ፁⓛ]r3C攟וּ9賵s⛔6'ஂ|\"ⵈ鶆䐹禝3\"痰ࢤ霏䵩옆䌀?栕r7O簂Isd?K᫜`^讶}z8?z얰T:X倫⨎ꑹ": -6731128077618251511,
+                                                                                                                                                                                                                                                                                                                        "|︦僰~m漿햭\\Y1'Vvخ굇ቍ챢c趖": [null]
+                                                                                                                                                                                                                                                                                                                       }],
+                                                                                                                                                                                                                                                                                                                       "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-K᝷-(^\u20dd_": 2.11318679791770592E17
+                                                                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                                                                    ]
+                                                                                                                                                                                                                                                                                                                   ]},
+                                                                                                                                                                                                                                                                                                                   "묗E䀳㧯᳀逞GMc\b墹㓄끖Ơ&U??펌鑍 媋k))ᄊ": null,
+                                                                                                                                                                                                                                                                                                                   "묥7콽벼諌J_DɯﮪM殴䣏,煚ྼ`Y:씧<\/⩫%yf䦀!1Ჶk춎Q米W∠WC跉鬽*ᛱi<?,l<崣炂骵*?8푐៣ⰵ憉⎑.,Nw罣q+ο컆弎": false
+                                                                                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                                                                                  "e[|଀+lꑸ㝈TT?뿿|ꫛ9`㱯䊸楋-곳賨?쳁k棽擋wQ餈⟐Nq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+                                                                                                                                                                                                                                                                                                                  "sᓝ鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+                                                                                                                                                                                                                                                                                                                  "|4䕳鵻?䈔(]틍/Ui#湻{듲ーMዀt7潔泄Ch⸨}쏣`螧銚㋼壯kⰥQ戵峉갑x辙'첛": "jd䘯$䕌茷!auw眶ㅥ䁣ꆢ民i",
+                                                                                                                                                                                                                                                                                                                  "剖駰ꞫsM2]ᾴ2ࡷ祅拌Av狔꩛'ꓗ킧ꣁ0酜✘O'": false,
+                                                                                                                                                                                                                                                                                                                  "澩뢣ꀁeU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>㴕L꘻ꀏ쓪\"_g鿄'#t⽙?,Wg㥖|D鑆e⥏쪸僬h鯔咼ඡ;4TK聎졠嫞"
+                                                                                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                                                                           ]}}
+                                                                                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                                                                        },
+                                                                                                                                                                                                                                                                                                        "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgᬐ>棟S\"혧騾밫겁7-": "擹8C憎W\"쵮yR뢩浗絆䠣簿9䏈引Wcy䤶孖ꯥ;퐌]輩䍐3@{叝 뽸0ᡈ쵡Ⲇ\u001dL匁꧐2F~ݕ㪂@W^靽L襒ᦘ~沦zZ棸!꒲栬R"
+                                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                                                                                                     "Z:덃൛5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿鿝\u0013縮R∱骒EO\u000fg?幤@֗퉙vU`",
+                                                                                                                                                                                                                                                                                                     "䐃쪈埽້=Ij,쭗쓇చ": false
+                                                                                                                                                                                                                                                                                                    }]}}
+                                                                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                                                 ]}
+                                                                                                                                                                                                                                                                                                }
+                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                                             "咰긖VM]᝼6䓑쇎琺etDҌ?㞏ꩄ퇫밉gj8蠃\"⩐5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞돷`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{⹔Te驨7䵒?타Ulg悳o43"
+                                                                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                                                           "zQᤚ纂땺6#ٽ﹧v￿#ࠫ휊冟蹧텈ꃊʆ?&a䥯De潝|쿓pt瓞㭻啹^盚2Ꝋf醪,얏T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+                                                                                                                                                                                                                                                                                           "䉩跐|㨻ᷢ㝉B{蓧瞸`I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭词\u0017署?W딚%(pꍁ⤼띳^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061յnj=牲攑)M\\龏": false,
+                                                                                                                                                                                                                                                                                           "뎕y絬᫡⥮Ϙᯑ㌔/NF*˓.,QEzvK!Iwz?|쥾\"ꩻL꼗Bꔧ賴緜s뉣隤茛>ロ?(?^`>冺飒=噸泥⺭Ᲊ婓鎔븜z^坷裮êⓅ໗jM7ﶕ找\\O": 1.376745434746303E-19
+                                                                                                                                                                                                                                                                                          },
+                                                                                                                                                                                                                                                                                          "䐛r滖w㏤<k;l8ꡔጵ⮂ny辶⋃퍼僮z\"﮲X@t5෼暧퓞猋♅䦖QC鹮|픨( ,>,|Nዜ": false
+                                                                                                                                                                                                                                                                                         }
+                                                                                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                                                                                        "@꿙?薕尬 gd晆(띄5躕ﻫS蔺4)떒錸瓍?~": 1665108992286702624,
+                                                                                                                                                                                                                                                                                        "w믍nᏠ=`঺ᅥC>'從됐槷䤝眷螄㎻揰扰XᅧC贽uჍ낟jKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)⑗1쾅庅O4ꁉH7?d\u0010蠈줘월ސ粯Q!낇껉6텝|{": null,
+                                                                                                                                                                                                                                                                                        "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+                                                                                                                                                                                                                                                                                        "펅Wᶺzꐆと푭e?4j仪열[D<鈑皶婆䵽ehS?袪;HꍨM뗎ば[(嗏M3q퍟g4y╸鰧茀[Bi盤~﫝唎鋆彺⦊q?B4쉓癚O洙킋툈䶯_?ퟲ": null
+                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                     ]]
+                                                                                                                                                                                                                                                                                    ]],
+                                                                                                                                                                                                                                                                                    "꟱Ԕ㍤7曁聯ಃ錐V䷰?v㪃૦~K\"$%请|ꇹn\"k䫛㏨鲨\u2023䄢\u0004[<S8ᐬ뭩脥7U.m࿹:D葍┆2蘸^U'w1젅;䠆ꋪB껮>︊VJ?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+                                                                                                                                                                                                                                                                                   }
+                                                                                                                                                                                                                                                                                  ]}]}
+                                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                                }}}
+                                                                                                                                                                                                                                                                               ],
+                                                                                                                                                                                                                                                                               "쏷쐲۹퉃~aE唙a챑,9㮹gLHd'䔏|킗㍞䎥&KZYT맵7䥺N<Hp4ꕭ⹠꽐c~皽z": "课|ᖾ䡁廋萄䐪W\u0016&Jn괝b~摓M>ⱳ同莞鿧w\\༌疣n/+ꎥU\"封랾○ퟙAJᭌ?9䛝$?驔9讐짘魡T֯c藳`虉C읇쐦T"
+                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                             "谶개gTR￐>ၵ͚dt晑䉇陏滺}9㉸P漄": -3350307268584339381
+                                                                                                                                                                                                                                                                            }]
+                                                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                                                          ]
+                                                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                                       ],
+                                                                                                                                                                                                                                                                       "0y꟭馋X뱔瑇:䌚￐廿jg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑㐄J쩩䭛ꬿNS潔*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+                                                                                                                                                                                                                                                                       "풵O^-⧧ⅶvѪ8廸鉵㈉ר↝Q㿴뺟EႳvNM:磇>w/៻唎뷭୥!냹D䯙i뵱貁C#⼉NH6`柴ʗ#\\!2䂗Ⱨf?諳.P덈-返I꘶6?8ꐘ": -8934657287877777844,
+                                                                                                                                                                                                                                                                       "溎-蘍寃i诖ര\"汵\"\ftl,?d⼡쾪⺋h匱[,෩I8MҧF{k瓿PA'橸ꩯ綷퉲翓": null
+                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                    ],
+                                                                                                                                                                                                                                                                    "ោ係؁<元": 1.7926963090826924E-18
+                                                                                                                                                                                                                                                                   }}]
+                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                ]]}]
+                                                                                                                                                                                                                                                               }]
+                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                           "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+                                                                                                                                                                                                                                                          }]
+                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                       ]],
+                                                                                                                                                                                                                                                       "∳㙰3젴p᧗䱙?`<U὇<\/意E[ᮚAj诂ᒽ阚uv徢ဎ떗尔Ᵹ훀쩑J䐴?⪏=륪ᆩ푰ஓ㐕?럽VK\"X?檨လ齿I/耉A(AWA~⏯稐蹫": false,
+                                                                                                                                                                                                                                                       "偒妝뾇}䀼链i⇃%⋜&璪Ix渥5涧qq棩ᥝ-⠫AA낇yY颕A*裦O|n?䭬혗F": null,
+                                                                                                                                                                                                                                                       "琭CL얭B혆Kॎ`鎃nrsZiժW砏)?p~K~A眱䲏QO妣\u001b\u001b]ᵆᆯ&㐋ᏹ豉뺘$ꭧ#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+                                                                                                                                                                                                                                                       "쳱冲&ဤ䌏앧h胺-齱H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9걢9p봋경ጕtởꚳT䶽瘙%춴`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uurwkn뙧⌲%\"쑃牪\"cq윕o@",
+                                                                                                                                                                                                                                                       "溌[H]焎SLㅁ?뀼䫨災W": 1.1714289118497062E-19,
+                                                                                                                                                                                                                                                       "ﬢp븇剌燇kĔ尘㶿㴞睠꾘Ia;s❺^)$穮?sHᢥ폪l": null
+                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                  "TKnzj5o<\/K㊗ꗣ藠⦪駇>yZA8Ez0,^ᙛ4_0븢\u001ft:~䎼s.bb룦明yNP8弆C偯;⪾짍'蕴뮛": -6976654157771105701,
+                                                                                                                                                                                                                                                  "큵ꦀ\\㇑:nv+뒤燻䀪ﴣ﷍9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                               }],
+                                                                                                                                                                                                                                               "?}\u20e0],s嶳菋@#2u쒴sQS䩗=ꥮ;烌,|ꘔ䘆": "ᅩ영N璠kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]啗`K'"
+                                                                                                                                                                                                                                              }},
+                                                                                                                                                                                                                                              "쨀jmV賂ﰊ姐䂦玞㬙ᏪM᪟Վ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|S䝬葫㽁o": true
+                                                                                                                                                                                                                                             },
+                                                                                                                                                                                                                                             "즛ꄤ酳艚␂㺘봿㎨iG৕ࡿ?1\"䘓您\u001fSኝ⺿溏zៀ뻤B\u0019?윐a䳵᭱䉺膷d:<\/": 3935553551038864272
+                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                          ]}
+                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                        ]]
+                                                                                                                                                                                                                                       ]}
+                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                   ]]}},
+                                                                                                                                                                                                                                   "᥺3h↛!ꋰy\"攜(ெl䪕oUkc1A㘞ᡲ촾ᣫ<\/䒌E㛝潨i{v?W౾H\\RჅpz蝬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+                                                                                                                                                                                                                                   "ⶸ?x䊺⬝-䰅≁!e쩆2ꎿ准G踌XXᩯ1߁}0?.헀Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\礍뗔d设룱㶉cq{HyぱR㥽吢ſtp": -7985372423148569301,
+                                                                                                                                                                                                                                   "緫#콮IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$甝LV췐a갵'请o0g:^": "䔨(.",
+                                                                                                                                                                                                                                   "띳℡圤pン௄ĝ倧訜B쁟G䙔\"Sb⓮;$$▏S1J뢙SF|赡g*\"Vu䲌y": "䪈&틐),\\kT鬜1풥;뷴'Zေ䩹@J鞽NぼM?坥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eⶍ羷V}ჿ쎱䄫R뱃9Z>'\u20f1ⓕ䏜齮"
+                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                ]]]
+                                                                                                                                                                                                                               }}
+                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                            ]},
+                                                                                                                                                                                                                            "펮b.h粔폯2npX詫g錰鷇㇒<쐙S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\⍔?M&ﯟ<劜꺄멊ᄟA\"_=": null
+                                                                                                                                                                                                                           },
+                                                                                                                                                                                                                           "~潹Rqn榢㆓aR鬨侅?䜑亡V_翅㭔(䓷w劸ၳDp䀅<\/ﰎ鶊m䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_ќ)껚콥8곤d矦8nP倥ꃸI": null,
+                                                                                                                                                                                                                           "뾎/Q㣩㫸벯➡㠦◕挮a鶧⋓偼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+                                                                                                                                                                                                                          }],
+                                                                                                                                                                                                                          ",": -5426918750465854828,
+                                                                                                                                                                                                                          "2櫫@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻돎<늛䘍ﴡ줰쫄": false,
+                                                                                                                                                                                                                          "8(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eࠍk砝g 엻": false,
+                                                                                                                                                                                                                          "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+                                                                                                                                                                                                                          "ཎ耰큓ꐕ㱷\u0013y=詽I\"盈xm{0쾽倻䉚ષso#鰑/8㸴짯%ꀄ떸b츟*\\鲷礬ZQ兩?np㋄椂榨kc᡹醅3": false,
+                                                                                                                                                                                                                          "싊j20": false
+                                                                                                                                                                                                                         }]]
+                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                        "俛\u0017n緽Tu뫉蜍鼟烬.ꭠIⰓ\"Ἀ᜾uC쎆J@古%ꛍm뻨ᾀ画蛐휃T:錖㑸ዚ9죡$": true
+                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                     "㍵⇘ꦖ辈s}㱮慀밒s`\"㞟j:`i픻Z<C1衽$\"-饧?℃\u0010⼒{p飗%R\"䲔\")칀\\%": true,
+                                                                                                                                                                                                                     "苧.8\u00120ݬ仓": 6912164821255417986,
+                                                                                                                                                                                                                     "떎顣俁X;.#Q틝.笂'p쟨唒퐏랩냆¦aⱍ{谐.b我$蜑SH\u000f琾=䟼⣼奔ᜏ攕B&挰繗㝔ꅂ-Qv\\0䶝䚥ぺio[㑮-ᇼ䬰컪ṼiY){데\u0010q螰掻~\n輚x\u0014罺)軴": 3.024364150712629E-20
+                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                  ]
+                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                ]}
+                                                                                                                                                                                                               ]]
+                                                                                                                                                                                                              }
+                                                                                                                                                                                                             ]
+                                                                                                                                                                                                            ]]
+                                                                                                                                                                                                           ]
+                                                                                                                                                                                                          ]]]],
+                                                                                                                                                                                                          "\"凲o肉Iz絾豉J8?i~傠᫽䇂!WD溊J?ᡒvs菆嵹➒淴>섫^諎0Ok{켿歁෣胰a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+                                                                                                                                                                                                          "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lで끎!Agk'ꁛ뢃㯐岬D#㒦": false,
+                                                                                                                                                                                                          "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%~S菠␌힀6&t䳙y㪘냏\\*;鉏ᅧ鿵'嗕pa\"oL쇿꬈Cg": "㶽1灸D⟸䴅ᆤ뉎﷛渤csx 䝔цꬃ锚捬?ຽ+x~꘩uI࡞\u0007栲5呚ẓem?袝\")=㥴䨃pac!/揎Y",
+                                                                                                                                                                                                          "ᷱo\\||뎂몷r篙|#X䦜I#딌媸픕叞RD斳X4t⯩夬=[뭲r=绥jh뷱츝⪘%]⚋܈㖴スH텹m(WO曝劉0~K3c柢Ր㏉着逳~": false,
+                                                                                                                                                                                                          "煽_qb[첑\\륌wE❽ZtCNﭝ+餌ᕜOꛭ": "{ﳾ쉌&s惧ᭁⵆ3䢫;䨞팑꒪흘褀࢖Q䠿V5뭀䎂澻%받u5텸oA⮥U㎦;B䳌wz䕙$ឿ\\௅婺돵⪾퐆\\`Kyौꋟ._\u0006L챯l뇠Hi䧈偒5",
+                                                                                                                                                                                                          "艊佁ࣃ롇䱠爬!*;⨣捎慓q靓|儑ᨋL+迥=6㒺딉6弄3辅J-㕎뛄듘SG㆛(\noAzQꝱ䰩X*ぢO퀌%펠낌mo틮a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+                                                                                                                                                                                                          "鬙@뎣䫳ၮ끡?){y?5K;TA*k溱䫜J汃ꂯ싔썍\u001dA}룖(<\/^,": false,
+                                                                                                                                                                                                          "몏@QꋦFꊩᒐ뎶lXl垨4^郣|ꮇ;䝴ᝓ}쵲z珖": null
+                                                                                                                                                                                                         }
+                                                                                                                                                                                                        ]]]],
+                                                                                                                                                                                                        ":_=닧弗D䙋暨鏛. 㱻붘䂍J儒&ZK/녩䪜r囁⽯D喠죥7⹌䪥c\u001a\u2076￞妈朹oLk菮F౟覛쐧㮏7T;}蛙2{9\"崓bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{响1WM"
+                                                                                                                                                                                                       }},
+                                                                                                                                                                                                       "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+                                                                                                                                                                                                       "䮴=❑➶T෋w䞜\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!᧟;䱀[䔯k쬃`੍8饙른熏'2_'袻tGf蒭J땟as꯳╖&啒zWࡇᒫYSᏬ\u0014ℑ첥鈤|cG~Pᓮ\">\"": "ႆl\f7V儊㦬nHꄬꨧC{쐢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMⵖ釔녮ꝇ 㝚{糍J哋 cv?-jkﻯྌ鹑L舟r",
+                                                                                                                                                                                                       "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥qZZ酒ຜ)鮢樛)X䣆gTSґG텞k.J圬疝롫쯭z L:\\ྤ@w炋塜쿖ᾳy뢀䶃뱝N䥨㚔勇겁#p",
+                                                                                                                                                                                                       "도畎Q娡\"@S/뼋:䵏!P衅촚fVHQs✜ᐫi㻑殡B䜇%믚k*U#濨낄~": "ꍟዕ쳸ꍈ敋&l妏\u0005憡멗瘌uPgᅪm<\/To쯬锩h뒓k"
+                                                                                                                                                                                                      }
+                                                                                                                                                                                                     ]
+                                                                                                                                                                                                    }],
+                                                                                                                                                                                                    "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9鋙a[LR㋭W胕)⡿8㞙0JF,}?허d1cDMᐃ␛鄝ⱕ%X)!XQ": "ⳍꗳ=橇a;3t⦾꼑仈ူaᚯ⯋ꕃAs鴷N⍕_䎃ꙎAz\u0016䯷\\<࿫>8q{}キ?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+                                                                                                                                                                                                   },
+                                                                                                                                                                                                   "܋닐龫論c웑": false,
+                                                                                                                                                                                                   "ㇿ/q\"6-co髨휝C큦#\u001b4~?3䐹E삇<<": 7.600917488140322E-20,
+                                                                                                                                                                                                   "䁝E6?㣖ꃁ间t祗*鑠{ḣV(浾h逇큞=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "v≁᫸_*όAඤԆl)ۓᦇQ}폠z༏q滚",
+                                                                                                                                                                                                   "ソ᥊/넺I": true
+                                                                                                                                                                                                  }]]
+                                                                                                                                                                                                 ]
+                                                                                                                                                                                                ]
+                                                                                                                                                                                               ]
+                                                                                                                                                                                              ]]
+                                                                                                                                                                                             },
+                                                                                                                                                                                             "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+                                                                                                                                                                                             "坄꿕C쇻풉~崍%碼\\8\"䬦꣙": null,
+                                                                                                                                                                                             "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%闹r冁O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<゛XፈINT:詓 +": -1.0750456770694562E-19,
+                                                                                                                                                                                             "獒àc뜭싼ﺳ뎤K`]p隨LtE": null,
+                                                                                                                                                                                             "甙8䵊神EIꩤ鐯ᢀ,ﵮU䝑u疒ử驺䚿≚ഋ梶秓F`覤譐#짾蔀묊4<媍쬦靪_Yzgcࡶ4k紥`kc[Lﮗ簐*I瀑[⾰L殽鑥_mGȠ<\/|囹灠g桰iri": true,
+                                                                                                                                                                                             "챓ꖙꟻ좝菇ou,嗠0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?됦鏖綃6鳵M[OE봨u햏.Ꮁ癜蟳뽲ꩌ뻾rM豈R嗀羫 uDꎚ%": null
+                                                                                                                                                                                            },
+                                                                                                                                                                                            "V傜2<": 7175127699521359521
+                                                                                                                                                                                           }],
+                                                                                                                                                                                           "铫aG切<\/\"ী⊆e<^g࢛)D顝nאַ饼\u008c猪繩嵿ﱚCꡬ㻊g엺A엦\u000f暿_f꿤볝㦕桦`蒦䎔j甬%岝rj 糏": "䚢偎눴Au<4箞7礦Iﱔ坠eȧ䪸u䵁p|逹$嗫쨘ꖾ﷐!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎㳁#༔繁 ",
+                                                                                                                                                                                           "낂乕ꃻ볨ϱ-ꇋ㖍fs⿫)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+                                                                                                                                                                                           "쟰ぜ魛G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@咕ꐶx뒘느m䰨b痃렐0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+                                                                                                                                                                                           "쯆q4!3錕㲏ⵆ㇛꘷Z瑩뭆\\◪NH\u001d\\㽰U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*長PXᘱu\"䠹n惞": null,
+                                                                                                                                                                                           "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽ꏪ#ﺸ\\&t6x꠹盥꣰a[\u001aꪍSpe鎿蠹": -1.1564713893659811E-19
+                                                                                                                                                                                          }
+                                                                                                                                                                                         ]]
+                                                                                                                                                                                        ]
+                                                                                                                                                                                       ]
+                                                                                                                                                                                      ],
+                                                                                                                                                                                      "羵䥳H,6ⱎ겾|@t\"#햊1|稃 섭)띜=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+                                                                                                                                                                                     }
+                                                                                                                                                                                    ]}
+                                                                                                                                                                                   ]},
+                                                                                                                                                                                   "츤": false
+                                                                                                                                                                                  }},
+                                                                                                                                                                                  "s": 3.7339341963399598E18
+                                                                                                                                                                                 }
+                                                                                                                                                                                ],
+                                                                                                                                                                                "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇v步": "~읢~_,Mzr㐫YB溓E淚\"ⅹ䈔ᏺ抙 b,nt5V㐒J檶ꏨ⻔?",
+                                                                                                                                                                                "Q껑ꡡ}$넎qH煔惍/ez^!ẳF댙䝌馻剁8": "梲;yt钰$i冄}AL%a j뜐奷걳뚾d꿽*ሬuDY3?뮟鼯뮟w㍪틱V",
+                                                                                                                                                                                "o{Q/K O胟㍏zUdꀐm&⨺J舕⾏魸訟㌥[T籨櫉唐킝 aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤퐥_恸[ 0e:죃TC弼荎뵁DA:w唵ꣁ": null,
+                                                                                                                                                                                "὏樎䵮軧|?౗aWH쩃1 ꅭsu": null
+                                                                                                                                                                               }
+                                                                                                                                                                              ]
+                                                                                                                                                                             },
+                                                                                                                                                                             "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+                                                                                                                                                                             "殣b綊倶5㥗惢⳷萢ᑀ䬄镧M^ﱴ3⣢翣n櫻1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ꔙ䁼>n^[GीA䨟AM琢ᒊS쨲w?d㶣젊嘶纝麓+愣a%気ྞSc됓ᔘ:8bM7Xd8㶑臌]Ꙥ0ꐭ쒙䫣挵C薽Dfⵃ떼᷸",
+                                                                                                                                                                             "?紡.셪_෨j\u0013Ox┠$Xᶨ-ᅇo薹-}軫;y毝㪜K㣁?.EV쮱4둽⛻䤜'2盡\u001f60(|e쐰㼎ᦀ㒧-$l@ﻑ坳\u0003䭱响巗WFo5c㧆T턁Y맸♤(": -2.50917882560589088E17
+                                                                                                                                                                            }}
+                                                                                                                                                                           ],
+                                                                                                                                                                           "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳䁮Ql怠㦵": "@䟴-=7f",
+                                                                                                                                                                           "鹟1x௢+d ;vi䭴FSDS\u0004hꎹ㚍?⒍⦏ў6u,扩@됷Su)Pag휛TᒗV痩!瞏釀ꖞ蘥&ೞ蘐ꭰꞇᝎ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦㊝Y*^\"R+ඈ咷蝶9ꥂ榨艦멎헦閝돶v좛咊E)K㓷ྭr",
+                                                                                                                                                                           "搆q쮦4綱켙셁.f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.ᰖ풎f֦Hv蔎㧤.!䭽=鞽]음H:?\"-4": 8.740133984938656E-20
+                                                                                                                                                                          }]}
+                                                                                                                                                                         }
+                                                                                                                                                                        ],
+                                                                                                                                                                        "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFᅏ傅ﱋ猢⤊ᔁ,E㓒秤nTතv`♛I\u0000]꫔ṞD\"麵c踝杰X&濿또꣹깳౥葂鿎\\aꡨ?": 3900062609292104525
+                                                                                                                                                                       }
+                                                                                                                                                                      ],
+                                                                                                                                                                      "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+                                                                                                                                                                      "⎢k⑊꬗yᏫ7^err糎Dt\u000bJ礯확ㆍ沑サꋽe赔㝢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညS지?~콮gR敉⬹'䧭": 1901472137232418266,
+                                                                                                                                                                      "灗k䶥:?촽贍쓉꓈㒸g獘[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fᡰly㘽$?": "]ꙛO赎&#㠃돱剳\"<◆>0誉齐_|z|裵씪>ᐌ㼍\"Z[琕}O?G뚇諦cs⠜撺5cu痑U圲\u001c?鴴計l춥/╓哼䄗茏ꮅ뫈댽A돌롖뤫V窗讬sHd&\nOi;_u"
+                                                                                                                                                                     }
+                                                                                                                                                                    ],
+                                                                                                                                                                    "Uﺗ\\Y\\梷䄬~\u0002": null,
+                                                                                                                                                                    "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+                                                                                                                                                                    "曏J蝷⌻덦\u001f㙳s꥓⍟邫P늮쥄c∬ྡྷ舆렮칤Z趣5콡넛A쳨\\뀙骫(棻.*&輛LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+                                                                                                                                                                   }]}
+                                                                                                                                                                  ]
+                                                                                                                                                                 ],
+                                                                                                                                                                 "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+                                                                                                                                                                }
+                                                                                                                                                               ]
+                                                                                                                                                              ]}]
+                                                                                                                                                             }]
+                                                                                                                                                            }}
+                                                                                                                                                           ],
+                                                                                                                                                           "2f`⽰E쵟>J笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vx፭gE됓h﵀mfỐ|?juTU档[d⢼⺻p濚7E峿": 5613688852456817133
+                                                                                                                                                          },
+                                                                                                                                                          "濘끶g忮7㏵殬W팕Q曁 뫰)惃廊5%-蹚zYZ樭ﴷQ锘쯤崫gg": true,
+                                                                                                                                                          "絥ᇑ⦏쒓븣爚H.㗊߄o蘵貆ꂚ(쎔O᥉ﮓ]姨Wꁓ!RMA|o퉢THx轮7M껁U즨'i뾘舯o": "跥f꜃?"
+                                                                                                                                                         }}
+                                                                                                                                                        ],
+                                                                                                                                                        "鷰鹮K-9k;ﰰ?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇㏢ꀇ࠺ⰼ拾喭틮L꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+                                                                                                                                                       },
+                                                                                                                                                       "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eᐳw橖b῀_딕hu葰窳闹вU颵|染H죶.fP䗮:j䫢\\b뎖i燕ꜚG⮠W-≚뉗l趕": "ଊ칭Oa᡺$IV㷧L\u0019脴셀붿餲햪$迳向쐯켂PqfT\" ?I屉鴼쿕@硙z^鏕㊵M}㚛T젣쓌-W⩐-g%⺵<뮱~빅╴瑿浂脬\u0005왦燲4Ⴭb|D堧 <\/oEQh",
+                                                                                                                                                       "䘶#㥘੐캔f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ꘁ*rಐ趣.d࿩k/抶면䒎9W⊃9": "漩b挋Sw藎\u0000",
+                                                                                                                                                       "畀e㨼mK꙼HglKb,\"'䤜": null
+                                                                                                                                                      }]}]
+                                                                                                                                                     ]
+                                                                                                                                                    ]
+                                                                                                                                                   }]
+                                                                                                                                                  ]}
+                                                                                                                                                 ]
+                                                                                                                                                ]}
+                                                                                                                                               ],
+                                                                                                                                               "歙>駿ꣂ숰Q`J΋方樛(d鱾뼣(뫖턭\u20f9lচ9歌8o]8윶l얶?镖G摄탗6폋폵+g:䱫홊<멀뀿/س|ꭺs걐跶稚W々c㫣⎖": "㣮蔊깚Cꓔ舊|XRf遻㆚︆'쾉췝\\&言",
+                                                                                                                                               "殭\"cށɨꝙ䞘:嬮e潽Y펪㳅/\"O@ࠗ겴]췖YǞ(t>R\"N?梳LD恭=n氯T豰2R諸#N}*灧4}㶊G䍣b얚": null,
+                                                                                                                                               "襞<\/啧 B|싞W瓇)6簭鼡艆lN쩝`|펭佡\\間邝[z릶&쭟愱ꅅ\\T᰽1鯯偐栈4̸s윜R7⒝/똽?치X": "⏊躖Cﱰ2Qẫ脐&இ?%냝悊",
+                                                                                                                                               ",鰧偵셣싹xᎹ힨᯳EṬH㹖9": -4604276727380542356
+                                                                                                                                              }
+                                                                                                                                             }
+                                                                                                                                            ]]]],
+                                                                                                                                            "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+                                                                                                                                           }]
+                                                                                                                                          ]
+                                                                                                                                         ]
+                                                                                                                                        ],
+                                                                                                                                        "Kd2Kv+|z": 7367845130646124107,
+                                                                                                                                        "ᦂⶨ?ᝢ 祂些ഷ牢㋇操\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfۻ$ў1柦,㶢9r漢": -3.133230960444846E-20,
+                                                                                                                                        "琘M焀q%㢟f鸯O⣏蓑맕鯊$O噷|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?^^of": null
+                                                                                                                                       }
+                                                                                                                                      ],
+                                                                                                                                      "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+                                                                                                                                      "cpT瀇H珰Ừpೃi鎪Rr␣숬-鹸ҩ䠚z脚цGoN8入y%趌I┽2ឪЀiJNcN)槣/▟6S숆牟\"箑X僛G殱娇葱T%杻:J諹昰qV쨰": 8331037591040855245
+                                                                                                                                     }],
+                                                                                                                                     "G5ᩜ䄗巢껳": true
+                                                                                                                                    }
+                                                                                                                                   },
+                                                                                                                                   "Ồ巢ゕ@_譙A`碫鄐㡥砄㠓(^K": "?܃B혢▦@犑ὺD~T⧁|醁;o=J牌9냚⢽㨘{4觍蚔9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎➁㭒춺C㣌ဉ\"2瓑员ᅽꝶ뫍}꽚ꞇ鶂舟彺]ꍽJC蝧銉",
+                                                                                                                                   "␆Ě膝\"b-퉐ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾e萃}]Bs⾿q룅鷦-膋?m+死^魊镲6",
+                                                                                                                                   "粡霦c枋AHퟁo礼Ke?qWcA趸㡔ꂏ?\u000e춂8iতᦜ婪\u0015㢼nﵿꍻ!ᐴ関\u001d5j㨻gfῩUK5Ju丝tかTI'?㓏t>⼟o a>i}ᰗ;뤕ܝ": false,
+                                                                                                                                   "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kL谖,'涃V~챳逋穞cT\"vQ쓕ObaCRQ㓡Ⲯ?轭⫦輢墳?vA餽=h䮇킵n폲퉅喙?\"'1疬V嬗Qd灗'Lự": "6v!s믁㭟㣯獃!磸餠ቂh0C뿯봗F鷭gꖶ~コkK<ᦈTt\\跓w㭣횋钘ᆹ듡䑚W䟾X'ꅔ4FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?块",
+                                                                                                                                   "?(˧쩯@崟吋歄K": null
+                                                                                                                                  },
+                                                                                                                                  "Gc럃녧>?2DYI鴿\\륨)澔0ᔬlx'觔7젘⤡縷螩%Sv׫묈/]↱&S h\u0006歋ᑛxi̘}ひY蔯_醨鯘煑橾8?䵎쨋z儬ꁏ*@츾:": null
+                                                                                                                                 }
+                                                                                                                                }
+                                                                                                                               }
+                                                                                                                              ]
+                                                                                                                             ]
+                                                                                                                            ]}
+                                                                                                                           },
+                                                                                                                           "HO츧G": 3.694949578823609E17,
+                                                                                                                           "QC\u0012(翻曇Tf㷟bGBJ옉53\\嚇ᛎD/\u001b夾၉4\"핀@祎)쫆yD\"i먎Vn㿿V1W᨝䶀": -6150931500380982286,
+                                                                                                                           "Z㓮P翸鍱鉼K䋞꘺튿⭁Y": -7704503411315138850,
+                                                                                                                           "]모开ꬖP븣c霤<[3aΠ\"黁䖖䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭䖏&鋌": -2.7231911483181824E18,
+                                                                                                                           "tꎖ": -4.9517948741799555E-19,
+                                                                                                                           "䋘즊.⬅IꬃۣQ챢ꄑ黐|f?C⾺|兕읯sC鬸섾整腨솷V": "旆柩l<K髝M戶鯮t:wR2ꉱ`9'l픪*폍芦㊢Pjjo堡^  읇얛嶅있ষ0?F",
+                                                                                                                           "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+                                                                                                                           "櫨:ㆣ,邍lr崕祜㐮烜Z,XXD蕼㉴ kM꯽?P0﹉릗": null,
+                                                                                                                           "gv솠歽閘4镳䗄2澾>쪦sᖸMy㦅울썉瘗㎜檵9ꍂ駓ૉᚿ/u3씅徐拉[Z䞸ࡗ1ꆱ&Q풘?ǂ8\u0011BCDY2볨;鸏": null,
+                                                                                                                           "幫 n煥s쁇펇 왊-$C\"衝:\u0014㣯舼.3뙗Yl⋇\"K迎멎[꽵s}9鉳UK8쐥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘W鏨蔮": -4.150842714188901E-17,
+                                                                                                                           "ﺯ^㄄\b죵@fྉkf颡팋Ꞧ{/Pm0V둳⻿/落韒ꊔᚬ@5螺G\\咸a谆⊪ቧ慷绖?财(鷇u錝F=r၍橢ឳn:^iᴵtD볠覅N赴": null
+                                                                                                                          }]
+                                                                                                                         }]
+                                                                                                                        }
+                                                                                                                       ]
+                                                                                                                      ]}
+                                                                                                                     ]},
+                                                                                                                     "謯?w厓奰T李헗聝ឍ貖o⪇弒L!캶$ᆅ": -4299324168507841322,
+                                                                                                                     "뺊奉_垐浸延몏孄Z舰2i$q붿좾껇d▵餏\"v暜Ҭ섁m￴g>": -1.60911932510533427E18
+                                                                                                                    }
+                                                                                                                   ]
+                                                                                                                  }
+                                                                                                                 ]
+                                                                                                                ]],
+                                                                                                                "퉝꺔㠦楶Pꅱ": 7517896876489142899,
+                                                                                                                "": false
+                                                                                                               }
+                                                                                                              ]},
+                                                                                                              "是u&I狻餼|谖j\"7c됮sסּ-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭N溔铉tlㆈ^": 1.93547720203604352E18,
+                                                                                                              "kⲨ\\%vr#\u000bⒺY\\t<\/3﬌R訤='﹠8蝤Ꞵ렴曔r": false
+                                                                                                             }
+                                                                                                            ]},
+                                                                                                            "阨{c?C\u001d~K?鎌Ԭ8烫#뙣P초遗t㭱E­돒䆺}甗[R*1!\\~h㕅᰺@<9JꏏષI䳖栭6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "운ﶁK敂(欖C취پ℄爦賾"
+                                                                                                           }
+                                                                                                          }}
+                                                                                                         }],
+                                                                                                         "鷨赼鸙+\\䭣t圙ڹx᜾ČN<\/踘\"S_맶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0濕=鉵氬駘>Pꌢpb솇쬤h힊줎獪㪬CrQ矠a&脍꼬爼M茴/΅\u0017弝轼y#Ꞡc6둴=?R崏뷠麖w?"
+                                                                                                        },
+                                                                                                        "閕ᘜ]CT)䵞l9z'xZF{:ؐI/躅匽졁:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7g덚E৏bꅰ輤]o㱏_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌V쁰ल二?c띦捱 \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkI\u001e鳴",
+                                                                                                        "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙/n??{L풓ZET㙠퍿X2᩟綳跠葿㚙w཮x캽扳B唕S|尾}촕%N?o䪨": null,
+                                                                                                        "ⰴFjෟ셈[\u0018辷px?椯\\1<ﲻ栘ᣁ봢憠뉴p": -5263694954586507640
+                                                                                                       }
+                                                                                                      ]
+                                                                                                     ]]
+                                                                                                    ]}
+                                                                                                   ]}]
+                                                                                                  ]
+                                                                                                 ],
+                                                                                                 "?#癘82禩鋆ꊝty?&": -1.9419029518535086E-19
+                                                                                                }
+                                                                                               ]
+                                                                                              ]
+                                                                                             ]}
+                                                                                            ]
+                                                                                           ]
+                                                                                          ],
+                                                                                          "훊榲.|῕戄&.㚏Zꛦ2\"䢥ሆ⤢fV_摕婔?≍Fji冀탆꜕i㏬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ぴ1縁ᙅ?쐉Ou": false
+                                                                                         }]]
+                                                                                        ]}}},
+                                                                                        "慂뗄卓蓔ᐓ匐嚖/颹蘯/翻ㆼL?뇊,텵<\\獷ごCボ": null
+                                                                                       },
+                                                                                       "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+                                                                                       "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃h灑\\ꛣ}K峐^ኖ⤐林ꉓhy": null
+                                                                                      }
+                                                                                     ],
+                                                                                     "᱀n肓ㄛ\"堻2>m殮'1橌%Ꞵ군=Ӳ鯨9耛<\/n據0u彘8㬇៩f᏿诙]嚊": "䋯쪦S럶匏ㅛ#)O`ሀX_鐪渲⛀㨻宅闩➈ꢙஶDR⪍"
+                                                                                    },
+                                                                                    "tA썓龇 ⋥bj왎录r땽✒롰;羋^\\?툳*┎?썀ma䵳넅U䳆૘〹䆀LQ0\b疀U~u$M}(鵸g⳾i抦뛹?䤈땚검.鹆?ꩡtⶥGĒ;!ቹHS峻B츪켏f5≺": 2366175040075384032,
+                                                                                    "전pJjleb]ួ": -7.5418493141528422E18,
+                                                                                    "n.鎖ጲ\n?,$䪘": true
+                                                                                   },
+                                                                                   "欈Ar㉣螵᪚茩?O)": null
+                                                                                  },
+                                                                                  "쫸M#x}D秱欐K=侫们丐.KꕾxẠ\u001e㿯䣛F܍캗qq8꟞ṢFD훎⵳簕꭛^鳜\u205c٫~⑟~冫ऊ2쫰<\/戲윱o<\"": true
+                                                                                 },
+                                                                                 "㷝聥/T뱂\u0010锕|内䞇x侁≦㭖:M?iM᣿IJe煜dG࣯尃⚩gPt*辂.{磼럾䝪@a\\袛?}ᓺB珼": true
+                                                                                }
+                                                                               }
+                                                                              ]]}]}},
+                                                                              "tn\"6ꫤ샾䄄;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩S䠮ᐴm;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+                                                                              "ᚔt'\\愫?鵀@\\びꂕP큠<<]煹G-b!S?\nꖽ鼫,ݛ&頺y踦?E揆릱H}햧캡b@手.p탻>췽㣬ꒅ`qe佭P>ᓂ&?u}毚ᜉ蟶頳졪ᎏzl2wO": -2.53561440423275936E17
+                                                                             }]}
+                                                                            }
+                                                                           ]
+                                                                          ]],
+                                                                          "潈촒⿂叡": 5495738871964062986
+                                                                         }
+                                                                        ]]
+                                                                       }
+                                                                      ]
+                                                                     ]}
+                                                                    ]]
+                                                                   ]]
+                                                                  ]}
+                                                                 ]
+                                                                ]},
+                                                                "ႁq킍蓅R`謈蟐ᦏ儂槐僻ﹶ9婌櫞釈~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈੁ⋧d␽㫐zCe*": 2.15062231586689536E17,
+                                                                "㶵Ui曚珰鋪ᾼ臧P{䍏䷪쨑̟A뼿T渠誈䏚D1!잶<\/㡍7?)2l≣穷᛾稝{:;㡹nemיּ訊`G": null,
+                                                                "䀕\"飕辭p圁f#뫆䶷뛮;⛴ᩍ3灚덏ᰝ쎓⦷詵%᜖Մfs⇫(\u001e~P|ﭗCⲾផv湟W첋(텪બT<บSꏉ੗⋲X婵i ӵ⇮?L䬇|ꈏ?졸": 1.548341247351782E-19
+                                                               }
+                                                              ]
+                                                             },
+                                                             "t;:N\u0015q鐦Rt缆{ꮐC?஛㷱敪\\+鲊㉫㓪몗릙竏(氵kYS": "XᰂT?൮ô",
+                                                             "碕飦幑|+ 㚦鏶`镥ꁩ B<\/加륙": -4314053432419755959,
+                                                             "秌孳(p!G?V傫%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭鎍흘\\ONK3횙<\/樚立圌Q튅k쩎Ff쁋aׂJK銆ઘ즐狩6༥✙䩜篥CzP(聻駇HHퟲ讃%,ά{렍p而刲vy䦅ክ^톺M楒鍢㹳]Mdg2>䤉洞",
+                                                             "踛M젧>忔芿㌜Zk": 2215369545966507819,
+                                                             "씐A`$槭頰퍻^U覒\bG毲aᣴU;8!팲f꜇E⸃_卵{嫏羃X쀳C7뗮m(嚼u N܁谟D劯9]#": true,
+                                                             "ﻩ!뵸-筚P᭛}ἰ履lPh?౮ⶹꆛ穉뎃g萑㑓溢CX뾇G㖬A錟]RKaꄘ]Yo+@䘁's섎襠$^홰}F": null
+                                                            },
+                                                            "粘ꪒ4HXᕘ蹵.$區\r\u001d묁77pPc^y笲Q<\/ꖶ 訍䃍ᨕG?*": 1.73773035935040224E17
+                                                           },
+                                                           "婅拳?bkU;#D矠❴vVN쩆t㜷A풃갮娪a%鮏絪3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ԣ+]贴P荿": 2.9628516456987075E18
+                                                          }]}}]
+                                                         ]}
+                                                        }}
+                                                       ]}]
+                                                      ],
+                                                      "|g翉F*湹̶\u0005⏐1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:遀ᄐX눔擉)`N3昛oQ셖y-ڨ⾶恢ꈵq^<\/": null,
+                                                      "菹\\랓G^璬x৴뭸ゆUS겧﮷Bꮤ ┉銜᯻0%N7}~f洋坄Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4봋ⱳ叺怊t+怯涗\"0㖈Hq": false,
+                                                      "졬믟'ﺇফ圪쓬멤m邸QLব䗁愍4jvs翙 ྍ꧀艳H-|": null,
+                                                      "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+                                                     }
+                                                    ],
+                                                    "B䔚bꐻ뙏姓展槰T-똌鷺tc灿᫽^㓟䏀o3o$꘭趙萬I顩)뇭Ἑ䓝\f@{ᣨ`x3蔛": null
+                                                   }
+                                                  ]
+                                                 ]
+                                                }],
+                                                "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷贏璿䜑bG倛⋐磎c皇皩7a~ﳫU╣Q࠭ꎉS摅姽OW.홌ೞ.": null,
+                                                "蚪eVlH献r}ᮏ믠ﰩꔄ@瑄ⲱ": null,
+                                                "퀭$JWoꩢg역쁍䖔㑺h&ୢtXX愰㱇?㾫I_6 OaB瑈q裿": null,
+                                                "꽦ﲼLyr纛Zdu珍B絟쬴糔?㕂짹䏵e": "ḱ\u2009cX9멀i䶛簆㳀k"
+                                               }
+                                              ]]]],
+                                              "(_ꏮg່澮?ᩑyM<艷\u001aꪽ\\庼뙭Z맷㰩Vm\\lY筺]3㋲2㌩㄀Eਟ䝵⨄쐨ᔟgङHn鐖⤇놋瓇Q탚單oY\"♆臾jHᶈ征ቄ??uㇰA?#1侓": null
+                                             },
+                                             "觓^~ሢ&iI띆g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+                                             "y詭Gbᔶऽs댁U:杜⤎ϲ쁗⮼D醄诿q뙰I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃L菝,봬ꤦC쯵#=X1瞻@OZc鱗CQTx": null
+                                            }
+                                           ]
+                                          }}],
+                                          "剘紁\u0004\\Xn⊠6,တױ;嵣崇}讃iႽ)d1\\䔓": null
+                                         },
+                                         "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+                                         "諳>*쭮괐䵟Ґ+<箁}빀䅱⡔檏臒hIH脟ꩪC핝ଗP좕\"0i<\/C褻D۞恗+^5?'ꂱ䚫^7}㡠cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{A煲G": -6880961710038544266
+                                        }}]
+                                       },
+                                       "5s⨲JvಽῶꭂᄢI.a৊": null,
+                                       "?1q꽏쿻ꛋDR%U娝>DgN乭G": -1.2105047302732358E-19
+                                      }
+                                     ]
+                                    ]},
+                                    "qZz`撋뙹둣j碇쁏\\ꆥ\u0018@藴疰Wz)O{F䶛l᷂绘訥$]뮍夻䢋䩇萿獰樧猵⣭j萶q)$꬚⵷0馢W:Ⱍ!Qoe": -1666634370862219540,
+                                    "t": "=wp|~碎Q鬳Ӎ\\l-<\/^ﳊhn퐖}䍔t碵ḛ혷?靻䊗",
+                                    "邙쇡㯇%#=,E4勃驆V繚q[Y댻XV㡸[逹ᰏ葢B@u=JS5?bLRn얮㍉⏅ﰳ?a6[&큟!藈": 1.2722786745736667E-19
+                                   },
+                                   "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧d稝~No穔噕뽲)뉈c5M윅>⚋[岦䲟懷恁?鎐꓆ฬ爋獠䜔s{\u001bm鐚儸煛%bﯿXT>ꗘ@8G": 1157841540507770724,
+                                   "媤娪Q杸\u0011SAyᡈ쿯": true,
+                                   "灚^ಸ%걁<\/蛯<O\"-刷㏠R(kO=䢊䅎l䰓팪A絫픧": "譔\\㚄 ?R7㔪G㋉⣰渆?\\#|gN⤴;W칷A׫癮଼ೣ㏳뒜7d恓꾲0扬S0ᆵi/贎ྡn䆋武",
+                                   "萇砇Gこ朦켋Wq`㞲攊*冁~霓L剢zI腧튴T繙Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚␯OM焄覤\\(Kӡ>?\"祴坓\\\\'흍": -3.4614808555942579E18,
+                                   "釴U:O湛㴑䀣렑縓\ta)<D8ﭳ槁髭D.L|xs斋敠\"띋早7wᎍ": true,
+                                   "쵈+쬎簨up䓬?q+~\u0019仇뵈᫯3ᵣ恘枰劫㪢u珘-퀭:컙:u`⌿A(9鄦!<珚nj3:Hࣨ巋䀁旸뎈맻v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮둝": null,
+                                   "": -1.2019926774977002E-18,
+                                   "%者O7.Nꪍs梇接z蕜綛<\/䜭\"죊y<曋漵@Ś⹝sD⟓jݗᢜ?z/9ၲMa쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Y㿠鸁䕒^옥": "鬃뫤&痽舎J콮藐󽸰ᨨMꈫ髿v<N\\.삒껅я1ꭼ5䴷5쳬臨wj덥"
+                                  }],
+                                  "鷎'㳗@帚妇OAj' 谬f94ǯ(횡ヒ%io쪖삐좛>(j:숾却䗌gCiB뽬Oyuq輥厁/7)?今hY︺Q": null
+                                 }
+                                ]
+                               ]]]}]
+                              ],
+                              "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷菟.Esr릙!W☆䲖뗷莾뒭U\"䀸犜Uo3Gꯌx4r蔇᡹㧪쨢準<䂀%ࡡꟼ瑍8炝Xs0䀝销?fi쥱ꆝલBB": -8571484181158525797,
+                              "L⦁o#J|\"⽩-㱢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒㘍蠤Vᛸ\"络QJL2,嬓왍伢㋒䴿考澰@(㏾`kX$끑эE斡,蜍&~y",
+                              "vj.|统圪ᵮPL?2oŶ`밧\"勃+0ue%⿥绬췈체$6:qa렐Q;~晘3㙘鹑": true,
+                              "ශؙ4獄⶿c︋i⚅:ん閝Ⳙ苆籦kw{䙞셕pC췃ꍬ␜꟯ꚓ酄b힝hwk꭭M鬋8B耳쑘WQ\\偙ac'唀x᪌\u2048*h짎#ፇ鮠뾏ឿ뀌": false,
+                              "⎀jꄒ牺3Ⓝ컴~?親ꕽぼܓ喏瘘!@<튋㐌꿱⩦{a?Yv%⪧笯Uܱ栅E搚i뚬:ꄃx7䙳ꦋ&䓹vq☶I䁘ᾘ涜\\썉뺌Lr%Bc㍜3?ꝭ砿裞]": null,
+                              "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+                              "ㇲ\t⋇轑ꠤ룫X긒\"zoY읇희wj梐쐑l侸`e%s": -9.9240075473576563E17,
+                              "啸ꮑ㉰!ᚓ}銏": -4.0694813896301194E18,
+                              ">]囋੽EK뇜>_ꀣ緳碖{쐐裔[<ನ\"䇅\"5L?#xTwv#罐\u0005래t应\\N?빗;": "v쮽瞭p뭃"
+                             }
+                            ]],
+                            "斴槾?Z翁\"~慍弞ﻆ=꜡o5鐋dw\"?K蠡i샾ogDﲰ_C*⬟iㇷ4nય蟏[㟉U꽌娛苸 ঢ়操贻洞펻)쿗૊許X⨪VY츚Z䍾㶭~튃ᵦ<\/E臭tve猑x嚢": null,
+                            "锡⛩<\/칥ꈙᬙ蝀&Ꚑ籬■865?_>L詏쿨䈌浿弥爫̫lj&zx<\/C쉾?覯n?": null,
+                            "꾳鑤/꼩d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010屗9쁡钁u?殢c䳀蓃樄욂NAq赟c튒瘁렶Aૡɚ捍"
+                           }
+                          ]
+                         ]
+                        ]}
+                       ]
+                      ]
+                     }]]]}}
+                    ]}],
+                    "Ej䗳U<\/Q=灒샎䞦,堰頠@褙g_\u0003ꤾfⶽ?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬荋BO7㢝䟸\"Yb": 2.36010731779814E-20,
+                    "逸'0岔j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqv䰞3Ь踌v㳆¹gT┌gvLB賖烡m?@E঳i": null
+                   },
+                   "曺v찘ׁ?&绫O័": 9107241066550187880
+                  }
+                 ]
+                ],
+                "(e屄\u0019昜훕琖b蓘ᬄ0/۲묇Z蘮ဏ⨏蛘胯뢃@㘉8ሪWᨮ⦬ᅳ䅴HI၇쨳z囕陻엣1赳o": true,
+                ",b刈Z,ၠ晐T솝ŕB⩆ou'퐼≃绗雗d譊": null,
+                "a唥KB\"ﳝ肕$u\n^⅄P䟼냉䞸⩪u윗瀱ꔨ#yşs꒬=1|ﲤ爢`t౐튼쳫_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+                "?㴸U<\/䢔ꯡ阽扆㐤q鐋?f㔫wM嬙-;UV죫嚔픞G&\"Cᗍ䪏풊Q": "VM7疹+陕枡툩窲}翡䖶8欞čsT뮐}璤:jﺋ鎴}HfA൝⧻Zd#Qu茅J髒皣Y-︴[?-~쉜v딏璮㹚䅊﩯<-#\u000e걀h\u0004u抱﵊㼃U<㱷⊱IC進"
+               },
+               "숌dee節鏽邺p넱蹓+e罕U": true
+              }
+             ],
+             "b⧴룏??ᔠ3ぱ>%郿劃翐ꏬꠛW瞳᫏누躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆᏥ老熷u듷"
+            }}
+           ]
+          }
+         ]}
+        }
+       }
+      }
+     }},
+     "宩j鬅쳜QꝖјy獔Z᭵1v擖}䨿F%cֲ᫺贴m塼딚NP亪\"ᅨsa뺯ꘓ2:9뛓༂쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxP񱒫X쇤": -2.22390568492330598E18,
+     "?䯣ᄽ@Z鸅->ᴱ纊:㠭볮?%N56%鈕1䗍䜁a䲗j陇=뿻偂衋࿘ᓸ?ᕵZ+<\/}H耢b䀁z^f$&㝒LkꢳI脚뙛u": 5.694374481577558E-20
+    }]
+   }
+  ]],
+  "obj": {"key": "wrong value"},
+  "퓲꽪m{㶩/뇿#⼢&᭙硞㪔E嚉c樱㬇1a綑᝖DḾ䝩": null
+ },
+ "key": "6.908319653520691E8",
+ "z": {
+  "6U閆崬밺뀫颒myj츥휘:$薈mY햚#rz飏+玭V㭢뾿愴YꖚX亥ᮉ푊\u0006垡㐭룝\"厓ᔧḅ^Sqpv媫\"⤽걒\"˽Ἆ?ꇆ䬔未tv{DV鯀Tἆl凸g\\㈭ĭ즿UH㽤": null,
+  "b茤z\\.N": [[
+   "ZL:ᅣዎ*Y|猫劁櫕荾Oj为1糕쪥泏S룂w࡛Ᏺ⸥蚙)",
+   {
+    "\"䬰ỐwD捾V`邀⠕VD㺝sH6[칑.:醥葹*뻵倻aD\"": true,
+    "e浱up蔽Cr෠JK軵xCʨ<뜡癙Y獩ケ齈X/螗唻?<蘡+뷄㩤쳖3偑犾&\\첊xz坍崦ݻ鍴\"嵥B3㰃詤豺嚼aqJ⑆∥韼@\u000b㢊\u0015L臯.샥": false,
+    "l?Ǩ喳e6㔡$M꼄I,(3᝝縢,䊀疅뉲B㴔傳䂴\u0088㮰钘ꜵ!ᅛ韽>": -5514085325291784739,
+    "o㮚?\"춛㵉<\/﬊ࠃ䃪䝣wp6ἀ䱄[s*S嬈貒pᛥ㰉'돀": [{
+     "(QP윤懊FI<ꃣ『䕷[\"珒嶮?%Ḭ壍಻䇟0荤!藲끹bd浶tl\u2049#쯀@僞": {"i妾8홫": {
+      ",M맃䞛K5nAㆴVN㒊햬$n꩑&ꎝ椞阫?/ṏ세뉪1x쥼㻤㪙`\"$쟒薟B煌܀쨝ଢ଼2掳7㙟鴙X婢\u0002": "Vዉ菈᧷⦌kﮞఈnz*<?੃'ahhCFX(\u0007⮊E㭍䱾Gxꥩr❣.洎",
+      "뻴5bDD큯O傆盓왻U?ꞅꐊN鐭᧢τ\"迳豲8\u001b䃥ꂻ䴺ྸH筴,": {
+       "\"L鸔SE㬡XV&~͎'놅蔞눶l匛?'.K氁\\ƢẨ疇mΊ'꽳&!鹠m'|{P痊 秄쒿u\u00111䋧gϩx7t丗D䊨䠻z0.A0": -1.50139930144708198E18,
+       "8鋂뛷?첒B☚>﷜FM\"荭7ꍀ-VR<\/';䁙E9$䩉\f @s?퍪o3^衴cඎ䧪aK鼟q䆨c{䳠5mᒲՙ蘹ᮩ": {
+        "F㲷JGo⯍P덵x뒳p䘧☔\"+ꨲ吿JfR㔹)4n紬G练Q፞!C|": true,
+        "p^㫮솎oc.೚A㤠??r\u000f)⾽⌲們M2.䴘䩳:⫭胃\\፾@Fᭌ\\K": false,
+        "蟌Tk愙潦伩": {
+         "a<\/@ᾛ慂侇瘎": -7271305752851720826,
+         "艓藬/>၄ṯ,XW~㲆w": {"E痧郶)㜓ha朗!N赻瞉駠uC\u20ad辠<Ve?폱!Im䁎搄:*s 9諚Prᵾ뒰髶B̌qWA8梸vS⫊⢳{t㺲q㺈랊뮣RqK밢쳪": [
+          false,
+          {
+           "\u000b=>x퓮⣫P1ࠫLMMX'M刼唳됤": null,
+           "P쓫晥%k覛ዩIUᇸ滨:噐혲lMR5䋈V梗>%幽u頖\\)쟟": null,
+           "eg+昉~矠䧞难\b?gQ쭷筝\\eꮠNl{ಢ哭|]Mn銌╥zꖘzⱷ⭤ᮜ^": [
+            -1.30142114406914976E17,
+            -1.7555215491128452E-19,
+            null,
+            "渾㨝ߏ牄귛r?돌?w[⚞ӻ~廩輫㼧/",
+            -4.5737191805302129E18,
+            null,
+            "xy࿑M[oc셒竓Ⓔx?뜓y䊦>-D켍(&&?XKkc꩖ﺸᏋ뵞K伕6ী)딀P朁yW揙?훻魢傎EG碸9類៌g踲C⟌aEX舲:z꒸许",
+            3808159498143417627,
+            null,
+            {"m試\u20df1{G8&뚈h홯J<\/": {
+             "3ஸ厠zs#1K7:rᥞoꅔꯧ&띇鵼鞫6跜#赿5l'8{7㕳(b/j\"厢aq籀ꏚ\u0015厼稥": [
+              -2226135764510113982,
+              true,
+              null,
+              {
+               "h%'맞S싅Hs&dl슾W0j鿏MםD놯L~S-㇡R쭬%": null,
+               "⟓咔謡칲\u0000孺ꛭx旑檉㶆?": null,
+               "恇I転;￸B2Y`z\\獓w,놏濐撐埵䂄)!䶢D=ഭ㴟jyY": {
+                "$ࡘt厛毣ൢI芁<겿骫⫦6tr惺a": [
+                 6.385779736989334E-20,
+                 false,
+                 true,
+                 true,
+                 [
+                  -6.891946211462334E-19,
+                  null,
+                  {
+                   "]-\\Ꟑ1/薓❧Ὂ\\l牑\u0007A郃)阜ᇒᓌ-塯`W峬G}SDb㬨Q臉⮻빌O鞟톴첂B㺱<ƈmu챑J㴹㷳픷Oㆩs": {
+                    "\"◉B\"pᶉt骔J꩸ᄇᛐi╰栛K쉷㉯鐩!㈐n칍䟅難>盥y铿e୔蒏M貹ヅ8嘋퀯䉶ጥ㏢殊뻳\"絧╿ꉑ䠥?∃蓊{}㣣Gk긔H1哵峱": false,
+                    "6.瀫cN䇮F㧺?\\椯=ڈT䘆4␘8qv": -3.5687501019676885E-19,
+                    "Q?yऴr혴{஀䳘p惭f1ﹸ䅷䕋贲<ྃᄊ繲hq\\b|#QSTs1c-7(䵢\u2069匏絘ꯉ:l毴汞t戀oෟᵶ뮱፣-醇Jx䙬䐁햢0࣫ᡁgrㄛ": "\u0011_xM/蘇Chv;dhA5.嗀绱V爤ﰦi뵲M",
+                    "⏑[\"ugoy^儣횎~U\\섯겜論l2jw஌yD腅̂\u0019": true,
+                    "ⵯɇ䐲᫿࢚!㯢l샅笶戮1꣖0Xe": null,
+                    "劅f넀識b宁焊E찓橵G!ʱ獓뭔雩괛": [{"p⹣켙[q>燣䍃㞽ᩲx:쓤삘7玑퇼0<\/q璂ᑁ[Z\\3䅵䧳\u0011㤧|妱緒C['췓Yꞟ3Z鳱雼P錻BU씧U`ᢶg蓱>.1ӧ譫'L_5V䏵Ц": [
+                     false,
+                     false,
+                     {"22䂍盥N霂얢<F8꼵7Gసyh뀍g᦭ꄢx硴嬢\u001a?E괆T|;7犟\"Wt%䐩O⨵t&#ᬋK'蜍Ძ揔⾠鲂T멷靃\u0018䓞cE": {"f=䏏츜瞾zw?孡鏣\\铀᫞yẆg(\u0011M6(s2]`ਫ": [[[{
+                      "'y몱纣4S@\\,i㷯럹Ua充Tᣢ9躘Zଞ쥿䐊s<\/刎\\\"뉦-8/": "蜑.X0꭛낢륹i젨ꚁ<8?s볕蝡|Q✬᯦@\\G㑢屿Mn졾J굤⥟JW뤵苑r쁕툄嵵?⾥O",
+                      "^1挲~[n귆誈央碠멪gI洷": -8214236471236116548,
+                      "sሣ%娌暡clr蟜㑓2\u000bS❟_X㨔⚴5~蔷ꀇ|Xu㬖,꤭卹r(g믇쩍%췸앙|栣U\\2]䤉+啠菡ꯎT鉹m\n/`SzDᅼ鞶": 1.1217523390167132E-19,
+                      "u톇=黚\\ ꂮ췵L>躰e9⑩_뵜斌n@B}$괻Yᐱ@䧋V\"☒-諯cV돯ʠ": true,
+                      "Ű螧ᔼ檍鍎땒딜qꄃH뜣<獧ूCY吓⸏>XQ㵡趌o끬k픀빯a(ܵ甏끆୯/6Nᪧ}搚ᆚ짌P牰泱鈷^d꣟#L삀\"㕹襻;k㸊\\f+": true,
+                      "쎣\",|⫝̸阊x庿k잣v庅$鈏괎炔k쬪O_": [
+                       "잩AzZGz3v愠ꉈⵎ?㊱}S尳௏p\r2>췝IP䘈M)w|\u000eE",
+                       -9222726055990423201,
+                       null,
+                       [
+                        false,
+                        {"´킮'뮤쯽Wx讐V,6ᩪ1紲aႈ\u205czD": [
+                         -930994432421097536,
+                         3157232031581030121,
+                         "l貚PY䃛5@䭄<nW\u001e",
+                         [
+                          3.801747732605161E18,
+                          [
+                           null,
+                           false,
+                           {
+                            "": 4.0442013775147072E16,
+                            "2J[sᡪ㞿|n'#廲꯬乞": true,
+                            "B[繰`\\㏏a̼㨀偛㽓<\/꥖ᵈO让\r43⡩徑ﬓ๨ﮕx:㣜o玐ꉟぢC珵὆ᓞ쇓Qs氯였9駵q혃Ljꂔ<\/昺+t䐋༻猙c沪~櫆bpJ9UᏐ:칣妙!皗F4㑄탎䕀櫳振讓": 7.3924182188256287E18,
+                            "H磵ai委曷n柋T<\/勿F&:ꣴfU@㿗榻Lb+?퍄sp\"᪟~>귻m㎮琸f": 1.0318894506812084E-19,
+                            "࢜⩢Ш䧔1肽씮+༎ᣰ闺馺窃䕨8Mƶq腽xc(៯夐J5굄䕁Qj_훨/~価.䢵慯틠퇱豠㼇Qﵘ$DuSp(8Uญ<\/ಟ룴𥳐ݩ$": 8350772684161555590,
+                            "ㆎQ䄾\u001bpᩭ${[諟^^骴᤮b^ㅥI┧T㉇⾞\"绦<AYJ⒃-oF<\/蛎mm;obh婃ᦢ": false,
+                            "䔤䣈?汝.p襟&d㱅\\Jᚠ@?O첁ࢽ휔VR蔩|㒢柺": [[
+                             "-ꕨ岓棻r@鿆^3~䪤Ѐ狼︌ﹲ\\᝸MlE쵠Q+",
+                             null,
+                             false,
+                             3346674396990536343,
+                             null,
+                             {
+                              "": null,
+                              "/䏨S쨑,&繷㉥8C엮赸3馢|뇲{鄎ꗇqFﶉ雕UD躢?Ꟛအ꽡[hᕱᗅ㦋쭞Mユ茍?L槽암V#성唐%㣕嘵\\ڹ(嘏躿&q": [
+                               -1364715155337673920,
+                               false,
+                               -8197733031775379251,
+                               "E팗鮲JwH\\觡܈᜝\"+뉞娂N휗v噙၂깼\u001dD帒l%-斔N",
+                               -3.844267973858711E-20,
+                               [{"쬯(褈Q 蟚뿢 /ⱖ㻥\u0017/?v邘䃡0U.Z1x?鯔V尠8Em<": [[[
+                                null,
+                                [
+                                 null,
+                                 -5841406347577698873,
+                                 "킷\"S⋄籞繗솸ᵣ浵w쑿ퟗ7nᎏx3앙z㘌쿸I葥覯㬏0ᆝb汆狺뷘ႀnꋋ",
+                                 -1227911573141158702,
+                                 {
+                                  "u㉮PᾺV鵸A\\g*ࡗ9슟晭+ͧↀ쿅H\u001c꾣犓}癇恛ᗬ黩䟘X梑鐆e>r䰂f矩'-7䡭桥Dz兔V9谶居㺍ᔊ䩯덲.\u001eL0ὅㅷ釣": [{
+                                   "<쯬J卷^숞u࠯䌗艞R9닪g㐾볎a䂈歖意:%鐔|ﵤ|y}>;2,覂⶚啵tb*仛8乒㓶B࿠㯉戩oX 貘5V嗆렽낁߼4h䧛ꍺM空\\b꿋貼": 8478577078537189402,
+                                   "VD*|吝z~h譺aᯒ": {
+                                    "YI췢K<\/濳xNne玗rJo쾘3핰鴊\"↱AR:ࢷ\"9?\"臁說)?誚ꊏe)_D翾W?&F6J@뺾ꍰNZ醊Z쾈വH嶿?炫㷱鬰M겈<bS}㎥l|刖k": {"H7鷮퇢_k": [
+                                     true,
+                                     "s㟑瀭좾쮀⑁Y찺k맢戲쀸俻ກ6儮끗扖puߖꜻ馶rꈞ痘?3ྚ畊惘䎗\"vv)*臔웅鿈䧲^v,껛㰙J <ᚶ5",
+                                     7950276470944656796,
+                                     4.9392301536234746E17,
+                                     -4796050478201554639,
+                                     "yꬴc<3㻚",
+                                     "o塁\u20a4蒵鮬裢CᴧnB㭱f.",
+                                     false,
+                                     [
+                                      false,
+                                      "㡐弑V?瀆䰺q!출㇞yᘪ꼼(IS~Ka 烿ꟿ샕桤\u0005HQҹ㯪罂q萾⚇懋⦕둡v",
+                                      1862560050083946970,
+                                      "\u20b6[|(뭹gꍒ펉O轄Dl묽]ﯨ髯QEbA㒾m@롴礠㕓2땫n6ْ엘঵篳R잷꙲m색摪|@㿫5aK设f胭r8/NI4춫栵\\꯬2]",
+                                      false,
+                                      {
+                                       "\u000b7*㙛燏.~?䔊p搕e_拺艿뷍f{ꔻ1s驙`$Ė戧?q⋬沭?塷᭚蹀unoa5": {
+                                        "S귯o紞㾕ᅶ侏銇12|ʟ畴iNAo?|Sw$M拲գ㭄紧螆+,梔": null,
+                                        "㭚0?xB疱敻ேBPwv뾃熉(ӠpJ]갢\"Bj'\u0016GE椱<\/zgៅx黢礇h},M9ﴦ?LḨ": "Si B%~㬒E",
+                                        "핇㉊살㍢숨~ȪRo䦅D桺0z]﬽蠆c9ᣨyPP㿷U~㞐?쯟퍸宒뉆U|}㉓郾ࣻ*櫎꼪䁗s?~7\u001e㘔h9{aឋ}:㶒P8": [{"\\R囡쐬nN柋琍؛7칾 :㶃衇徜V 深f1淍♠i?3S角폞^ᆞ\u20e8ṰD\u0007秡+躒臔&-6": {
+                                         "䨑g.fh㔗=8!\"狿ൻLU^뻱g䲚㻐'W}k欤?๒鲇S꧗䫾$ĥ피": -794055816303360636,
+                                         "外頮詋~텡竆繃䏩苨뾺朁꼃瘹f*㉀枙NH/\u2027ꢁ}j묎vペq︉식뜡Od5 N顯ି烅仟Qfㆤ嚢(i䬅c;맧?嶰㩼츱獡?-": {
+                                          "e݆㍡⬬'2㻒?U篲鿄\"隻Ҭ5NꭰꤺBꀈ拾᩺[刯5곑Na램ﴦ዆]㝓qw钄\u001b\"Y洊䗿祏塥迵[⼞⠳P$꠱5먃0轢`": [{"獰E賝﫚b먭N긆Ⰹ史2逶ꜛ?H짉~?P}jj}侷珿_T>᭨b,⻁鈵P䕡䀠८ⱄ홎鄣": {
+                                           "@?k2鶖㋮\"Oರ K㨇廪儲\u0017䍾J?);\b*묀㗠섳햭1MC V": null,
+                                           "UIICP!BUA`ᢈ㋸~袩㗪⾒=fB﮴l1ꡛ죘R辂여ҳ7쮡<䩲`熕8頁": 4481809488267626463,
+                                           "Y?+8먙ᚔ鋳蜩럶1㥔y璜౩`": [
+                                            null,
+                                            1.2850335807501874E-19,
+                                            "~V2",
+                                            2035406654801997866,
+                                            {
+                                             "<숻1>\"": -8062468865199390827,
+                                             "M㿣E]}qwG莎Gn᝶(ꔙ\\D⬲iꇲs寢t駇S뀡ꢜ": false,
+                                             "pꝤ㎏9W%>M;-U璏f(^j1?&RB隧 忓b똊E": "#G?C8.躬ꥯ'?냪#< 渟&헿란zpo왓Kj}鷧XﻘMツb䕖;㪻",
+                                             "vE풤幉xz뱕쫥Ug㦲aH} ᣟp:鬼Yᰟ<Fɋ잣緂頒⺏䉲瑑䅂,C~ޅG!f熢-B7~9Pqࡢ[츑#3ꕎ,Öඳ聁⩅㵧춀뿍xy䌏͂tdj!箧᳆|9蚡돬": -2.54467378964089632E17,
+                                             "䵈䅦5빖,궆-:໿댾仫0ᙚyᦝhqᚄ": null,
+                                             "侯Y\"湛졯劇U셎YX灍ⅸ2伴|筧\\䁒㶶᷏쁑Waᦵᗱ㜏늾膠<Jc63<G\u20fe䇹66僣k0O\"_@U": null,
+                                             "姪y$#s漴JH璌Ӊ脛J㝾펔ﹴoꈶ㚸PD:薠쏖%說ថ蹂1]⾕5튄": {
+                                              "᝾Huw3䮅如쿺䍟嫝]<鰨ݷ?꯯䫓傩|ᐶස媽\\澒≡闢": "Mm\"쏇ᯄ졽\"楇<\/ꥆ흭局n隴@鿣w⠊4P贈徎W㊋;䤞'.팇蒁䡴egpx嗎wஅ獗堮ᛐnˁ︖䀤4噙?໚郝᱋ޘॎt恑姫籕殥陃\"4[ꝬqL4Wꠎx",
+                                              "ℇj遌5B뒚\" U": "硄ꏘ{憠굏:&t䌨m Cઌ쿣鞛XFꠟs䝭ﶃ\"格a0x闊昵吲L\\杚聈aꁸj싹獅\"灟ﱡ馆*굖糠<ꔏ躎",
+                                              "톌賠弳ꟍb\"螖X50sĶ晠3f秂坯Iⓟ:萘": 5.573183333596288E18,
+                                              "%䴺": [[[[
+                                               -6957233336860166165,
+                                               false,
+                                               null,
+                                               {
+                                                "\"\\௮茒袀ᕥ23ୃ괶?䕎.嚲◉㏞L+ᵡ艱hL콇붆@": null,
+                                                "%螥9ꭌ<\/-t": true,
+                                                ",9|耢椸䁓Xk죱\u0015$Ώ鲞[?엢ᝲ혪즈ⴂ▂ℴ㗯\"g뺘\\ꍜ#\u0002ヮ}ሎ芲P[鹮轧@냲䃦=#(": 2.78562909315899616E17,
+                                                "R?H䧰ⵇ<,憰쮼Q總iR>H3镔ᴚ斦\\鏑r*2橱G⼔F/.j": true,
+                                                "RK좬뎂a홠f*f㱉ᮍ⦋潙㨋Gu곌SGI3I뿐\\F',)t`荁蘯囯ﮉ裲뇟쥼_ገ驪▵撏ᕤV": 1.52738225997956557E18,
+                                                "^k굲䪿꠹B逤%F㱢漥O披M㽯镞竇霒i꼂焅륓\u00059=皫之눃\u2047娤閍銤唫ၕb<\/w踲䔼u솆맚,䝒ᝳ'/it": "B餹饴is権ꖪ怯ꦂẉဎt\"!凢谵⧿0\\<=(uL䷍刨쑪>俆揓Cy襸Q힆䆭涷<\/ᐱ0ɧ䗾䚹\\ኜ?ꄢᇘ`䴢{囇}᠈䴥X4퓪檄]ꥷ/3謒ሴn+g騍X",
+                                                "GgG꽬[(嫓몍6\u0004궍宩㙻/>\u0011^辍dT腪hxǑ%ꊇk,8(W⧂結P鬜O": [{
+                                                 "M㴾c>\\ᓲ\u0019V{>ꤩ혙넪㭪躂TS-痴໸闓⍵/徯O.M㏥ʷD囎⧔쁳휤T??鉬뇙=#ꢫ숣BX䭼<\/d똬졬g榿)eꨋﯪ좇첻<?2K)": null,
+                                                 "Z17縬z]愀䖌 ᾋBCg5딒국憍꾓aⲷ턷u:U촳驿?雺楶\u0001\u001c{q*ᰗ苑B@k揰z.*蓗7ረIm\"Oᱍ@7?_": true,
+                                                 "㺃Z<": -4349275766673120695,
+                                                 "휃䠂fa塆ffixKe'덬鏗੄뺾w࠾鑎k땢m*႑햞鐮6攊&虜h黚,Y䱳Sﭼ둺pN6": [
+                                                  false,
+                                                  "IΎ䣲,\"ᬮ˪癘P~Qlnx喁Sᮔ༬˨I珌m䜛酛\u0003iꐸ㦧cQ帲晼D' \\(粋wQcN\\뵰跈",
+                                                  [
+                                                   "D0\\L?M1쥍Kaꏌsd+盌귤憊tz䌣댐בO坂wϢ%ὒgp,Ai⎧ᶆI餾ꦍ棩嘅᳉怴%m]ၶis纖D凜镧o심b U",
+                                                   {
+                                                    "?଼\u0011Rv&^[+匚I趈T媫\u0010.䥤ᆯ1q僤HydⲰl㒽K'ᅾiౕ豲초딨@\u0013J'쪪VD౼P4Ezg#8*㋤W馓]c쿯8": false,
+                                                    "c/擯X5~JmK䵶^쐎ച|B|u[솝(X뚤6v}W㤘⠛aR弌臌쾭諦eⒷ僡-;㩩⭖ⷴ徆龄갬{䱓ᥩ!﯏⊚ᇨ<v燡露`:볉癮꨽り★Ax7Ꮀ譥~舑\\Vꍋ\"$)v": "e&sFF쬘OBd슊寮f蠛জ봞mn~锆竒G脁\"趵G刕䕳&L唽붵<\/I,X팚B⍥X,kԇҗ眄_慡:U附ᓚA蕧>\u001a\u0011\";~쓆BH4坋攊7힪",
+                                                    "iT:L闞椕윚*滛gI≀Wਟඊ'ꢆ縺뱹鮚Nꩁ᧬蕼21줧\\䋯``⍐\\㏱鳨": 1927052677739832894,
+                                                    "쮁缦腃g]礿Y㬙 fヺSɪ꾾N㞈": [
+                                                     null,
+                                                     null,
+                                                     {
+                                                      "!t,灝Y 1䗉罵?c饃호䉂Cᐭ쒘z(즽sZG㬣sഖE4뢜㓕䏞丮Qp簍6EZឪ겛fx'ꩱQ0罣i{k锩*㤴㯞r迎jTⲤ渔m炅肳": [
+                                                       -3.3325685522591933E18,
+                                                       [{"㓁5]A䢕1룥BC?Ꙍ`r룔Ⳛ䙡u伲+\u0001്o": [
+                                                        null,
+                                                        4975309147809803991,
+                                                        null,
+                                                        null,
+                                                        {"T팘8Dﯲ稟MM☻㧚䥧/8ﻥ⥯aXLaH\"顾S☟耲ît7fS෉놁뮔/ꕼ䓈쁺4\\霶䠴ᩢ<\/t4?죵>uD5➶༆쉌럮⢀秙䘥\u20972ETR3濡恆vB? ~鸆\u0005": {
+                                                         "`閖m璝㥉b뜴?Wf;?DV콜\u2020퍉౓擝宏ZMj3mJ먡-傷뱙yח㸷꥿ ໘u=M읝!5吭L4v\\?ǎ7C홫": null,
+                                                         "|": false,
+                                                         "~Ztᛋ䚘\\擭㗝傪W陖+㗶qᵿ蘥ᙄp%䫎)}=⠔6ᮢS湟-螾-mXH?cp": 448751162044282216,
+                                                         "\u209fad놹j檋䇌ᶾ梕㉝bוּ<d䗱:줰M酄\u0000X#_r獢A饓ꍗُKo_跔?ᪧ嵜鼲<": null,
+                                                         "ꆘ)ubI@h@洭Ai㜎䏱k\u0003?T䉐3间%j6j棍j=❁\\U毮ᬹ*8䀔v6cpj⭬~Q꿾뺶펵悡!쩭厝l六㽫6퇓ޭ2>": {"?苴ꩠD䋓帘5騱qﱖPF?☸珗顒yU ᡫcb䫎 S@㥚gꮒ쎘泴멖\\:I鮱TZ듒ᶨQ3+f7캙\"?\f풾\\o杞紟﻽M.⏎靑OP": [
+                                                          -2.6990368911551596E18,
+                                                          [{"䒖@<᰿<\/⽬tTr腞&G%᳊秩蜰擻f㎳?S㵧\r*k뎾-乢겹隷j軛겷0룁鮁": {")DO0腦:춍逿:1㥨่!蛍樋2": [{
+                                                           ",ꌣf侴笾m๫ꆽ?1?U?\u0011ꌈꂇ": {
+                                                            "x捗甠nVq䅦w`CD⦂惺嘴0I#vỵ} \\귂S끴D얾?Ԓj溯\"v餄a": {
+                                                             "@翙c⢃趚痋i\u0015OQ⍝lq돆Y0pࢥ3쉨䜩^<8g懥0w)]䊑n洺o5쭝QL댊랖L镈Qnt⪟㒅십q헎鳒⮤眉ᔹ梠@O縠u泌ㄘb榚癸XޔFtj;iC": false,
+                                                             "I&뱋゘|蓔䔕측瓯%6ᗻHW\\N1貇#?僐ᗜgh᭪o'䗈꽹Rc욏/蔳迄༝!0邔䨷푪8疩)[쭶緄㇈୧ፐ": {
+                                                              "B+:ꉰ`s쾭)빼C羍A䫊pMgjdx䐝Hf9᥸W0!C樃'蘿f䫤סи\u0017Jve? 覝f둀⬣퓉Whk\"஼=չﳐ皆笁BIW虨쫓F廰饞": -642906201042308791,
+                                                              "sb,XcZ<\/m㉹ ;䑷@c䵀s奤⬷7`ꘖ蕘戚?Feb#輜}p4nH⬮eKL트}": [
+                                                               "RK鳗z=袤Pf|[,u욺",
+                                                               "Ẏᏻ罯뉋⺖锅젯㷻{H䰞쬙-쩓D]~\u0013O㳢gb@揶蔉|kᦂ❗!\u001ebM褐sca쨜襒y⺉룓",
+                                                               null,
+                                                               null,
+                                                               true,
+                                                               -1.650777344339075E-19,
+                                                               false,
+                                                               "☑lꄆs힨꤇]'uTന⌳농].1⋔괁沰\"IWഩ\u0019氜8쟇䔻;3衲恋,窌z펏喁횗?4?C넁问?ᥙ橭{稻Ⴗ_썔",
+                                                               "n?]讇빽嗁}1孅9#ꭨ靶v\u0014喈)vw祔}룼쮿I",
+                                                               -2.7033457331882025E18,
+                                                               {
+                                                                ";⚃^㱋x:饬ኡj'꧵T☽O㔬RO婎?향ᒭ搩$渣y4i;(Q>꿘e8q": "j~錘}0g;L萺*;ᕭꄮ0l潛烢5H▄쳂ꏒוֹꙶT犘≫x閦웧v",
+                                                                "~揯\u2018c4職렁E~ᑅቚꈂ?nq뎤.:慹`F햘+%鉎O瀜쟏敛菮⍌浢<\/㮺紿P鳆ࠉ8I-o?#jﮨ7v3Dt赻J9": null,
+                                                                "ࣝW䌈0ꍎqC逖,횅c၃swj;jJS櫍5槗OaB>D踾Y": {"㒰䵝F%?59.㍈cᕨ흕틎ḏ㋩B=9IېⓌ{:9.yw}呰ㆮ肒᎒tI㾴62\"ዃ抡C﹬B<\/<EO꽓ᇕu&鋫\\禞퐹u꒍.7훯ಶ2䩦͉ᶱf깵ᷣ늎": [
+                                                                 5.5099570884646902E18,
+                                                                 "uQN濿m臇<%?谣鮢s]]x0躩慌闋<;( 鋤.0ᠵd1#벘a:Gs?햷'.)ㅴ䞟琯崈FS@O㌛ᓬ抢큌ើ냷쿟툥IZn[惵ꐧ3뙍[&v憙J>촋jo朣",
+                                                                 [
+                                                                  -7675533242647793366,
+                                                                  {"ᙧ呃:[㒺쳀쌡쏂H稈㢤\u001dᶗGG-{GHྻຊꡃ哸䵬;$?&d\\⥬こN圴됤挨-'ꕮ$PU%?冕눖i魁q騎Q": [
+                                                                   false,
+                                                                   [[
+                                                                    7929823049157504248,
+                                                                    [[
+                                                                     true,
+                                                                     "Z菙\u0017'eꕤ᱕l,0\\X\u001c[=雿8蠬L<\/낲긯W99g톉4ퟋb㝺\u0007劁'!麕Q궈oW:@X၎z蘻m絙璩귓죉+3柚怫tS捇蒣䝠-擶D[0=퉿8)q0ٟ",
+                                                                     "唉\nFA椭穒巯\\䥴䅺鿤S#b迅獘 ﶗ꬘\\?q1qN犠pX꜅^䤊⛤㢌[⬛휖岺q唻ⳡ틍\"㙙Eh@oA賑㗠y必Nꊑᗘ",
+                                                                     -2154220236962890773,
+                                                                     -3.2442003245397908E18,
+                                                                     "Wᄿ筠:瘫퀩?o貸q⊻(᎞KWf宛尨h^残3[U(='橄",
+                                                                     -7857990034281549164,
+                                                                     1.44283696979059942E18,
+                                                                     null,
+                                                                     {"ꫯAw跭喀 ?_9\"Aty背F=9缉ྦྷ@;?^鞀w:uN㘢Rỏ": [
+                                                                      7.393662029337442E15,
+                                                                      3564680942654233068,
+                                                                      [
+                                                                       false,
+                                                                       -5253931502642112194,
+                                                                       "煉\\辎ೆ罍5⒭1䪁䃑s䎢:[e5}峳ﴱn騎3?腳Hyꏃ膼N潭錖,Yᝋ˜YAၓ㬠bG렣䰣:",
+                                                                       true,
+                                                                       null,
+                                                                       {
+                                                                        "⒛'P&%죮|:⫶춞": -3818336746965687085,
+                                                                        "钖m<\/0ݎMtF2Pk=瓰୮洽겎.": [[
+                                                                         -8757574841556350607,
+                                                                         -3045234949333270161,
+                                                                         null,
+                                                                         {
+                                                                          "Ꮬr輳>⫇9hU##w@귪A\\C 鋺㘓ꖐ梒뒬묹㹻+郸嬏윤'+g<\/碴,}ꙫ>손;情d齆J䬁ຩ撛챝탹/R澡7剌tꤼ?ặ!`⏲睤\u00002똥଴⟏": null,
+                                                                          "\u20f2ܹe\\tAꥍư\\x当뿖렉禛;G檳ﯪS૰3~㘠#[J<}{奲 5箉⨔{놁<\/釿抋,嚠/曳m&WaOvT赋皺璑텁": [[
+                                                                           false,
+                                                                           null,
+                                                                           true,
+                                                                           -5.7131445659795661E18,
+                                                                           "萭m䓪D5|3婁ఞ>蠇晼6nﴺPp禽羱DS<睓닫屚삏姿",
+                                                                           true,
+                                                                           [
+                                                                            -8759747687917306831,
+                                                                            {
+                                                                             ">ⓛ\t,odKr{䘠?b퓸C嶈=DyEᙬ@ᴔ쨺芛髿UT퓻春<\/yꏸ>豚W釺N뜨^?꽴﨟5殺ᗃ翐%>퍂ဿ䄸沂Ea;A_\u0005閹殀W+窊?Ꭼd\u0013P汴G5썓揘": 4.342729067882445E-18,
+                                                                             "Q^즾眆@AN\u0011Kb榰냎Y#䝀ꀒᳺ'q暇睵s\"!3#I⊆畼寤@HxJ9": false,
+                                                                             "⿾D[)袨㇩i]웪䀤ᛰMvR<蟏㣨": {"v퇓L㪱ꖣ豛톤\\곱#kDTN": [{
+                                                                              "(쾴䡣,寴ph(C\"㳶w\"憳2s馆E!n!&柄<\/0Pꈗſ?㿳Qd鵔": {"娇堰孹L錮h嵅⛤躏顒?CglN束+쨣ﺜ\\MrH": {"獞䎇둃ቲ弭팭^ꄞ踦涟XK錆쳞ឌ`;੶S炥騞ଋ褂B៎{ڒ䭷ᶼ靜pI荗虶K$": [{"◖S~躘蒉꫿輜譝Q㽙闐@ᢗ¥E榁iء5┄^B[絮跉ᰥ遙PWi3wㄾⵀDJ9!w㞣ᄎ{듒ꓓb6\\篴??c⼰鶹⟧\\鮇ꮇ": [[
+                                                                               654120831325413520,
+                                                                               -1.9562073916357608E-19,
+                                                                               {
+                                                                                "DC(昐衵ἡ긙갵姭|֛[t": 7.6979110359897907E18,
+                                                                                "J␅))嫼❳9Xfd飉j7猬ᩉ+⤻眗벎E鰉Zᄊ63zၝ69}ZᶐL崭ᦥ⡦靚⋛ꎨ~i㨃咊ꧭo䰠阀3C(": -3.5844809362512589E17,
+                                                                                "p꣑팱쒬ꎑ뛡Ꙩ挴恍胔&7ᔈ묒4Hd硶훐㎖zꢼ豍㿢aሃ=<\/湉鵲EӅ%$F!퍶棌孼{O駍਺geu+": ")\u001b잓kŀX쩫A밁®ڣ癦狢)扔弒p}k縕ꩋ,䃉tࣼi",
+                                                                                "ァF肿輸<솄G-䢹䛸ꊏl`Tqꕗ蒞a氷⸅ᴉ蠰]S/{J왲m5{9.uέ~㕚㣹u>x8U讁B덺襪盎QhVS맅킃i识{벂磄Iහ䙅xZy/抍૭Z鲁-霳V据挦ℒ": null,
+                                                                                "㯛|Nꐸb7ⵐb?拠O\u0014ކ?-(EꞨ4ꕷᄤYᯕOW瞺~螸\"욿ќ<u鵵઎⸊倾쑷෻rT⪄牤銱;W殆͢芄ਰ嚝훚샢⊿+㲽": null,
+                                                                                "単逆ົ%_맛d)zJ%3칧_릟#95䌨怡\u001ci턠ॣi冘4赖'ਐ䧐_栔!": {
+                                                                                 "*?2~4㲌᭳쯁ftႷ1#oJ\b䊇镇됔 \u2079x䛁㊝ᮂN;穽跖s휇ᣄ홄傷z⸷(霸!3y뺏M쒿햏۽v㳉tở心3黎v쭻 Rp཮Vr~T?&˴k糒븥쩩r*D": null,
+                                                                                 "8@~홟ꔘk1[": -5570970366240640754,
+                                                                                 "BZt鏦ꡬc餖  s(mᛴ\u0000◄d腑t84C⟐坯VṊ뉙'噱Ꝕ珽GC顀?허0ꞹ&돇䛭C䷫](": 2.4303828213012387E-20,
+                                                                                 "y撔Z외放+}ḑ骈ᙝ&\u0016`G便2|-e]঳?QF㜹YF\"㿒緄햷㈟塚䷦ୀጤlM蘸N㾆▛럪㞂tᕬ镈쇝喠l amcxPnm\u001a᱋<\/]_]ﻹ瞧?H": false,
+                                                                                 "ፏ氏묢뜚I[♺뽛x?0H봬Wpn꨹Ra䝿쌑{㴂ni祻윸A'y|⺴ᚘ庌9{$恲{톽=m#@6ᨧfgs44陎J#<Ễ쨓瀵❩a୛㷉㙉ܸ◠냔嬯~呄籁羥镳": false,
+                                                                                 "㘱{<頬22?IF@곊I겂嶻L᝛D{@r쒂?IAᣧ洪惒誸b徂z췺꾍㠭\\刊%禨쌐ⶣ仵\\P[:47;<ᇅ<\/": {
+                                                                                  "^U釳-v㢈ꗝ◄菘rᜨi;起kR犺䵫\u0000锍쁙m-ԙ!lḃ꛸뻾F(W귛y": "#ᠺH㸢5v8_洑C",
+                                                                                  "䔵໳$ᙠ6菞\u206e摎q圩P|慍sV4:㜾(I溞I?": -6569206717947549676,
+                                                                                  "透Ꞃ緵퇝8 >e㺰\"'㌢ƐW\u0004瞕>0?V鷵엳": true,
+                                                                                  "뤥G\\迋䠿[庩'꼡\u001aiᩮV쯁ᳪ䦪Ô;倱ନ뛁誈": null,
+                                                                                  "쥹䄆䚟Q榁䎐᢭<\/2㕣p}HW蟔|䃏꿈ꚉ锳2Pb7㙑Tⅹᵅ": {
+                                                                                   "Y?֭$>#cVBꩨ:>eL蒁務": {
+                                                                                    "86柡0po 䏚&-捑Ћ祌<\/휃-G*㶢הּ쩍s㶟餇c걺yu꽎還5*턧簕Og婥SꝐ": null,
+                                                                                    "a+葞h٥ࠆ裈嗫ﵢ5輙퀟ᛜ,QDﹼ⟶Y騠锪E_|x죗j侵;m蜫轘趥?븅w5+mi콛L": {
+                                                                                     ";⯭ﱢ!买F⽍柤鶂n䵣V㫚墱2렾ELEl⣆": [
+                                                                                      true,
+                                                                                      -3.6479311868339015E-18,
+                                                                                      -7270785619461995400,
+                                                                                      3.334081886177621E18,
+                                                                                      2.581457786298155E18,
+                                                                                      -6.605252412954115E-20,
+                                                                                      -3.9232347037744167E-20,
+                                                                                      {
+                                                                                       "B6㊕.k1": null,
+                                                                                       "ZAꄮJ鮷ᳱo갘硥鈠䠒츼": {
+                                                                                        "ᕅ}럡}.@y陪鶁r業'援퀉x䉴ﵴl퍘):씭脴ᥞhiꃰblﲂ䡲엕8߇M㶭0燋標挝-?PCwe⾕J碻Ᾱ䬈䈥뷰憵賣뵓痬+": {"a췩v礗X⋈耓ፊf罅靮!㔽YYᣓw澍33⎔芲F|\"䜏T↮輦挑6ᓘL侘?ᅥ]덆1R௯✎餘6ꏽ<\/௨\\?q喷ꁫj~@ulq": {"嗫欆뾔Xꆹ4H㌋F嵧]ࠎ]㠖1ꞤT<$m뫏O i댳0䲝i": {"?෩?\u20cd슮|ꯆjs{?d7?eNs⢚嫥氂䡮쎱:鑵롟2hJꎒﯭ鱢3춲亄:뼣v䊭諱Yj択cVmR䩃㘬T\"N홝*ै%x^F\\_s9보zz4淗?q": [
+                                                                                         null,
+                                                                                         "?",
+                                                                                         2941869570821073737,
+                                                                                         "{5{殇0䝾g6밖퍋臩綹R$䖭j紋釰7sXI繳漪행y",
+                                                                                         false,
+                                                                                         "aH磂?뛡#惇d婅?Fe,쐘+늵䍘\"3r瘆唊勐j⳧࠴ꇓ<\/唕윈x⬌讣䋵%拗ᛆⰿ妴᝔M2㳗必꧂淲?ゥ젯檢<8끒MidX䏒3᳻Q▮佐UT|⤪봦靏⊏",
+                                                                                         [[{
+                                                                                          "颉(&뜸귙{y^\"P퟉춝Ჟ䮭D顡9=?}Y誱<$b뱣RvO8cH煉@tk~4ǂ⤧⩝屋SS;J{vV#剤餓ᯅc?#a6D,s": [
+                                                                                           -7.8781018564821536E16,
+                                                                                           true,
+                                                                                           [
+                                                                                            -2.28770899315832371E18,
+                                                                                            false,
+                                                                                            -1.0863912140143876E-20,
+                                                                                            -6282721572097446995,
+                                                                                            6767121921199223078,
+                                                                                            -2545487755405567831,
+                                                                                            false,
+                                                                                            null,
+                                                                                            -9065970397975641765,
+                                                                                            [
+                                                                                             -5.928721243413937E-20,
+                                                                                             {"6촊\u001a홯kB0w撨燠룉{绎6⳹!턍贑y▾鱧ժ[;7ᨷ∀*땒䪮1x霆Hᩭ☔\"r䝐7毟ᝰr惃3ꉭE+>僒澐": [
+                                                                                              "Ta쎩aƝt쵯ⰪVb",
+                                                                                              [
+                                                                                               -5222472249213580702,
+                                                                                               null,
+                                                                                               -2851641861541559595,
+                                                                                               null,
+                                                                                               4808804630502809099,
+                                                                                               5657671602244269874,
+                                                                                               "5犲﨣4mᥣ?yf젫꾯|䋬잁$`Iⳉﴷ扳兝,'c",
+                                                                                               false,
+                                                                                               [
+                                                                                                null,
+                                                                                                {
+                                                                                                 "DyUIN쎾M仼惀⮥裎岶泭lh扠\u001e礼.tEC癯튻@_Qd4c5S熯A<\/\6U윲蹴Q=%푫汹\\\u20614b[௒C⒥Xe⊇囙b,服3ss땊뢍i~逇PA쇸1": -2.63273619193485312E17,
+                                                                                                 "Mq꺋貘k휕=nK硍뫞輩>㾆~἞ࡹ긐榵l⋙Hw뮢帋M엳뢯v⅃^": 1877913476688465125,
+                                                                                                 "ᶴ뻗`~筗免⚽টW˃⽝b犳䓺Iz篤p;乨A\u20ef쩏?疊m㝀컩뫡b탔鄃ᾈV(遢珳=뎲ିeF仢䆡谨8t0醄7㭧瘵⻰컆r厡궥d)a阄፷Ed&c﯄伮1p": null,
+                                                                                                 "⯁w4曢\"(欷輡": "\"M᭫]䣒頳B\\燧ࠃN㡇j姈g⊸⺌忉ꡥF矉স%^",
+                                                                                                 "㣡Oᄦ昵⫮Y祎S쐐級㭻撥>{I$": -378474210562741663,
+                                                                                                 "䛒掷留Q%쓗1*1J*끓헩ᦢ﫫哉쩧EↅIcꅡ\\?ⴊl귛顮4": false,
+                                                                                                 "寔愆샠5]䗄IH贈=d﯊/偶?ॊn%晥D視N򗘈'᫂⚦|X쵩넽z질tskxDQ莮Aoﱻ뛓": true,
+                                                                                                 "钣xp?&\u001e侉/y䴼~?U篔蘚缣/I畚?Q绊": -3034854258736382234,
+                                                                                                 "꺲໣眀)⿷J暘pИfAV삕쳭Nꯗ4々'唄ⶑ伻㷯騑倭D*Ok꧁3b␽_<\/챣Xm톰ၕ䆄`*fl㭀暮滠毡?": [
+                                                                                                  "D男p`V뙸擨忝븪9c麺`淂⢦Yw⡢+kzܖ\fY1䬡H歁)벾Z♤溊-혰셢?1<-\u0005;搢Tᐁle\\ᛵߓﭩ榩<QF;t=?Qꀞ",
+                                                                                                  [
+                                                                                                   null,
+                                                                                                   [{"-췫揲ᬨ墊臸<ࠒH跥 㔭쥃㫯W=z[wধ╌<~yW楄S!⑻h즓lĖN￧篌W듷튗乵᪪템먵Pf悥ᘀk䷭焼\\讄r擁鐬y6VF<\/6랿p)麡ꁠ㪁\"pழe": [
+                                                                                                    "#幎杴颒嶈)ㄛJ.嶤26_⋌东챯ꠉ⤋ؚ/⏚%秼Q룠QGztᄎ㎷អI翰Xp睔鍜ꨍ",
+                                                                                                    {",T?": [
+                                                                                                     false,
+                                                                                                     [[
+                                                                                                      true,
+                                                                                                      7974824014498027996,
+                                                                                                      false,
+                                                                                                      [
+                                                                                                       4.3305464880956252E18,
+                                                                                                       {
+                                                                                                        "᱿W^A]'rᮢ)鏥z餝;Hu\\Fk?ﴺ?IG浅-䙧>訝-xJ;巡8깊蠝ﻓU$K": {
+                                                                                                         "Vꕡ諅搓W=斸s︪vﲜ츧$)iꡟ싉e寳?ጭムVથ嵬i楝Fg<\/Z|៪ꩆ-5'@ꃱ80!燱R쇤t糳]罛逇dṌ֣XHiͦ{": true,
+                                                                                                         "Ya矲C멗Q9膲墅携휻c\\딶G甔<\/.齵휴": -1.1456247877031811E-19,
+                                                                                                         "z#.OO￝J": -8263224695871959017,
+                                                                                                         "崍_3夼ᮟ1F븍뽯ᦓ鴭V豈Ь": [{
+                                                                                                          "N蒬74": null,
+                                                                                                          "yuB?厅vK笗!ᔸcXQ旦컶P-녫mᄉ麟_": "1R@ 톘xa_|﩯遘s槞d!d껀筤⬫薐焵먑D{\\6k共倌☀G~AS_D\"딟쬚뮥馲렓쓠攥WTMܭ8nX㩴䕅檹E\u0007ﭨN 2 ℆涐ꥏ꠵3▙玽|됨_\u2048",
+                                                                                                          "恐A C䧩G": {":M큣5e들\\ꍀ恼ᔄ靸|I﨏$)n": {
+                                                                                                           "|U䬫㟯SKV6ꛤ㗮\bn봻䲄fXT:㾯쳤'笓0b/ೢC쳖?2浓uO.䰴": "ཐ꼋e?``,ᚇ慐^8ꜙNM䂱\u0001IᖙꝧM'vKdꌊH牮r\\O@䊷ᓵ쀆(fy聻i툺\"?<\/峧ࣞ⓺ᤤ쵒߯ꎺ騬?)刦\u2072l慪y꺜ﲖTj+u",
+                                                                                                           "뽫<G;稳UL⸙q2n쵿C396炿J蓡z⣁zဩSOU?<\/뙍oE큸O鿅෴ꍈEm#\"[瑦⤫ᝆgl⡗q8\"큘덥係@ᆤ=\u0001爖羝췀㸩b9\\jeqt㟿㮸龾m㳳긄": {
+                                                                                                            "9\"V霟釜{/o0嫲C咀-饷䈍[녩)\r䤴tMW\\龟ϣ^ي㪙忩䞞N湆Y笕)萨ꖤ誥煽:14⫻57U$擒䲐薡Qvↇ櫲현誧?nஷ6": {"l웾䌵.䅋䦝ic碳g[糲Ƿ-ឈᚱ4쑧\u0004C࿼\u0018&쬑?멲<\/fD_檼픃pd쪼n㕊渪V䛉m揈W儅톳뗳䓆7㭽諤T煠Ney?0᪵鈑&": [
+                                                                                                             false,
+                                                                                                             null,
+                                                                                                             {
+                                                                                                              "\r;鼶j᠂꼍RLz~♔9gf?ӡ浐": -1.4843072575250897E-19,
+                                                                                                              "&ꊒ\"ꋟ䝭E诮ﯚO?SW뒁훪mb旙⎕ᗕ⶙|ᷤ5y4甥": "j5|庠t铱?v 횋0\"'rxz䃢杺Ɜ!\u0002",
+                                                                                                              "Q ၩ㟧": {"Hﬔ\u2058䪠틙izZㅛ탟H^ﶲA??R6呠Z솋R.࿶g8": [
+                                                                                                               -8762672252886298799,
+                                                                                                               -1.9486830507000208E17,
+                                                                                                               null,
+                                                                                                               -7157359405410123024,
+                                                                                                               null,
+                                                                                                               null,
+                                                                                                               -995856734219489233,
+                                                                                                               "呧㫹A4!",
+                                                                                                               null,
+                                                                                                               -1.9105609358624648E-19,
+                                                                                                               5888184370445333848,
+                                                                                                               2.25460605078245E-19,
+                                                                                                               2.5302739297121987E18,
+                                                                                                               "뢹sbEf捵2丯?뗾耸(Wd띙SବꭖrtU?筤P똙QpbbKqaE$来V웰3i/lK퉜,8︸e= g螓t竦컼?.寋8鵗",
+                                                                                                               7377742975895263424,
+                                                                                                               2.4218442017790503E-19,
+                                                                                                               {
+                                                                                                                "y꒚ཫ쨘醬킃糟}yTSt䡀⇂뿽4ൢ戰U": [[
+                                                                                                                 3600537227234741875,
+                                                                                                                 4435474101760273035,
+                                                                                                                 -1.42274517007951795E18,
+                                                                                                                 -5567915915496026866,
+                                                                                                                 null,
+                                                                                                                 null,
+                                                                                                                 [
+                                                                                                                  -3204084299154861161,
+                                                                                                                  {
+                                                                                                                   "7梧慸憏.a瘎\u00041U鵮Ck֨d惥耍ⳡY,⭏써E垁FFI鱑ⳬ줢7⧵Bﴠ耘줕햸q컴~*瑍W.떛ࡆ@'᐀+轳": -961121410259132975,
+                                                                                                                   "⥅]l黭㣓绶;!!⎃=朼㐿e&ἂ繤C﯀l䝣㌀6TM쑮w懃ꡡ#ᤆ䰓,墼湼゙뽸㲿䧽쫨xᵖ듨<\/ T0峸iQ:溫脐\\\"쎪ὴ砇宖^M泼큥➅鈫@ᄟ༩\u2008⥼": true,
+                                                                                                                   "⩐\"籽汎P싯鲘蟼sRᐯ䅩\u0019R(kRᖁ&ಌ 0\"鳶!馼YH": null,
+                                                                                                                   "鮼ꚇ싋։刟\rRLd步Nⴗ5Eࡆ訛갚[I醵NC(郴ṉy5D뤺౳QY壯5苴y훨(W\\Cଇ姚C艄깹\u001c歷㋵ZC᥂": [
+                                                                                                                    -6806235313106257498,
+                                                                                                                    null,
+                                                                                                                    "}N⸿讽sꚪ;\\p繇j苄䫨\u20e7%5x?t#",
+                                                                                                                    {
+                                                                                                                     "O〗k<墻yV$ఁrs-c1ఌ唪.C7_Yobᦜ褷'b帰mㄑl⌅": {"qB뗗擄3隂5뺍櫂䱟e촸P/鏩,3掁ꗩ=冉棓㑉|˞F襴뿴,:㞦<퓂⧙礞♗g뚎ᛩ<\/뉽ⶳ⸻A?_x2I㽝勒*I홱鍧粿~曟㤙2绥Ly6+썃uu鿜בf큘|歍ࣖÉ": [
+                                                                                                                      ">hh䈵w>1ⲏ쐭V[ⅎ\\헑벑F_㖝⠗㫇h恽;῝汰ᱼ瀖J옆9RR셏vsZ柺鶶툤r뢱橾/ꉇ囦FGm\"謗ꉦ⨶쒿⥡%]鵩#ᖣ_蹎 u5|祥?O",
+                                                                                                                      null,
+                                                                                                                      2.0150326776036215E-19,
+                                                                                                                      null,
+                                                                                                                      true,
+                                                                                                                      false,
+                                                                                                                      true,
+                                                                                                                      {"\fa᭶P捤WWc᠟f뚉ᬏ퓗ⳀW睹5:HXH=q7x찙X$)모r뚥ᆟ!Jﳸf": [
+                                                                                                                       -2995806398034583407,
+                                                                                                                       [
+                                                                                                                        6441377066589744683,
+                                                                                                                        "Mﶒ醹i)Gἦ廃s6몞 KJ౹礎VZ螺费힀\u0000冺업{谥'꡾뱻:.ꘘ굄奉攼Di᷑K鶲y繈욊阓v㻘}枭캗e矮1c?휐\"4\u0005厑莔뀾墓낝⽴洗ṹ䇃糞@b1\u0016즽Y轹",
+                                                                                                                        {
+                                                                                                                         "1⽕⌰鉟픏M㤭n⧴ỼD#%鐘⊯쿼稁븣몐紧ᅇ㓕ᛖcw嬀~ഌ㖓(0r⧦Q䑕髍ര铂㓻R儮\"@ꇱm❈௿᦯頌8}㿹犴?xn잆꥽R": 2.07321075750427366E18,
+                                                                                                                         "˳b18㗈䃟柵Z曆VTAu7+㛂cb0﯑Wp執<\/臋뭡뚋刼틮荋벲TLP预庰܈G\\O@VD'鱃#乖끺*鑪ꬳ?Mޞdﭹ{␇圯쇜㼞顄︖Y홡g": [{
+                                                                                                                          "0a,FZ": true,
+                                                                                                                          "2z̬蝣ꧦ驸\u0006L↛Ḣ4๚뿀'?lcwᄧ㐮!蓚䃦-|7.飑挴.樵*+1ﮊ\u0010ꛌ%貨啺/JdM:똍!FBe?鰴㨗0O财I藻ʔWA᫓G쳛u`<\/I": [{
+                                                                                                                           "$τ5V鴐a뾆両環iZp頻යn븃v": -4869131188151215571,
+                                                                                                                           "*즢[⦃b礞R◚nΰꕢH=귰燙[yc誘g䆌?ଜ臛": {
+                                                                                                                            "洤湌鲒)⟻\\䥳va}PeAMnN[": "㐳ɪ/(軆lZR,Cp殍ȮN啷\"3B婴?i=r$펽ᤐ쀸",
+                                                                                                                            "阄R4㒿㯔ڀ69ZᲦ2癁핌噗P崜#\\-쭍袛&鐑/$4童V꩑_ZHA澢fZ3": {"x;P{긳:G閉:9?活H": [
+                                                                                                                             "繺漮6?z犞焃슳\">ỏ[Ⳛ䌜녏䂹>聵⼶煜Y桥[泥뚩MvK$4jtロ",
+                                                                                                                             "E#갶霠좭㦻ୗ먵F+䪀o蝒ba쮎4X㣵 h",
+                                                                                                                             -335836610224228782,
+                                                                                                                             null,
+                                                                                                                             null,
+                                                                                                                             [
+                                                                                                                              "r1᫩0>danjY짿bs{",
+                                                                                                                              [
+                                                                                                                               -9.594464059325631E-23,
+                                                                                                                               1.0456894622831624E-20,
+                                                                                                                               null,
+                                                                                                                               5.803973284253454E-20,
+                                                                                                                               -8141787905188892123,
+                                                                                                                               true,
+                                                                                                                               -4735305442504973382,
+                                                                                                                               9.513150514479281E-20,
+                                                                                                                               "7넳$螔忷㶪}䪪l짴\u0007鹁P鰚HF銏ZJﳴ/⍎1ᷓ忉睇ᜋ쓈x뵠m䷐窥Ꮤ^\u0019ᶌ偭#ヂt☆၃pᎍ臶䟱5$䰵&๵分숝]䝈뉍♂坎\u0011<>",
+                                                                                                                               "C蒑貑藁lﰰ}X喇몛;t밿O7/᯹f\u0015kI嘦<ዴ㟮ᗎZ`GWퟩ瑹࡮ᅴB꿊칈??R校s脚",
+                                                                                                                               {
+                                                                                                                                "9珵戬+AU^洘拻ቒy柭床'粙XG鞕᠜繀伪%]hC,$輙?Ut乖Qm떚W8઼}~q⠪rU䤶CQ痗ig@#≲t샌f㈥酧l;y闥ZH斦e⸬]j⸗?ঢ拻퀆滌": null,
+                                                                                                                                "畯}㧢J罚帐VX㨑>1ꢶkT⿄蘥㝑o|<嗸層沈挄GEOM@-䞚䧰$만峬輏䠱V✩5宸-揂D'㗪yP掶7b⠟J㕻SfP?d}v㼂Ꮕ'猘": {
+                                                                                                                                 "陓y잀v>╪": null,
+                                                                                                                                 "鬿L+7:됑Y=焠U;킻䯌잫!韎ஔ\f": {
+                                                                                                                                  "駫WmGጶ": {
+                                                                                                                                   "\\~m6狩K": -2586304199791962143,
+                                                                                                                                   "ႜࠀ%͑l⿅D.瑢Dk%0紪dḨTI픸%뗜☓s榗኉\"?V籄7w髄♲쟗翛歂E䤓皹t ?)ᄟ鬲鐜6C": {
+                                                                                                                                    "_췤a圷1\u000eB-XOy缿請∎$`쳌eZ~杁튻/蜞`塣৙\"⪰\"沒l}蕌\\롃荫氌.望wZ|o!)Hn獝qg}": null,
+                                                                                                                                    "kOSܧ䖨钨:಼鉝ꭝO醧S`십`ꓭ쭁ﯢN&Et㺪馻㍢ⅳ㢺崡ຊ蜚锫\\%ahx켨|ż劻ꎄ㢄쐟A躊᰹p譞綨Ir쿯\u0016ﵚOd럂*僨郀N*b㕷63z": {
+                                                                                                                                     ":L5r+T㡲": [{
+                                                                                                                                      "VK泓돲ᮙRy㓤➙Ⱗ38oi}LJቨ7Ó㹡৘*q)1豢⛃e᫛뙪壥镇枝7G藯g㨛oI䄽 孂L缊ꋕ'EN`": -2148138481412096818,
+                                                                                                                                      "`⛝ᘑ$(खꊲ⤖ᄁꤒ䦦3=)]Y㢌跨NĴ驳줟秠++d孳>8ᎊ떩EꡣSv룃 쯫أ?#E|᭙㎐?zv:5祉^⋑V": [
+                                                                                                                                       -1.4691944435285607E-19,
+                                                                                                                                       3.4128661569395795E17,
+                                                                                                                                       "㐃촗^G9佭龶n募8R厞eEw⺡_ㆱ%⼨D뉄퉠2ꩵᛅⳍ搿L팹Lවn=\"慉념ᛮy>!`g!풲晴[/;?[v겁軇}⤳⤁핏∌T㽲R홓遉㓥",
+                                                                                                                                       "愰_⮹T䓒妒閤둥?0aB@㈧g焻-#~跬x<\/舁P݄ꐡ=\\׳P\u0015jᳪᢁq;㯏l%᭗;砢觨▝,謁ꍰGy?躤O黩퍋Y㒝a擯\n7覌똟_䔡]fJ晋IAS",
+                                                                                                                                       4367930106786121250,
+                                                                                                                                       -4.9421193149720582E17,
+                                                                                                                                       null,
+                                                                                                                                       {
+                                                                                                                                        ";ᄌ똾柉곟ⰺKpፇ䱻ฺ䖝{o~h!eꁿ઻욄ښ\u0002y?xUd\u207c悜ꌭ": [
+                                                                                                                                         1.6010824122815255E-19,
+                                                                                                                                         [
+                                                                                                                                          "宨︩9앉檥pr쇷?WxLb",
+                                                                                                                                          "氇9】J玚\u000f옛呲~ 輠1D嬛,*mW3?n휂糊γ虻*ᴫ꾠?q凐趗Ko↦GT铮",
+                                                                                                                                          "㶢ថmO㍔k'诔栀Z蛟}GZ钹D",
+                                                                                                                                          false,
+                                                                                                                                          -6.366995517736813E-20,
+                                                                                                                                          -4894479530745302899,
+                                                                                                                                          null,
+                                                                                                                                          "V%᫡II璅䅛䓎풹ﱢ/pU9se되뛞x梔~C)䨧䩻蜺(g㘚R?/Ự[忓C뾠ࢤc왈邠买?嫥挤풜隊枕",
+                                                                                                                                          ",v碍喔㌲쟚蔚톬៓ꭶ",
+                                                                                                                                          3.9625444752577524E-19,
+                                                                                                                                          null,
+                                                                                                                                          [
+                                                                                                                                           "kO8란뿒䱕馔b臻⍟隨\"㜮鲣Yq5m퐔<u뷆c譆\u001bN?<",
+                                                                                                                                           [{
+                                                                                                                                            ";涉c蒀ᴧN䘱䤳 ÿꭷ,핉dSTDB>K#ꢘug㼈ᝦ=P^6탲@䧔%$CqSw铜랊0&m⟭<\/a逎ym\u0013vᯗ": true,
+                                                                                                                                            "洫`|XN뤮\u0018詞=紩鴘_sX)㯅鿻Ố싹": 7.168252736947373E-20,
+                                                                                                                                            "ꛊ饤ﴏ袁(逊+~⽫얢鈮艬O힉7D筗S곯w操I斞᠈븘蓷x": [[[[
+                                                                                                                                             -7.3136069426336952E18,
+                                                                                                                                             -2.13572396712722688E18,
+                                                                                                                                             {
+                                                                                                                                              "硢3㇩R:o칢行E<=\u0018ၬYuH!\u00044U%卝炼2>\u001eSi$⓷ꒈ'렢gᙫ番ꯒ㛹럥嶀澈v;葷鄕x蓎\\惩+稘UEᖸﳊ㊈壋N嫿⏾挎,袯苷ኢ\\x|3c": 7540762493381776411,
+                                                                                                                                              "?!*^ᢏ窯?\u0001ڔꙃw虜돳FgJ?&⨫*uo籤:?}ꃹ=ٴ惨瓜Z媊@ત戹㔏똩Ԛ耦Wt轁\\枒^\\ꩵ}}}ꀣD\\]6M_⌫)H豣:36섘㑜": {
+                                                                                                                                               ";홗ᰰU஋㙛`D왔ཿЃS회爁\u001b-㢈`봆?盂㛣듿ᦾ蒽_AD~EEຆ㊋(eNwk=Rɠ峭q\"5Ἠ婾^>'ls\n8QAK<l_⭨穟": [
+                                                                                                                                                true,
+                                                                                                                                                true,
+                                                                                                                                                {"ﳷm箅6qⷈ?ﲈ憟b۷⫉἞V뚴少U呡瓴ꉆs~嘵得㌶4XR漊": [
+                                                                                                                                                 "폆介fM暪$9K[ㄇ샍큳撦g撟恸jҐF㹹aj bHᘀ踉ꎐC粄 a?\u000fK즉郝 幨9D舢槷Xh뵎u훩Ꜿ턾ƅ埂P埆k멀{䢹~?D<\/꼢XR\u001b〱䝽꼨i㘀ḟ㚺A-挸",
+                                                                                                                                                 false,
+                                                                                                                                                 null,
+                                                                                                                                                 -1.1710758021294953E-20,
+                                                                                                                                                 3996737830256461142,
+                                                                                                                                                 true,
+                                                                                                                                                 null,
+                                                                                                                                                 -8271596984134071193,
+                                                                                                                                                 "_1G퉁텑m䮔鰼6멲Nmꇩſt쓟튍N许FDj+3^ﶜ⎸\u0019⤕橥!\"s-뾞lz北׸ꍚ랬)?l⻮고i䑰\u001f䪬",
+                                                                                                                                                 4.459124464204517E-19,
+                                                                                                                                                 -4.0967172848578447E18,
+                                                                                                                                                 5643211135841796287,
+                                                                                                                                                 -9.482336221192844E-19,
+                                                                                                                                                 "౪冏釶9D?s螭X榈枸j2秀v]泌鰚岒聵轀쌶i텽qMbL]R,",
+                                                                                                                                                 null,
+                                                                                                                                                 [
+                                                                                                                                                  null,
+                                                                                                                                                  {"M쪊ꯪ@;\u0011罙ꕅ<e᝺|爑Yⵝ<\/&ᩎ<腊ሑᮔ੃F豭": [
+                                                                                                                                                   "^0࡟1볏P폋ፏ杈F⨥Iꂴ\"z磣VⅡ=8퀝2]䢹h1\u0017{jT<I煛5%D셍S⑙⅏J*샐 巙ດ;᧡䙞",
+                                                                                                                                                   [{
+                                                                                                                                                    "'㶡큾鄧`跊\"gV[?u᭒Ʊ髷%葉굵a띦N켧Qﯳy%y䩟髒L䯜S䵳r絅肾킂ၐ'ꔦg긓a'@혔যW谁ᝬF栩ŷ+7w鞚": 6.3544416675584832E17,
+                                                                                                                                                    "苎脷v改hm쏵|㋊g_ᔐ 뒨蹨峟썎㷸|Ο刢?Gͨ옛-?GꦱIEYUX4?%ꘋᆊ㱺": -2.8418378709165287E-19,
+                                                                                                                                                    "誰?(H]N맘]k洳\"q蒧蘞!R퐫\\(Q$T5N堍⫣윿6|럦속︅ﭗ(": [
+                                                                                                                                                     "峩_\u0003A瘘?✓[硫䎯ၽuጭ\"@Y綅첞m榾=贮9R벿῜Z",
+                                                                                                                                                     null,
+                                                                                                                                                     "䰉㗹㷾Iaᝃqcp쓘὾൫Q|ﵓ<\/ḙ>)- Q䲌mo펹L_칍樖庫9꩝쪹ᘹ䑖瀍aK ?*趤f뭓廝p=磕",
+                                                                                                                                                     "哑z懅ᤏ-ꍹux쀭",
+                                                                                                                                                     [
+                                                                                                                                                      true,
+                                                                                                                                                      3998739591332339511,
+                                                                                                                                                      "ጻ㙙?᳸aK<\/囩U`B3袗ﱱ?\"/k鏔䍧2l@쿎VZ쨎/6ꃭ脥|B?31+on颼-ꮧ,O嫚m ࡭`KH葦:粘i]aSU쓙$쐂f+詛頖b",
+                                                                                                                                                      [{"^<9<箝&絡;%i﫡2攑紴\\켉h쓙-柂䚝ven\u20f7浯-Ꮏ\r^훁䓚헬\u000e?\\ㅡֺJ떷VOt": [{
+                                                                                                                                                       "-௄卶k㘆혐஽y⎱㢬sS઄+^瞥h;ᾷj;抭\u0003밫f<\/5Ⱗ裏_朻%*[-撵䷮彈-芈": {
+                                                                                                                                                        "㩩p3篊G|宮hz䑊o곥j^Co0": [
+                                                                                                                                                         653239109285256503,
+                                                                                                                                                         {"궲?|\":N1ۿ氃NZ#깩:쇡o8킗ࡊ[\"됸Po핇1(6鰏$膓}⽐*)渽J'DN<썙긘毦끲Ys칖": {
+                                                                                                                                                          "2Pr?Xjㆠ?搮/?㓦柖馃5뚣Nᦼ|铢r衴㩖\"甝湗ܝ憍": "\"뾯i띇筝牻$珲/4ka $匝휴译zbAᩁꇸ瑅&뵲衯ꎀᆿ7@ꈋ'ᶨH@ᠴl+",
+                                                                                                                                                          "7뢽뚐v?4^ꊥ_⪛.>pởr渲<\/⢕疻c\"g䇘vU剺dஔ鮥꒚(dv祴X⼹\\a8y5坆": true,
+                                                                                                                                                          "o뼄B욞羁hr﷔폘뒚⿛U5pꪴfg!6\\\"爑쏍䢱W<ﶕ\\텣珇oI/BK뺡'谑♟[Ut븷亮g(\"t⡎有?ꬊ躺翁艩nl F⤿蠜": 1695826030502619742,
+                                                                                                                                                          "ۊ깖>ࡹ햹^ⵕ쌾BnN〳2C䌕tʬ]찠?ݾ2饺蹳ぶꌭ訍\"◹ᬁD鯎4e滨T輀ﵣ੃3\u20f3킙D瘮g\\擦+泙ၧ 鬹ﯨַ肋7놷郟lP冝{ߒhড়r5,꓋": null,
+                                                                                                                                                          "ΉN$y{}2\\N﹯ⱙK'8ɜͣwt,.钟廣䎘ꆚk媄_": null,
+                                                                                                                                                          "䎥eᾆᝦ읉,Jުn岪㥐s搖謽䚔5t㯏㰳㱊ZhD䃭f絕s鋡篟a`Q鬃┦鸳n_靂(E4迠_觅뷝_宪D(NL疶hL追V熑%]v肫=惂!㇫5⬒\u001f喺4랪옑": {
+                                                                                                                                                           "2a輍85먙R㮧㚪Sm}E2yꆣꫨrRym㐱膶ᔨ\\t綾A☰.焄뙗9<쫷챻䒵셴᭛䮜.<\/慌꽒9叻Ok䰊Z㥪幸k": [
+                                                                                                                                                            null,
+                                                                                                                                                            true,
+                                                                                                                                                            {"쌞쐍": {
+                                                                                                                                                             "▟GL K2i뛱iQ\"̠.옛1X$}涺]靎懠ڦ늷?tf灟ݞゟ{": 1.227740268699265E-19,
+                                                                                                                                                             "꒶]퓚%ฬK❅": [{
+                                                                                                                                                              "(ෛ@Ǯっ䧼䵤[aテൖvEnAdU렖뗈@볓yꈪ,mԴ|꟢캁(而첸죕CX4Y믅": "2⯩㳿ꢚ훀~迯?᪑\\啚;4X\u20c2襏B箹)俣eỻw䇄",
+                                                                                                                                                              "75༂f詳䅫ꐧ鏿 }3\u20b5'∓䝱虀f菼Iq鈆﨤g퍩)BFa왢d0뮪痮M鋡nw∵謊;ꝧf美箈ḋ*\u001c`퇚퐋䳫$!V#N㹲抗ⱉ珎(V嵟鬒_b㳅\u0019": null,
+                                                                                                                                                              "e_m@(i㜀3ꦗ䕯䭰Oc+-련0뭦⢹苿蟰ꂏSV䰭勢덥.ྈ爑Vd,ᕥ=퀍)vz뱊ꈊB_6듯\"?{㒲&㵞뵫疝돡믈%Qw限,?\r枮\"? N~癃ruࡗdn&": null,
+                                                                                                                                                              "㉹&'Pfs䑜공j<\/?|8oc᧨L7\\pXᭁ 9᪘": -2.423073789014103E18,
+                                                                                                                                                              "䝄瑄䢸穊f盈᥸,B뾧푗횵B1쟢f\u001f凄": "魖⚝2儉j꼂긾껢嗎0ࢇ纬xI4](੓`蕞;픬\fC\"斒\")2櫷I﹥迧",
+                                                                                                                                                              "ퟯ詔x悝령+T?Bg⥄섅kOeQ큼㻴*{E靼6氿L缋\u001c둌๶-㥂2==-츫I즃㠐Lg踞ꙂEG貨鞠\"\u0014d'.缗gI-lIb䋱ᎂDy缦?": null,
+                                                                                                                                                              "紝M㦁犿w浴詟棓쵫G:䜁?V2ힽ7N*n&㖊Nd-'ຊ?-樹DIv⊜)g䑜9뉂ㄹ푍阉~ꅐ쵃#R^\u000bB䌎䦾]p.䀳": [{"ϒ爛\"ꄱ︗竒G䃓-ま帳あ.j)qgu扐徣ਁZ鼗A9A鸦甈!k蔁喙:3T%&㠘+,䷞|챽v䚞문H<\/醯r셓㶾\\a볜卺zE䝷_죤ဵ뿰᎟CB": [
+                                                                                                                                                               6233512720017661219,
+                                                                                                                                                               null,
+                                                                                                                                                               -1638543730522713294,
+                                                                                                                                                               false,
+                                                                                                                                                               -8901187771615024724,
+                                                                                                                                                               [
+                                                                                                                                                                3891351109509829590,
+                                                                                                                                                                true,
+                                                                                                                                                                false,
+                                                                                                                                                                -1.03836679125188032E18,
+                                                                                                                                                                {
+                                                                                                                                                                 "<?起HCᷭ죎劐莇逰/{gs\u0014⽛㰾愫tᅱ<솞ڢ됌煲膺਻9x닳x࡭Q訽,ᶭඦtt掾\"秧㺌d˪䙻꫗:ᭈh4緞痐䤴c뫚떩త<?ᕢ謚6]폛O鰐鋛镠贩赟\"<G♷1'": true,
+                                                                                                                                                                 "቙ht4ߝBqꦤ+\u0006멲趫灔)椾": -1100102890585798710,
+                                                                                                                                                                 "総兎곇뇸粟F醇;朠?厱楛㶆ⶏ7r⾛o꯬᳡F\\머幖 㜦\f[搦᥽㮣0䕊?J㊳뀄e㔔+?<n↴复": [
+                                                                                                                                                                  "4~ꉍ羁\\偮(泤叕빜\u0014>j랎:g曞ѕᘼ}链N",
+                                                                                                                                                                  -1.1103819473845426E-19,
+                                                                                                                                                                  true,
+                                                                                                                                                                  [
+                                                                                                                                                                   true,
+                                                                                                                                                                   null,
+                                                                                                                                                                   -7.9091791735309888E17,
+                                                                                                                                                                   true,
+                                                                                                                                                                   {"}蔰鋈+ꐨ啵0?g*사%`J?*": [{
+                                                                                                                                                                    "\"2wG?yn,癷BK\\龞䑞x?蠢": -3.7220345009853505E-19,
+                                                                                                                                                                    ";饹়❀)皋`噿焒j(3⿏w>偍5X<np?<줯<Y]捘!J೸UⳂNे7v௸㛃ᄧ톿䨷鯻v焇=烻TQ!F⦰䣣눿K鷚눁'⭲m捠(䚻": [
+                                                                                                                                                                     "蹕 淜੃b\"+몾ⴕ",
+                                                                                                                                                                     null,
+                                                                                                                                                                     35892237756161615,
+                                                                                                                                                                     {
+                                                                                                                                                                      " 듹㏝)5慁箱&$~:遰쮐<\/堋?% \\勽唅z손帋䘺H髀麡M퇖uz\u0012m諦d᳤콌樝\rX싹̡Ო": -433791617729505482,
+                                                                                                                                                                      "-j溗ࢵcz!:}✽5ഇ,욨ݏs#덫=南浺^}E\\Y\\T*뼈cd꺐cۘ뎁䨸됱K䠴㉿恿逳@wf쏢<\/[L[": -9.3228549642908109E17,
+                                                                                                                                                                      "Ms킭u஗%\\u⍎/家欲ἅ答㓽/꯳齳|㭘Pr\"v<\/禇䔆$GA䊻˔-:틊[h?倬荤ᾞ৳.Gw\u000b": [
+                                                                                                                                                                       "0宜塙I@䏴蝉\\Uy뒅=2<h暒K._贡璐Yi檻_⮵uᐝ㘗聠[f\u0015힢Hꔮ}጑;誏yf0\"\u20cc?(=q斠➽5ꎾ鞘kⲃ",
+                                                                                                                                                                       -2.9234211354411E-19,
+                                                                                                                                                                       false,
+                                                                                                                                                                       true,
+                                                                                                                                                                       {
+                                                                                                                                                                        "\u0011⟴GH_;#怵:\u001c\u0002n1U\\p/왔(┫]hꐚ7\r0䵷첗岷O௷?㝎[殇|J=?韷pᶟ儜犆?5კ1kꍖiH竧뛈ପdmk游y(콪팱꾍k慧 y辣": [
+                                                                                                                                                                         false,
+                                                                                                                                                                         "O\"끍p覈ykv磂㢠㝵~뀬튍lC&4솎䇃:Mj",
+                                                                                                                                                                         -7.009964654003924E-20,
+                                                                                                                                                                         false,
+                                                                                                                                                                         -49306078522414046,
+                                                                                                                                                                         null,
+                                                                                                                                                                         null,
+                                                                                                                                                                         2160432477732354319,
+                                                                                                                                                                         true,
+                                                                                                                                                                         "4횡h+!踹ꐬP鮄{0&뱥M?샍鞅n㮞ᨹ?쒆毪l'箅^ꚥ頛`e㻨52柳⮙嫪࡟딯a.~䵮1f吘N&zȭL榓ۃ鳠5d㟆M@㣥ӋA΍q0縶$",
+                                                                                                                                                                         -3.848996532974368E16,
+                                                                                                                                                                         true,
+                                                                                                                                                                         null,
+                                                                                                                                                                         -3.5240055580952525E18,
+                                                                                                                                                                         {
+                                                                                                                                                                          " vﭷၵ#ce乃5僞?Z D`묨粇ᐔ绠vWL譢u뽀\\J|tⓙt№\"ꨋnT凮ᒩ蝂篝b騩:䢭Hbv읻峨z㹚T趗햆귣학津XiY@ᖥK": true,
+                                                                                                                                                                          "!F 醌y䉸W2ꇬ\u0006/䒏7~%9擛햀徉9⛰+?㌘;ꠓX䇻Dfi뼧쒒\u0012F謞՝絺+臕kऍLSQ쌁X쎬幦HZ98蒊枳": "澤令#\u001d抍⛳@N搕퀂[5,✄ꘇ~䘷?\u0011Xꈺ[硸⠘⛯X醪聡x\u0007쌇MiX/|ミ뚁K8䁡W)銀q僞綂蔕E",
+                                                                                                                                                                          "6␲䣖R৞@ငg?<\/೴x陙Xꈺ崸⠅ᇾ\\0X,H쟴셭A稂ힿゝF\\쑞\u0012懦(Aᯕ灭~\u0001껮X?逊": 5.7566819207732864E17,
+                                                                                                                                                                          "[c?椓": false,
+                                                                                                                                                                          "k䒇": 2583824107104166717,
+                                                                                                                                                                          "꙯N훙㏅ﮒ燣㨊瞯咽jMxby뻭뵫װ[\"1畈?ৱL": "띣ᔂ魠羓犴ꚃ+|rY",
+                                                                                                                                                                          "녺Z?䬝鉉:?ⳙ瘏Cኯ.Vs[釿䨉쐧\\\\*쵢猒$\\y溔^,㑳": {"藶꺟": [{
+                                                                                                                                                                           "\"d훣N2zq]?'檿죸忷篇ﮟ擤m'9!죶≓p뭻\\ᇷ\f퇶_䰸h๐Q嵃訾㘑従ꯦ䞶jL틊r澵Omᾫ!H䱤팼/;|᭺I7슎YhuXi⚼": -1.352716906472438E-19,
+                                                                                                                                                                           "M⽇倻5J䂫औ᝔楸#J[Fﹱ쫮W誻bWz?}1\"9硪뻶fe": "盬:Ѹ砿획땣T凊(m灦呜ﻝR㿎艴䂵h",
+                                                                                                                                                                           "R띾k힪CH钙_i苮ⰵoᾨ紑퉎7h؉\"柀蝽z0့\"<?嘭$蜝?礲7岇槀묡?V钿T⣜v+솒灚ԛ2米mH?>薙婏聿3aFÆÝ": "2,ꓴg?_섦_>Y쪥션钺;=趘F~?D㨫\bX?㹤+>/믟kᠪ멅쬂Uzỵ]$珧`m雁瑊ඖ鯬cꙉ梢f묛bB",
+                                                                                                                                                                           "♽n$YjKiXX*GO贩鏃豮祴遞K醞眡}ꗨv嵎꼷0୸+M菋eH徸J꣆:⼐悥B켽迚㯃b諂\u000bjꠜ碱逮m8": [
+                                                                                                                                                                            "푷᣺ﻯd8ﱖ嬇ភH鹎⡱᱅0g:果6$GQ췎{vᷧYy-脕x偹砡館⮸C蓼ꏚ=軄H犠G谖ES詤Z蠂3l봟hᅭ7䦹1GPQG癸숟~[#駥8zQ뛣J소obg,",
+                                                                                                                                                                            null,
+                                                                                                                                                                            1513751096373485652,
+                                                                                                                                                                            null,
+                                                                                                                                                                            -6.851466660824754E-19,
+                                                                                                                                                                            {"䩂-⴮2ٰK솖풄꾚ႻP앳1H鷛wmR䗂皎칄?醜<\/&ࠧ㬍X濬䵈K`vJ륒Q/IC묛!;$vϑ": {
+                                                                                                                                                                             "@-ꚗxྐྵ@m瘬\u0010U絨ﮌ驐\\켑寛넆T=tQ㭤L연@脸삯e-:⩼u㎳VQ㋱襗ຓ<Ⅶ䌸cML3+\u001e_C)r\\9+Jn\\Pﺔ8蠱檾萅Pq鐳话T䄐I": -1.80683891195530061E18,
+                                                                                                                                                                             "ᷭዻU~ཷsgSJ`᪅'%㖔n5픆桪砳峣3獮枾䌷⊰呀": {
+                                                                                                                                                                              "Ş੉䓰邟自~X耤pl7间懑徛s첦5ਕXexh⬖鎥᐀nNr(J컗|ૃF\"Q겮葲놔엞^겄+㈆话〾희紐G'E?飕1f❼텬悚泬먐U睬훶Qs": false,
+                                                                                                                                                                              "(\u20dag8큽튣>^Y{뤋.袊䂓;_g]S\u202a꽬L;^'#땏bႌ?C緡<䝲䲝断ꏏ6\u001asD7IK5Wxo8\u0006p弊⼂ꯍ扵\u0003`뵂픋%ꄰ⫙됶l囏尛+䗅E쟇\\": [
+                                                                                                                                                                               true,
+                                                                                                                                                                               {
+                                                                                                                                                                                "\n鱿aK㝡␒㼙2촹f;`쾏qIࡔG}㝷䐍瓰w늮*粅9뒪ㄊCj倡翑閳R渚MiUO~仨䜶RꙀA僈㉋⦋n{㖥0딿벑逦⥻0h薓쯴Ꝼ": [
+                                                                                                                                                                                 5188716534221998369,
+                                                                                                                                                                                 2579413015347802508,
+                                                                                                                                                                                 9.010794400256652E-21,
+                                                                                                                                                                                 -6.5327297761238093E17,
+                                                                                                                                                                                 1.11635352494065523E18,
+                                                                                                                                                                                 -6656281618760253655,
+                                                                                                                                                                                 {
+                                                                                                                                                                                  "": ")?",
+                                                                                                                                                                                  "TWKLꑙ裑꺔UE俸塑炌Ũ᜕-o\"徚#": {"M/癟6!oI51ni퐚=댡>xꍨ\u0004 ?": {
+                                                                                                                                                                                   "皭": {"⢫䋖>u%w잼<䕏꘍P䋵$魋拝U䮎緧皇Y훂&|羋ꋕ잿cJ䨈跓齳5\u001a삱籷I꿾뤔S8㌷繖_Yឯ䲱B턼O歵F\\l醴o_欬6籏=D": [
+                                                                                                                                                                                    false,
+                                                                                                                                                                                    true,
+                                                                                                                                                                                    {"Mt|ꏞD|F궣MQ뵕T,띺k+?㍵i": [
+                                                                                                                                                                                     7828094884540988137,
+                                                                                                                                                                                     false,
+                                                                                                                                                                                     {
+                                                                                                                                                                                      "!༦鯠,&aﳑ>[euJꏽ綷搐B.h": -7648546591767075632,
+                                                                                                                                                                                      "-n켧嘰{7挐毄Y,>❏螵煫乌pv醑Q嶚!|⌝責0왾덢ꏅ蛨S\\)竰'舓Q}A釡5#v": 3344849660672723988,
+                                                                                                                                                                                      "8閪麁V=鈢1녈幬6棉⪮둌\u207d᚛驉ꛃ'r䆉惏ै|bἧﺢᒙ<=穊强s혧eꮿ慩⌡ \\槳W븧J檀C,ᘉ의0俯퀉M;筷ࣴ瓿{늊埂鄧_4揸Nn阼Jੵ˥(社": true,
+                                                                                                                                                                                      "o뼀vw)4A뢵(a䵢)p姃뛸\u000fK#KiQp\u0005ꅍ芅쏅": null,
+                                                                                                                                                                                      "砥$ꥸ┇耽u斮Gc{z빔깎밇\\숰\u001e괷各㶇쵿_ᴄ+h穢p촀Ნ䃬z䝁酳ӂ31xꔄ1_砚W렘G#2葊P ": [
+                                                                                                                                                                                       -3709692921720865059,
+                                                                                                                                                                                       null,
+                                                                                                                                                                                       [
+                                                                                                                                                                                        6669892810652602379,
+                                                                                                                                                                                        -135535375466621127,
+                                                                                                                                                                                        "뎴iO}Z? 馢녱稹ᄾ䐩rSt帤넆&7i騏멗畖9誧鄜'w{Ͻ^2窭외b㑎粖i矪ꦨ탪跣)KEㆹ\u0015V8[W?⽉>'kc$䨘ᮛ뉻٬M5",
+                                                                                                                                                                                        1.10439588726055846E18,
+                                                                                                                                                                                        false,
+                                                                                                                                                                                        -4349729830749729097,
+                                                                                                                                                                                        null,
+                                                                                                                                                                                        [
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         "_蠢㠝^䟪/D녒㡋ỎC䒈판\u0006એq@O펢%;鹐쏌o戥~A[ꡉ濽ỳ&虃᩾荣唙藍茨Ig楡꒻M窓冉?",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         2.17220752996421728E17,
+                                                                                                                                                                                         -5079714907315156164,
+                                                                                                                                                                                         -9.960375974658589E-20,
+                                                                                                                                                                                         "ᾎ戞༒",
+                                                                                                                                                                                         true,
+                                                                                                                                                                                         false,
+                                                                                                                                                                                         [[
+                                                                                                                                                                                          "ⶉᖌX⧕홇)g엃⹪x뚐癟\u0002",
+                                                                                                                                                                                          -5185853871623955469,
+                                                                                                                                                                                          {
+                                                                                                                                                                                           "L㜤9ợㇶK鐰⋓V뽋˖!斫as|9"፬䆪?7胜&n薑~": -2.11545634977136992E17,
+                                                                                                                                                                                           "O8뀩D}캖q萂6༣㏗䈓煮吽ਆᎼDᣘ폛;": false,
+                                                                                                                                                                                           "YTᡅ^L㗎cbY$pᣞ縿#fh!ꘂb삵玊颟샞ဢ$䁗鼒몁~rkH^:닮먖츸륈⪺쒉砉?㙓扫㆕꣒`R䢱B酂?C뇞<5Iޚ讳騕S瞦z": null,
+                                                                                                                                                                                           "\\RB?`mG댵鉡幐物䵎有5*e骄T㌓ᛪ琾駒Ku\u001a[柆jUq8⋈5鿋츿myﻗ?雍ux঴?": 5828963951918205428,
+                                                                                                                                                                                           "n0晅:黯 xu씪^퓞cB㎊ᬍ⺘٤փ~B岚3㥕擄vᲂ~F?C䶖@$m~忔S왖㲚?챴⊟W#벌{'㰝I䝠縁s樘\\X뢻9핡I6菍ㄛ8쯶]wॽ0L\"q": null,
+                                                                                                                                                                                           "x增줖j⦦t䏢᎙㛿Yf鼘~꫓恄4惊\u209c": "oOhbᤃ᛽z&Bi犑\\3B㩬劇䄑oŁ쨅孥멁ຖacA㖫借㞝vg싰샂㐜#譞⢤@k]鋰嘘䜾L熶塥_<\/⍾屈ﮊ_mY菹t뙺}Ox=w鮮4S1ꐩמּ'巑",
+                                                                                                                                                                                           "㗓蟵ꂾe蠅匳(JP䗏෸\u0089耀왲": [{
+                                                                                                                                                                                            "ᤃ㵥韎뤽\r?挥O쯡⇔㞚3伖\u0005P⋪\"D궣QLn(⚘罩䩢Ŏv䤘尗뼤됛O淽鋋闚r崩a{4箙{煷m6〈": {
+                                                                                                                                                                                             "l곺1L": {
+                                                                                                                                                                                              "T'ਤ?砅|੬Km]䄩\"(࿶<\/6U爢䫈倔郴l2㴱^줣k'L浖L鰄Rp今鎗⒗C얨M훁㡧ΘX粜뫈N꤇輊㌻켑#㮮샶-䍗룲蠝癜㱐V>=\\I尬癤t=": 7648082845323511446,
+                                                                                                                                                                                              "鋞EP:<\/_`ၧe混ㇹBd⯢㮂驋\\q碽饩跓྿ᴜ+j箿렏㗑yK毢宸p謹h䦹乕U媣\\炤": [[
+                                                                                                                                                                                               "3",
+                                                                                                                                                                                               [
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                3.4058271399411134E-20,
+                                                                                                                                                                                                true,
+                                                                                                                                                                                                "揀+憱f逮@먻BpW曉\u001a㣐⎊$n劈D枤㡞좾\u001aᛁ苔౩闝1B䷒Ṋ݋➐ꀞꐃ磍$t੤_:蘺⮼(#N",
+                                                                                                                                                                                                697483894874368636,
+                                                                                                                                                                                                [
+                                                                                                                                                                                                 "vᘯ锴)0訶}䳅⩚0O壱韈ߜ\u0018*U鍾䏖=䧉뽑单휻ID쿇嘗?ꌸῬ07",
+                                                                                                                                                                                                 -5.4858784319382006E18,
+                                                                                                                                                                                                 7.5467775182251151E18,
+                                                                                                                                                                                                 -8911128589670029195,
+                                                                                                                                                                                                 -7531052386005780140,
+                                                                                                                                                                                                 null,
+                                                                                                                                                                                                 [
+                                                                                                                                                                                                  null,
+                                                                                                                                                                                                  true,
+                                                                                                                                                                                                  [[{
+                                                                                                                                                                                                   "1欯twG<u䝮␽ꇣ_ჟﱴଶ-쪋\"?홺k:莝Ꜫ*⺵꽹댅釔좵}P?=9렿46b\u001c\\S?(筈僦⇶爷谰1ྷa": true,
+                                                                                                                                                                                                   "TҫJYxڪ\\鰔℮혡)m_WVi眪1[71><\/Q:0怯押殃탷聫사<ỗꕧ蚨䡁nDꌕ\u001c녬~蓩<N蹑\"{䫥lKc혁뫖앺:vⵑ": "g槵?",
+                                                                                                                                                                                                   "aꨩ뻃싥렌1`롗}Yg>鲃g儊>ꏡl㻿/⑷*챳6㻜W毤緛ﹺᨪ4\u0013뺚J髬e3쳸䘦伧?恪&{L掾p+꬜M䏊d娘6": {
+                                                                                                                                                                                                    "2p첼양棜h䜢﮶aQ*c扦v︥뮓kC寵횂S銩&ǝ{O*य़iH`U큅ࡓr䩕5ꄸ?`\\᧫?ᮼ?t〟崾훈k薐ì/iy꤃뵰z1<\/AQ#뿩8jJ1z@u䕥": 1.82135747285215155E18,
+                                                                                                                                                                                                    "ZdN &=d년ᅆ'쑏ⅉ:烋5&៏ᄂ汎来L㯄固{钧u\\㊏튚e摑&t嗄ꖄUb❌?m䴘熚9EW": [{
+                                                                                                                                                                                                     "ଛ{i*a(": -8.0314147546006822E17,
+                                                                                                                                                                                                     "⫾ꃆY\u000e+W`௸ \"M뒶+\\뷐lKE}(NT킶Yj選篒쁶'jNQ硾(똡\\\"逌ⴍy? IRꜘ὞鄬﨧:M\\f⠋Cꚜ쫊ᚴNV^D䕗ㅖἔIao꿬C⍏8": [
+                                                                                                                                                                                                      287156137829026547,
+                                                                                                                                                                                                      {
+                                                                                                                                                                                                       "H丞N逕<rO䎗:텕<\/䶩샌Sd%^ᵯ눐엑者g䖩똭蕮1U驣?Pⰰ\u001fp(W]67\u0015﫣6굺OR羸#촐F蒈;嘙i✵@_撶y㤏⤍(:᧗뼢༌朆@⏰㤨ꭲ?-n>⯲": {"": {
+                                                                                                                                                                                                        "7-;枮阕梒9ᑄZ": [[[[
+                                                                                                                                                                                                         null,
+                                                                                                                                                                                                         {
+                                                                                                                                                                                                          "": [[[[
+                                                                                                                                                                                                           -7.365909561486078E-19,
+                                                                                                                                                                                                           2948694324944243408,
+                                                                                                                                                                                                           null,
+                                                                                                                                                                                                           [
+                                                                                                                                                                                                            true,
+                                                                                                                                                                                                            "荒\"并孷䂡쵼9o䀘F\u0002龬7⮹Wz%厖/*? a*R枈㌦됾g뒠䤈q딄㺿$쮸tᶎ릑弣^鏎<\/Y鷇驜L鿽<\/춋9Mᲆឨ^<\/庲3'l낢",
+                                                                                                                                                                                                            "c鮦\u001b두\\~?眾ಢu݆綑෪蘛轋◜gȃ<\/ⴃcpkDt誩܅\"Y",
+                                                                                                                                                                                                            [[
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             null,
+                                                                                                                                                                                                             [
+                                                                                                                                                                                                              3113744396744005402,
+                                                                                                                                                                                                              true,
+                                                                                                                                                                                                              "v(y",
+                                                                                                                                                                                                              {
+                                                                                                                                                                                                               "AQ幆h쾜O+꺷铀ꛉ練A蚗⼺螔j㌍3꽂楎䥯뎸먩?": null,
+                                                                                                                                                                                                               "蠗渗iz鱖w]擪E": 1.2927828494783804E-17,
+                                                                                                                                                                                                               "튷|䀭n*曎b✿~杤U]Gz鄭kW|㴚#㟗ഠ8u擨": [[
+                                                                                                                                                                                                                true,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                {"⾪壯톽g7?㥜ώQꑐ㦀恃㧽伓\\*᧰閖樧뢇赸N휶䎈pI氇镊maᬠ탷#X?A+kНM ༑᩟؝?5꧎鰜ṚY즫궔 =ঈ;ﳈ?*s|켦蜌wM笙莔": [
+                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                 -3808207793125626469,
+                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                  -469910450345251234,
+                                                                                                                                                                                                                  7852761921290328872,
+                                                                                                                                                                                                                  -2.7979740127017492E18,
+                                                                                                                                                                                                                  1.4458504352519893E-20,
+                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                  "㽙깹?먏䆢:䴎ۻg殠JBTU⇞}ꄹꗣi#I뵣鉍r혯~脀쏃#釯:场:䔁>䰮o'㼽HZ擓௧nd",
+                                                                                                                                                                                                                  [
+                                                                                                                                                                                                                   974441101787238751,
+                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                   -2.1647718292441327E-19,
+                                                                                                                                                                                                                   1.03602824249831488E18,
+                                                                                                                                                                                                                   [
+                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                    1.0311977941822604E-17,
+                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                     "": -3.7019778830816707E18,
+                                                                                                                                                                                                                     "E峾恆茍6xLIm縂0n2视֯J-ᤜz+ᨣ跐mYD豍繹⹺䊓몓ﴀE(@詮(!Y膽#᎙2䟓섣A䈀㟎,囪QbK插wcG湎ꤧtG엝x⥏俎j'A一ᯥ뛙6ㅑ鬀": 8999803005418087004,
+                                                                                                                                                                                                                     "よ殳\\zD⧅%Y泥簳Uꈩ*wRL{3#3FYHା[d岀䉯T稉駅䞘礄P:闈W怏ElB㤍喬赔bG䠼U଄Nw鰯闀楈ePsDꥷ꭬⊊": [
+                                                                                                                                                                                                                      6.77723657904486E-20,
+                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                       "ཚ_뷎꾑蹝q'㾱ꂓ钚蘞慵렜떆`ⴹ⎼櫯]J?[t9Ⓢ !컶躔I᮸uz>3a㠕i,錃L$氰텰@7녫W㸮?羧W뇧ꃞ,N鋮숪2ɼ콏┍䁲6",
+                                                                                                                                                                                                                       "&y?뢶=킕올Za惻HZk>c\u20b58i?ꦶcfBv잉ET9j䡡",
+                                                                                                                                                                                                                       "im珊Ճb칧<D-諂*u2ꡜ췛~䬢(텸ﵦ>校\\뼾쯀",
+                                                                                                                                                                                                                       9.555715121193197E-20,
+                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                        "<㫚v6腓㨭e1㕔&&V∌ᗈT奄5Lጥ>탤?튣瑦㳆ꉰ!(ᙪ㿬擇_n쌯IMΉ㕨␰櫈ᱷ5풔蟹&L.첽e鰷쯃劼﫭b#ﭶ퓀7뷄Wr㢈๧Tʴશ㶑澕鍍%": -1810142373373748101,
+                                                                                                                                                                                                                        "fg晌o?߲ꗄ;>C>?=鑰監侯Kt굅": true,
+                                                                                                                                                                                                                        "䫡蓺ꑷ]C蒹㦘\"1ః@呫\u0014NL䏾eg呮፳,r$裢k>/\\<z": [[
+                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                         "C䡏>?ㄤᇰﻛ쉕1஥'Ċ\" \\_?쨔\"ʾr: 9S䘏禺ᪧꄂ㲄",
+                                                                                                                                                                                                                         [[{
+                                                                                                                                                                                                                          "*硙^+E쌺I1䀖ju?:⦈Ꞓl๴竣迃xKC/饉:\fl\"XTFᄄ蟭,芢<\/骡軺띜hꏘ\u001f銿<棔햳▨(궆*=乥b8\\媦䷀뫝}닶ꇭ(Kej䤑M": [{
+                                                                                                                                                                                                                           "1Ꮼ?>옿I╅C<ގ?ꊌ冉SV5A㢊㶆z-๎玶绢2F뵨@㉌뀌o嶔f9-庒茪珓뷳4": null,
+                                                                                                                                                                                                                           ";lᰳ": "CbB+肻a䄷苝*/볳+/4fq=㰁h6瘉샴4铢Y骐.⌖@哼猎㦞+'gꋸ㒕ߤ㞑(䶒跲ti⑴a硂#No볔",
+                                                                                                                                                                                                                           "t?/jE幸YHT셵⩎K!Eq糦ꗣv刴w\"l$ο:=6:移": {
+                                                                                                                                                                                                                            "z]鑪醊嫗J-Xm銌翁絨c里됏炙Ep㣋鏣똼嚌䀓GP﹖cmf4鹭T䅿꣭姧␸wy6ꦶ;S&(}ᎧKxᾂQ|t뻳k\"d6\"|Ml췆hwLt꼼4$&8Պ褵婶鯀9": {"嵃닢ᒯ'd᧫䳳#NXe3-붋鸿ଢ떓%dK\u0013䲎ꖍYV.裸R⍉rR3蟛\\:젯:南ĺLʆ넕>|텩鴷矔ꋅⒹ{t孶㓑4_": [
+                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                             null,
+                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                              "l怨콈lᏒ",
+                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                               "0w䲏嬧-:`䉅쉇漧\\܂yㄨb%㽄j7ᦶ涶<": 3.7899452730383747E-19,
+                                                                                                                                                                                                                               "ꯛTẀq纤q嶏V⿣?\"g}ი艹(쥯B T騠I=仵및X": {"KX6颠+&ᅃ^f畒y[": {
+                                                                                                                                                                                                                                "H?뱜^?꤂-⦲1a㋞&ꍃ精Ii᤾챪咽쬘唂쫷<땡劈훫놡o㥂\\ KⴙD秼F氮[{'좴:례晰Iq+I쭥_T綺砸GO煝䟪ᚪ`↹l羉q쐼D꽁ᜅ훦: vUV": true,
+                                                                                                                                                                                                                                "u^yﳍ0㱓#[y뜌앸ꊬL㷩?蕶蘾⻍KӼ": -7931695755102841701,
+                                                                                                                                                                                                                                "䤬轉車>\u001c鴵惋\"$쯃྆⇻n뽀G氠S坪]ಲꨍ捇Qxኻ椕駔\\9ࣼ﫻읜磡煮뺪ᶚ볝l㕆t+sζ": [[[
+                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                  3363739578828074923,
+                                                                                                                                                                                                                                  true,
+                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                   "\"鸣詩 볰㑵gL㯦῅춝旫}ED辗ﮈI쀤-ꧤ|㠦Z\"娑ᕸ4爏騍㣐\"]쳝Af]茛⬻싦o蚁k䢯䩐菽3廇喑ޅ": 4.5017999150704666E17,
+                                                                                                                                                                                                                                   "TYႇ7ʠ值4챳唤~Zo&ݛ": false,
+                                                                                                                                                                                                                                   "`塄J袛㭆끺㳀N㺣`꽐嶥KﯝSVᶔ∲퀠獾N딂X\"ᤏhNﬨvI": {"\u20bb㭘I䖵䰼?sw䂷쇪](泒f\"~;꼪Fԝsᝦ": {"p,'ꉂ軿=A蚶?bƉ㏵䅰諬'LYKL6B깯⋩겦뎙(ᜭ\u0006噣d꾆㗼Z;䄝䚔cd<情@䞂3苼㸲U{)<6&ꩻ钛\u001au〷N숨囖愙j=BXW욕^x芜堏Ῑ爂뛷꒻t✘Q\b": [[
+                                                                                                                                                                                                                                    "籛&ଃ䩹.ꃩ㦔\\C颫#暪&!勹ꇶ놽攺J堬镙~軌C'꾖䣹㮅岃ᙴ鵣",
+                                                                                                                                                                                                                                    4.317829988264744E15,
+                                                                                                                                                                                                                                    6.013585322002147E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    true,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    -3.084633632357326E-20,
+                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                    null,
+                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                     "\"짫愔昻  X\"藣j\"\"먁ཅѻ㘤㬯0晲DU꟒㸃d벀윒l䦾c੻*3": null,
+                                                                                                                                                                                                                                     "谈Wm陧阦咟ฯ歖擓N喴㋐銭rCCnVࢥ^♼Ⅾ젲씗刊S༝+_t赔\\b䚍뉨ꬫ6펛cL䊘᜼<\/澤pF懽&H": [
+                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                       "W\"HDUuΌ퀟M'P4࿰H똆ⰱﮯ<\/凐蘲\"C鴫ﭒж}ꭩ쥾t5yd诪ﮡ퍉ⴰ@?氐醳rj4I6Qt": 6.9090159359219891E17,
+                                                                                                                                                                                                                                       "絛ﳛ⺂": {"諰P㗮聦`ZQ?ꫦh*റcb⧱}埌茥h{棩렛툽o3钛5鮁l7Q榛6_g)ὄ\u0013kj뤬^爖eO4Ⱈ槞鉨ͺ订%qX0T썗嫷$?\\\"봅늆'%": [
+                                                                                                                                                                                                                                        -2.348150870600346E-19,
+                                                                                                                                                                                                                                        [[
+                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                         -6619392047819511778,
+                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                          -1.2929189982356161E-20,
+                                                                                                                                                                                                                                          1.7417192219309838E-19,
+                                                                                                                                                                                                                                          {"?嵲2࿐2\u0001啑㷳c縯": [
+                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                            false,
+                                                                                                                                                                                                                                            true,
+                                                                                                                                                                                                                                            2578060295690793218,
+                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                             "?\"殃呎#㑑F": true,
+                                                                                                                                                                                                                                             "}F炊_殛oU헢兔Ꝉ,赭9703.B数gTz3⏬": {
+                                                                                                                                                                                                                                              "5&t3,햓Mݸᵣ㴵;꣫䩍↳#@뫷䠅+W-ࣇzᓃ鿕ಔ梭?T䮑ꥬ旴]u뫵막bB讍:왳둛lEh=숾鱠p咐$짏#?g⹷ᗊv㷵.斈u頻\u0018-G.": "뽙m-ouࣤ஫牷\"`Ksꕞ筼3HlȨvC堈\"I]㖡玎r먞#'W賜鴇k'c룼髋䆿飉㗆xg巤9;芔cጐ/ax䊨♢큓r吓㸫೼䢗da᩾\"]屣`",
+                                                                                                                                                                                                                                              ":M딪<䢥喠\u0013㖅x9蕐㑂XO]f*Q呰瞊吭VP@9,㨣 D\\穎vˤƩs㜂-曱唅L걬/롬j㈹EB8g<\/섩o渀\"u0y&룣": ">氍緩L/䕑돯Ꟙ蕞^aB뒣+0jK⪄瑨痜LXK^힦1qK{淚t츔X:Vm{2r獁B뾄H첚7氥?쉟䨗ꠂv팳圎踁齀\\",
+                                                                                                                                                                                                                                              "D彤5㢷Gꪻ[lㄆ@὜⓰絳[ଃ獽쮹☒[*0ꑚ㜳": 9022717159376231865,
+                                                                                                                                                                                                                                              "ҖaV銣tW+$魿\u20c3亜~뫡ᙰ禿쨽㏡fṼzE/h": "5臐㋇Ჯ쮺? 昨탰Wム밎#'\"崲钅U?幫뺀⍾@4kh>騧\\0ҾEV=爐͌U捀%ꉼ 㮋<{j]{R>:gԩL\u001c瀈锌ﯲﳡꚒ'⫿E4暍㌗뵉X\"H᝜",
+                                                                                                                                                                                                                                              "ᱚגּ;s醒}犍SἿ㦣&{T$jkB\\\tḮ앾䤹o<避(tW": "vb⯽䴪䮢@|)",
+                                                                                                                                                                                                                                              "⥒퐁껉%惀뗌+녣迺顀q條g⚯i⤭룐M琹j̈́⽜A": -8385214638503106917,
+                                                                                                                                                                                                                                              "逨ꊶZ<\/W⫟솪㎮ᘇb?ꠔi\"H㧺x෷韒Xꫨฟ|]窽\u001a熑}Agn?Mᶖa<rఄ4Ů䢤슲Axģe곖㴤x竾郍B謉鸵k薽M)\"芣眜`菉ꉛ䴺": "鹏^ె캫?3耲]|Ü1䡒㝮]8e?䶍^",
+                                                                                                                                                                                                                                              "뿸樅#P㡊1M룮Uꪭ绢ꑮZ9꽸": {"\nJ^є|3袄ㅐ7⨆銦y睝⋷仴ct?[,<\/ㅬ`?갔髞%揁A೚C": {
+                                                                                                                                                                                                                                               " 䇞3갫䅪": [{
+                                                                                                                                                                                                                                                "0|⩁㑂砕ㅻ": null,
+                                                                                                                                                                                                                                                "D箳᠉`|=⼭)\"*࣊㦏LjO誋": "",
+                                                                                                                                                                                                                                                "ࠚDZmꗥ}ᷴ╈r7헴ȥ4Kp5a)o}鎘门L搰䆓'✎k俎c#T68ӏ⩶6L鎴<r൦$黊BQY㼳\\跿F慮⡨拵贀!甶V喅/": null,
+                                                                                                                                                                                                                                                "ⵣq⳹ﻨLk]晩1*y\\$%}䖶P煑㇆䈦E嫁櫕Y࣓嫨䓏OL낮梚㸇洛洚BYtgl∛S☕䉓宑⋢粚ꔯ꠼붠": ")ꬑ윤`\"Ⱓ<\/婽*Y䔸ᓰ_ﳍt슲坩隥&S糧䛮闵诌豐sh쯽邴*섴؏͎=㯨\"RVힳ,^t\"ac?䤒ꉀxHa=Uꛕ㐙TkF껾",
+                                                                                                                                                                                                                                                "弾cUAF?暤c덽.欀nK앭]r傊䀓ﯳ馽垃[䥛oI0N砊鈥헅Co쟋钄ㅷ㊌뷚7": [
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "૓鏨?^䆏{\u0006`X䧵儱&롡尙砡\u0006뻝쑬sj▻XfᬶgcㄢV >9韲4$3Ỵ^=쏍煤ፐ돷2䣃%鷠/eQ9頸쥎",
+                                                                                                                                                                                                                                                 2398360204813891033,
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 3.2658897259932633E-19,
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 "?ꚃ8Nn㞷幵d䲳䱲뀙ꪛQ瑓鎴]䩋-鰾捡䳡??掊",
+                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                 -1309779089385483661,
+                                                                                                                                                                                                                                                 "ᦲxu_/yecR.6芏.ᜇ過 ~",
+                                                                                                                                                                                                                                                 -5658779764160586501,
+                                                                                                                                                                                                                                                 "쒌:曠=l썜䢜wk#s蕚\"互㮉m䉤~0듐䋙#G;h숄옥顇෤勹(C7㢅雚㐯L⠅VV簅<",
+                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                 -4.664877097240962E18,
+                                                                                                                                                                                                                                                 -4.1931322262828017E18,
+                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                  ",": {
+                                                                                                                                                                                                                                                   "v㮟麑䄠뤵g{M띮.\u001bzt뢜뵡0Ǥ龍떟Ᾰ怷ϓRT@Lꀌ樂U㏠⾕e扉|bJg(뵒㠶唺~ꂿ(땉x⻫싉쁊;%0鎻V(o\f,N鏊%nk郼螺": -1.73631993428376141E18,
+                                                                                                                                                                                                                                                   "쟧摑繮Q@Rᕾ㭚㾣4隅待㓎3蒟": [
+                                                                                                                                                                                                                                                    4971487283312058201,
+                                                                                                                                                                                                                                                    8973067552274458613,
+                                                                                                                                                                                                                                                    {
+                                                                                                                                                                                                                                                     "`a揙ᣗ\u0015i<S幼訃锭B0&槩✨[Wp皩[g≊k葾x2ᡆ橲䲢W": true,
+                                                                                                                                                                                                                                                     "kH皈Sꁱq傑u?솹풑~o^F=劣N*reJ沤wW苯7p㼹䎐a=ꮧL㷩냴nWꌑ㞱uu谁lVN珿᤻(e豶5#L쪉ᅄ઄\u0015숟봊P瀚X蓎": false,
+                                                                                                                                                                                                                                                     "䫯דּ〖Sc䛭점L뵾pCꙞ\"엇즓_ﰛ톣ꫀ먩㺣㮠⭴!\\W┏t䖰軅y\u0014~ᇰ렢E7*俜䥪W䀩䷐h봆vjஉ묣༏G39.뼳輼:㮿ᐦA饕TUL}~": [
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      8.8648298810470003E17,
+                                                                                                                                                                                                                                                      5.735561205600924E-20,
+                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                      -102555823658171644,
+                                                                                                                                                                                                                                                      1.2674932032973067E-19,
+                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                       "D胣O㯨\u0017Ku눓㒏텁nᨊ!Ꚇ廫_>Bo¸": 4.3236479112537999E18,
+                                                                                                                                                                                                                                                       "HW&퉡ぁ圍<W)6悰ꠑHEp14xy峑ft\u0005s亘V튉䢮ꦈX嵐꬝?lI_덝춇-6Ss噺Nk-ﮥ큃܁郪*PR(S6╋@仙V懸뺵ﯜV粹": "9䗌斀4㐈^Qs隄硏j\u0003",
+                                                                                                                                                                                                                                                       "Vk鶅C泹筁HX훉朗*r\\z顊誌儖4?n7᏾6몋䎡ﳈ],H頢p蚐㑄P4满E䏩V䬕ญL廂쒬쑨ꆷh迡ꍰ譖墎 ]鹿ฌ7ﶽ冭༽<ꈓS\\l䋮?_ユ檒?": -8598528325153980065,
+                                                                                                                                                                                                                                                       "t=q퍣疻тZ\\錅J.镎|nfḷ鴒1厰L灯纜E]୦⥪]Ꮾ'羝p/咩0닳ﳁqﳖཽk ?X1Ft%ś뭢v鋋⺃爵⒗": [[
+                                                                                                                                                                                                                                                        5.0824756359232045E-19,
+                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                         7.268480839079619E-19,
+                                                                                                                                                                                                                                                         {"탿^굞⧕iј덊ꀛw껩6ꟳXs酚\\>Y?瑡Qy훍q!帰敏s舠㫸zꚗaS歲v`G株巷Jp6킼 (귶鍔⾏⡈>M汐㞍ቴ꙲dv@i㳓ᇆ?黍": [
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          4997607199327183467,
+                                                                                                                                                                                                                                                          "E㻎蠫ᐾ高䙟蘬洼旾﫠텛㇛?'M$㣒蔸=A_亀绉앭rN帮",
+                                                                                                                                                                                                                                                          null,
+                                                                                                                                                                                                                                                          [{
+                                                                                                                                                                                                                                                           "Eᑞ)8<Z㡿W镀䛒C생V?0ꯦ+tL)`齳AjB姀XೳD빠㻲ƙgn9⑰ྍ῜&\"㚹>餧A5u&㗾q?": [
+                                                                                                                                                                                                                                                            -1.969987519306507E-19,
+                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                             3.42437673373841E-20,
+                                                                                                                                                                                                                                                             true,
+                                                                                                                                                                                                                                                             "e걷M墁\"割P␛퍧厀R䱜3ﻴO퓫r﹉⹊",
+                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                              -8164221302779285367,
+                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                               null,
+                                                                                                                                                                                                                                                               "爘y^-?蘞Ⲽꪓa␅ꍨ}I",
+                                                                                                                                                                                                                                                               1.4645984996724427E-19,
+                                                                                                                                                                                                                                                               [{
+                                                                                                                                                                                                                                                                "tY좗⧑mrzﺝ㿥ⴖ᥷j諅\u0000q賋譁Ꞅ⮱S\nࡣB/큃굪3Zɑ复o<\/;롋": null,
+                                                                                                                                                                                                                                                                "彟h浠_|V4䦭Dᙣ♞u쿻=삮㍦\u001e哀鬌": [{"6횣楠,qʎꗇ鎆빙]㱭R굋鈌%栲j分僅ペ䇰w폦p蛃N溈ꡐꏀ?@(GI뉬$ﮄ9誁ꓚ2e甸ڋ[䁺,\u0011\u001cࢃ=\\+衪䷨ᯕ鬸K": [[
+                                                                                                                                                                                                                                                                 "ㅩ拏鈩勥\u000etgWVXs陂規p狵w퓼{뮵_i\u0002ퟑႢ⬐d6鋫F~챿搟\u0096䚼1ۼ칥0꣯儏=鋷牋ⅈꍞ龐",
+                                                                                                                                                                                                                                                                 -7283717290969427831,
+                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                 [
+                                                                                                                                                                                                                                                                  4911644391234541055,
+                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                   "I鈒첽P릜朸W徨觘-Hᎄ퐟⓺>8kr1{겵䍃〛ᬡ̨O귑o䝕'쿡鉕p5": "fv粖RN瞖蛐a?q꤄\u001d⸥}'ꣴ犿ꦼ?뤋?鵆쥴덋䡫s矷̄?ඣ/;괱絢oWfV<\/\u202cC,㖦0䑾%n賹g&T;|lj_欂N4w",
+                                                                                                                                                                                                                                                                   "짨䠗;䌕u i+r๏0": [{"9䥁\\఩8\"馇z䇔<\/ႡY3e狚쐡\"ุ6ﰆZ遖c\"Ll:ꮾ疣<\/᭙O◌납୕湞9⡳Und㫜\u0018^4pj1;䧐儂䗷ୗ>@e톬": {
+                                                                                                                                                                                                                                                                    "a⑂F鋻Q螰'<퇽Q贝瀧{ᘪ,cP&~䮃Z?gI彃": [
+                                                                                                                                                                                                                                                                     -1.69158726118025933E18,
+                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                      "궂z簽㔛㮨瘥⤜䛖Gℤ逆Y⪾j08Sn昞ꘔ캻禀鴚P謦b{ꓮmN靐Mᥙ5\"睏2냑I\u0011.L&=?6ᄠ뻷X鸌t刑\"#z)o꫚n쳟줋",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      7517598198523963704,
+                                                                                                                                                                                                                                                                      "ኑQp襟`uᩄr方]*F48ꔵn俺ሙ9뇒",
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      6645782462773449868,
+                                                                                                                                                                                                                                                                      1219168146640438184,
+                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                       ")ယ넌竀Sd䰾zq⫣⏌ʥ\u0010ΐ' |磪&p牢蔑mV蘸૰짬꺵;K": [
+                                                                                                                                                                                                                                                                        -7.539062290108008E-20,
+                                                                                                                                                                                                                                                                        [
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         false,
+                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                         true,
+                                                                                                                                                                                                                                                                         6574577753576444630,
+                                                                                                                                                                                                                                                                         [[
+                                                                                                                                                                                                                                                                          1.2760162530699766E-19,
+                                                                                                                                                                                                                                                                          [
+                                                                                                                                                                                                                                                                           null,
+                                                                                                                                                                                                                                                                           [
+                                                                                                                                                                                                                                                                            "顊\\憎zXB,",
+                                                                                                                                                                                                                                                                            [{
+                                                                                                                                                                                                                                                                             "㇆{CVC9-MN㜋ઘR눽#{h@ퟨ!鼚׼XOvXS\u0017ᝣ=cS+梽៲綆16s덽휐y屬?ᇳG2ᴭ\u00054쫖y룇nKcW̭炦s/鰘ᬽ?J|퓀髣n勌\u0010홠P>j": false,
+                                                                                                                                                                                                                                                                             "箴": [
+                                                                                                                                                                                                                                                                              false,
+                                                                                                                                                                                                                                                                              "鍞j\"ꮾ*엇칬瘫xṬ⭽쩁䃳\"-⋵?ᦽ<cਔ↎⩧%鱩涎삧u9K⦈\"῝ᬑV绩킯愌ṱv@GꝾ跶Ꚇ(?䖃vI᧊xV\r哦j㠒?*=S굤紴ꊀ鹭쬈s<DrIu솹꧑?",
+                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                               ".}S㸼L?t\u000fK⑤s~hU鱜꘦}쪍C滈4ꓗ蛌):ྦ\"顥이⢷ῳYLn\"?fꘌ>댎Ĝ": true,
+                                                                                                                                                                                                                                                                               "Pg帯佃籛n㔠⭹࠳뷏≻࿟3㞱!-쒾!}쭪䃕!籿n涻J5ਲ਼yvy;Rኂ%ᔡጀ裃;M⣼)쵂쑈": 1.80447711803435366E18,
+                                                                                                                                                                                                                                                                               "ꈑC⡂ᑆ㤉壂뎃Xub<\/쀆༈憓ق쨐ק\\": [
+                                                                                                                                                                                                                                                                                7706977185172797197,
+                                                                                                                                                                                                                                                                                {"": {"K╥踮砆NWࡆFy韣7ä밥{|紒︧䃀榫rᩛꦡTSy잺iH8}ퟴ,M?Ʂ勺ᴹ@T@~꾂=I㙕뾰_涀쑜嫴曣8IY?ҿo줫fऒ}\\S\"ᦨ뵼#nDX": {
+                                                                                                                                                                                                                                                                                 "♘k6?଱癫d68?㽚乳䬳-V顷\u0005蝕?\u0018䞊V{邾zじl]雏k臤~ൖH뒐iꢥ]g?.G碄懺䔛p<q꜉S岗_.%": 7688630934772863849,
+                                                                                                                                                                                                                                                                                 "溗摽嗙O㧀,⡢⼰呠ꅧ㓲/葇䢛icc@-r\b渂ꌳ뻨饑觝ᖜ\\鮭\u0014엙㥀᧺@浹W2꛵{W률G溮킀轡䬆g㨑'Q聨៪网Hd\"Q늴ᱢﶨ邮昕纚枑?▰hr羌驀[痹<\/": [
+                                                                                                                                                                                                                                                                                  -1.0189902027934687E-19,
+                                                                                                                                                                                                                                                                                  {"窶椸릎뚻shE\"ꪗႥꎳU矖佟{SJ": [{"-慜x櫹XY-澐ܨ⣷ઢ鯙%Fu\u0000迋▒}᥷L嗭臖oញc넨\u0016/迎1b꯸g뢱㐧蓤䒏8C散삭|\"컪輩鹩\"\\g$zG䥽긷?狸꿭扵㲐:URON&oU8": [
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   true,
+                                                                                                                                                                                                                                                                                   null,
+                                                                                                                                                                                                                                                                                   -2.8907335031148883E17,
+                                                                                                                                                                                                                                                                                   -3864019407187144121,
+                                                                                                                                                                                                                                                                                   {
+                                                                                                                                                                                                                                                                                    "`빬d⵺4H뜳⧈쓑ohஸ*㶐ﻇ⸕䠵!i䝬﹑h夘▥ꗐ푹갇㵳TA鳠嚵\\B<X}3訒c⋝{*﫢w]璨-g捭\\j໵侠Ei层\u0011": 3.758356090089446E-19,
+                                                                                                                                                                                                                                                                                    "䄘ﮐ)Y놞씃㾱陰큁:{\u2059/S⓴": [[
+                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                     [[
+                                                                                                                                                                                                                                                                                      -3.8256602120220546E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      7202317607724472882,
+                                                                                                                                                                                                                                                                                      "CWQ뚿",
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      false,
+                                                                                                                                                                                                                                                                                      true,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      2857038485417498625,
+                                                                                                                                                                                                                                                                                      6.191302233218633E-20,
+                                                                                                                                                                                                                                                                                      null,
+                                                                                                                                                                                                                                                                                      -6795250594296208046,
+                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                       true,
+                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                        "%ዧ遰Yᚯ⚀x莰愒Vᔈ턗BN洝ꤟA1⍌l콹풪H;OX๫륞쪐ᰚц@͎黾a邬<L厒Xb龃7f웨窂二;": [[
+                                                                                                                                                                                                                                                                                         null,
+                                                                                                                                                                                                                                                                                         "耲?䙧㘓F6Xs틭멢.v뚌?鄟恠▽'묺競?WvᆾCtxo?dZ;䨸疎",
+                                                                                                                                                                                                                                                                                         {
+                                                                                                                                                                                                                                                                                          "@hWꉁ&\"빜4礚UO~C;う殩_ꀥ蘁奢^챟k→ᡱKMⵉ<\/Jㅲ붉L͟Q": false,
+                                                                                                                                                                                                                                                                                          "tU뢂8龰I먽7,.Y搽Z툼=&⨥覽K乫햶㠸%#@Z끖愓^⍊⾂몒3E_噆J(廊ឭyd䞜鈬Ћ档'⣘I": {
+                                                                                                                                                                                                                                                                                           "tK*ꔵ銂u艗ԃ쿏∳ꄂ霫X3♢9y?=ⲭdЊb&xy}": [
+                                                                                                                                                                                                                                                                                            -4.097346784534325E-20,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            6016848468610144624,
+                                                                                                                                                                                                                                                                                            -8194387253692332861,
+                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                            {
+                                                                                                                                                                                                                                                                                             "(祬诀譕쯠娣c봝r?畄kT뼾⌘⎨?noV䏘쥝硎n?": [
+                                                                                                                                                                                                                                                                                              1.82679422844617293E18,
+                                                                                                                                                                                                                                                                                              [
+                                                                                                                                                                                                                                                                                               false,
+                                                                                                                                                                                                                                                                                               2.6849944122427694E18,
+                                                                                                                                                                                                                                                                                               true,
+                                                                                                                                                                                                                                                                                               [
+                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                {
+                                                                                                                                                                                                                                                                                                 ";0z⭆;화$bਔ瀓\"衱^?잢ᢛ⣿~`ꕉ薸⌳໿湘腌'&:ryБꋥၼ꒥筙꬜긨?X": -3536753685245791530,
+                                                                                                                                                                                                                                                                                                 "c;Y7釚Uꃣ割J༨Y戣w}c峰뢨㽑㫈0N>R$䅒X觨l봜A刊8R梒',}u邩퉕?;91Ea䈈믁G⊶芔h袪&廣㺄j;㡏綽\u001bN頸쳘橆": -2272208444812560733,
+                                                                                                                                                                                                                                                                                                 "拑Wﵚj鵼駳Oࣿ)#㾅顂N傓纝y僱栜'Bꐍ-!KF*ꭇK¦?䈴^:啤wG逭w᧯": "xᣱmYe1ۏ@霄F$ě꧘푫O䤕퀐Pq52憬ꀜ兴㑗ᡚ?L鷝ퟐ뭐zJꑙ}╆ᅨJB]\"袌㺲u8䯆f",
+                                                                                                                                                                                                                                                                                                 "꿽၅㔂긱Ǧ?SI": -1669030251960539193,
+                                                                                                                                                                                                                                                                                                 "쇝ɨ`!葎>瞺瘡驷錶❤ﻮ酜=": -6961311505642101651,
+                                                                                                                                                                                                                                                                                                 "?f7♄꫄Jᡔ훮e읇퍾፣䭴KhखT;Qty}O\\|뫁IῒNe(5惁ꥶㆷY9ﮡ\\ oy⭖-䆩婁m#x봉>Y鈕E疣s驇↙ᙰm<": {"퉻:dꂁ&efᅫ쫢[\"돈늖꺙|Ô剐1͖-K:ʚ᭕/;쏖㷛]I痐职4g<Oꗢ뫺N쯂륬J╆.`ᇵP轆&fd$?苅o궓vO侃沲⍩嚅沗 E%⿰얦wi\\*趫": [
+                                                                                                                                                                                                                                                                                                  3504362220185634767,
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  "qzX朝qT3軞T垈ꮲQ览ᚻ⻑쎎b驌䵆ꬠ5Fୗ䲁缿ꝁ蒇潇Ltᆄ钯蜀W欥ሺ",
+                                                                                                                                                                                                                                                                                                  "볰ɐ霬)젝鶼kwoc엷荁r \u001d쒷⎹8{%澡K늒?iﺩd=&皼倚J9s@3偛twὡgj䁠흪5⭉⨺役&놎cﺉ㺡N5",
+                                                                                                                                                                                                                                                                                                  false,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  "D0st[ni锹r*0k6ꀎ덇UX2⽼৞䃚粭#)Z桷36P]<\/`",
+                                                                                                                                                                                                                                                                                                  4281410120849816730,
+                                                                                                                                                                                                                                                                                                  null,
+                                                                                                                                                                                                                                                                                                  -3256922126984394461,
+                                                                                                                                                                                                                                                                                                  1.16174580369801549E18,
+                                                                                                                                                                                                                                                                                                  {
+                                                                                                                                                                                                                                                                                                   " ᆼꤗ~*TN긂<㡴턱℃酰^蘒涯잰淭傛2rൡet쾣䐇m*㸏y\"\\糮᧺qv쌜镜T@yg1譬ﭧﳭ\f": null,
+                                                                                                                                                                                                                                                                                                   "圾ᨿ0xᮛ禵ਗ਼D-㟻ẵ錚e\"赜.˶m)鴑B(I$<\/轴퉯揷⋏⏺*)宓쓌?*橯Lx\\f쩂㞼⇸\"ﺧ軂遳V\\땒\"캘c:G": null,
+                                                                                                                                                                                                                                                                                                   "?﵁_곢翸폈8㿠h열Q2㭛}RY㯕YT놂⽻e^B<\/맫ﻇ繱\u0017Gц⟊ᢑﵩS:jt櫣嗒⟰W㴚搦ᅉe[w䋺?藂翙Ⲱ芮䍘╢囥lpdu7r볺I 近qFyᗊ": [
+                                                                                                                                                                                                                                                                                                    "$b脬aᅠ襬育Bگ嵺Pw+'M<\/כֿn䚚v螁bN⒂}褺%lቦ阤\"ꓺᏗM牏,۞Ҷ!矬?ke9銊X괦)䈽틁脽ṫ䈞ᴆ^=Yᗿ遛4I귺⋥%",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    2.9444482723232051E18,
+                                                                                                                                                                                                                                                                                                    2072621064799640026,
+                                                                                                                                                                                                                                                                                                    "/_뇴뫢j㍒=Nꡦ↍Ժ赒❬톥䨞珯su*媸瀳鷔抡o흺-៳辏勷f绔:䵢搢2",
+                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                    "쒜 E䌐/큁\u0018懺_<\\隺&{wF⤊谼(<죽遠8?@*rᶊGd뻻갇&Ⳇq᣿e࢔t_ꩄ梸O詬C᧧Kꩠ풤9눙醅됞}竸rw?滨ӽK⥿ཊG魲']`๖5㄰",
+                                                                                                                                                                                                                                                                                                    -2375253967958699084,
+                                                                                                                                                                                                                                                                                                    {"嗱⿲\"f億ᝬ": {"v?䚑킡`◤k3,骥曘뒤Oᒱ㲹^圮᠀YT껛&촮P:G/T⣝#튣k3炩蠏k@橈䏷S䧕,熜晬k1鮥玸먚7䤡f绝嗚샴ᥒ~0q拮垑a뻱LⰖ_": [{
+                                                                                                                                                                                                                                                                                                     ":p尢": -6.688985172863383E17,
+                                                                                                                                                                                                                                                                                                     "A0\u0001疠ﻵ爻鼀湶I~W^岀mZx#㍈7r拣$Ꜷ疕≛⦒痋盩Vꬷ᭝ΩQꍪ療鈑A(劽詗ꭅo-獶鑺\"Ⓠ@$j탥;": [
+                                                                                                                                                                                                                                                                                                      8565614620787930994,
+                                                                                                                                                                                                                                                                                                      [
+                                                                                                                                                                                                                                                                                                       "嶗PC?උQ㪣$&j幾㾷h慑 즊慧⪉霄M窊ꁷ'鮕)䊏铨m趦䗲(g罣ЮKVﯦ鏮5囗ﰼ鿦",
+                                                                                                                                                                                                                                                                                                       -7168038789747526632,
+                                                                                                                                                                                                                                                                                                       null,
+                                                                                                                                                                                                                                                                                                       -7.8069738975270288E16,
+                                                                                                                                                                                                                                                                                                       2.25819579241348352E17,
+                                                                                                                                                                                                                                                                                                       -6.5597416611655936E18,
+                                                                                                                                                                                                                                                                                                       {
+                                                                                                                                                                                                                                                                                                        "瘕멦핓+?フZ귢z鍛V": {
+                                                                                                                                                                                                                                                                                                         "ᕾ": 1.7363275204701887E-19,
+                                                                                                                                                                                                                                                                                                         "㭌s뎹㳉": {"\u00187FI6Yf靺+UC쬸麁␲䂿긕R\\ᆮC?Φ耭\rOத际핅홦*베W㸫㯼᡹cㅜ|G㮗\u0013[o`?jHV앝?蒪꩚!퍫ᜦ㌇䚇鿘:@": [
+                                                                                                                                                                                                                                                                                                          "}푛Г콲<䟏C藐呈#2㓋#ྕ፟尿9q竓gI%랙mꍬoa睕贿J咿D_熏Zz皳験I豼B扳ḢQ≖㻹㱣D䝦練2'ᗍ㗣▌砲8罿%హF姦;0悇<\/\"p嚧",
+                                                                                                                                                                                                                                                                                                          -710184373154164247,
+                                                                                                                                                                                                                                                                                                          "Vo쫬⬾ꝫⴷŻ\u0004靎HBꅸ_aVBHbN>Z4⍜kเꛘZ⥺\\Bʫᇩ鄨魢弞&幟ᓮ2̊盜",
+                                                                                                                                                                                                                                                                                                          -9006004849098116748,
+                                                                                                                                                                                                                                                                                                          -3118404930403695681,
+                                                                                                                                                                                                                                                                                                          {
+                                                                                                                                                                                                                                                                                                           "_彃Y艘-\"Xx㤩㳷瑃?%2䐡鵛o<A?\"顜ᘌΈ;ⷅC洺L蚴蚀voq:,Oo4쪂)": 5719065258177391842,
+                                                                                                                                                                                                                                                                                                           "l륪맽耞塻論倐E㗑/㲕QM辬I\"qi酨玑㖪5q]尾魨鲡ƞY}⮯蠇%衟Fsf윔䐚찤i腳": {"ꢪ'a䣊糈": {"밑/♋S8s㼴5瓹O{댞\"9XﰇlJ近8}q{긧ⓈI᱑꿋腸D瀬H\"ﺬ'3?}\u0014#?丙㑯ᥨ圦',g鑠(樴턇?": [
+                                                                                                                                                                                                                                                                                                            2.5879275511391145E18,
+                                                                                                                                                                                                                                                                                                            null,
+                                                                                                                                                                                                                                                                                                            [
+                                                                                                                                                                                                                                                                                                             "3㼮ꔌ1Gẃ2W龙j͊{1囐㦭9x宠㑝oR䐕犽",
+                                                                                                                                                                                                                                                                                                             1268729930083267852,
+                                                                                                                                                                                                                                                                                                             "땕軚⿦7C",
+                                                                                                                                                                                                                                                                                                             [
+                                                                                                                                                                                                                                                                                                              -3.757935946502082E18,
+                                                                                                                                                                                                                                                                                                              "\"赌'糬_2뭾᝝b",
+                                                                                                                                                                                                                                                                                                              {
+                                                                                                                                                                                                                                                                                                               "(a䕎ጽjҰD4.ᴡ66ԃ畮<\/l`k癸\\㇋ࣆ욯R㫜픉녬挛;ڴ맺`.;焓q淞뮕ٹ趴r蔞ꯔ䟩v粏u5<\/pZ埖Skrvj帛=\u0005aa": null,
+                                                                                                                                                                                                                                                                                                               "璄≩ v몛ᘮ%?:1頌챀H㷪뉮k滘e": [
+                                                                                                                                                                                                                                                                                                                "ꤾ{`c샬왌펡[俊络vmz㪀悫⸹ᷥ5o'㾵 L蹦qjYIYណԠW냁剫<\/W嗂0,}",
+                                                                                                                                                                                                                                                                                                                2.4817616702666762E18,
+                                                                                                                                                                                                                                                                                                                false,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -8.6036958071260979E17,
+                                                                                                                                                                                                                                                                                                                null,
+                                                                                                                                                                                                                                                                                                                -1.2744078022652468E-19,
+                                                                                                                                                                                                                                                                                                                -4.4752020268429594E17,
+                                                                                                                                                                                                                                                                                                                1.13672865156637872E17,
+                                                                                                                                                                                                                                                                                                                [
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 false,
+                                                                                                                                                                                                                                                                                                                 null,
+                                                                                                                                                                                                                                                                                                                 -4.178004168554046E-20,
+                                                                                                                                                                                                                                                                                                                 true,
+                                                                                                                                                                                                                                                                                                                 2927542512798605527,
+                                                                                                                                                                                                                                                                                                                 {
+                                                                                                                                                                                                                                                                                                                  ".ꔓ뉤1䵬cHy汼䊆賓ᐇƩ|樷❇醎㬅4\u0003赵}#yD5膏晹뱓9ꖁ虛J㺕 t䊛膎ؤ": {
+                                                                                                                                                                                                                                                                                                                   "rVtᓸ5^`েN⹻Yv᥋lꌫt拘?<鮰넿ZC?㒽^": {"␪k_:>귵옔夘v*탋职&㳈챗|O钧": [
+                                                                                                                                                                                                                                                                                                                    false,
+                                                                                                                                                                                                                                                                                                                    "daꧺdᗹ羞쯧H㍤鄳頳<型孒ン냆㹀f4㹰\u000f|C*ሟ鰠(O<ꨭ峹ipຠ*y೧4VQ蔔hV淬{?ᵌEfrI_",
+                                                                                                                                                                                                                                                                                                                    "j;ꗣ밷邍副]ᗓ",
+                                                                                                                                                                                                                                                                                                                    -4299029053086432759,
+                                                                                                                                                                                                                                                                                                                    -5610837526958786727,
+                                                                                                                                                                                                                                                                                                                    [
+                                                                                                                                                                                                                                                                                                                     null,
+                                                                                                                                                                                                                                                                                                                     [
+                                                                                                                                                                                                                                                                                                                      -1.3958390678662759E-19,
+                                                                                                                                                                                                                                                                                                                      {
+                                                                                                                                                                                                                                                                                                                       "lh좈T_믝Y\"伨\u001cꔌG爔겕ꫳ晚踍⿻읐T䯎]~e#฽燇\"5hٔ嶰`泯r;ᗜ쮪Q):/t筑,榄&5懶뎫狝(": [{
+                                                                                                                                                                                                                                                                                                                        "2ፁⓛ]r3C攟וּ9賵s⛔6'ஂ|\"ⵈ鶆䐹禝3\"痰ࢤ霏䵩옆䌀?栕r7O簂Isd?K᫜`^讶}z8?z얰T:X倫⨎ꑹ": -6731128077618251511,
+                                                                                                                                                                                                                                                                                                                        "|︦僰~m漿햭\\Y1'Vvخ굇ቍ챢c趖": [null]
+                                                                                                                                                                                                                                                                                                                       }],
+                                                                                                                                                                                                                                                                                                                       "虌魿閆5⛔煊뎰㞤ᗴꥰF䮥蘦䂪樳-K᝷-(^\u20dd_": 2.11318679791770592E17
+                                                                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                                                                    ]
+                                                                                                                                                                                                                                                                                                                   ]},
+                                                                                                                                                                                                                                                                                                                   "묗E䀳㧯᳀逞GMc\b墹㓄끖Ơ&U??펌鑍 媋k))ᄊ": null,
+                                                                                                                                                                                                                                                                                                                   "묥7콽벼諌J_DɯﮪM殴䣏,煚ྼ`Y:씧<\/⩫%yf䦀!1Ჶk춎Q米W∠WC跉鬽*ᛱi<?,l<崣炂骵*?8푐៣ⰵ憉⎑.,Nw罣q+ο컆弎": false
+                                                                                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                                                                                  "e[|଀+lꑸ㝈TT?뿿|ꫛ9`㱯䊸楋-곳賨?쳁k棽擋wQ餈⟐Nq[q霩䵀뷮锅ꚢ": 5753148631596678144,
+                                                                                                                                                                                                                                                                                                                  "sᓝ鴻߸d렶ὕ蜗ဟ툑!诉౿": false,
+                                                                                                                                                                                                                                                                                                                  "|4䕳鵻?䈔(]틍/Ui#湻{듲ーMዀt7潔泄Ch⸨}쏣`螧銚㋼壯kⰥQ戵峉갑x辙'첛": "jd䘯$䕌茷!auw眶ㅥ䁣ꆢ民i",
+                                                                                                                                                                                                                                                                                                                  "剖駰ꞫsM2]ᾴ2ࡷ祅拌Av狔꩛'ꓗ킧ꣁ0酜✘O'": false,
+                                                                                                                                                                                                                                                                                                                  "澩뢣ꀁeU~D\\ꮡ킠": "v^YC嚈ί\u0007죋h>㴕L꘻ꀏ쓪\"_g鿄'#t⽙?,Wg㥖|D鑆e⥏쪸僬h鯔咼ඡ;4TK聎졠嫞"
+                                                                                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                                                                           ]}}
+                                                                                                                                                                                                                                                                                                          }
+                                                                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                                                                        },
+                                                                                                                                                                                                                                                                                                        "뿋뀾淣截䔲踀&XJ펖꙯^Xb訅ꫥgᬐ>棟S\"혧騾밫겁7-": "擹8C憎W\"쵮yR뢩浗絆䠣簿9䏈引Wcy䤶孖ꯥ;퐌]輩䍐3@{叝 뽸0ᡈ쵡Ⲇ\u001dL匁꧐2F~ݕ㪂@W^靽L襒ᦘ~沦zZ棸!꒲栬R"
+                                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                                                                                                     "Z:덃൛5Iz찇䅄駠㭧蓡K1": "e8᧤좱U%?ⵇ䯿鿝\u0013縮R∱骒EO\u000fg?幤@֗퉙vU`",
+                                                                                                                                                                                                                                                                                                     "䐃쪈埽້=Ij,쭗쓇చ": false
+                                                                                                                                                                                                                                                                                                    }]}}
+                                                                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                                                 ]}
+                                                                                                                                                                                                                                                                                                }
+                                                                                                                                                                                                                                                                                               ]
+                                                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                                             "咰긖VM]᝼6䓑쇎琺etDҌ?㞏ꩄ퇫밉gj8蠃\"⩐5䛹1ࣚ㵪": "ക蹊?⎲⧘⾚̀I#\"䈈⦞돷`wo窭戕෱휾䃼)앷嵃꾞稧,Ⴆ윧9S?೗EMk3Მ3+e{⹔Te驨7䵒?타Ulg悳o43"
+                                                                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                                                           "zQᤚ纂땺6#ٽ﹧v￿#ࠫ휊冟蹧텈ꃊʆ?&a䥯De潝|쿓pt瓞㭻啹^盚2Ꝋf醪,얏T窧\\Di䕎谄nn父ꋊE": -2914269627845628872,
+                                                                                                                                                                                                                                                                                           "䉩跐|㨻ᷢ㝉B{蓧瞸`I!℄욃힕#ೲᙾ竛ᔺCjk췒늕貭词\u0017署?W딚%(pꍁ⤼띳^=on뺲l䆼bzrﳨ[&j狸䠠=ᜑꦦ\u2061յnj=牲攑)M\\龏": false,
+                                                                                                                                                                                                                                                                                           "뎕y絬᫡⥮Ϙᯑ㌔/NF*˓.,QEzvK!Iwz?|쥾\"ꩻL꼗Bꔧ賴緜s뉣隤茛>ロ?(?^`>冺飒=噸泥⺭Ᲊ婓鎔븜z^坷裮êⓅ໗jM7ﶕ找\\O": 1.376745434746303E-19
+                                                                                                                                                                                                                                                                                          },
+                                                                                                                                                                                                                                                                                          "䐛r滖w㏤<k;l8ꡔጵ⮂ny辶⋃퍼僮z\"﮲X@t5෼暧퓞猋♅䦖QC鹮|픨( ,>,|Nዜ": false
+                                                                                                                                                                                                                                                                                         }
+                                                                                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                                                                                        "@꿙?薕尬 gd晆(띄5躕ﻫS蔺4)떒錸瓍?~": 1665108992286702624,
+                                                                                                                                                                                                                                                                                        "w믍nᏠ=`঺ᅥC>'從됐槷䤝眷螄㎻揰扰XᅧC贽uჍ낟jKD03T!lDV쀉Ӊy뢖,袛!终캨G?鉮Q)⑗1쾅庅O4ꁉH7?d\u0010蠈줘월ސ粯Q!낇껉6텝|{": null,
+                                                                                                                                                                                                                                                                                        "~˷jg쿤촖쉯y": -5.5527605669177098E18,
+                                                                                                                                                                                                                                                                                        "펅Wᶺzꐆと푭e?4j仪열[D<鈑皶婆䵽ehS?袪;HꍨM뗎ば[(嗏M3q퍟g4y╸鰧茀[Bi盤~﫝唎鋆彺⦊q?B4쉓癚O洙킋툈䶯_?ퟲ": null
+                                                                                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                                                                                     ]]
+                                                                                                                                                                                                                                                                                    ]],
+                                                                                                                                                                                                                                                                                    "꟱Ԕ㍤7曁聯ಃ錐V䷰?v㪃૦~K\"$%请|ꇹn\"k䫛㏨鲨\u2023䄢\u0004[<S8ᐬ뭩脥7U.m࿹:D葍┆2蘸^U'w1젅;䠆ꋪB껮>︊VJ?䶟ាꮈ䗱=깘U빩": -4863152493797013264
+                                                                                                                                                                                                                                                                                   }
+                                                                                                                                                                                                                                                                                  ]}]}
+                                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                                }}}
+                                                                                                                                                                                                                                                                               ],
+                                                                                                                                                                                                                                                                               "쏷쐲۹퉃~aE唙a챑,9㮹gLHd'䔏|킗㍞䎥&KZYT맵7䥺N<Hp4ꕭ⹠꽐c~皽z": "课|ᖾ䡁廋萄䐪W\u0016&Jn괝b~摓M>ⱳ同莞鿧w\\༌疣n/+ꎥU\"封랾○ퟙAJᭌ?9䛝$?驔9讐짘魡T֯c藳`虉C읇쐦T"
+                                                                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                                                                             ],
+                                                                                                                                                                                                                                                                             "谶개gTR￐>ၵ͚dt晑䉇陏滺}9㉸P漄": -3350307268584339381
+                                                                                                                                                                                                                                                                            }]
+                                                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                                                          ]
+                                                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                                       ],
+                                                                                                                                                                                                                                                                       "0y꟭馋X뱔瑇:䌚￐廿jg-懲鸭䷭垤㒬茭u賚찶ಽ+\\mT땱\u20821殑㐄J쩩䭛ꬿNS潔*d\\X,壠뒦e殟%LxG9:摸": 3737064585881894882,
+                                                                                                                                                                                                                                                                       "풵O^-⧧ⅶvѪ8廸鉵㈉ר↝Q㿴뺟EႳvNM:磇>w/៻唎뷭୥!냹D䯙i뵱貁C#⼉NH6`柴ʗ#\\!2䂗Ⱨf?諳.P덈-返I꘶6?8ꐘ": -8934657287877777844,
+                                                                                                                                                                                                                                                                       "溎-蘍寃i诖ര\"汵\"\ftl,?d⼡쾪⺋h匱[,෩I8MҧF{k瓿PA'橸ꩯ綷퉲翓": null
+                                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                                    ],
+                                                                                                                                                                                                                                                                    "ោ係؁<元": 1.7926963090826924E-18
+                                                                                                                                                                                                                                                                   }}]
+                                                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                                                ]]}]
+                                                                                                                                                                                                                                                               }]
+                                                                                                                                                                                                                                                              ]
+                                                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                                                            ]
+                                                                                                                                                                                                                                                           ],
+                                                                                                                                                                                                                                                           "ጩV<\"ڸsOᤘ": 2.0527167903723048E-19
+                                                                                                                                                                                                                                                          }]
+                                                                                                                                                                                                                                                         ]}
+                                                                                                                                                                                                                                                        ]
+                                                                                                                                                                                                                                                       ]],
+                                                                                                                                                                                                                                                       "∳㙰3젴p᧗䱙?`<U὇<\/意E[ᮚAj诂ᒽ阚uv徢ဎ떗尔Ᵹ훀쩑J䐴?⪏=륪ᆩ푰ஓ㐕?럽VK\"X?檨လ齿I/耉A(AWA~⏯稐蹫": false,
+                                                                                                                                                                                                                                                       "偒妝뾇}䀼链i⇃%⋜&璪Ix渥5涧qq棩ᥝ-⠫AA낇yY颕A*裦O|n?䭬혗F": null,
+                                                                                                                                                                                                                                                       "琭CL얭B혆Kॎ`鎃nrsZiժW砏)?p~K~A眱䲏QO妣\u001b\u001b]ᵆᆯ&㐋ᏹ豉뺘$ꭧ#j=C)祤⫢歑1o㒙諩": 7028426989382601021,
+                                                                                                                                                                                                                                                       "쳱冲&ဤ䌏앧h胺-齱H忱8왪RDKᅒ䬋ᔶS*J}ስ漵'㼹뮠9걢9p봋경ጕtởꚳT䶽瘙%춴`@nಆ4<d??#僜ᙤ钴=薔ꭂbLXNam蹈": "樭る蹿= Uurwkn뙧⌲%\"쑃牪\"cq윕o@",
+                                                                                                                                                                                                                                                       "溌[H]焎SLㅁ?뀼䫨災W": 1.1714289118497062E-19,
+                                                                                                                                                                                                                                                       "ﬢp븇剌燇kĔ尘㶿㴞睠꾘Ia;s❺^)$穮?sHᢥ폪l": null
+                                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                                                  },
+                                                                                                                                                                                                                                                  "TKnzj5o<\/K㊗ꗣ藠⦪駇>yZA8Ez0,^ᙛ4_0븢\u001ft:~䎼s.bb룦明yNP8弆C偯;⪾짍'蕴뮛": -6976654157771105701,
+                                                                                                                                                                                                                                                  "큵ꦀ\\㇑:nv+뒤燻䀪ﴣ﷍9ᚈ኷K㚊誦撪䚛,ꮪxሲ쳊\u0005HSf?asg昱dqꬌVꙇ㼺'k*'㈈": -5.937042203633044E-20
+                                                                                                                                                                                                                                                 }
+                                                                                                                                                                                                                                                ]
+                                                                                                                                                                                                                                               }],
+                                                                                                                                                                                                                                               "?}\u20e0],s嶳菋@#2u쒴sQS䩗=ꥮ;烌,|ꘔ䘆": "ᅩ영N璠kZ먕眻?2ቲ芋眑D륟渂⸑ﴃIRE]啗`K'"
+                                                                                                                                                                                                                                              }},
+                                                                                                                                                                                                                                              "쨀jmV賂ﰊ姐䂦玞㬙ᏪM᪟Վ씜~`uOn*ॠ8\u000ef6??\\@/?9見d筜ﳋB|S䝬葫㽁o": true
+                                                                                                                                                                                                                                             },
+                                                                                                                                                                                                                                             "즛ꄤ酳艚␂㺘봿㎨iG৕ࡿ?1\"䘓您\u001fSኝ⺿溏zៀ뻤B\u0019?윐a䳵᭱䉺膷d:<\/": 3935553551038864272
+                                                                                                                                                                                                                                            }
+                                                                                                                                                                                                                                           ]
+                                                                                                                                                                                                                                          ]}
+                                                                                                                                                                                                                                         ]]
+                                                                                                                                                                                                                                        ]]
+                                                                                                                                                                                                                                       ]}
+                                                                                                                                                                                                                                      }
+                                                                                                                                                                                                                                     ]
+                                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                                   ]]}},
+                                                                                                                                                                                                                                   "᥺3h↛!ꋰy\"攜(ெl䪕oUkc1A㘞ᡲ촾ᣫ<\/䒌E㛝潨i{v?W౾H\\RჅpz蝬R脾;v:碽✘↯삞鷱o㸧瑠jcmK7㶧뾥찲n": true,
+                                                                                                                                                                                                                                   "ⶸ?x䊺⬝-䰅≁!e쩆2ꎿ准G踌XXᩯ1߁}0?.헀Z馟;稄\baDꟹ{-寪⚈ꉷ鮸_L7ƽᾚ<\u001bጨA䧆송뇵⨔\\礍뗔d设룱㶉cq{HyぱR㥽吢ſtp": -7985372423148569301,
+                                                                                                                                                                                                                                   "緫#콮IB6<\/=5Eh礹\t8럭@饹韠r㰛斣$甝LV췐a갵'请o0g:^": "䔨(.",
+                                                                                                                                                                                                                                   "띳℡圤pン௄ĝ倧訜B쁟G䙔\"Sb⓮;$$▏S1J뢙SF|赡g*\"Vu䲌y": "䪈&틐),\\kT鬜1풥;뷴'Zေ䩹@J鞽NぼM?坥eWb6榀ƩZڮ淽⺞삳煳xჿ絯8eⶍ羷V}ჿ쎱䄫R뱃9Z>'\u20f1ⓕ䏜齮"
+                                                                                                                                                                                                                                  }
+                                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                                ]]]
+                                                                                                                                                                                                                               }}
+                                                                                                                                                                                                                              }
+                                                                                                                                                                                                                             ]
+                                                                                                                                                                                                                            ]},
+                                                                                                                                                                                                                            "펮b.h粔폯2npX詫g錰鷇㇒<쐙S値bBi@?镬矉`剔}c2壧ଭfhY깨R()痩⺃a\\⍔?M&ﯟ<劜꺄멊ᄟA\"_=": null
+                                                                                                                                                                                                                           },
+                                                                                                                                                                                                                           "~潹Rqn榢㆓aR鬨侅?䜑亡V_翅㭔(䓷w劸ၳDp䀅<\/ﰎ鶊m䵱팱긽ꆘ<tD쇋>긓准D3掱;o:_ќ)껚콥8곤d矦8nP倥ꃸI": null,
+                                                                                                                                                                                                                           "뾎/Q㣩㫸벯➡㠦◕挮a鶧⋓偼\u00001뱓fm覞n?㛅\"": 2.8515592202045408E17
+                                                                                                                                                                                                                          }],
+                                                                                                                                                                                                                          ",": -5426918750465854828,
+                                                                                                                                                                                                                          "2櫫@0柡g䢻/gꆑ6演&D稒肩Y?艘/놘p{f투`飷ᒉ챻돎<늛䘍ﴡ줰쫄": false,
+                                                                                                                                                                                                                          "8(鸑嵀⵹ퟡ<9㣎Tߗ┘d슒ل蘯&㠦뮮eࠍk砝g 엻": false,
+                                                                                                                                                                                                                          "d-\u208b?0ﳮ嵙'(J`蔿d^踅⤔榥\\J⵲v7": 6.8002426206715341E17,
+                                                                                                                                                                                                                          "ཎ耰큓ꐕ㱷\u0013y=詽I\"盈xm{0쾽倻䉚ષso#鰑/8㸴짯%ꀄ떸b츟*\\鲷礬ZQ兩?np㋄椂榨kc᡹醅3": false,
+                                                                                                                                                                                                                          "싊j20": false
+                                                                                                                                                                                                                         }]]
+                                                                                                                                                                                                                        ]],
+                                                                                                                                                                                                                        "俛\u0017n緽Tu뫉蜍鼟烬.ꭠIⰓ\"Ἀ᜾uC쎆J@古%ꛍm뻨ᾀ画蛐휃T:錖㑸ዚ9죡$": true
+                                                                                                                                                                                                                       }
+                                                                                                                                                                                                                      ]
+                                                                                                                                                                                                                     ],
+                                                                                                                                                                                                                     "㍵⇘ꦖ辈s}㱮慀밒s`\"㞟j:`i픻Z<C1衽$\"-饧?℃\u0010⼒{p飗%R\"䲔\")칀\\%": true,
+                                                                                                                                                                                                                     "苧.8\u00120ݬ仓": 6912164821255417986,
+                                                                                                                                                                                                                     "떎顣俁X;.#Q틝.笂'p쟨唒퐏랩냆¦aⱍ{谐.b我$蜑SH\u000f琾=䟼⣼奔ᜏ攕B&挰繗㝔ꅂ-Qv\\0䶝䚥ぺio[㑮-ᇼ䬰컪ṼiY){데\u0010q螰掻~\n輚x\u0014罺)軴": 3.024364150712629E-20
+                                                                                                                                                                                                                    }
+                                                                                                                                                                                                                   ]
+                                                                                                                                                                                                                  ]
+                                                                                                                                                                                                                 ]
+                                                                                                                                                                                                                ]}
+                                                                                                                                                                                                               ]]
+                                                                                                                                                                                                              }
+                                                                                                                                                                                                             ]
+                                                                                                                                                                                                            ]]
+                                                                                                                                                                                                           ]
+                                                                                                                                                                                                          ]]]],
+                                                                                                                                                                                                          "\"凲o肉Iz絾豉J8?i~傠᫽䇂!WD溊J?ᡒvs菆嵹➒淴>섫^諎0Ok{켿歁෣胰a2﨤[탳뚬쎼嫭뉮m": 409440660915023105,
+                                                                                                                                                                                                          "w墄#*ᢄ峠밮jLa`ㆪ꺊漓Lで끎!Agk'ꁛ뢃㯐岬D#㒦": false,
+                                                                                                                                                                                                          "ଦPGI䕺L몥罭ꃑ궩﮶#⮈ᢓӢ䚬p7웼臧%~S菠␌힀6&t䳙y㪘냏\\*;鉏ᅧ鿵'嗕pa\"oL쇿꬈Cg": "㶽1灸D⟸䴅ᆤ뉎﷛渤csx 䝔цꬃ锚捬?ຽ+x~꘩uI࡞\u0007栲5呚ẓem?袝\")=㥴䨃pac!/揎Y",
+                                                                                                                                                                                                          "ᷱo\\||뎂몷r篙|#X䦜I#딌媸픕叞RD斳X4t⯩夬=[뭲r=绥jh뷱츝⪘%]⚋܈㖴スH텹m(WO曝劉0~K3c柢Ր㏉着逳~": false,
+                                                                                                                                                                                                          "煽_qb[첑\\륌wE❽ZtCNﭝ+餌ᕜOꛭ": "{ﳾ쉌&s惧ᭁⵆ3䢫;䨞팑꒪흘褀࢖Q䠿V5뭀䎂澻%받u5텸oA⮥U㎦;B䳌wz䕙$ឿ\\௅婺돵⪾퐆\\`Kyौꋟ._\u0006L챯l뇠Hi䧈偒5",
+                                                                                                                                                                                                          "艊佁ࣃ롇䱠爬!*;⨣捎慓q靓|儑ᨋL+迥=6㒺딉6弄3辅J-㕎뛄듘SG㆛(\noAzQꝱ䰩X*ぢO퀌%펠낌mo틮a^<\/F&_눊ᾉ㨦ы4\"8H": 2974648459619059400,
+                                                                                                                                                                                                          "鬙@뎣䫳ၮ끡?){y?5K;TA*k溱䫜J汃ꂯ싔썍\u001dA}룖(<\/^,": false,
+                                                                                                                                                                                                          "몏@QꋦFꊩᒐ뎶lXl垨4^郣|ꮇ;䝴ᝓ}쵲z珖": null
+                                                                                                                                                                                                         }
+                                                                                                                                                                                                        ]]]],
+                                                                                                                                                                                                        ":_=닧弗D䙋暨鏛. 㱻붘䂍J儒&ZK/녩䪜r囁⽯D喠죥7⹌䪥c\u001a\u2076￞妈朹oLk菮F౟覛쐧㮏7T;}蛙2{9\"崓bB<\/⡷룀;즮鿹)丒툃୤뷠5W⊢嶜(fb뭳갣": "E{响1WM"
+                                                                                                                                                                                                       }},
+                                                                                                                                                                                                       "䘨tjJ驳豨?y輊M*᳑梵瞻઻ofQG瑮e": 2.222802939724948E-19,
+                                                                                                                                                                                                       "䮴=❑➶T෋w䞜\"垦ꃼUt\u001dx;B$뵣䙶E↌艣ᡥ!᧟;䱀[䔯k쬃`੍8饙른熏'2_'袻tGf蒭J땟as꯳╖&啒zWࡇᒫYSᏬ\u0014ℑ첥鈤|cG~Pᓮ\">\"": "ႆl\f7V儊㦬nHꄬꨧC{쐢~C⮃⛓嶦vꄎ1w鰠嘩뿠魄&\"_qMⵖ釔녮ꝇ 㝚{糍J哋 cv?-jkﻯྌ鹑L舟r",
+                                                                                                                                                                                                       "龧葆yB✱H盋夔ﶉ?n*0(": "ꧣኆ㢓氥qZZ酒ຜ)鮢樛)X䣆gTSґG텞k.J圬疝롫쯭z L:\\ྤ@w炋塜쿖ᾳy뢀䶃뱝N䥨㚔勇겁#p",
+                                                                                                                                                                                                       "도畎Q娡\"@S/뼋:䵏!P衅촚fVHQs✜ᐫi㻑殡B䜇%믚k*U#濨낄~": "ꍟዕ쳸ꍈ敋&l妏\u0005憡멗瘌uPgᅪm<\/To쯬锩h뒓k"
+                                                                                                                                                                                                      }
+                                                                                                                                                                                                     ]
+                                                                                                                                                                                                    }],
+                                                                                                                                                                                                    "墥홞r绚<\/⸹ⰃB}<躅\\Y;๑@䔸>韫䜲뱀X뗩鿥쩗SI%ﴞ㳕䛇?<\/\u00018x\\&侂9鋙a[LR㋭W胕)⡿8㞙0JF,}?허d1cDMᐃ␛鄝ⱕ%X)!XQ": "ⳍꗳ=橇a;3t⦾꼑仈ူaᚯ⯋ꕃAs鴷N⍕_䎃ꙎAz\u0016䯷\\<࿫>8q{}キ?ᣰ}'0ᴕ펓B┦lF#趤厃T?㕊#撹圂䆲"
+                                                                                                                                                                                                   },
+                                                                                                                                                                                                   "܋닐龫論c웑": false,
+                                                                                                                                                                                                   "ㇿ/q\"6-co髨휝C큦#\u001b4~?3䐹E삇<<": 7.600917488140322E-20,
+                                                                                                                                                                                                   "䁝E6?㣖ꃁ间t祗*鑠{ḣV(浾h逇큞=W?ૉ?nꇽ8ꅉຉj으쮺@Ꚅ㰤u]Oyr": "v≁᫸_*όAඤԆl)ۓᦇQ}폠z༏q滚",
+                                                                                                                                                                                                   "ソ᥊/넺I": true
+                                                                                                                                                                                                  }]]
+                                                                                                                                                                                                 ]
+                                                                                                                                                                                                ]
+                                                                                                                                                                                               ]
+                                                                                                                                                                                              ]]
+                                                                                                                                                                                             },
+                                                                                                                                                                                             "䭑Ik攑\u0002QV烄:芩.麑㟴㘨≕": true,
+                                                                                                                                                                                             "坄꿕C쇻풉~崍%碼\\8\"䬦꣙": null,
+                                                                                                                                                                                             "欌L圬䅘Y8c(♺2?ON}o椳s宥2䉀eJ%闹r冁O^K諭%凞⺉⡻,掜?$ꥉ?略焕찳㯊艼誜4?\"﯎<゛XፈINT:詓 +": -1.0750456770694562E-19,
+                                                                                                                                                                                             "獒àc뜭싼ﺳ뎤K`]p隨LtE": null,
+                                                                                                                                                                                             "甙8䵊神EIꩤ鐯ᢀ,ﵮU䝑u疒ử驺䚿≚ഋ梶秓F`覤譐#짾蔀묊4<媍쬦靪_Yzgcࡶ4k紥`kc[Lﮗ簐*I瀑[⾰L殽鑥_mGȠ<\/|囹灠g桰iri": true,
+                                                                                                                                                                                             "챓ꖙꟻ좝菇ou,嗠0\\jK핻뜠qwQ?ഩ㼕3Y彦b\u009bJ榶N棨f?됦鏖綃6鳵M[OE봨u햏.Ꮁ癜蟳뽲ꩌ뻾rM豈R嗀羫 uDꎚ%": null
+                                                                                                                                                                                            },
+                                                                                                                                                                                            "V傜2<": 7175127699521359521
+                                                                                                                                                                                           }],
+                                                                                                                                                                                           "铫aG切<\/\"ী⊆e<^g࢛)D顝nאַ饼\u008c猪繩嵿ﱚCꡬ㻊g엺A엦\u000f暿_f꿤볝㦕桦`蒦䎔j甬%岝rj 糏": "䚢偎눴Au<4箞7礦Iﱔ坠eȧ䪸u䵁p|逹$嗫쨘ꖾ﷐!胠z寓팢^㨔|u8Nሇe텔ꅦ抷]،鹎㳁#༔繁 ",
+                                                                                                                                                                                           "낂乕ꃻ볨ϱ-ꇋ㖍fs⿫)zꜦ/K?솞♞ꑌ宭hJ᤭瑥Fu": false,
+                                                                                                                                                                                           "쟰ぜ魛G\u0003u?`㾕ℾ㣭5螠烶這趩ꖢ:@咕ꐶx뒘느m䰨b痃렐0鳊喵熬딃$摉_~7*ⱦ녯1錾GKhJ惎秴6'H妈Tᧅ窹㺒疄矤铟wላ": null,
+                                                                                                                                                                                           "쯆q4!3錕㲏ⵆ㇛꘷Z瑩뭆\\◪NH\u001d\\㽰U~㯶<\"쑣낞3ᵤ'峉eꢬ;鬹o꣒木X*長PXᘱu\"䠹n惞": null,
+                                                                                                                                                                                           "ᅸ祊\"&ꥴCjࢼ﴿?䡉`U效5殼㮞V昽ꏪ#ﺸ\\&t6x꠹盥꣰a[\u001aꪍSpe鎿蠹": -1.1564713893659811E-19
+                                                                                                                                                                                          }
+                                                                                                                                                                                         ]]
+                                                                                                                                                                                        ]
+                                                                                                                                                                                       ]
+                                                                                                                                                                                      ],
+                                                                                                                                                                                      "羵䥳H,6ⱎ겾|@t\"#햊1|稃 섭)띜=뻔ꡜ???櫎~*ῡ꫌/繣ﻠq": null
+                                                                                                                                                                                     }
+                                                                                                                                                                                    ]}
+                                                                                                                                                                                   ]},
+                                                                                                                                                                                   "츤": false
+                                                                                                                                                                                  }},
+                                                                                                                                                                                  "s": 3.7339341963399598E18
+                                                                                                                                                                                 }
+                                                                                                                                                                                ],
+                                                                                                                                                                                "N,I?1+㢓|ࣱ嶃쩥V2\u0012(4EE虪朶$|w颇v步": "~읢~_,Mzr㐫YB溓E淚\"ⅹ䈔ᏺ抙 b,nt5V㐒J檶ꏨ⻔?",
+                                                                                                                                                                                "Q껑ꡡ}$넎qH煔惍/ez^!ẳF댙䝌馻剁8": "梲;yt钰$i冄}AL%a j뜐奷걳뚾d꿽*ሬuDY3?뮟鼯뮟w㍪틱V",
+                                                                                                                                                                                "o{Q/K O胟㍏zUdꀐm&⨺J舕⾏魸訟㌥[T籨櫉唐킝 aṭ뱫촙莛>碶覆⧬짙쭰ׯdAiH໥벤퐥_恸[ 0e:죃TC弼荎뵁DA:w唵ꣁ": null,
+                                                                                                                                                                                "὏樎䵮軧|?౗aWH쩃1 ꅭsu": null
+                                                                                                                                                                               }
+                                                                                                                                                                              ]
+                                                                                                                                                                             },
+                                                                                                                                                                             "勂\\&m鰈J釮=Ⲽ鳋+䂡郑": null,
+                                                                                                                                                                             "殣b綊倶5㥗惢⳷萢ᑀ䬄镧M^ﱴ3⣢翣n櫻1㨵}ኯ뗙顖Z.Q➷ꮨ뗇\u0004": "ꔙ䁼>n^[GीA䨟AM琢ᒊS쨲w?d㶣젊嘶纝麓+愣a%気ྞSc됓ᔘ:8bM7Xd8㶑臌]Ꙥ0ꐭ쒙䫣挵C薽Dfⵃ떼᷸",
+                                                                                                                                                                             "?紡.셪_෨j\u0013Ox┠$Xᶨ-ᅇo薹-}軫;y毝㪜K㣁?.EV쮱4둽⛻䤜'2盡\u001f60(|e쐰㼎ᦀ㒧-$l@ﻑ坳\u0003䭱响巗WFo5c㧆T턁Y맸♤(": -2.50917882560589088E17
+                                                                                                                                                                            }}
+                                                                                                                                                                           ],
+                                                                                                                                                                           "侸\\릩.᳠뎠狣살cs项䭩畳H1s瀉븇19?.w骴崖㤊h痠볭㞳㞳䁮Ql怠㦵": "@䟴-=7f",
+                                                                                                                                                                           "鹟1x௢+d ;vi䭴FSDS\u0004hꎹ㚍?⒍⦏ў6u,扩@됷Su)Pag휛TᒗV痩!瞏釀ꖞ蘥&ೞ蘐ꭰꞇᝎ": "ah懱Ժ&\u20f7䵅♎඀䞧鿪굛ౕ湚粎蚵ᯋ幌YOE)५襦㊝Y*^\"R+ඈ咷蝶9ꥂ榨艦멎헦閝돶v좛咊E)K㓷ྭr",
+                                                                                                                                                                           "搆q쮦4綱켙셁.f4<\/g<籽늷?#蚴픘:fF\u00051㹉뀭.ᰖ풎f֦Hv蔎㧤.!䭽=鞽]음H:?\"-4": 8.740133984938656E-20
+                                                                                                                                                                          }]}
+                                                                                                                                                                         }
+                                                                                                                                                                        ],
+                                                                                                                                                                        "tVKn딩꘥⊾蹓᤹{\u0003lR꼽ᄲQFᅏ傅ﱋ猢⤊ᔁ,E㓒秤nTතv`♛I\u0000]꫔ṞD\"麵c踝杰X&濿또꣹깳౥葂鿎\\aꡨ?": 3900062609292104525
+                                                                                                                                                                       }
+                                                                                                                                                                      ],
+                                                                                                                                                                      "ਉ샒⊩Lu@S䧰^g": -1.1487677090371648E18,
+                                                                                                                                                                      "⎢k⑊꬗yᏫ7^err糎Dt\u000bJ礯확ㆍ沑サꋽe赔㝢^J\u0004笲㿋idra剰-᪉C錇/Ĝ䂾ညS지?~콮gR敉⬹'䧭": 1901472137232418266,
+                                                                                                                                                                      "灗k䶥:?촽贍쓉꓈㒸g獘[뵎\\胕?\u0014_榙p.j稶,$`糉妋0>Fᡰly㘽$?": "]ꙛO赎&#㠃돱剳\"<◆>0誉齐_|z|裵씪>ᐌ㼍\"Z[琕}O?G뚇諦cs⠜撺5cu痑U圲\u001c?鴴計l춥/╓哼䄗茏ꮅ뫈댽A돌롖뤫V窗讬sHd&\nOi;_u"
+                                                                                                                                                                     }
+                                                                                                                                                                    ],
+                                                                                                                                                                    "Uﺗ\\Y\\梷䄬~\u0002": null,
+                                                                                                                                                                    "k\"Y磓ᗔ휎@U冈<\/w컑)[": false,
+                                                                                                                                                                    "曏J蝷⌻덦\u001f㙳s꥓⍟邫P늮쥄c∬ྡྷ舆렮칤Z趣5콡넛A쳨\\뀙骫(棻.*&輛LiIfi{@EA婳KᬰTXT": -4.3088230431977587E17
+                                                                                                                                                                   }]}
+                                                                                                                                                                  ]
+                                                                                                                                                                 ],
+                                                                                                                                                                 "곃㲧<\/dఓꂟs其ࡧ&N葶=?c㠤Ჴ'횠숄臼#\u001a~": false
+                                                                                                                                                                }
+                                                                                                                                                               ]
+                                                                                                                                                              ]}]
+                                                                                                                                                             }]
+                                                                                                                                                            }}
+                                                                                                                                                           ],
+                                                                                                                                                           "2f`⽰E쵟>J笂裭!〛觬囀ۺ쟰#桊l鹛ⲋ|RA_Vx፭gE됓h﵀mfỐ|?juTU档[d⢼⺻p濚7E峿": 5613688852456817133
+                                                                                                                                                          },
+                                                                                                                                                          "濘끶g忮7㏵殬W팕Q曁 뫰)惃廊5%-蹚zYZ樭ﴷQ锘쯤崫gg": true,
+                                                                                                                                                          "絥ᇑ⦏쒓븣爚H.㗊߄o蘵貆ꂚ(쎔O᥉ﮓ]姨Wꁓ!RMA|o퉢THx轮7M껁U즨'i뾘舯o": "跥f꜃?"
+                                                                                                                                                         }}
+                                                                                                                                                        ],
+                                                                                                                                                        "鷰鹮K-9k;ﰰ?_ݦѷ-ꅣ䩨Zꥱ\"mꠟ屎/콑Y╘2&鸞脇㏢ꀇ࠺ⰼ拾喭틮L꽩bt俸墶 [l/웄\"꾦\u20d3iও-&+\u000fQ+໱뵞": -1.296494662286671E-19
+                                                                                                                                                       },
+                                                                                                                                                       "HX੹/⨇୕붷Uﮘ旧\\쾜͔3l鄈磣糂̖䟎Eᐳw橖b῀_딕hu葰窳闹вU颵|染H죶.fP䗮:j䫢\\b뎖i燕ꜚG⮠W-≚뉗l趕": "ଊ칭Oa᡺$IV㷧L\u0019脴셀붿餲햪$迳向쐯켂PqfT\" ?I屉鴼쿕@硙z^鏕㊵M}㚛T젣쓌-W⩐-g%⺵<뮱~빅╴瑿浂脬\u0005왦燲4Ⴭb|D堧 <\/oEQh",
+                                                                                                                                                       "䘶#㥘੐캔f巋ἡAJ䢚쭈ࣨ뫒*mᇊK,ࣺAꑱ\u000bR<\/A\"1a6鵌㯀bh곿w(\"$ꘁ*rಐ趣.d࿩k/抶면䒎9W⊃9": "漩b挋Sw藎\u0000",
+                                                                                                                                                       "畀e㨼mK꙼HglKb,\"'䤜": null
+                                                                                                                                                      }]}]
+                                                                                                                                                     ]
+                                                                                                                                                    ]
+                                                                                                                                                   }]
+                                                                                                                                                  ]}
+                                                                                                                                                 ]
+                                                                                                                                                ]}
+                                                                                                                                               ],
+                                                                                                                                               "歙>駿ꣂ숰Q`J΋方樛(d鱾뼣(뫖턭\u20f9lচ9歌8o]8윶l얶?镖G摄탗6폋폵+g:䱫홊<멀뀿/س|ꭺs걐跶稚W々c㫣⎖": "㣮蔊깚Cꓔ舊|XRf遻㆚︆'쾉췝\\&言",
+                                                                                                                                               "殭\"cށɨꝙ䞘:嬮e潽Y펪㳅/\"O@ࠗ겴]췖YǞ(t>R\"N?梳LD恭=n氯T豰2R諸#N}*灧4}㶊G䍣b얚": null,
+                                                                                                                                               "襞<\/啧 B|싞W瓇)6簭鼡艆lN쩝`|펭佡\\間邝[z릶&쭟愱ꅅ\\T᰽1鯯偐栈4̸s윜R7⒝/똽?치X": "⏊躖Cﱰ2Qẫ脐&இ?%냝悊",
+                                                                                                                                               ",鰧偵셣싹xᎹ힨᯳EṬH㹖9": -4604276727380542356
+                                                                                                                                              }
+                                                                                                                                             }
+                                                                                                                                            ]]]],
+                                                                                                                                            "웺㚑xs}q䭵䪠馯8?LB犯zK'os䚛HZ\"L?셎s^㿧㴘Cv2": null
+                                                                                                                                           }]
+                                                                                                                                          ]
+                                                                                                                                         ]
+                                                                                                                                        ],
+                                                                                                                                        "Kd2Kv+|z": 7367845130646124107,
+                                                                                                                                        "ᦂⶨ?ᝢ 祂些ഷ牢㋇操\"腭䙾㖪\\(y4cE뽺ㆷ쫺ᔖ%zfۻ$ў1柦,㶢9r漢": -3.133230960444846E-20,
+                                                                                                                                        "琘M焀q%㢟f鸯O⣏蓑맕鯊$O噷|)z褫^㢦⠮ꚯ꫞`毕1qꢚ{ĭ䎀বώT\"뱘3G൴?^^of": null
+                                                                                                                                       }
+                                                                                                                                      ],
+                                                                                                                                      "a8V᯺?:ﺃ/8ꉿBq|9啓댚;*i2": null,
+                                                                                                                                      "cpT瀇H珰Ừpೃi鎪Rr␣숬-鹸ҩ䠚z脚цGoN8入y%趌I┽2ឪЀiJNcN)槣/▟6S숆牟\"箑X僛G殱娇葱T%杻:J諹昰qV쨰": 8331037591040855245
+                                                                                                                                     }],
+                                                                                                                                     "G5ᩜ䄗巢껳": true
+                                                                                                                                    }
+                                                                                                                                   },
+                                                                                                                                   "Ồ巢ゕ@_譙A`碫鄐㡥砄㠓(^K": "?܃B혢▦@犑ὺD~T⧁|醁;o=J牌9냚⢽㨘{4觍蚔9#$∺\u0016p囅\\3Xk阖⪚\"UzA穕롬✎➁㭒춺C㣌ဉ\"2瓑员ᅽꝶ뫍}꽚ꞇ鶂舟彺]ꍽJC蝧銉",
+                                                                                                                                   "␆Ě膝\"b-퉐ACR言J謈53~V튥x䜢?ꃽɄY뮩ꚜ": "K/↾e萃}]Bs⾿q룅鷦-膋?m+死^魊镲6",
+                                                                                                                                   "粡霦c枋AHퟁo礼Ke?qWcA趸㡔ꂏ?\u000e춂8iতᦜ婪\u0015㢼nﵿꍻ!ᐴ関\u001d5j㨻gfῩUK5Ju丝tかTI'?㓏t>⼟o a>i}ᰗ;뤕ܝ": false,
+                                                                                                                                   "ꄮ匴껢ꂰ涽+䜨B蛹H䛓-k蕞fu7kL谖,'涃V~챳逋穞cT\"vQ쓕ObaCRQ㓡Ⲯ?轭⫦輢墳?vA餽=h䮇킵n폲퉅喙?\"'1疬V嬗Qd灗'Lự": "6v!s믁㭟㣯獃!磸餠ቂh0C뿯봗F鷭gꖶ~コkK<ᦈTt\\跓w㭣횋钘ᆹ듡䑚W䟾X'ꅔ4FL勉Vܴ邨y)2'〚쭉⽵-鞣E,Q.?块",
+                                                                                                                                   "?(˧쩯@崟吋歄K": null
+                                                                                                                                  },
+                                                                                                                                  "Gc럃녧>?2DYI鴿\\륨)澔0ᔬlx'觔7젘⤡縷螩%Sv׫묈/]↱&S h\u0006歋ᑛxi̘}ひY蔯_醨鯘煑橾8?䵎쨋z儬ꁏ*@츾:": null
+                                                                                                                                 }
+                                                                                                                                }
+                                                                                                                               }
+                                                                                                                              ]
+                                                                                                                             ]
+                                                                                                                            ]}
+                                                                                                                           },
+                                                                                                                           "HO츧G": 3.694949578823609E17,
+                                                                                                                           "QC\u0012(翻曇Tf㷟bGBJ옉53\\嚇ᛎD/\u001b夾၉4\"핀@祎)쫆yD\"i먎Vn㿿V1W᨝䶀": -6150931500380982286,
+                                                                                                                           "Z㓮P翸鍱鉼K䋞꘺튿⭁Y": -7704503411315138850,
+                                                                                                                           "]모开ꬖP븣c霤<[3aΠ\"黁䖖䰑뮋ꤦ秽∼㑷冹T+YUt\"싳F↭䖏&鋌": -2.7231911483181824E18,
+                                                                                                                           "tꎖ": -4.9517948741799555E-19,
+                                                                                                                           "䋘즊.⬅IꬃۣQ챢ꄑ黐|f?C⾺|兕읯sC鬸섾整腨솷V": "旆柩l<K髝M戶鯮t:wR2ꉱ`9'l픪*폍芦㊢Pjjo堡^  읇얛嶅있ষ0?F",
+                                                                                                                           "下9T挞\\$yᮇk쌋⼇,ਉ": true,
+                                                                                                                           "櫨:ㆣ,邍lr崕祜㐮烜Z,XXD蕼㉴ kM꯽?P0﹉릗": null,
+                                                                                                                           "gv솠歽閘4镳䗄2澾>쪦sᖸMy㦅울썉瘗㎜檵9ꍂ駓ૉᚿ/u3씅徐拉[Z䞸ࡗ1ꆱ&Q풘?ǂ8\u0011BCDY2볨;鸏": null,
+                                                                                                                           "幫 n煥s쁇펇 왊-$C\"衝:\u0014㣯舼.3뙗Yl⋇\"K迎멎[꽵s}9鉳UK8쐥\"掄㹖h㙈!얄સ?Ꜳ봺R伕UTD媚I䜘W鏨蔮": -4.150842714188901E-17,
+                                                                                                                           "ﺯ^㄄\b죵@fྉkf颡팋Ꞧ{/Pm0V둳⻿/落韒ꊔᚬ@5螺G\\咸a谆⊪ቧ慷绖?财(鷇u錝F=r၍橢ឳn:^iᴵtD볠覅N赴": null
+                                                                                                                          }]
+                                                                                                                         }]
+                                                                                                                        }
+                                                                                                                       ]
+                                                                                                                      ]}
+                                                                                                                     ]},
+                                                                                                                     "謯?w厓奰T李헗聝ឍ貖o⪇弒L!캶$ᆅ": -4299324168507841322,
+                                                                                                                     "뺊奉_垐浸延몏孄Z舰2i$q붿좾껇d▵餏\"v暜Ҭ섁m￴g>": -1.60911932510533427E18
+                                                                                                                    }
+                                                                                                                   ]
+                                                                                                                  }
+                                                                                                                 ]
+                                                                                                                ]],
+                                                                                                                "퉝꺔㠦楶Pꅱ": 7517896876489142899,
+                                                                                                                "": false
+                                                                                                               }
+                                                                                                              ]},
+                                                                                                              "是u&I狻餼|谖j\"7c됮sסּ-踳鉷`䣷쉄_A艣鳞凃*m⯾☦椿q㎭N溔铉tlㆈ^": 1.93547720203604352E18,
+                                                                                                              "kⲨ\\%vr#\u000bⒺY\\t<\/3﬌R訤='﹠8蝤Ꞵ렴曔r": false
+                                                                                                             }
+                                                                                                            ]},
+                                                                                                            "阨{c?C\u001d~K?鎌Ԭ8烫#뙣P초遗t㭱E­돒䆺}甗[R*1!\\~h㕅᰺@<9JꏏષI䳖栭6綘걹ᅩM\"▯是∔v鬽顭⋊譬": "운ﶁK敂(欖C취پ℄爦賾"
+                                                                                                           }
+                                                                                                          }}
+                                                                                                         }],
+                                                                                                         "鷨赼鸙+\\䭣t圙ڹx᜾ČN<\/踘\"S_맶a鷺漇T彚⎲i㈥LT-xA캔$\u001cUH=a0츺l릦": "溣㣂0濕=鉵氬駘>Pꌢpb솇쬤h힊줎獪㪬CrQ矠a&脍꼬爼M茴/΅\u0017弝轼y#Ꞡc6둴=?R崏뷠麖w?"
+                                                                                                        },
+                                                                                                        "閕ᘜ]CT)䵞l9z'xZF{:ؐI/躅匽졁:䟇AGF૸\u001cퟗ9)駬慟ꡒꆒRS״툋A<>\u0010\"ꂔ炃7g덚E৏bꅰ輤]o㱏_뷕ܘ暂\"u": "芢+U^+㢩^鱆8*1鈶鮀\u0002뺰9⬳ꪮlL䃣괟,G8\u20a8DF㉪錖0ㄤ瓶8Nଷd?眡GLc陓\\_죌V쁰ल二?c띦捱 \u0019JC\u0011b⤉zẒT볕\"绣蘨뚋cꡉkI\u001e鳴",
+                                                                                                        "ꃣI'{6u^㡃#཰Kq4逹y൒䧠䵮!㱙/n??{L풓ZET㙠퍿X2᩟綳跠葿㚙w཮x캽扳B唕S|尾}촕%N?o䪨": null,
+                                                                                                        "ⰴFjෟ셈[\u0018辷px?椯\\1<ﲻ栘ᣁ봢憠뉴p": -5263694954586507640
+                                                                                                       }
+                                                                                                      ]
+                                                                                                     ]]
+                                                                                                    ]}
+                                                                                                   ]}]
+                                                                                                  ]
+                                                                                                 ],
+                                                                                                 "?#癘82禩鋆ꊝty?&": -1.9419029518535086E-19
+                                                                                                }
+                                                                                               ]
+                                                                                              ]
+                                                                                             ]}
+                                                                                            ]
+                                                                                           ]
+                                                                                          ],
+                                                                                          "훊榲.|῕戄&.㚏Zꛦ2\"䢥ሆ⤢fV_摕婔?≍Fji冀탆꜕i㏬_ẑKᅢ꫄蔻XWc|饡Siẘ^㲦?羡2ぴ1縁ᙅ?쐉Ou": false
+                                                                                         }]]
+                                                                                        ]}}},
+                                                                                        "慂뗄卓蓔ᐓ匐嚖/颹蘯/翻ㆼL?뇊,텵<\\獷ごCボ": null
+                                                                                       },
+                                                                                       "p溉ᑟi짣z:䒤棇r^٫%G9缑r砌롧.물农g?0׼ሩ4ƸO㣥㯄쩞ጩ": null,
+                                                                                       "껎繥YxK\"F젷쨹뤤1wq轫o?鱑뜀瘊?뎃h灑\\ꛣ}K峐^ኖ⤐林ꉓhy": null
+                                                                                      }
+                                                                                     ],
+                                                                                     "᱀n肓ㄛ\"堻2>m殮'1橌%Ꞵ군=Ӳ鯨9耛<\/n據0u彘8㬇៩f᏿诙]嚊": "䋯쪦S럶匏ㅛ#)O`ሀX_鐪渲⛀㨻宅闩➈ꢙஶDR⪍"
+                                                                                    },
+                                                                                    "tA썓龇 ⋥bj왎录r땽✒롰;羋^\\?툳*┎?썀ma䵳넅U䳆૘〹䆀LQ0\b疀U~u$M}(鵸g⳾i抦뛹?䤈땚검.鹆?ꩡtⶥGĒ;!ቹHS峻B츪켏f5≺": 2366175040075384032,
+                                                                                    "전pJjleb]ួ": -7.5418493141528422E18,
+                                                                                    "n.鎖ጲ\n?,$䪘": true
+                                                                                   },
+                                                                                   "欈Ar㉣螵᪚茩?O)": null
+                                                                                  },
+                                                                                  "쫸M#x}D秱欐K=侫们丐.KꕾxẠ\u001e㿯䣛F܍캗qq8꟞ṢFD훎⵳簕꭛^鳜\u205c٫~⑟~冫ऊ2쫰<\/戲윱o<\"": true
+                                                                                 },
+                                                                                 "㷝聥/T뱂\u0010锕|内䞇x侁≦㭖:M?iM᣿IJe煜dG࣯尃⚩gPt*辂.{磼럾䝪@a\\袛?}ᓺB珼": true
+                                                                                }
+                                                                               }
+                                                                              ]]}]}},
+                                                                              "tn\"6ꫤ샾䄄;銞^%VBPwu묪`Y僑N.↺Ws?3C⤻9唩S䠮ᐴm;sᇷ냞඘B/;툥B?lB∤)G+O9m裢0kC햪䪤": -4.5941249382502277E18,
+                                                                              "ᚔt'\\愫?鵀@\\びꂕP큠<<]煹G-b!S?\nꖽ鼫,ݛ&頺y踦?E揆릱H}햧캡b@手.p탻>췽㣬ꒅ`qe佭P>ᓂ&?u}毚ᜉ蟶頳졪ᎏzl2wO": -2.53561440423275936E17
+                                                                             }]}
+                                                                            }
+                                                                           ]
+                                                                          ]],
+                                                                          "潈촒⿂叡": 5495738871964062986
+                                                                         }
+                                                                        ]]
+                                                                       }
+                                                                      ]
+                                                                     ]}
+                                                                    ]]
+                                                                   ]]
+                                                                  ]}
+                                                                 ]
+                                                                ]},
+                                                                "ႁq킍蓅R`謈蟐ᦏ儂槐僻ﹶ9婌櫞釈~\"%匹躾ɢ뤥>࢟瀴愅?殕节/냔O✬H鲽엢?ᮈੁ⋧d␽㫐zCe*": 2.15062231586689536E17,
+                                                                "㶵Ui曚珰鋪ᾼ臧P{䍏䷪쨑̟A뼿T渠誈䏚D1!잶<\/㡍7?)2l≣穷᛾稝{:;㡹nemיּ訊`G": null,
+                                                                "䀕\"飕辭p圁f#뫆䶷뛮;⛴ᩍ3灚덏ᰝ쎓⦷詵%᜖Մfs⇫(\u001e~P|ﭗCⲾផv湟W첋(텪બT<บSꏉ੗⋲X婵i ӵ⇮?L䬇|ꈏ?졸": 1.548341247351782E-19
+                                                               }
+                                                              ]
+                                                             },
+                                                             "t;:N\u0015q鐦Rt缆{ꮐC?஛㷱敪\\+鲊㉫㓪몗릙竏(氵kYS": "XᰂT?൮ô",
+                                                             "碕飦幑|+ 㚦鏶`镥ꁩ B<\/加륙": -4314053432419755959,
+                                                             "秌孳(p!G?V傫%8ሽ8w;5鲗㦙LI檸\u2098": "zG N볞䆭鎍흘\\ONK3횙<\/樚立圌Q튅k쩎Ff쁋aׂJK銆ઘ즐狩6༥✙䩜篥CzP(聻駇HHퟲ讃%,ά{렍p而刲vy䦅ክ^톺M楒鍢㹳]Mdg2>䤉洞",
+                                                             "踛M젧>忔芿㌜Zk": 2215369545966507819,
+                                                             "씐A`$槭頰퍻^U覒\bG毲aᣴU;8!팲f꜇E⸃_卵{嫏羃X쀳C7뗮m(嚼u N܁谟D劯9]#": true,
+                                                             "ﻩ!뵸-筚P᭛}ἰ履lPh?౮ⶹꆛ穉뎃g萑㑓溢CX뾇G㖬A錟]RKaꄘ]Yo+@䘁's섎襠$^홰}F": null
+                                                            },
+                                                            "粘ꪒ4HXᕘ蹵.$區\r\u001d묁77pPc^y笲Q<\/ꖶ 訍䃍ᨕG?*": 1.73773035935040224E17
+                                                           },
+                                                           "婅拳?bkU;#D矠❴vVN쩆t㜷A풃갮娪a%鮏絪3dAv룒#tm쑬⌛qYwc4|L8KZ;xU⓭㳔밆拓EZ7襨eD|隰ऌ䧼u9Ԣ+]贴P荿": 2.9628516456987075E18
+                                                          }]}}]
+                                                         ]}
+                                                        }}
+                                                       ]}]
+                                                      ],
+                                                      "|g翉F*湹̶\u0005⏐1脉̀eI쩓ᖂ㫱0碞l䴨ꑅ㵽7AtἈ턧yq䳥塑:z:遀ᄐX눔擉)`N3昛oQ셖y-ڨ⾶恢ꈵq^<\/": null,
+                                                      "菹\\랓G^璬x৴뭸ゆUS겧﮷Bꮤ ┉銜᯻0%N7}~f洋坄Xꔼ<\/4妟Vꄟ9:౟곡t킅冩䧉笭裟炂4봋ⱳ叺怊t+怯涗\"0㖈Hq": false,
+                                                      "졬믟'ﺇফ圪쓬멤m邸QLব䗁愍4jvs翙 ྍ꧀艳H-|": null,
+                                                      "컮襱⣱뗠 R毪/鹙꾀%헳8&": -5770986448525107020
+                                                     }
+                                                    ],
+                                                    "B䔚bꐻ뙏姓展槰T-똌鷺tc灿᫽^㓟䏀o3o$꘭趙萬I顩)뇭Ἑ䓝\f@{ᣨ`x3蔛": null
+                                                   }
+                                                  ]
+                                                 ]
+                                                }],
+                                                "⦖扚vWꃱ꥙㾠壢輓{-⎳鹷贏璿䜑bG倛⋐磎c皇皩7a~ﳫU╣Q࠭ꎉS摅姽OW.홌ೞ.": null,
+                                                "蚪eVlH献r}ᮏ믠ﰩꔄ@瑄ⲱ": null,
+                                                "퀭$JWoꩢg역쁍䖔㑺h&ୢtXX愰㱇?㾫I_6 OaB瑈q裿": null,
+                                                "꽦ﲼLyr纛Zdu珍B絟쬴糔?㕂짹䏵e": "ḱ\u2009cX9멀i䶛簆㳀k"
+                                               }
+                                              ]]]],
+                                              "(_ꏮg່澮?ᩑyM<艷\u001aꪽ\\庼뙭Z맷㰩Vm\\lY筺]3㋲2㌩㄀Eਟ䝵⨄쐨ᔟgङHn鐖⤇놋瓇Q탚單oY\"♆臾jHᶈ征ቄ??uㇰA?#1侓": null
+                                             },
+                                             "觓^~ሢ&iI띆g륎ḱ캀.ᓡꀮ胙鈉": 1.0664523593012836E-19,
+                                             "y詭Gbᔶऽs댁U:杜⤎ϲ쁗⮼D醄诿q뙰I#즧v蔎xHᵿt᡽[**?崮耖p缫쿃L菝,봬ꤦC쯵#=X1瞻@OZc鱗CQTx": null
+                                            }
+                                           ]
+                                          }}],
+                                          "剘紁\u0004\\Xn⊠6,တױ;嵣崇}讃iႽ)d1\\䔓": null
+                                         },
+                                         "脨z\"{X,1u찜<'k&@?1}Yn$\u0015Rd輲ーa쮂굄+B$l": true,
+                                         "諳>*쭮괐䵟Ґ+<箁}빀䅱⡔檏臒hIH脟ꩪC핝ଗP좕\"0i<\/C褻D۞恗+^5?'ꂱ䚫^7}㡠cq6\\쨪ꔞꥢ?纖䫀氮蒫侲빦敶q{A煲G": -6880961710038544266
+                                        }}]
+                                       },
+                                       "5s⨲JvಽῶꭂᄢI.a৊": null,
+                                       "?1q꽏쿻ꛋDR%U娝>DgN乭G": -1.2105047302732358E-19
+                                      }
+                                     ]
+                                    ]},
+                                    "qZz`撋뙹둣j碇쁏\\ꆥ\u0018@藴疰Wz)O{F䶛l᷂绘訥$]뮍夻䢋䩇萿獰樧猵⣭j萶q)$꬚⵷0馢W:Ⱍ!Qoe": -1666634370862219540,
+                                    "t": "=wp|~碎Q鬳Ӎ\\l-<\/^ﳊhn퐖}䍔t碵ḛ혷?靻䊗",
+                                    "邙쇡㯇%#=,E4勃驆V繚q[Y댻XV㡸[逹ᰏ葢B@u=JS5?bLRn얮㍉⏅ﰳ?a6[&큟!藈": 1.2722786745736667E-19
+                                   },
+                                   "X블땨4{ph鵋ꉯ웸 5p簂䦭s_E徔濧d稝~No穔噕뽲)뉈c5M윅>⚋[岦䲟懷恁?鎐꓆ฬ爋獠䜔s{\u001bm鐚儸煛%bﯿXT>ꗘ@8G": 1157841540507770724,
+                                   "媤娪Q杸\u0011SAyᡈ쿯": true,
+                                   "灚^ಸ%걁<\/蛯<O\"-刷㏠R(kO=䢊䅎l䰓팪A絫픧": "譔\\㚄 ?R7㔪G㋉⣰渆?\\#|gN⤴;W칷A׫癮଼ೣ㏳뒜7d恓꾲0扬S0ᆵi/贎ྡn䆋武",
+                                   "萇砇Gこ朦켋Wq`㞲攊*冁~霓L剢zI腧튴T繙Cঅ뫬╈뮜ㄾ䦧촄椘B⊬츩r2f㶱厊8eϬ{挚␯OM焄覤\\(Kӡ>?\"祴坓\\\\'흍": -3.4614808555942579E18,
+                                   "釴U:O湛㴑䀣렑縓\ta)<D8ﭳ槁髭D.L|xs斋敠\"띋早7wᎍ": true,
+                                   "쵈+쬎簨up䓬?q+~\u0019仇뵈᫯3ᵣ恘枰劫㪢u珘-퀭:컙:u`⌿A(9鄦!<珚nj3:Hࣨ巋䀁旸뎈맻v\"\\(곘vO㤰aZe<\/W鹙鄜;l厮둝": null,
+                                   "": -1.2019926774977002E-18,
+                                   "%者O7.Nꪍs梇接z蕜綛<\/䜭\"죊y<曋漵@Ś⹝sD⟓jݗᢜ?z/9ၲMa쨮긗贎8ᔮ㦛;6p뾥໭䭊0B찛+)(Y㿠鸁䕒^옥": "鬃뫤&痽舎J콮藐󽸰ᨨMꈫ髿v<N\\.삒껅я1ꭼ5䴷5쳬臨wj덥"
+                                  }],
+                                  "鷎'㳗@帚妇OAj' 谬f94ǯ(횡ヒ%io쪖삐좛>(j:숾却䗌gCiB뽬Oyuq輥厁/7)?今hY︺Q": null
+                                 }
+                                ]
+                               ]]]}]
+                              ],
+                              "I笔趠Ph!<ཛྷ㸞诘X$畉F\u0005笷菟.Esr릙!W☆䲖뗷莾뒭U\"䀸犜Uo3Gꯌx4r蔇᡹㧪쨢準<䂀%ࡡꟼ瑍8炝Xs0䀝销?fi쥱ꆝલBB": -8571484181158525797,
+                              "L⦁o#J|\"⽩-㱢d㌛8d\\㶤傩儻E[Y熯)r噤὘勇 }": "e(濨쓌K䧚僒㘍蠤Vᛸ\"络QJL2,嬓왍伢㋒䴿考澰@(㏾`kX$끑эE斡,蜍&~y",
+                              "vj.|统圪ᵮPL?2oŶ`밧\"勃+0ue%⿥绬췈체$6:qa렐Q;~晘3㙘鹑": true,
+                              "ශؙ4獄⶿c︋i⚅:ん閝Ⳙ苆籦kw{䙞셕pC췃ꍬ␜꟯ꚓ酄b힝hwk꭭M鬋8B耳쑘WQ\\偙ac'唀x᪌\u2048*h짎#ፇ鮠뾏ឿ뀌": false,
+                              "⎀jꄒ牺3Ⓝ컴~?親ꕽぼܓ喏瘘!@<튋㐌꿱⩦{a?Yv%⪧笯Uܱ栅E搚i뚬:ꄃx7䙳ꦋ&䓹vq☶I䁘ᾘ涜\\썉뺌Lr%Bc㍜3?ꝭ砿裞]": null,
+                              "⭤뙓z(㡂%亳K䌽꫿AԾ岺㦦㼴輞낚Vꦴw냟鬓㹈뽈+o3譻K1잞": 2091209026076965894,
+                              "ㇲ\t⋇轑ꠤ룫X긒\"zoY읇희wj梐쐑l侸`e%s": -9.9240075473576563E17,
+                              "啸ꮑ㉰!ᚓ}銏": -4.0694813896301194E18,
+                              ">]囋੽EK뇜>_ꀣ緳碖{쐐裔[<ನ\"䇅\"5L?#xTwv#罐\u0005래t应\\N?빗;": "v쮽瞭p뭃"
+                             }
+                            ]],
+                            "斴槾?Z翁\"~慍弞ﻆ=꜡o5鐋dw\"?K蠡i샾ogDﲰ_C*⬟iㇷ4nય蟏[㟉U꽌娛苸 ঢ়操贻洞펻)쿗૊許X⨪VY츚Z䍾㶭~튃ᵦ<\/E臭tve猑x嚢": null,
+                            "锡⛩<\/칥ꈙᬙ蝀&Ꚑ籬■865?_>L詏쿨䈌浿弥爫̫lj&zx<\/C쉾?覯n?": null,
+                            "꾳鑤/꼩d=ᘈn挫ᑩ䰬ZC": "3錢爋6Ƹ䴗v⪿Wr益G韠[\u0010屗9쁡钁u?殢c䳀蓃樄욂NAq赟c튒瘁렶Aૡɚ捍"
+                           }
+                          ]
+                         ]
+                        ]}
+                       ]
+                      ]
+                     }]]]}}
+                    ]}],
+                    "Ej䗳U<\/Q=灒샎䞦,堰頠@褙g_\u0003ꤾfⶽ?퇋!łB〙ד3CC䌴鈌U:뭔咎(Qો臃䡬荋BO7㢝䟸\"Yb": 2.36010731779814E-20,
+                    "逸'0岔j\u000e눘먷翌C츊秦=ꭣ棭ှ;鳸=麱$XP⩉駚橄A\\좱⛌jqv䰞3Ь踌v㳆¹gT┌gvLB賖烡m?@E঳i": null
+                   },
+                   "曺v찘ׁ?&绫O័": 9107241066550187880
+                  }
+                 ]
+                ],
+                "(e屄\u0019昜훕琖b蓘ᬄ0/۲묇Z蘮ဏ⨏蛘胯뢃@㘉8ሪWᨮ⦬ᅳ䅴HI၇쨳z囕陻엣1赳o": true,
+                ",b刈Z,ၠ晐T솝ŕB⩆ou'퐼≃绗雗d譊": null,
+                "a唥KB\"ﳝ肕$u\n^⅄P䟼냉䞸⩪u윗瀱ꔨ#yşs꒬=1|ﲤ爢`t౐튼쳫_Az(Ṋ擬㦷좕耈6": 2099309172767331582,
+                "?㴸U<\/䢔ꯡ阽扆㐤q鐋?f㔫wM嬙-;UV죫嚔픞G&\"Cᗍ䪏풊Q": "VM7疹+陕枡툩窲}翡䖶8欞čsT뮐}璤:jﺋ鎴}HfA൝⧻Zd#Qu茅J髒皣Y-︴[?-~쉜v딏璮㹚䅊﩯<-#\u000e걀h\u0004u抱﵊㼃U<㱷⊱IC進"
+               },
+               "숌dee節鏽邺p넱蹓+e罕U": true
+              }
+             ],
+             "b⧴룏??ᔠ3ぱ>%郿劃翐ꏬꠛW瞳᫏누躨狀ໄy੽\"ីuS=㨞馸k乆E": "トz݈^9R䬑<ﮛG<s~<\/?ⵆᏥ老熷u듷"
+            }}
+           ]
+          }
+         ]}
+        }
+       }
+      }
+     }},
+     "宩j鬅쳜QꝖјy獔Z᭵1v擖}䨿F%cֲ᫺贴m塼딚NP亪\"ᅨsa뺯ꘓ2:9뛓༂쌅䊈#>Rꨳ\u000fTT泠纷꽀MR<CBxP񱒫X쇤": -2.22390568492330598E18,
+     "?䯣ᄽ@Z鸅->ᴱ纊:㠭볮?%N56%鈕1䗍䜁a䲗j陇=뿻偂衋࿘ᓸ?ᕵZ+<\/}H耢b䀁z^f$&㝒LkꢳI脚뙛u": 5.694374481577558E-20
+    }]
+   }
+  ]],
+  "obj": {"key": "wrong value"},
+  "퓲꽪m{㶩/뇿#⼢&᭙硞㪔E嚉c樱㬇1a綑᝖DḾ䝩": null
+ }
+}

+ 88 - 0
engine/source/persistence/rapidjson/bin/data/webapp.json

@@ -0,0 +1,88 @@
+{"web-app": {
+  "servlet": [   
+    {
+      "servlet-name": "cofaxCDS",
+      "servlet-class": "org.cofax.cds.CDSServlet",
+      "init-param": {
+        "configGlossary:installationAt": "Philadelphia, PA",
+        "configGlossary:adminEmail": "[email protected]",
+        "configGlossary:poweredBy": "Cofax",
+        "configGlossary:poweredByIcon": "/images/cofax.gif",
+        "configGlossary:staticPath": "/content/static",
+        "templateProcessorClass": "org.cofax.WysiwygTemplate",
+        "templateLoaderClass": "org.cofax.FilesTemplateLoader",
+        "templatePath": "templates",
+        "templateOverridePath": "",
+        "defaultListTemplate": "listTemplate.htm",
+        "defaultFileTemplate": "articleTemplate.htm",
+        "useJSP": false,
+        "jspListTemplate": "listTemplate.jsp",
+        "jspFileTemplate": "articleTemplate.jsp",
+        "cachePackageTagsTrack": 200,
+        "cachePackageTagsStore": 200,
+        "cachePackageTagsRefresh": 60,
+        "cacheTemplatesTrack": 100,
+        "cacheTemplatesStore": 50,
+        "cacheTemplatesRefresh": 15,
+        "cachePagesTrack": 200,
+        "cachePagesStore": 100,
+        "cachePagesRefresh": 10,
+        "cachePagesDirtyRead": 10,
+        "searchEngineListTemplate": "forSearchEnginesList.htm",
+        "searchEngineFileTemplate": "forSearchEngines.htm",
+        "searchEngineRobotsDb": "WEB-INF/robots.db",
+        "useDataStore": true,
+        "dataStoreClass": "org.cofax.SqlDataStore",
+        "redirectionClass": "org.cofax.SqlRedirection",
+        "dataStoreName": "cofax",
+        "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
+        "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
+        "dataStoreUser": "sa",
+        "dataStorePassword": "dataStoreTestQuery",
+        "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
+        "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
+        "dataStoreInitConns": 10,
+        "dataStoreMaxConns": 100,
+        "dataStoreConnUsageLimit": 100,
+        "dataStoreLogLevel": "debug",
+        "maxUrlLength": 500}},
+    {
+      "servlet-name": "cofaxEmail",
+      "servlet-class": "org.cofax.cds.EmailServlet",
+      "init-param": {
+      "mailHost": "mail1",
+      "mailHostOverride": "mail2"}},
+    {
+      "servlet-name": "cofaxAdmin",
+      "servlet-class": "org.cofax.cds.AdminServlet"},
+ 
+    {
+      "servlet-name": "fileServlet",
+      "servlet-class": "org.cofax.cds.FileServlet"},
+    {
+      "servlet-name": "cofaxTools",
+      "servlet-class": "org.cofax.cms.CofaxToolsServlet",
+      "init-param": {
+        "templatePath": "toolstemplates/",
+        "log": 1,
+        "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
+        "logMaxSize": "",
+        "dataLog": 1,
+        "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
+        "dataLogMaxSize": "",
+        "removePageCache": "/content/admin/remove?cache=pages&id=",
+        "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
+        "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
+        "lookInContext": 1,
+        "adminGroupID": 4,
+        "betaServer": true}}],
+  "servlet-mapping": {
+    "cofaxCDS": "/",
+    "cofaxEmail": "/cofaxutil/aemail/*",
+    "cofaxAdmin": "/admin/*",
+    "fileServlet": "/static/*",
+    "cofaxTools": "/tools/*"},
+ 
+  "taglib": {
+    "taglib-uri": "cofax.tld",
+    "taglib-location": "/WEB-INF/tlds/cofax.tld"}}}

+ 26 - 0
engine/source/persistence/rapidjson/bin/data/widget.json

@@ -0,0 +1,26 @@
+{"widget": {
+    "debug": "on",
+    "window": {
+        "title": "Sample Konfabulator Widget",
+        "name": "main_window",
+        "width": 500,
+        "height": 500
+    },
+    "image": { 
+        "src": "Images/Sun.png",
+        "name": "sun1",
+        "hOffset": 250,
+        "vOffset": 250,
+        "alignment": "center"
+    },
+    "text": {
+        "data": "Click Here",
+        "size": 36,
+        "style": "bold",
+        "name": "text1",
+        "hOffset": 250,
+        "vOffset": 100,
+        "alignment": "center",
+        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
+    }
+}}

BIN
engine/source/persistence/rapidjson/bin/encodings/utf16be.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf16bebom.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf16le.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf16lebom.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32be.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32bebom.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32le.json


BIN
engine/source/persistence/rapidjson/bin/encodings/utf32lebom.json


+ 7 - 0
engine/source/persistence/rapidjson/bin/encodings/utf8.json

@@ -0,0 +1,7 @@
+{
+	"en":"I can eat glass and it doesn't hurt me.",
+	"zh-Hant":"我能吞下玻璃而不傷身體。",
+	"zh-Hans":"我能吞下玻璃而不伤身体。",
+	"ja":"私はガラスを食べられます。それは私を傷つけません。",
+	"ko":"나는 유리를 먹을 수 있어요. 그래도 아프지 않아요"
+}

+ 7 - 0
engine/source/persistence/rapidjson/bin/encodings/utf8bom.json

@@ -0,0 +1,7 @@
+{
+	"en":"I can eat glass and it doesn't hurt me.",
+	"zh-Hant":"我能吞下玻璃而不傷身體。",
+	"zh-Hans":"我能吞下玻璃而不伤身体。",
+	"ja":"私はガラスを食べられます。それは私を傷つけません。",
+	"ko":"나는 유리를 먹을 수 있어요. 그래도 아프지 않아요"
+}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail1.json

@@ -0,0 +1 @@
+"A JSON payload should be an object or array, not a string."

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail10.json

@@ -0,0 +1 @@
+{"Extra value after close": true} "misplaced quoted value"

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail11.json

@@ -0,0 +1 @@
+{"Illegal expression": 1 + 2}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail12.json

@@ -0,0 +1 @@
+{"Illegal invocation": alert()}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail13.json

@@ -0,0 +1 @@
+{"Numbers cannot have leading zeroes": 013}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail14.json

@@ -0,0 +1 @@
+{"Numbers cannot be hex": 0x14}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail15.json

@@ -0,0 +1 @@
+["Illegal backslash escape: \x15"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail16.json

@@ -0,0 +1 @@
+[\naked]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail17.json

@@ -0,0 +1 @@
+["Illegal backslash escape: \017"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail18.json

@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail19.json

@@ -0,0 +1 @@
+{"Missing colon" null}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail2.json

@@ -0,0 +1 @@
+["Unclosed array"

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail20.json

@@ -0,0 +1 @@
+{"Double colon":: null}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail21.json

@@ -0,0 +1 @@
+{"Comma instead of colon", null}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail22.json

@@ -0,0 +1 @@
+["Colon instead of comma": false]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail23.json

@@ -0,0 +1 @@
+["Bad value", truth]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail24.json

@@ -0,0 +1 @@
+['single quote']

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail25.json

@@ -0,0 +1 @@
+["	tab	character	in	string	"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail26.json

@@ -0,0 +1 @@
+["tab\   character\   in\  string\  "]

+ 2 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail27.json

@@ -0,0 +1,2 @@
+["line
+break"]

+ 2 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail28.json

@@ -0,0 +1,2 @@
+["line\
+break"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail29.json

@@ -0,0 +1 @@
+[0e]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail3.json

@@ -0,0 +1 @@
+{unquoted_key: "keys must be quoted"}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail30.json

@@ -0,0 +1 @@
+[0e+]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail31.json

@@ -0,0 +1 @@
+[0e+-1]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail32.json

@@ -0,0 +1 @@
+{"Comma instead if closing brace": true,

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail33.json

@@ -0,0 +1 @@
+["mismatch"}

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail4.json

@@ -0,0 +1 @@
+["extra comma",]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail5.json

@@ -0,0 +1 @@
+["double extra comma",,]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail6.json

@@ -0,0 +1 @@
+[   , "<-- missing value"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail7.json

@@ -0,0 +1 @@
+["Comma after the close"],

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail8.json

@@ -0,0 +1 @@
+["Extra close"]]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/fail9.json

@@ -0,0 +1 @@
+{"Extra comma": true,}

+ 58 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/pass1.json

@@ -0,0 +1,58 @@
+[
+    "JSON Test Pattern pass1",
+    {"object with 1 member":["array with 1 element"]},
+    {},
+    [],
+    -42,
+    true,
+    false,
+    null,
+    {
+        "integer": 1234567890,
+        "real": -9876.543210,
+        "e": 0.123456789e-12,
+        "E": 1.234567890E+34,
+        "":  23456789012E66,
+        "zero": 0,
+        "one": 1,
+        "space": " ",
+        "quote": "\"",
+        "backslash": "\\",
+        "controls": "\b\f\n\r\t",
+        "slash": "/ & \/",
+        "alpha": "abcdefghijklmnopqrstuvwyz",
+        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+        "digit": "0123456789",
+        "0123456789": "digit",
+        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+        "true": true,
+        "false": false,
+        "null": null,
+        "array":[  ],
+        "object":{  },
+        "address": "50 St. James Street",
+        "url": "http://www.JSON.org/",
+        "comment": "// /* <!-- --",
+        "# -- --> */": " ",
+        " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5        ,          6           ,7        ],"compact":[1,2,3,4,5,6,7],
+        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+        "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+    },
+    0.5 ,98.6
+,
+99.44
+,
+
+1066,
+1e1,
+0.1e1,
+1e-1,
+1e00,2e+00,2e-00
+,"rosebud"]

+ 1 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/pass2.json

@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]

+ 6 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/pass3.json

@@ -0,0 +1,6 @@
+{
+    "JSON Test Pattern pass3": {
+        "The outermost value": "must be an object or array.",
+        "In this test": "It is an object."
+    }
+}

+ 3 - 0
engine/source/persistence/rapidjson/bin/jsonchecker/readme.txt

@@ -0,0 +1,3 @@
+Test suite from http://json.org/JSON_checker/.
+
+If the JSON_checker is working correctly, it must accept all of the pass*.json files and reject all of the fail*.json files.

+ 1789 - 0
engine/source/persistence/rapidjson/build/Doxyfile

@@ -0,0 +1,1789 @@
+# Doxyfile 1.7.5.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should 
+# identify the project. Note that if you do not use Doxywizard you need 
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = rapidjson
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description 
+# for a project that appears at the top of each page and should give viewer 
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "A fast JSON parser/generator for C++ with both SAX/DOM style API"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is 
+# included in the documentation. The maximum height of the logo should not 
+# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given extension. 
+# Doxygen has a built-in mapping, but you can override or extend it using this 
+# tag. The format is ext=language, where ext is a file extension, and language 
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
+# unions are shown inside the group in which they are included (e.g. using 
+# @ingroup) instead of on a separate page (for HTML and Man pages) or 
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = YES
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
+# unions with only public data fields will be shown inline in the documentation 
+# of the scope in which they are defined (i.e. file, namespace, or group 
+# documentation), provided this scope is documented. If set to NO (the default), 
+# structs, classes, and unions are shown on a separate page (for HTML and Man 
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penalty. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will roughly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+# do proper type resolution of all parameters of a function it will reject a 
+# match between the prototype and the implementation of a member function even 
+# if there is only one candidate or it is obvious which candidate to choose 
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. The create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files 
+# containing the references data. This must be a list of .bib files. The 
+# .bib extension is automatically appended if omitted. Using this command 
+# requires the bibtex tool to be installed. See also 
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
+# of the bibliography can be controlled using LATEX_BIB_STYLE.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../include/
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.for \
+                         *.vhd \
+                         *.vhdl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag. 
+# Note that relative paths are relative to directory from which doxygen is run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix file system feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty or if 
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
+# and it is also possible to disable source filtering for a specific pattern 
+# using *.ext= (so without naming a filter). This option only has effect when 
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS = 
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header. Note that when using a custom header you are responsible  
+# for the proper inclusion of any scripts and style sheets that doxygen 
+# needs, which is dependent on the configuration options used. 
+# It is adviced to generate a default header using "doxygen -w html 
+# header.html footer.html stylesheet.css YourConfigFile" and then modify 
+# that header. Note that the header is subject to change so you typically 
+# have to redo this when upgrading to a newer version of doxygen or when 
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
+# other source files which should be copied to the HTML output directory. Note 
+# that these files will be copied to the base HTML output directory. Use the 
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the stylesheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
+# the documentation publisher. This should be a reverse domain-name style 
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
+# documentation. Note that a value of 0 will completely suppress the enum 
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the 
+# mathjax.org site, so you can quickly see the result without installing 
+# MathJax, but it is strongly recommended to install a local copy of MathJax 
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     = 
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a PHP enabled web server instead of at the web client 
+# using Javascript. Doxygen will generate the search PHP script and index 
+# file to put on the web server. The advantage of the server 
+# based approach is that it scales better to large projects and allows 
+# full text search. The disadvantages are that it is more difficult to setup 
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
+# the generated latex document. The footer should contain everything after 
+# the last chapter. If it is left blank doxygen will generate a 
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition that 
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all references to function-like macros 
+# that are alone on a line, have an all uppercase name, and do not end with a 
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links. 
+# Note that each tag file must have a unique name 
+# (where the name does NOT include the path) 
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that 
+# doxygen generates. When you want a differently looking font you can specify 
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find 
+# the font, which can be done by putting it in a standard location or by setting 
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font. 
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
+# set the path where dot can find it.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are svg, png, jpg, or gif. 
+# If left blank png will be used. If you choose svg you need to set 
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
+# enable generation of interactive SVG images that allow zooming and panning. 
+# Note that this requires a modern browser other than Internet Explorer. 
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES

+ 4 - 0
engine/source/persistence/rapidjson/build/premake

@@ -0,0 +1,4 @@
+premake4 vs2005
+premake4 vs2008
+premake4 vs2010
+premake4 gmake

+ 5 - 0
engine/source/persistence/rapidjson/build/premake.bat

@@ -0,0 +1,5 @@
+@echo off
+premake4 vs2005
+premake4 vs2008
+premake4 vs2010
+premake4 gmake

+ 175 - 0
engine/source/persistence/rapidjson/build/premake4.lua

@@ -0,0 +1,175 @@
+function setTargetObjDir(outDir)
+	for _, cfg in ipairs(configurations()) do
+		for _, plat in ipairs(platforms()) do
+			local action = _ACTION or ""
+			
+			local prj = project()
+			
+			--"_debug_win32_vs2008"
+			local suffix = "_" .. cfg .. "_" .. plat .. "_" .. action
+			
+			targetPath = outDir
+			
+			suffix = string.lower(suffix)
+
+			local obj_path = "../intermediate/" .. cfg .. "/" .. action .. "/" .. prj.name
+			
+			obj_path = string.lower(obj_path)
+			
+			configuration {cfg, plat}
+				targetdir(targetPath)
+				objdir(obj_path)
+				targetsuffix(suffix)
+		end
+	end
+end
+
+function linkLib(libBaseName)
+	for _, cfg in ipairs(configurations()) do
+		for _, plat in ipairs(platforms()) do
+			local action = _ACTION or ""
+			
+			local prj = project()
+			
+			local cfgName = cfg
+			
+			--"_debug_win32_vs2008"
+			local suffix = "_" .. cfgName .. "_" .. plat .. "_" .. action
+			
+			libFullName = libBaseName .. string.lower(suffix)
+			
+			configuration {cfg, plat}
+				links(libFullName)
+		end
+	end
+end
+
+solution "test"
+	configurations { "debug", "release" }
+	platforms { "x32", "x64" }
+
+	location ("./" .. (_ACTION or ""))
+	language "C++"
+	flags { "ExtraWarnings" }
+	
+	configuration "debug"
+		defines { "DEBUG" }
+		flags { "Symbols" }
+
+	configuration "release"
+		defines { "NDEBUG" }
+		flags { "Optimize" }
+
+	configuration "vs*"
+		defines { "_CRT_SECURE_NO_WARNINGS" }
+		
+	configuration "gmake"
+		buildoptions "-msse4.2 -Werror=cast-qual"
+
+	project "gtest"
+		kind "StaticLib"
+		
+		defines { "GTEST_HAS_PTHREAD=0" }
+
+		files { 
+			"../thirdparty/gtest/src/gtest-all.cc",
+			"../thirdparty/gtest/src/**.h",
+		}
+
+		includedirs {
+			"../thirdparty/gtest/",
+			"../thirdparty/gtest/include",
+		}
+
+		setTargetObjDir("../thirdparty/lib")
+
+	project "unittest"
+		kind "ConsoleApp"
+		
+		files { 
+			"../include/**.h",
+			"../test/unittest/**.cpp",
+			"../test/unittest/**.h",
+		}
+		
+		includedirs {
+			"../include/",
+			"../thirdparty/gtest/include/",
+		}
+
+		libdirs "../thirdparty/lib"
+
+		setTargetObjDir("../bin")
+
+		linkLib "gtest"
+		links "gtest"
+		
+	project "perftest"
+		kind "ConsoleApp"
+		
+		files { 
+			"../include/**.h",
+			"../test/perftest/**.cpp",
+			"../test/perftest/**.c",
+			"../test/perftest/**.h",
+		}
+		
+		includedirs {
+			"../include/",
+			"../thirdparty/gtest/include/",
+			"../thirdparty/",
+			"../thirdparty/jsoncpp/include/",
+			"../thirdparty/libjson/",
+			"../thirdparty/yajl/include/",
+		}
+
+		libdirs "../thirdparty/lib"
+
+		setTargetObjDir("../bin")
+
+		linkLib "gtest"
+		links "gtest"
+
+solution "example"
+	configurations { "debug", "release" }
+	platforms { "x32", "x64" }
+	location ("./" .. (_ACTION or ""))
+	language "C++"
+	flags { "ExtraWarnings" }
+	includedirs "../include/"
+
+	configuration "debug"
+		defines { "DEBUG" }
+		flags { "Symbols" }
+
+	configuration "release"
+		defines { "NDEBUG" }
+		flags { "Optimize", "EnableSSE2" }
+
+	configuration "vs*"
+		defines { "_CRT_SECURE_NO_WARNINGS" }
+
+	project "condense"
+		kind "ConsoleApp"
+		files "../example/condense/*"
+		setTargetObjDir("../bin")
+
+	project "pretty"
+		kind "ConsoleApp"
+		files "../example/pretty/*"
+		setTargetObjDir("../bin")
+
+	project "prettyauto"
+		kind "ConsoleApp"
+		files "../example/prettyauto/*"
+		setTargetObjDir("../bin")
+
+	project "tutorial"
+		kind "ConsoleApp"
+		files "../example/tutorial/*"
+		setTargetObjDir("../bin")
+
+	project "serialize"
+		kind "ConsoleApp"
+		files "../example/serialize/*"
+		setTargetObjDir("../bin")

+ 31 - 0
engine/source/persistence/rapidjson/example/condense/condense.cpp

@@ -0,0 +1,31 @@
+// JSON condenser exmaple
+
+// This example parses JSON text from stdin with validation, 
+// and re-output the JSON content to stdout without whitespace.
+
+#include "rapidjson/reader.h"
+#include "rapidjson/writer.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+	// Prepare JSON reader and input stream.
+	Reader reader;
+	char readBuffer[65536];
+	FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
+
+	// Prepare JSON writer and output stream.
+	char writeBuffer[65536];
+	FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
+	Writer<FileWriteStream> writer(os);
+
+	// JSON reader parse from the input stream and let writer generate the output.
+	if (!reader.Parse<0>(is, writer)) {
+		fprintf(stderr, "\nError(%u): %s\n", (unsigned)reader.GetErrorOffset(), reader.GetParseError());
+		return 1;
+	}
+
+	return 0;
+}

+ 29 - 0
engine/source/persistence/rapidjson/example/pretty/pretty.cpp

@@ -0,0 +1,29 @@
+// JSON pretty formatting example
+// This example can only handle UTF-8. For handling other encodings, see prettyauto example.
+
+#include "rapidjson/reader.h"
+#include "rapidjson/prettywriter.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+	// Prepare reader and input stream.
+	Reader reader;
+	char readBuffer[65536];
+	FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
+
+	// Prepare writer and output stream.
+	char writeBuffer[65536];
+	FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
+	PrettyWriter<FileWriteStream> writer(os);
+
+	// JSON reader parse from the input stream and let writer generate the output.
+	if (!reader.Parse<kParseValidateEncodingFlag>(is, writer)) {
+		fprintf(stderr, "\nError(%u): %s\n", (unsigned)reader.GetErrorOffset(), reader.GetParseError());
+		return 1;
+	}
+
+	return 0;
+}

+ 55 - 0
engine/source/persistence/rapidjson/example/prettyauto/prettyauto.cpp

@@ -0,0 +1,55 @@
+// JSON pretty formatting example
+// This example can handle UTF-8/UTF-16LE/UTF-16BE/UTF-32LE/UTF-32BE.
+// The input firstly convert to UTF8, and then write to the original encoding with pretty formatting.
+
+#include "rapidjson/reader.h"
+#include "rapidjson/prettywriter.h"
+#include "rapidjson/filereadstream.h"
+#include "rapidjson/filewritestream.h"
+#include "rapidjson/encodedstream.h"	// NEW
+#ifdef _WIN32
+#include <fcntl.h>
+#include <io.h>
+#endif
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+#ifdef _WIN32
+	// Prevent Windows converting between CR+LF and LF
+	_setmode(_fileno(stdin), _O_BINARY);	// NEW
+	_setmode(_fileno(stdout), _O_BINARY);	// NEW
+#endif
+
+	// Prepare reader and input stream.
+	//Reader reader;
+	GenericReader<AutoUTF<unsigned>, UTF8<> > reader;		// CHANGED
+	char readBuffer[65536];
+	FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
+	AutoUTFInputStream<unsigned, FileReadStream> eis(is);	// NEW
+
+	// Prepare writer and output stream.
+	char writeBuffer[65536];
+	FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
+
+#if 1
+	// Use the same Encoding of the input. Also use BOM according to input.
+	typedef AutoUTFOutputStream<unsigned, FileWriteStream> OutputStream;	// NEW
+	OutputStream eos(os, eis.GetType(), eis.HasBOM());						// NEW
+	PrettyWriter<OutputStream, UTF8<>, AutoUTF<unsigned> > writer(eos);		// CHANGED
+#else
+	// You may also use static bound encoding type, such as output to UTF-16LE with BOM
+	typedef EncodedOutputStream<UTF16LE<>,FileWriteStream> OutputStream;	// NEW
+	OutputStream eos(os, true);												// NEW
+	PrettyWriter<OutputStream, UTF8<>, UTF16LE<> > writer(eos);				// CHANGED
+#endif
+
+	// JSON reader parse from the input stream and let writer generate the output.
+	//if (!reader.Parse<kParseValidateEncodingFlag>(is, writer)) {
+	if (!reader.Parse<kParseValidateEncodingFlag>(eis, writer)) {	// CHANGED
+		fprintf(stderr, "\nError(%u): %s\n", (unsigned)reader.GetErrorOffset(), reader.GetParseError());
+		return 1;
+	}
+
+	return 0;
+}

+ 129 - 0
engine/source/persistence/rapidjson/example/serialize/serialize.cpp

@@ -0,0 +1,129 @@
+// Serialize example
+// This example shows writing JSON string with writer directly.
+
+#include "rapidjson/prettywriter.h"	// for stringify JSON
+#include "rapidjson/filestream.h"	// wrapper of C stream for prettywriter as output
+#include <cstdio>
+#include <string>
+#include <vector>
+
+using namespace rapidjson;
+
+class Person {
+public:
+	Person(const std::string& name, unsigned age) : name_(name), age_(age) {}
+	virtual ~Person() {}
+
+protected:
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		// This base class just write out name-value pairs, without wrapping within an object.
+		writer.String("name");
+		writer.String(name_.c_str(), (SizeType)name_.length());	// Suppling length of string is faster.
+
+		writer.String("age");
+		writer.Uint(age_);
+	}
+
+private:
+	std::string name_;
+	unsigned age_;
+};
+
+class Education {
+public:
+	Education(const std::string& school, double GPA) : school_(school), GPA_(GPA) {}
+
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		writer.StartObject();
+		
+		writer.String("school");
+		writer.String(school_.c_str(), (SizeType)school_.length());
+
+		writer.String("GPA");
+		writer.Double(GPA_);
+
+		writer.EndObject();
+	}
+
+private:
+	std::string school_;
+	double GPA_;
+};
+
+class Dependent : public Person {
+public:
+	Dependent(const std::string& name, unsigned age, Education* education = 0) : Person(name, age), education_(education) {}
+	Dependent(const Dependent& rhs) : Person(rhs) { education_ = (rhs.education_ == 0) ? 0 : new Education(*rhs.education_); }
+	~Dependent() { delete education_; }
+
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		writer.StartObject();
+
+		Person::Serialize(writer);
+
+		writer.String("education");
+		if (education_)
+			education_->Serialize(writer);
+		else
+			writer.Null();
+
+		writer.EndObject();
+	}
+
+private:
+	Education *education_;
+};
+
+class Employee : public Person {
+public:
+	Employee(const std::string& name, unsigned age, bool married) : Person(name, age), married_(married) {}
+
+	void AddDependent(const Dependent& dependent) {
+		dependents_.push_back(dependent);
+	}
+
+	template <typename Writer>
+	void Serialize(Writer& writer) const {
+		writer.StartObject();
+
+		Person::Serialize(writer);
+
+		writer.String("married");
+		writer.Bool(married_);
+
+		writer.String(("dependents"));
+		writer.StartArray();
+		for (std::vector<Dependent>::const_iterator dependentItr = dependents_.begin(); dependentItr != dependents_.end(); ++dependentItr)
+			dependentItr->Serialize(writer);
+		writer.EndArray();
+
+		writer.EndObject();
+	}
+
+private:
+	bool married_;
+	std::vector<Dependent> dependents_;
+};
+
+int main(int, char*[]) {
+	std::vector<Employee> employees;
+
+	employees.push_back(Employee("Milo YIP", 34, true));
+	employees.back().AddDependent(Dependent("Lua YIP", 3, new Education("Happy Kindergarten", 3.5)));
+	employees.back().AddDependent(Dependent("Mio YIP", 1));
+
+	employees.push_back(Employee("Percy TSE", 30, false));
+
+	FileStream s(stdout);
+	PrettyWriter<FileStream> writer(s);		// Can also use Writer for condensed formatting
+
+	writer.StartArray();
+	for (std::vector<Employee>::const_iterator employeeItr = employees.begin(); employeeItr != employees.end(); ++employeeItr)
+		employeeItr->Serialize(writer);
+	writer.EndArray();
+
+	return 0;
+}

+ 154 - 0
engine/source/persistence/rapidjson/example/tutorial/tutorial.cpp

@@ -0,0 +1,154 @@
+// Hello World example
+// This example shows basic usage of DOM-style API.
+
+#include "rapidjson/document.h"		// rapidjson's DOM-style API
+#include "rapidjson/prettywriter.h"	// for stringify JSON
+#include "rapidjson/filestream.h"	// wrapper of C stream for prettywriter as output
+#include <cstdio>
+
+using namespace rapidjson;
+
+int main(int, char*[]) {
+	////////////////////////////////////////////////////////////////////////////
+	// 1. Parse a JSON text string to a document.
+
+	const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
+	printf("Original JSON:\n %s\n", json);
+
+	Document document;	// Default template parameter uses UTF8 and MemoryPoolAllocator.
+
+#if 0
+	// "normal" parsing, decode strings to new buffers. Can use other input stream via ParseStream().
+	if (document.Parse<0>(json).HasParseError())
+		return 1;
+#else
+	// In-situ parsing, decode strings directly in the source string. Source must be string.
+	char buffer[sizeof(json)];
+	memcpy(buffer, json, sizeof(json));
+	if (document.ParseInsitu<0>(buffer).HasParseError())
+		return 1;
+#endif
+
+	printf("\nParsing to document succeeded.\n");
+
+	////////////////////////////////////////////////////////////////////////////
+	// 2. Access values in document. 
+
+	printf("\nAccess values in document:\n");
+	assert(document.IsObject());	// Document is a JSON value represents the root of DOM. Root can be either an object or array.
+
+	assert(document.HasMember("hello"));
+	assert(document["hello"].IsString());
+	printf("hello = %s\n", document["hello"].GetString());
+
+	// Since version 0.2, you can use single lookup to check the existing of member and its value:
+	Value::Member* hello = document.FindMember("hello");
+	assert(hello != 0);
+	assert(hello->value.IsString());
+	assert(strcmp("world", hello->value.GetString()) == 0);
+	(void)hello;
+
+	assert(document["t"].IsBool());		// JSON true/false are bool. Can also uses more specific function IsTrue().
+	printf("t = %s\n", document["t"].GetBool() ? "true" : "false");
+
+	assert(document["f"].IsBool());
+	printf("f = %s\n", document["f"].GetBool() ? "true" : "false");
+
+	printf("n = %s\n", document["n"].IsNull() ? "null" : "?");
+
+	assert(document["i"].IsNumber());	// Number is a JSON type, but C++ needs more specific type.
+	assert(document["i"].IsInt());		// In this case, IsUint()/IsInt64()/IsUInt64() also return true.
+	printf("i = %d\n", document["i"].GetInt());	// Alternative (int)document["i"]
+
+	assert(document["pi"].IsNumber());
+	assert(document["pi"].IsDouble());
+	printf("pi = %g\n", document["pi"].GetDouble());
+
+	{
+		const Value& a = document["a"];	// Using a reference for consecutive access is handy and faster.
+		assert(a.IsArray());
+		for (SizeType i = 0; i < a.Size(); i++)	// rapidjson uses SizeType instead of size_t.
+			printf("a[%d] = %d\n", i, a[i].GetInt());
+		
+		// Note:
+		//int x = a[0].GetInt();					// Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type.
+		int y = a[SizeType(0)].GetInt();			// Cast to SizeType will work.
+		int z = a[0u].GetInt();						// This works too.
+		(void)y;
+		(void)z;
+
+		// Iterating array with iterators
+		printf("a = ");
+		for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
+			printf("%d ", itr->GetInt());
+		printf("\n");
+	}
+
+	// Iterating object members
+	static const char* kTypeNames[] = { "Null", "False", "True", "Object", "Array", "String", "Number" };
+	for (Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr)
+		printf("Type of member %s is %s\n", itr->name.GetString(), kTypeNames[itr->value.GetType()]);
+
+	////////////////////////////////////////////////////////////////////////////
+	// 3. Modify values in document.
+
+	// Change i to a bigger number
+	{
+		uint64_t f20 = 1;	// compute factorial of 20
+		for (uint64_t j = 1; j <= 20; j++)
+			f20 *= j;
+		document["i"] = f20;	// Alternate form: document["i"].SetUint64(f20)
+		assert(!document["i"].IsInt());	// No longer can be cast as int or uint.
+	}
+
+	// Adding values to array.
+	{
+		Value& a = document["a"];	// This time we uses non-const reference.
+		Document::AllocatorType& allocator = document.GetAllocator();
+		for (int i = 5; i <= 10; i++)
+			a.PushBack(i, allocator);	// May look a bit strange, allocator is needed for potentially realloc. We normally uses the document's.
+
+		// Fluent API
+		a.PushBack("Lua", allocator).PushBack("Mio", allocator);
+	}
+
+	// Making string values.
+
+	// This version of SetString() just store the pointer to the string.
+	// So it is for literal and string that exists within value's life-cycle.
+	{
+		document["hello"] = "rapidjson";	// This will invoke strlen()
+		// Faster version:
+		// document["hello"].SetString("rapidjson", 9);
+	}
+
+	// This version of SetString() needs an allocator, which means it will allocate a new buffer and copy the the string into the buffer.
+	Value author;
+	{
+		char buffer[10];
+		int len = sprintf(buffer, "%s %s", "Milo", "Yip");	// synthetic example of dynamically created string.
+
+		author.SetString(buffer, len, document.GetAllocator());
+		// Shorter but slower version:
+		// document["hello"].SetString(buffer, document.GetAllocator());
+
+		// Constructor version: 
+		// Value author(buffer, len, document.GetAllocator());
+		// Value author(buffer, document.GetAllocator());
+		memset(buffer, 0, sizeof(buffer)); // For demonstration purpose.
+	}
+	// Variable 'buffer' is unusable now but 'author' has already made a copy.
+	document.AddMember("author", author, document.GetAllocator());
+
+	assert(author.IsNull());		// Move semantic for assignment. After this variable is assigned as a member, the variable becomes null.
+
+	////////////////////////////////////////////////////////////////////////////
+	// 4. Stringify JSON
+
+	printf("\nModified JSON with reformatting:\n");
+	FileStream f(stdout);
+	PrettyWriter<FileStream> writer(f);
+	document.Accept(writer);	// Accept() traverses the DOM and generates Handler events.
+
+	return 0;
+}

+ 221 - 0
engine/source/persistence/rapidjson/include/rapidjson/allocators.h

@@ -0,0 +1,221 @@
+#ifndef RAPIDJSON_ALLOCATORS_H_
+#define RAPIDJSON_ALLOCATORS_H_
+
+#include "rapidjson.h"
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// Allocator
+
+/*! \class rapidjson::Allocator
+	\brief Concept for allocating, resizing and freeing memory block.
+	
+	Note that Malloc() and Realloc() are non-static but Free() is static.
+	
+	So if an allocator need to support Free(), it needs to put its pointer in 
+	the header of memory block.
+
+\code
+concept Allocator {
+	static const bool kNeedFree;	//!< Whether this allocator needs to call Free().
+
+	// Allocate a memory block.
+	// \param size of the memory block in bytes.
+	// \returns pointer to the memory block.
+	void* Malloc(size_t size);
+
+	// Resize a memory block.
+	// \param originalPtr The pointer to current memory block. Null pointer is permitted.
+	// \param originalSize The current size in bytes. (Design issue: since some allocator may not book-keep this, explicitly pass to it can save memory.)
+	// \param newSize the new size in bytes.
+	void* Realloc(void* originalPtr, size_t originalSize, size_t newSize);
+
+	// Free a memory block.
+	// \param pointer to the memory block. Null pointer is permitted.
+	static void Free(void *ptr);
+};
+\endcode
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// CrtAllocator
+
+//! C-runtime library allocator.
+/*! This class is just wrapper for standard C library memory routines.
+	\implements Allocator
+*/
+class CrtAllocator {
+public:
+	static const bool kNeedFree = true;
+	void* Malloc(size_t size) { return malloc(size); }
+	void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { (void)originalSize; return realloc(originalPtr, newSize); }
+	static void Free(void *ptr) { free(ptr); }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// MemoryPoolAllocator
+
+//! Default memory allocator used by the parser and DOM.
+/*! This allocator allocate memory blocks from pre-allocated memory chunks. 
+
+    It does not free memory blocks. And Realloc() only allocate new memory.
+
+    The memory chunks are allocated by BaseAllocator, which is CrtAllocator by default.
+
+    User may also supply a buffer as the first chunk.
+
+    If the user-buffer is full then additional chunks are allocated by BaseAllocator.
+
+    The user-buffer is not deallocated by this allocator.
+
+    \tparam BaseAllocator the allocator type for allocating memory chunks. Default is CrtAllocator.
+	\implements Allocator
+*/
+template <typename BaseAllocator = CrtAllocator>
+class MemoryPoolAllocator {
+public:
+	static const bool kNeedFree = false;	//!< Tell users that no need to call Free() with this allocator. (concept Allocator)
+
+	//! Constructor with chunkSize.
+	/*! \param chunkSize The size of memory chunk. The default is kDefaultChunkSize.
+		\param baseAllocator The allocator for allocating memory chunks.
+	*/
+	MemoryPoolAllocator(size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : 
+		chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(0), baseAllocator_(baseAllocator), ownBaseAllocator_(0)
+	{
+		if (!baseAllocator_)
+			ownBaseAllocator_ = baseAllocator_ = new BaseAllocator();
+		AddChunk(chunk_capacity_);
+	}
+
+	//! Constructor with user-supplied buffer.
+	/*! The user buffer will be used firstly. When it is full, memory pool allocates new chunk with chunk size.
+
+		The user buffer will not be deallocated when this allocator is destructed.
+
+		\param buffer User supplied buffer.
+		\param size Size of the buffer in bytes. It must at least larger than sizeof(ChunkHeader).
+		\param chunkSize The size of memory chunk. The default is kDefaultChunkSize.
+		\param baseAllocator The allocator for allocating memory chunks.
+	*/
+	MemoryPoolAllocator(char *buffer, size_t size, size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) :
+		chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(buffer), baseAllocator_(baseAllocator), ownBaseAllocator_(0)
+	{
+		RAPIDJSON_ASSERT(buffer != 0);
+		RAPIDJSON_ASSERT(size > sizeof(ChunkHeader));
+		chunkHead_ = (ChunkHeader*)buffer;
+		chunkHead_->capacity = size - sizeof(ChunkHeader);
+		chunkHead_->size = 0;
+		chunkHead_->next = 0;
+	}
+
+	//! Destructor.
+	/*! This deallocates all memory chunks, excluding the user-supplied buffer.
+	*/
+	~MemoryPoolAllocator() {
+		Clear();
+		delete ownBaseAllocator_;
+	}
+
+	//! Deallocates all memory chunks, excluding the user-supplied buffer.
+	void Clear() {
+		while(chunkHead_ != 0 && chunkHead_ != (ChunkHeader *)userBuffer_) {
+			ChunkHeader* next = chunkHead_->next;
+			baseAllocator_->Free(chunkHead_);
+			chunkHead_ = next;
+		}
+	}
+
+	//! Computes the total capacity of allocated memory chunks.
+	/*! \return total capacity in bytes.
+	*/
+	size_t Capacity() {
+		size_t capacity = 0;
+		for (ChunkHeader* c = chunkHead_; c != 0; c = c->next)
+			capacity += c->capacity;
+		return capacity;
+	}
+
+	//! Computes the memory blocks allocated.
+	/*! \return total used bytes.
+	*/
+	size_t Size() {
+		size_t size = 0;
+		for (ChunkHeader* c = chunkHead_; c != 0; c = c->next)
+			size += c->size;
+		return size;
+	}
+
+	//! Allocates a memory block. (concept Allocator)
+	void* Malloc(size_t size) {
+		size = RAPIDJSON_ALIGN(size);
+		if (chunkHead_->size + size > chunkHead_->capacity)
+			AddChunk(chunk_capacity_ > size ? chunk_capacity_ : size);
+
+		char *buffer = (char *)(chunkHead_ + 1) + chunkHead_->size;
+		chunkHead_->size += size;
+		return buffer;
+	}
+
+	//! Resizes a memory block (concept Allocator)
+	void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
+		if (originalPtr == 0)
+			return Malloc(newSize);
+
+		// Do not shrink if new size is smaller than original
+		if (originalSize >= newSize)
+			return originalPtr;
+
+		// Simply expand it if it is the last allocation and there is sufficient space
+		if (originalPtr == (char *)(chunkHead_ + 1) + chunkHead_->size - originalSize) {
+			size_t increment = newSize - originalSize;
+			increment = RAPIDJSON_ALIGN(increment);
+			if (chunkHead_->size + increment <= chunkHead_->capacity) {
+				chunkHead_->size += increment;
+				return originalPtr;
+			}
+		}
+
+		// Realloc process: allocate and copy memory, do not free original buffer.
+		void* newBuffer = Malloc(newSize);
+		RAPIDJSON_ASSERT(newBuffer != 0);	// Do not handle out-of-memory explicitly.
+		return memcpy(newBuffer, originalPtr, originalSize);
+	}
+
+	//! Frees a memory block (concept Allocator)
+	static void Free(void *ptr) { (void)ptr; } // Do nothing
+
+private:
+	//! Creates a new chunk.
+	/*! \param capacity Capacity of the chunk in bytes.
+	*/
+	void AddChunk(size_t capacity) {
+		ChunkHeader* chunk = (ChunkHeader*)baseAllocator_->Malloc(sizeof(ChunkHeader) + capacity);
+		chunk->capacity = capacity;
+		chunk->size = 0;
+		chunk->next = chunkHead_;
+		chunkHead_ =  chunk;
+	}
+
+	static const int kDefaultChunkCapacity = 64 * 1024; //!< Default chunk capacity.
+
+	//! Chunk header for perpending to each chunk.
+	/*! Chunks are stored as a singly linked list.
+	*/
+	struct ChunkHeader {
+		size_t capacity;	//!< Capacity of the chunk in bytes (excluding the header itself).
+		size_t size;		//!< Current size of allocated memory in bytes.
+		ChunkHeader *next;	//!< Next chunk in the linked list.
+	};
+
+	ChunkHeader *chunkHead_;	//!< Head of the chunk linked-list. Only the head chunk serves allocation.
+	size_t chunk_capacity_;		//!< The minimum capacity of chunk when they are allocated.
+	char *userBuffer_;			//!< User supplied buffer.
+	BaseAllocator* baseAllocator_;	//!< base allocator for allocating memory chunks.
+	BaseAllocator* ownBaseAllocator_;	//!< base allocator created by this object.
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_ENCODINGS_H_

+ 843 - 0
engine/source/persistence/rapidjson/include/rapidjson/document.h

@@ -0,0 +1,843 @@
+#ifndef RAPIDJSON_DOCUMENT_H_
+#define RAPIDJSON_DOCUMENT_H_
+
+#include "reader.h"
+#include "internal/strfunc.h"
+#include <new>		// placement new
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4127) // conditional expression is constant
+#endif
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// GenericValue
+
+//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.
+/*!
+	A JSON value can be one of 7 types. This class is a variant type supporting
+	these types.
+
+	Use the Value if UTF8 and default allocator
+
+	\tparam Encoding	Encoding of the value. (Even non-string values need to have the same encoding in a document)
+	\tparam Allocator	Allocator type for allocating memory of object, array and string.
+*/
+#pragma pack (push, 4)
+template <typename Encoding, typename Allocator = MemoryPoolAllocator<> > 
+class GenericValue {
+public:
+	//! Name-value pair in an object.
+	struct Member { 
+		GenericValue<Encoding, Allocator> name;		//!< name of member (must be a string)
+		GenericValue<Encoding, Allocator> value;	//!< value of member.
+	};
+
+	typedef Encoding EncodingType;					//!< Encoding type from template parameter.
+	typedef Allocator AllocatorType;				//!< Allocator type from template parameter.
+	typedef typename Encoding::Ch Ch;				//!< Character type derived from Encoding.
+	typedef Member* MemberIterator;					//!< Member iterator for iterating in object.
+	typedef const Member* ConstMemberIterator;		//!< Constant member iterator for iterating in object.
+	typedef GenericValue* ValueIterator;			//!< Value iterator for iterating in array.
+	typedef const GenericValue* ConstValueIterator;	//!< Constant value iterator for iterating in array.
+
+	//!@name Constructors and destructor.
+	//@{
+
+	//! Default constructor creates a null value.
+	GenericValue() : flags_(kNullFlag) {}
+
+	//! Copy constructor is not permitted.
+private:
+	GenericValue(const GenericValue& rhs);
+
+public:
+
+	//! Constructor with JSON value type.
+	/*! This creates a Value of specified type with default content.
+		\param type	Type of the value.
+		\note Default content for number is zero.
+	*/
+	GenericValue(Type type) {
+		static const unsigned defaultFlags[7] = {
+			kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kConstStringFlag,
+			kNumberFlag | kIntFlag | kUintFlag | kInt64Flag | kUint64Flag | kDoubleFlag
+		};
+		RAPIDJSON_ASSERT(type <= kNumberType);
+		flags_ = defaultFlags[type];
+		memset(&data_, 0, sizeof(data_));
+	}
+
+	//! Constructor for boolean value.
+	GenericValue(bool b) : flags_(b ? kTrueFlag : kFalseFlag) {}
+
+	//! Constructor for int value.
+	GenericValue(int i) : flags_(kNumberIntFlag) { 
+		data_.n.i64 = i;
+		if (i >= 0)
+			flags_ |= kUintFlag | kUint64Flag;
+	}
+
+	//! Constructor for unsigned value.
+	GenericValue(unsigned u) : flags_(kNumberUintFlag) {
+		data_.n.u64 = u; 
+		if (!(u & 0x80000000))
+			flags_ |= kIntFlag | kInt64Flag;
+	}
+
+	//! Constructor for int64_t value.
+	GenericValue(int64_t i64) : flags_(kNumberInt64Flag) {
+		data_.n.i64 = i64;
+		if (i64 >= 0) {
+			flags_ |= kNumberUint64Flag;
+			if (!(i64 & 0xFFFFFFFF00000000LL))
+				flags_ |= kUintFlag;
+			if (!(i64 & 0xFFFFFFFF80000000LL))
+				flags_ |= kIntFlag;
+		}
+		else if (i64 >= -2147483648LL)
+			flags_ |= kIntFlag;
+	}
+
+	//! Constructor for uint64_t value.
+	GenericValue(uint64_t u64) : flags_(kNumberUint64Flag) {
+		data_.n.u64 = u64;
+		if (!(u64 & 0x8000000000000000ULL))
+			flags_ |= kInt64Flag;
+		if (!(u64 & 0xFFFFFFFF00000000ULL))
+			flags_ |= kUintFlag;
+		if (!(u64 & 0xFFFFFFFF80000000ULL))
+			flags_ |= kIntFlag;
+	}
+
+	//! Constructor for double value.
+	GenericValue(double d) : flags_(kNumberDoubleFlag) { data_.n.d = d; }
+
+	//! Constructor for constant string (i.e. do not make a copy of string)
+	GenericValue(const Ch* s, SizeType length) { 
+		RAPIDJSON_ASSERT(s != NULL);
+		flags_ = kConstStringFlag;
+		data_.s.str = s;
+		data_.s.length = length;
+	}
+
+	//! Constructor for constant string (i.e. do not make a copy of string)
+	GenericValue(const Ch* s) { SetStringRaw(s, internal::StrLen(s)); }
+
+	//! Constructor for copy-string (i.e. do make a copy of string)
+	GenericValue(const Ch* s, SizeType length, Allocator& allocator) { SetStringRaw(s, length, allocator); }
+
+	//! Constructor for copy-string (i.e. do make a copy of string)
+	GenericValue(const Ch*s, Allocator& allocator) { SetStringRaw(s, internal::StrLen(s), allocator); }
+
+	//! Destructor.
+	/*! Need to destruct elements of array, members of object, or copy-string.
+	*/
+	~GenericValue() {
+		if (Allocator::kNeedFree) {	// Shortcut by Allocator's trait
+			switch(flags_) {
+			case kArrayFlag:
+				for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)
+					v->~GenericValue();
+				Allocator::Free(data_.a.elements);
+				break;
+
+			case kObjectFlag:
+				for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) {
+					m->name.~GenericValue();
+					m->value.~GenericValue();
+				}
+				Allocator::Free(data_.o.members);
+				break;
+
+			case kCopyStringFlag:
+				Allocator::Free(const_cast<Ch*>(data_.s.str));
+				break;
+			}
+		}
+	}
+
+	//@}
+
+	//!@name Assignment operators
+	//@{
+
+	//! Assignment with move semantics.
+	/*! \param rhs Source of the assignment. It will become a null value after assignment.
+	*/
+	GenericValue& operator=(GenericValue& rhs) {
+		RAPIDJSON_ASSERT(this != &rhs);
+		this->~GenericValue();
+		memcpy(this, &rhs, sizeof(GenericValue));
+		rhs.flags_ = kNullFlag;
+		return *this;
+	}
+
+	//! Assignment with primitive types.
+	/*! \tparam T Either Type, int, unsigned, int64_t, uint64_t, const Ch*
+		\param value The value to be assigned.
+	*/
+	template <typename T>
+	GenericValue& operator=(T value) {
+		this->~GenericValue();
+		new (this) GenericValue(value);
+		return *this;
+	}
+	//@}
+
+	//!@name Type
+	//@{
+
+	Type GetType()	const { return static_cast<Type>(flags_ & kTypeMask); }
+	bool IsNull()	const { return flags_ == kNullFlag; }
+	bool IsFalse()	const { return flags_ == kFalseFlag; }
+	bool IsTrue()	const { return flags_ == kTrueFlag; }
+	bool IsBool()	const { return (flags_ & kBoolFlag) != 0; }
+	bool IsObject()	const { return flags_ == kObjectFlag; }
+	bool IsArray()	const { return flags_ == kArrayFlag; }
+	bool IsNumber() const { return (flags_ & kNumberFlag) != 0; }
+	bool IsInt()	const { return (flags_ & kIntFlag) != 0; }
+	bool IsUint()	const { return (flags_ & kUintFlag) != 0; }
+	bool IsInt64()	const { return (flags_ & kInt64Flag) != 0; }
+	bool IsUint64()	const { return (flags_ & kUint64Flag) != 0; }
+	bool IsDouble() const { return (flags_ & kDoubleFlag) != 0; }
+	bool IsString() const { return (flags_ & kStringFlag) != 0; }
+
+	//@}
+
+	//!@name Null
+	//@{
+
+	GenericValue& SetNull() { this->~GenericValue(); new (this) GenericValue(); return *this; }
+
+	//@}
+
+	//!@name Bool
+	//@{
+
+	bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return flags_ == kTrueFlag; }
+	GenericValue& SetBool(bool b) { this->~GenericValue(); new (this) GenericValue(b); return *this; }
+
+	//@}
+
+	//!@name Object
+	//@{
+
+	//! Set this value as an empty object.
+	GenericValue& SetObject() { this->~GenericValue(); new (this) GenericValue(kObjectType); return *this; }
+
+	//! Get the value associated with the name.
+	/*!
+		\note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7.
+		Since 0.2, if the name is not correct, it will assert.
+		If user is unsure whether a member exists, user should use HasMember() first.
+		A better approach is to use the now public FindMember().
+	*/
+	GenericValue& operator[](const Ch* name) {
+		if (Member* member = FindMember(name))
+			return member->value;
+		else {
+			RAPIDJSON_ASSERT(false);	// see above note
+			static GenericValue NullValue;
+			return NullValue;
+		}
+	}
+	const GenericValue& operator[](const Ch* name) const { return const_cast<GenericValue&>(*this)[name]; }
+
+	//! Member iterators.
+	ConstMemberIterator MemberBegin() const	{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members; }
+	ConstMemberIterator MemberEnd()	const	{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; }
+	MemberIterator MemberBegin()			{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members; }
+	MemberIterator MemberEnd()				{ RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; }
+
+	//! Check whether a member exists in the object.
+	/*!
+		\note It is better to use FindMember() directly if you need the obtain the value as well.
+	*/
+	bool HasMember(const Ch* name) const { return FindMember(name) != 0; }
+
+	//! Find member by name.
+	/*!
+		\return Return the member if exists. Otherwise returns null pointer.
+	*/
+	Member* FindMember(const Ch* name) {
+		RAPIDJSON_ASSERT(name);
+		RAPIDJSON_ASSERT(IsObject());
+
+		Object& o = data_.o;
+		for (Member* member = o.members; member != data_.o.members + data_.o.size; ++member)
+			if (name[member->name.data_.s.length] == '\0' && memcmp(member->name.data_.s.str, name, member->name.data_.s.length * sizeof(Ch)) == 0)
+				return member;
+
+		return 0;
+	}
+	const Member* FindMember(const Ch* name) const { return const_cast<GenericValue&>(*this).FindMember(name); }
+
+	//! Add a member (name-value pair) to the object.
+	/*! \param name A string value as name of member.
+		\param value Value of any type.
+	    \param allocator Allocator for reallocating memory.
+	    \return The value itself for fluent API.
+	    \note The ownership of name and value will be transfered to this object if success.
+	*/
+	GenericValue& AddMember(GenericValue& name, GenericValue& value, Allocator& allocator) {
+		RAPIDJSON_ASSERT(IsObject());
+		RAPIDJSON_ASSERT(name.IsString());
+		Object& o = data_.o;
+		if (o.size >= o.capacity) {
+			if (o.capacity == 0) {
+				o.capacity = kDefaultObjectCapacity;
+				o.members = (Member*)allocator.Malloc(o.capacity * sizeof(Member));
+			}
+			else {
+				SizeType oldCapacity = o.capacity;
+				o.capacity *= 2;
+				o.members = (Member*)allocator.Realloc(o.members, oldCapacity * sizeof(Member), o.capacity * sizeof(Member));
+			}
+		}
+		o.members[o.size].name.RawAssign(name);
+		o.members[o.size].value.RawAssign(value);
+		o.size++;
+		return *this;
+	}
+
+	GenericValue& AddMember(const Ch* name, Allocator& nameAllocator, GenericValue& value, Allocator& allocator) {
+		GenericValue n(name, internal::StrLen(name), nameAllocator);
+		return AddMember(n, value, allocator);
+	}
+
+	GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) {
+		GenericValue n(name, internal::StrLen(name));
+		return AddMember(n, value, allocator);
+	}
+
+	template <typename T>
+	GenericValue& AddMember(const Ch* name, T value, Allocator& allocator) {
+		GenericValue n(name, internal::StrLen(name));
+		GenericValue v(value);
+		return AddMember(n, v, allocator);
+	}
+
+	//! Remove a member in object by its name.
+	/*! \param name Name of member to be removed.
+	    \return Whether the member existed.
+	    \note Removing member is implemented by moving the last member. So the ordering of members is changed.
+	*/
+	bool RemoveMember(const Ch* name) {
+		RAPIDJSON_ASSERT(IsObject());
+		if (Member* m = FindMember(name)) {
+			RAPIDJSON_ASSERT(data_.o.size > 0);
+			RAPIDJSON_ASSERT(data_.o.members != 0);
+
+			Member* last = data_.o.members + (data_.o.size - 1);
+			if (data_.o.size > 1 && m != last) {
+				// Move the last one to this place
+				m->name = last->name;
+				m->value = last->value;
+			}
+			else {
+				// Only one left, just destroy
+				m->name.~GenericValue();
+				m->value.~GenericValue();
+			}
+			--data_.o.size;
+			return true;
+		}
+		return false;
+	}
+
+	//@}
+
+	//!@name Array
+	//@{
+
+	//! Set this value as an empty array.
+	GenericValue& SetArray() {	this->~GenericValue(); new (this) GenericValue(kArrayType); return *this; }
+
+	//! Get the number of elements in array.
+	SizeType Size() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size; }
+
+	//! Get the capacity of array.
+	SizeType Capacity() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.capacity; }
+
+	//! Check whether the array is empty.
+	bool Empty() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size == 0; }
+
+	//! Remove all elements in the array.
+	/*! This function do not deallocate memory in the array, i.e. the capacity is unchanged.
+	*/
+	void Clear() {
+		RAPIDJSON_ASSERT(IsArray()); 
+		for (SizeType i = 0; i < data_.a.size; ++i)
+			data_.a.elements[i].~GenericValue();
+		data_.a.size = 0;
+	}
+
+	//! Get an element from array by index.
+	/*! \param index Zero-based index of element.
+		\note
+\code
+Value a(kArrayType);
+a.PushBack(123);
+int x = a[0].GetInt();				// Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type.
+int y = a[SizeType(0)].GetInt();	// Cast to SizeType will work.
+int z = a[0u].GetInt();				// This works too.
+\endcode
+	*/
+	GenericValue& operator[](SizeType index) {
+		RAPIDJSON_ASSERT(IsArray());
+		RAPIDJSON_ASSERT(index < data_.a.size);
+		return data_.a.elements[index];
+	}
+	const GenericValue& operator[](SizeType index) const { return const_cast<GenericValue&>(*this)[index]; }
+
+	//! Element iterator
+	ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements; }
+	ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements + data_.a.size; }
+	ConstValueIterator Begin() const { return const_cast<GenericValue&>(*this).Begin(); }
+	ConstValueIterator End() const { return const_cast<GenericValue&>(*this).End(); }
+
+	//! Request the array to have enough capacity to store elements.
+	/*! \param newCapacity	The capacity that the array at least need to have.
+		\param allocator	The allocator for allocating memory. It must be the same one use previously.
+		\return The value itself for fluent API.
+	*/
+	GenericValue& Reserve(SizeType newCapacity, Allocator &allocator) {
+		RAPIDJSON_ASSERT(IsArray());
+		if (newCapacity > data_.a.capacity) {
+			data_.a.elements = (GenericValue*)allocator.Realloc(data_.a.elements, data_.a.capacity * sizeof(GenericValue), newCapacity * sizeof(GenericValue));
+			data_.a.capacity = newCapacity;
+		}
+		return *this;
+	}
+
+	//! Append a value at the end of the array.
+	/*! \param value		The value to be appended.
+	    \param allocator	The allocator for allocating memory. It must be the same one use previously.
+	    \return The value itself for fluent API.
+	    \note The ownership of the value will be transfered to this object if success.
+	    \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.
+	*/
+	GenericValue& PushBack(GenericValue& value, Allocator& allocator) {
+		RAPIDJSON_ASSERT(IsArray());
+		if (data_.a.size >= data_.a.capacity)
+			Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : data_.a.capacity * 2, allocator);
+		data_.a.elements[data_.a.size++].RawAssign(value);
+		return *this;
+	}
+
+	template <typename T>
+	GenericValue& PushBack(T value, Allocator& allocator) {
+		GenericValue v(value);
+		return PushBack(v, allocator);
+	}
+
+	//! Remove the last element in the array.
+	GenericValue& PopBack() {
+		RAPIDJSON_ASSERT(IsArray());
+		RAPIDJSON_ASSERT(!Empty());
+		data_.a.elements[--data_.a.size].~GenericValue();
+		return *this;
+	}
+	//@}
+
+	//!@name Number
+	//@{
+
+	int GetInt() const			{ RAPIDJSON_ASSERT(flags_ & kIntFlag);   return data_.n.i.i;   }
+	unsigned GetUint() const	{ RAPIDJSON_ASSERT(flags_ & kUintFlag);  return data_.n.u.u;   }
+	int64_t GetInt64() const	{ RAPIDJSON_ASSERT(flags_ & kInt64Flag); return data_.n.i64; }
+	uint64_t GetUint64() const	{ RAPIDJSON_ASSERT(flags_ & kUint64Flag); return data_.n.u64; }
+
+	double GetDouble() const {
+		RAPIDJSON_ASSERT(IsNumber());
+		if ((flags_ & kDoubleFlag) != 0)				return data_.n.d;	// exact type, no conversion.
+		if ((flags_ & kIntFlag) != 0)					return data_.n.i.i;	// int -> double
+		if ((flags_ & kUintFlag) != 0)					return data_.n.u.u;	// unsigned -> double
+		if ((flags_ & kInt64Flag) != 0)					return (double)data_.n.i64; // int64_t -> double (may lose precision)
+		RAPIDJSON_ASSERT((flags_ & kUint64Flag) != 0);	return (double)data_.n.u64;	// uint64_t -> double (may lose precision)
+	}
+
+	GenericValue& SetInt(int i)				{ this->~GenericValue(); new (this) GenericValue(i);	return *this; }
+	GenericValue& SetUint(unsigned u)		{ this->~GenericValue(); new (this) GenericValue(u);	return *this; }
+	GenericValue& SetInt64(int64_t i64)		{ this->~GenericValue(); new (this) GenericValue(i64);	return *this; }
+	GenericValue& SetUint64(uint64_t u64)	{ this->~GenericValue(); new (this) GenericValue(u64);	return *this; }
+	GenericValue& SetDouble(double d)		{ this->~GenericValue(); new (this) GenericValue(d);	return *this; }
+
+	//@}
+
+	//!@name String
+	//@{
+
+	const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return data_.s.str; }
+
+	//! Get the length of string.
+	/*! Since rapidjson permits "\u0000" in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().
+	*/
+	SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return data_.s.length; }
+
+	//! Set this value as a string without copying source string.
+	/*! This version has better performance with supplied length, and also support string containing null character.
+		\param s source string pointer. 
+		\param length The length of source string, excluding the trailing null terminator.
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s, SizeType length) { this->~GenericValue(); SetStringRaw(s, length); return *this; }
+
+	//! Set this value as a string without copying source string.
+	/*! \param s source string pointer. 
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s) { return SetString(s, internal::StrLen(s)); }
+
+	//! Set this value as a string by copying from source string.
+	/*! This version has better performance with supplied length, and also support string containing null character.
+		\param s source string. 
+		\param length The length of source string, excluding the trailing null terminator.
+		\param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator().
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s, SizeType length, Allocator& allocator) { this->~GenericValue(); SetStringRaw(s, length, allocator); return *this; }
+
+	//! Set this value as a string by copying from source string.
+	/*!	\param s source string. 
+		\param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator().
+		\return The value itself for fluent API.
+	*/
+	GenericValue& SetString(const Ch* s, Allocator& allocator) {	SetString(s, internal::StrLen(s), allocator); return *this; }
+
+	//@}
+
+	//! Generate events of this value to a Handler.
+	/*! This function adopts the GoF visitor pattern.
+		Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.
+		It can also be used to deep clone this value via GenericDocument, which is also a Handler.
+		\tparam Handler type of handler.
+		\param handler An object implementing concept Handler.
+	*/
+	template <typename Handler>
+	const GenericValue& Accept(Handler& handler) const {
+		switch(GetType()) {
+		case kNullType:		handler.Null(); break;
+		case kFalseType:	handler.Bool(false); break;
+		case kTrueType:		handler.Bool(true); break;
+
+		case kObjectType:
+			handler.StartObject();
+			for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) {
+				handler.String(m->name.data_.s.str, m->name.data_.s.length, false);
+				m->value.Accept(handler);
+			}
+			handler.EndObject(data_.o.size);
+			break;
+
+		case kArrayType:
+			handler.StartArray();
+			for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v)
+				v->Accept(handler);
+			handler.EndArray(data_.a.size);
+			break;
+
+		case kStringType:
+			handler.String(data_.s.str, data_.s.length, false);
+			break;
+
+		case kNumberType:
+			if (IsInt())			handler.Int(data_.n.i.i);
+			else if (IsUint())		handler.Uint(data_.n.u.u);
+			else if (IsInt64())		handler.Int64(data_.n.i64);
+			else if (IsUint64())	handler.Uint64(data_.n.u64);
+			else					handler.Double(data_.n.d);
+			break;
+		}
+		return *this;
+	}
+
+private:
+	template <typename, typename>
+	friend class GenericDocument;
+
+	enum {
+		kBoolFlag = 0x100,
+		kNumberFlag = 0x200,
+		kIntFlag = 0x400,
+		kUintFlag = 0x800,
+		kInt64Flag = 0x1000,
+		kUint64Flag = 0x2000,
+		kDoubleFlag = 0x4000,
+		kStringFlag = 0x100000,
+		kCopyFlag = 0x200000,
+
+		// Initial flags of different types.
+		kNullFlag = kNullType,
+		kTrueFlag = kTrueType | kBoolFlag,
+		kFalseFlag = kFalseType | kBoolFlag,
+		kNumberIntFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag,
+		kNumberUintFlag = kNumberType | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,
+		kNumberInt64Flag = kNumberType | kNumberFlag | kInt64Flag,
+		kNumberUint64Flag = kNumberType | kNumberFlag | kUint64Flag,
+		kNumberDoubleFlag = kNumberType | kNumberFlag | kDoubleFlag,
+		kConstStringFlag = kStringType | kStringFlag,
+		kCopyStringFlag = kStringType | kStringFlag | kCopyFlag,
+		kObjectFlag = kObjectType,
+		kArrayFlag = kArrayType,
+
+		kTypeMask = 0xFF	// bitwise-and with mask of 0xFF can be optimized by compiler
+	};
+
+	static const SizeType kDefaultArrayCapacity = 16;
+	static const SizeType kDefaultObjectCapacity = 16;
+
+	struct String {
+		const Ch* str;
+		SizeType length;
+		unsigned hashcode;	//!< reserved
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	// By using proper binary layout, retrieval of different integer types do not need conversions.
+	union Number {
+#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN
+		struct I {
+			int i;
+			char padding[4];
+		}i;
+		struct U {
+			unsigned u;
+			char padding2[4];
+		}u;
+#else
+		struct I {
+			char padding[4];
+			int i;
+		}i;
+		struct U {
+			char padding2[4];
+			unsigned u;
+		}u;
+#endif
+		int64_t i64;
+		uint64_t u64;
+		double d;
+	};	// 8 bytes
+
+	struct Object {
+		Member* members;
+		SizeType size;
+		SizeType capacity;
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	struct Array {
+		GenericValue<Encoding, Allocator>* elements;
+		SizeType size;
+		SizeType capacity;
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	union Data {
+		String s;
+		Number n;
+		Object o;
+		Array a;
+	};	// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
+
+	// Initialize this value as array with initial data, without calling destructor.
+	void SetArrayRaw(GenericValue* values, SizeType count, Allocator& alloctaor) {
+		flags_ = kArrayFlag;
+		data_.a.elements = (GenericValue*)alloctaor.Malloc(count * sizeof(GenericValue));
+		memcpy(data_.a.elements, values, count * sizeof(GenericValue));
+		data_.a.size = data_.a.capacity = count;
+	}
+
+	//! Initialize this value as object with initial data, without calling destructor.
+	void SetObjectRaw(Member* members, SizeType count, Allocator& alloctaor) {
+		flags_ = kObjectFlag;
+		data_.o.members = (Member*)alloctaor.Malloc(count * sizeof(Member));
+		memcpy(data_.o.members, members, count * sizeof(Member));
+		data_.o.size = data_.o.capacity = count;
+	}
+
+	//! Initialize this value as constant string, without calling destructor.
+	void SetStringRaw(const Ch* s, SizeType length) {
+		RAPIDJSON_ASSERT(s != NULL);
+		flags_ = kConstStringFlag;
+		data_.s.str = s;
+		data_.s.length = length;
+	}
+
+	//! Initialize this value as copy string with initial data, without calling destructor.
+	void SetStringRaw(const Ch* s, SizeType length, Allocator& allocator) {
+		RAPIDJSON_ASSERT(s != NULL);
+		flags_ = kCopyStringFlag;
+		data_.s.str = (Ch *)allocator.Malloc((length + 1) * sizeof(Ch));
+		data_.s.length = length;
+		memcpy(const_cast<Ch*>(data_.s.str), s, length * sizeof(Ch));
+		const_cast<Ch*>(data_.s.str)[length] = '\0';
+	}
+
+	//! Assignment without calling destructor
+	void RawAssign(GenericValue& rhs) {
+		memcpy(this, &rhs, sizeof(GenericValue));
+		rhs.flags_ = kNullFlag;
+	}
+
+	Data data_;
+	unsigned flags_;
+};
+#pragma pack (pop)
+
+//! Value with UTF8 encoding.
+typedef GenericValue<UTF8<> > Value;
+
+///////////////////////////////////////////////////////////////////////////////
+// GenericDocument 
+
+//! A document for parsing JSON text as DOM.
+/*!
+	\implements Handler
+	\tparam Encoding encoding for both parsing and string storage.
+	\tparam Alloactor allocator for allocating memory for the DOM, and the stack during parsing.
+*/
+template <typename Encoding, typename Allocator = MemoryPoolAllocator<> >
+class GenericDocument : public GenericValue<Encoding, Allocator> {
+public:
+	typedef typename Encoding::Ch Ch;						//!< Character type derived from Encoding.
+	typedef GenericValue<Encoding, Allocator> ValueType;	//!< Value type of the document.
+	typedef Allocator AllocatorType;						//!< Allocator type from template parameter.
+
+	//! Constructor
+	/*! \param allocator		Optional allocator for allocating stack memory.
+		\param stackCapacity	Initial capacity of stack in bytes.
+	*/
+	GenericDocument(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {}
+
+	//! Parse JSON text from an input stream.
+	/*! \tparam parseFlags Combination of ParseFlag.
+		\param stream Input stream to be parsed.
+		\return The document itself for fluent API.
+	*/
+	template <unsigned parseFlags, typename SourceEncoding, typename InputStream>
+	GenericDocument& ParseStream(InputStream& is) {
+		ValueType::SetNull(); // Remove existing root if exist
+		GenericReader<SourceEncoding, Encoding, Allocator> reader;
+		if (reader.template Parse<parseFlags>(is, *this)) {
+			RAPIDJSON_ASSERT(stack_.GetSize() == sizeof(ValueType)); // Got one and only one root object
+			this->RawAssign(*stack_.template Pop<ValueType>(1));	// Add this-> to prevent issue 13.
+			parseError_ = 0;
+			errorOffset_ = 0;
+		}
+		else {
+			parseError_ = reader.GetParseError();
+			errorOffset_ = reader.GetErrorOffset();
+			ClearStack();
+		}
+		return *this;
+	}
+
+	//! Parse JSON text from a mutable string.
+	/*! \tparam parseFlags Combination of ParseFlag.
+		\param str Mutable zero-terminated string to be parsed.
+		\return The document itself for fluent API.
+	*/
+	template <unsigned parseFlags, typename SourceEncoding>
+	GenericDocument& ParseInsitu(Ch* str) {
+		GenericInsituStringStream<Encoding> s(str);
+		return ParseStream<parseFlags | kParseInsituFlag, SourceEncoding>(s);
+	}
+
+	template <unsigned parseFlags>
+	GenericDocument& ParseInsitu(Ch* str) {
+		return ParseInsitu<parseFlags, Encoding>(str);
+	}
+
+	//! Parse JSON text from a read-only string.
+	/*! \tparam parseFlags Combination of ParseFlag (must not contain kParseInsituFlag).
+		\param str Read-only zero-terminated string to be parsed.
+	*/
+	template <unsigned parseFlags, typename SourceEncoding>
+	GenericDocument& Parse(const Ch* str) {
+		RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag));
+		GenericStringStream<SourceEncoding> s(str);
+		return ParseStream<parseFlags, SourceEncoding>(s);
+	}
+
+	template <unsigned parseFlags>
+	GenericDocument& Parse(const Ch* str) {
+		return Parse<parseFlags, Encoding>(str);
+	}
+
+	//! Whether a parse error was occured in the last parsing.
+	bool HasParseError() const { return parseError_ != 0; }
+
+	//! Get the message of parsing error.
+	const char* GetParseError() const { return parseError_; }
+
+	//! Get the offset in character of the parsing error.
+	size_t GetErrorOffset() const { return errorOffset_; }
+
+	//! Get the allocator of this document.
+	Allocator& GetAllocator() {	return stack_.GetAllocator(); }
+
+	//! Get the capacity of stack in bytes.
+	size_t GetStackCapacity() const { return stack_.GetCapacity(); }
+
+//private:
+	//friend class GenericReader<Encoding>;	// for Reader to call the following private handler functions
+
+	// Implementation of Handler
+	void Null()	{ new (stack_.template Push<ValueType>()) ValueType(); }
+	void Bool(bool b) { new (stack_.template Push<ValueType>()) ValueType(b); }
+	void Int(int i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Uint(unsigned i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Int64(int64_t i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Uint64(uint64_t i) { new (stack_.template Push<ValueType>()) ValueType(i); }
+	void Double(double d) { new (stack_.template Push<ValueType>()) ValueType(d); }
+
+	void String(const Ch* str, SizeType length, bool copy) { 
+		if (copy) 
+			new (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());
+		else
+			new (stack_.template Push<ValueType>()) ValueType(str, length);
+	}
+
+	void StartObject() { new (stack_.template Push<ValueType>()) ValueType(kObjectType); }
+	
+	void EndObject(SizeType memberCount) {
+		typename ValueType::Member* members = stack_.template Pop<typename ValueType::Member>(memberCount);
+		stack_.template Top<ValueType>()->SetObjectRaw(members, (SizeType)memberCount, GetAllocator());
+	}
+
+	void StartArray() { new (stack_.template Push<ValueType>()) ValueType(kArrayType); }
+	
+	void EndArray(SizeType elementCount) {
+		ValueType* elements = stack_.template Pop<ValueType>(elementCount);
+		stack_.template Top<ValueType>()->SetArrayRaw(elements, elementCount, GetAllocator());
+	}
+
+private:
+	// Prohibit assignment
+	GenericDocument& operator=(const GenericDocument&);
+
+	void ClearStack() {
+		if (Allocator::kNeedFree)
+			while (stack_.GetSize() > 0)	// Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects)
+				(stack_.template Pop<ValueType>(1))->~ValueType();
+		else
+			stack_.Clear();
+	}
+
+	static const size_t kDefaultStackCapacity = 1024;
+	internal::Stack<Allocator> stack_;
+	const char* parseError_;
+	size_t errorOffset_;
+};
+
+typedef GenericDocument<UTF8<> > Document;
+
+} // namespace rapidjson
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+#endif // RAPIDJSON_DOCUMENT_H_

+ 250 - 0
engine/source/persistence/rapidjson/include/rapidjson/encodedstream.h

@@ -0,0 +1,250 @@
+#ifndef RAPIDJSON_ENCODEDSTREAM_H_
+#define RAPIDJSON_ENCODEDSTREAM_H_
+
+#include "rapidjson.h"
+
+namespace rapidjson {
+
+//! Input byte stream wrapper with a statically bound encoding.
+/*!
+	\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
+	\tparam InputByteStream Type of input byte stream. For example, FileReadStream.
+*/
+template <typename Encoding, typename InputByteStream>
+class EncodedInputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+public:
+	typedef typename Encoding::Ch Ch;
+
+	EncodedInputStream(InputByteStream& is) : is_(is) { 
+		current_ = Encoding::TakeBOM(is_);
+	}
+
+	Ch Peek() const { return current_; }
+	Ch Take() { Ch c = current_; current_ = Encoding::Take(is_); return c; }
+	size_t Tell() const { return is_.Tell(); }
+
+	// Not implemented
+	void Put(Ch c) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); } 
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	// Prohibit assignment for VC C4512 warning
+	EncodedInputStream& operator=(const EncodedInputStream&);
+
+	InputByteStream& is_;
+	Ch current_;
+};
+
+//! Output byte stream wrapper with statically bound encoding.
+/*!
+	\tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE.
+	\tparam InputByteStream Type of input byte stream. For example, FileWriteStream.
+*/
+template <typename Encoding, typename OutputByteStream>
+class EncodedOutputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+public:
+	typedef typename Encoding::Ch Ch;
+
+	EncodedOutputStream(OutputByteStream& os, bool putBOM = true) : os_(os) { 
+		if (putBOM)
+			Encoding::PutBOM(os_);
+	}
+
+	void Put(Ch c) { Encoding::Put(os_, c);  }
+	void Flush() { os_.Flush(); }
+
+	// Not implemented
+	Ch Peek() const { RAPIDJSON_ASSERT(false); }
+	Ch Take() { RAPIDJSON_ASSERT(false);  }
+	size_t Tell() const { RAPIDJSON_ASSERT(false);  return 0; }
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	// Prohibit assignment for VC C4512 warning
+	EncodedOutputStream& operator=(const EncodedOutputStream&);
+
+	OutputByteStream& os_;
+};
+
+#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
+
+//! Input stream wrapper with dynamically bound encoding and automatic encoding detection.
+/*!
+	\tparam CharType Type of character for reading.
+	\tparam InputByteStream type of input byte stream to be wrapped.
+*/
+template <typename CharType, typename InputByteStream>
+class AutoUTFInputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+public:
+	typedef CharType Ch;
+
+	//! Constructor.
+	/*!
+		\param is input stream to be wrapped.
+		\param type UTF encoding type if it is not detected from the stream.
+	*/
+	AutoUTFInputStream(InputByteStream& is, UTFType type = kUTF8) : is_(&is), type_(type), hasBOM_(false) {
+		DetectType();
+		static const TakeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Take) };
+		takeFunc_ = f[type_];
+		current_ = takeFunc_(*is_);
+	}
+
+	UTFType GetType() const { return type_; }
+	bool HasBOM() const { return hasBOM_; }
+
+	Ch Peek() const { return current_; }
+	Ch Take() { Ch c = current_; current_ = takeFunc_(*is_); return c; }
+	size_t Tell() const { return is_->Tell(); }
+
+	// Not implemented
+	void Put(Ch) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); } 
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	// Detect encoding type with BOM or RFC 4627
+	void DetectType() {
+		// BOM (Byte Order Mark):
+		// 00 00 FE FF  UTF-32BE
+		// FF FE 00 00  UTF-32LE
+		// FE FF		UTF-16BE
+		// FF FE		UTF-16LE
+		// EF BB BF		UTF-8
+
+		const unsigned char* c = (const unsigned char *)is_->Peek4();
+		if (!c)
+			return;
+
+		unsigned bom = c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24);
+		hasBOM_ = false;
+		if (bom == 0xFFFE0000)					{ type_ = kUTF32BE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); }
+		else if (bom == 0x0000FEFF)				{ type_ = kUTF32LE;	hasBOM_ = true;	is_->Take(); is_->Take(); is_->Take(); is_->Take();	}
+		else if ((bom & 0xFFFF) == 0xFFFE)		{ type_ = kUTF16BE; hasBOM_ = true; is_->Take(); is_->Take();							}
+		else if ((bom & 0xFFFF) == 0xFEFF)		{ type_ = kUTF16LE; hasBOM_ = true; is_->Take(); is_->Take();							}
+		else if ((bom & 0xFFFFFF) == 0xBFBBEF)	{ type_ = kUTF8;	hasBOM_ = true; is_->Take(); is_->Take(); is_->Take();				}
+
+		// RFC 4627: Section 3
+		// "Since the first two characters of a JSON text will always be ASCII
+		// characters [RFC0020], it is possible to determine whether an octet
+		// stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
+		// at the pattern of nulls in the first four octets."
+		// 00 00 00 xx  UTF-32BE
+		// 00 xx 00 xx  UTF-16BE
+		// xx 00 00 00  UTF-32LE
+		// xx 00 xx 00  UTF-16LE
+		// xx xx xx xx  UTF-8
+
+		if (!hasBOM_) {
+			unsigned pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0);
+			switch (pattern) {
+			case 0x08: type_ = kUTF32BE; break;
+			case 0x0A: type_ = kUTF16BE; break;
+			case 0x01: type_ = kUTF32LE; break;
+			case 0x05: type_ = kUTF16LE; break;
+			case 0x0F: type_ = kUTF8;    break;
+			}
+		}
+
+		// RUntime check whether the size of character type is sufficient. It only perform checks with assertion.
+		switch (type_) {
+		case kUTF8:
+			// Do nothing
+			break;
+		case kUTF16LE:
+		case kUTF16BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
+			break;
+		case kUTF32LE:
+		case kUTF32BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
+			break;
+		}
+	}
+
+	typedef Ch (*TakeFunc)(InputByteStream& is);
+	InputByteStream* is_;
+	UTFType type_;
+	Ch current_;
+	TakeFunc takeFunc_;
+	bool hasBOM_;
+};
+
+//! Output stream wrapper with dynamically bound encoding and automatic encoding detection.
+/*!
+	\tparam CharType Type of character for writing.
+	\tparam InputByteStream type of output byte stream to be wrapped.
+*/
+template <typename CharType, typename OutputByteStream>
+class AutoUTFOutputStream {
+	RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+public:
+	typedef CharType Ch;
+
+	//! Constructor.
+	/*!
+		\param os output stream to be wrapped.
+		\param type UTF encoding type.
+		\param putBOM Whether to write BOM at the beginning of the stream.
+	*/
+	AutoUTFOutputStream(OutputByteStream& os, UTFType type, bool putBOM) : os_(&os), type_(type) {
+		// RUntime check whether the size of character type is sufficient. It only perform checks with assertion.
+		switch (type_) {
+		case kUTF16LE:
+		case kUTF16BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 2);
+			break;
+		case kUTF32LE:
+		case kUTF32BE:
+			RAPIDJSON_ASSERT(sizeof(Ch) >= 4);
+			break;
+		case kUTF8:
+			// Do nothing
+			break;
+		}
+
+		static const PutFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Put) };
+		putFunc_ = f[type_];
+
+		if (putBOM)
+			PutBOM();
+	}
+
+	UTFType GetType() const { return type_; }
+
+	void Put(Ch c) { putFunc_(*os_, c); }
+	void Flush() { os_->Flush(); } 
+
+	// Not implemented
+	Ch Peek() const { RAPIDJSON_ASSERT(false); }
+	Ch Take() { RAPIDJSON_ASSERT(false); }
+	size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	void PutBOM() { 
+		typedef void (*PutBOMFunc)(OutputByteStream&);
+		static const PutBOMFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(PutBOM) };
+		f[type_](*os_);
+	}
+
+	typedef void (*PutFunc)(OutputByteStream&, Ch);
+
+	OutputByteStream* os_;
+	UTFType type_;
+	PutFunc putFunc_;
+};
+
+#undef RAPIDJSON_ENCODINGS_FUNC
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 527 - 0
engine/source/persistence/rapidjson/include/rapidjson/encodings.h

@@ -0,0 +1,527 @@
+#ifndef RAPIDJSON_ENCODINGS_H_
+#define RAPIDJSON_ENCODINGS_H_
+
+#include "rapidjson.h"
+
+namespace rapidjson {
+
+///////////////////////////////////////////////////////////////////////////////
+// Encoding
+
+/*! \class rapidjson::Encoding
+	\brief Concept for encoding of Unicode characters.
+
+\code
+concept Encoding {
+	typename Ch;	//! Type of character. A "character" is actually a code unit in unicode's definition.
+
+	//! \brief Encode a Unicode codepoint to an output stream.
+	//! \param os Output stream.
+	//! \param codepoint An unicode codepoint, ranging from 0x0 to 0x10FFFF inclusively.
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint);
+
+	//! \brief Decode a Unicode codepoint from an input stream.
+	//! \param is Input stream.
+	//! \param codepoint Output of the unicode codepoint.
+	//! \return true if a valid codepoint can be decoded from the stream.
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint);
+
+	//! \brief Validate one Unicode codepoint from an encoded stream.
+	//! \param is Input stream to obtain codepoint.
+	//! \param os Output for copying one codepoint.
+	//! \return true if it is valid.
+	//! \note This function just validating and copying the codepoint without actually decode it.
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os);
+
+	// The following functions are deal with byte streams.
+
+	//! Take a character from input byte stream, skip BOM if exist.
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is);
+
+	//! Take a character from input byte stream.
+	template <typename InputByteStream>
+	static Ch Take(InputByteStream& is);
+
+	//! Put BOM to output byte stream.
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os);
+
+	//! Put a character to output byte stream.
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, Ch c);
+};
+\endcode
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// UTF8
+
+//! UTF-8 encoding.
+/*! http://en.wikipedia.org/wiki/UTF-8
+	http://tools.ietf.org/html/rfc3629
+	\tparam CharType Code unit for storing 8-bit UTF-8 data. Default is char.
+	\implements Encoding
+*/
+template<typename CharType = char>
+struct UTF8 {
+	typedef CharType Ch;
+
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint) {
+		if (codepoint <= 0x7F) 
+			os.Put(codepoint & 0xFF);
+		else if (codepoint <= 0x7FF) {
+			os.Put(0xC0 | ((codepoint >> 6) & 0xFF));
+			os.Put(0x80 | ((codepoint & 0x3F)));
+		}
+		else if (codepoint <= 0xFFFF) {
+			os.Put(0xE0 | ((codepoint >> 12) & 0xFF));
+			os.Put(0x80 | ((codepoint >> 6) & 0x3F));
+			os.Put(0x80 | (codepoint & 0x3F));
+		}
+		else {
+			RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
+			os.Put(0xF0 | ((codepoint >> 18) & 0xFF));
+			os.Put(0x80 | ((codepoint >> 12) & 0x3F));
+			os.Put(0x80 | ((codepoint >> 6) & 0x3F));
+			os.Put(0x80 | (codepoint & 0x3F));
+		}
+	}
+
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint) {
+#define COPY() c = is.Take(); *codepoint = (*codepoint << 6) | ((unsigned char)c & 0x3Fu)
+#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0)
+#define TAIL() COPY(); TRANS(0x70)
+		Ch c = is.Take();
+		if (!(c & 0x80)) {
+			*codepoint = (unsigned char)c;
+			return true;
+		}
+
+		unsigned char type = GetRange((unsigned char)c);
+		*codepoint = (0xFF >> type) & (unsigned char)c;
+		bool result = true;
+		switch (type) {
+		case 2:	TAIL(); return result;
+		case 3:	TAIL(); TAIL(); return result;
+		case 4:	COPY(); TRANS(0x50); TAIL(); return result;
+		case 5:	COPY(); TRANS(0x10); TAIL(); TAIL(); return result;
+		case 6: TAIL(); TAIL(); TAIL(); return result;
+		case 10: COPY(); TRANS(0x20); TAIL(); return result;
+		case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result;
+		default: return false;
+		}
+#undef COPY
+#undef TRANS
+#undef TAIL
+	}
+
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os) {
+#define COPY() os.Put(c = is.Take())
+#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0)
+#define TAIL() COPY(); TRANS(0x70)
+		Ch c;
+		COPY();
+		if (!(c & 0x80))
+			return true;
+
+		bool result = true;
+		switch (GetRange((unsigned char)c)) {
+		case 2:	TAIL(); return result;
+		case 3:	TAIL(); TAIL(); return result;
+		case 4:	COPY(); TRANS(0x50); TAIL(); return result;
+		case 5:	COPY(); TRANS(0x10); TAIL(); TAIL(); return result;
+		case 6: TAIL(); TAIL(); TAIL(); return result;
+		case 10: COPY(); TRANS(0x20); TAIL(); return result;
+		case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result;
+		default: return false;
+		}
+#undef COPY
+#undef TRANS
+#undef TAIL
+	}
+
+	static unsigned char GetRange(unsigned char c) {
+		// Referring to DFA of http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+		// With new mapping 1 -> 0x10, 7 -> 0x20, 9 -> 0x40, such that AND operation can test multiple types.
+		static const unsigned char type[] = {
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+			0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+			0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+			0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+			0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+			8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+			10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,
+		};
+		return type[c];
+	}
+
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		Ch c = Take(is);
+		if ((unsigned char)c != 0xEFu) return c;
+		c = is.Take();
+		if ((unsigned char)c != 0xBBu) return c;
+		c = is.Take();
+		if ((unsigned char)c != 0xBFu) return c;
+		c = is.Take();
+		return c;
+	}
+
+	template <typename InputByteStream>
+	static Ch Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		return is.Take();
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xEFu); os.Put(0xBBu); os.Put(0xBFu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, Ch c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(static_cast<typename OutputByteStream::Ch>(c));
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// UTF16
+
+//! UTF-16 encoding.
+/*! http://en.wikipedia.org/wiki/UTF-16
+	http://tools.ietf.org/html/rfc2781
+	\tparam CharType Type for storing 16-bit UTF-16 data. Default is wchar_t. C++11 may use char16_t instead.
+	\implements Encoding
+
+	\note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness.
+	For streaming, use UTF16LE and UTF16BE, which handle endianness.
+*/
+template<typename CharType = wchar_t>
+struct UTF16 {
+	typedef CharType Ch;
+	RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 2);
+
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2);
+		if (codepoint <= 0xFFFF) {
+			RAPIDJSON_ASSERT(codepoint < 0xD800 || codepoint > 0xDFFF); // Code point itself cannot be surrogate pair 
+			os.Put(static_cast<typename OutputStream::Ch>(codepoint));
+		}
+		else {
+			RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
+			unsigned v = codepoint - 0x10000;
+			os.Put(static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
+			os.Put((v & 0x3FF) | 0xDC00);
+		}
+	}
+
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2);
+		Ch c = is.Take();
+		if (c < 0xD800 || c > 0xDFFF) {
+			*codepoint = c;
+			return true;
+		}
+		else if (c <= 0xDBFF) {
+			*codepoint = (c & 0x3FF) << 10;
+			c = is.Take();
+			*codepoint |= (c & 0x3FF);
+			*codepoint += 0x10000;
+			return c >= 0xDC00 && c <= 0xDFFF;
+		}
+		return false;
+	}
+
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2);
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2);
+		Ch c;
+		os.Put(c = is.Take());
+		if (c < 0xD800 || c > 0xDFFF)
+			return true;
+		else if (c <= 0xDBFF) {
+			os.Put(c = is.Take());
+			return c >= 0xDC00 && c <= 0xDFFF;
+		}
+		return false;
+	}
+};
+
+//! UTF-16 little endian encoding.
+template<typename CharType = wchar_t>
+struct UTF16LE : UTF16<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned short)c == 0xFEFFu ? Take(is) : c;
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take();
+		c |= (unsigned char)is.Take() << 8;
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xFFu); os.Put(0xFEu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(c & 0xFFu);
+		os.Put((c >> 8) & 0xFFu);
+	}
+};
+
+//! UTF-16 big endian encoding.
+template<typename CharType = wchar_t>
+struct UTF16BE : UTF16<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned short)c == 0xFEFFu ? Take(is) : c;
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take() << 8;
+		c |= (unsigned char)is.Take();
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xFEu); os.Put(0xFFu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put((c >> 8) & 0xFFu);
+		os.Put(c & 0xFFu);
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// UTF32
+
+//! UTF-32 encoding. 
+/*! http://en.wikipedia.org/wiki/UTF-32
+	\tparam Ch Type for storing 32-bit UTF-32 data. Default is unsigned. C++11 may use char32_t instead.
+	\implements Encoding
+
+	\note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness.
+	For streaming, use UTF32LE and UTF32BE, which handle endianness.
+*/
+template<typename CharType = unsigned>
+struct UTF32 {
+	typedef CharType Ch;
+	RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 4);
+
+	template<typename OutputStream>
+	static void Encode(OutputStream& os, unsigned codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 4);
+		RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
+		os.Put(codepoint);
+	}
+
+	template <typename InputStream>
+	static bool Decode(InputStream& is, unsigned* codepoint) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4);
+		Ch c = is.Take();
+		*codepoint = c;
+		return c <= 0x10FFFF;
+	}
+
+	template <typename InputStream, typename OutputStream>
+	static bool Validate(InputStream& is, OutputStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4);
+		Ch c;
+		os.Put(c = is.Take());
+		return c <= 0x10FFFF;
+	}
+};
+
+//! UTF-32 little endian enocoding.
+template<typename CharType = unsigned>
+struct UTF32LE : UTF32<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned)c == 0x0000FEFFu ? Take(is) : c;
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take();
+		c |= (unsigned char)is.Take() << 8;
+		c |= (unsigned char)is.Take() << 16;
+		c |= (unsigned char)is.Take() << 24;
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0xFFu); os.Put(0xFEu); os.Put(0x00u); os.Put(0x00u);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(c & 0xFFu);
+		os.Put((c >> 8) & 0xFFu);
+		os.Put((c >> 16) & 0xFFu);
+		os.Put((c >> 24) & 0xFFu);
+	}
+};
+
+//! UTF-32 big endian encoding.
+template<typename CharType = unsigned>
+struct UTF32BE : UTF32<CharType> {
+	template <typename InputByteStream>
+	static CharType TakeBOM(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = Take(is);
+		return (unsigned)c == 0x0000FEFFu ? Take(is) : c; 
+	}
+
+	template <typename InputByteStream>
+	static CharType Take(InputByteStream& is) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
+		CharType c = (unsigned char)is.Take() << 24;
+		c |= (unsigned char)is.Take() << 16;
+		c |= (unsigned char)is.Take() << 8;
+		c |= (unsigned char)is.Take();
+		return c;
+	}
+
+	template <typename OutputByteStream>
+	static void PutBOM(OutputByteStream& os) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put(0x00u); os.Put(0x00u); os.Put(0xFEu); os.Put(0xFFu);
+	}
+
+	template <typename OutputByteStream>
+	static void Put(OutputByteStream& os, CharType c) {
+		RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1);
+		os.Put((c >> 24) & 0xFFu);
+		os.Put((c >> 16) & 0xFFu);
+		os.Put((c >> 8) & 0xFFu);
+		os.Put(c & 0xFFu);
+	}
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// AutoUTF
+
+//! Runtime-specified UTF encoding type of a stream.
+enum UTFType {
+	kUTF8 = 0,		//!< UTF-8.
+	kUTF16LE = 1,	//!< UTF-16 little endian.
+	kUTF16BE = 2,	//!< UTF-16 big endian.
+	kUTF32LE = 3,	//!< UTF-32 little endian.
+	kUTF32BE = 4,	//!< UTF-32 big endian.
+};
+
+//! Dynamically select encoding according to stream's runtime-specified UTF encoding type.
+/*! \note This class can be used with AutoUTFInputtStream and AutoUTFOutputStream, which provides GetType().
+*/
+template<typename CharType>
+struct AutoUTF {
+	typedef CharType Ch;
+
+#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
+
+	template<typename OutputStream>
+	RAPIDJSON_FORCEINLINE static void Encode(OutputStream& os, unsigned codepoint) {
+		typedef void (*EncodeFunc)(OutputStream&, unsigned);
+		static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Encode) };
+		(*f[os.GetType()])(os, codepoint);
+	}
+
+	template <typename InputStream>
+	RAPIDJSON_FORCEINLINE static bool Decode(InputStream& is, unsigned* codepoint) {
+		typedef bool (*DecodeFunc)(InputStream&, unsigned*);
+		static const DecodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Decode) };
+		return (*f[is.GetType()])(is, codepoint);
+	}
+
+	template <typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
+		typedef bool (*ValidateFunc)(InputStream&, OutputStream&);
+		static const ValidateFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Validate) };
+		return (*f[is.GetType()])(is, os);
+	}
+
+#undef RAPIDJSON_ENCODINGS_FUNC
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Transcoder
+
+//! Encoding conversion.
+template<typename SourceEncoding, typename TargetEncoding>
+struct Transcoder {
+	//! Take one Unicode codepoint from source encoding, convert it to target encoding and put it to the output stream.
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) {
+		unsigned codepoint;
+		if (!SourceEncoding::Decode(is, &codepoint))
+			return false;
+		TargetEncoding::Encode(os, codepoint);
+		return true;
+	}
+
+	//! Validate one Unicode codepoint from an encoded stream.
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
+		return Transcode(is, os);	// Since source/target encoding is different, must transcode.
+	}
+};
+
+//! Specialization of Transcoder with same source and target encoding.
+template<typename Encoding>
+struct Transcoder<Encoding, Encoding> {
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) {
+		os.Put(is.Take());	// Just copy one code unit. This semantic is different from primary template class.
+		return true;
+	}
+	
+	template<typename InputStream, typename OutputStream>
+	RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
+		return Encoding::Validate(is, os);	// source/target encoding are the same
+	}
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_ENCODINGS_H_

+ 74 - 0
engine/source/persistence/rapidjson/include/rapidjson/filereadstream.h

@@ -0,0 +1,74 @@
+#ifndef RAPIDJSON_FILEREADSTREAM_H_
+#define RAPIDJSON_FILEREADSTREAM_H_
+
+#include "rapidjson.h"
+#include <cstdio>
+
+namespace rapidjson {
+
+//! File byte stream for input using fread().
+/*!
+	\implements Stream
+*/
+class FileReadStream {
+public:
+	typedef char Ch;	//!< Character type (byte).
+
+	//! Constructor.
+	/*!
+		\param fp File pointer opened for read.
+		\param buffer user-supplied buffer.
+		\param bufferSize size of buffer in bytes. Must >=4 bytes.
+	*/
+	FileReadStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { 
+		RAPIDJSON_ASSERT(fp_ != 0);
+		RAPIDJSON_ASSERT(bufferSize >= 4);
+		Read();
+	}
+
+	Ch Peek() const { return *current_; }
+	Ch Take() { Ch c = *current_; Read(); return c; }
+	size_t Tell() const { return count_ + (current_ - buffer_); }
+
+	// Not implemented
+	void Put(Ch) { RAPIDJSON_ASSERT(false); }
+	void Flush() { RAPIDJSON_ASSERT(false); } 
+	Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
+
+	// For encoding detection only.
+	const Ch* Peek4() const {
+		return (current_ + 4 <= bufferLast_) ? current_ : 0;
+	}
+
+private:
+	void Read() {
+		if (current_ < bufferLast_)
+			++current_;
+		else if (!eof_) {
+			count_ += readCount_;
+			readCount_ = fread(buffer_, 1, bufferSize_, fp_);
+			bufferLast_ = buffer_ + readCount_ - 1;
+			current_ = buffer_;
+
+			if (readCount_ < bufferSize_) {
+				buffer_[readCount_] = '\0';
+				++bufferLast_;
+				eof_ = true;
+			}
+		}
+	}
+
+	FILE* fp_;
+	Ch *buffer_;
+	size_t bufferSize_;
+	Ch *bufferLast_;
+	Ch *current_;
+	size_t readCount_;
+	size_t count_;	//!< Number of characters read
+	bool eof_;
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 49 - 0
engine/source/persistence/rapidjson/include/rapidjson/filestream.h

@@ -0,0 +1,49 @@
+#ifndef RAPIDJSON_FILESTREAM_H_
+#define RAPIDJSON_FILESTREAM_H_
+
+#include "rapidjson.h"
+#include <cstdio>
+
+namespace rapidjson {
+
+//! (Depreciated) Wrapper of C file stream for input or output.
+/*!
+	This simple wrapper does not check the validity of the stream.
+	\implements Stream
+	\deprecated { This was only for basic testing in version 0.1, it is found that the performance is very low by using fgetc(). Use FileReadStream instead. }
+*/
+class FileStream {
+public:
+	typedef char Ch;	//!< Character type. Only support char.
+
+	FileStream(FILE* fp) : fp_(fp), count_(0) { Read(); }
+	char Peek() const { return current_; }
+	char Take() { char c = current_; Read(); return c; }
+	size_t Tell() const { return count_; }
+	void Put(char c) { fputc(c, fp_); }
+	void Flush() { fflush(fp_); }
+
+	// Not implemented
+	char* PutBegin() { return 0; }
+	size_t PutEnd(char*) { return 0; }
+
+private:
+	void Read() {
+		RAPIDJSON_ASSERT(fp_ != 0);
+		int c = fgetc(fp_);
+		if (c != EOF) {
+			current_ = (char)c;
+			count_++;
+		}
+		else if (current_ != '\0')
+			current_ = '\0';
+	}
+
+	FILE* fp_;
+	char current_;
+	size_t count_;
+};
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

+ 73 - 0
engine/source/persistence/rapidjson/include/rapidjson/filewritestream.h

@@ -0,0 +1,73 @@
+#ifndef RAPIDJSON_FILEWRITESTREAM_H_
+#define RAPIDJSON_FILEWRITESTREAM_H_
+
+#include "rapidjson.h"
+#include <cstdio>
+
+namespace rapidjson {
+
+//! Wrapper of C file stream for input using fread().
+/*!
+	\implements Stream
+*/
+class FileWriteStream {
+public:
+	typedef char Ch;	//!< Character type. Only support char.
+
+	FileWriteStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) { 
+		RAPIDJSON_ASSERT(fp_ != 0);
+	}
+
+	void Put(char c) { 
+		if (current_ >= bufferEnd_)
+			Flush();
+
+		*current_++ = c;
+	}
+
+	void PutN(char c, size_t n) {
+		size_t avail = bufferEnd_ - current_;
+		while (n > avail) {
+			memset(current_, c, avail);
+			current_ += avail;
+			Flush();
+			n -= avail;
+			avail = bufferEnd_ - current_;
+		}
+
+		if (n > 0) {
+			memset(current_, c, n);
+			current_ += n;
+		}
+	}
+
+	void Flush() {
+		if (current_ != buffer_) {
+			fwrite(buffer_, 1, current_ - buffer_, fp_);
+			current_ = buffer_;
+		}
+	}
+
+	// Not implemented
+	char Peek() const { RAPIDJSON_ASSERT(false); return 0; }
+	char Take() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
+	char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
+	size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; }
+
+private:
+	FILE* fp_;
+	char *buffer_;
+	char *bufferEnd_;
+	char *current_;
+};
+
+//! Implement specialized version of PutN() with memset() for better performance.
+template<>
+inline void PutN(FileWriteStream& stream, char c, size_t n) {
+	stream.PutN(c, n);
+}
+
+} // namespace rapidjson
+
+#endif // RAPIDJSON_FILESTREAM_H_

Some files were not shown because too many files changed in this diff