diff options
| author | Rye <rye@alchemyviewer.org> | 2025-10-24 01:38:56 -0400 |
|---|---|---|
| committer | Rye <rye@alchemyviewer.org> | 2025-10-27 04:59:14 -0400 |
| commit | 1727c4d26429dd256fb2cd90fa83085e976794cc (patch) | |
| tree | 532a24aa7e9bf659404f79c9d372c409b54a094e | |
| parent | f7da57ddda41a4671949566ba4d13fe12fa68922 (diff) | |
Reintroduce llappearanceutility to viewer tree from archive/develop
Signed-off-by: Rye <rye@alchemyviewer.org>
50 files changed, 5058 insertions, 60 deletions
diff --git a/.gitattributes b/.gitattributes index 5c7f5b73b0..e7c2f83897 100644 --- a/.gitattributes +++ b/.gitattributes @@ -24,6 +24,10 @@ *.dll binary *.exe binary +# Test Resources +*.binary binary +*.output binary + # Files with Windows line endings VivoxAUP.txt text eol=crlf FILES_ARE_UNICODE_UTF-16LE.txt text eol=crlf diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 4c948e5586..db7d21b961 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -298,6 +298,16 @@ jobs: path: | ${{ steps.build.outputs.physicstpv }} + - name: Upload appearance utility package + uses: actions/upload-artifact@v4 + if: steps.build.outputs.appearanceutility + with: + name: "${{ steps.build.outputs.artifact }}-appearanceutility" + # emitted by build.sh, zero or one lines + path: | + ${{ steps.build.outputs.appearanceutility }} + + sign-and-package-windows: env: AZURE_KEY_VAULT_URI: ${{ secrets.AZURE_KEY_VAULT_URI }} diff --git a/autobuild.xml b/autobuild.xml index 78b235fabb..85b3ea4e63 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1241,36 +1241,6 @@ <key>description</key> <string>Libxml2 is the XML C parser and toolkit developed for the Gnome project.</string> </map> - <key>llappearance_utility</key> - <map> - <key>platforms</key> - <map> - <key>linux</key> - <map> - <key>archive</key> - <map> - <key>hash</key> - <string>fddd634dec5ec03924d62cc774f7f8ea</string> - <key>url</key> - <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/p64_viewer-llappearance-utility/rev/317266/arch/Linux/installer/llappearance_utility-0.0.1-linux-317266.tar.bz2</string> - </map> - <key>name</key> - <string>linux</string> - </map> - </map> - <key>license</key> - <string>Proprietary</string> - <key>license_file</key> - <string>LICENSES/llappearanceutility.txt</string> - <key>copyright</key> - <string>Copyright (c) 2000-2012, Linden Research, Inc.</string> - <key>version</key> - <string>0.0.1</string> - <key>name</key> - <string>llappearance_utility</string> - <key>description</key> - <string>Linden Lab appearance utility for server-side avatar baking services.</string> - </map> <key>llca</key> <map> <key>platforms</key> @@ -119,11 +119,13 @@ EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) metadata=() symbolfile=() physicstpv=() +appearanceutility=() # and dump them to GITHUB_OUTPUT when done cleanup="$cleanup ; \ arrayoutput metadata ; \ arrayoutput symbolfile ; \ -arrayoutput physicstpv" +arrayoutput physicstpv ; \ +arrayoutput appearanceutility" trap "$cleanup" EXIT arrayoutput() @@ -537,6 +539,14 @@ then symbolfile+=("$symbol_file") fi + # Upload our apperance utility packages for linux + if [ "$arch" == "Linux" ] + then + appearance_utility_dir="${build_dir}/llappearanceutility" + appearanceutility+=("${appearance_utility_dir}/appearance-utility-bin") + appearanceutility+=("${appearance_utility_dir}/appearance-utility-headless-bin") + fi + # Upload the llphysicsextensions_tpv package, if one was produced # Only upload this package when building the private repo so the # artifact is private. diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 8fde58fa43..571465c707 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -103,16 +103,8 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins) endif (ENABLE_MEDIA_PLUGINS) if (LINUX) - if (INSTALL_PROPRIETARY) - include(LLAppearanceUtility) - add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR}) - endif (INSTALL_PROPRIETARY) -elseif (WINDOWS) - # cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake - if (EXISTS ${VIEWER_DIR}win_setup) - add_subdirectory(${VIEWER_DIR}win_setup) - endif (EXISTS ${VIEWER_DIR}win_setup) -endif (LINUX) + add_subdirectory(llappearanceutility) +endif() if (WINDOWS) # cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake diff --git a/indra/cmake/LLAppearanceUtility.cmake b/indra/cmake/LLAppearanceUtility.cmake deleted file mode 100644 index 0eb3c723d5..0000000000 --- a/indra/cmake/LLAppearanceUtility.cmake +++ /dev/null @@ -1,12 +0,0 @@ -# -*- cmake -*- -include(Prebuilt) -include(Boost) - -# Linux proprietary build only -if (INSTALL_PROPRIETARY) - if(LINUX) - use_prebuilt_binary(llappearance_utility) - set(LLAPPEARANCEUTILITY_SRC_DIR ${LIBS_PREBUILT_DIR}/llappearanceutility/src) - set(LLAPPEARANCEUTILITY_BIN_DIR ${CMAKE_BINARY_DIR}/llappearanceutility) - endif (LINUX) -endif (INSTALL_PROPRIETARY) diff --git a/indra/llappearance/llavatarappearancedefines.cpp b/indra/llappearance/llavatarappearancedefines.cpp index 47798844bc..f26795123f 100644 --- a/indra/llappearance/llavatarappearancedefines.cpp +++ b/indra/llappearance/llavatarappearancedefines.cpp @@ -260,7 +260,7 @@ ETextureIndex LLAvatarAppearanceDictionary::bakedToLocalTextureIndex(EBakedTextu return getBakedTexture(index)->mTextureIndex; } -EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByRegionName(std::string name) +EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByRegionName(const std::string& name) const { U8 index = 0; while (index < BAKED_NUM_INDICES) @@ -277,7 +277,7 @@ EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByRegionName(std::stri return BAKED_NUM_INDICES; } -EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByImageName(std::string name) +EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByImageName(const std::string& name) const { U8 index = 0; while (index < BAKED_NUM_INDICES) diff --git a/indra/llappearance/llavatarappearancedefines.h b/indra/llappearance/llavatarappearancedefines.h index 50a72a45a5..0f9edc1ca0 100644 --- a/indra/llappearance/llavatarappearancedefines.h +++ b/indra/llappearance/llavatarappearancedefines.h @@ -238,8 +238,8 @@ public: ETextureIndex bakedToLocalTextureIndex(EBakedTextureIndex t) const; // find a baked texture index based on its name - EBakedTextureIndex findBakedByRegionName(std::string name); - EBakedTextureIndex findBakedByImageName(std::string name); + EBakedTextureIndex findBakedByRegionName(const std::string& name) const; + EBakedTextureIndex findBakedByImageName(const std::string& name) const; // Given a texture entry, determine which wearable type owns it. LLWearableType::EType getTEWearableType(ETextureIndex index) const; diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index b3800e6981..389efe47a9 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -435,6 +435,31 @@ const std::string LLTexLayerSet::getBodyRegionName() const return mInfo->mBodyRegion; } +// virtual +void LLTexLayerSet::asLLSD(LLSD& sd) const +{ + sd["visible"] = LLSD::Boolean(isVisible()); + LLSD layer_list_sd; + layer_list_t::const_iterator layer_iter = mLayerList.begin(); + layer_list_t::const_iterator layer_end = mLayerList.end(); + for(; layer_iter != layer_end; ++layer_iter) + { + LLSD layer_sd; + LLTexLayerInterface* layer = (*layer_iter); + if (layer) + { + layer->asLLSD(layer_sd); + } + layer_list_sd.append(layer_sd); + } + LLSD mask_list_sd; + LLSD info_sd; + sd["layers"] = layer_list_sd; + sd["masks"] = mask_list_sd; + sd["info"] = info_sd; +} + + void LLTexLayerSet::destroyComposite() { if( mComposite ) diff --git a/indra/llappearance/lltexlayer.h b/indra/llappearance/lltexlayer.h index 876ea6f600..6b501474d6 100644 --- a/indra/llappearance/lltexlayer.h +++ b/indra/llappearance/lltexlayer.h @@ -220,6 +220,8 @@ public: static bool sHasCaches; + virtual void asLLSD(LLSD& sd) const; + protected: typedef std::vector<LLTexLayerInterface *> layer_list_t; layer_list_t mLayerList; diff --git a/indra/llappearance/lltexlayerparams.h b/indra/llappearance/lltexlayerparams.h index 5e785e4f3e..116eb3bee0 100644 --- a/indra/llappearance/lltexlayerparams.h +++ b/indra/llappearance/lltexlayerparams.h @@ -30,6 +30,7 @@ #include "llpointer.h" #include "v4color.h" #include "llviewervisualparam.h" +#include <atomic> class LLAvatarAppearance; class LLImageRaw; diff --git a/indra/llappearanceutility/CMakeLists.txt b/indra/llappearanceutility/CMakeLists.txt new file mode 100644 index 0000000000..1d4e5309ba --- /dev/null +++ b/indra/llappearanceutility/CMakeLists.txt @@ -0,0 +1,78 @@ +# -*- cmake -*- + +project(appearance_utility) + +include(00-Common) +include(Boost) +include(LLAppearance) +include(LLCommon) +include(LLImage) +include(LLMath) +include(LLWindow) +include(Linking) + +set(appearance_utility_SOURCE_FILES + appearance_utility.cpp + llappappearanceutility.cpp + llbakingavatar.cpp + llbakingjoint.cpp + llbakingjointmesh.cpp + llbakingprocess.cpp + llbakingshadermgr.cpp + llbakingtexlayer.cpp + llbakingtexture.cpp + llbakingwearable.cpp + llbakingwearablesdata.cpp + llbakingwindow.cpp + llprocessparams.cpp + llprocessskin.cpp + llprocesstexture.cpp + ) + +set(appearance_utility_HEADER_FILES + CMakeLists.txt + llappappearanceutility.h + llbakingavatar.h + llbakingjoint.h + llbakingjointmesh.h + llbakingprocess.h + llbakingshadermgr.h + llbakingtexlayer.h + llbakingtexture.h + llbakingwearable.h + llbakingwearablesdata.h + llbakingwindow.h + llprocessparams.h + llprocessskin.h + llprocesstexture.h + ) + +set_source_files_properties(${appearance_utility_HEADER_FILES} + PROPERTIES HEADER_FILES_ONLY TRUE) + +list(APPEND appearance_utility_SOURCE_FILES ${appearance_utility_HEADER_FILES}) + +add_executable(appearance-utility-bin ${appearance_utility_SOURCE_FILES}) + +target_link_libraries(appearance-utility-bin + llcharacter + llinventory + llappearance + llwindow + llrender + llxml + ) + +if (BUILD_HEADLESS) + add_executable(appearance-utility-headless-bin ${appearance_utility_SOURCE_FILES}) + + target_link_libraries(appearance-utility-headless-bin + llcharacter + llinventory + llappearanceheadless + llwindowheadless + llrenderheadless + llxml + ) +endif (BUILD_HEADLESS) + diff --git a/indra/llappearanceutility/README.md b/indra/llappearanceutility/README.md new file mode 100644 index 0000000000..21019ffd27 --- /dev/null +++ b/indra/llappearanceutility/README.md @@ -0,0 +1,33 @@ +# llappearanceutility + +This directory contains the appearance utility employed by the bake service to process avatar textures and handle various other appearance-related functions. Please note that this utility is currently configured to build only on Linux systems. + +## Prerequisites + +Ensure the following prerequisites are met before building and testing the utility: + +- **X11 Display**: Ensure an X11 display is available, either virtual or physical, with the `DISPLAY` environment variable set appropriately (e.g., `DISPLAY=:1`). +- **Linux Build Environment**: Confirm that the Second Life Viewer can be built on your Linux system. + +## Testing + +Given the constraints with GitHub runners, we instead utilize Behavior-Driven Development (BDD) tests to evaluate the `llappearanceutility` through the bake service. For local development, test inputs and their expected outputs are provided below. + +### Test Commands + +1. **Baking Textures**: + ```sh + appearance-utility-bin --agent-id de494a4f-f01a-47a4-98cf-c94ef9ecca38 --texture /viewer/indra/llappearanceutility/tests/texture.llsd.binary > /viewer/indra/llappearanceutility/tests/texture.llsd.output + ``` + +2. **Generating Bake Parameters**: + ```sh + appearance-utility-bin --agent-id de494a4f-f01a-47a4-98cf-c94ef9ecca38 --params /viewer/indra/llappearanceutility/tests/params.xml > /viewer/indra/llappearanceutility/tests/params.xml.output + ``` + +3. **Calculating Joint Offsets**: + ```sh + appearance-utility-bin --agent-id de494a4f-f01a-47a4-98cf-c94ef9ecca38 --joint-offsets /viewer/indra/llappearanceutility/tests/joint-offsets.xml > /viewer/indra/llappearanceutility/tests/joint-offsets.xml.output + ``` + +These commands will execute the utility with specific test inputs and direct the output to corresponding files for validation.
\ No newline at end of file diff --git a/indra/llappearanceutility/appearance_utility.cpp b/indra/llappearanceutility/appearance_utility.cpp new file mode 100644 index 0000000000..88034cd171 --- /dev/null +++ b/indra/llappearanceutility/appearance_utility.cpp @@ -0,0 +1,66 @@ +/** + * @file appearance_utility.cpp + * @author Don Kjer <don@lindenlab.com>, Nyx Linden + * @brief Utility for processing avatar appearance without a full viewer implementation. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" +#include "llapr.h" + +// project includes +#include "llappappearanceutility.h" + +int main(int argc, char** argv) +{ + // Create an application instance. + ll_init_apr(); + LLAppAppearanceUtility* app = new LLAppAppearanceUtility(argc, argv); + + // Assume success, unless exception is thrown. + EResult rv = RV_SUCCESS; + try + { + // Process command line and initialize system. + if (app->init()) + { + // Run process. + app->frame(); + } + } + catch (LLAppException& e) + { + // Deal with errors. + rv = e.getStatusCode(); + } + + // Clean up application instance. + app->cleanup(); + delete app; + ll_cleanup_apr(); + + return (int) rv; +} + + diff --git a/indra/llappearanceutility/llappappearanceutility.cpp b/indra/llappearanceutility/llappappearanceutility.cpp new file mode 100644 index 0000000000..d223c859ab --- /dev/null +++ b/indra/llappearanceutility/llappappearanceutility.cpp @@ -0,0 +1,681 @@ +/** + * @file llappappearanceutility.cpp + * @brief Implementation of LLAppAppearanceUtility class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include <iostream> +#include <sstream> +#include <string> +#include "boost/bind.hpp" + +// linden includes +#include "linden_common.h" + +#include "llapr.h" +#include "llerrorcontrol.h" +#include "llfasttimer.h" +#include "llgl.h" +#include "llmd5.h" +#include "llsd.h" +#include "llsdserialize.h" +#include "llsdutil.h" +#include "llquantize.h" +#include "lltreeiterators.h" +#include "v3color.h" +#include "llwindow.h" +#include "lltrace.h" + +// appearance includes +#include "llavatarappearance.h" +#include "llwearabletype.h" + +// project includes +#include "llappappearanceutility.h" +#include "llbakingprocess.h" +#include "llprocessparams.h" +#include "llprocesstexture.h" +#include "llprocessskin.h" + +const std::string NOTHING_EXTRA(""); + +//////////////////////////////////////////// +// LLAppException +//////////////////////////////////////////// + +static const std::string MESSAGE_RV_UNKNOWN("Unknown error."); +static const std::string MESSAGE_RV_ARGUMENTS +("Invalid arguments: "); +static const std::string MESSAGE_RV_UNABLE_OPEN("Unable to open file: "); +static const std::string MESSAGE_RV_UNABLE_TO_PARSE("Unable to parse input LLSD."); +static const std::string MESSAGE_RV_UNABLE_TO_DECODE("Unable to decode input J2C."); +static const std::string MESSAGE_RV_UNABLE_TO_ENCODE("Unable to encode output J2C."); +static const std::string MESSAGE_RV_UNABLE_TO_INIT_GL("Unable to initialize GL."); +static const std::string MESSAGE_RV_UNABLE_TO_BAKE("Unable to bake texture."); +static const std::string MESSAGE_RV_INVALID_SKIN_BLOCK("Invalid skin block."); +static const std::string MESSAGE_DUPLICATE_MODES = "Cannot specify more than one process mode."; + + +LLAppException::LLAppException(EResult status_code, const std::string& extra) : + mStatusCode(status_code) +{ + switch(status_code) + { + case RV_UNKNOWN_ERROR: + printErrorLLSD("unknown", MESSAGE_RV_UNKNOWN); + case RV_BAD_ARGUMENTS: + printErrorLLSD("arguments", MESSAGE_RV_ARGUMENTS + extra); + break; + case RV_UNABLE_OPEN: + printErrorLLSD("file", MESSAGE_RV_UNABLE_OPEN + extra); + break; + case RV_UNABLE_TO_PARSE: + printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_PARSE + extra); + break; + case RV_UNABLE_TO_DECODE: + printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_DECODE + extra); + break; + case RV_UNABLE_TO_ENCODE: + printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_ENCODE + extra); + break; + case RV_UNABLE_TO_INIT_GL: + printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_INIT_GL + extra); + break; + case RV_UNABLE_TO_BAKE: + printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_BAKE + extra); + break; + case RV_INVALID_SKIN_BLOCK: + printErrorLLSD("input", MESSAGE_RV_INVALID_SKIN_BLOCK + extra); + break; + default: + printErrorLLSD("arguments", "Unknown exception."); + break; + } +} + +void LLAppException::printErrorLLSD(const std::string& key, const std::string& message) +{ + LLSD error_llsd; + error_llsd["success"] = false; + error_llsd["error"]["key"] = key; + error_llsd["error"]["message"] = message; + + std::cerr << LLSDOStreamer<LLSDXMLFormatter>(error_llsd); +} + + + +//////////////////////////////////////////// +// LLAppAppearanceUtility +//////////////////////////////////////////// + +///////// Option Parsing ///////// + +// Simple usage command. +class LLProcessUsage : public LLBakingProcess +{ +public: + LLProcessUsage(LLAppAppearanceUtility* app) : + LLBakingProcess(app) {} + void process(std::ostream& output) override + { + mApp->usage(output); + } +}; + + +static const apr_getopt_option_t APPEARANCE_UTILITY_OPTIONS[] = +{ + {"params", 'p', 0, "Generate appearance parameters for an agent."}, + {"texture", 't', 0, "Generate baked texture for a slot."}, + {"output", 'o', 1, "The output file to write to. Default is stdout"}, + {"agent-id", 'a', 1, "The agent-id of the user."}, + {"bake-size", 'b', 1, "The bake texture size. eg use 512 for 512*512 textures, 1024 for 1024*1024 textures" }, + //{"grid", 'g', 1, "The grid."}, + {"debug", 'd', 0, "Enable debug spam. Default is warn/info spam only."}, + {"treemap", 'm', 1, "Output LLFrameTimer to specified file in graphviz treemap/pachwork format."}, + {"threshold", 's', 1, "Percent threshold of max LLFrameTimer time in order to appear on treemap. Default is 1%."}, + {"joint-offsets",'j',0,"Extract joint positions from skin."}, + {"help", 'h', 0, "Print the help message."}, + {0, 0, 0, 0} +}; + +void LLAppAppearanceUtility::usage(std::ostream& ostr) +{ + ostr << "Utilities for processing agent appearance data." + << std::endl << std::endl + << "Usage:" << std::endl + << "\t" << mAppName << " [options] filename" << std::endl << std::endl + << "Will read from stdin if filename is set to '-'." << std::endl << std::endl + << "Options:" << std::endl; + const apr_getopt_option_t* option = &APPEARANCE_UTILITY_OPTIONS[0]; + while(option->name) + { + ostr << "\t--" << option->name << "\t\t" + << option->description << std::endl; + ++option; + } + ostr << std::endl << "Return Values:" << std::endl + << "\t0\t\tSuccess." << std::endl + << "\t1\t\tUnknown error." << std::endl + << "\t2\t\tBad arguments." << std::endl + << "\t3\t\tUnable to open file. Possibly wrong filename" + << " or bad permissions." << std::endl + << "\t4\t\tUnable to parse input LLSD." << std::endl + << std::endl + << "Output:" << std::endl + << "If a non-zero status code is returned, additional error information" + << " will be returned on stderr." << std::endl + << "* This will be in the form of an LLSD document." << std::endl + << "* Check ['error']['message'] to get a human readable message." << std::endl + << "If a zero status code is returned, processed output will be written" + << " to the file specified by --out (or stdout, if not specified)." << std::endl + << std::endl + << std::endl; +} + + +/////// LLApp Interface //////// + +LLAppAppearanceUtility::LLAppAppearanceUtility(int argc, char** argv) : + LLApp(), + mArgc(argc), + mArgv(argv), + mProcess(nullptr), + mInput(nullptr), + mOutput(nullptr), + mAppName(argv[0]), + mDebugMode(false), + mTreeMapThreshold(1), + mBakeTextureSize(512) +{ +} + +// virtual +LLAppAppearanceUtility::~LLAppAppearanceUtility() +{ +} + +void LLAppAppearanceUtility::verifyNoProcess() +{ + if (mProcess) + { + std::cerr << "Invalid arguments. " << MESSAGE_DUPLICATE_MODES << std::endl; + usage(std::cerr); + throw LLAppException(RV_BAD_ARGUMENTS, MESSAGE_DUPLICATE_MODES); + } +} + +void LLAppAppearanceUtility::parseArguments() +{ + ////// BEGIN OPTION PARSING ////// + // Check for '-' as last option, since apr doesn't seem to like that. + if (std::string(mArgv[mArgc-1]) == "-") + { + mInputFilename.assign("-"); + mArgc--; + } + + apr_status_t apr_err; + const char* opt_arg = nullptr; + int opt_id = 0; + apr_getopt_t* os = nullptr; + if(APR_SUCCESS != apr_getopt_init(&os, gAPRPoolp, mArgc, mArgv)) + { + std::cerr << "Unable to initialize apr" << std::endl; + throw LLAppException(RV_UNKNOWN_ERROR); + } + + //std::string grid; + while(true) + { + apr_err = apr_getopt_long(os, APPEARANCE_UTILITY_OPTIONS, &opt_id, &opt_arg); + if(APR_STATUS_IS_EOF(apr_err)) break; + if(apr_err) + { + char buf[MAX_STRING]; /* Flawfinder: ignore */ + std::cerr << "Error parsing options: " + << apr_strerror(apr_err, buf, MAX_STRING) << std::endl; + usage(std::cerr); + throw LLAppException(RV_BAD_ARGUMENTS, buf); + } + switch (opt_id) + { + case 'h': + verifyNoProcess(); + mProcess = new LLProcessUsage(this); + break; + case 'p': + verifyNoProcess(); + mProcess = new LLProcessParams(this); + break; + case 't': + verifyNoProcess(); + mProcess = new LLProcessTexture(this); + break; + case 'j': + verifyNoProcess(); + mProcess = new LLProcessSkin( this ); + break; + case 'o': + mOutputFilename.assign(opt_arg); + break; + case 'a': + mAgentID.set(opt_arg); + if (mAgentID.isNull()) + { + const char* INVALID_AGENT_ID="agent-id must be a valid uuid."; + std::cerr << "Invalid arguments. " << INVALID_AGENT_ID << std::endl; + usage(std::cerr); + throw LLAppException(RV_BAD_ARGUMENTS, INVALID_AGENT_ID); + } + break; + case 'b': + mBakeTextureSize = atoi(opt_arg); + break; + //case 'g': + // grid = opt_arg; + // break; + case 'd': + mDebugMode = true; + break; + case 'm': + mTreeMapFilename.assign(opt_arg); + break; + case 's': + mTreeMapThreshold = atoi(opt_arg); + break; + default: + usage(std::cerr); + throw LLAppException(RV_BAD_ARGUMENTS, "Unknown option."); + } + } + + if ("-" != mInputFilename) + { + bool valid_input_filename = false; + // Try to grab the input filename. + if (os->argv && os->argv[os->ind]) + { + mInputFilename.assign(os->argv[os->ind]); + if (! mInputFilename.empty() ) + { + valid_input_filename = true; + } + } + if (!valid_input_filename) + { + const char* INVALID_FILENAME="Must specify input file."; + std::cerr << "Invalid arguments. " << INVALID_FILENAME << std::endl; + usage(std::cerr); + throw LLAppException(RV_BAD_ARGUMENTS, INVALID_FILENAME); + } + } + + ////// END OPTION PARSING ////// +} + +void LLAppAppearanceUtility::validateArguments() +{ + ///// BEGIN ARGUMENT VALIDATION ///// + + // Make sure we have a command specified. + if (!mProcess) + { + const char* INVALID_MODE="No process mode specified."; + std::cerr << "Invalid arguments. " << INVALID_MODE + << std::endl; + usage(std::cerr); + throw LLAppException(RV_BAD_ARGUMENTS, INVALID_MODE); + } + + ///// END ARGUMENT VALIDATION ///// +} + +void LLAppAppearanceUtility::initializeIO() +{ + ///// BEGIN OPEN INPUT FILE //// + + if ( "-" == mInputFilename ) + { + // Read unformated data from stdin in to memory. + std::stringstream* data = new std::stringstream(); + const S32 BUFFER_SIZE = BUFSIZ; + char buffer[BUFFER_SIZE]; + while (true) + { + std::cin.read(buffer, BUFFER_SIZE); + // Check if anything out of the ordinary happened. + if (!std::cin) + { + // See if something 'really bad' happened, or if we just + // used up all of our buffer. + if (std::cin.bad()) + { + std::cerr << "Problem reading standard input." << std::endl; + delete data; + throw (RV_UNKNOWN_ERROR); + } + else + { + // Output normally. + data->write(buffer, std::cin.gcount()); + if (std::cin.eof()) break; + + // Clear this problem. We have handled it. + std::cin.clear(); + } + } + else + { + data->write(buffer, std::cin.gcount()); + if (std::cin.eof()) break; + } + } + mInput = data; + } + else + { + // Make sure we can open the input file. + std::ifstream* input_file = new std::ifstream(); + input_file->open( mInputFilename.c_str(), std::fstream::in | std::fstream::binary ); + if ( input_file->fail()) + { + std::cerr << "Couldn't open input file '" << mInputFilename << "'." << std::endl; + delete input_file; + throw LLAppException(RV_UNABLE_OPEN, mInputFilename); + } + mInput = input_file; + } + ///// END OPEN INPUT FILE //// + + ///// BEGIN OPEN OUTPUT FILE //// + + if ("" == mOutputFilename) + { + mOutput = &std::cout; + } + else + { + // Make sure we can open the output file. + std::fstream* output_file = new std::fstream(); + output_file->open( mOutputFilename.c_str(), std::fstream::out ); + if ( output_file->fail() ) + { + std::cerr << "Couldn't open output file '" << mOutputFilename << "'." << std::endl; + delete output_file; + throw LLAppException(RV_UNABLE_OPEN, mOutputFilename); + } + mOutput = output_file; + } + ///// END OPEN OUTPUT FILE //// + + ///// BEGIN INPUT PARSING //// + if (mProcess) + { + mProcess->parseInput( *mInput ); + } + ///// END INPUT PARSING //// +} + +class LLPassthroughTranslationBridge : public LLTranslationBridge +{ +public: + virtual std::string getString(const std::string &xml_desc) + { + // Just pass back the input string. + return xml_desc; + } +}; + + +bool LLAppAppearanceUtility::init() +{ + parseArguments(); + + bool log_to_stderr = true; + LLError::initForApplication(".", ".", true); + if (mDebugMode) + { + mRecording.start(); + LLError::setDefaultLevel(LLError::LEVEL_DEBUG); + } + else + { + LLError::setDefaultLevel(LLError::LEVEL_WARN); + } + + validateArguments(); + + LL_DEBUGS() << "BakeSize: " << mBakeTextureSize << LL_ENDL; + + // Initialize classes. + // Values taken from settings.xml. + const bool USE_TEXTURE_NEW_BYTE_RANGE=true; + const S32 TEXTURE_REVERSE_BYTE_RANGE=50; + LLImage::initClass(USE_TEXTURE_NEW_BYTE_RANGE, TEXTURE_REVERSE_BYTE_RANGE); + const bool SKIP_ANALYZE_ALPHA=true; + + LLTranslationBridge::ptr_t trans = std::make_shared<LLPassthroughTranslationBridge>(); + LLWearableType::initParamSingleton(trans); + + // *TODO: Create a texture bridge? + LLAvatarAppearance::initClass(); + + initializeIO(); + if (mProcess) + { + mProcess->init(); + } + return true; +} + + +void add_cluster(LLTrace::Recording& recording, std::ostream& tree, LLTrace::BlockTimerStatHandle& node, std::vector < S32 > & clusters, F64Milliseconds threshold) +{ + LLMD5 hash; + hash.update((const unsigned char*)node.getName().c_str(), node.getName().size()); + hash.finalize(); + char buf[33]; + hash.hex_digest(buf); + buf[6] = 0; + LLColor3 color(buf); + if (color.brightness() < 0.25f) + { + color.normalize(); + } + std::ostringstream color_str; + color_str << "#" << std::hex << std::setfill('0') << std::setw(2) + << (S32) F32_to_U8(color.mV[0], 0.0f, 1.0f) + << (S32) F32_to_U8(color.mV[1], 0.0f, 1.0f) + << (S32) F32_to_U8(color.mV[2], 0.0f, 1.0f); + + std::vector<S32>::iterator iter = clusters.begin(); + std::vector<S32>::iterator end = clusters.end(); + std::ostringstream padding; + for(; iter != end; ++iter) + { + padding << " "; + } + + std::ostringstream node_id; + bool first = true; + iter = clusters.begin(); + for(; iter != end; ++iter) + { + if (!first) + { + node_id << "_"; + } + first = false; + node_id << (*iter); + } + + if (node.getChildren().size() == 0) + { + F64Milliseconds leaf_time_ms(recording.getSum(node)); + if (leaf_time_ms > threshold) + { + tree << padding.str() << "n" << node_id.str() << " [" + << "label=\"" << node.getName() << " (" << leaf_time_ms.value() << ")\" " + << "fillcolor=\"" << color_str.str() << "\" " + << "area=" << leaf_time_ms.value() / 10 << "]" << std::endl; + } + } + else + { + if (clusters.size()) + { + tree << padding.str() << "subgraph cluster" << node_id.str(); + tree << " {" << std::endl; + } + + S32Milliseconds node_area(recording.getSum(node)); + std::vector<LLTrace::BlockTimerStatHandle*>::iterator child_iter = node.getChildren().begin(); + for (S32 num=0; child_iter != node.getChildren().end(); ++child_iter, ++num) + { + clusters.push_back(num); + add_cluster(recording, tree, *(*child_iter), clusters, threshold); + clusters.pop_back(); + node_area -= recording.getSum(*(*child_iter)); + } + + S32Milliseconds node_time_ms(node_area); + if (node_time_ms > threshold) + { + tree << padding.str() << "n" << node_id.str() << " [" + << "label=\"" << node.getName() << " (" << node_time_ms.value() << ")\" " + << "fillcolor=\"" << color_str.str() << "\" " + << "area=" << node_time_ms.value() / 10 << "]" << std::endl; + } + if (clusters.size()) + { + tree << padding.str() << "}" << std::endl;; + } + } +} + +bool LLAppAppearanceUtility::cleanup() +{ + if (mProcess) + { + mProcess->cleanup(); + } + + // Spam fast timer information in debug mode. + if (mDebugMode) + { + mRecording.stop(); + LLTrace::BlockTimer::processTimes(); + + S32Milliseconds max_time_ms(0); + for (LLTrace::block_timer_tree_df_iterator_t it = LLTrace::begin_block_timer_tree_df(LLTrace::BlockTimer::getRootTimeBlock()); + it != LLTrace::end_block_timer_tree_df(); + ++it) + { + LLTrace::BlockTimerStatHandle* idp = (*it); + // Skip near-zero time leafs. + S32Milliseconds leaf_time_ms(mRecording.getSum(*idp)); + if (leaf_time_ms > max_time_ms) max_time_ms = leaf_time_ms; + if ((S32Milliseconds)0 == leaf_time_ms) continue; + + std::vector< LLTrace::BlockTimerStatHandle* > parents; + LLTrace::BlockTimerStatHandle* parentp = idp->getParent(); + while (parentp) + { + parents.push_back(parentp); + if (parentp->getParent() == parentp) break; + parentp = parentp->getParent(); + } + + std::ostringstream fullname; + bool is_first = true; + for ( std::vector< LLTrace::BlockTimerStatHandle* >::reverse_iterator iter = parents.rbegin(); + iter != parents.rend(); ++iter) + { + // Skip root + if (is_first) + { + is_first = false; + continue; + } + LLTrace::BlockTimerStatHandle* parent_idp = (*iter); + U32Milliseconds time_ms(mRecording.getSum(parent_idp->selfTime())); + fullname << parent_idp->getName() << " "; + fullname << "("; + if (time_ms > (U32Milliseconds)0) + { + fullname << time_ms.value() << " ms, "; + } + fullname << mRecording.getSum(parent_idp->callCount()) << " call)-> "; + } + LL_DEBUGS() << fullname.str() << LL_ENDL; + } + if (!mTreeMapFilename.empty()) + { + std::ofstream tree(mTreeMapFilename.c_str()); + tree << "graph G {" << std::endl; + tree << " node[style=filled]" << std::endl; + + LLTrace::BlockTimerStatHandle& root = LLTrace::BlockTimer::getRootTimeBlock(); + std::vector<S32> clusters; + add_cluster(mRecording, tree, root, clusters, (((F32) mTreeMapThreshold / 100.f) * max_time_ms) ); + + tree << "}" << std::endl; + + LL_DEBUGS() << "To generate a treemap of LLFrameTimer results, run:" << LL_ENDL; + LL_DEBUGS() << "patchwork " << mTreeMapFilename << " -Tpng > rendered.png" << LL_ENDL; + } + } + + LLAvatarAppearance::cleanupClass(); + LLImageGL::cleanupClass(); + LLImage::cleanupClass(); + + if (mProcess) + { + delete mProcess; + mProcess = nullptr; + } + if ("-" != mInputFilename && mInput) + { + static_cast<std::ifstream*>(mInput)->close(); + } + if ("" != mOutputFilename && mOutput) + { + static_cast<std::ofstream*>(mOutput)->close(); + delete mOutput; + mOutput = nullptr; + } + delete mInput; + mInput = nullptr; + return true; +} + +bool LLAppAppearanceUtility::frame() +{ + // This isn't really a loop, for this application. We just execute the requested command. + mProcess->process(*mOutput); + return true; +} + diff --git a/indra/llappearanceutility/llappappearanceutility.h b/indra/llappearanceutility/llappappearanceutility.h new file mode 100644 index 0000000000..80d1e8b1bf --- /dev/null +++ b/indra/llappearanceutility/llappappearanceutility.h @@ -0,0 +1,108 @@ +/** + * @file llappappearanceutility.h + * @brief Declaration of LLAppAppearanceUtility class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLAPPAPPEARANCEUTILITY_H +#define LL_LLAPPAPPEARANCEUTILITY_H + +#include <exception> + +#include "llapp.h" +#include "lltracerecording.h" + +enum EResult +{ + RV_SUCCESS = 0, + RV_UNKNOWN_ERROR, + RV_BAD_ARGUMENTS, + RV_UNABLE_OPEN, + RV_UNABLE_TO_PARSE, + RV_UNABLE_TO_DECODE, + RV_UNABLE_TO_ENCODE, + RV_UNABLE_TO_INIT_GL, + RV_UNABLE_TO_BAKE, + RV_INVALID_SKIN_BLOCK, +}; + +extern const std::string NOTHING_EXTRA; + +class LLAppAppearanceUtility; +class LLBakingProcess; + +// Translate error status into error messages. +class LLAppException : public std::exception +{ +public: + LLAppException(EResult status_code, const std::string& extra = NOTHING_EXTRA); + EResult getStatusCode() { return mStatusCode; } + +private: + void printErrorLLSD(const std::string& key, const std::string& message); + EResult mStatusCode; +}; + + +class LLAppAppearanceUtility : public LLApp +{ +public: + LLAppAppearanceUtility(int argc, char** argv); + virtual ~LLAppAppearanceUtility(); + + // LLApp interface. + bool init() override; + bool cleanup() override; + bool frame() override; + +private: + // Option parsing. + void verifyNoProcess(); + void parseArguments(); + void validateArguments(); + void initializeIO(); +public: + void usage(std::ostream& ostr); + bool isDebugMode() const { return mDebugMode; } + S32 bakeTextureSize() const { return mBakeTextureSize; } + +private: + int mArgc; + char** mArgv; + LLBakingProcess* mProcess; + std::istream* mInput; + std::ostream* mOutput; + std::string mAppName; + std::string mInputFilename; + std::string mOutputFilename; + LLUUID mAgentID; + S32 mBakeTextureSize; + bool mDebugMode; + LLTrace::Recording mRecording; + S32 mTreeMapThreshold; + std::string mTreeMapFilename; +}; + + +#endif /* LL_LLAPPAPPEARANCEUTILITY_H */ + diff --git a/indra/llappearanceutility/llbakingavatar.cpp b/indra/llappearanceutility/llbakingavatar.cpp new file mode 100644 index 0000000000..426fa705e9 --- /dev/null +++ b/indra/llappearanceutility/llbakingavatar.cpp @@ -0,0 +1,177 @@ +/** + * @File llbakingavatar.cpp + * @brief Implementation of LLBakingAvatar class which is a derivation of LLAvatarAppearance + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" +#include "v3dmath.h" + +// appearance includes +#include "llavatarappearancedefines.h" + +// project includes +#include "llbakingavatar.h" +#include "llbakingjoint.h" +#include "llbakingjointmesh.h" +#include "llbakingtexlayer.h" + +using namespace LLAvatarAppearanceDefines; + +LLBakingAvatar::LLBakingAvatar(LLWearableData* wearable_data,S32 bakeTextureSize) : + LLAvatarAppearance(wearable_data), + mBakeTextureSize(bakeTextureSize) +{ +} + +// virtual +LLBakingAvatar::~LLBakingAvatar() +{ +} + +//----------------------------------------------------------------------------- +// Implemented methods +//----------------------------------------------------------------------------- + +LLAvatarJoint* LLBakingAvatar::createAvatarJoint() +{ + return new LLBakingJoint(); +} + +LLAvatarJoint* LLBakingAvatar::createAvatarJoint(S32 joint_num) +{ + return new LLBakingJoint(joint_num); +} + +LLAvatarJointMesh* LLBakingAvatar::createAvatarJointMesh() +{ + return new LLBakingJointMesh(); +} + +LLTexLayerSet* LLBakingAvatar::createTexLayerSet() +{ + return new LLBakingTexLayerSet(this); +} + +void LLBakingAvatar::bakedTextureDatasAsLLSD(LLSD& sd) const +{ + bakedtexturedata_vec_t::const_iterator baked_iter = mBakedTextureDatas.begin(); + bakedtexturedata_vec_t::const_iterator baked_end = mBakedTextureDatas.end(); + for (; baked_iter != baked_end; ++baked_iter) + { + LLBakingTexLayerSet* layer_set = dynamic_cast<LLBakingTexLayerSet*>(baked_iter->mTexLayerSet); + LLSD layer_sd; + layer_set->asLLSD(layer_sd); + sd[LLAvatarAppearance::getDictionary()->getTexture(baked_iter->mTextureIndex)->mName] = layer_sd; + } +} + +//----------------------------------------------------------------------------- +// (Ignored) Non-implemented methods. +//----------------------------------------------------------------------------- + +void LLBakingAvatar::applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components, + LLAvatarAppearanceDefines::EBakedTextureIndex index) {} +void LLBakingAvatar::invalidateComposite(LLTexLayerSet* layerset) {} +void LLBakingAvatar::updateMeshTextures() {} +void LLBakingAvatar::dirtyMesh() {} +void LLBakingAvatar::dirtyMesh(S32 priority) {} +void LLBakingAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color) {} + +bool LLBakingAvatar::isTextureDefined(LLAvatarAppearanceDefines::ETextureIndex type, U32 index) const +{ + return true; +} + + +//----------------------------------------------------------------------------- +// (LLERR) Non-implemented methods. +//----------------------------------------------------------------------------- + +LLVector3 LLBakingAvatar::getCharacterPosition() +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLVector3::zero; +} + +LLQuaternion LLBakingAvatar::getCharacterRotation() +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLQuaternion::DEFAULT; +} + +LLVector3 LLBakingAvatar::getCharacterVelocity() +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLVector3::zero; +} + +LLVector3 LLBakingAvatar::getCharacterAngularVelocity() +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLVector3::zero; +} + +const LLUUID& LLBakingAvatar::getID() const +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLUUID::null; +} + +void LLBakingAvatar::addDebugText(const std::string& text) +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; +} + +F32 LLBakingAvatar::getTimeDilation() +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return 0.0f; +} + +void LLBakingAvatar::getGround(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm) +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; +} + +F32 LLBakingAvatar::getPixelArea() const +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return 0.0f; +} + +LLVector3d LLBakingAvatar::getPosGlobalFromAgent(const LLVector3 &position) +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLVector3d::zero; +} + +LLVector3 LLBakingAvatar::getPosAgentFromGlobal(const LLVector3d &position) +{ + LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL; + return LLVector3::zero; +} + + + diff --git a/indra/llappearanceutility/llbakingavatar.h b/indra/llappearanceutility/llbakingavatar.h new file mode 100644 index 0000000000..8261dfc814 --- /dev/null +++ b/indra/llappearanceutility/llbakingavatar.h @@ -0,0 +1,139 @@ +/** + * @file llbakingavatar.h + * @brief Declaration of LLBakingAvatar class which is a derivation of LLAvatarAppearance + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGAVATAR_H +#define LL_LLBAKINGAVATAR_H + +#include "llavatarappearance.h" + +class LLBakingAvatar : public LLAvatarAppearance +{ + LOG_CLASS(LLBakingAvatar); + +/******************************************************************************** + ** ** + ** INITIALIZATION + **/ +public: + void* operator new(size_t size) + { + return ll_aligned_malloc_16(size); + } + + void operator delete(void* ptr) + { + ll_aligned_free_16(ptr); + } + + LLBakingAvatar(LLWearableData* wearable_data, S32 bakeTextureSize = 512); + virtual ~LLBakingAvatar(); + + static void initClass(); // initializes static members + +/** Initialization + ** ** + *******************************************************************************/ + +/******************************************************************************** + ** ** + ** INHERITED + **/ + + //-------------------------------------------------------------------- + // LLCharacter interface + //-------------------------------------------------------------------- +public: + LLVector3 getCharacterPosition() override; + LLQuaternion getCharacterRotation() override; + LLVector3 getCharacterVelocity() override; + LLVector3 getCharacterAngularVelocity() override; + + const LLUUID& getID() const override; + void addDebugText(const std::string& text) override; + F32 getTimeDilation() override; + void getGround(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm) override; + F32 getPixelArea() const override; + LLVector3d getPosGlobalFromAgent(const LLVector3 &position) override; + LLVector3 getPosAgentFromGlobal(const LLVector3d &position) override; + + //-------------------------------------------------------------------- + // LLAvatarAppearance interface + //-------------------------------------------------------------------- +public: + void applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components, + LLAvatarAppearanceDefines::EBakedTextureIndex index) override; + void invalidateComposite(LLTexLayerSet* layerset) override; + void updateMeshTextures() override; + void dirtyMesh() override; // Dirty the avatar mesh + void onGlobalColorChanged(const LLTexGlobalColor* global_color) override; + bool isTextureDefined(LLAvatarAppearanceDefines::ETextureIndex type, U32 index = 0) const override; + bool isUsingLocalAppearance() const override { return false; } + bool isEditingAppearance() const override { return false; } +private: + void dirtyMesh(S32 priority) override; // Dirty the avatar mesh, with priority + + // LLAvatarAppearance instance factories: +protected: + LLAvatarJoint* createAvatarJoint() override; + LLAvatarJoint* createAvatarJoint(S32 joint_num) override; + LLAvatarJointMesh* createAvatarJointMesh() override; + LLTexLayerSet* createTexLayerSet() override; + + +/** Inherited + ** ** + *******************************************************************************/ + +/******************************************************************************** + ** ** + ** STATE + **/ +public: + bool isSelf() const override { return true; } + bool isValid() const override { return true; } + +/** State + ** ** + *******************************************************************************/ + +/******************************************************************************** + ** ** + ** BAKING + **/ +public: + void bakedTextureDatasAsLLSD(LLSD& sd) const; + S32 bakeTextureSize() const { return mBakeTextureSize; } + +/** Baking + ** ** + *******************************************************************************/ + +private: + S32 mBakeTextureSize; +}; + +#endif /* LL_LLBAKINGAVATAR_H */ + diff --git a/indra/llappearanceutility/llbakingjoint.cpp b/indra/llappearanceutility/llbakingjoint.cpp new file mode 100644 index 0000000000..25edaa645f --- /dev/null +++ b/indra/llappearanceutility/llbakingjoint.cpp @@ -0,0 +1,54 @@ +/** + * @file llbakingjoint.cpp + * @brief Implementation of LLBakingJoint class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "linden_common.h" + +#include "llbakingjoint.h" + + +LLBakingJoint::LLBakingJoint() : + LLAvatarJoint() +{ +} + +LLBakingJoint::LLBakingJoint(S32 joint_num) : + LLAvatarJoint(joint_num) +{ +} + +// virtual +LLBakingJoint::~LLBakingJoint() +{ +} + +// virtual +U32 LLBakingJoint::render( F32 pixelArea, bool first_pass, bool is_dummy) +{ + LL_ERRS() << "LLBakingJoint::render() should never be called!" << LL_ENDL; + return 0; +} + diff --git a/indra/llappearanceutility/llbakingjoint.h b/indra/llappearanceutility/llbakingjoint.h new file mode 100644 index 0000000000..07e15a1d04 --- /dev/null +++ b/indra/llappearanceutility/llbakingjoint.h @@ -0,0 +1,44 @@ +/** + * @file llbakingjoint.h + * @brief Declaration of LLBakingJoint class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGJOINT_H +#define LL_LLBAKINGJOINT_H + +#include "llavatarjoint.h" + +class LLBakingJoint : public virtual LLAvatarJoint +{ +public: + LLBakingJoint(); + LLBakingJoint(S32 joint_num); + virtual ~LLBakingJoint(); + + // LLViewerJoint interface + U32 render( F32 pixelArea, bool first_pass = true, bool is_dummy = false ) override; +}; + +#endif /* LL_LLBAKINGJOINT_H */ + diff --git a/indra/llappearanceutility/llbakingjointmesh.cpp b/indra/llappearanceutility/llbakingjointmesh.cpp new file mode 100644 index 0000000000..b8e3283df2 --- /dev/null +++ b/indra/llappearanceutility/llbakingjointmesh.cpp @@ -0,0 +1,43 @@ +/** + * @file llbakingjointmesh.cpp + * @brief Implementation of LLBakingJointMesh class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "linden_common.h" + +#include "llbakingjointmesh.h" + + +LLBakingJointMesh::LLBakingJointMesh() : + LLAvatarJointMesh() +{ +} + +// virtual +LLBakingJointMesh::~LLBakingJointMesh() +{ +} + + diff --git a/indra/llappearanceutility/llbakingjointmesh.h b/indra/llappearanceutility/llbakingjointmesh.h new file mode 100644 index 0000000000..a66bf3f61b --- /dev/null +++ b/indra/llappearanceutility/llbakingjointmesh.h @@ -0,0 +1,45 @@ +/** + * @file llbakingjoint.h + * @brief Implementation of LLBakingJointMesh class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGJOINTMESH_H +#define LL_LLBAKINGJOINTMESH_H + +#include "llavatarjointmesh.h" +#include "llbakingjoint.h" + +class LLBakingJointMesh : public LLAvatarJointMesh, public LLBakingJoint +{ +public: + LLBakingJointMesh(); + LLBakingJointMesh(S32 joint_num); + virtual ~LLBakingJointMesh(); + + U32 render( F32 pixelArea, bool first_pass = true, bool is_dummy = false ) + { return LLBakingJoint::render(pixelArea,first_pass,is_dummy); } +}; + +#endif /* LL_LLBAKINGJOINTMESH_H */ + diff --git a/indra/llappearanceutility/llbakingprocess.cpp b/indra/llappearanceutility/llbakingprocess.cpp new file mode 100644 index 0000000000..85553b0fdb --- /dev/null +++ b/indra/llappearanceutility/llbakingprocess.cpp @@ -0,0 +1,47 @@ +/** + * @file llbakingprocess.cpp + * @brief Implementation of LLBakingProcess class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" + +#include "llsd.h" +#include "llsdserialize.h" + +// project includes +#include "llappappearanceutility.h" +#include "llbakingprocess.h" + +// virtual +void LLBakingProcess::parseInput(std::istream& input) +{ + LLSDSerialize::fromXML( mInputData, input ); + if (mInputData.isUndefined()) + { + throw LLAppException(RV_UNABLE_TO_PARSE); + } +} + + diff --git a/indra/llappearanceutility/llbakingprocess.h b/indra/llappearanceutility/llbakingprocess.h new file mode 100644 index 0000000000..de38b7a36b --- /dev/null +++ b/indra/llappearanceutility/llbakingprocess.h @@ -0,0 +1,60 @@ +/** + * @file llbakingprocess.h + * @brief Declaration of LLBakingProcess interface. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGPROCESS_H +#define LL_LLBAKINGPROCESS_H + +#include <ostream> + +class LLAppAppearanceUtility; +class LLSD; + +// Simple wrapper for various process modes. +class LLBakingProcess +{ +private: + // Hide default constructor. + LLBakingProcess() {} +public: + LLBakingProcess(LLAppAppearanceUtility* app) : + mApp(app) {} + virtual ~LLBakingProcess() {} + + virtual void parseInput(std::istream& input); + //virtual std::string getProcessName() const = 0; + virtual void process(std::ostream& output) = 0; + + virtual void init() {} + virtual void cleanup() {} + +protected: + LLAppAppearanceUtility* mApp; + LLSD mInputData; +}; + + +#endif /* LL_LLBAKINGPROCESS_H */ + diff --git a/indra/llappearanceutility/llbakingshadermgr.cpp b/indra/llappearanceutility/llbakingshadermgr.cpp new file mode 100644 index 0000000000..07c747a8a0 --- /dev/null +++ b/indra/llappearanceutility/llbakingshadermgr.cpp @@ -0,0 +1,250 @@ + +/** + * @file LLBakingShaderMgr.cpp + * @brief Viewer shader manager implementation. + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "linden_common.h" + +#include "llbakingshadermgr.h" + +#include "lldir.h" +#include "llfile.h" +#include "llrender.h" +#include "llvertexbuffer.h" + +#if LL_DARWIN +#include "OpenGL/OpenGL.h" +#endif + +#ifdef LL_RELEASE_FOR_DOWNLOAD +#define UNIFORM_ERRS LL_WARNS_ONCE("Shader") +#else +#define UNIFORM_ERRS LL_ERRS("Shader") +#endif + +// Lots of STL stuff in here, using namespace std to keep things more readable +using std::vector; +using std::pair; +using std::make_pair; +using std::string; + +bool LLBakingShaderMgr::sInitialized = false; +bool LLBakingShaderMgr::sSkipReload = false; + +//utility shaders +LLGLSLShader gAlphaMaskProgram; + + +LLBakingShaderMgr::LLBakingShaderMgr() : + mVertexShaderLevel(SHADER_COUNT, 0), + mMaxAvatarShaderLevel(0) +{ +} + +LLBakingShaderMgr::~LLBakingShaderMgr() +{ + mVertexShaderLevel.clear(); + mShaderList.clear(); +} + +// static +LLBakingShaderMgr * LLBakingShaderMgr::instance() +{ + if(nullptr == sInstance) + { + sInstance = new LLBakingShaderMgr(); + } + + return static_cast<LLBakingShaderMgr*>(sInstance); +} + +void LLBakingShaderMgr::initAttribsAndUniforms(void) +{ + if (mReservedAttribs.empty()) + { + LLShaderMgr::initAttribsAndUniforms(); + } +} + + +//============================================================================ +// Set Levels + +S32 LLBakingShaderMgr::getVertexShaderLevel(S32 type) +{ + return mVertexShaderLevel[type]; +} + +//============================================================================ +// Shader Management + +void LLBakingShaderMgr::setShaders() +{ + //setShaders might be called redundantly by gSavedSettings, so return on reentrance + static bool reentrance = false; + + if (!sInitialized || reentrance || sSkipReload) + { + return; + } + + LLGLSLShader::sIndexedTextureChannels = llmax(gGLManager.mNumTextureImageUnits, 1); + + //NEVER use more than 16 texture channels (work around for prevalent driver bug) + LLGLSLShader::sIndexedTextureChannels = llmin(LLGLSLShader::sIndexedTextureChannels, 16); + + if (gGLManager.mGLSLVersionMajor < 1 || + (gGLManager.mGLSLVersionMajor == 1 && gGLManager.mGLSLVersionMinor <= 20)) + { //NEVER use indexed texture rendering when GLSL version is 1.20 or earlier + LLGLSLShader::sIndexedTextureChannels = 1; + } + + reentrance = true; + + initAttribsAndUniforms(); + + // Shaders + LL_INFOS("ShaderLoading") << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << LL_ENDL; + LL_INFOS("ShaderLoading") << llformat("Using GLSL %d.%d", gGLManager.mGLSLVersionMajor, gGLManager.mGLSLVersionMinor) << LL_ENDL; + + for (S32 i = 0; i < SHADER_COUNT; i++) + { + mVertexShaderLevel[i] = 0; + } + mMaxAvatarShaderLevel = 0; + + LLVertexBuffer::unbind(); + bool loaded = false; + if (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 10) + { + S32 light_class = 2; + mVertexShaderLevel[SHADER_INTERFACE] = light_class; + + // loadBasicShaders + vector< pair<string, S32> > shaders; + if (gGLManager.mGLSLVersionMajor >= 2 || gGLManager.mGLSLVersionMinor >= 30) + { + shaders.push_back( make_pair( "objects/indexedTextureV.glsl", 1 ) ); + } + shaders.push_back( make_pair( "objects/nonindexedTextureV.glsl", 1 ) ); + shaders.push_back( make_pair( "deferred/textureUtilV.glsl", 1 ) ); + loaded = true; + for (U32 i = 0; i < shaders.size(); i++) + { + // Note usage of GL_VERTEX_SHADER_ARB + if (loadShaderFile(shaders[i].first, shaders[i].second, GL_VERTEX_SHADER_ARB) == 0) + { + LL_WARNS("Shader") << "Failed to load vertex shader " << shaders[i].first << LL_ENDL; + loaded = false; + break; + } + } + + shaders.clear(); + + // fragment shaders + shaders.push_back( make_pair( "deferred/globalF.glsl", 1 ) ); + + for (U32 i = 0; i < shaders.size(); i++) + { + // Note usage of GL_FRAGMENT_SHADER + if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB) == 0) + { + LL_WARNS("Shader") << "Failed to load fragment shader " << shaders[i].first << LL_ENDL; + loaded = false; + break; + } + } + + if (loaded) + { + loaded = loadShadersInterface(); + } + } + + if (!loaded) + { + //gPipeline.mVertexShadersEnabled = false; + //gPipeline.mVertexShadersLoaded = 0; + mVertexShaderLevel[SHADER_LIGHTING] = 0; + mVertexShaderLevel[SHADER_INTERFACE] = 0; + mVertexShaderLevel[SHADER_ENVIRONMENT] = 0; + mVertexShaderLevel[SHADER_WATER] = 0; + mVertexShaderLevel[SHADER_OBJECT] = 0; + mVertexShaderLevel[SHADER_EFFECT] = 0; + mVertexShaderLevel[SHADER_WINDLIGHT] = 0; + mVertexShaderLevel[SHADER_AVATAR] = 0; + } + + //gPipeline.createGLBuffers(); + + reentrance = false; +} + +void LLBakingShaderMgr::unloadShaders() +{ + gAlphaMaskProgram.unload(); + + mVertexShaderLevel[SHADER_INTERFACE] = 0; + + //gPipeline.mVertexShadersLoaded = 0; +} + +bool LLBakingShaderMgr::loadShadersInterface() +{ + gAlphaMaskProgram.mName = "Alpha Mask Shader"; + gAlphaMaskProgram.mShaderFiles.clear(); + gAlphaMaskProgram.mShaderFiles.push_back(make_pair("interface/alphamaskV.glsl", GL_VERTEX_SHADER_ARB)); + gAlphaMaskProgram.mShaderFiles.push_back(make_pair("interface/alphamaskF.glsl", GL_FRAGMENT_SHADER_ARB)); + gAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + + if( !gAlphaMaskProgram.createShader() ) + { + mVertexShaderLevel[SHADER_INTERFACE] = 0; + return false; + } + + return true; +} + +std::string LLBakingShaderMgr::getShaderDirPrefix(void) +{ + return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class"); +} + +void LLBakingShaderMgr::updateShaderUniforms(LLGLSLShader * shader) +{ +} + +LLBakingShaderMgr::shader_iter LLBakingShaderMgr::beginShaders() const +{ + return mShaderList.begin(); +} + +LLBakingShaderMgr::shader_iter LLBakingShaderMgr::endShaders() const +{ + return mShaderList.end(); +} diff --git a/indra/llappearanceutility/llbakingshadermgr.h b/indra/llappearanceutility/llbakingshadermgr.h new file mode 100644 index 0000000000..60ab3f94e8 --- /dev/null +++ b/indra/llappearanceutility/llbakingshadermgr.h @@ -0,0 +1,137 @@ +/** + * @file llbakingshadermgr.h + * @brief Texture Baking Shader Manager + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_BAKING_SHADER_MGR_H +#define LL_BAKING_SHADER_MGR_H + +#include "llshadermgr.h" + +class LLBakingShaderMgr: public LLShaderMgr +{ +public: + static bool sInitialized; + static bool sSkipReload; + + LLBakingShaderMgr(); + ~LLBakingShaderMgr(); + + // singleton pattern implementation + static LLBakingShaderMgr * instance(); + + void initAttribsAndUniforms(void) override; + void setShaders(); + void unloadShaders(); + S32 getVertexShaderLevel(S32 type); + bool loadShadersInterface(); + + std::vector<S32> mVertexShaderLevel; + S32 mMaxAvatarShaderLevel; + + enum EShaderClass + { + SHADER_LIGHTING, + SHADER_OBJECT, + SHADER_AVATAR, + SHADER_ENVIRONMENT, + SHADER_INTERFACE, + SHADER_EFFECT, + SHADER_WINDLIGHT, + SHADER_WATER, + SHADER_DEFERRED, + SHADER_TRANSFORM, + SHADER_COUNT + }; + + // simple model of forward iterator + // http://www.sgi.com/tech/stl/ForwardIterator.html + class shader_iter + { + private: + friend bool operator == (shader_iter const & a, shader_iter const & b); + friend bool operator != (shader_iter const & a, shader_iter const & b); + + typedef std::vector<LLGLSLShader *>::const_iterator base_iter_t; + public: + shader_iter() + { + } + + shader_iter(base_iter_t iter) : mIter(iter) + { + } + + LLGLSLShader & operator * () const + { + return **mIter; + } + + LLGLSLShader * operator -> () const + { + return *mIter; + } + + shader_iter & operator++ () + { + ++mIter; + return *this; + } + + shader_iter operator++ (int) + { + return mIter++; + } + + private: + base_iter_t mIter; + }; + + shader_iter beginShaders() const; + shader_iter endShaders() const; + + std::string getShaderDirPrefix(void) override; + + void updateShaderUniforms(LLGLSLShader * shader) override; + +private: + + // the list of shaders we need to propagate parameters to. + std::vector<LLGLSLShader *> mShaderList; + +}; //LLBakingShaderMgr + +inline bool operator == (LLBakingShaderMgr::shader_iter const & a, LLBakingShaderMgr::shader_iter const & b) +{ + return a.mIter == b.mIter; +} + +inline bool operator != (LLBakingShaderMgr::shader_iter const & a, LLBakingShaderMgr::shader_iter const & b) +{ + return a.mIter != b.mIter; +} + +extern LLVector4 gShinyOrigin; + +#endif // LL_BAKING_SHADER_MGR_H diff --git a/indra/llappearanceutility/llbakingtexlayer.cpp b/indra/llappearanceutility/llbakingtexlayer.cpp new file mode 100644 index 0000000000..3427331a96 --- /dev/null +++ b/indra/llappearanceutility/llbakingtexlayer.cpp @@ -0,0 +1,373 @@ +/** + * @file llbakingtexlayer.cpp + * @brief Implementation of LLBakingTexLayer class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "indra_constants.h" +#include "llappappearanceutility.h" +#include "llavatarappearance.h" +#include "llbakingtexlayer.h" +#include "llbakingwearable.h" +#include "llfasttimer.h" +#include "lllocaltextureobject.h" +#include "llimagej2c.h" +#include "llwearabledata.h" +#include "llmd5.h" +#include "llbakingavatar.h" + +//#define DEBUG_TEXTURE_IDS 1 + +static const char* BAKE_HASH_VERSION = "3"; + +using namespace LLAvatarAppearanceDefines; + +LLBakingTexLayerSetBuffer::LLBakingTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height) + : LLTexLayerSetBuffer(owner), + LLBakingTexture( width, height, 4 ) +{} + +// virtual +LLBakingTexLayerSetBuffer::~LLBakingTexLayerSetBuffer() +{ + destroyGLTexture(); +} + +bool LLBakingTexLayerSetBuffer::render() +{ + bool result = false; + + preRenderTexLayerSet(); + result = renderTexLayerSet(nullptr); + postRenderTexLayerSet(result); + + return result; +} + +static LLFastTimer::DeclareTimer FTM_MID_RENDER("midRenderTexLayerSet"); +static LLFastTimer::DeclareTimer FTM_CREATE_J2C("Encode J2C image."); +void LLBakingTexLayerSetBuffer::midRenderTexLayerSet(bool success) +{ + LL_RECORD_BLOCK_TIME(FTM_MID_RENDER); + if (!mTexLayerSet->isVisible()) + { + // Should have used IMG_INVISIBLE during hash id generation? + LL_ERRS() << "Rendered texture for non-visible tex layer set!" << LL_ENDL; + } + + if (!success) + { + throw LLAppException(RV_UNABLE_TO_BAKE, " Rendering process failed."); + } + + // Get the COLOR information from our texture + LL_DEBUGS() << "glReadPixels..." << LL_ENDL; + LL_DEBUGS() << "getCompositeWidth()" << getCompositeWidth() << "getCompositeHeight()" << getCompositeHeight() << LL_ENDL; + + U8* baked_color_data = new U8[ getCompositeWidth() * getCompositeHeight() * 4 ]; + glReadPixels(getCompositeOriginX(), getCompositeOriginY(), + getCompositeWidth(), getCompositeHeight(), + GL_RGBA, GL_UNSIGNED_BYTE, baked_color_data ); + stop_glerror(); + + // Get the MASK information from our texture + LLGLSUIDefault gls_ui; + LL_DEBUGS() << "Creating baked mask image raw.." << LL_ENDL; + LLPointer<LLImageRaw> baked_mask_image = new LLImageRaw(getCompositeWidth(), getCompositeHeight(), 1 ); + U8* baked_mask_data = baked_mask_image->getData(); + + LL_DEBUGS() << "Gathering Morph Mask Alpha..." << LL_ENDL; + mTexLayerSet->gatherMorphMaskAlpha(baked_mask_data, + getCompositeOriginX(), getCompositeOriginY(), + getCompositeWidth(), getCompositeHeight(), nullptr); + + // Create the baked image from our color and mask information + const S32 baked_image_components = 5; // red green blue [bump] clothing + LL_DEBUGS() << "Creating baked image raw.." << LL_ENDL; + LLPointer<LLImageRaw> baked_image = new LLImageRaw( getCompositeWidth(), getCompositeHeight(), baked_image_components ); + U8* baked_image_data = baked_image->getData(); + S32 i = 0; + LL_DEBUGS() << "Running ugly loop..." << LL_ENDL; + for (S32 u=0; u < getCompositeWidth(); u++) + { + for (S32 v=0; v < getCompositeHeight(); v++) + { + baked_image_data[5*i + 0] = baked_color_data[4*i + 0]; + baked_image_data[5*i + 1] = baked_color_data[4*i + 1]; + baked_image_data[5*i + 2] = baked_color_data[4*i + 2]; + baked_image_data[5*i + 3] = baked_color_data[4*i + 3]; // alpha should be correct for eyelashes. + baked_image_data[5*i + 4] = baked_mask_data[i]; + i++; + } + } + + { + LL_RECORD_BLOCK_TIME(FTM_CREATE_J2C); + LL_DEBUGS() << "Creating J2C..." << LL_ENDL; + mCompressedImage = new LLImageJ2C; + const char* comment_text = LINDEN_J2C_COMMENT_PREFIX "RGBHM"; // writes into baked_color_data. 5 channels (rgb, heightfield/alpha, mask) + if (!mCompressedImage->encode(baked_image, comment_text)) + { + throw LLAppException(RV_UNABLE_TO_ENCODE); + } + } + + delete [] baked_color_data; +} + +LLBakingTexLayerSet::LLBakingTexLayerSet(LLAvatarAppearance* const appearance) : + LLTexLayerSet(appearance) +{ +} + +// virtual +LLBakingTexLayerSet::~LLBakingTexLayerSet() +{ +} + +// Ignored. +void LLBakingTexLayerSet::requestUpdate() +{ +} + +void LLBakingTexLayerSet::createComposite() +{ + if(!mComposite) + { + const LLBakingAvatar* avatar = dynamic_cast<const LLBakingAvatar*> (mAvatarAppearance); + S32 width = avatar->bakeTextureSize(); + S32 height = avatar->bakeTextureSize(); + + LL_DEBUGS() << "Creating composite with width and height " << width << " " << height << LL_ENDL; + + mComposite = new LLBakingTexLayerSetBuffer(this, width, height); + } +} + +LLSD LLBakingTexLayerSet::computeTextureIDs() const +{ + const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = + LLAvatarAppearance::getDictionary()->getBakedTexture(getBakedTexIndex()); +#ifdef DEBUG_TEXTURE_IDS + const std::string& slot_name = LLAvatarAppearance::getDictionary()->getTexture( + LLAvatarAppearance::getDictionary()->bakedToLocalTextureIndex(getBakedTexIndex()) )->mDefaultImageName; + const LLAvatarAppearanceDictionary::TextureEntry* entry = LLAvatarAppearance::getDictionary()->getTexture(baked_dict->mTextureIndex); + LL_DEBUGS() << "-----------------------------------------------------------------" << LL_ENDL; + LL_DEBUGS() << "BakedTexIndex = " << (S32) getBakedTexIndex() << " (" << slot_name << ") " + << "BakedEntry::mTextureIndex = " << (S32) baked_dict->mTextureIndex + << " (" << entry->mDefaultImageName + << ")" << LL_ENDL; + //LL_DEBUGS() << "LLAvatarAppearanceDictionary::getTEWearableType(" << baked_dict->mTextureIndex << ") = " << (S32) LLAvatarAppearanceDictionary::getTEWearableType(baked_dict->mTextureIndex) << LL_ENDL; + + texture_vec_t::const_iterator idx_iter = baked_dict->mLocalTextures.begin(); + texture_vec_t::const_iterator idx_end = baked_dict->mLocalTextures.end(); + std::ostringstream idx_str; + for (; idx_iter != idx_end; ++idx_iter) + { + entry = LLAvatarAppearance::getDictionary()->getTexture((*idx_iter)); + idx_str << (*idx_iter) << " (" << entry->mDefaultImageName + << ";" << LLWearableType::getInstance()->getTypeName( entry->mWearableType ) + << "), "; + } + LL_DEBUGS() << "BakedEntry::mLocalTextures: " << idx_str.str() << LL_ENDL; + wearables_vec_t::const_iterator type_iter = baked_dict->mWearables.begin(); + wearables_vec_t::const_iterator type_end = baked_dict->mWearables.end(); + std::ostringstream type_str; + for (; type_iter != type_end; ++type_iter) + { + type_str << (S32) (*type_iter) << " (" + << LLWearableType::getInstance()->getTypeName( (*type_iter) ) + << "), "; + } + LL_DEBUGS() << "BakedEntry::mWearables: " << type_str.str() << LL_ENDL; + //LL_DEBUGS() << "BakedEntry::mWearablesHashID: " << baked_dict->mWearablesHashID << LL_ENDL; +#endif + + LLMD5 hash; + std::set<LLUUID> texture_ids; + + bool is_visible = true; + bool hash_computed = computeLayerListTextureIDs(hash, texture_ids, mLayerList, is_visible); + if (is_visible) + { + hash_computed |= computeLayerListTextureIDs(hash, texture_ids, mMaskLayerList, is_visible); + } + + LLUUID hash_id; + if (!is_visible) + { + hash_id = IMG_INVISIBLE; + texture_ids.clear(); + } + else if (hash_computed) + { + if ((getBakedTexIndex() == EBakedTextureIndex::BAKED_LEFT_ARM) || + (getBakedTexIndex() == EBakedTextureIndex::BAKED_LEFT_LEG) || + (getBakedTexIndex() == EBakedTextureIndex::BAKED_AUX1) || + (getBakedTexIndex() == EBakedTextureIndex::BAKED_AUX2) || + (getBakedTexIndex() == EBakedTextureIndex::BAKED_AUX3)) + { + hash.update(BAKE_HASH_VERSION); + } + + hash.update((const unsigned char*)baked_dict->mWearablesHashID.mData, UUID_BYTES); + hash.finalize(); + hash.raw_digest(hash_id.mData); + } + + if (hash_id.isNull()) + { + hash_id = IMG_DEFAULT_AVATAR; + } + + if (getBakedTexIndex() == EBakedTextureIndex::BAKED_SKIRT) + { + if (getAvatarAppearance()->getWearableData()->getWearableCount(LLWearableType::WT_SKIRT) == 0) + { + hash_id = IMG_DEFAULT_AVATAR; + texture_ids.clear(); + } + } + LLSD sd; + sd["hash_id"] = hash_id; + sd["texture_ids"] = LLSD::emptyArray(); + std::set<LLUUID>::iterator id_iter = texture_ids.begin(); + std::set<LLUUID>::iterator id_end = texture_ids.end(); + for (; id_iter != id_end; ++id_iter) + { + sd["texture_ids"].append( *id_iter ); + } + return sd; +} + +bool LLBakingTexLayerSet::computeLayerListTextureIDs(LLMD5& hash, + std::set<LLUUID>& texture_ids, + const layer_list_t& layer_list, + bool& is_visible) const +{ + is_visible = true; + bool hash_computed = false; + layer_list_t::const_iterator iter = layer_list.begin(); + layer_list_t::const_iterator end = layer_list.end(); + for (; iter != end; ++iter) + { + const LLTexLayerInterface* layer_template = *iter; + LLWearableType::EType wearable_type = layer_template->getWearableType(); + ETextureIndex te = layer_template->getLocalTextureIndex(); + U32 num_wearables = getAvatarAppearance()->getWearableData()->getWearableCount(wearable_type); +#ifdef DEBUG_TEXTURE_IDS + const LLAvatarAppearanceDictionary::TextureEntry* entry = LLAvatarAppearance::getDictionary()->getTexture(te); + if (entry) + { + LL_DEBUGS() << "LLTexLayerInterface(" << layer_template->getName() << ") type = " + << (S32) wearable_type << " (" + << LLWearableType::getInstance()->getTypeName( wearable_type ) << ") te = " + << (S32) te << " ("<< entry->mDefaultImageName + << ";" << LLWearableType::getInstance()->getTypeName( entry->mWearableType ) + << ") wearable_count = " << num_wearables << LL_ENDL; + } + else + { + LL_DEBUGS() << "LLTexLayerInterface(" << layer_template->getName() << ") type = " + << (S32) wearable_type << " (" + << LLWearableType::getInstance()->getTypeName( wearable_type ) + << ") wearable_count = " << num_wearables << LL_ENDL; + } +#endif + if (LLWearableType::WT_INVALID == wearable_type) + { + //LL_DEBUGS() << "Skipping invalid wearable type" << LL_ENDL; + continue; + } + + for (U32 i = 0; i < num_wearables; i++) + { + LLBakingWearable* wearable = dynamic_cast<LLBakingWearable*> ( + getAvatarAppearance()->getWearableData()->getWearable(wearable_type, i)); + if (!wearable) + { + //LL_DEBUGS() << "Skipping wearable" << LL_ENDL; + continue; + } +#ifdef DEBUG_TEXTURE_IDS + S32 num_ltos = wearable->getLocalTextureListSeq().size(); + LL_DEBUGS() << "LLWearable (" << wearable->getName() << ") type = " + << (S32) wearable->getAssetType() << " (" + << LLAssetType::lookup(wearable->getAssetType()) + << ") num_ltos = " << num_ltos << LL_ENDL; +#endif + LLLocalTextureObject *lto = wearable->getLocalTextureObject(te); + if (lto) + { +#ifdef DEBUG_TEXTURE_IDS + LL_DEBUGS() << "LocalTextureObject id = " << lto->getID() << " num texlayers = " << lto->getNumTexLayers() << LL_ENDL; +#endif + // Hash texture id + LLUUID texture_id = lto->getID(); + if (IMG_INVISIBLE == texture_id) + { + is_visible = false; + } + hash.update((const unsigned char*)texture_id.mData, UUID_BYTES); + hash_computed = true; + // Add texture to list. + texture_ids.insert(texture_id); + } +#ifdef DEBUG_TEXTURE_IDS + else + { + LL_DEBUGS() << "LLWearable -- no LocalTextureObject for te " << (S32) te << LL_ENDL; + } + + + for(S32 i = 0; i < (S32)TEX_NUM_INDICES; i++) + { + lto = wearable->getLocalTextureObject(i); + if (lto) + { + LL_DEBUGS() << "LTO (" << i << ") id = " << lto->getID() << " num texlayers = " << lto->getNumTexLayers() << LL_ENDL; + } + } +#endif + + for( LLVisualParam* param = getAvatarAppearance()->getFirstVisualParam(); + param; param = getAvatarAppearance()->getNextVisualParam() ) + { + // cross-wearable parameters are not authoritative, as they are driven by a different wearable. + if( (((LLViewerVisualParam*)param)->getWearableType() == wearable_type) && + (!((LLViewerVisualParam*)param)->getCrossWearable()) ) + { + std::ostringstream ostr; + F32 weight = wearable->getVisualParamWeight(param->getID()); + ostr << param->getID() << " " << weight; + hash.update(ostr.str()); + hash_computed = true; + } + } + } + } + return hash_computed; +} + diff --git a/indra/llappearanceutility/llbakingtexlayer.h b/indra/llappearanceutility/llbakingtexlayer.h new file mode 100644 index 0000000000..dc82b27ce2 --- /dev/null +++ b/indra/llappearanceutility/llbakingtexlayer.h @@ -0,0 +1,77 @@ +/** + * @file llbakingtexlayer.h + * @brief Declaration of LLBakingTexLayerSet. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGTEXLAYER_H +#define LL_LLBAKINGTEXLAYER_H + +#include "llbakingtexture.h" +#include "llimagej2c.h" +#include "llpointer.h" +#include "lltexlayer.h" + +class LLMD5; + +class LLBakingTexLayerSetBuffer : public LLTexLayerSetBuffer, public LLBakingTexture +{ + LOG_CLASS(LLBakingTexLayerSetBuffer); +public: + LLBakingTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height); + virtual ~LLBakingTexLayerSetBuffer(); + + LLImageJ2C* getCompressedImage() { return mCompressedImage; } + + bool render(); + bool bindDebugImage(const S32 stage = 0) override { return false; } + bool isActiveFetching() override { return false; }; + +private: + S32 getCompositeOriginX() const override { return 0; } + S32 getCompositeOriginY() const override { return 0; } + S32 getCompositeWidth() const override { return getFullWidth(); } + S32 getCompositeHeight() const override { return getFullHeight(); } + void midRenderTexLayerSet(bool success) override; + + LLPointer<LLImageJ2C> mCompressedImage; +}; + +class LLBakingTexLayerSet : public LLTexLayerSet +{ +public: + LLBakingTexLayerSet(LLAvatarAppearance* const appearance); + virtual ~LLBakingTexLayerSet(); + + LLSD computeTextureIDs() const; + bool computeLayerListTextureIDs(LLMD5& hash, + std::set<LLUUID>& texture_ids, + const layer_list_t& layer_list, + bool& is_visible) const; + + void requestUpdate() override; + void createComposite() override; +}; + +#endif /* LL_LLBAKINGTEXLAYER_H */ + diff --git a/indra/llappearanceutility/llbakingtexture.cpp b/indra/llappearanceutility/llbakingtexture.cpp new file mode 100644 index 0000000000..ae83081aef --- /dev/null +++ b/indra/llappearanceutility/llbakingtexture.cpp @@ -0,0 +1,81 @@ +/** + * @file llbakingtexture.cpp + * @brief Implementation of LLBakingTexture class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" + +// project includes +#include "llbakingtexture.h" +#include "llgltexture.h" +#include "llimage.h" + +static const bool USE_MIP_MAPS = true; + +LLBakingTexture::LLBakingTexture(const LLUUID& id, const LLImageRaw* raw) + : LLGLTexture(raw, USE_MIP_MAPS), + mID(id) +{ +} + +LLBakingTexture::LLBakingTexture(bool usemipmaps) + : LLGLTexture(usemipmaps), + mID(LLUUID::null) +{ +} + +LLBakingTexture::LLBakingTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps) + : LLGLTexture(width, height, components, USE_MIP_MAPS), + mID(LLUUID::null) +{ +} + +// virtual +LLBakingTexture::~LLBakingTexture() +{ +} + +void LLBakingTexture::setKnownDrawSize(S32 width, S32 height) +{ + //nothing here. + LL_ERRS() << "Not implemented." << LL_ENDL; +} + +bool LLBakingTexture::bindDefaultImage(S32 stage) +{ + LL_ERRS() << "Not implemented." << LL_ENDL; + return false; +} + +void LLBakingTexture::forceImmediateUpdate() +{ + LL_ERRS() << "Not implemented." << LL_ENDL; +} + +void LLBakingTexture::updateBindStatsForTester() +{ + LL_ERRS() << "Not implemented." << LL_ENDL; +} + diff --git a/indra/llappearanceutility/llbakingtexture.h b/indra/llappearanceutility/llbakingtexture.h new file mode 100644 index 0000000000..50b4193b2e --- /dev/null +++ b/indra/llappearanceutility/llbakingtexture.h @@ -0,0 +1,69 @@ +/** + * @file llbakingtexture.h + * @brief Declaration of LLBakingTexture class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGTEXTURE_H +#define LL_LLBAKINGTEXTURE_H + +#include "llgltexture.h" +#include "lluuid.h" + +class LLImageRaw; + +class LLBakingTexture : public LLGLTexture +{ +public: + enum + { + LOCAL_TEXTURE, + BAKING_TEXTURE, + INVALID_TEXTURE_TYPE + }; + LLBakingTexture(const LLUUID& id, const LLImageRaw* raw); + LLBakingTexture(bool usemipmaps); + LLBakingTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps = true); + const LLUUID& getID() const override { return mID; } + S8 getType() const override { return BAKING_TEXTURE; } + + // Not implemented. + void setKnownDrawSize(S32 width, S32 height) override; + bool bindDefaultImage(const S32 stage = 0) override ; + void forceImmediateUpdate() override; + void updateBindStatsForTester() override ; + bool bindDebugImage(const S32 stage = 0) override { return false; } + bool isActiveFetching() override { return false; } + +protected: + virtual ~LLBakingTexture(); + LOG_CLASS(LLBakingTexture); +private: + // Hide default constructor. + LLBakingTexture() {} + + LLUUID mID; +}; + +#endif /* LL_LLBAKINGTEXTURE_H */ + diff --git a/indra/llappearanceutility/llbakingwearable.cpp b/indra/llappearanceutility/llbakingwearable.cpp new file mode 100644 index 0000000000..0e5251aba1 --- /dev/null +++ b/indra/llappearanceutility/llbakingwearable.cpp @@ -0,0 +1,77 @@ +/** + * @file llbakingwearable.cpp + * @brief Implementation of LLBakingWearable class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "linden_common.h" + +#include "llavatarappearance.h" +#include "llavatarappearancedefines.h" +#include "llbakingwearable.h" +#include "llmd5.h" +#include "indra_constants.h" + +using namespace LLAvatarAppearanceDefines; + +LLBakingWearable::LLBakingWearable() +{ +} + +// virtual +LLBakingWearable::~LLBakingWearable() +{ +} + +// virtual +void LLBakingWearable::setUpdated() const +{ +} + +// virtual +void LLBakingWearable::addToBakedTextureHash(LLMD5& hash) const +{ +} + +// virtual +LLUUID LLBakingWearable::getDefaultTextureImageID(ETextureIndex index) const +{ + const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearance::getDictionary()->getTexture(index); + const std::string &default_image_name = texture_dict->mDefaultImageName; + if (default_image_name == "") + { + return IMG_DEFAULT_AVATAR; + } + else + { + //return LLUUID(gSavedSettings.getString(default_image_name)); + // *TODO: Fix this. + return LLUUID::null; + } +} + +void LLBakingWearable::asLLSD(LLSD& sd) const +{ + // stub implementation. TODO: fill in. +} diff --git a/indra/llappearanceutility/llbakingwearable.h b/indra/llappearanceutility/llbakingwearable.h new file mode 100644 index 0000000000..bb96dc3709 --- /dev/null +++ b/indra/llappearanceutility/llbakingwearable.h @@ -0,0 +1,48 @@ +/** + * @file llbakingwearable.h + * @brief Declaration of LLBakingWearable class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGWEARABLE_H +#define LL_LLBAKINGWEARABLE_H + +#include "llwearable.h" +#include "llmd5.h" + +class LLBakingWearable : public LLWearable +{ +public: + LLBakingWearable(); + virtual ~LLBakingWearable(); + + virtual void setUpdated() const; + virtual void addToBakedTextureHash(LLMD5& hash) const; + virtual LLUUID getDefaultTextureImageID(LLAvatarAppearanceDefines::ETextureIndex index) const; + + void asLLSD(LLSD& sd) const; + +}; + +#endif /* LL_LLBAKINGWEARABLE_H */ + diff --git a/indra/llappearanceutility/llbakingwearablesdata.cpp b/indra/llappearanceutility/llbakingwearablesdata.cpp new file mode 100644 index 0000000000..18edb86348 --- /dev/null +++ b/indra/llappearanceutility/llbakingwearablesdata.cpp @@ -0,0 +1,131 @@ +/** + * @file llbakingwearablesdata.cpp + * @brief Implementation of LLBakingWearablesData class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "linden_common.h" + +#include "llbakingwearablesdata.h" +#include "llbakingwearable.h" + +using namespace LLAvatarAppearanceDefines; + +LLBakingWearablesData::LLBakingWearablesData() +{ +} + +// virtual +LLBakingWearablesData::~LLBakingWearablesData() +{ + std::for_each(mWearables.begin(), mWearables.end(), DeletePointer()); + mWearables.clear(); +} + +void LLBakingWearablesData::setWearableOutfit(LLSD& sd) +{ + LLSD::array_const_iterator type_iter = sd.beginArray(); + LLSD::array_const_iterator type_end = sd.endArray(); + S32 wearable_index = 0; + for (; type_iter != type_end && wearable_index < (S32) LLWearableType::WT_COUNT; ++type_iter, ++wearable_index) + { + LLSD::array_const_iterator wearable_iter = type_iter->beginArray(); + LLSD::array_const_iterator wearable_end = type_iter->endArray(); + for (; wearable_iter != wearable_end; ++wearable_iter) + { + if ( wearable_iter->isDefined() ) + { + LLBakingWearable* wearable = new LLBakingWearable(); + std::istringstream istr( (*wearable_iter)["contents"].asString() ); + wearable->importStream(istr, mAvatarAppearance); + + // Sanity check the wearable type. + if (wearable->getType() != wearable_index) + { + LL_WARNS() << "Unexpected wearable type! Expected " << wearable_index + << ", processed " << (S32) wearable->getType() << LL_ENDL; + // *TODO: Throw exception? + delete wearable; + continue; + } + mWearables.push_back(wearable); + + const LLWearableType::EType type = wearable->getType(); + if (wearable->getAssetType() == LLAssetType::AT_BODYPART) + { + // exactly one wearable per body part + setWearable(type,0,wearable); + } + else + { + pushWearable(type,wearable); + } + } + } + } + + wearable_list_t::const_iterator wearable_iter = mWearables.begin(); + wearable_list_t::const_iterator wearable_end = mWearables.end(); + for (; wearable_iter != wearable_end; ++wearable_iter) + { + LLBakingWearable* wearable = (*wearable_iter); + const bool removed = false; + wearableUpdated(wearable, removed); + } + + for(wearable_index = 0; wearable_index < (S32) LLWearableType::WT_COUNT; wearable_index++) + { + LLWearable* top_wearable = getTopWearable((LLWearableType::EType)wearable_index); + if (top_wearable) + { + top_wearable->writeToAvatar(mAvatarAppearance); + } + } +} + + +void LLBakingWearablesData::asLLSD(LLSD& sd) const +{ + sd = LLSD::emptyMap(); + wearableentry_map_t::const_iterator type_iter = mWearableDatas.begin(); + wearableentry_map_t::const_iterator type_end = mWearableDatas.end(); + for (; type_iter != type_end; ++type_iter) + { + LLSD wearable_type_sd = LLSD::emptyArray(); + LLWearableType::EType wearable_type = type_iter->first; + wearableentry_vec_t::const_iterator wearable_iter = type_iter->second.begin(); + wearableentry_vec_t::const_iterator wearable_end = type_iter->second.end(); + for (; wearable_iter != wearable_end; ++wearable_iter) + { + const LLBakingWearable* wearable = dynamic_cast<LLBakingWearable*>(*wearable_iter); + LLSD wearable_sd; + wearable->asLLSD(wearable_sd); + wearable_type_sd.append(wearable_sd); + } + sd[LLWearableType::getInstance()->getTypeName(wearable_type)] = wearable_type_sd; + } +} + + + diff --git a/indra/llappearanceutility/llbakingwearablesdata.h b/indra/llappearanceutility/llbakingwearablesdata.h new file mode 100644 index 0000000000..1db2ca4bc1 --- /dev/null +++ b/indra/llappearanceutility/llbakingwearablesdata.h @@ -0,0 +1,55 @@ +/** + * @file llbakingwearablesdata.h + * @brief Declaration of LLBakingWearablesData class + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGWEARABLESDATA_H +#define LL_LLBAKINGWEARABLESDATA_H + +#include "llwearabledata.h" + +class LLBakingWearable; + +class LLBakingWearablesData : public LLWearableData +{ +public: + LLBakingWearablesData(); + virtual ~LLBakingWearablesData(); + + void setWearableOutfit(LLSD& sd); + + //-------------------------------------------------------------------- + // I/O methods + //-------------------------------------------------------------------- +public: + void asLLSD(LLSD& sd) const; + +private: + typedef std::vector<LLBakingWearable*> wearable_list_t; + wearable_list_t mWearables; + +}; + +#endif /* LL_LLBAKINGWEARABLESDATA_H */ + diff --git a/indra/llappearanceutility/llbakingwindow.cpp b/indra/llappearanceutility/llbakingwindow.cpp new file mode 100644 index 0000000000..8799105932 --- /dev/null +++ b/indra/llappearanceutility/llbakingwindow.cpp @@ -0,0 +1,94 @@ +/** + * @file llbakingwindow.cpp + * @brief Implementation of LLBakingWindow class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" + +// project includes +#include "llappappearanceutility.h" +#include "llbakingshadermgr.h" +#include "llbakingwindow.h" +#include "llgl.h" +#include "llgltexture.h" +#include "llvertexbuffer.h" + +LLBakingWindow::LLBakingWindow(S32 width, S32 height) +{ + const S32 WINDOW_ORIGIN_X = 0; + const S32 WINDOW_ORIGIN_Y = 0; + const U32 FLAGS = 32; // *TODO: Why did mapserver use this? mFlags looks unused. + const bool NO_FULLSCREEN = false; + const bool NO_CLEAR_BG = false; + const bool NO_DISABLE_VSYNC = false; + const bool NO_IGNORE_PIXEL_DEPTH = false; + const bool USE_GL = true; + mWindow = LLWindowManager::createWindow(this, + "appearanceutility", "Appearance Utility", + WINDOW_ORIGIN_X, WINDOW_ORIGIN_Y, + width, height, + FLAGS, + NO_FULLSCREEN, + NO_CLEAR_BG, + NO_DISABLE_VSYNC, //gSavedSettings.getBOOL("DisableVerticalSync"), + USE_GL, // not headless + NO_IGNORE_PIXEL_DEPTH); //gIgnorePixelDepth = false + + if (nullptr == mWindow) + { + throw LLAppException(RV_UNABLE_TO_INIT_GL); + } + + LLVertexBuffer::initClass(mWindow); + + gGL.init(true); + + if (!LLBakingShaderMgr::sInitialized) + { //immediately initialize shaders + LLBakingShaderMgr::sInitialized = true; + LLBakingShaderMgr::instance()->setShaders(); + } + + LLImageGL::initClass(mWindow, LLGLTexture::MAX_GL_IMAGE_CATEGORY, true, false); + + // mWindow->show(); + // mWindow->bringToFront(); + // mWindow->focusClient(); + // mWindow->gatherInput(); +} + +LLBakingWindow::~LLBakingWindow() +{ + if (mWindow) + { + LLWindowManager::destroyWindow(mWindow); + } + mWindow = nullptr; +} + +void LLBakingWindow::swapBuffers() +{ + mWindow->swapBuffers(); +} diff --git a/indra/llappearanceutility/llbakingwindow.h b/indra/llappearanceutility/llbakingwindow.h new file mode 100644 index 0000000000..a6bf1d8714 --- /dev/null +++ b/indra/llappearanceutility/llbakingwindow.h @@ -0,0 +1,45 @@ +/** + * @file llbakingwindow.h + * @brief Declaration of LLBakingWindow class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLBAKINGWINDOW_H +#define LL_LLBAKINGWINDOW_H + +#include "llwindow.h" +#include "llwindowcallbacks.h" + +class LLBakingWindow : public LLWindowCallbacks +{ +public: + LLBakingWindow(S32 width, S32 height); + ~LLBakingWindow(); + + void swapBuffers(); +private: + LLWindow* mWindow; +}; + +#endif /* LL_LLBAKINGWINDOW_H */ + diff --git a/indra/llappearanceutility/llprocessparams.cpp b/indra/llappearanceutility/llprocessparams.cpp new file mode 100755 index 0000000000..ad1b44e794 --- /dev/null +++ b/indra/llappearanceutility/llprocessparams.cpp @@ -0,0 +1,281 @@ +/** + * @file llprocessparams.cpp + * @brief Implementation of LLProcessParams class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" + +#include "llsd.h" +#include "llsdserialize.h" +#include "llsdutil.h" +#include "llsdutil_math.h" +#include "llstl.h" +#include "llmath.h" +#include "llquantize.h" + +// appearance includes +#include "lltexturemanagerbridge.h" +#include "llwearabletype.h" +#include "llavatarappearancedefines.h" + +// project includes +#include "llappappearanceutility.h" +#include "llbakingavatar.h" +#include "llbakingtexlayer.h" +#include "llbakingwearable.h" +#include "llbakingwearablesdata.h" +#include "llprocessparams.h" + +#define APPEARANCE_PARAM_VERSION 11000 + +const U32 FULL_RIG_JOINT_COUNT = 20; + +using namespace LLAvatarAppearanceDefines; + +// Create a bridge to the viewer texture manager. +class LLNullTextureManagerBridge : public LLTextureManagerBridge +{ +public: + LLPointer<LLGLTexture> getLocalTexture(bool usemipmaps = true, bool generate_gl_tex = true) override + { + return nullptr; + } + + LLPointer<LLGLTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps, bool generate_gl_tex = true) override + { + return nullptr; + } + + LLGLTexture* getFetchedTexture(const LLUUID &image_id) override + { + return nullptr; + } +}; + +LLSD dump_joint_offsets_for_avatar(LLBakingAvatar& avatar) +{ + LLSD joints = LLSD::emptyArray(); + + for (U32 joint_index = 0;; joint_index++) + { + LLJoint* pJoint = avatar.getCharacterJoint(joint_index); + if (!pJoint) + { + break; + } + LLVector3 pos; + LLUUID mesh_id; + if (pJoint->hasAttachmentPosOverride(pos, mesh_id)) + { + LLSD info; + info["name"] = pJoint->getName(); + info["pos"] = ll_sd_from_vector3(pos); + info["mesh_id"] = mesh_id; + joints.append(info); + } + } + + return joints; +} + +void LLProcessParams::process(std::ostream& output) +{ + if (!mInputData.has("wearables")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing wearables"); + + // Create a null-texture manager bridge. + gTextureManagerBridgep = new LLNullTextureManagerBridge(); + + // Construct the avatar. + LLBakingWearablesData wearable_data; + LLBakingAvatar avatar(&wearable_data, mApp->bakeTextureSize()); + avatar.initInstance(); + wearable_data.setAvatarAppearance(&avatar); + + //Process the params data for joint information + //bool bodySizeSet = processInputDataForJointInfo( avatar ); + + // Extract and parse wearables. + wearable_data.setWearableOutfit(mInputData["wearables"]); + + // Set appearance parameter to flag server-side baking. + avatar.setVisualParamWeight(APPEARANCE_PARAM_VERSION, 1.0f); + + avatar.setSex( (avatar.getVisualParamWeight( "male" ) > 0.5f) ? SEX_MALE : SEX_FEMALE ); + + avatar.updateVisualParams(); + + // Extract texture ids, texture hashes, and avatar scale. + LLSD texture_ids = LLSD::emptyMap(); + + //Process the params data for joint information + bool bodySizeSet = processInputDataForJointInfo( avatar ); + + //if we didn't compute a body size from a mesh attachment that included + //joint offsets we need to do it now + if (!bodySizeSet ) + { + avatar.computeBodySize(); + } + + for (U32 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++) + { + EBakedTextureIndex bake_type = (EBakedTextureIndex) baked_index; + LLBakingTexLayerSet* layer_set = dynamic_cast<LLBakingTexLayerSet*>(avatar.getAvatarLayerSet(bake_type)); + const std::string& slot_name = LLAvatarAppearance::getDictionary()->getTexture( + LLAvatarAppearance::getDictionary()->bakedToLocalTextureIndex(bake_type) )->mDefaultImageName; + texture_ids[slot_name] = layer_set->computeTextureIDs(); + } + + // Extract visual params + U32 count = 0; + LLSD params = LLSD::emptyMap(); + LLSD debug_params = LLSD::emptyMap(); + for (LLViewerVisualParam* param = (LLViewerVisualParam*)avatar.getFirstVisualParam(); + param; + param = (LLViewerVisualParam*)avatar.getNextVisualParam()) + { + if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE || + param->getGroup() == VISUAL_PARAM_GROUP_TRANSMIT_NOT_TWEAKABLE) // do not transmit params of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT + { + const F32 param_value = param->getWeight(); + const U8 new_weight = F32_to_U8(param_value, param->getMinWeight(), param->getMaxWeight()); + LLSD body; + body["name"] = param->getName(); + body["value"] = param_value; + body["weight"] = new_weight; + debug_params[LLSD(param->getID()).asString()] = body; + params.append(new_weight); + count++; + } + } + + // Output + LLSD result; + result["success"] = true; + result["params"] = params; + result["debug_params"] = debug_params; + result["slot_textures"] = texture_ids; + result["avatar_scale"] = ll_sd_from_vector3(avatar.mBodySize + avatar.mAvatarOffset); + result["dump_joint_offsets"] = dump_joint_offsets_for_avatar(avatar); + output << LLSDOStreamer<LLSDXMLFormatter>(result); +} + +bool LLProcessParams::processInputDataForJointInfo( LLBakingAvatar& avatar ) +{ + bool returnResult = false; + + if ( !mInputData.has("skindata") || mInputData["skindata"].isUndefined() ) + { + LL_DEBUGS() << "Skipping missing skindata" << LL_ENDL; + return returnResult; + } + + const LLSD& skindata = mInputData["skindata"]; + + //float pelvisOffset = 0.0f; + std::vector<std::string> jointNames; + std::vector<LLVector3> jointOffsets; + + LLSD::map_const_iterator skinIter = skindata.beginMap(); + LLSD::map_const_iterator skinIterEnd = skindata.endMap(); + + for ( ; skinIter!=skinIterEnd; ++skinIter ) + { + const LLSD& skin = skinIter->second; + const char *uuid_str = skinIter->first.c_str(); + const LLUUID mesh_id(uuid_str); + + if ( !skin.has("joint_names") || !skin.has("joint_offset") ) + { + throw LLAppException(RV_INVALID_SKIN_BLOCK); + } + + // Build list of joints + { + LLSD::array_const_iterator iter(skin["joint_names"].beginArray()); + LLSD::array_const_iterator iter_end(skin["joint_names"].endArray()); + for ( ; iter != iter_end; ++iter ) + { + jointNames.push_back( iter->asString() ); + } + } + // Extract joint offsets + { + LLSD::array_const_iterator iter(skin["joint_offset"].beginArray()); + LLSD::array_const_iterator iter_end(skin["joint_offset"].endArray()); + for ( ; iter != iter_end; ++iter ) + { + jointOffsets.push_back( ll_vector3_from_sd(*iter) ); + } + } + + // get at the *optional* pelvis offset + //if ( skin.has("pelvis_offset") ) + //{ + // pelvisOffset = skin["pelvis_offset"].asReal(); + //} + // Now apply the extracted joint data to the avatar + U32 jointCount = narrow(jointNames.size()); + + if ( jointOffsets.size() < jointCount ) + { + throw LLAppException(RV_INVALID_SKIN_BLOCK); + } + + bool fullRig = ( jointCount>= FULL_RIG_JOINT_COUNT ) ? true : false; + //bool pelvisGotSet = false; + + returnResult = fullRig; + + if ( fullRig ) + { + for ( U32 i=0; i<jointCount; ++i ) + { + LLJoint* pJoint = avatar.getJoint( jointNames[i] ); + if ( pJoint ) + { + LL_DEBUGS() << "Apply joint : " << jointNames[i] << " " + << jointOffsets[i][0] << " " + << jointOffsets[i][1] << " " + << jointOffsets[i][2] << LL_ENDL; + // FIXME replace with new attachment override code. + //pJoint->storeCurrentXform( jointOffsets[i] ); + + bool active_override_changed = false; + pJoint->addAttachmentPosOverride(jointOffsets[i], mesh_id, "", active_override_changed); + } + } + + avatar.computeBodySize(); + avatar.mRoot->touch(); + avatar.mRoot->updateWorldMatrixChildren(); + + } + + jointNames.clear(); + jointOffsets.clear(); + } + return returnResult; +} diff --git a/indra/llappearanceutility/llprocessparams.h b/indra/llappearanceutility/llprocessparams.h new file mode 100644 index 0000000000..6df893fe21 --- /dev/null +++ b/indra/llappearanceutility/llprocessparams.h @@ -0,0 +1,49 @@ +/** + * @file llprocessparams.h + * @brief Declaration of LLProcessParams class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLPROCESSPARAMS_H +#define LL_LLPROCESSPARAMS_H + +#include "llbakingprocess.h" + +class LLBakingAvatar; +class LLProcessParams : public LLBakingProcess +{ +public: + LLProcessParams(LLAppAppearanceUtility* app) : + LLBakingProcess(app) {} + + void process(std::ostream& output) override; +private: + + bool processInputDataForJointInfo( LLBakingAvatar& avatar ); +}; + + + + +#endif /* LL_LLPROCESSPARAMS_H */ + diff --git a/indra/llappearanceutility/llprocessskin.cpp b/indra/llappearanceutility/llprocessskin.cpp new file mode 100644 index 0000000000..a3d4d3c6f3 --- /dev/null +++ b/indra/llappearanceutility/llprocessskin.cpp @@ -0,0 +1,118 @@ +/** + * @file llprocessskin.cpp + * @brief Implementation of LLProcesSkin class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" + +#include "llsd.h" +#include "llsdserialize.h" +#include "llsdutil.h" +#include "llsdutil_math.h" +#include "llstl.h" +#include "llmath.h" +#include "m4math.h" +#include "v4math.h" + +// project includes +#include "llappappearanceutility.h" +#include "llprocessskin.h" + +void LLProcessSkin::process(std::ostream& output) +{ + const LLSD& dataBlock = mInputData; + LLSD skinData = LLSD::emptyMap(); + + LLSD::map_const_iterator skinIter = dataBlock.beginMap(); + LLSD::map_const_iterator skinIterEnd = dataBlock.endMap(); + + for ( ; skinIter!=skinIterEnd; ++skinIter ) + { + const LLSD& skin = skinIter->second; + if ( !skin.has("joint_names") || !skin.has("alt_inverse_bind_matrix") ) + { + throw LLAppException(RV_INVALID_SKIN_BLOCK); + } + + LLSD entry = LLSD::emptyMap(); + + //get all joint names from the skin + { + entry["joint_names"] = LLSD::emptyArray(); + LLSD& joint_names = entry["joint_names"]; + LLSD::array_const_iterator iter(skin["joint_names"].beginArray()); + LLSD::array_const_iterator iter_end(skin["joint_names"].endArray()); + for ( ; iter != iter_end; ++iter ) + { + LL_DEBUGS() << "joint: " << iter->asString() << LL_ENDL; + joint_names.append(*iter); + } + } + //get at the translational component for the joint offsets + { + entry["joint_offset"] = LLSD::emptyArray(); + LLSD& joint_offsets = entry["joint_offset"]; + LLSD::array_const_iterator iter(skin["alt_inverse_bind_matrix"].beginArray()); + LLSD::array_const_iterator iter_end(skin["alt_inverse_bind_matrix"].endArray()); + //just get at the translational component + for ( ; iter != iter_end; ++iter ) + { + LLMatrix4 mat; + for (U32 j = 0; j < 4; j++) + { + for (U32 k = 0; k < 4; k++) + { + mat.mMatrix[j][k] = static_cast<F32>((*iter)[j*4+k].asReal()); + } + } + joint_offsets.append( ll_sd_from_vector3( mat.getTranslation() )); + LL_DEBUGS() << "offset: [" << mat.getTranslation()[0] << " " + << mat.getTranslation()[1] << " " + << mat.getTranslation()[2] << " ]" << LL_ENDL; + } + } + + //get at the *optional* pelvis offset + if (skin.has("pelvis_offset")) + { + entry["pelvis_offset"] = skin["pelvis_offset"]; + } + else + { + entry["pelvis_offset"] = LLSD::Real(0.f); + } + + //add block to outgoing result llsd + skinData[skinIter->first] = entry; + } + + //dump the result llsd into the outgoing output + LLSD result; + result["success"] = true; + result["skindata"] = skinData; + LL_DEBUGS() << "---------------------------\n" << result << LL_ENDL; + output << LLSDOStreamer<LLSDXMLFormatter>(result); +} + diff --git a/indra/llappearanceutility/llprocessskin.h b/indra/llappearanceutility/llprocessskin.h new file mode 100644 index 0000000000..a3cc8c7087 --- /dev/null +++ b/indra/llappearanceutility/llprocessskin.h @@ -0,0 +1,43 @@ +/** + * @file llprocessskin.h + * @brief Declaration of LLProcessSkin class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLPROCESSSKIN_H +#define LL_LLPROCESSSKIN_H + +#include "llbakingprocess.h" +class LLProcessSkin : public LLBakingProcess +{ +public: + LLProcessSkin(LLAppAppearanceUtility* app) : + LLBakingProcess(app) {} + void process(std::ostream& output) override; + +private: + +}; + +#endif /* LL_LLPROCESSSKIN_H */ + diff --git a/indra/llappearanceutility/llprocesstexture.cpp b/indra/llappearanceutility/llprocesstexture.cpp new file mode 100644 index 0000000000..91ceedc8f6 --- /dev/null +++ b/indra/llappearanceutility/llprocesstexture.cpp @@ -0,0 +1,285 @@ +/** + * @file llprocesstexture.cpp + * @brief Implementation of LLProcessTexture class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +// linden includes +#include "linden_common.h" + +#include "llfasttimer.h" +#include "llgl.h" +#include "llimagej2c.h" +#include "llsd.h" +#include "llsdserialize.h" +#include "llsdutil.h" + +// appearance includes +#include "llwearabletype.h" +#include "llavatarappearancedefines.h" + +// project includes +#include "llappappearanceutility.h" +#include "llbakingavatar.h" +#include "llbakingtexlayer.h" +#include "llbakingtexture.h" +#include "llbakingwearable.h" +#include "llbakingwearablesdata.h" +#include "llbakingwindow.h" +#include "llprocesstexture.h" + +static const S32 MAX_SIZE_LLSD_HEADER = 1024 * 1024; +static const bool USE_MIP_MAPS = true; + +static const S32 EYES_SLOT_DIMENSIONS=512; + +using namespace LLAvatarAppearanceDefines; + +LLProcessTexture::LLProcessTexture(LLAppAppearanceUtility* app) + : LLBakingProcess(app), + mWindow(nullptr), + mInputRaw(nullptr), + mBakeSize(512) +{ +} + +void LLProcessTexture::cleanup() +{ + delete mWindow; +} + +static LLFastTimer::DeclareTimer FTM_CREATE_TEXTURE_FROM_STREAM("Create texture from stream."); +static LLPointer<LLImageRaw> create_texture_from_stream(std::istream& input, + S32 texture_size, + const LLUUID& id) +{ + LL_RECORD_BLOCK_TIME(FTM_CREATE_TEXTURE_FROM_STREAM); + // Read compressed j2c texture data from the input stream. + U8* buffer = (U8*) ll_aligned_malloc_16(texture_size); + input.read((char*) buffer, texture_size); + + if (input.gcount() < texture_size) + { + ll_aligned_free_16(buffer); + throw LLAppException(RV_UNABLE_TO_DECODE, " Early EOF in input stream."); + } + if (input.gcount() > texture_size) + { + ll_aligned_free_16(buffer); + throw LLAppException(RV_UNABLE_TO_DECODE, " Read too much data from input stream: Programming Error."); + } + + const S32 DISCARD_FULL_TEXTURE_RESOLUTION = 0; + LLPointer<LLImageJ2C> j2c = new LLImageJ2C(); + j2c->setDiscardLevel(DISCARD_FULL_TEXTURE_RESOLUTION); + // Transfer the j2c buffer to an LLImageJ2C object. + // This gives memory ownership of buffer to LLImageJ2C + if (!j2c->validate(buffer, texture_size)) + { + throw LLAppException(RV_UNABLE_TO_DECODE, " Unable to validate J2C: " + LLImage::getLastThreadError()); + } + if (!(j2c->getWidth() * j2c->getHeight() * j2c->getComponents() > 0)) + { + throw LLAppException(RV_UNABLE_TO_DECODE, " Invalid dimensions."); + } + + // Decompress the J2C image into a raw image. + LLPointer<LLImageRaw> image_raw = new LLImageRaw(j2c->getWidth(), + j2c->getHeight(), + j2c->getComponents()); + const F32 MAX_DECODE_TIME = 60.f; + j2c->setDiscardLevel(0); + if (!j2c->decode(image_raw, MAX_DECODE_TIME)) + { + throw LLAppException(RV_UNABLE_TO_DECODE, " Decoding timeout."); + } + // *TODO: Check for decode failure? + LL_DEBUGS() << "ID: " << id << ", Raw Width: " << image_raw->getWidth() << ", Raw Height: " << image_raw->getHeight() + << ", Raw Components: " << (S32) image_raw->getComponents() + << ", J2C Width: " << j2c->getWidth() << ", J2C Height: " << j2c->getHeight() + << ", J2C Components: " << (S32) j2c->getComponents() << LL_ENDL; + + return image_raw; +} + +void LLProcessTexture::parseInput(std::istream& input) +{ + mInputRaw = &input; + LL_DEBUGS() << "Reading..." << LL_ENDL; + // Parse LLSD header. + mInputData = LLSDSerialize::fromBinary( *mInputRaw, MAX_SIZE_LLSD_HEADER ); + if (mInputData.isUndefined()) throw LLAppException(RV_UNABLE_TO_PARSE); + if (!mInputData.has("slot_id")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing slot id"); + if (!mInputData.has("textures")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing texture header"); + if (!mInputData.has("wearables")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing wearables"); + + // Verify the slot_id is valid. + if (BAKED_NUM_INDICES == LLAvatarAppearance::getDictionary()->findBakedByImageName(mInputData["slot_id"].asString())) + { + throw LLAppException(RV_UNABLE_TO_PARSE, " Invalid slot id"); + } +} + +void LLProcessTexture::init() +{ + if (mApp->isDebugMode()) gDebugGL = true; + + S32 maxTextureDecodedWidth = 0; + S32 maxTextureDecodedHeight = 0; + + // Extract texture data. + LLSD::array_const_iterator iter = mInputData["textures"].beginArray(); + LLSD::array_const_iterator end = mInputData["textures"].endArray(); + std::map< LLUUID, LLPointer<LLImageRaw> > imageRawMap; + + for (; iter != end; ++iter) + { + LLUUID texture_id = (*iter)[0].asUUID(); + S32 texture_size = (*iter)[1]; + imageRawMap[texture_id] = create_texture_from_stream(*mInputRaw, texture_size, texture_id); + maxTextureDecodedWidth = imageRawMap[texture_id]->getWidth() > maxTextureDecodedWidth ? imageRawMap[texture_id]->getWidth() : maxTextureDecodedWidth; + maxTextureDecodedHeight = imageRawMap[texture_id]->getHeight() > maxTextureDecodedHeight ? imageRawMap[texture_id]->getHeight() : maxTextureDecodedHeight; + } + + if ("eyes" == mInputData["slot_id"].asString()) + { + mBakeSize = 512; + } + else + { + // optimization: maybe we could use maxTextureDecodedWidth and + // maxTextureDecodedHeight for new LLBakingWindow below? + if ((maxTextureDecodedWidth > 1024) || (maxTextureDecodedHeight > 1024)) + { + mBakeSize = 2048; + } + else if ((maxTextureDecodedWidth > 512) || (maxTextureDecodedHeight > 512)) + { + mBakeSize = 1024; + } + else + { + mBakeSize = 512; + } + } + + mWindow = new LLBakingWindow(mBakeSize, mBakeSize); + + for (iter = mInputData["textures"].beginArray(); iter != mInputData["textures"].endArray(); ++iter) + { + LLUUID texture_id = (*iter)[0].asUUID(); + + LLPointer<LLBakingTexture> texture = new LLBakingTexture(texture_id, imageRawMap[texture_id]); + texture->forceActive(); + texture->setGLTextureCreated(true); + + mTextureData[texture_id] = texture; + } + +} + +LLPointer<LLGLTexture> LLProcessTexture::getLocalTexture(bool usemipmaps, bool generate_gl_tex) +{ + LLPointer<LLBakingTexture> tex = new LLBakingTexture(usemipmaps); + if(generate_gl_tex) + { + tex->generateGLTexture() ; + tex->setCategory(LLGLTexture::LOCAL) ; + } + return tex ; +} + +LLPointer<LLGLTexture> LLProcessTexture::getLocalTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps, bool generate_gl_tex) +{ + LLPointer<LLBakingTexture> tex = new LLBakingTexture(width, height, components, usemipmaps) ; + if(generate_gl_tex) + { + tex->generateGLTexture() ; + tex->setCategory(LLGLTexture::LOCAL) ; + } + return tex ; +} + +LLGLTexture* LLProcessTexture::getFetchedTexture(const LLUUID &image_id) +{ + texture_map_t::iterator texture_iter = mTextureData.find(image_id); + if (mTextureData.end() == texture_iter) + { + LL_DEBUGS() << "Ignoring unused texture id: " << image_id << LL_ENDL; + return nullptr; + } + + return texture_iter->second; +} + +void LLProcessTexture::process(std::ostream& output) +{ + LL_DEBUGS() << "Building avatar..." << LL_ENDL; + // Set ourself as the texture bridge. + gTextureManagerBridgep = this; + + // Construct the avatar. + LLBakingWearablesData wearable_data; + LLBakingAvatar avatar(&wearable_data, mBakeSize); + avatar.initInstance(); + wearable_data.setAvatarAppearance(&avatar); + + // Extract and parse wearables. + wearable_data.setWearableOutfit(mInputData["wearables"]); + + avatar.setSex( (avatar.getVisualParamWeight( "male" ) > 0.5f) ? SEX_MALE : SEX_FEMALE ); + + avatar.updateVisualParams(); + + // Prepare gl for avatar baking + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + LLGLEnable color_mat(GL_COLOR_MATERIAL); + gGL.setSceneBlendType(LLRender::BT_ALPHA); + + EBakedTextureIndex bake_type = LLAvatarAppearance::getDictionary()->findBakedByImageName(mInputData["slot_id"].asString()); + LLTexLayerSet* layer_set = avatar.getAvatarLayerSet(bake_type); + LLBakingTexLayerSetBuffer* composite = dynamic_cast<LLBakingTexLayerSetBuffer*> (layer_set->getComposite()); + if (!composite) + { + throw LLAppException(RV_UNABLE_TO_BAKE, " Could not build composite."); + } + + LL_DEBUGS() << "Rendering..." << LL_ENDL; + if (!composite->render()) + { + throw LLAppException(RV_UNABLE_TO_BAKE, " Failed to render composite."); + } + + mWindow->swapBuffers(); + + LL_DEBUGS() << "Compressing..." << LL_ENDL; + LLImageJ2C* j2c = composite->getCompressedImage(); + if (!j2c) + { + throw LLAppException(RV_UNABLE_TO_BAKE, " Could not build image."); + } + + LL_DEBUGS() << "Writing..." << LL_ENDL; + output.write((char*)j2c->getData(), j2c->getDataSize()); + LL_DEBUGS() << "Done." << LL_ENDL; +} diff --git a/indra/llappearanceutility/llprocesstexture.h b/indra/llappearanceutility/llprocesstexture.h new file mode 100644 index 0000000000..8bf2c7396f --- /dev/null +++ b/indra/llappearanceutility/llprocesstexture.h @@ -0,0 +1,63 @@ +/** + * @file llprocesstexture.h + * @brief Declaration of LLProcessTexture class. + * + * $LicenseInfo:firstyear=2012&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2012, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLPROCESSTEXTURE_H +#define LL_LLPROCESSTEXTURE_H + +#include "llbakingprocess.h" +#include "llbakingtexture.h" +#include "llpointer.h" +#include "lltexturemanagerbridge.h" +#include "llbakingwindow.h" + +class LLBakingWindow; + +class LLProcessTexture : public LLBakingProcess, public LLTextureManagerBridge +{ +public: + LLProcessTexture(LLAppAppearanceUtility* app); + + /////// LLBakingProcess interface. ///////// + void parseInput(std::istream& input) override; + void process(std::ostream& output) override; + void init() override; + void cleanup() override; + + /////// LLTextureManagerBridge interface. //////// + LLPointer<LLGLTexture> getLocalTexture(bool usemipmaps = true, bool generate_gl_tex = true) override; + LLPointer<LLGLTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps, bool generate_gl_tex = true) override; + LLGLTexture* getFetchedTexture(const LLUUID &image_id) override; + +private: + typedef std::map< LLUUID, LLPointer<LLBakingTexture> > texture_map_t; + texture_map_t mTextureData; + LLBakingWindow* mWindow; + std::istream* mInputRaw; + S32 mBakeSize; +}; + +#endif /* LL_LLPROCESSTEXTURE_H */ + diff --git a/indra/llappearanceutility/tests/joint-offsets.xml b/indra/llappearanceutility/tests/joint-offsets.xml new file mode 100644 index 0000000000..4dca3c3429 --- /dev/null +++ b/indra/llappearanceutility/tests/joint-offsets.xml @@ -0,0 +1 @@ +<?xml version="1.0" ?><llsd><map><key>92a7dd5c-bc30-9952-3b3b-e6cc10336cbe</key><map><key>bind_shape_matrix</key><array><real>0.04880329594016075</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.048803336918354034</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04902994632720947</real><real>0.0</real><real>0.05886554718017578</real><real>-0.0343865305185318</real><real>1.7572450637817383</real><real>1.0</real></array><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>-0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>-0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array></array></map><key>971cf873-afce-8b69-44d6-3f5879cb94c2</key><map><key>bind_shape_matrix</key><array><real>0.02992800809442997</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04658059775829315</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.009469985961914062</real><real>0.0</real><real>0.13773700594902039</real><real>5.450006574392319e-05</real><real>1.6883649826049805</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>7e7a6834-8b41-4029-8f87-ce57b7d05bee</key><map><key>bind_shape_matrix</key><array><real>0.2741509974002838</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.15283240377902985</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.2336200475692749</real><real>0.0</real><real>0.03308449685573578</real><real>0.0</real><real>1.7400600910186768</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>547d8392-9f19-35fb-3508-121eea388f0a</key><map><key>bind_shape_matrix</key><array><real>0.1242017075419426</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04083459824323654</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.014499902725219727</real><real>0.0</real><real>0.07738315314054489</real><real>0.0</real><real>1.6899499893188477</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceTongueBase</string><string>mFaceTeethLower</string><string>mFaceTongueTip</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.029850399121642113</real><real>0.0</real><real>0.007831689901649952</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.038916200399398804</real><real>0.0</real><real>-0.002775429980829358</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.08735450357198715</real><real>0.0</real><real>-1.8282899856567383</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.12627099454402924</real><real>0.0</real><real>-1.825510025024414</real><real>1.0</real></array></array></map><key>ed796a27-cff0-454a-ecec-fd10794ca2c9</key><map><key>bind_shape_matrix</key><array><real>0.007152989972382784</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.019312690943479538</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.023620009422302246</real><real>0.0</real><real>0.16310149431228638</real><real>0.0002091950736939907</real><real>1.7110600471496582</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceNoseBase</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceLipUpperCenter</string><string>mFaceTeethUpper</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array></array></map><key>fa0aabfe-4b1c-fa9b-4942-74e7e7f50fe2</key><map><key>bind_shape_matrix</key><array><real>0.02271599881350994</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.02271599881350994</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.022709965705871582</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0670149326324463</real><real>1.0</real></array><key>joint_names</key><array><string>mPelvis</string><string>mHandMiddle1Left</string><string>mHandMiddle2Left</string><string>mHandMiddle3Left</string><string>mHandIndex1Left</string><string>mHandIndex2Left</string><string>mHandIndex3Left</string><string>mHandRing1Left</string><string>mHandRing2Left</string><string>mHandRing3Left</string><string>mHandPinky1Left</string><string>mHandPinky2Left</string><string>mHandPinky3Left</string><string>mHandThumb1Left</string><string>mHandThumb2Left</string><string>mHandThumb3Left</string><string>mHandMiddle1Right</string><string>mHandMiddle2Right</string><string>mHandMiddle3Right</string><string>mHandIndex1Right</string><string>mHandIndex2Right</string><string>mHandIndex3Right</string><string>mHandRing1Right</string><string>mHandRing2Right</string><string>mHandRing3Right</string><string>mHandPinky1Right</string><string>mHandPinky2Right</string><string>mHandPinky3Right</string><string>mHandThumb1Right</string><string>mHandThumb2Right</string><string>mHandThumb3Right</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>0.04983130097389221</real><real>-0.007089749909937382</real><real>0.0</real><real>-0.030134299769997597</real><real>0.704800009727478</real><real>0.708765983581543</real><real>0.0</real><real>0.040315598249435425</real><real>-0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>0.015188699588179588</real><real>0.09894219785928726</real><real>0.010429499670863152</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>-0.028957000002264977</real><real>0.7130839824676514</real><real>0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>-0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0010505600366741419</real><real>0.04202070087194443</real><real>-0.006302990019321442</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>-0.038300998508930206</real><real>0.7219560146331787</real><real>0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>-0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.0005042509874328971</real><real>0.024710899218916893</real><real>-0.004034650046378374</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>-0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>0.02338249981403351</real><real>0.768297016620636</real><real>0.6396660208702087</real><real>0.0</real><real>-0.3617820143699646</real><real>-0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.0342739000916481</real><real>0.09468069672584534</real><real>0.009629939682781696</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>-0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>0.01767759956419468</real><real>0.774619996547699</real><real>0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>-0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.017191000282764435</real><real>0.03640490025281906</real><real>-0.006067920010536909</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>-0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>0.00269406009465456</real><real>0.7645390033721924</real><real>0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>-0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.010213700123131275</real><real>0.023345300927758217</real><real>-0.004377489909529686</real><real>1.0</real></array><array><real>0.965412974357605</real><real>0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>0.015564500354230404</real><real>0.7600290179252625</real><real>0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>-0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.0036476401146501303</real><real>0.09658080339431763</real><real>0.004405209794640541</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>0.04479910060763359</real><real>0.7633640170097351</real><real>0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>-0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.012315300293266773</real><real>0.035998500883579254</real><real>-0.007578520104289055</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>0.018911100924015045</real><real>0.7660049796104431</real><real>0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>-0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.006562709808349609</real><real>0.02019299939274788</real><real>-0.004543889779597521</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>-0.11812599748373032</real><real>0.8451250195503235</real><real>0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>-0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.023213399574160576</real><real>0.08812329918146133</real><real>-0.004173850174993277</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>-0.10624899715185165</real><real>0.8473150134086609</real><real>0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>-0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.022267799824476242</real><real>0.02319590002298355</real><real>-0.005566920153796673</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>-0.10898099839687347</real><real>0.8599650263786316</real><real>0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>-0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.01243670005351305</real><real>0.014924099668860435</real><real>-0.003316479967907071</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>-0.07201720029115677</real><real>0.3938089907169342</real><real>0.0</real><real>-0.1188109964132309</real><real>0.8904470205307007</real><real>0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>-0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.03221559897065163</real><real>0.02088090032339096</real><real>-0.00855305977165699</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>-0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>-0.16619600355625153</real><real>0.8706110119819641</real><real>0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>-0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.029450999572873116</real><real>0.03365840017795563</real><real>-0.0010520200012251735</real><real>1.0</real></array><array><real>0.928991973400116</real><real>0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>-0.2616580128669739</real><real>0.8318700194358826</real><real>0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>-0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.020924899727106094</real><real>0.028203699737787247</real><real>-0.000909622001927346</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>-0.04983120039105415</real><real>-0.007089769933372736</real><real>0.0</real><real>0.030134299769997597</real><real>0.704800009727478</real><real>-0.708765983581543</real><real>0.0</real><real>0.040315501391887665</real><real>0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>0.015188699588179588</real><real>-0.09894219785928726</real><real>0.010429499670863152</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>-0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>0.028957000002264977</real><real>0.7130839824676514</real><real>-0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0010505500249564648</real><real>-0.042020801454782486</real><real>-0.006302880123257637</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>-0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>0.038300998508930206</real><real>0.7219560146331787</real><real>-0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.0005042660050094128</real><real>-0.024710899218916893</real><real>-0.0040346598252654076</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>-0.023382600396871567</real><real>0.768297016620636</real><real>-0.6396669745445251</real><real>0.0</real><real>-0.3617820143699646</real><real>0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.0342739000916481</real><real>-0.09468069672584534</real><real>0.009629939682781696</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>-0.017677700147032738</real><real>0.774619996547699</real><real>-0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.017191000282764435</real><real>-0.03640500083565712</real><real>-0.006067819893360138</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>-0.002694070106372237</real><real>0.7645390033721924</real><real>-0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.010213700123131275</real><real>-0.023345300927758217</real><real>-0.004377489909529686</real><real>1.0</real></array><array><real>0.965412974357605</real><real>-0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>-0.015564500354230404</real><real>0.7600290179252625</real><real>-0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.0036476401146501303</real><real>-0.09658080339431763</real><real>0.004405209794640541</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>-0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>-0.04479910060763359</real><real>0.7633640170097351</real><real>-0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.012315300293266773</real><real>-0.035998400300741196</real><real>-0.007578390184789896</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>-0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>-0.018911100924015045</real><real>0.7660049796104431</real><real>-0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.006562769878655672</real><real>-0.02019290067255497</real><real>-0.004543649964034557</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>-0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>0.11812599748373032</real><real>0.8451250195503235</real><real>-0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.023213399574160576</real><real>-0.08812329918146133</real><real>-0.004173850174993277</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>-0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>0.10624899715185165</real><real>0.8473150134086609</real><real>-0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.022267799824476242</real><real>-0.023195700719952583</real><real>-0.005566900130361319</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>-0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>0.10898099839687347</real><real>0.8599650263786316</real><real>-0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.012436600401997566</real><real>-0.014924000017344952</real><real>-0.0033167300280183554</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>0.07201740145683289</real><real>0.3938089907169342</real><real>0.0</real><real>0.1188109964132309</real><real>0.8904470205307007</real><real>-0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.03221559897065163</real><real>-0.02088090032339096</real><real>-0.00855305977165699</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>0.16619600355625153</real><real>0.8706110119819641</real><real>-0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.029450900852680206</real><real>-0.03365840017795563</real><real>-0.0010520999785512686</real><real>1.0</real></array><array><real>0.928991973400116</real><real>-0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>0.2616580128669739</real><real>0.8318700194358826</real><real>-0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.020925000309944153</real><real>-0.028203800320625305</real><real>-0.0009097899892367423</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.067020058631897</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>0.04983130097389221</real><real>-0.007089749909937382</real><real>0.0</real><real>-0.030134299769997597</real><real>0.704800009727478</real><real>0.708765983581543</real><real>0.0</real><real>0.040315598249435425</real><real>-0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>-0.008488760329782963</real><real>0.41053301095962524</real><real>-1.2015999555587769</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>-0.028957000002264977</real><real>0.7130839824676514</real><real>0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>-0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0029308199882507324</real><real>0.35466399788856506</real><real>-1.1994999647140503</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>-0.038300998508930206</real><real>0.7219560146331787</real><real>0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>-0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.04098540171980858</real><real>0.3118860125541687</real><real>-1.1996099948883057</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>-0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>0.02338249981403351</real><real>0.768297016620636</real><real>0.6396660208702087</real><real>0.0</real><real>-0.3617820143699646</real><real>-0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.40104299783706665</real><real>0.2437240034341812</real><real>-1.1804200410842896</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>-0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>0.01767759956419468</real><real>0.774619996547699</real><real>0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>-0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.35530799627304077</real><real>0.2053389996290207</real><real>-1.183650016784668</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>-0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>0.00269406009465456</real><real>0.7645390033721924</real><real>0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>-0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.35388800501823425</real><real>0.2048649936914444</real><real>-1.1728999614715576</real><real>1.0</real></array><array><real>0.965412974357605</real><real>0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>0.015564500354230404</real><real>0.7600290179252625</real><real>0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>-0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.2662949860095978</real><real>0.2996309995651245</real><real>-1.2001399993896484</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>0.04479910060763359</real><real>0.7633640170097351</real><real>0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>-0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.2356870025396347</real><real>0.26565900444984436</real><real>-1.1958600282669067</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>0.018911100924015045</real><real>0.7660049796104431</real><real>0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>-0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.2549220025539398</real><real>0.23242099583148956</real><real>-1.188689947128296</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>-0.11812599748373032</real><real>0.8451250195503235</real><real>0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>-0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.5196760296821594</real><real>-0.007902019657194614</real><real>-1.1486300230026245</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>-0.10624899715185165</real><real>0.8473150134086609</real><real>0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>-0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.4340290129184723</real><real>-0.0015098199946805835</real><real>-1.169010043144226</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>-0.10898099839687347</real><real>0.8599650263786316</real><real>0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>-0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.3928540050983429</real><real>-0.03789449855685234</real><real>-1.1751899719238281</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>-0.07201720029115677</real><real>0.3938089907169342</real><real>0.0</real><real>-0.1188109964132309</real><real>0.8904470205307007</real><real>0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>-0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.51316899061203</real><real>0.09074380248785019</real><real>-1.1683000326156616</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>-0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>-0.16619600355625153</real><real>0.8706110119819641</real><real>0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>-0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.45058199763298035</real><real>0.11499100178480148</real><real>-1.1762100458145142</real><real>1.0</real></array><array><real>0.928991973400116</real><real>0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>-0.2616580128669739</real><real>0.8318700194358826</real><real>0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>-0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.401203989982605</real><real>0.1690800040960312</real><real>-1.1763999462127686</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>-0.04983120039105415</real><real>-0.007089769933372736</real><real>0.0</real><real>0.030134299769997597</real><real>0.704800009727478</real><real>-0.708765983581543</real><real>0.0</real><real>0.040315501391887665</real><real>0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>-0.008488760329782963</real><real>-0.41053301095962524</real><real>-1.2015999555587769</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>-0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>0.028957000002264977</real><real>0.7130839824676514</real><real>-0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0029308199882507324</real><real>-0.35466399788856506</real><real>-1.1994999647140503</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>-0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>0.038300998508930206</real><real>0.7219560146331787</real><real>-0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.04098540171980858</real><real>-0.3118860125541687</real><real>-1.1996099948883057</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>-0.023382600396871567</real><real>0.768297016620636</real><real>-0.6396669745445251</real><real>0.0</real><real>-0.3617820143699646</real><real>0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.40104299783706665</real><real>-0.2437240034341812</real><real>-1.1804200410842896</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>-0.017677700147032738</real><real>0.774619996547699</real><real>-0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.35530799627304077</real><real>-0.2053389996290207</real><real>-1.183650016784668</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>-0.002694070106372237</real><real>0.7645390033721924</real><real>-0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.35388800501823425</real><real>-0.2048649936914444</real><real>-1.1728999614715576</real><real>1.0</real></array><array><real>0.965412974357605</real><real>-0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>-0.015564500354230404</real><real>0.7600290179252625</real><real>-0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.2662949860095978</real><real>-0.2996309995651245</real><real>-1.2001399993896484</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>-0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>-0.04479910060763359</real><real>0.7633640170097351</real><real>-0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.2356870025396347</real><real>-0.26565900444984436</real><real>-1.1958600282669067</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>-0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>-0.018911100924015045</real><real>0.7660049796104431</real><real>-0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.2549220025539398</real><real>-0.23242099583148956</real><real>-1.188689947128296</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>-0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>0.11812599748373032</real><real>0.8451250195503235</real><real>-0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.5196760296821594</real><real>0.007902019657194614</real><real>-1.1486300230026245</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>-0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>0.10624899715185165</real><real>0.8473150134086609</real><real>-0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.4340290129184723</real><real>0.0015098199946805835</real><real>-1.169010043144226</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>-0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>0.10898099839687347</real><real>0.8599650263786316</real><real>-0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.3928540050983429</real><real>0.03789449855685234</real><real>-1.1751899719238281</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>0.07201740145683289</real><real>0.3938089907169342</real><real>0.0</real><real>0.1188109964132309</real><real>0.8904470205307007</real><real>-0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.51316899061203</real><real>-0.0907440036535263</real><real>-1.1683000326156616</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>0.16619600355625153</real><real>0.8706110119819641</real><real>-0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.45058199763298035</real><real>-0.11499100178480148</real><real>-1.1762100458145142</real><real>1.0</real></array><array><real>0.928991973400116</real><real>-0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>0.2616580128669739</real><real>0.8318700194358826</real><real>-0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.401203989982605</real><real>-0.1690800040960312</real><real>-1.1763999462127686</real><real>1.0</real></array></array></map><key>15659a9a-f1c1-3e38-8343-2e23e9f65d20</key><map><key>bind_shape_matrix</key><array><real>0.12950499355793</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.09769980609416962</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.13808000087738037</real><real>0.0</real><real>0.021911798045039177</real><real>-0.057047098875045776</real><real>1.8354499340057373</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>1d5936bc-0501-7376-f70c-06dcfac920ed</key><map><key>bind_shape_matrix</key><array><real>0.04880329594016075</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.048803336918354034</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04902994632720947</real><real>0.0</real><real>0.05886554718017578</real><real>0.0343865305185318</real><real>1.7572450637817383</real><real>1.0</real></array><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>-0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>-0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array></array></map><key>9174c7f1-bd5f-68d2-2f4f-cc9b36312067</key><map><key>bind_shape_matrix</key><array><real>0.08326390385627747</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.12516659498214722</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10517990589141846</real><real>0.0</real><real>0.11359705030918121</real><real>0.0</real><real>1.7399399280548096</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025396499782800674</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.026076599955558777</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.05700350180268288</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.05700350180268288</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.05627429857850075</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.05627429857850075</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750239759683609</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017177099362015724</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.0038522500544786453</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.004532460123300552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.004532460123300552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.840149998664856</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.820449948310852</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.9511499404907227</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>d73dea3b-b8cb-59ff-c76b-cfdcc8119bb5</key><map><key>bind_shape_matrix</key><array><real>0.08899261057376862</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06393220275640488</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.020760059356689453</real><real>0.0</real><real>0.10354769974946976</real><real>0.0</real><real>1.693750023841858</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array></array></map><key>d0328b82-d9ca-6071-b248-17edfc7612cb</key><map><key>bind_shape_matrix</key><array><real>0.13549870252609253</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.1464741975069046</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.12077999114990234</real><real>0.0</real><real>0.10338164865970612</real><real>0.0</real><real>1.7488499879837036</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>05bf604d-d1c0-352b-cb2f-c37caca6f542</key><map><key>bind_shape_matrix</key><array><real>0.014549999497830868</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.035996198654174805</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.019659996032714844</real><real>0.0</real><real>0.1341239959001541</real><real>0.0</real><real>1.6930099725723267</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array></array></map><key>46ee8fb2-15f0-fa2e-d260-e7e6e8295445</key><map><key>bind_shape_matrix</key><array><real>0.14447110891342163</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07934600114822388</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0342099666595459</real><real>0.0</real><real>0.07812044024467468</real><real>0.0</real><real>1.69725501537323</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array></array></map><key>d2205615-2ce0-4ff1-2bfd-bdc77a3825cc</key><map><key>bind_shape_matrix</key><array><real>0.06583520025014877</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.1928279995918274</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10592997074127197</real><real>0.0</real><real>0.02077449858188629</real><real>0.0</real><real>1.7146050930023193</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>8665c374-cb61-d418-d412-7f4ea828e119</key><map><key>bind_shape_matrix</key><array><real>0.6689305901527405</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.17128899693489075</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.1917099952697754</real><real>0.0</real><real>-0.40683069825172424</real><real>0.0</real><real>1.1260449886322021</real><real>1.0</real></array><key>joint_names</key><array><string>mTail1</string><string>mPelvis</string><string>mTail2</string><string>mTail3</string><string>mTail4</string><string>mTail6</string><string>mTail5</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.16599999368190765</real><real>0.0</real><real>0.06700000166893005</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.14775000512599945</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.12600000202655792</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.10649999976158142</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.07050000131130219</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.08399999886751175</real><real>0.0</real><real>0.0</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.16599999368190765</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.3137499988079071</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.43974998593330383</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.5462499856948853</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.7007499933242798</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.6302499771118164</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array></array></map><key>e678576a-dc9f-5187-6ed5-5b4aafb65d7b</key><map><key>bind_shape_matrix</key><array><real>0.010342992842197418</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06067759916186333</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.012930035591125488</real><real>0.0</real><real>0.11175650358200073</real><real>0.0</real><real>1.6866850852966309</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>8d23b8c8-fadf-c1b3-0b04-a3ecea292576</key><map><key>bind_shape_matrix</key><array><real>0.12950499355793</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.09769980609416962</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.13808000087738037</real><real>0.0</real><real>0.021911798045039177</real><real>0.057047098875045776</real><real>1.8354499340057373</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>2a30e7ec-9840-f495-daa1-2b8d0d025a78</key><map><key>bind_shape_matrix</key><array><real>0.06447789818048477</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06988950073719025</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10517000406980515</real><real>0.0</real><real>0.006453849375247955</real><real>0.07881925255060196</real><real>1.8452450037002563</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>3bd8d73d-be6f-8de2-39ae-1f680189bc27</key><map><key>bind_shape_matrix</key><array><real>0.06447789818048477</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06988950073719025</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10517000406980515</real><real>0.0</real><real>0.006453849375247955</real><real>-0.07881925255060196</real><real>1.8452450037002563</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>34db2e33-e79f-ea57-14af-c1ce9cbc63ff</key><map><key>bind_shape_matrix</key><array><real>0.03714209794998169</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.14610280096530914</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.03297996520996094</real><real>0.0</real><real>0.07929874956607819</real><real>0.0</real><real>1.7578400373458862</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map></map></llsd>
\ No newline at end of file diff --git a/indra/llappearanceutility/tests/joint-offsets.xml.output b/indra/llappearanceutility/tests/joint-offsets.xml.output new file mode 100644 index 0000000000..d0f94b8f11 --- /dev/null +++ b/indra/llappearanceutility/tests/joint-offsets.xml.output @@ -0,0 +1 @@ +<llsd><map><key>skindata</key><map><key>05bf604d-d1c0-352b-cb2f-c37caca6f542</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array></array><key>pelvis_offset</key><real>0</real></map><key>15659a9a-f1c1-3e38-8343-2e23e9f65d20</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>1d5936bc-0501-7376-f70c-06dcfac920ed</key><map><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>joint_offset</key><array><array><real>0.09042750298976898193359375</real><real>0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.09042750298976898193359375</real><real>-0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>2a30e7ec-9840-f495-daa1-2b8d0d025a78</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>34db2e33-e79f-ea57-14af-c1ce9cbc63ff</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>3bd8d73d-be6f-8de2-39ae-1f680189bc27</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>46ee8fb2-15f0-fa2e-d260-e7e6e8295445</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array></array><key>pelvis_offset</key><real>0</real></map><key>547d8392-9f19-35fb-3508-121eea388f0a</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceTongueBase</string><string>mFaceTeethLower</string><string>mFaceTongueTip</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>-0.02985039912164211273193359</real><real>0</real><real>0.007831689901649951934814453</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.0389162003993988037109375</real><real>0</real><real>-0.002775429980829358100891113</real></array></array><key>pelvis_offset</key><real>0</real></map><key>7e7a6834-8b41-4029-8f87-ce57b7d05bee</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>8665c374-cb61-d418-d412-7f4ea828e119</key><map><key>joint_names</key><array><string>mTail1</string><string>mPelvis</string><string>mTail2</string><string>mTail3</string><string>mTail4</string><string>mTail6</string><string>mTail5</string></array><key>joint_offset</key><array><array><real>-0.1659999936819076538085938</real><real>0</real><real>0.0670000016689300537109375</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>-0.1477500051259994506835938</real><real>0</real><real>0</real></array><array><real>-0.1260000020265579223632812</real><real>0</real><real>0</real></array><array><real>-0.1064999997615814208984375</real><real>0</real><real>0</real></array><array><real>-0.07050000131130218505859375</real><real>0</real><real>0</real></array><array><real>-0.08399999886751174926757812</real><real>0</real><real>0</real></array></array><key>pelvis_offset</key><real>0</real></map><key>8d23b8c8-fadf-c1b3-0b04-a3ecea292576</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>9174c7f1-bd5f-68d2-2f4f-cc9b36312067</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539649978280067443847656</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607659995555877685546875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700350180268287658691406</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700350180268287658691406</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627429857850074768066406</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627429857850074768066406</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.08750239759683609008789062</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717709936201572418212891</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003852250054478645324707031</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004532460123300552368164062</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004532460123300552368164062</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>92a7dd5c-bc30-9952-3b3b-e6cc10336cbe</key><map><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>joint_offset</key><array><array><real>0.09042750298976898193359375</real><real>0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.09042750298976898193359375</real><real>-0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>971cf873-afce-8b69-44d6-3f5879cb94c2</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>d0328b82-d9ca-6071-b248-17edfc7612cb</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>d2205615-2ce0-4ff1-2bfd-bdc77a3825cc</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>d73dea3b-b8cb-59ff-c76b-cfdcc8119bb5</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array></array><key>pelvis_offset</key><real>0</real></map><key>e678576a-dc9f-5187-6ed5-5b4aafb65d7b</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>ed796a27-cff0-454a-ecec-fd10794ca2c9</key><map><key>joint_names</key><array><string>mFaceNoseBase</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceLipUpperCenter</string><string>mFaceTeethUpper</string></array><key>joint_offset</key><array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array></array><key>pelvis_offset</key><real>0</real></map><key>fa0aabfe-4b1c-fa9b-4942-74e7e7f50fe2</key><map><key>joint_names</key><array><string>mPelvis</string><string>mHandMiddle1Left</string><string>mHandMiddle2Left</string><string>mHandMiddle3Left</string><string>mHandIndex1Left</string><string>mHandIndex2Left</string><string>mHandIndex3Left</string><string>mHandRing1Left</string><string>mHandRing2Left</string><string>mHandRing3Left</string><string>mHandPinky1Left</string><string>mHandPinky2Left</string><string>mHandPinky3Left</string><string>mHandThumb1Left</string><string>mHandThumb2Left</string><string>mHandThumb3Left</string><string>mHandMiddle1Right</string><string>mHandMiddle2Right</string><string>mHandMiddle3Right</string><string>mHandIndex1Right</string><string>mHandIndex2Right</string><string>mHandIndex3Right</string><string>mHandRing1Right</string><string>mHandRing2Right</string><string>mHandRing3Right</string><string>mHandPinky1Right</string><string>mHandPinky2Right</string><string>mHandPinky3Right</string><string>mHandThumb1Right</string><string>mHandThumb2Right</string><string>mHandThumb3Right</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01518869958817958831787109</real><real>0.09894219785928726196289062</real><real>0.01042949967086315155029297</real></array><array><real>-0.001050560036674141883850098</real><real>0.04202070087194442749023438</real><real>-0.006302990019321441650390625</real></array><array><real>-0.0005042509874328970909118652</real><real>0.02471089921891689300537109</real><real>-0.004034650046378374099731445</real></array><array><real>0.03427390009164810180664062</real><real>0.0946806967258453369140625</real><real>0.009629939682781696319580078</real></array><array><real>0.01719100028276443481445312</real><real>0.03640490025281906127929688</real><real>-0.006067920010536909103393555</real></array><array><real>0.01021370012313127517700195</real><real>0.02334530092775821685791016</real><real>-0.004377489909529685974121094</real></array><array><real>-0.003647640114650130271911621</real><real>0.096580803394317626953125</real><real>0.004405209794640541076660156</real></array><array><real>-0.01231530029326677322387695</real><real>0.03599850088357925415039062</real><real>-0.007578520104289054870605469</real></array><array><real>-0.006562709808349609375</real><real>0.02019299939274787902832031</real><real>-0.00454388977959752082824707</real></array><array><real>-0.02321339957416057586669922</real><real>0.08812329918146133422851562</real><real>-0.004173850174993276596069336</real></array><array><real>-0.02226779982447624206542969</real><real>0.02319590002298355102539062</real><real>-0.005566920153796672821044922</real></array><array><real>-0.0124367000535130500793457</real><real>0.01492409966886043548583984</real><real>-0.003316479967907071113586426</real></array><array><real>0.03221559897065162658691406</real><real>0.02088090032339096069335938</real><real>-0.008553059771656990051269531</real></array><array><real>0.02945099957287311553955078</real><real>0.03365840017795562744140625</real><real>-0.001052020001225173473358154</real></array><array><real>0.02092489972710609436035156</real><real>0.02820369973778724670410156</real><real>-0.0009096220019273459911346436</real></array><array><real>0.01518869958817958831787109</real><real>-0.09894219785928726196289062</real><real>0.01042949967086315155029297</real></array><array><real>-0.001050550024956464767456055</real><real>-0.04202080145478248596191406</real><real>-0.006302880123257637023925781</real></array><array><real>-0.0005042660050094127655029297</real><real>-0.02471089921891689300537109</real><real>-0.004034659825265407562255859</real></array><array><real>0.03427390009164810180664062</real><real>-0.0946806967258453369140625</real><real>0.009629939682781696319580078</real></array><array><real>0.01719100028276443481445312</real><real>-0.03640500083565711975097656</real><real>-0.006067819893360137939453125</real></array><array><real>0.01021370012313127517700195</real><real>-0.02334530092775821685791016</real><real>-0.004377489909529685974121094</real></array><array><real>-0.003647640114650130271911621</real><real>-0.096580803394317626953125</real><real>0.004405209794640541076660156</real></array><array><real>-0.01231530029326677322387695</real><real>-0.03599840030074119567871094</real><real>-0.007578390184789896011352539</real></array><array><real>-0.006562769878655672073364258</real><real>-0.02019290067255496978759766</real><real>-0.004543649964034557342529297</real></array><array><real>-0.02321339957416057586669922</real><real>-0.08812329918146133422851562</real><real>-0.004173850174993276596069336</real></array><array><real>-0.02226779982447624206542969</real><real>-0.02319570071995258331298828</real><real>-0.005566900130361318588256836</real></array><array><real>-0.01243660040199756622314453</real><real>-0.01492400001734495162963867</real><real>-0.003316730028018355369567871</real></array><array><real>0.03221559897065162658691406</real><real>-0.02088090032339096069335938</real><real>-0.008553059771656990051269531</real></array><array><real>0.02945090085268020629882812</real><real>-0.03365840017795562744140625</real><real>-0.001052099978551268577575684</real></array><array><real>0.02092500030994415283203125</real><real>-0.02820380032062530517578125</real><real>-0.0009097899892367422580718994</real></array></array><key>pelvis_offset</key><real>0</real></map></map><key>success</key><boolean>1</boolean></map></llsd> diff --git a/indra/llappearanceutility/tests/params.xml b/indra/llappearanceutility/tests/params.xml new file mode 100644 index 0000000000..7d7ff646b7 --- /dev/null +++ b/indra/llappearanceutility/tests/params.xml @@ -0,0 +1,1140 @@ +<?xml version="1.0" ?> +<llsd> +<map> + <key>skindata</key> + <map> + <key>270bb701-8643-c4b3-6a93-7a2b6503b30a</key> + <map> + <key>joint_names</key> + <array> + <string>mTail1</string> + <string>mPelvis</string> + <string>mTail2</string> + <string>mTorso</string> + <string>mSpine2</string> + <string>mSpine1</string> + <string>mHipLeft</string> + <string>mKneeLeft</string> + <string>mHipRight</string> + <string>mKneeRight</string> + <string>mChest</string> + <string>mSpine4</string> + <string>mSpine3</string> + <string>mShoulderRight</string> + <string>mCollarRight</string> + <string>mShoulderLeft</string> + <string>mCollarLeft</string> + <string>mElbowRight</string> + <string>mElbowLeft</string> + <string>mNeck</string> + <string>mAnkleRight</string> + <string>mAnkleLeft</string> + </array> + <key>joint_offset</key> + <array> + <array> + <real>-0.12795400619506836</real> + <real>0.0</real> + <real>0.001858999952673912</real> + </array> + <array> + <real>0.0</real> + <real>0.0</real> + <real>1.081987977027893</real> + </array> + <array> + <real>-0.018850000575184822</real> + <real>0.0</real> + <real>-0.09493499994277954</real> + </array> + <array> + <real>0.0</real> + <real>0.0</real> + <real>0.08407299965620041</real> + </array> + <array> + <real>0.0</real> + <real>0.0</real> + <real>-0.08407299965620041</real> + </array> + <array> + <real>0.0</real> + <real>0.0</real> + <real>0.08407299965620041</real> + </array> + <array> + <real>0.03375700116157532</real> + <real>0.12676499783992767</real> + <real>-0.04099800065159798</real> + </array> + <array> + <real>-0.0008870000019669533</real> + <real>-0.04556800052523613</real> + <real>-0.4910529851913452</real> + </array> + <array> + <real>0.03361999988555908</real> + <real>-0.1288059949874878</real> + <real>-0.041085999459028244</real> + </array> + <array> + <real>-0.0007800000021234155</real> + <real>0.04863499850034714</real> + <real>-0.4909220039844513</real> + </array> + <array> + <real>-0.01536799967288971</real> + <real>0.0</real> + <real>0.20487700402736664</real> + </array> + <array> + <real>0.01536799967288971</real> + <real>0.0</real> + <real>-0.20487700402736664</real> + </array> + <array> + <real>-0.01536799967288971</real> + <real>0.0</real> + <real>0.20487700402736664</real> + </array> + <array> + <real>0.0</real> + <real>-0.07941800355911255</real> + <real>0.0</real> + </array> + <array> + <real>-0.020927000790834427</real> + <real>-0.08500000089406967</real> + <real>0.16539600491523743</real> + </array> + <array> + <real>0.0</real> + <real>0.07900000363588333</real> + <real>0.0</real> + </array> + <array> + <real>-0.020927000790834427</real> + <real>0.08466500043869019</real> + <real>0.16539600491523743</real> + </array> + <array> + <real>0.0</real> + <real>-0.24799999594688416</real> + <real>0.0</real> + </array> + <array> + <real>0.0</real> + <real>0.24799999594688416</real> + <real>0.0</real> + </array> + <array> + <real>-0.00950700044631958</real> + <real>0.0</real> + <real>0.25110799074172974</real> + </array> + <array> + <real>-0.02886899933218956</real> + <real>0.0</real> + <real>-0.4684939980506897</real> + </array> + <array> + <real>-0.028886999934911728</real> + <real>0.0013780000153928995</real> + <real>-0.4684489965438843</real> + </array> + </array> + <key>pelvis_offset</key> + <real>0.0</real> + </map> + </map> + <key>wearables</key> + <array> + <array> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>7e3e76fc-7fa4-ec8f-a785-8956dbce6e72</string> + <key>contents</key> + <string>LLWearable version 22 +Fashionista Male - Shape (new) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 142 +1 0 +2 .16 +4 -.23 +5 -.1 +6 -.3 +7 0 +8 0 +10 0 +11 .04 +12 0 +13 0 +14 0 +15 0 +17 0 +18 0 +19 -.1 +20 .56 +21 .07 +22 0 +23 .42 +24 -.66 +25 .51 +26 0 +27 .02 +28 .6 +29 0 +30 0 +32 1 +33 -.41 +34 .4 +35 0 +36 -.49 +37 0 +38 .42 +40 1 +80 1 +100 1 +104 0 +105 .5 +106 0 +107 0 +151 .16 +152 0 +153 1 +155 -.13 +156 0 +157 0 +185 -.44 +186 0 +187 0 +188 0 +189 0 +193 .5 +194 -.12 +195 -.06 +196 -.59 +505 .65 +506 -.04 +507 0 +515 -.2 +517 .12 +518 -.3 +626 0 +627 0 +629 .5 +630 0 +631 0 +633 .01 +634 .01 +635 .01 +637 .01 +646 0 +647 0 +648 0 +649 .5 +650 -.67 +651 .03 +652 .49 +653 .26 +655 -.08 +656 0 +657 .03 +658 0 +659 .51 +660 0 +661 0 +662 .5 +663 -.2 +664 .13 +665 .04 +675 .03 +676 -.43 +677 .34 +678 .37 +679 -.08 +680 -.08 +681 -.08 +682 .5 +683 -.14 +684 0 +685 .14 +686 -.68 +687 -.09 +688 -.09 +689 -.34 +690 .33 +691 -.09 +692 .24 +693 .1 +694 -.08 +695 -.09 +753 .06 +756 -.08 +758 -1.05 +759 .67 +760 0 +764 -.5 +765 1.02 +767 .08 +768 .08 +769 .52 +770 0 +772 0 +773 .5 +794 0 +795 .41 +796 0 +797 .15 +798 0 +799 .45 +841 0 +842 -.8 +843 0 +853 0 +854 .06 +855 -.43 +879 -.1 +880 -.82 +1103 0 +1104 0 +1105 0 +11001 0 +textures 0 +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string /> + <key>flags</key> + <integer>256</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>8bbf11b0-b86b-3b4c-8c5c-c84902425f42</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Shape</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>573440</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>540672</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>573440</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>573440</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>13</integer> + <key>wearable_type</key> + <integer>0</integer> + </map> + </array> + <array> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>9e675544-77c0-0db6-3694-462be7460b76</string> + <key>contents</key> + <string>LLWearable version 22 +Formal Male - Skin (less old) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 37 +108 0 +110 0 +111 0 +116 0 +117 0 +118 0 +125 0 +126 0 +150 0 +158 0 +159 0 +161 0 +162 0 +163 0 +165 0 +700 .25 +701 0 +702 0 +703 0 +704 0 +705 .5 +706 .6 +707 0 +708 0 +709 0 +710 0 +711 .5 +712 0 +713 .7 +714 0 +715 0 +775 0 +776 0 +777 0 +873 0 +874 0 +878 0 +textures 3 +0 a21d4081-601e-f9f0-0acc-9192c72863dc +5 a85bf749-952d-3835-d9ac-a307c780930c +6 ab169525-d46c-918b-3195-7f2b92fd76c5 +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string /> + <key>flags</key> + <integer>257</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>9e6c5696-cae0-337e-a5c6-aa6fede08ec6</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Skin</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>13</integer> + <key>wearable_type</key> + <integer>1</integer> + </map> + </array> + <array> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>0b935621-92da-099e-a248-cfbfa3624c68</string> + <key>contents</key> + <string>LLWearable version 22 +Fashionista Male - Brows (new) + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 90 +16 .41 +31 1.04 +112 0 +113 0 +114 0 +115 0 +119 .5 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +144 1 +145 0 +146 1 +147 0 +148 1 +149 0 +166 0 +167 0 +168 0 +169 0 +171 0 +172 1 +173 0 +174 1 +175 0 +176 1 +177 0 +178 0 +179 1 +180 0 +181 -1 +182 -1 +183 -1 +184 0 +190 0 +191 0 +192 0 +400 .75 +640 -.01 +641 .2 +642 0 +643 0 +644 .24 +645 0 +674 -.3 +750 .65 +751 0 +752 .5 +754 0 +755 .05 +757 -1.6 +761 1.3 +762 0 +763 0 +771 -.08 +774 0 +782 0 +783 0 +784 0 +785 0 +786 0 +787 0 +788 0 +789 0 +790 0 +870 -.11 +871 -.4 +872 .52 +1000 .5 +1001 .5 +1002 .65 +1003 .65 +1004 0 +1005 0 +1006 0 +1007 0 +1008 0 +1009 0 +1010 0 +1011 0 +1012 .25 +textures 1 +4 3cc3add8-6ff0-0640-79ba-b15137f64008 +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string /> + <key>flags</key> + <integer>258</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>3ddd2d41-fbe4-3076-9732-c5f3b12973b1</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Brows</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>13</integer> + <key>wearable_type</key> + <integer>2</integer> + </map> + </array> + <array> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>052ca46d-9612-7a43-25a9-d7c8a5387cf6</string> + <key>contents</key> + <string>LLWearable version 22 +Fashionista Male - Eyes + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 3 +parameters 2 +98 1 +99 0 +textures 1 +3 579e320c-0f16-2a1d-2018-2a00cc657068 +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string /> + <key>flags</key> + <integer>259</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>9d4e7072-0e92-39a1-95a4-b5330450b1ee</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Eyes</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>13</integer> + <key>wearable_type</key> + <integer>3</integer> + </map> + </array> + <array> + </array> + <array> + </array> + <array> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>5f049939-bb34-ad27-66cb-38c9151a105d</string> + <key>contents</key> + <string>LLWearable version 22 +Fashionista Male - Shoe Base + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 73ecef5a-3110-4e95-92bc-da0ae7598652 + owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652 + last_owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 20 +197 0 +198 0 +500 0 +501 .1 +502 .1 +503 .1 +508 -.52 +509 1 +510 0 +511 .82 +512 0 +513 0 +514 .09 +616 .3 +654 .06 +812 1 +813 1 +817 1 +1052 .3 +1053 .3 +textures 1 +7 8dcd4a48-2d37-4909-9f78-f7a9eb4ef903 +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string>@600</string> + <key>flags</key> + <integer>262</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>dc5e279a-4a34-36ee-9075-028df446392c</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Shoes BASE</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>5</integer> + <key>wearable_type</key> + <integer>6</integer> + </map> + </array> + <array> + </array> + <array> + </array> + <array> + </array> + <array> + </array> + <array> + </array> + <array> + </array> + <array> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>ab0bd2c6-3776-7ea6-264f-102842c6328b</string> + <key>contents</key> + <string>LLWearable version 22 +Fashionista Female - Heels Alpha + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 73ecef5a-3110-4e95-92bc-da0ae7598652 + owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652 + last_owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 13 +parameters 0 +textures 5 +21 b5b09502-8305-af43-cc4e-7238cb715b11 +22 5748decc-f629-461c-9a36-a35a221fe21f +23 5748decc-f629-461c-9a36-a35a221fe21f +24 5748decc-f629-461c-9a36-a35a221fe21f +25 5748decc-f629-461c-9a36-a35a221fe21f +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string>@1300</string> + <key>flags</key> + <integer>269</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>b76dde5f-0da2-3e21-b505-d587b16ddb3c</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Shoes ALPHA</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>5</integer> + <key>wearable_type</key> + <integer>13</integer> + </map> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>cb80f44f-8265-f56b-c812-ddf729cee73b</string> + <key>contents</key> + <string>LLWearable version 22 +New Alpha + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 8b1453d6-ec45-4434-bee3-1c4d6fe1bc55 + owner_id 8b1453d6-ec45-4434-bee3-1c4d6fe1bc55 + last_owner_id 8b1453d6-ec45-4434-bee3-1c4d6fe1bc55 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 13 +parameters 0 +textures 5 +21 d9413239-769d-abc9-e929-4fa98f52c07b +22 b5d465f9-ca8e-8ba4-efd8-ee8929c592b8 +23 5748decc-f629-461c-9a36-a35a221fe21f +24 5748decc-f629-461c-9a36-a35a221fe21f +25 5748decc-f629-461c-9a36-a35a221fe21f +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string>@1301</string> + <key>flags</key> + <integer>269</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>efc7da55-02ba-3286-8458-780aede51b49</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>Leonard - Suit Alpha</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>5</integer> + <key>wearable_type</key> + <integer>13</integer> + </map> + <map> + <key>agent_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>asset_id</key> + <string>f235a6a9-062a-bb40-46c2-c8a7bec95fbf</string> + <key>contents</key> + <string>LLWearable version 22 +System Eyelash Remover + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 13 +parameters 0 +textures 5 +21 5748decc-f629-461c-9a36-a35a221fe21f +22 5748decc-f629-461c-9a36-a35a221fe21f +23 9e460914-daed-b03f-0f2a-afbe67833b11 +24 5748decc-f629-461c-9a36-a35a221fe21f +25 5748decc-f629-461c-9a36-a35a221fe21f +</string> + <key>created_at</key> + <integer>1724256027</integer> + <key>desc</key> + <string>@1302</string> + <key>flags</key> + <integer>269</integer> + <key>inv_type</key> + <integer>18</integer> + <key>item_id</key> + <string>624f9c12-72e8-3409-a3f3-b3fe8f496b13</string> + <key>metadata</key> + <map> + </map> + <key>name</key> + <string>System Eyelash Remover</string> + <key>parent_id</key> + <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string> + <key>permissions</key> + <map> + <key>base_mask</key> + <integer>557056</integer> + <key>creator_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>everyone_mask</key> + <integer>524288</integer> + <key>group_id</key> + <string>00000000-0000-0000-0000-000000000000</string> + <key>group_mask</key> + <integer>524288</integer> + <key>last_owner_id</key> + <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string> + <key>next_owner_mask</key> + <integer>557056</integer> + <key>owner_id</key> + <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string> + <key>owner_mask</key> + <integer>557056</integer> + </map> + <key>sale_info</key> + <map> + <key>sale_price</key> + <integer>10</integer> + <key>sale_type</key> + <integer>0</integer> + </map> + <key>type</key> + <integer>5</integer> + <key>wearable_type</key> + <integer>13</integer> + </map> + </array> + <array> + </array> + <array> + </array> + <array> + </array> + </array> + </map> +</llsd> diff --git a/indra/llappearanceutility/tests/params.xml.output b/indra/llappearanceutility/tests/params.xml.output new file mode 100644 index 0000000000..58449dd37a --- /dev/null +++ b/indra/llappearanceutility/tests/params.xml.output @@ -0,0 +1 @@ +<llsd><map><key>avatar_scale</key><array><real>0.449999988079071044921875</real><real>0.60000002384185791015625</real><real>1.76146829128265380859375</real></array><key>debug_params</key><map><key>1</key><map><key>name</key><string>big_brow</string><key>value</key><real>0</real><key>weight</key><integer>33</integer></map><key>10</key><map><key>name</key><string>sunken_cheeks</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>10000</key><map><key>name</key><string>breast_physics_mass</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>10001</key><map><key>name</key><string>breast_physics_gravity</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10002</key><map><key>name</key><string>breast_physics_drag</string><key>value</key><real>1</real><key>weight</key><integer>25</integer></map><key>10003</key><map><key>name</key><string>breast_physics_updown_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10004</key><map><key>name</key><string>breast_physics_updown_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10005</key><map><key>name</key><string>breast_physics_updown_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10006</key><map><key>name</key><string>breast_physics_updown_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10007</key><map><key>name</key><string>breast_physics_inout_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10008</key><map><key>name</key><string>breast_physics_inout_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10009</key><map><key>name</key><string>breast_physics_inout_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10010</key><map><key>name</key><string>breast_physics_inout_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10011</key><map><key>name</key><string>belly_physics_mass</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>10012</key><map><key>name</key><string>belly_physics_gravity</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10013</key><map><key>name</key><string>belly_physics_drag</string><key>value</key><real>1</real><key>weight</key><integer>25</integer></map><key>10014</key><map><key>name</key><string>belly_physics_updown_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10015</key><map><key>name</key><string>belly_physics_updown_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10016</key><map><key>name</key><string>belly_physics_updown_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10017</key><map><key>name</key><string>belly_physics_updown_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10018</key><map><key>name</key><string>butt_physics_mass</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>10019</key><map><key>name</key><string>butt_physics_gravity</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10020</key><map><key>name</key><string>butt_physics_drag</string><key>value</key><real>1</real><key>weight</key><integer>25</integer></map><key>10021</key><map><key>name</key><string>butt_physics_updown_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10022</key><map><key>name</key><string>butt_physics_updown_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10023</key><map><key>name</key><string>butt_physics_updown_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10024</key><map><key>name</key><string>butt_physics_updown_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10025</key><map><key>name</key><string>butt_physics_leftright_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10026</key><map><key>name</key><string>butt_physics_leftright_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10027</key><map><key>name</key><string>butt_physics_leftright_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10028</key><map><key>name</key><string>butt_physics_leftright_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10029</key><map><key>name</key><string>breast_physics_leftright_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10030</key><map><key>name</key><string>breast_physics_leftright_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10031</key><map><key>name</key><string>breast_physics_leftright_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10032</key><map><key>name</key><string>breast_physics_leftright_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>105</key><map><key>name</key><string>breast size</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>108</key><map><key>name</key><string>rainbow color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>11</key><map><key>name</key><string>noble_nose_bridge</string><key>value</key><real>0.03999999910593032836914062</real><key>weight</key><integer>68</integer></map><key>110</key><map><key>name</key><string>red skin</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>11000</key><map><key>name</key><string>appearancemessage_version</string><key>value</key><real>1</real><key>weight</key><integer>1</integer></map><key>11001</key><map><key>name</key><string>hover</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>111</key><map><key>name</key><string>pigment</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>112</key><map><key>name</key><string>rainbow color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>113</key><map><key>name</key><string>red hair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>114</key><map><key>name</key><string>blonde hair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>115</key><map><key>name</key><string>white hair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>116</key><map><key>name</key><string>rosy complexion</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>117</key><map><key>name</key><string>lip pinkness</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>119</key><map><key>name</key><string>eyebrow size</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>12</key><map><key>name</key><string>jowls</string><key>value</key><real>0</real><key>weight</key><integer>42</integer></map><key>13</key><map><key>name</key><string>cleft_chin_upper</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>130</key><map><key>name</key><string>front fringe</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>131</key><map><key>name</key><string>side fringe</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>132</key><map><key>name</key><string>back fringe</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>133</key><map><key>name</key><string>hair front</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>134</key><map><key>name</key><string>hair sides</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>135</key><map><key>name</key><string>hair back</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>136</key><map><key>name</key><string>hair sweep</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>137</key><map><key>name</key><string>hair tilt</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>14</key><map><key>name</key><string>high_cheek_bones</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>140</key><map><key>name</key><string>hair_part_middle</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>141</key><map><key>name</key><string>hair_part_right</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>142</key><map><key>name</key><string>hair_part_left</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>143</key><map><key>name</key><string>hair_sides_full</string><key>value</key><real>-4</real><key>weight</key><integer>0</integer></map><key>15</key><map><key>name</key><string>ears_out</string><key>value</key><real>0</real><key>weight</key><integer>63</integer></map><key>150</key><map><key>name</key><string>body definition</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>155</key><map><key>name</key><string>lip width</string><key>value</key><real>-0.12999999523162841796875</real><key>weight</key><integer>89</integer></map><key>157</key><map><key>name</key><string>belly size</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>16</key><map><key>name</key><string>pointy_eyebrows</string><key>value</key><real>0.4099999964237213134765625</real><key>weight</key><integer>66</integer></map><key>162</key><map><key>name</key><string>facial definition</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>163</key><map><key>name</key><string>wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>165</key><map><key>name</key><string>freckles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>166</key><map><key>name</key><string>sideburns</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>167</key><map><key>name</key><string>moustache</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>168</key><map><key>name</key><string>soulpatch</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>169</key><map><key>name</key><string>chin curtains</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>17</key><map><key>name</key><string>square_jaw</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>177</key><map><key>name</key><string>hair_rumpled</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>18</key><map><key>name</key><string>puffy_upper_cheeks</string><key>value</key><real>0</real><key>weight</key><integer>95</integer></map><key>181</key><map><key>name</key><string>hair_big_front</string><key>value</key><real>-1</real><key>weight</key><integer>0</integer></map><key>182</key><map><key>name</key><string>hair_big_top</string><key>value</key><real>-1</real><key>weight</key><integer>0</integer></map><key>183</key><map><key>name</key><string>hair_big_back</string><key>value</key><real>-1</real><key>weight</key><integer>0</integer></map><key>184</key><map><key>name</key><string>hair_spiked</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>185</key><map><key>name</key><string>deep_chin</string><key>value</key><real>-0.439999997615814208984375</real><key>weight</key><integer>71</integer></map><key>19</key><map><key>name</key><string>upturned_nose_tip</string><key>value</key><real>-0.1000000014901161193847656</real><key>weight</key><integer>142</integer></map><key>192</key><map><key>name</key><string>bangs_part_middle</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>193</key><map><key>name</key><string>head shape</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>196</key><map><key>name</key><string>eye spacing</string><key>value</key><real>-0.589999973773956298828125</real><key>weight</key><integer>119</integer></map><key>198</key><map><key>name</key><string>heel height</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>2</key><map><key>name</key><string>nose_big_out</string><key>value</key><real>0.1599999964237213134765625</real><key>weight</key><integer>74</integer></map><key>20</key><map><key>name</key><string>bulbous_nose</string><key>value</key><real>0.560000002384185791015625</real><key>weight</key><integer>135</integer></map><key>21</key><map><key>name</key><string>upper_eyelid_fold</string><key>value</key><real>0.07000000029802322387695312</real><key>weight</key><integer>45</integer></map><key>22</key><map><key>name</key><string>attached_earlobes</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>23</key><map><key>name</key><string>baggy_eyes</string><key>value</key><real>0.4199999868869781494140625</real><key>weight</key><integer>117</integer></map><key>24</key><map><key>name</key><string>wide_eyes</string><key>value</key><real>-0.660000026226043701171875</real><key>weight</key><integer>61</integer></map><key>25</key><map><key>name</key><string>wide_lip_cleft</string><key>value</key><real>0.5099999904632568359375</real><key>weight</key><integer>145</integer></map><key>27</key><map><key>name</key><string>wide_nose_bridge</string><key>value</key><real>0.01999999955296516418457031</real><key>weight</key><integer>134</integer></map><key>31</key><map><key>name</key><string>arced_eyebrows</string><key>value</key><real>1.03999996185302734375</real><key>weight</key><integer>132</integer></map><key>33</key><map><key>name</key><string>height</string><key>value</key><real>-0.4099999964237213134765625</real><key>weight</key><integer>112</integer></map><key>34</key><map><key>name</key><string>thickness</string><key>value</key><real>0.4000000059604644775390625</real><key>weight</key><integer>127</integer></map><key>35</key><map><key>name</key><string>big_ears</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>36</key><map><key>name</key><string>shoulders</string><key>value</key><real>-0.4900000095367431640625</real><key>weight</key><integer>104</integer></map><key>37</key><map><key>name</key><string>hip width</string><key>value</key><real>0</real><key>weight</key><integer>136</integer></map><key>38</key><map><key>name</key><string>torso length</string><key>value</key><real>0.4199999868869781494140625</real><key>weight</key><integer>181</integer></map><key>4</key><map><key>name</key><string>broad_nostrils</string><key>value</key><real>-0.2300000041723251342773438</real><key>weight</key><integer>45</integer></map><key>5</key><map><key>name</key><string>cleft_chin</string><key>value</key><real>-0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>503</key><map><key>name</key><string>platform height</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>25</integer></map><key>505</key><map><key>name</key><string>lip thickness</string><key>value</key><real>0.64999997615814208984375</real><key>weight</key><integer>165</integer></map><key>506</key><map><key>name</key><string>mouth_height</string><key>value</key><real>-0.03999999910593032836914062</real><key>weight</key><integer>124</integer></map><key>507</key><map><key>name</key><string>breast_gravity</string><key>value</key><real>0</real><key>weight</key><integer>109</integer></map><key>508</key><map><key>name</key><string>shoe_platform_width</string><key>value</key><real>-0.519999980926513671875</real><key>weight</key><integer>40</integer></map><key>513</key><map><key>name</key><string>heel shape</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>514</key><map><key>name</key><string>toe shape</string><key>value</key><real>0.0900000035762786865234375</real><key>weight</key><integer>22</integer></map><key>515</key><map><key>name</key><string>foot_size</string><key>value</key><real>-0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>517</key><map><key>name</key><string>wide_nose</string><key>value</key><real>0.1199999973177909851074219</real><key>weight</key><integer>105</integer></map><key>518</key><map><key>name</key><string>eyelashes_long</string><key>value</key><real>-0.300000011920928955078125</real><key>weight</key><integer>0</integer></map><key>6</key><map><key>name</key><string>bulbous_nose_tip</string><key>value</key><real>-0.300000011920928955078125</real><key>weight</key><integer>0</integer></map><key>603</key><map><key>name</key><string>sleeve length</string><key>value</key><real>0.4000000059604644775390625</real><key>weight</key><integer>100</integer></map><key>604</key><map><key>name</key><string>bottom</string><key>value</key><real>0.85000002384185791015625</real><key>weight</key><integer>216</integer></map><key>605</key><map><key>name</key><string>collar front</string><key>value</key><real>0.839999973773956298828125</real><key>weight</key><integer>214</integer></map><key>606</key><map><key>name</key><string>sleeve length</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>607</key><map><key>name</key><string>collar front</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>608</key><map><key>name</key><string>bottom length lower</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>609</key><map><key>name</key><string>open jacket</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>616</key><map><key>name</key><string>shoe height</string><key>value</key><real>0.300000011920928955078125</real><key>weight</key><integer>76</integer></map><key>617</key><map><key>name</key><string>socks length</string><key>value</key><real>0.3499999940395355224609375</real><key>weight</key><integer>89</integer></map><key>619</key><map><key>name</key><string>pants length</string><key>value</key><real>0.300000011920928955078125</real><key>weight</key><integer>76</integer></map><key>624</key><map><key>name</key><string>pants waist</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>625</key><map><key>name</key><string>leg_pantflair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>629</key><map><key>name</key><string>forehead angle</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>637</key><map><key>name</key><string>body fat</string><key>value</key><real>0.009999999776482582092285156</real><key>weight</key><integer>2</integer></map><key>638</key><map><key>name</key><string>low_crotch</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>646</key><map><key>name</key><string>egg_head</string><key>value</key><real>0</real><key>weight</key><integer>144</integer></map><key>647</key><map><key>name</key><string>squash_stretch_head</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>649</key><map><key>name</key><string>torso muscles</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>650</key><map><key>name</key><string>eyelid_corner_up</string><key>value</key><real>-0.670000016689300537109375</real><key>weight</key><integer>64</integer></map><key>652</key><map><key>name</key><string>leg muscles</string><key>value</key><real>0.4900000095367431640625</real><key>weight</key><integer>124</integer></map><key>653</key><map><key>name</key><string>tall_lips</string><key>value</key><real>0.2599999904632568359375</real><key>weight</key><integer>107</integer></map><key>654</key><map><key>name</key><string>shoe_toe_thick</string><key>value</key><real>0.05999999865889549255371094</real><key>weight</key><integer>7</integer></map><key>656</key><map><key>name</key><string>crooked_nose</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>659</key><map><key>name</key><string>mouth corner</string><key>value</key><real>0.5099999904632568359375</real><key>weight</key><integer>130</integer></map><key>662</key><map><key>name</key><string>face shear</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>663</key><map><key>name</key><string>shift_mouth</string><key>value</key><real>-0.2000000029802322387695312</real><key>weight</key><integer>114</integer></map><key>664</key><map><key>name</key><string>pop_eye</string><key>value</key><real>0.12999999523162841796875</real><key>weight</key><integer>140</integer></map><key>665</key><map><key>name</key><string>jaw_jut</string><key>value</key><real>0.03999999910593032836914062</real><key>weight</key><integer>130</integer></map><key>674</key><map><key>name</key><string>hair_shear_back</string><key>value</key><real>-0.300000011920928955078125</real><key>weight</key><integer>59</integer></map><key>675</key><map><key>name</key><string>hand size</string><key>value</key><real>0.02999999932944774627685547</real><key>weight</key><integer>140</integer></map><key>676</key><map><key>name</key><string>love_handles</string><key>value</key><real>-0.430000007152557373046875</real><key>weight</key><integer>48</integer></map><key>678</key><map><key>name</key><string>torso muscles</string><key>value</key><real>0.37000000476837158203125</real><key>weight</key><integer>94</integer></map><key>682</key><map><key>name</key><string>head size</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>683</key><map><key>name</key><string>neck thickness</string><key>value</key><real>-0.1400000005960464477539062</real><key>weight</key><integer>110</integer></map><key>684</key><map><key>name</key><string>breast_female_cleavage</string><key>value</key><real>0</real><key>weight</key><integer>47</integer></map><key>685</key><map><key>name</key><string>chest_male_no_pecs</string><key>value</key><real>0.1400000005960464477539062</real><key>weight</key><integer>101</integer></map><key>690</key><map><key>name</key><string>eye size</string><key>value</key><real>0.3300000131130218505859375</real><key>weight</key><integer>84</integer></map><key>692</key><map><key>name</key><string>leg length</string><key>value</key><real>0.2399999946355819702148438</real><key>weight</key><integer>158</integer></map><key>693</key><map><key>name</key><string>arm length</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>140</integer></map><key>7</key><map><key>name</key><string>weak_chin</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>700</key><map><key>name</key><string>lipstick color</string><key>value</key><real>0.25</real><key>weight</key><integer>63</integer></map><key>701</key><map><key>name</key><string>lipstick</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>702</key><map><key>name</key><string>lipgloss</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>703</key><map><key>name</key><string>eyeliner</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>704</key><map><key>name</key><string>blush</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>705</key><map><key>name</key><string>blush color</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>706</key><map><key>name</key><string>out shdw opacity</string><key>value</key><real>0.60000002384185791015625</real><key>weight</key><integer>127</integer></map><key>707</key><map><key>name</key><string>outer shadow</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>708</key><map><key>name</key><string>out shdw color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>709</key><map><key>name</key><string>inner shadow</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>710</key><map><key>name</key><string>nail polish</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>711</key><map><key>name</key><string>blush opacity</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>712</key><map><key>name</key><string>in shdw color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>713</key><map><key>name</key><string>in shdw opacity</string><key>value</key><real>0.699999988079071044921875</real><key>weight</key><integer>159</integer></map><key>714</key><map><key>name</key><string>eyeliner color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>715</key><map><key>name</key><string>nail polish color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>750</key><map><key>name</key><string>eyebrow density</string><key>value</key><real>0.64999997615814208984375</real><key>weight</key><integer>165</integer></map><key>752</key><map><key>name</key><string>hair thickness</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>753</key><map><key>name</key><string>saddlebags</string><key>value</key><real>0.05999999865889549255371094</real><key>weight</key><integer>40</integer></map><key>754</key><map><key>name</key><string>hair_taper_back</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>755</key><map><key>name</key><string>hair_taper_front</string><key>value</key><real>0.05000000074505805969238281</real><key>weight</key><integer>131</integer></map><key>756</key><map><key>name</key><string>neck length</string><key>value</key><real>-0.07999999821186065673828125</real><key>weight</key><integer>117</integer></map><key>757</key><map><key>name</key><string>lower_eyebrows</string><key>value</key><real>-1.60000002384185791015625</real><key>weight</key><integer>102</integer></map><key>758</key><map><key>name</key><string>lower_bridge_nose</string><key>value</key><real>-1.0499999523162841796875</real><key>weight</key><integer>38</integer></map><key>759</key><map><key>name</key><string>low_septum_nose</string><key>value</key><real>0.670000016689300537109375</real><key>weight</key><integer>170</integer></map><key>760</key><map><key>name</key><string>jaw_angle</string><key>value</key><real>0</real><key>weight</key><integer>95</integer></map><key>762</key><map><key>name</key><string>hair_shear_front</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>763</key><map><key>name</key><string>hair volume</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>764</key><map><key>name</key><string>lip_cleft_deep</string><key>value</key><real>-0.5</real><key>weight</key><integer>0</integer></map><key>765</key><map><key>name</key><string>puffy_lower_lids</string><key>value</key><real>1.019999980926513671875</real><key>weight</key><integer>120</integer></map><key>769</key><map><key>name</key><string>eye depth</string><key>value</key><real>0.519999980926513671875</real><key>weight</key><integer>132</integer></map><key>773</key><map><key>name</key><string>head length</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>775</key><map><key>name</key><string>body freckles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>779</key><map><key>name</key><string>collar back</string><key>value</key><real>0.839999973773956298828125</real><key>weight</key><integer>214</integer></map><key>780</key><map><key>name</key><string>collar back</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>781</key><map><key>name</key><string>collar back</string><key>value</key><real>0.7799999713897705078125</real><key>weight</key><integer>198</integer></map><key>785</key><map><key>name</key><string>pigtails</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>789</key><map><key>name</key><string>ponytail</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>795</key><map><key>name</key><string>butt size</string><key>value</key><real>0.4099999964237213134765625</real><key>weight</key><integer>104</integer></map><key>796</key><map><key>name</key><string>pointy_ears</string><key>value</key><real>0</real><key>weight</key><integer>30</integer></map><key>799</key><map><key>name</key><string>lip ratio</string><key>value</key><real>0.449999988079071044921875</real><key>weight</key><integer>114</integer></map><key>8</key><map><key>name</key><string>double_chin</string><key>value</key><real>0</real><key>weight</key><integer>63</integer></map><key>80</key><map><key>name</key><string>male</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>800</key><map><key>name</key><string>sleeve length</string><key>value</key><real>0.88999998569488525390625</real><key>weight</key><integer>226</integer></map><key>801</key><map><key>name</key><string>shirt bottom</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>802</key><map><key>name</key><string>collar front</string><key>value</key><real>0.7799999713897705078125</real><key>weight</key><integer>198</integer></map><key>803</key><map><key>name</key><string>shirt_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>804</key><map><key>name</key><string>shirt_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>805</key><map><key>name</key><string>shirt_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>806</key><map><key>name</key><string>pants_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>807</key><map><key>name</key><string>pants_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>808</key><map><key>name</key><string>pants_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>812</key><map><key>name</key><string>shoes_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>813</key><map><key>name</key><string>shoes_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>814</key><map><key>name</key><string>waist height</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>815</key><map><key>name</key><string>pants length</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>816</key><map><key>name</key><string>loose lower clothing</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>817</key><map><key>name</key><string>shoes_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>818</key><map><key>name</key><string>socks_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>819</key><map><key>name</key><string>socks_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>820</key><map><key>name</key><string>socks_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>821</key><map><key>name</key><string>undershirt_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>822</key><map><key>name</key><string>undershirt_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>823</key><map><key>name</key><string>undershirt_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>824</key><map><key>name</key><string>underpants_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>825</key><map><key>name</key><string>underpants_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>826</key><map><key>name</key><string>underpants_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>827</key><map><key>name</key><string>gloves_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>828</key><map><key>name</key><string>loose upper clothing</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>829</key><map><key>name</key><string>gloves_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>830</key><map><key>name</key><string>gloves_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>834</key><map><key>name</key><string>jacket_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>835</key><map><key>name</key><string>jacket_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>836</key><map><key>name</key><string>jacket_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>840</key><map><key>name</key><string>shirtsleeve_flair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>841</key><map><key>name</key><string>bowed_legs</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>842</key><map><key>name</key><string>hip length</string><key>value</key><real>-0.800000011920928955078125</real><key>weight</key><integer>25</integer></map><key>844</key><map><key>name</key><string>glove fingers</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>848</key><map><key>name</key><string>skirt_bustle</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>25</integer></map><key>858</key><map><key>name</key><string>skirt length</string><key>value</key><real>0.4000000059604644775390625</real><key>weight</key><integer>100</integer></map><key>859</key><map><key>name</key><string>slit front</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>860</key><map><key>name</key><string>slit back</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>861</key><map><key>name</key><string>slit left</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>862</key><map><key>name</key><string>slit right</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>863</key><map><key>name</key><string>skirt_looseness</string><key>value</key><real>0.333000004291534423828125</real><key>weight</key><integer>84</integer></map><key>868</key><map><key>name</key><string>shirt wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>869</key><map><key>name</key><string>pants wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>877</key><map><key>name</key><string>jacket wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>879</key><map><key>name</key><string>male_package</string><key>value</key><real>-0.1000000014901161193847656</real><key>weight</key><integer>40</integer></map><key>880</key><map><key>name</key><string>eyelid_inner_corner_up</string><key>value</key><real>-0.819999992847442626953125</real><key>weight</key><integer>48</integer></map><key>921</key><map><key>name</key><string>skirt_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>922</key><map><key>name</key><string>skirt_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>923</key><map><key>name</key><string>skirt_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>93</key><map><key>name</key><string>glove length</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>203</integer></map><key>98</key><map><key>name</key><string>eye lightness</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>99</key><map><key>name</key><string>eye color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map></map><key>dump_joint_offsets</key><array><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mPelvis</string><key>pos</key><array><real>0</real><real>0</real><real>1.08198797702789306640625</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine1</string><key>pos</key><array><real>0</real><real>0</real><real>0.08407299965620040893554688</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine2</string><key>pos</key><array><real>0</real><real>0</real><real>-0.08407299965620040893554688</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mTorso</string><key>pos</key><array><real>0</real><real>0</real><real>0.08407299965620040893554688</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine3</string><key>pos</key><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine4</string><key>pos</key><array><real>0.01536799967288970947265625</real><real>0</real><real>-0.2048770040273666381835938</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mChest</string><key>pos</key><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mNeck</string><key>pos</key><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mCollarLeft</string><key>pos</key><array><real>-0.02092700079083442687988281</real><real>0.084665000438690185546875</real><real>0.1653960049152374267578125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mShoulderLeft</string><key>pos</key><array><real>0</real><real>0.07900000363588333129882812</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mElbowLeft</string><key>pos</key><array><real>0</real><real>0.2479999959468841552734375</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mCollarRight</string><key>pos</key><array><real>-0.02092700079083442687988281</real><real>-0.08500000089406967163085938</real><real>0.1653960049152374267578125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mShoulderRight</string><key>pos</key><array><real>0</real><real>-0.079418003559112548828125</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mElbowRight</string><key>pos</key><array><real>0</real><real>-0.2479999959468841552734375</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mHipRight</string><key>pos</key><array><real>0.03361999988555908203125</real><real>-0.12880599498748779296875</real><real>-0.04108599945902824401855469</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mKneeRight</string><key>pos</key><array><real>-0.000780000002123415470123291</real><real>0.04863499850034713745117188</real><real>-0.4909220039844512939453125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mAnkleRight</string><key>pos</key><array><real>-0.02886899933218955993652344</real><real>0</real><real>-0.468493998050689697265625</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mHipLeft</string><key>pos</key><array><real>0.0337570011615753173828125</real><real>0.1267649978399276733398438</real><real>-0.04099800065159797668457031</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mKneeLeft</string><key>pos</key><array><real>-0.0008870000019669532775878906</real><real>-0.04556800052523612976074219</real><real>-0.49105298519134521484375</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mAnkleLeft</string><key>pos</key><array><real>-0.02888699993491172790527344</real><real>0.001378000015392899513244629</real><real>-0.46844899654388427734375</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mTail1</string><key>pos</key><array><real>-0.127954006195068359375</real><real>0</real><real>0.001858999952673912048339844</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mTail2</string><key>pos</key><array><real>-0.01885000057518482208251953</real><real>0</real><real>-0.094934999942779541015625</real></array></map></array><key>params</key><array><integer>33</integer><integer>74</integer><integer>45</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>63</integer><integer>85</integer><integer>68</integer><integer>42</integer><integer>0</integer><integer>85</integer><integer>63</integer><integer>66</integer><integer>85</integer><integer>95</integer><integer>142</integer><integer>135</integer><integer>45</integer><integer>0</integer><integer>117</integer><integer>61</integer><integer>145</integer><integer>134</integer><integer>132</integer><integer>112</integer><integer>127</integer><integer>85</integer><integer>104</integer><integer>136</integer><integer>181</integer><integer>255</integer><integer>203</integer><integer>255</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>89</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>71</integer><integer>0</integer><integer>127</integer><integer>119</integer><integer>0</integer><integer>25</integer><integer>165</integer><integer>124</integer><integer>109</integer><integer>40</integer><integer>0</integer><integer>22</integer><integer>51</integer><integer>105</integer><integer>0</integer><integer>100</integer><integer>216</integer><integer>214</integer><integer>204</integer><integer>204</integer><integer>204</integer><integer>51</integer><integer>76</integer><integer>89</integer><integer>76</integer><integer>204</integer><integer>0</integer><integer>127</integer><integer>2</integer><integer>0</integer><integer>144</integer><integer>85</integer><integer>127</integer><integer>64</integer><integer>124</integer><integer>107</integer><integer>7</integer><integer>127</integer><integer>130</integer><integer>127</integer><integer>114</integer><integer>140</integer><integer>130</integer><integer>59</integer><integer>140</integer><integer>48</integer><integer>94</integer><integer>127</integer><integer>110</integer><integer>47</integer><integer>101</integer><integer>84</integer><integer>158</integer><integer>140</integer><integer>63</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>159</integer><integer>0</integer><integer>0</integer><integer>165</integer><integer>127</integer><integer>40</integer><integer>85</integer><integer>131</integer><integer>117</integer><integer>102</integer><integer>38</integer><integer>170</integer><integer>95</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>120</integer><integer>132</integer><integer>127</integer><integer>0</integer><integer>214</integer><integer>204</integer><integer>198</integer><integer>0</integer><integer>0</integer><integer>104</integer><integer>30</integer><integer>114</integer><integer>226</integer><integer>255</integer><integer>198</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>204</integer><integer>0</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>0</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>0</integer><integer>127</integer><integer>25</integer><integer>255</integer><integer>25</integer><integer>100</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>84</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>40</integer><integer>48</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>0</integer><integer>0</integer><integer>25</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>0</integer><integer>25</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>0</integer><integer>25</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>1</integer><integer>127</integer></array><key>slot_textures</key><map><key>aux1</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>aux2</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>aux3</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>eyes</key><map><key>hash_id</key><uuid>812bffac-704c-d4bb-487d-0674ccbd5d9d</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>579e320c-0f16-2a1d-2018-2a00cc657068</uuid></array></map><key>hair</key><map><key>hash_id</key><uuid>fc7ad735-99b6-aaf1-a1bf-676ea304b624</uuid><key>texture_ids</key><array><uuid>3cc3add8-6ff0-0640-79ba-b15137f64008</uuid><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid></array></map><key>head</key><map><key>hash_id</key><uuid>799f44a9-82ec-78bd-7800-3e17367229fa</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>9e460914-daed-b03f-0f2a-afbe67833b11</uuid><uuid>a21d4081-601e-f9f0-0acc-9192c72863dc</uuid></array></map><key>leftarm</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>leftleg</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>lower</key><map><key>hash_id</key><uuid>6d752c11-c33a-43c4-8631-3f8a6722ba59</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>8dcd4a48-2d37-4909-9f78-f7a9eb4ef903</uuid><uuid>ab169525-d46c-918b-3195-7f2b92fd76c5</uuid><uuid>b5b09502-8305-af43-cc4e-7238cb715b11</uuid><uuid>d9413239-769d-abc9-e929-4fa98f52c07b</uuid></array></map><key>skirt</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>upper</key><map><key>hash_id</key><uuid>5b4d5c23-3073-26d1-8d68-78d5bfa308e4</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>a85bf749-952d-3835-d9ac-a307c780930c</uuid><uuid>b5d465f9-ca8e-8ba4-efd8-ee8929c592b8</uuid></array></map></map><key>success</key><boolean>1</boolean></map></llsd> diff --git a/indra/llappearanceutility/tests/texture.llsd.binary b/indra/llappearanceutility/tests/texture.llsd.binary Binary files differnew file mode 100644 index 0000000000..6b4f34831c --- /dev/null +++ b/indra/llappearanceutility/tests/texture.llsd.binary diff --git a/indra/llappearanceutility/tests/texture.llsd.output b/indra/llappearanceutility/tests/texture.llsd.output Binary files differnew file mode 100644 index 0000000000..6c7690decc --- /dev/null +++ b/indra/llappearanceutility/tests/texture.llsd.output diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index ad31921c05..4c0fa6df1c 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -34,7 +34,6 @@ #define GL_GLEXT_PROTOTYPES 1 #include "GL/gl.h" #include "GL/glext.h" -#include "GL/glu.h" // The __APPLE__ kludge is to make glh_extensions.h not symbol-clash horribly # define __APPLE__ @@ -56,7 +55,6 @@ # include "GL/glx.h" # include "GL/glxext.h" - #elif LL_WINDOWS //---------------------------------------------------------------------------- // LL_WINDOWS diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 97ea6f67bd..e319816377 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1053,7 +1053,11 @@ U32 type_width_from_pixtype(U32 pixtype) bool should_stagger_image_set(bool compressed) { -#if LL_DARWIN +#if LL_MESA_HEADLESS + return false; +#elif LL_LINUX + return !compressed && on_main_thread() && gGLManager.mIsNVIDIA; +#elif LL_DARWIN return !compressed && on_main_thread() && gGLManager.mIsAMD; #else // glTexSubImage2D doesn't work with compressed textures on select tested Nvidia GPUs on Windows 10 -Cosmic,2023-03-08 |
